Ask HN: Why hasn't the email client been reinvented lately? - dc-tech-fan

For a tool we are all required to use but hate using, I'm surprised there haven't been huge improvements in email clients since Google introduced Gmail 10 years ago.
There have only been small features added over time, like inline attachment viewing, and minor UI tweaks, like matching OS UI trends, but for the most part it's the same Outlook, Apple Mail, Gmail, etc as we had 10 years ago: a bunch of folders, a single column for the inbox, a box to read or write mail, some icons to delete, forward, reply, etc.
There are plugins, like ActiveInbox and Rapportive, but these can be kludgy or not well integrated, especially now that we expect to be able to seamless jump from desktop to mobile email.
Am I alone in expecting a significantly better experience from my email client than where we were 10 years ago?
Is there somebody out there working on a new type of email client? <comment><AUTHOR> I seems like you're restricting yourself to graphical clients, ruling out the (minor) changes introduced by things such as notmuch, etc.

At the end of the day what people do with email is very much the same as it was 20 years ago:

* Send it.

* Read it.

On that basis there's little innovation that seems missing, unless you're thinking of something special?

Me? I like console mail clients, so I wrote one with built-in scripting via lua. It makes me happy, but it'll never take over the world:

[http://lumail.org/](http://lumail.org/)

I suspect my next task is to try something graphical, but I'm in no rush.

</comment><comment><USER2> First, I disagree that we don't have today a "significantly better experience" with e-mail than we did 10 years ago. Gmail was not even available 10 years ago [0]. Do you remember what Outlook, Yahoo and Hotmail were like back then? There's a reason GMail was able to scoop up a massive market share. There hasn't been a complete paradigm shift, if that's what you mean, but I don't feel it has been necessary.

Second, I don't "hate using" e-mail and I don't feel that I am alone in that.

Your basic argument boils down to saying that e-mail is broken, but I don't agree with that premise.

[0] [http://en.wikipedia.org/wiki/Gmail](http://en.wikipedia.org/wiki/Gmail)

</comment><comment><USER3> In the late 90's it was said that Venture Capitalists wouldn't give a dime to anyone who competed with Microsoft. Today, VC's don't want to give money to any company that competes with Google.

Google has a good product with several competitive advantages. gmail has great deliverability, you can easily join mailing lists from gmail which could exclude you if you were hosting from your_name.com. It handles large mail spools with ease because it uses parallel programming tricks. Perhaps when you boot it, it runs a quick Map/Reduce job to build an in-memory index to support all the searching and sorting you do.

I quit Thunderbird a few years ago because it just couldn't cope. It would overload, it would fail and get corrupted and I couldn't live with that. I was using Outlook at work so I switched to Windows Live Mail, which held up pretty well to the load.

With Live Mail I had two problems. First, People often couldn't read my attachments. The other was that I felt overwhelmed with the various categories of mail I was getting. Some of this was spam, but a lot of it wasn't, such as receipts when I made transactions, newsletter subscriptions, etc.

That really got me to gmail, which goes a long ways to relieve that overload.

Any product has to make decision about client-server components; I can read my gmail anywhere, and that is a big plus.

Some people imagine a massed up Outlook or Thunderbird with 64 bit addressing and designed to make the most of multicore processors and large RAM and SSD disks. The trouble is that most corporations don't give out good laptops so you can't sell this to large numbers of salespeople unless you bundle it with the hardware.

The excitement in the client world is really on the other end, you could shoehorn it into a tablet and they even have octo-core phones so maybe you can go somewhat far, but the work is going to all be in super-efficiency and managing differences between tablet platforms.

No matter what a big part of the intellectual work is some system that maintains document storage full-text index, metadata index, contact book etc. I'd like to see this subsystem reusable so that it could be used to handle other sort of document collections.

If you move the database away from the client to the server, you lose many big differentiations against gmail. (ex. You can physically destroy your mail spool if it is on your laptop, who knows who can grab it from the firm you work for. On the other hand, industrial spies can grab a laptop from out in front of you, and if you didn't encrypt the volume, they have your mail spool.)

Move the database to the "cloud" and then you are head-to-head with gmail and the advantage they have is a lot more data. It's much easier for them to know what a "discussion group", a "promotion", or a "update" is than it would be for you to do it.

Some kind of CRM functionality could be a big plus. The idea is to put structure in the communications so that there could be much more automation and also teamwork in that you can hand off the job to someone else and have people held accountable if it doesn't happen.

I think people hate CRM, Project Management and those kind of tools worse than they hate e-mail, so a "business process automation construction set" might be big success if someone can find a way to make it fun.

<comment><USER3> See reddit

[http://www.reddit.com/r/programming/comments/20fmbu/ask_hn_w...](http://www.reddit.com/r/programming/comments/20fmbu/ask_hn_why_hasnt_the_email_client_been_reinvented/)</comment></comment>


Tracing a DNS Reflection Attack - <AUTHOR> https://www.dns-oarc.net/files/workshop-201110/tracing-dns-reflection.pdf

<comment><AUTHOR> This slide deck presents a really great bit of work, where they were able to track down a big originator of DNS reflection attacks, to a VPS provider in Scranton, PA.</comment>


Groupon - Cool Business Model - <AUTHOR> http://www.chrisbrogan.com/groupon-clever-collective-buying-site/ <comment><USER2> I think that the "threshold" is really a red herring. Having followed the site for a few weeks at this point, I would suspect that pretty much every deal "tips".

The actual effects of having a threshold are twofold: 1) First of all, it encourages people to tell their friends to participate 2) It creates the illusion of a group discount where none exists. A big discount might tarnish a business' reputation, but if there is a "group discount," people understand. When you think about it, there is actually no economy of scale about a business offering several hundred coupons valid for a six-month window.

It's brilliant marketing, though.

<comment><USER3> I agree, it's a marketing stunt. There are no economies of scale at work here. Now, if I made it for an event, and I only booked the event venue and hired the entertainment / wait staff if the threshold tickets were purchased, than there's genuine utility here. But for miscellaneous products/services that I offer daily anyway, this is just a marketing stunt.

<comment><USER4> You just solved my startup's problem of not having an interesting (i.e. not "drinks at a bar") way to organize our meetups. Thank you, kind sir.

</comment></comment></comment><comment><USER5> The central concept here -- a transaction triggers when a threshold of participants is met -- is bigger than group coupons. It's a sort of "Group Transactional Economics" by analogy to the atomicity of db or stm transactions. I think it could eliminate a lot of the risk and inefficiency dealt with by independent makers of all stripes.

<comment><USER6> The central concept is incredible but the way groupon uses it is not, the spa did not book over $4300 in business like Chris says, rumor has it that groupon actually takes 50% of the sales for itself. Sure, Groupon is a good business but its borderline abusive to its partner businesses (something that would not work if applied to independent makers).

<comment><USER7> Could you elaborate on your claim of abusiveness? I'm not sure such an unsourced rumor is sufficient evidence, nor am I aware of Groupon having such Walmartian clout that it can bully vendors into deals. Surely the spa signed its own end of the contract?

</comment></comment></comment><comment><USER8> I worked at a consulting firm on a flameout .com (actbig) business that had a nearly identical model back in the late 90s; the big difference here seems to be the (smart!) focus on local businesses & services rather than generic goods like electronics and furniture, and offering only one deal at per day (rather wootlike).

Last time this happened: <http://news.ycombinator.com/item?id=692644>

I think the answer to the the question I asked then might be "yes." :)

(They still have a ways to go for profitability, though... 40 people on staff while the items are usually under $100 and have less than 1000 purchasers. Still, they've made it much further than my old client did.)

<comment><USER9> excellent, I have this idea for a way people can buy pet supplies online!

<comment><USER8> How about this -- an alternative currency that people can use for purchases and give each other as gifts?

(Yup, I worked on that one too, although very briefly.)

</comment></comment></comment><comment><USER10> This is 10 years old! Letsbuyit ran this model in the dot-com hysteria but obviously blew up before they could prove it would make money (no doubt they got someone like Oliver Stone to direct their TV ads or something).

</comment><comment><USER11> If auctions is the core of the new economy, then there's plenty of business opportunities left.</comment>


Request HN: OP indicator in comments - <AUTHOR> Can we please have some sort of indicator (like an icon or a different handle color) for the original submitter of the story when they comment in the discussions section? <comment><USER2> I think maybe it makes sense for Ask HNs, but for general story submissions? Occasionally it's the maker/author, but not often.

I'm genuinely curious - what would this add to most discussions?

      * Note: I no longer work on HN or influence its direction.

</comment><comment><USER3> Let's please not do this. I don't want people to be encouraged to submit their own articles, and I don't think that AMAs need to be encouraged; they are already plentiful.

</comment><comment><USER4> If you're on Chrome, use this: [https://chrome.google.com/webstore/detail/hacker-news- enhanc...](https://chrome.google.com/webstore/detail/hacker-news- enhancement-s/bappiabcodbpphnojdiaddhnilfnjmpm)

</comment><comment><USER5> I think a different handle color is a good idea. For new accounts, it already shows green. Perhaps use Red for indicating OP ?

<comment><USER6> I think blue, black, or purple would make more sense. Red text symbolizes danger, error, or badness in western culture.

</comment></comment><comment><USER7> Agreed. I think this is an excellent idea.</comment>


Surfingkeys – Expand your browser with javascript and keyboard - <AUTHOR> https://github.com/brookhong/Surfingkeys <comment><USER2> There's also vimium: [https://chrome.google.com/webstore/detail/vimium/dbepggeogba...](https://chrome.google.com/webstore/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb?hl=en)

<comment><USER3> And cVim: [https://github.com/1995eaton/chromium- vim](https://github.com/1995eaton/chromium-vim)

Now how do they compare?

<comment><USER4> As a long time cVim user I've found out that 99% of my browsing can be done with its scroll up/down and open link features.

When combined with this switch to recent tabs extension, the mouse becomes almost irrelevant: [https://chrome.google.com/webstore/detail/toggle-switch- rece...](https://chrome.google.com/webstore/detail/toggle-switch-recent- last/odhjcgnlbagjllfbilicalpigimhdcll)

<comment><USER5> Vimium has the `visitPreviousTab` built in for toggling between two tabs.

<comment><USER6> There is something like this in Surfingkeys,

B - Go one tab history back F - Go one tab history forward

</comment></comment></comment></comment></comment><comment><USER7> I tried Pentadactyl and Vimperator before settling on qutebrowser. It's just fantastic and worth checking out if you're in the market for a keyboard-driven browser.

[https://www.qutebrowser.org](https://www.qutebrowser.org)

<comment><USER8> I'm on pentadactyl and loving it, but haven't heard of qutebrowser - what made qutebrowser stand out for you, if you don't mind me asking?

<comment><USER9> What got me to make the switch was that it wasn't Firefox. I got so fed up with Mozilla's bullshit that I went looking for anything else, especially after they broke all of my custom addons. Qutebrowser ended up pleasantly surprising me.

</comment></comment></comment><comment><USER10> How does it compare with Pentadactyl?

</comment><comment><USER11> For another approach to power-tooling your browser, have a look at Gleebox ([http://thegleebox.com/](http://thegleebox.com/)). I use it constantly to navigate between pages, to get a readable version of the page (!read), and to switch between tabs using a fuzzy-search approach. On some sites I've even added custom jquery-based selectors to quickly navigate around the pagfe.

</comment><comment><USER12> Does someone know if there is a Firefox fork?

<comment><USER8> Pentadactyl is great, but you'll have to find the signed xpi.

<comment><USER13> Pentadactyl is EOL. Vimperator is still being actively developed..

<comment><USER8> I think that's an assumed EOL on Pentadactyl because of Electrolysis. The devs don't talk but the community is trying to come up with a way to continue. Vimperator has similar issues with Eloctrolysis, I think?

I hope pentadactyl makes it, cos it's my favorite of the vim extensions. Vimperator just doesn't feel as advanced.

<comment><USER14> They're both about the same, but vimperator is more frequently updated for compatibility with new Firefox versions.

That alone is much more useful for me.

<comment><USER15> For me, I'm tracking Firefox esr anyway, so I don't get hit with incompatibility that often.

</comment></comment></comment></comment></comment></comment><comment><USER16> I'm loving this! Great stuff. Is there a way to exclude websites from activating SurfingKeys?

<comment><USER6> [https://github.com/brookhong/Surfingkeys#hotkey-to-toggle- su...](https://github.com/brookhong/Surfingkeys#hotkey-to-toggle-surfingkeys)

use Alt-s to toggle it by default.</comment></comment>


Ending the Internet's Trench Warfare - <AUTHOR> http://www.nytimes.com/2010/03/21/opinion/21Benkler.html?partner=rss&emc=rss <comment><USER2> This is all great and stuff, but will I still be able to run my own web server, SMTP server and SSH server out of my basement? I regard this as imperative, and I've decided not to move to a faster service that filtered ports 22, 25, 80 and maybe others.

Without the ability to actually participate in the ground-state Internet, all the speed in the world will not help us innovate.

<comment><USER3> Great point. In other words, there are things about internet service that are more important than the bandwidth between your home and Hulu or the latency between your home and your Quake opponents.

<comment><USER2> Well, yes. I didn't even think of Hulu, as I haven't ever used it. And I don't play Quake. Not much of an on-line gamer, I guess. But I did read my access_log file today to see what kind of crazy stuff showed up over the weekend.</comment></comment></comment>


Alphabet division aims to fix public transit in US by shifting control to Google - <AUTHOR> https://www.theguardian.com/technology/2016/jun/27/google-flow-sidewalk-labs-columbus-ohio-parking-transit <comment><USER2> Flow would also vary the cost of parking spaces according to demand. On weekends, prices might drop in business areas while they climb near music venues. Sidewalk claims this would increase income from parking by 10%.

However, Pozdnoukhov says that variable pricing is far from proven. "A pilot project in San Francisco was not very well received," he says. "If Sidewalk can show value to drivers, it could be a different game, but that's easier said than done."

you think....

<comment><USER2> I bet the city could really pull in some money if they were allowed to charge for 911 calls too. "...I see, sir, please be calm. I know there is an intruder in your house...again how much do you have left on your credit card..."

</comment></comment><comment><USER3> Serious question: What's the last successful product that Google rolled out (not purchased)?</comment>


Reaching the Limits of Adobe Stupidity - <AUTHOR> http://whitequark.org/blog/2012/05/06/reaching-the-limits-of-adobe-stupidity/

<comment><USER3> This is just a subjective feeling, but back in the 90ies, everyone seems to have been producing code with only one goal in mind: have the compiled output work well enough so it can be shipped.

There was next to no automated testing, there was some theoretical best practice, but at least in the windows world nobody cared. Heck, back in the days there weren't even multiple accounts on a machine, nor were there file system permissions for example.

Of course, those old days are long gone by now, but software surviving from back then (like Flash Player) still has this legacy.

As an aside: when it initially came out, Flash Player was called ShockWave Flash (.swf - ring a bell?). Flash was this lighter, simpler (and cheaper) version of the Shockwave authoring system.

At some point it superseded it in features though.

Some of this old Software can be rewritten, but most of it is still being depended on by independent third parties which require the mess to be bug for bug compatible.

Combine that with binary file formats, the need for backwards compatibility, the need for newer software to read older file formats and in the case of Flash, the need for newer plugins to execute old, buggy bytecode because so many compiled swf files are out there of which the source (also in binary .fla form btw.) is long lost.

It's so easy to look at Flash player today and laugh at Adobe, but remember: this piece of Software comes from a different age where nobody but the Unix guys knew better (and _they_ knew better than to touch Windows).

It's a good thing that it's slowly dying I guess.

By the way: I'm as guilty as anybody else.

Thankfully though, the age of dial-up is over so nobody is going to use that Windows dialer I wrote back in those days (despite its bugs, it was deemed good enough to win awards even in dead-tree publications).

Where this does bite me personally though is in the Windows frontend of our product. I've written that abomination right after finishing high-school back in 2001.

Unfortunately it is still in wide use and I have to maintain it which is ever so painful.

In theory it really needs a rewrite, but by this time all new users are - <USER2> course - using the web frontend, so only people who don't care at all about technology are still using the windows clients (still 25% Windows 98 of all things)

So rewriting the client and then pushing an auto update would be incredibly painful for them unless it's pixel-by-pixel identical.

And to make this rewrite run on Windows 98. I don't even want to think about this.

<comment><USER4> Actually they did change the before in a not backwards compatible way at least two times (IIRC), so there should not be much pain in doing that again... At least from the updates/compatibility preserving point of view they have it sorted.

<comment><USER3> Can you point to a link describing this? As far as I remember they were still bundling the old runtime and feeding older code through the older runtimes.

<comment><USER4> Yes, I think that's correct, but I don't know the details of how was it done. The point was that they have done this before and the new design isn't that old actually.

</comment></comment></comment></comment><comment><USER5> The title is misleading. There is no indication such a limit exists.

</comment><comment><USER6> For some perspective, the Flash Player code base is almost 20 years old and must maintain binary compatibility with ancient content (because many websites have binary .swf files without the .fla source files). Flash is likely the world's most installed software when you consider that most Windows _and_ Mac _and_ Android devices have Flash.

<comment><USER7> Adobe Flash, formerly Macromedia Flash, formerly a vector-based font-authoring tool rejigged into an animation system called FutureSplash.

It's no wonder the thing is so jammed full of fossilized code. Legacy platform support. Legacy plugin support. The whole thing is a museum of bad ideas and shoddy implementations done by people who no longer work for companies that don't even exist.

It was wildly successful, beating out even its brother Director slash ShockWave, which is an admirable achievement, yet did not come without a cost. Like Windows its success has saddled it with an enormous base of users and developers to keep content.

</comment></comment><comment><USER8> One can only approach the limits of Adobe's stupidity, not actually reach it.

<comment><USER9> HN needs more Adobe bashing.

<comment><USER10> Being this is HN, I like to think this more a calculus joke =D

</comment></comment></comment><comment><USER11> I have lost faith in Adobe because they cannot get their products working on case sensitive HFS volumes. The problem has existed for almost a decade I think. The fact that one cannot install Creative Suite on another volume makes it even worse.

<comment><USER12> This may be somewhat irrelevant, but what is the motivation for having a case- sensitive HFS volume? I agree that Adobe should support it (and separate volume installation) because these are edge cases that should be accounted for, but I've never heard the reasoning for having a case-sensitive format.

<comment><USER11> I just always have done it because I want my mac to act like a normal UNIX system. I suppose it was kind of a principle thing.

<comment><USER13> This is why I do it. To make my local dev system a bit closer to my (typically linux) deployment systems.

(I remember wasting a lot of time once on a rookie mistake where I had a Perl script with "use Strict;" in it instead of "use strict;", it worked fine on Mac OS (OS9, in this case), but failed in at-the-time-inexplicable ways when deployed on unix. I suspect my habig of insisting on choosing case-sensitive filesystem stems largely from that… And yeah, doing perl/cgi webdev on Mac OS9 was a really bad idea, I discovered.)

</comment></comment></comment></comment><comment><USER14> Why am I not surprised this is about bugs in Flash?

It ain't much better on the artist side. The UI revision after the Adobe/Macromedia suit was so bad it was one of the major reasons I left the animation industry. My friends who stayed have AMAZING piles of helper scripts to patch it up and make it halfway usable.

<comment><USER15> One of your major reasons for leaving an entire industry is because of a UI revision in ONE of your software tools? Surely you are exaggerating.

What are the amazing piles of helper scripts intended to patch up an UI revision consisting of?

<comment><USER14> No, no, really. Flash was the tool used in ALL the jobs I was getting. And the UI changes from 5 to MX were completely flow-breaking; imagine that a new revision of your favorite text editor made you wait a half a second after every third keystroke, and flushed the typeahead buffer every time that happened.

And you HAVE to update to this new tool because the files saved by it are incompatible with the old versions; if you're gonna interoperate with other folks you have to somehow deal with this maddening new behavior.

I was already coming to feel that I would never have the joy of working on my own stories and creations because I didn't have the burning drive and social skills to claw my way to running a show. All that was left of animation to me was the joy of making things come to life. And this UI change made that a death of a thousand cuts instead.

The helper scripts are a lot of macros to automate common usage patterns, and a few plugins to create new palettes. I can't remember the exact details; this was a whirlwind tour of Cartoon Network's working methods when I was staying at their head Flash director's place for a funeral.

</comment></comment></comment><comment><USER16> I'm surprised nobody mentioned the wonderful

<http://adobegripes.tumblr.com/>

yet :)

<comment><USER17> I knew Adobe was bad but I didn't realise they were _that_ bad.

</comment></comment><comment><USER18> As noted in the article comments, much of the AS weirdness goes back to Macromedia - but Adobe itself has its own share of blunders.

<comment><USER19> And before that FutureWave.[1]

[1] <http://en.wikipedia.org/wiki/FutureSplash_Animator>

</comment></comment><comment><USER20> I still like ActionScript because I like javascript, but in many cases I want to declare my types so I can get type checks at compile time instead of being surprised or having to write unit tests to be sure of myself. Also refactoring large javascript or python projects is my nightmare because getting it to 'compile' means nothing, so many bugs could be lurking still.

<comment><USER21> Reminds me of this: <https://twitter.com/#!/dozba/status/198081985506328576>. Seriously, put the effort in to learn a unit testing framework (Qunit) and a mocking framework (SinonJS) and use them. You'll find that refactoring your large dynamic projects no longer involves blindly 'changing shit'.

</comment></comment><comment><USER22> Shouldn't the title be Reaching the limits of Adobe _Flash_ Stupidity?

You couldn't say the same about the Photoshop team, IMO.

<comment><USER23> I know some _really_ angry designers that disagree, but fair enough.

<comment><USER24> As a designer I can attest to this. I think Photoshop is missing some key things for a web designers use. Although CS6 is looking great.

</comment></comment></comment><comment><USER25> He's critical of the compiler's optimization and the efficiency of the code, but doesn't Flash have an embedded JIT, which effectively means the byte codes are pre-compilation, and actions that might seem like optimizations would potentially make the JIT's life far more difficult?

<comment><USER26> How does

        (ternary (false) (integer 15) (integer 15))

help JIT?

<comment><USER25> Probably doesn't help it. Probably doesn't hurt it either though. I'm sure the JIT realizes the whole operation is pointless and just replaces it with what is effectively (integer 15). It did look like there were bits of instructions put in there to make it easier for the JIT to see where certain boundaries/behaviours were in the code, and maybe this is one of them. Or it could be something stupid that just makes it easier for them to manage the code in the flash compiler. Either way, even if it _is_ a bug, it won't negatively impact the runtime if the JIT is doing anything like a sane job.

Think of the output of the flash compiler as being like the output of the C processor. Then it makes more sense.

<comment><USER27> It still hurts everybody, because it bloats your files with unnecessary opcodes and forces the JIT to sift through it and optimize it away, instead of spending its time to do useful optimizations.

It might only seem like a little turd on the sideway that you can easily step over, but quite evidently in the case of flash little things like these have added up and its performance is now -- in the metaphorical sense -- up to its neck in shit.

<comment><USER25> > It still hurts everybody, because it bloats your files with unnecessary > opcodes

After compression, what do you figure the cost is? I mean, that looks like a lot of text, but as opcodes it's a few bytes at most before compression. Improving video codecs provides _way_ larger gains than fixing things like this.

> forces the JIT to sift through it and optimize it away

That code is already going to be there, isn't going to burn up a measurable amount of CPU, and only imposes a cost once per load. There are better places to work on improving the product.

> It might only seem like a little turd on the sideway that you can easily > step over, but quite evidently in the case of flash little things like these > have added up and its performance is now -- in the metaphorical sense -- up > to its neck in shit.

That's actually far from clear. I think another way to look at it is that Flash has so many _other_ problems that focusing on this BS clearly isn't worth their (or anyone else's) time. Heck, for all we know some of this has been _caused_ by fixes to other performance problems they've been working on.

</comment></comment></comment></comment></comment><comment><USER28> Wow, is that code terrible. I wonder if there would be a market for a "Flash Compactor" to remove all that dead code and speed things up?

<comment><AUTHOR> Sure, it's exactly the same as PHP opcode cachers market.

</comment></comment><comment><AUTHOR> Now I know the reason why I felt uncomfortable about ActionScript. Flash folks were always convincing me that AS3 is perfectly fine and kickass language. Next time I'll just link this.

<comment><USER29> To be fair, there's nothing wrong with the language. The article points out problems in the VM and the compiler.

There's nothing stopping someone from writing, for example, an AS3 compiler for the JVM that interacts with Java libraries in the same way JRuby does.

<comment><USER30> Well, since he is talking about how bad the specs are (and not the VM) this seems only partly true ;)

</comment></comment></comment><comment><USER31> Remember kids, optimization doesn't matter!

</comment><comment><USER32> Also, there are some great and funny comments about this article on reddit: [http://www.reddit.com/r/programming/comments/t9qxy/reaching_...](http://www.reddit.com/r/programming/comments/t9qxy/reaching_the_limits_of_adobe_stupidity/)</comment>


Runtime.js – JavaScript library OS - <AUTHOR> https://medium.com/@iefserge/runtime-js-javascript-library-os-823ada1cc3c <comment><USER2> This looks really cool, I look forward to following the project.

I'm curious, if you wanted your unikernel to be running in a JS VM (I'm not sure what the primary motivation would be[deployment?]) why not take the approach of just compiling the type-safe MirageOS into JavaScript (possible because MirageOS/OCaml can also compile into JS). Unikernels are attractive because of, among other reasons, increased security. It's pretty well understood that a powerful type system (such as Mirage's use of OCaml) would be useful in reducing accidental security vulnerabilities as well. Come to think of it, I'd much rather trust mission critical server infrastructure to OCaml that compiled to JavaScript, over JavaScript. At the end of the day, you'd still be able to use it from within js via `require('OS')`, but its implementation would have had more bugs/vulnerabilities prevented by the type system.

<comment><USER2> A cool example: [http://roscidus.com/blog/blog/2015/04/28/cuekeeper- gitting-t...](http://roscidus.com/blog/blog/2015/04/28/cuekeeper-gitting- things-done-in-the-browser/#nymote-mirageos-and-ucn)

<comment><USER3> Thanks for pointing this out--it brought my attention to the author's Irmin backend, based on the browser's implementation of IndexedDB:

[https://github.com/talex5/irmin-indexeddb](https://github.com/talex5/irmin- indexeddb)

That said, trying out this demo [1] of Cuekeeper gives an IndexedDB error message on Firefox 40.0.3 on Linux; perhaps IndexedDB is somehow not enabled.

[1] [http://roscidus.com/blog/cuekeeper/](http://roscidus.com/blog/cuekeeper/)

</comment></comment></comment><comment><USER4> This library reminds me of some of the "future" introduced in this (satirical, yet insightful) talk: [https://www.destroyallsoftware.com/talks/the-birth-and- death...](https://www.destroyallsoftware.com/talks/the-birth-and-death-of- javascript) Discussion: [https://news.ycombinator.com/item?id=7605687](https://news.ycombinator.com/item?id=7605687)

This is extremely cool, by the way.

</comment><comment><USER5> Relevant, as always: [https://xkcd.com/1508/](https://xkcd.com/1508/)

</comment><comment><USER6> I'm not sure if this will be relevant or useful information, but I understand that a GSoC project added Lua to SYSLINUX. I'm not sure what the specifics of the memory access/stack structure is; the idea is to let you run Lua scripts directly in your bootloader, and it can also open an interactive REPL.

Strangely, the effort was made to get Lua functioning, but not much has been practically done with it. Stuff like VESA support was even thrown around, but the whole thing was eventually abandoned(?!).

I see so many possibilities for something like this, generally speaking... and FYI, the code does apparently work.

</comment><comment><USER7> I wonder if this could be used as an IoT/RPi OS, maybe swaping v8 for [https://github.com/cesanta/v7](https://github.com/cesanta/v7) to make the footprint even more lightweight.

<comment><AUTHOR> this is a great idea, thanks. I wish v7 had the same c++ API as v8 so it could be easily swapped though.

</comment></comment><comment><USER8> How does this work with node.js based binary/native dependencies? Also, is it possible to customize the built image with libraries, etc?

This seems really cool and a welcome replacement for the mess that is Docker.

<comment><USER9> Quote from [1]: "Application, its dependencies and the core library are bundled up using Browserify, then packed into ramdisk image for kernel to use."

Since runtime.js uses browserify which itself is not able to handle binary/non-JS dependencies - i would say "no".

But this is just a conclusion and not an answer-by-knowledge.

[1] [https://github.com/runtimejs/runtime](https://github.com/runtimejs/runtime)

EDIT:

Did a quick test with bcrypt.

It failed - in contrast to a pure-JS "hello world" test.

Again, not a proof, but a stronger hint.

<comment><AUTHOR> this is correct, binary dependencies are not supported. The possible way to solve this is to compile non-js code into Asm.js/WASM or directly into js. I think this makes system a bit more stable (null-pointer error in the kernel mode will crash the OS for example) and makes V8 updates much more easier.

</comment></comment></comment><comment><USER10> >device drivers with javascript

>assemler in browser

what next?)</comment>


Ruby-like string interpolation in Python - <AUTHOR> https://github.com/syrusakbary/interpy <comment><USER2> If the only thing you want is to use the {identifier} syntax, without having to repeat `identifier` more than once, the simplest alternative is probably:

        >>> package = "foo"
        >>> whatever = "bar"
        >>> "Enjoy {package}".format(**locals())
        'Enjoy foo'

(disclaimer: I wouldn't actually use locals() like this in real code)

Also, if this thing is truly mangling bytecode, it's not portable between different python versions

But i'm not quite sure about that: I only skimmed the codebase, and that works seems to be done by interpy_untokenize, which boils down to some string mangling

Also, having expressions (or worse, statements... like it would be in ruby since there's no difference there) evaluated when evaluating a string is quite bad (this is not Haskell, and thus we cannot have guarantees that side effects won't happen)

Nice hack, btw

<comment><USER3> Note that `locals()` actually does funky things around enclosing scopes.

Consider the following Python2/3 code:

        def outer():
            x = 1
            def inner():
                print(x)
                print("x = {x}".format(**locals()))
            inner()

        outer()

This actually prints the right thing when run:

        1
        x = 1

However, if you remove the `print(x)` line, both Python 2 and 3 don't hoist the enclosing `x` into `locals()` (since it can't see a single usage of that variable), resulting in a `KeyError`:

        Traceback (most recent call last):
          File "blah.py", line 7, in <module>
            outer()
          File "blah.py", line 5, in outer
            inner()
          File "blah.py", line 4, in inner
            print("x = {x}".format(**locals()))
        KeyError: 'x'

Python 3 has the `nonlocal` keyword that you can use to indicate that you're using a variable from an enclosing scope so that it's properly introduced into `locals()` but Python 2 doesn't have this facility.

<comment><USER4> That doesn't seem funky to me, given that `x` in your example is in fact not local to `inner`. It may seem surprising, but it's consistent with how Python handles locals in general.

<comment><USER3> I called it funky because `x` is never local to `inner`, but gets an entry inside `locals()` if `inner` uses it implicitly or explicitly with `nonlocal`.

Non-funky behaviour would be to have an `enclosing()` that walks up the outer functions and returns the union of their `locals()`. Alternatively, a `vars()` which expands to all variables in scope (respecting LEGB) would be best given the context of variable interpolation.

</comment></comment></comment></comment><comment><USER5> This is certainly interesting, but I think it kind of breaks with the "only one obvious way to do things," which Ruby tends not to follow (and with regards to string formatting, Python doesn't either :P ). Does this buy you anything beyond trying to ramrod Ruby syntax into Python? If this truly compiles down to byte code that's doing string concatenation in the Python VM, the built-in string formatting library tends to be a non-trivial amount faster, beyond trying to write Ruby in a language that isn't Ruby.

<comment><USER6> Well... String formatting already sorta breaks the "only one obvious way to do something" rule. I dunno about you, but we have string formatting all over the place in our code. I would wager that every single module in our codebase has something that looks like this:

      cache.add_message("Hey, your {zoop} is {boop}".format(zoop=zoop, boop=boop))

That that call to "format" just kind of sucks -- it repeats what's already pretty obvious by looking at the string. It's specially crappy when you have strings that need lots of variables. We've taken to doing this recently, which I'm usually okay with:

      cache.add_message("Hey, your {} is {}".format(zoop, boop))

The downside of that is you have to make sure that the order of the arguments matches exactly with the order of the empty brackets. It's kinda error prone... But generally not that big of a deal.

We could also do this...

      cache.add_message("Hey, your %s is %s" % zoop, boop))

Or this...

      cache.add_message("{1} alert! Hey, your {0} is {1}".format(zoop, boop))

So yeah, I would argue that string formatting in Python is ALREADY in a kinda nasty place. There's ALREADY a bunch of ways to do it, and it all just kinda sucks.

IMO, Ruby-style string formatting is probably the nicest I've seen. If it were in Python, it absolutely would be THE way to do string formatting, I bet.

      cache.add_message("Hey, your {zoop} is {boop}")

So much nicer.

<comment><USER7> Actually, I kind of like the existing Python ways better in many respects from the Ruby one, since it lets you separate format strings from the parameters passed to them, and reuse format strings more easily (which is especially useful if you want to move string literals out of code and into resources, because then you can include format strings in that as well.)

<comment><USER8> You can do this in Ruby too, with sprintf. It's almost as if there are multiple, complimentary ways of accomplishing similar tasks, depending on your needs.

<comment><USER9> You don't even need sprintf, Ruby supports Python-style interpolation, too:

      bar='batz'

      "foo #{bar} #{0.5+0.5}"
       => "foo batz 1.0"

      "foo %s %.2f" % [bar, 1.0]
       => "foo batz 1.00"

<comment><USER8> % is an alias for sprintf. :)

</comment></comment></comment></comment></comment></comment><comment><USER10> String interpolation is one of the things that I've never understood about python. I'm not a massive fan of Ruby's particular syntax for it[1], but not having any syntax at all feels like such a massive oversight. And then I realize that it's probably a deliberate omission and that just seems _really really weird_ to me.

So I'm happy to see this, even if I'm probably too conservative to use it in my day job. And I didn't know about the coding: thing, and it looks like this method could also be used on my other python-wtf, which makes me even happier.

(My other python-wtf is that there really ought to be nicer syntax for a['b']. For a while I thought that a::b would be nice, but then I remembered that that could be a slice, so it can't be parsed reliably. a$b is probably my next choice. Or even require that kind of slice to be written with a space or something, like "a: :b".)

[1] Requiring braces even for a simple variable name seems like a poor decision. There's a little-known language called Haxe which IIRC gets it right: you can embed variables with just "hello $foo", or expressions with "your score is ${kills-deaths}". I get that Ruby allows unusual characters in variable names, and it's not obvious whether "is this yours, #name?" means #{name?} or #{name}?. But I'd rather have that potential for confusion than force the braces even when there's no ambiguity.

<comment><USER11> There's also a very well-known language called PHP that does the same ;-)

<comment><USER10> Are you sure? [https://php.net/manual/en/language.types.string.php#language...](https://php.net/manual/en/language.types.string.php#language.types.string.parsing) suggests that it can only interpolate a few specific types of expression, but can't do e.g. arithmetic or or simple function calls. (It seems you can interpolate a variable named by a function call, but you can't interpolate a function call itself.)

</comment></comment></comment><comment><USER12> You can already _almost_ do this in Python, with the native string format operation:

>>> name = "Foo Bar"

>>> age = 25

>>> "Hi, my name is {name} and I'm {age} years old.".format( _splat_ locals())

"Hi, my name is Foo Bar and I'm 25 years old."

Arguably, this an abuse of `locals()`, but it gets you very nearly the same kind of use-variables-in-strings-with-curly-braces functionality.

Edit: HN markdown doesn't seem to let you escape the star italics operator. To be clear, you have to double-star splat locals().

<comment><USER13> Repeating my similar comment, str.format_map takes a dictionary directly (available since 3.2).

</comment></comment><comment><USER14> I wrote a version of this some time ago:

[https://github.com/ekimekim/pylibs/blob/master/libs/interpol...](https://github.com/ekimekim/pylibs/blob/master/libs/interpolate.py)

It's not quite as natural as your one:

        def foo(x):
            print interpolate("Hello, {x}")

Though I do actually prefer having the explicit formatting call there so I know _when_ the interpolation is being performed. Side effects and all that. In a perfect world, this is the syntax I'd prefer:

        def foo(x):
            print "Hello, {x}".format()

ie. a format() without args defaults to "all variables accessible in the current scope". I wouldn't actually want it to support arbitrary python the way ruby does, I find the .format() syntax flexible enough.

(Also, my current implementation is for locals only. It wouldn't be hard to extend to globals, but would suffer the "nonlocals won't be captured" problem described in other comments here no matter what)

(EDIT: Also, it relies on sys._getframe, which is CPython specific)

</comment><comment><USER15> I guess I'm missing the point. Why not use "Welcome %s to %s" % (who, place)

<comment><USER16> This special syntax should be discouraged for any strings that shall be translated in the future. Different languages have different syntax, so the order can change, with this kind of syntax, you will be in big trouble very soon!

<comment><USER17> For anything translated, you'd use the (admittedly gross, fixed in Python3) "Welcome %(who)s to %(place)s" % { 'who': who, 'place': place }. The Python3 version is "Welcome {who} to {place}".format(place=place, who=who), or if you want to be un-idiomatic and unsafe, "Welcome {who} to {place}".format( __locals())

</comment></comment></comment><comment><USER18> Can anyone explain the creators' reasoning beyond the existing string interpolation in Python? I never thought it was cumbersome, on the contrary I liked the verbosity of "My {name} is, I am {years} old".format(name=name, years=years) and I think there are good reasons (beyond dragonwriter's reusability argument).

<comment><USER19> So, like, just to point out, your example would be, with name Adam and age 10:

      "My Adam is, I am 10 old."

Correcting your example:

      "My name is {name}, I am {years} years old".format(name=name, years=years)

So to throw that out, that one line includes the word "name" four freaking times, and years four freaking times. You say you like the verbosity of it. Why? Would you like this format yet more?

      "My name is {name=name}, I am {years=years} years old".format(name=name, years=years)

If not why not? It's yet more verbose.

I think that the reason that other people like the non-verbose format of:

      "My name is {name}, I am {years} years old" # assuming the presence of local variables "name" and "years"

Is that, well, it's pretty obvious what's going on here, and repeating name and years a bunch more times do not, it seems, make it any more clear what's going on.

A reasonable argument might be that:

      "My name is {name}, I am {years} years old".format()

Is more clear about what's going on. But repeating the variable names is not particularly elucidating.

<comment><USER18> Well, I did not want to defend the way .format() works now. That's why I asked for the reasoning. Your reasonable argument sounds reasonable to me, I would certainly use it. But then my initial question is even more important: Why is this not the one Python way. What did the initial designers think?

</comment></comment></comment><comment><USER20> How is this optimized if it compiles to a + "" \+ b?

<comment><USER21> It's not

<comment><USER22> Are we sure?: [http://stackoverflow.com/questions/3055477/how-slow-is- pytho...](http://stackoverflow.com/questions/3055477/how-slow-is-pythons- string-concatenation-vs-str-join)

<comment><USER23> Some of the examples in that SO post are outdated. However, list joining is faster that string concatenation, but not by much. Assembling a 110 MB string:

        from timeit import Timer
        try:
            from StringIO import StringIO
        except ImportError:
            from io import StringIO

        nr = 1200000
        data = "The Quick Brown Fox Jumps Over The Lazy Dog: Woven silk pyjamas exchanged for blue quartz.\n"

        # contruct a list first, then join
        def dolist():
            s = []
            a = s.append
            i = 0
            while i < nr:
                a(data)
                i += 1
            s = "".join(s)
            print("%s chars (joined list)" % len(s))

        # string concatenation fest
        def dostr():
            s = ""
            i = 0
            while i < nr:
                s += data
                i += 1
            print("%s chars (string concatenation)" % len(s))

        # use a string as a file
        def dostringio():
            buf = StringIO()
            w = buf.write
            i = 0
            while i < nr:
                w(data)
                i += 1
            s = buf.getvalue()
            print("%s chars (cStringIO)" % len(s))

        if 1:
            tlist = Timer("dolist()", "from __main__ import dolist")
            print("the joined list took %.2f seconds" % tlist.timeit(2))

            tstr = Timer("dostr()", "from __main__ import dostr")
            print("the concatenation fest took %.2f seconds" % tstr.timeit(2))

            tlist = Timer("dostringio()", "from __main__ import dostringio")
            print("the cStringIO approach took %.2f seconds" % tlist.timeit(2))
        else:
            @profile
            def callall():
                # For use with a profiler (eg, kernprof.py/lineprof)
                for i in xrange(2):
                    dolist()
                    dostr()
                    dostringio()
            callall()

        Result:

        (user@air) /Users/user/Prj/python $ python3 stringplakbenchmark.py
        109200000 chars (joined list)
        109200000 chars (joined list)
        the joined list took 1.12 seconds
        109200000 chars (string concatenation)
        109200000 chars (string concatenation)
        the concatenation fest took 1.76 seconds
        109200000 chars (cStringIO)
        109200000 chars (cStringIO)
        the cStringIO approach took 1.45 seconds

        (user@air) /Users/user/Prj/python $ python2.7 stringplakbenchmark.py
        109200000 chars (joined list)
        109200000 chars (joined list)
        the joined list took 0.99 seconds
        109200000 chars (string concatenation)
        109200000 chars (string concatenation)
        the concatenation fest took 1.33 seconds
        109200000 chars (cStringIO)
        109200000 chars (cStringIO)
        the cStringIO approach took 5.21 seconds

        (user@air) /Users/user/Prj/python $ python2.6 stringplakbenchmark.py
        109200000 chars (joined list)
        109200000 chars (joined list)
        the joined list took 0.95 seconds
        109200000 chars (string concatenation)
        109200000 chars (string concatenation)
        the concatenation fest took 1.39 seconds
        109200000 chars (cStringIO)
        109200000 chars (cStringIO)
        the cStringIO approach took 5.54 seconds

</comment></comment></comment></comment><comment><USER24> Something about this seems patently unpythonic. Also, the way the code is included reminds me of monkey-patching, which is a Ruby behavior I like to leave at the door when I'm coding in Python.

</comment><comment><AUTHOR> Another gem is pyxl from Dropbox

[https://github.com/dropbox/pyxl](https://github.com/dropbox/pyxl)

Reminds me of JSX/E4X/XML Islands, etc.

<comment><USER25> Interesting and clever approach (even though, as I see, pyxl came first at that).

Just a doubt: how do I specify source file encoding if the coding string is now hijacked for interpolation purposes? Is there a default, fixed encoding (which I hope is not iso-8859-1, python's own default)?

<comment><AUTHOR> > Is there a default, fixed encoding

For interpy, I think it assumes utf-8 by default.

[https://github.com/syrusakbary/interpy/blob/master/interpy/c...](https://github.com/syrusakbary/interpy/blob/master/interpy/codec/register.py#L21)

</comment></comment></comment><comment><USER26> The `codecs.register` approach is interesting. I hope Ruby has something similar. Unfortunately I could not find such thing in Ruby.

<comment><AUTHOR> Yup that's the point of my submission, too bad HN edited my title so it looks like a boring trick. It allows you to transform your code without significant speed loss.

Think of possibilities like

# coding: JIT

or

# coding: inline-C

etc.

<comment><USER13> The typical way to do that is to reuse the interpreter infrastructure. This hack could be done with the ast:

[https://docs.python.org/3.5/library/ast.html#ast.NodeTransfo...](https://docs.python.org/3.5/library/ast.html#ast.NodeTransformer)

<comment><AUTHOR> AST is cool, but you have to comply with Python's syntax.

the coding way you can invent any wild syntax.

<comment><USER13> I guess my first approach to that would not involve overloading the import statement.

</comment></comment></comment></comment></comment><comment><USER27> There are also Python template strings: [https://docs.python.org/2.7/library/string.html#template- str...](https://docs.python.org/2.7/library/string.html#template-strings)

</comment><comment><USER28> Looks fun but it doesn't seem to support unicode in python2.</comment>


The Qualified Manifesto on Hiring Software Developers - <AUTHOR> https://www.qualified.io/blog/posts/the-qualified-manifesto-on-hiring-software-developers <comment><USER2> This is a pretty good manifesto. Something that I rarely (never) see mentioned is that the ability to quickly evaluate a technical hire is a skill managers can and should cultivate. I never give coding tests. I sit down with a candidate and within 20 minutes of verbally discussing their prior projects I know if I want to hire them or not. This does mean that the manager has to be technical and have the ability to deep dive in these conversations. It's by far the most efficient and candidate friendly (and interviewer friendly!) method I've seen. I've _never_ had a bad hire doing this and I've hired dozens of people

<comment><USER3> Even if we take your word that you have a zero false positive rate how would you even know what your false negative rate is?

I don't understand why so many seemingly otherwise scientifically minded people swear by anecdotes when it comes to hiring.

<comment><USER4> What does false negative matter for? As you said, you cannot know it, so why bring it up as a missing metric? What matters is if they hired for their demand, and their hires met or exceeded expectations

<comment><USER3> We cannot know it by anecdote. We can know it using a well designed longitudinal study. Why settle for the former? Why do so many proudly refuse to read the literature?

The only other thing I can compare to the anti-intellectualism around hiring is a similar phenomenon around nutrition and dieting.

<comment><USER4> I mean, I think you're planting your flag in some intellectual what aboutism. The confidence in the strategy of the process here is only as anti- intellectual as it is simultaneously conducive to that actual work trying to be accomplished.

Say a man marries a high caliber lady. Beautiful, smart, great personality. If he says, 'I did great here'. Does anyone say to him, 'Well what was your false negative rate?'. I guess you might

<comment><USER3> You ever read one of those interviews with a centenarian where they ask him what his secret is and he answers something like "I smoke a cigar every Sunday"?

<comment><USER4> Yeah

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> Something else that should be mentioned

Don't send technical pre-screens to candidates before you talk to them. You're not Google. I'm not going to waste my time on something before I know anything about the company, the team, or the job itself.

I haven't really seen this interviewing for jobs on the west coast, but there's a lot of shops in Chicago (fintech) that seem to be under the impression that anyone applying for an engineering job is desperate.

<comment><USER6> Some companies use this kind of screen more as a way to filter out people who aren't adequately interested in the company/job to put in the effort on the testing -- so perhaps in some cases it is working as designed.

<comment><USER5> well there's the rub. How am I supposed to be "adequately" interested in the company/job if I don't know anything about the company or the job?

That's what I mean by talking to a candidate before the screen. Going through a recruiter isn't sufficient for most of the information I would like before deciding to apply for the job.

</comment></comment></comment><comment><USER7> Multiple hour coding assessments will work for people who are motivated for a new job. But every company wants "passive" candidates that are already working somewhere. If they're already (moderately) happy somewhere, they're not going to spend 3+ hours on your pre-process.

Companies that can identify talent without wasting the talent's time will be at a huge advantage

</comment><comment><USER8> I would love a coding assignment. But make sure you have an style guide and tell me what paradigms to use and what patterns, and have an auto linter and style formatter. I would hate to be rejected just because I used tabs and you prefer tabs or vice versa. A could adapt to anything, even write the damn app in brainfuck if thats what you want. Instead you dismiss me after 5 minutes of soft talk with a group of people i never met.

</comment><comment><USER9> My key point every time my team discusses hiring: If you think your take-home project takes N hours, add 1-1.5. You already know the context, and are underestimating the difficulty even if you've run through it before.

<comment> jagged-chisel > ... _especially_ if you've run through it before [edits mine]

We're doing a hackathon-style interview session this Friday, and I've already had to remind the team that one of our coding challenges is "easy" because we know the answer. You need to think back to the first time you saw it. Also, we're not actually interested in the solution, but how you arrived at it. Once you grok the problem, most software people hit on the solution pretty soon, and can begin coding - we want to see how you come to the realization, and then how you work to create the solution.

</comment></comment><comment><USER10> How do you verify no cheating with work samples?

> Create a project based coding assessment that directly reflects the work the > developer would be expected to deliver if hired, making sure to provide some > open-ended flexibility that allows candidates to showcase their strengths. > This might require the developer to digest an existing code base, gather > requirements, communicate to your team a push request they'd like to make, > or provide a detailed description of code that they've submitted before > merging into production. These activities move your assessment process > beyond the code, revealing insights into what a candidate would actually be > like to work with.

That sounds like it'd take more than 3 hours, unless it's based on a very small project.

<comment><USER11> > How do you verify no cheating with work samples?

You can't really, and that's the main reason most of the teams I know avoid them, or supplement them with onsite whiteboarding.

<comment><USER10> Yeah, I know some teams say that they discuss the project after, which would work if the candidate couldn't code at all. But if they're just a mediocre programmer who's been coached, it may be harder to detect, especially if they have a talent for BS'ing.</comment></comment></comment>


Ask HN: Would you rather work at Google or Apple? - <AUTHOR> A friend of mine applied for Google and Apple job as a data scientist. Luckily, he was accepted in both and passed both Interviews. Trouble is he can't make a choice on where to work. Please help. <comment><USER3> Compare:

pay + benefits - cost-of-living

Even if your biases about each company are generally accurate, they may not be accurate for the wing of the company you will work in. I'd give priority to your personal wealth.

<comment><AUTHOR> Strong point there. I'll have to do a little research to make a good decision.

</comment></comment><comment><USER4> This is really only answerable by the person, but from what I have heard about Apple and Google living halfway between both HQs in the Valley, I would lean towards Google. They generally pay better from what I can tell, and seem to have more respect for software. Apple also is not as friendly towards supporting employee efforts in open source from what I understand as well. I have heard some talk about unhealthy work-life balance at Apple as well, although that appears to be a mixed bag (true for some, not others) - <USER2> what I know about my friends at both employers, it feels like more work longer at Apple than Google.

YMMV may vary of course, and these anecdotes may not necessarily even apply to your friend.

</comment><comment><USER5> At most companies of the G or A size, it all depends on the team and manager, as they'll define the day-to-day culture and work. Note that Apple is much, much more siloed due to its secretive culture, and if talking about and open- sourcing what one does is important, G is the much better choice. But mostly, team and manager should be the deciding factor.

</comment><comment><USER6> Overall they are both great companies and home to some very happy engineers. What matters more is the team you'd be joining. My advice it to talk to the hiring managers from each company and see who you think is better aligned to your style of work. If you could visit them and meet the teams in person, that would be even better, and chances are, you'd find this becoming a much simpler decision.

</comment><comment><USER7> I've been recruited by both and learned they both pay below market unless you're in the top 1% and have a messianic-like following. My choice would be neither, and find somewhere that pays more.

<comment><USER8> What do you mean by top %1? If you worked at both you should have been in the %1 category at some point right?

<comment><USER7> The last time I was recruited by a Google or an Apple, the offer was nearly $30k below what I'm being paid now, and I'm not overpaid by any stretch. I'll never be able to afford to buy a house or even think about starting a family at these rates. For reference, I live in the Bay Area.

<comment><USER8> You would make more money working at a bank in SF downtown rather than at apple or google in south bay. Though, these two should give you a lot of RSU's on the side. Which at the end of the year will put you up high.

</comment></comment></comment></comment><comment><USER9> You must choose Google. They are "Too Big To Fail" and they are investing in important future technologies, most importantly AI and robotics. Meanwhile Apple is basically in the retail business.

Thousands of companies worldwide have built there SaaS products on Google services and APIs. Nothing can touch Google.

Who cares if you make a couple of thousand dollars less from the median salary if you work at Google? If you work at Google for five years you can write your own ticket after that.

<comment><USER10> I also love Google because they are supportive for their open source oriented employees. Apple is a bit secretive.

</comment></comment><comment><USER9> You go for the company that has the biggest growth potential, of course.

</comment><comment><USER8> Bad products VS products full of bugs... which one is which?

</comment><comment><USER11> Apple is one of the most expensive brands worldwide. I'd rather work for such a brand. They've got iPhones, iPods and many other devices. Join me on team Apple.

</comment><comment><AUTHOR> I'd go with Google. No good reason at all, just gut instinct. Or maybe it's because I'm an android programmer.What about you?

<comment><USER10> I would also work for Google. I've always been mesmerized by their search engine. Time to learn how it works.

<comment><USER12> TL;DR square matrix exponentiation of a huuuuge matrix</comment></comment></comment>


Show HN: Write a private diary using good old email - <AUTHOR> https://diaryemail.com <comment><AUTHOR> Yesterday Paul Graham asked for an email diary service ([https://twitter.com/paulg/status/1216714155731890176](https://twitter.com/paulg/status/1216714155731890176)):

> Is there an easy way to build, or a startup that offers, something that will > email you once a day asking "What's happening?" and then accumulate the > replies?

I did just that! Let me know what you think.

<comment><USER2> He also wrote

> Unfortunately, though, in this one case I can't promise that if you build > it, I'll use it. Unless I know you, I can't trust that you won't read my > emails. (I trusted the previous startup that did it because we'd funded > them.)

How do you solve the "won't read my emails" problem ?

I've seen the statement in your website:

> Your data stored and transferred securely. No one will ever read or process > your notes even the staff. Your data belongs to you and can be easily > exported in preferable format by request.

But once the data leaves the browser there is no way to know, wouldn't you consider to partner with Gmail(or others) and appear as an addon to an already trusted company in order to start off the business ?

<comment><AUTHOR> I addressed it in a comment: [https://news.ycombinator.com/item?id=22045670](https://news.ycombinator.com/item?id=22045670)

> But once the data leaves the browser there is no way to know, wouldn't you > consider to partner with Gmail(or others) and appear as an addon to an > already trusted company in order to start off the business ?

Also, I understand the concern and that Paul most likely will not trust their secrets to anyone. The problem is that's not a business, but a beautiful hobby project that I honestly love, so it's unlikely that I will ever spend time rewriting it and then paying Google $15K ([https://www.gmass.co/blog/google- oauth-verification-security...](https://www.gmass.co/blog/google-oauth- verification-security-assessment/)) so they could vet me.

<comment><USER3> An idea would be to open source it and make it simple to run an instance.

<comment><USER4> Agreed.

I respect if it's not what you're looking for but you may be able leverage yourself into a good position (with the community and with PG) as a result of the publicity + traction combo.

Great work getting that ball rolling so quickly!

</comment></comment></comment></comment></comment><comment><USER5> I just email myself ¯\\_(ツ)_/¯

e: Also, I used to use [https://750words.com](https://750words.com) which is quite similar.

<comment><USER6> I use the Gmail "+" hack to mail myself on different topics.

name+ideas@ for app ideas

name+notes@ for random notes

name+writing@ for article ideas

(edit: formatting)

<comment><USER7> Isn't that just an email hack?

<comment><USER8> No, it's a gmail-specific "feature". Other mail services may also implement it, I guess.

<comment><USER9> Yeah, seems there is enough other services that a RFC (under "Subaddress Extension") has been proposed [https://tools.ietf.org/html/rfc5233](https://tools.ietf.org/html/rfc5233) Maybe it'll get enough steam.

Edit: doesn't mean everyone will use it though! But guess the plus sign in addresses would be more "email" than just email.

<comment><USER10> It's nice that they're trying to standardize it but it's an impossible standard since you can't assume that any particular domain adheres to to it so you end up with a whitelist either way.

<comment><USER9> I guess you're seeing it from the service owners point of view, and in that case it doesn't really matter no? AFAIK, it's for the owners of the email to use the subaddressing, not for others to magically come up and use subaddressing.

So as long as you, the user and owner of an address, know that your domain supports/not supports it, you can use it.

I don't understand who would have to add any allow/blocklists?

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> This used to exist, it was called OhLife. They would email you every day and say "What's happening in your life" and "Hey do you remember this?" with one random email from your history included. I always liked this service and was sad when they shut down. Pretty sure I started using it due to a post right here on HN.

<comment><USER12> I wrote WhoaLife ( [https://github.com/vonnieda/WhoaLife](https://github.com/vonnieda/WhoaLife) ) when OhLife shut down. It's self hosted for privacy and designed for Heroku Free Tier. Takes about 15 minutes and no code to deploy.

I've been using it since OhLife shut down and it completely fills the gap for me.

I recently modernized the code a bit, ported it from Mongo to Postgres and improved the selection of the random entry that is sent to you, but I haven't pushed those changes yet. They'll go out in the next week or so.

<comment><USER13> I did the same thing, and even called it by the same name...woahlife :-)

<comment><USER12> That's such a strange coincidence! Do you still use it?

</comment></comment></comment></comment><comment><USER14> >Private and Secure

It's as private as your email...which probably means not private.

Like most people, I depend on an advertising company to host my emails. But I wouldn't share my private diary with them.

<comment><USER15> You can encrypt those emails with PGP, the best encryption there is.

A good email client can also learn to automatically encrypt when you send to a specific email, so you can send to a specific alias (with a plus or subdomain aliasing scheme).

<comment><USER16> But then will your diary service work right with it? Honestly, you should use a mail server that isn't from an ad company. And then if you also want to layer encryption on top, feel free.

(Also, calling PGP "the best encryption there is" might be a bit of hyperbole.)

<comment><USER15> I don't use a mail server from an ad company.

And the company's business model is absolutely irrelevant actually. You still need end to end encryption.

> " _But then will your diary service work right with it?_ "

Yes, it's called an email archive. It's searchable too. All you need is an email client that supports PGP. I personally use Mailmate.

And I've got email going back to 2004, while I no longer use any apps or online services from 2004 (most died).

</comment></comment></comment></comment><comment><USER17> I love that you took the programmer equivalent of a writing cue and ran with it. And I think this is a really cool idea to explore.

I know it's largely a one person experiment and not a real business, but some feedback

> I won't sell your data and will be very personal with you.

This isn't good enough anymore. You need to promise that my data won't ever _ever_ be sold. Especially since you're asking me to share my diary with you. I'm not sure if this kind of promise can be made though. Maybe we need some legal apparatus you can declare that gives me peace of mind that no future owner of your company can change their mind.

<comment><USER18> No "promise" will make me share my diary with a stranger, not even a legally enforceable one, unless I self-censor my diary. Honestly not sure why anyone would entrust their diary to some web service, unless they take a nothing-to- hide approach with their diaries.

Although, a web service to share notes with friends is probably okay.

<comment><USER17> "Diary" usually means personal and private. But it can mean a lot of things. I can imagine cases where people are okay with that. I've managed a personal "diary" that's on Github publically. It's really just a reference of tech stuff I've learned.

<comment><USER18> > I've managed a personal "diary" that's on Github publically.

Well that's more of a journal. But yeah, a "diary" service can be used for less private stuff too.

<comment><USER17> Fair. I've always considered the two to be synonyms.

<comment><USER18> I was referring to a non-diary journal (in the general logbook sense), but the difference is murky at best.

</comment></comment></comment></comment></comment></comment><comment><USER19> Hey HN I have exactly this and have maintained it for years as a replacement for OhLife: [https://ahhlife.com](https://ahhlife.com)

Thousands of active users. Very (very) slowly enhancing and monetizing with additional features, but it's far down on my priority list.

<comment><USER20> Have you replied to PG's original tweet? This looks like exactly what he was looking for.

<comment><USER19> just did, thanks. kicking myself that I didn't think to email him about it sooner.

</comment></comment></comment><comment><USER21> Please don't break the back button. I like my back button.

<comment><USER22> Yes! For reference, when clicking "Open Diary" linking to [https://diaryemail.com/diary](https://diaryemail.com/diary) and redirecting when not authenticated breaks my back button.

</comment></comment><comment><USER23> Why doesn't the guy just write a python script to mail himself that prompt everyday? Sometimes I think if Paul Graham tripped he would start wondering if there was a start-up aiming to put an end to uneven ground.

<comment><USER20> PG writing a script to email himself every day doesn't create value for anyone but himself, someone deciding to build a company out of it does.

<comment><USER24> It could be released as free & open source software. That would be valuable.

</comment></comment></comment><comment><USER25> The very humble Notes app on macOS/iOS fulfills this for me. I just start typing, the minimalistic interface gets out of the way. Timestamping is on last modification instead of creation date but I add one manually. That's about my only drawback. Some features I find compelling:

\- I can start a train of thought on the mac, continue it on the phone and complete it on my mac.

\- It's not mined by some advertising company, no subject to the viability of some business.

\- Being so simple, the contents can be exported to some other format very easily.

\- Works offline (only background sync requires connection).

\- And search is near instant since everything is stored locally.

<comment><USER26> My first thought when reading this was "how do you automate it?" as that was part of the spec.

But you can actually do that with Shortcuts, which is build into the system.

1\. Make a note with a title like "journal" or "daily log"

2\. Open shortcuts, go to automations. Make a new one with a time of day trigger. (Or an alternate if you prefer)

3\. Actions: "find all notes where" —> filter for notes name. "ask for input" —-> ask the question you want + put "current date" as default entry. "Append to note" —> use magic variables. Select ask for input as the text to append, and note as the note to append to. (Specifically, the note your filter found)

4\. Duplicate this for as many times of day as you want to be asked

5\. At the appropriate time, click the notification and enter text to log it. Also add a trailing newline for note formatting. If anyone knows how to automate this on shortcuts, let me know: newlines seem tricky and I haven't figured it out.

This automates the asking, and also the timestamp. Thanks for posting your idea, it prompted me to setup alerts for 11:00 and 5:00 pm.

Edit: this doesn't transfer bullets to notes. If anyone knows how to append bulleted text via shortcut, let me know.

<comment><USER26> How do I make this list be a list without double spacing or making it a code block....there must be a way?

<comment><USER27> Double spacing is your only option. Don't make it a code block, as that is unreadable on mobile.

<comment><USER26> Thanks for confirming! Thought I was missing a method for years. Oh well.

</comment></comment></comment></comment></comment><comment><USER15> The service that Paul Graham mentioned is probably this one:

[http://ohlife.com](http://ohlife.com)

Shutdown announcement:

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

I used it and loved it. It was cool while it lasted. Unfortunately it's just one more example for why I don't trust startups.

Also you probably don't need a service, personally I can just send email to yourself, PGP encrypted. The only bit that's missing is a periodic reminder, to which you can reply. But I can probably set that up as a cron job.

<comment><AUTHOR> Funnily enough, I also used and loved it, and it was the inspiration to build Diary Email.

> But I can probably set that up as a cron job

Almost every app could be replaced with email, a cron job or a spreadsheet ;-)

<comment><USER15> I'm glad to see someone retry building something similar, but the problem is that OhLife is a service launched 10 years ago [1].

Many of us were not aware of privacy issues then, plus we were naive enough to think that the services we adopted would survive if cool enough.

I loved OhLife, but now 10 years later I wouldn't subscribe to a clone. Fool me once etc.

I wish you succeed though. It's a cool project and your landing page looks good.

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

</comment></comment></comment><comment><USER28> A friend and I had the same need for an email diary service in 1998. DailyDiary [0] has been online ever since :)

[0] [https://dailydiary.com](https://dailydiary.com)

</comment><comment><USER29> I uses good old terminal and vim, with a single command to enter current diary:

[https://github.com/Aperocky/termlife/blob/master/diaryman.sh](https://github.com/Aperocky/termlife/blob/master/diaryman.sh)

Writing diary has been so much easier! (though probably will be hard to extend to people who don't know/like terminal editors, or command line itself)

</comment><comment><USER30> I use a service named Penzu for keeping a journal. It's primarily web-based, but you can make it email-based if you wish to. Basically, you'd set up a daily reminder at a specific time, and you can reply directly to that email to make a new entry.

I should point out that Penzu is not a completely free service. There is a basic free tier, and then there are paid plans with additional features.

</comment><comment><USER31> Why does this need to be a "service?"

Why not just write the e-mail in your current e-mail client and then store the draft in its own folder?

People have been doing that for centuries. They'd write a letter to themselves and then store it in a box somewhere instead of sending it.

Some people took it a step farther and would write the letter, and then burn it if they were angry. Very cathartic.

<comment><USER32> This was my first response, too. Just email yourself with subject "diary", then the next day, reply to that email, etc. You can even have multi-user versions by sending it to someone(s) else and everyone just replies all. If you self-host your email then it's fairly secure, and has all of the advantages but none of the disadvantages.

</comment></comment><comment><USER33> This is a real "Dropbox is just rsync" sort of comment, but I personally use a small CLI util for this[1]. It automatically creates a new text file for each day that I use it and stores it in a dated folder/file. I can look at notes by day, or grep around in that directory fairly easily. And it syncs to wherever, so I can also just search within my file storage service.

I use this for both regular "diary" sort of journaling as well as notes around what I was doing on a particular day. It's wildly useful keeping daily notes on things, for questions like "Hey, do you remember that bug we dealt with last year...?"

[1] [https://gist.github.com/josephwegner/677ce82556fcbde6ae626a8...](https://gist.github.com/josephwegner/677ce82556fcbde6ae626a85d125a512)

</comment><comment><USER34> I 100% read "Dairy Email" until the page loaded. I thought you figured out how to email me milk.

<comment><AUTHOR> Haha, I actually figured it out. You just ship plant-based milk lol.

</comment></comment><comment><USER35> On seeing this tweet I wondered who would be the first to do it, and how long it would take.

Congratulations, from a fellow hacker - what's it been, 2 days? That's _really_ impressive speed, especially considering it's nice looking.

A lot of people would confidently assume they could knock this out in a couple of days no problem, but it'd actually take them a few weeks at minimum. I had a post on the front page a few weeks ago on the topic [0], perhaps you saw it - I could learn a lot from you :-)

[0] [https://boxci.dev/blog/why-it-took-12-weeks-to-ship-an- mvp-I...](https://boxci.dev/blog/why-it-took-12-weeks-to-ship-an-mvp-I- thought-would-take-3)

<comment><USER36> OP mentioned in a comment that this tool existed before the tweet: [https://news.ycombinator.com/item?id=22045528](https://news.ycombinator.com/item?id=22045528)

<comment><USER35> Ah, good spot.

Well, I'm still pretty excited for the OP at the right place right time nature of this. I mean, imagine browsing twitter and noticing that Paul Graham asks for someone to build the very product you're sitting on fully formed :-)

Kind of a perfect case study of the adage that you need to work really hard to prepare in order to be lucky!

</comment></comment></comment><comment><USER37> I use an App called Daylio [[https://daylio.webflow.io/](https://daylio.webflow.io/)] as a personal diary and mood tracker.

It has a single notification per day which is directly actionable (Asks for your mood for the day).

Data is stored locally on the phone and can be backed up to your iCloud/Google Drive.

I have found this app to be more habit forming in terms of creating a micro- diary, rather than sitting down and jotting thoughts.

</comment><comment><USER38> If anyone wants to give a multi-year journal (5-year Journals are popular in print form) chrome extension a try: [https://chrome.google.com/webstore/detail/goal-board- vision-...](https://chrome.google.com/webstore/detail/goal-board-vision- board-g/egbpmmfglhgciocgillbpooejgfajmng?hl=en-US)

<comment><USER39> Thank you for the suggestion. Played around with it a bit an it looks interesting. Curious as I am not familiar with Chrome Extensions - where is the actual data stored?

</comment></comment><comment><USER40> That's a great idea, can write on any device!

In the early 2000s, I had a setup where I could blog by either email or SMS. By default emails would become new posts. SMS would append to the latest entry, or I could create a new one with a keyword (NEWPOST title, I think).

This was a nice way to create and update travel journals before mobile internet and smartphones were widespread.

<comment><USER41> honestly, this feels like a great feature for today, especially with the prevalence of smartphones and the mobile web! now we have devices that are mostly easier to type/compose messages on and the fierce rush to build an app for everything has imo reduced the "cool factor" of a bespoke native app. i hate installing a new app to use a service if the app is buggy and the workflow could be done some other way (even responsive webapp). personally, i really enjoy sms based UX.

</comment></comment><comment><USER42> A few days ago a weekly letter I wrote myself called Dear Nick that I BCC a few close friends. I love doing it now

Please steal the idea if you like!

[http://nickcammarata.com/writing/two- experiments-2019](http://nickcammarata.com/writing/two-experiments-2019)

<comment><USER43> I loved the Dear Nick idea, the weekly script, and sharing the most intimate notes with your closest friends. Good work.

</comment></comment><comment><USER44> Alternatively, jrnl.sh. It's tiny, allows you write using your favorite editor, and can be backed up or replicated with simple git. It's even encrypted.

Maybe I'm not the target demographic for services like these but I would _never_ trust my personal thoughts with a service like this.

<comment><USER45> It is a popular conceit to assume that anyone cares about your thoughts or that they carry some significant, intrinsic value. This happens to me all the time. It takes reflection to realize that most of the crap that people generate is just that, crap. Sure, it may be crap that can incriminate you in a court proceeding or crap that could be developed into patented intellectual property, but it is crap none-the-less. Its that tendency people have to assume things like "I got super stoned in the late 90's and sketched out designs for Photovoltaic Solar Roofing systems, that Musk guy stole my idea". No, odds are that Musk guy didn't steal shit from you. Your diary wasn't hacked, your sketches were not secretly photographed and your phone isn't bugged. Your idea was in some way obvious. In the PV example it was obvious and requires money and influence to develop, two things that if you had them you wouldn't be making claims that "so and so stole this idea" or "I invented that first".

<comment><USER18> No one gives a crap about your nude body. Still, you probably don't shower in the open.

</comment></comment></comment><comment><USER46> For a different thought of how to do it, I self-host a Wordpress site that is essentially a diary. However, right now the scope is to keep track of recipes that I have made, if I liked them, and where I found them.

While I could have made a notes app, this allows my fiancée to look at it, comments on it, or make her own posts to give her thoughts too (though she hasn't used it).

I have thought about expanding it into a more general blog (technical or otherwise), I haven't gotten to that step yet.

Thinking about it, I could make a cron service on it to ask me "what's going on" with a link to make a new post as well, and make it optionally private (so only I or who I choose can see it).

</comment><comment><USER47> Great job. Here is what I propose to make it more secure and prevent you from being able to read anyone diary...

I propose that each day a link/token is sent to your email. The link then ask for a password that is handled only with client side javascript and does the encryption of the data before sending it do the server. Look at what Blockhain.info or myetherwallet is doing for client side encryption. Maybe also propose provide all the front end as opensource and provide a way for people to host their own front (a few HTML, JS files where you input the link or token sent to you by email...)

<comment><AUTHOR> Thank you!

My goal wasn't to create a 100% secure diary. If you need that, you probably should not store your data in the cloud. That's unlikely that I will ever try to make it happen. But even if I would, there're so many ways to screw it over anyway, so I won't ever try to make this promise.

However, I will consider open-sourcing it.

Also see my comment where I addressed the privacy issue: [https://news.ycombinator.com/item?id=22045670](https://news.ycombinator.com/item?id=22045670)

<comment><USER48> Open sourcing it (and allowing to self-host it for personal and private use) would be awesome!

</comment></comment></comment><comment><USER49> I stumbled on a "lets call it a bug". If i register with a plus sign using my gmail email@example.com

i cannot send emails from that email address and so it wont work for me.

<comment><AUTHOR> Right! But I'm afraid I can't fix that. When I receive an email, I associate it with the address that GMail reports to me,, and when you sign in as email@example.com, the email address differs (as you might already guess). I know that I can safely remove +something but I can't be sure that it will work the same for every email service and ensure security. Please use email@example.com, I won't send you anything unless you explicitly ask for it.

</comment></comment><comment><USER50> I've been doing this for myself for a couple years now with a little service I wrote that just sends me an email each day that I reply to. It's archived in my email history and in a simple, searchable web UI. It's been super useful for figuring out when I did something a few years ago, medical notes, etc.

</comment><comment><USER51> Congrats. This is cool. Quick question. Did you pull this off in one day (after PG's tweet)? If yes, that is mighty impressive.

<comment><AUTHOR> Sorry to disappoint you, but I did not. I built it some time ago, but I was quick to reply, so there's a chance that Paul tried the service. I'm such a fanboy, haha.

</comment></comment><comment><USER52> It's pointless to say the least to claim "Private and secure" without at least having client-side AEAD of some sort.

</comment><comment> vi-mode PG is a smart mind with a long track record of achievements. Still people shouldn't follow him in a cult-like manner or turn him into a voodoo-kind role model, 'PG tweeted he needs a pink phone, I made him one'.

While the initial email idea is tempting, it's nonsense from a security perspective especially with this use case.

</comment><comment><USER53> I used [http://ohlife.com/](http://ohlife.com/) until they shut down. After that I just switched to using a Google Doc. The service mostly just provided me a daily reminder, but after you get into the habit it isn't hard to keep it up without that.

<comment><USER19> I wrote and maintain AhhLife as a replacement for OhLife. Been going for many years now. Thousands of active users.

</comment></comment><comment><USER54> Honestly, I love it!

A very related project, that focuses on being a "social network" through email: [https://news.ycombinator.com/item?id=21853667](https://news.ycombinator.com/item?id=21853667)

Edit: I'm getting errors with the login functionality. Please check it out.

<comment><AUTHOR> Thanks! What browser do you use?

<comment><USER55> Got the issue too, it was not related to my browser but more likely to my email client that replaced more & with & than needed and broke the link. Edited the link manually and it worked.

<comment><AUTHOR> Ouch! Firebase generates links for me but I'll take a look at what I can do.

</comment></comment></comment></comment><comment><USER56> My personal solution to this is using [http://itty.bitty.site](http://itty.bitty.site)

You can write a lot on one page. And I wrote some bash functions to store the links when you close your browser, and then give you the option of opening one based on the title.

</comment><comment><USER57> This thread makes me miss the old Posterous service. I used to enjoy emailing shot blog posts, and only having a few friends of mine knowing what my blog address was. It was a form of journalling that I enjoyed until they inexplicably shut the service down.

</comment><comment><USER58> I really like the layout of the page and your manner of speaking. Both are web design ideals I strive for. I also want people to write more :)

Little nitpick - try out your signup page on Firefox mobile and you will see a one character width input field for the email input box :)

</comment><comment><USER59> Out of curiosity, how are you preventing spoofed email spam? It looks like you're accepting everything to one generic email address, and posting via the senders address?

</comment><comment><USER60> What's the difference between this and using...your email? I'm genuinely confused.

</comment><comment><USER24> The codeless way of doing it: Set up a daily recurring event on Google Calendar, with an email reminder saying "Wazzaaaap?" then you reply to it. To accumulate, use Gmails search functionality.

</comment><comment><USER61> Funny when I came to post my diary app, I saw this haha

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

</comment><comment><USER62> I do this with my own mail account using a filter that drops messages with an @NoteToSelf tag in the body into a particular folder. I hate to be that guy, I think Paul thought too hard about this one.

</comment><comment><USER63> Great job, very fast. One more person delivered this on Twitter thread...[https://nom.blue/](https://nom.blue/)

</comment><comment><USER64> Looks great. I've gone through the comments but might missed it - Could you share a bit on what you used to develop this? language? frameworks? thanks!

</comment><comment><USER65> Click "Open Diary". Click back button. Nope.

</comment><comment><USER66> I use a dedicated email address and send emails to myself. Much private, you can make threads ect..

Using protonmail by the way.

</comment><comment><USER67> Cool, so people post their diary to an email service? Interesting. Why not just post on Facebook? It's about as public as it gets.

<comment><USER68> I don't think it's supposed to be public. The idea is that you get an email each day asking about what's going on, you reply, and the service tracks your replies in a way that you can retrieve them.

</comment></comment><comment><USER69> Isn't this exactly like [https://posthaven.com/](https://posthaven.com/)?

</comment><comment><USER70> What do you use for sending and reading emails?

I'm looking to build a simple script that can send out some emails and respond to simple replies.

</comment><comment><USER71> email@example.com is an oxymoron. Why would I write an e-mail to some random address at a domain I don't own, and pretend that it's private, when I could send it to <myalias>@<mydomain>, where it ends up on a server under my desk?

</comment><comment><USER72> Why exactly do you need to store my age to store my data (in the signup process)?

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

</comment></comment><comment><USER73> How do I update my Full Name? or change the newsletter subscription options? ∞?

<comment><AUTHOR> Sorry, there are no settings for that yet. Please mail me to firstname.lastname@example.com, and I'll do it for you.

</comment></comment><comment><USER74> TBH, I don't think this is anything practical, but I love the design.

</comment><comment><USER75> Nice work. FYI pricing tables are not readable on my iPhone 8 in safari

</comment><comment><USER76> This is a newer feature of Day One (but you have to pay to get it).

</comment><comment><USER77> I dogfood handle.sapico.me , I used to email it to myselve though.

</comment><comment><USER78> _shut up and ship it_

I love the simple sourcing of requirements. Good job!

</comment><comment><USER72> Why do you exactly need to know my age to store my data?

<comment><AUTHOR> As I'm based in the EU, I can't store personal data of children without the consent of a parent. So to make sure I added the form.

</comment></comment><comment><USER79> @kossnocorp How long did it take for you to build this?

</comment><comment><USER80> also: [https://www.maildiary.net/v2/](https://www.maildiary.net/v2/)

</comment><comment><USER81> A hard limit of 30 friends is a bit annoying.

</comment><comment><USER82> Amazing speed/execution. Kudos!

</comment><comment><USER83> Do you store the diary in plain text?

<comment><AUTHOR> I stored it as sanitized HTML along with the original HTML so I can resanitize it after I improve the parser or find an error in it.

</comment></comment><comment><USER84> How do you handle the security?

</comment><comment><USER85> Submitted title was "Show HN: Paul Graham requested an email diary service, so I shipped it", which isn't a bad thing, but given that the post is now high on the front page I think we should do the usual edit and take out the celebrity name.

</comment><comment><USER86> I have a big problem with this: You can't seem to edit the post after it has been sent. A typo staying there forever would drive me crazy :)

</comment><comment><USER87> Paul Graham Paul Graham Paul Graham. Paul Graham Paul Graham Paul Graham Paul Graham? Paul Graham Paul Graham Paul Graham Paul Graham!

Paul Graham.

<comment><USER88> You're literally typing those words on a website that Paul Graham created.</comment></comment>


Live Aircraft Tracking - <AUTHOR> http://casper.frontier.nl/

<comment><USER2> Similar app covering the Baltic region <http://www.flightradar24.com/> which parses data from this system [http://en.wikipedia.org/wiki/Automatic_dependent_surveillanc...](http://en.wikipedia.org/wiki/Automatic_dependent_surveillance- broadcast)

</comment><comment><USER3> In case you're wondering about public access to these kinds of datasets: [http://en.wikipedia.org/wiki/Automatic_dependent_surveillanc...](http://en.wikipedia.org/wiki/Automatic_dependent_surveillance- broadcast#Public_Access_to_ADS-B)

According to the same Wikipedia article, the FAA is has been rolling this out since 2006 (target date of 2015 for full coverage).

<comment><USER4> It's not actually public access to "Data sets" - these folks are intercepting over the air live transponder data from each aircraft and then plotting the resulting information.

There are two primary forms of these types of transponders, one basic which just transmits the aircraft altitude and unique identifier, and the other advanced which transmits location, altitude, heading, intent (lading, taking off, descending etc).

In the United States, most aircraft only use the basic version, so actual plotting all aircraft using these interception techniques is much more difficult. However, any international aircraft that fly in the US, or aircraft that are international capable, can be tracked.

There are out of the box commercially available receivers and software that you can use to get started... but again be warned that until US adoption becomes more widespread you'll only be able to track International flights.

For example: <http://www.airnavsystems.com/RadarBox/index.html>

<comment><USER5> The code for a the basic (mode A/C) transponder isn't actually unique. It's just 4 base-8 digits settable by the pilot, with several codes reserved for specific uses. When on an ATC-assigned code, that code in only "unique" within a specific area. I might be assigned 0234 flying in Boston Center's airspace and someone else might be on 0234 in Phoenix.

</comment></comment></comment><comment><USER6> I worked on a proprietary system that did first person, single flight tracking in 3D <http://www.youtube.com/watch?v=v6Jw1vNrh0Q>

Similar data is available in KML for GoogleEarth from <http://flightwise.com/flighttracking/>

</comment><comment><USER7> Such services like <http://radar.zhaw.ch> used to have a 15 min delay one year ago for security reasons. Not sure if that is still true, it seems like it's realtime now.

</comment><comment><USER8> Cool - now I want a link into Google Earth:

\- First person view from cockpit.

\- Look 'up' from current ground position, and identify what the various contrails I see are.

\- General 3d free view of airways etc.

</comment><comment><USER9> Passur does this for a number of large US airports:

<http://www.passur.com/airportmonitor-locations.htm>

<comment><USER10> Passur uses active radar and restricts access to its' apps outside US AFAIK.

Flightaware.com uses FAA feed (with a slight delay), but thus has full coverage of US airspace and a lot of other useful information (flight plans etc), but its' map sucks.

</comment></comment><comment><USER11> While sitting on a plane over the holidays, I was thinking something like this would be pretty cool, especially if Google Earth was the visualization engine.

</comment><comment><USER12> Really cool effect that it changes the map from light to dark depending on the time of day where you're looking.

</comment><comment><USER13> This would be awesome for me since I live beside an airport. Is there a similar site for North America?

</comment><comment><USER14> flightstats.com seems to have flight tracking for a particular flight. I'm not sure if this isn't just a display of "elapsed flight time vs. scheduled arrival" though.

</comment><comment><USER15> similar site, but for shipping - <http://www.marinetraffic.com/ais/>

</comment><comment><USER16> @samlittlewood, that would be a really cool augmented reality application. just point it up at the sky to see all the various locations of airplanes.

<comment><USER17> You know, there is this wonderful feature here called "reply" ...</comment></comment>