The Problem with Two-Factor Authentication - <AUTHOR> http://coovtech.com/posts/two-factor/ <comment><USER2> There isn't a great way to make it easy for the user. Assuming that the password is "something you know" you need to add either "something you have" or "something you are" to the mix. That will mean tokens/cell phones/computers/other physical objects or effective biometrics. There are some creative ways to deal with this, but no matter how you look at it; it still is an added inconvenience for the user.

<comment><USER3> I think the biometrics angle is interesting and will become more prominent in our lives as the tech gets cheaper, smaller, and easier to implement.

But biometrics doesn't pass the grandma test (you know, grandma who doesn't use cell phones, won't do online bill pay, snail mails everything, like mine).

I'm fascinated by all the ways people are trying to reduce the inconvenience of authentication.</comment></comment>


Ask HN: Home Design for Hackers? - <AUTHOR> I'm looking for a method that can help me decide how to best design my home. For example are the most suitable wall colors for entry hall, what are not good, how to match the best items.
I'm sure professional home designers have systems they follow through beside personal taste. <comment><USER2> There are themes or styles which match traits in certain personality types, is that the sort of thing you mean?</comment>


I, Pencil - <AUTHOR> http://www.thefreemanonline.org/featured/i-pencil/

<comment><USER2> FTA, a quote that is ever more true today than possibly when it was introduced: "We are perishing for want of wonder, not for want of wonders." -- G.K. Chesterton

Profound.

<comment><USER3> I love Chesterton. He had a talent for words. Too many memorable, profound, and humorous quotes. Another one:

"The Bible tells us to love our neighbors, and also to love our enemies; probably because they are generally the same people."

He wrote that _before_ the invention of suburb.

<comment><USER4> He's fantastic. This guy saw the matrix and was able to write about it in a thoroughly entertaining way. I believe his 'All Things Considered' series inspired the name of NPR's daily program. If you want to channel him, download the audiobooks app for your iphone and you can stream him. Here's one of my favorite bits: <http://www.classicreader.com/book/2281/13/>

</comment></comment></comment><comment><USER5> This sparked my interest into learning how pencils are made, here are some short videos:

<http://www.pencils.co.uk/modules/heritage/videos/core.aspx>

</comment><comment><USER6> i like the liberal point of view. But also find amusing in this writting the pictoresque display on how the protestants equate money to a god.

<comment><USER7> _i like the liberal point of view._

I do not know what so liberal about celebrating free market.

 _But also find amusing in this writting the pictoresque display on how the protestants equate money to a god._

I am not sure what you mean by this. He only mention a faith in _free people_ , which probably mean that individuals have right to property, life, and liberty.

<comment><USER8> perhaps he means classical liberalism.

<http://en.wikipedia.org/wiki/Classical_liberalism>

<comment><USER6> yes, and would love to know how the article does not talk about the same that your wikipedia link. And this: <http://en.wikipedia.org/wiki/Invisible_hand></comment></comment></comment></comment>


Addicted to your phone? This guy is trying to make it stop - <AUTHOR> http://www.theatlantic.com/magazine/archive/2016/11/the-binge-breaker/501122/?utm_source=wdfb&mbid=social_fb&single_page=true <comment><AUTHOR> "Never before in history have the decisions of a handful of designers (mostly men, white, living in SF, aged 25–35) working at 3 companies"—Google, Apple, and Facebook—"had so much impact on how millions of people around the world spend their attention … We should feel an enormous responsibility to get this right."

This was I think the most interesting quote in the article.</comment>


The Old Reader will stay open thanks to an unnamed 'corporate entity' - <AUTHOR> http://thenextweb.com/insider/2013/08/04/the-old-reader-backpedals-site-will-stay-open-to-the-public-thanks-to-unnamed-corporate-entity-in-the-us/ <comment><USER2> >BREAKING: In a surprise belated April Fool's joke, Google revives Reader, according to former CEO Eric Schmidt, "just to fuck with everyone who spent money developing a shitty alternative."

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

</comment><comment><USER3> This whole Old Reader debacle is just absurd to me. According to this blog post[0], life for the developers has become "hell in every possible aspect we could imagine" as a result of all the users they've gotten since Google Reader shut down. But this makes no sense - why wouldn't you just start charging for access so that you can hire more people to run the site, and so that you don't get overwhelmed with more users than you can handle?

0: [http://blog.theoldreader.com/post/56798895350/desperate- time...](http://blog.theoldreader.com/post/56798895350/desperate-times-call- for-desperate-measures)

<comment><USER4> They addressed that, if obliquely: "not everyone wants to be an entrepreneur". It sounds like they didn't want to turn it into a job.

<comment><USER5> Probably should have closed registrations when Google announced the impending death of Reader, then.</comment></comment></comment>


Ask HN: Compile to BF - <AUTHOR> I'm looking for a compiler that takes a more high-level language, and compiles to BF (I think HN will censor the name).
Background:
My Fun side project this year, is taking a bunch of Arduinos and hooking them together to create something similar to a computer.
To make it extensible, so I can keep adding and building it out into something nicer, I created a sort of extended BF, to be on the "central" Arduino, which all the others communicate via.
It has all the usual functions, except:

    ,
 Read from selected pin

    .
 Output to selected pin

    (
 Move pin selection to the left

    )
 Move pin selection to the right

    0
 Reset the stack and pin selection.
This means that I can add and remove components as I like, so long as the core interpreter stays the same. Programs can even be bigger than the interpreter can read at once, so long as 0 doesn't appear.
But BF sucks almost as much as ASM for hand-writing programs.
I don't have a lot of experience with compilers, interpreters are more my thing because they're so easy.
I was hoping something out there, that I haven't managed to find, will be simple enough for me to adapt to the core interpreter for my device. <comment><USER2> I'm not sure if anything exists like that but it would be an interesting project to create a brainf*ck backend to LLVM, which would allow any language to compile to BF</comment>


Important Security Notice from Patreon - <AUTHOR> https://www.patreon.com/posts/important-notice-3457485 <comment><USER2> As always, these disclosures are an opportunity for all of us to learn something without having to pay the substantial reputational price for doing so. I'd encourage everyone on HN to read the How We Ended Up Here parts carefully and take simple remediation steps in your own projects/companies.

 _The unauthorized access was confirmed to have taken place ... via a debug version of our website that was visible to the public._

This is a ridiculously common way for attackers to get into your network. You both want to have an accurate inventory of the apps/boxes your organization has (highly non-trivial at scale) and you don't want dev/staging/etc to be publicly accessible. The simplest way is to firewall off traffic to them.

If you need them to be accessible for e.g. callbacks from public services, default-deny everything and control access at the network or frontend web server level before things get to your applications (which are likely going to be your vulnerable underbelly).

In most cases, the dev servers will not themselves have really interesting things on them. They will instead be used by attackers to pivot to other, more interesting servers on your network. Patreon's understanding is that the dev servers lacked SSH keys to the production servers -- that's a good thing, but after the bad guy has a dev server with local network access to interesting machines, they're going to do things like e.g. probe for exposed admin consoles to network appliances, outdated RedMine instances, internal tools, etc etc, and they _will_ eventually own every machine that talks to any machine that your dev server can talk to. You _will_ eventually lose the entire deployment if the bad guy wants you to.

 _The development server included a snapshot of our production database, which included encrypted data._

Never, ever do this. (It's been a firing offense at most shops I've worked at in my career, and that's for _good reasons_.)

<comment><USER3> >>The development server included a snapshot of our production database, which included encrypted data.

>Never, ever do this. (It's been a firing offense at most shops I've worked at in my career, and that's for good reasons.)

Would you use a migration script that "scrambled" certain columns on the way back from Production to Development? That's the only way I've seen it done properly at $EMPLOYER.

<comment><USER2> _Would you use a migration script that "scrambled" certain columns on the way back from Production to Development?_

No, because you'll almost certainly fail to fully anonymize the data and if there is anything "interesting" in your possession it will probably still be recoverable. I wrote a comment on HN long ago about this, and still stand by it.

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

<comment><USER3> Wow, thank you. It took that kind of crystal clear example for me to understand the risk clearly.

</comment></comment></comment></comment><comment><USER4> For once we get what we need to know. They used bcrypt and everything is nicely salted.

Congratulations Patreon, you just executed a textbook "good" public disclosure of a security breach!

<comment><USER5> I agree. When i read this email this morning, I came away feeling more secure with the company, rather than less. I hope that more companies do it this well, and realize that admitting the breach well can strengthen the trust.

<comment><USER6> This is out and out ownage. Patreon has basically been Ashley Madison'd. Source code, internal dev documents, cron jobs, and the entire 13GB database is out.

My confidence is zero.

</comment></comment></comment><comment><USER7> > unauthorized access to registered names, email addresses, posts, and some > shipping addresses. Additionally, some billing addresses

Considering patreon has some users who have been, and still are, targets of harassment, this could be much worse than having their credit card or password leaked.

</comment><comment><USER8> This guy: [https://twitter.com/Tulpamania](https://twitter.com/Tulpamania) posted about the attack on 28th Sept...

</comment><comment><AUTHOR> I'm particularly curious how they protected SSNs.

<comment><USER9> > Although accessed, all passwords, social security numbers and tax form > information remain safely encrypted with a 2048-bit RSA key.

> ...

> We protect our users' passwords with a hashing scheme called 'bcrypt' and > randomly salt each individual password. Bcrypt is non-reversible, so > passwords cannot be "decrypted." We do not store plaintext passwords > anywhere.

Updated post now says the above.

<comment><USER10> Generally you don't encrypt actual data with rsa, you encrypt a symmetric key with rsa, then encrypt the actual data with the symmetric key with symmetric encryption. An obvious question is what granularity is the symmetric key for their data. A different one for each piece of data?

Usually rsa is used when the source of the data never needs to read the data again. Usually for example like sending an email. The sender encrypts it and sends it, but the sender cannot decrypt it. Why were they using rsa for the tax information? Were there multiple servers and the server that creates the information is not trusted with being able to ever read the information later?

<comment><USER11> AFAIK there is nothing stopping you from encrypting arbitrary amounts of data directly using asymmetric algorithms like RSA. The scheme you describe is implemented because asymmetric crypto is dead-slow compared to symmetric crypto, so the amount of data to be encrypted using an asymmetric algorithm is kept to a minimum by just encrypting a random symmetric key, which is then used to encrypt large amounts of data with a fast symmetric algorithm.

Since the data that was encrypted in this case is inherently tiny (social security numbers etc.), I'd think it would be a good idea to directly encrypt this with an asymmetric algorithm, thereby reducing the complexity of the entire mechanism, which is generally beneficial for security as well as maintainability.

But I'm wondering as well about the reasons for choosing an asymmetric algorithm in the first place. Typically, symmetric algorithms are used for such cases in which the entity that encrypts something is the same entity that needs to be able to decrypt it later. It's not that this could not be implemented as well using asymmetric crypto, but it somehow defies the whole point of the asymmetry.

</comment></comment></comment></comment><comment><USER12> I just see a blank grey screen, because the page doesn't display if you have Facebook Connect blocked.

</comment><comment><USER13> Why are they using asymmetric encryption for passwords, SSN, and tax information? I've never heard of that done.</comment>


Ask HN: Book title Suggestion "How to kill a zombie with your mind" - <AUTHOR>

I'm writing a book on programming languages. The book is about how to write a programming language in 7 mind-bending days, and I need help in choosing a title that isn't too lame.
"How to kick ass and write a programming language in 7 days".
"How to kill a zombie with your mind, a guide to writing a programming language in 7 days"
"How to get things done by changing the structure of the universe; a 7 day guide to writing a programming language."
Ideas for book titles are welcomed too.
- - -
The whole "7 days" things is all tongue in cheek, but it should enable readers to have plenty of questions and get the big picture of what you can do when you alter the language. My code kata in life is writing grammars and writing programming languages, and much to my shame, I never open sourced any of them (which could also be said is a good thing because some of them were terrible) <comment><USER2> Write the book.

Make it good.

Then, ask us to help name it.

Otherwise, we're just bike-shedding here.

<comment><AUTHOR> That's a good point. Thanks, I'll do that.</comment></comment>


Erik Meijer leaves Microsoft - <AUTHOR> http://channel9.msdn.com/Forums/Coffeehouse/Erik-Meijer-is-leaving-MS

<comment><USER2> The articel does not mention what he did, so here it is: [http://en.wikipedia.org/wiki/Erik_Meijer_%28computer_scienti...](http://en.wikipedia.org/wiki/Erik_Meijer_%28computer_scientist%29)

"His work at Microsoft included C#, Visual Basic, LINQ, Volta, and the Reactive programming framework (Reactive Extensions) for .NET"</comment>


From 15 Years of Heroin Addiction to Author, Speaker and PhD - <AUTHOR> https://www.alustforlife.com/personal-stories/from-15-years-of-heroin-addiction-to-author-speaker-and-phd <comment><USER2> Please stop creating throwaway accounts and re-submitting the same content on different domains. [https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html) says it well: "Throwaway accounts are ok for sensitive information, but please don't create accounts routinely. HN is a community—users should have an identity that others can relate to."</comment>


Cryptocat security audit results - <AUTHOR> https://github.com/cryptocat/cryptocat/issues?milestone=23&page=1&state=open

<comment><USER2> Is there anything public as to methodology, coverage, and other test info? I'd really like to see how this test was performed and what was achieved during that time, for curiosity's sake.

</comment><comment><USER3> Huh, looking at [https://github.com/cryptocat/cryptocat/issues/581](https://github.com/cryptocat/cryptocat/issues/581): "Ciphertext retrieval by joining from non-Cryptocat clients" \-- isn't that just expected behavior, or am I missing something here?

<comment><USER4> You missed the word "invisibly"\-- they can join/watch without showing up in the Cryptocat client as being present.

<comment><USER5> What is the difference between that and someone listening on the network with a tool such as wireshark? It may be a little to get the ciphered text easier, but it doesn't weaken the security in any way.

<comment><USER6> It means you don't have to be local enough to capture network traffic.

<comment><USER5> Fair point.

</comment></comment></comment></comment></comment><comment><USER7> I keep confusing this project with the old cryptcat (netcat+twofish encryption).

[http://cryptcat.sourceforge.net/info.php](http://cryptcat.sourceforge.net/info.php)</comment>


Tad, a tabular data viewer - <AUTHOR> http://tadviewer.com/ <comment><USER2> Nice, some initial remarks:

\- Sad to see it's an Electron app, but I don't want to start this flamewar all over again

\- Mid-sized CSV file opens fairly quick

\- If you want to build this into a full-fledged app, be prepared to handle a lot of CSV edge cases, also think about supporting AVRO, Parquet files

\- Regarding filtering: I can filter on CONTAINS and '=' but not on NOT- CONTAINS or '<>' I think? This is annoying to filter out empty strings (didn't check in much detail so I might be wrong here)

\- Regarding filtering: I have a lot of columns, would be nice if the dropdown would allow me typing some characters to prune the list and quickly find what I'm looking for

\- You might think about including some statistics per column, e.g. variance or entropy to allow for exploration in case many columns are present and you quickly want to highlight the more "interesting" ones

Congrats on putting something out! Some competition in this space: [https://exploratory.io/](https://exploratory.io/), [https://github.com/saulpw/visidata](https://github.com/saulpw/visidata) and [http://www.delimitware.com/](http://www.delimitware.com/) (as others have mentioned).

<comment><USER3> Genuinely curious, what can be used instead of Electron for cross-platform desktop app?

<comment><USER4> Tk - It can look a bit dated, but it's easy to use, comes bundled with Python or Tcl, and bindings in most popular languages. Can run on Windows, Linux, macOS.

Qt - The IDE is great. It doesn't look native. Either dynamically linked, or commercially licensed. Runs on Windows, Mac OS X, Linux, Android, iOS, and a range of embedded hardware.

wxWidgets - Native backends, so it always looks like it belongs. Bindings in a ton of languages. Can be both simple or complex, depending on what you need it to do. Runs on Windows, Mac OS X, Linux, and in-progress for Android and iOS.

JavaFX - Java's replacement for Spring. Runs anywhere Java does. Fairly flexible, and easy to use.

Kivy - A Python framework. Mainly aimed at touch-compatibility. Runs on Windows, Linux, macOS, iOS, and Android.

LCL - A Lazarus framework. (Think Pascal). Really easy to use, with great drag'n'drop and the like in the IDE. Runs on Windows, macOS and Linux.

nuklear - Fairly easy to use, with bindings in a lot of languages. Sometimes requires a bit more work getting it to run on some platforms.

This is not all, but the ones I find easy to use (as easy or easier than Electron), and easy to set up and deploy.

<comment><USER3> Thanks for such a detailed answer. Can you elaborate why those would be better than Electron?

<comment><USER4> It depends on what you want from the framework.

Electron doesn't look native, which a lot of consumers don't like. Others don't care. So, depending on your audience, it can be an extra hurdle that some like wxWidgets don't have.

Electron is difficult to get performant. You need to really think and test your perf. Qt, Tk, and a few of the others are much faster, much easier. And if you put in the same effort you need to put in for a fast Electron program, you can end up with blisteringly fast speeds.

Electron bundles are large to download. Some places this doesn't matter, others it does. (Think Australia, Africa and the like where tiny download caps exist). IIRC Qt, the biggest dependency, is about half the size of Electron. Tk and wxWidget are small, nuklear is just a header. It's tiny.

Electron is not good with touchscreens (or "harder to get right"), but more and more people have them. Kivy is great for that usecase.

Electron is "just code". Qt Creator and Lazarus' IDE are phenomenal for putting GUIs together. You'll be surprised how little code you need.

Electron is primarily JavaScript. Some people like that, others don't. If you want an easy language, you can use Python, or Nim. Want more control C or C++. Value both time and control? Go with Java.

Electron has its place.

If you have a really tight time-to-market window, or this is just a tiny personal project, and JavaScript is your "goto" language, then awesome. Use it.

But, the cross-platform GUI world is big. You have a dozen or so mature, stable, proven frameworks.

So if your project takes off, or you have the time to do things right, evaluate if any of these libraries, including Electron, fit your needs.

<comment><USER5> How's Java giving user more control than Nim? The latter allows for hardware access like C/C++

<comment><USER4> I said C/++ was more control, Java was a middleground between the two. Nim is easier, but its memory usage and performance are harder to be sure about, because it hasn't been around as long.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> If you prefer working from the terminal, you should check out VisiData ([https://github.com/saulpw/visidata](https://github.com/saulpw/visidata)). It's a curses tabular data tool that can start browsing terabyte .csv files immediately, with few dependencies and no clicking.

<comment><USER7> I was looking through the comments hoping to find a tool like this. You did not let me down, fellow HNer! I try to use the command line whenever I can. Somehow there is a command line tool for just about everything, except for the obvious cases where it not useful like visual media and graphs.

<comment><USER8> I don't want to dissuade you if curses-based UIs are your thing. But one thing that's been crucial to me from Day 1 is that you can type "tad foo.csv" at the command line and immediately get a usable view of your data with no extra config or tweaking needed. I mostly launch tad from the command line.

<comment><USER6> I just launched "tad 311_Service_Requests_from_2010_to_Present.csv" (a 10GB dataset from data.cityofnewyork.us) and it ate up all my memory without ever showing any data. "vd 311_Service_Requests_from_2010_to_Present.csv" shows the first rows instantly, and I can start rearranging columns while it is still loading, and I can press Ctrl-C to stop the load (and the rows already loaded are still available). No config or tweaking needed.

</comment></comment></comment></comment><comment><USER9> Looks fantastic! I love the combination of SQLite fixed schema with the hierarchical view.

Some advice on the website: Do some browser sniffing (I know) to display a screenshot of the software on the user's operating system. This immediately answers the question "Does the software work on my computer?" Also, the source code link should be near the Download section. Not everyone is trained that the triangle GitHub icon in the top right means "source code".

<comment><USER10> The screenshot suggestion is a good one, whenever I open a GUI software page and see a screenshot of Windows or MacOS I often just close the tab and move on.

<comment><USER11> To me it's often that when I see screenshots of MacOS I usually assume that it's Mac only software and most of the time it's true

</comment></comment></comment><comment><USER12> Just noticed the installer changes the file association for CSV's so they all open with Tad, without asking me first. Please do not do this.

Otherwise, nice app. How does it scale to larger CSV files? I have been working on something similar ([https://warp.one](https://warp.one)) for Mac, which streams CSV files (apparently you use a SQLite database behind the scenes as cache?)

<comment><USER13> Upvote for "don't change default file handler without asking".

<comment><USER8> Really sorry about this! I do specify Tad as a handler for CSV files, but becoming the default handler was not my intent at all; I will look into what's causing this.

</comment></comment></comment><comment><USER14> Just gave it a quick test run on a 6 million row by 8 column CSV my software produces. Fairly slow to open on an iMac, but got there in the end. Looks nice. Sorting fast. Have got an additional column called 'Rec' for some reason.

</comment><comment><USER15> Related to this, if you're looking for a CLI tool for handling CSVs, xsv [0] is looking promising.

Based on prior experiences with CSV, one of the big problems I've seen has been figuring out what text encoding is being used. This problem appears to be more prominent with people outside of the US. It looks like Tad is using fast- csv, which I don't think will properly handle different file encodings. Life would be so much simpler if everyone just used UTF-8.

[0] [https://github.com/BurntSushi/xsv](https://github.com/BurntSushi/xsv)

<comment><USER16> You basically have two approaches:

1\. Write your CSV parser with an assumption that the data is ASCII compatible (this means it works with either UTF-8 or Latin-1 out of the box, possibly modulo non-ASCII meta characters). To support additional encodings---such as UTF-16---either the CSV library or the caller must transcode first.

2\. Write your CSV parser such that it can work on multiple different encodings. For example, this means looking for `\x2C\x00` when parsing UTF-16LE data instead of just `,`. This introduces implementation complexity, and you'll be unlikely to support the full gamut of encodings that other tools support whose job it is to do that sort of thing.

(2) is kind of weird but probably quite a bit faster than (1), although I can imagine it being useful in very niche circumstances. e.g., "I have a boat load of UTF-16 encoded CSV data and transcoding it to UTF-8 to use this CSV parser isn't worth my time because ______." I can't actually fill in that blank, so solutions in (1) tend to be the way to go.

Now... If you're building a full on CSV tabular viewer, then I might understand why it should handle encoding for you automatically, but when it comes down to it, the viewer is still going to need to choose between (1) and (2). Unless they want to hand roll their own CSV library, I imagine they're just going to pick (1), and when possible, transcode the data first. In that case, it shouldn't really matter whether their underlying CSV parser supports alternative encodings or not.

<comment><USER15> The use-case in which I got to see a lot of CSVs was in a data importing tool. Personally, I think that everyone should just use UTF-8. But since a lot of people don't do that, we were forced to try guessing the encoding while providing a preview, along with a way to try manually try other encodings.

I think the only other time I've seen something that hacky has been with a date parser that would try to guess the format for you. That pushed me to the firm belief that ISO8601 is the only sensible way to store dates.

</comment></comment></comment><comment><USER17> This is absolutely terrific! I often work with csv or tsv and large data, and I just want to quickly look at it without loading excel or exporting to google sheets. [https://atom.io/packages/tablr](https://atom.io/packages/tablr) Tablr for Atom is good too. One feature request. I very often get data in JSON format (then convert to csv), it would be amazing to also support JSON. Thanks for sharing.

<comment><USER18> OpenRefine [http://openrefine.org/](http://openrefine.org/) for years has been my go to tool when looking at csv or tsv. I really love this project.

> OpenRefine (formerly Google Refine) is a powerful tool for working with > messy data: cleaning it; transforming it from one format into another; and > extending it with web services and external data.

<comment><USER17> Oh thanks for reminding me, I did look at that a while ago, it's absolutely great. The transforming steps are amazing. Time to have another look at it. Exploratory.io is similar (nice transformation steps using dplyr) but for me it was just a bit too close to actually writing the R code.

<comment><USER18> I LOVE writing code for R for scraping. I am actually serious. The Hadleyverse and the package tiddyverse have changed my programming life (Well learning Racket helped a ton also since there is Lisp in the foundations of R)

</comment></comment></comment></comment><comment><USER19> Wow, this seems simple but I got excited immediately when seeing this. Since I have been writing code to export data for clients, I have grown so tired of Kingsoft Spreadsheets and Google Sheets lagging like crazy with any sizable amounts of data. This will be a cool new tool to show my coworkers tomorrow and I'll be using it. Performance seems very snappy so far!

<comment><USER8> I invested some effort to keep it performant even with fairly large CSV files, including a custom port of some C++ code for fast CSV import. My current favorite example is the Met Museum's 228MB 450k row collection data set; takes about 12 sec. to open in Tad on my 2013 MacBook Pro. Definitely not lag free (and hard to achieve that without going to some serious column store data warehouse like Amazon Redshift), but still reasonable. [https://twitter.com/antonycourtney/status/869252722624561152](https://twitter.com/antonycourtney/status/869252722624561152)

<comment><USER20> Thanks for putting this out there!

There are some projects out there using memory mapped files to do fast CSV parsing. Could be a nice way to speed up the memory loading and scroll it in real time. Can't find the link to the library I saw it used in, but it might be an interesting venue to consider. Another library that does it seems to be astropy fast ascii IO module [1].

[1]: [http://docs.astropy.org/en/stable/io/ascii/fast_ascii_io.htm...](http://docs.astropy.org/en/stable/io/ascii/fast_ascii_io.html)

<comment><USER21> Try benchmarking OS read() calls vs. either sequential or random reads using memory mapping, whenever I do this OS read() calls end up being quite a bit faster.

</comment></comment></comment></comment><comment><USER22> I couldn't see any way to export data, once I had filtered or pivoted it.

Is this supported at all, or do I need to use the copy mechanism? I have a ~4GB file to filter down and analyse, and this almost looks like a nice tool for business users to use to explore the data themselves, but they need to be able to export to excel at some point.

</comment><comment><USER23> Very nice !

Mainly for the cascaded pivot option.

First remarks : \- Requires \n or \r\n end line, not working with \r

\- Requires comma as separator (not possible to change it or I don't find how)

\- Does not support (for exemple) ANSI encoding

<comment><USER24> Just out of curiosity, which systems uses \r as newline these days? As far as I understand it, Mac OS did it prior to its version 10 (its Unix version), but the modern macOS does not.

<comment><USER25> fwiw, a Save As CSV from "Microsoft® Excel for Mac" 15.33 got me this:

test.csv: UTF-8 Unicode (with BOM) text, with CR line terminators

Apparently, even recent software is not up to date on what the line separator should be.

</comment></comment></comment><comment><USER26> Interesting, I would describe it as an SQL client with an easy interface to load column based files. It's built on top of SQLite, which gives an indication of the kind of performance one can expect.

<comment><USER27> SQLite is pretty fast actually. More problematic is that this uses Electron. Loading a tiny 200-line CSV file took 120MB for me lol

<comment><USER28> Thanks for the heads up on Electron - I was going to look into onboarding this for our team until that. We have more than enough in the way of crufty crapplications already.

</comment></comment></comment><comment><USER29> A little UI comment if the the creator is reading this. It actually took me a while to find the search/filter button.. only to see that it's actually on the bottom. Perhaps make it more visible (on top maybe? and show the form right away instead of having to click the filter link).

</comment><comment><USER30> They lost me right at the front page. Left justification of numbers is just wrong...

</comment><comment><USER31> The brief screenshot and short description look cool – does anyone have a screencast demo?

EDIT: once you install it, a rich README pops up which includes more screenshots and some example datasets. Fun to play around with

</comment><comment><USER32> Dies immediately when launched on Debian Jessie:

Error: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /tmp/.org.chromium.Chromium.ibqKoR)

      $ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep
      GLIBCXX_
      ...
      GLIBCXX_3.4.19
      GLIBCXX_3.4.20
      GLIBCXX_DEBUG_MESSAGE_LENGTH

<comment><USER33> I think you should be able to rebuild the electron npm module from source to have a compatible runtime.

</comment></comment><comment><USER13> Feature Suggestions

(top level comment to hold various suggestions, so upvoting can be used per- suggestion to bubble the best to the top)

<comment><USER13> Aggregate Function: Count

I've seen that COUNT is implemented for numeric values; but not for text. There's no reason to limit COUNT to numeric (unlike AVG and SUM).

<comment><USER8> Good points and great suggestions, thanks!

</comment></comment></comment><comment><USER34> Very cool! I'm interested to see how easy it is to create pivots on the fly. We use react-pivot[1] all over the place, but it needs js to set them up.

[1] [https://github.com/davidguttman/react- pivot](https://github.com/davidguttman/react-pivot)

</comment><comment><USER35> I downloaded this when this post came up and have been using it steady. It's good. Reliable, does a job that needs doing, has a few bells and whistles.

Definitely still early stage, but that will pass.

I have showed it to a couple people I work with and they have started using it too.

</comment><comment><USER36> Hey, congrats on putting this out, one small thing: Homebrew is showing v0.8.3 as the latest version however v0.8.4 has been released (probably an easy fix), also I was wondering if there were plans to make this a native / non- javascript app?

</comment><comment><USER37> Nice project page.

If only there was a tool/service to create such project pages automatically.

<comment><USER38> Are several, sort of. I think these kinds of pages are becoming more accessible to design and public with static site generators.

</comment></comment><comment><USER39> Another Electron app, yay...

</comment><comment><USER40> Oh joy, more Slack pings from the data team (check my username).

Nice work!

</comment><comment><USER41> One area to consider growing this, existing SQL clients/viewers are pretty awful. It would be awesome if I could directly connect to a DB

<comment><USER38> If you use MySQL, you should definitely check out Sequel Pro. It's very polished and very usable.

</comment></comment><comment><USER42> Maybe I missed it but how is this better than Excel?

<comment><USER8> I don't think I ever claimed it was better than Excel, which is targeted at different set of users and use cases. That said, here are some reasons why some users might prefer Tad to Excel: It's free and MIT licensed with the sources on github. It's available for Linux, Windows and Mac. It works on any tabular data source. The UI for creating a pivot table is clear and intuitive and efficient (just a few clicks); many users find Excel's pivot table interface difficult and confusing. The underlying typed data model is a better fit for many data sets. And finally, it is many times faster than Excel for loading and working with large CSV files: My large test data set takes 12 sec to load in Tad vs 40 sec. for Excel.

<comment><USER43> Perhaps the better question is, how is this better than Google Spreadsheets? Most of your reasons still apply, but I believe google docs handles large spreadsheets pretty well (after an initial loading phase).

<comment><USER44> Google Sheets isn't open sourced and MIT licensed is one big difference

</comment></comment></comment></comment><comment><USER45> Is this using JUCE?

<comment><USER46> [https://github.com/antonycourtney/tad](https://github.com/antonycourtney/tad)

It's an Electron app.

</comment></comment><comment><USER47> If a have a table with an email column, can I pivot by email domain?

</comment><comment><USER48> Ah _of course_ it's a Node/Electron thing.

</comment><comment><USER49> How on earth did you not call it "Tada"?</comment>


Ask HN: Lost $400k USD in a deleted email, how contact a Gmail engineer? - <AUTHOR> On the 8th of June 2014 I purchased 1970 Ethereum from the Ethereum Foundation Presale and received an email to my Gmail account containing my wallet. As CS student overwhelmed by his thesis I managed to completely ignore the backup instructions and instead left my wallet in my Gmail account. At least the thesis was good :)
You can probably tell where this story is going. I promptly forgot about this whole event and in 2015 while cleaning out my email account I deleted most of my recently received emails and incidently taking out the wallet with it. Again I'd like to state that the loss of the wallet is completely my fault.
Recently, the price of Ethereum has skyrocketed to over 200 USD per coin, meaning the wallet is now worth ~400k USD. This means that I can now offer a nice bounty on its retrieval!
I'm publicly posting here in the hope that someone from the Gmail team can check and see if they have a copy of the email saved in Google's backups. Should its contents be retrieveable, I'd like to offer 20% of the wallet's contents (~80k USD) as a finder's fee, alternatively if you choose to forfit this, I'll donate 50% (~200k USD) to a charity of your choice.
I realise that this is a last ditch attempt and that wallet is most likely lost forever.
This brings us to the morale of the story - "make sure you have backups and they work!" The 2nd morale is - "no matter how badly you mess up, at least you aren't the guy that deleted an email worth 400k!"
If you work on Gmail and you can help or know someone that will lead to its retrevial please contact me [at] email@example.com
Best wishes!
If you want, you can encrypt your mail to me with my public key: (text too long for HN) https://pastebin.com/raw/zgZpSKJd <comment><USER2> Throwaway because I work at Google (but not on Gmail) and don't want to associate any of my HN posts with anything even remotely related (as a matter of personal policy).

That said, you're out of luck. Google has pretty strict data policies, and if a user deletes some their data (e.g. an email), it's my understanding that we're required to purge it from our all our systems (with maybe a couple months or so of leeway since we've got a lot of users and a lot of data). After a couple years of being deleted? Yeah, that email is gone. Forever.

</comment><comment><USER3> I doubt you are going to have much luck, probably best to forget the whole thing and move on. I mined 100BTC back in 2009/10 and then never backed up the wallet or bothered with the private keys because it wasn't even worth a dollar, today it's worth $221,711. I always comfort myself that I would have sold out when it hit $8/BTC or even less. No use crying over spilled milk.

<comment><USER4> Back around the summer of 2010 I decided to play around a little bit with Bitcoin mining while I was looking for a job after college. For a couple of weeks I let the computer mine and accumulated what amounted to pocket change, then gave up and forgot about it.

I've spent many hours over the past year or so digging through old burned backup CDs, DVDs, and hard drives trying to find the wallet, with no luck so far. Maybe someday.

<comment><USER5> If it makes you feel better, unless you had a good GPU, what you earned might not have been worth more than a few thousand dollars (at current BTC prices). Though the difficulty was certainly much less in 2010, so who knows.

<comment><USER3> I mined 100BTC on my CPU in like the summer of 2010 solo mining. I attempted to do GPU mining but the tooling was very specific at the time and I wasn't really that interested. I didn't even fully understand BTC at the time past "Digital Currency", "Proof of work", "Run minner = get BTC". I want to say the block size was 50 at the time so mining 2 block all on mine own on a CPU was pretty impressive IMHO.

<comment><USER4> That's basically the state I was at as well. My exact thought was something like, "A currency that you make by running a program like 'Folding@Home'? Might as well try."

Even if I didn't actually mine a ton, it still would be neat to find it. I know it's gotta be there somewhere.

<comment><USER3> I know mine is long gone, my old gaming rig was what I mined it all on and I've rebuilt that machine with different OS's a million times over since I mined it and rarely backed up anything but maybe some media. Everything I cared about was on my laptop.

</comment></comment></comment></comment></comment></comment><comment><USER6> Do you have any old phones that you synced with POP3? Windows Mobile? Outlook or Windows Mail? Ever connect it to Thunderbird? (Be careful with anything IMAP, check offline) Can you contact the sender of the email and see if they can get a copy from their sent archive? Ever download a Google Takeout archive? Try Google Takeout anyway? Try POP3 sync, then reset POP3 status and resync?

</comment><comment><USER7> I assume you already tried this, but here is google's data download page:

[https://takeout.google.com/settings/takeout](https://takeout.google.com/settings/takeout)

If it aint in there then I assume it's gone and only the NSA and/or GCHQ will have a copy.

<comment><USER8> Cue a black budget program of retrieving all the lost cryptocurrency and selling it off.

</comment></comment><comment><USER9> This is designed for emails missing in case of account breach, but it is worth a shot:

[https://support.google.com/mail/contact/missingemails](https://support.google.com/mail/contact/missingemails)

<comment><USER10> you should give this a try

</comment></comment><comment><USER11> My wife always says that growing up, all her dad and brother used to talk about at the dinner table was "I should've invested in that stock when it was cheaper!" or "I should've sold when it was higher!"

I feel that way about Bitcoin/others. It's always regret all the way. It's like buying a stock.

I had a chance to mine lots of bitcoins in 2011... never got around to doing it. It's now the same as "I should've bought Apple stock the day before the rumored iPhone debuted, like I told friends to do"

<comment><USER12> You always remember the successful investments you didn't make, but not the unsuccessful ones. Think of all the money you didn't lose making bad investments.

<comment><USER13> If you're a little faster than average on the draw and have money to burn, the profits from the successful investments outweigh the money lost on the unsuccessful ones. E.g. if you have $50k, and spend it on five companies, only one of those companies has to be Apple for you to make way more than you started with...

<comment><USER14> Apple isn't a '1 in 5' company, though.

</comment></comment></comment></comment><comment><USER15> Do you remember your password?

From the Ethereum presale message:

        You are about to make an ether purchase. Please keep the attached wallet file safe. It will serve as a cryptographic receipt of your purchase, along with your password.

        The password you created and entered on the sale site is the key to your ether so please do not forget it. And please note: there are no mechanisms in place that will enable the Ethereum team to help you recover a lost password. Once it is lost, your purchased ether will be permanently inaccessible.

</comment><comment><USER16> You might want to ask a lawyer to subpoena them. Time is ticking - I believe backups are held for only a bit of time.

<comment><USER17> This is probably the only real hope. Problem is you cannot subpoena Google without first filing a lawsuit. So, you'd need to come up with a legal basis to file a lawsuit in which this document would be relevant. And then you'd have to serve a subpoena on Google.

You could potential have a lawyer serve a document preservation request on Google before a lawsuit is filed. But I'm not optimistic they'd listen to it.

</comment></comment><comment><USER18> You are in awfully good spirits for someone who may have lost $400k. In 1999 I passed on an opportunity to buy a working Apple I for $10k.

<comment><AUTHOR> Although this fail is a bit expensive, I'm optimistic that more opportunities will come.

<comment><USER19> Yup, I bought a ETH & $6 late last year during the spam attacks and panick sold at $15-$12 Early this year. Now the pice is $200+ per ETH

Now I am looking foward to RChain [https://www.rchain.coop](https://www.rchain.coop)

<comment><USER20> Interesting, I thought RChain was dead after they split from Synereo and I didn't see any news on the rchain subreddit. Will definitely keep an eye on this.

</comment></comment></comment></comment><comment><USER21> You are young. I promise you that life will present you with challenges and rewards in the future that will make this seem like nothing. Put it behind you, close the door, lock the door, and move on.

<comment><USER8> Hilarious par for the course HN response. Zero empathy for OP. "Oh you only lost 400K. Since it didn't happen to me, it's not a problem."

<comment><USER21> Anything completely outside your control ought not to be viewed as a problem. A circumstance, reality, boundary condition... yes. But not a problem.

<comment><USER22> Purchasing cryptocurrency, deleting the only copy of the wallet a year later, then posting on a forum two years ago that "please give me back all this money"?

If this was outside OP's control, what in the world is inside it?

<comment><USER21> Now that its gone, its gone, save this last ditch effort.

</comment></comment></comment></comment></comment><comment><USER23> Did you ever use any other mail client to connect to Gmail?

If so, there might be a way, i.e. from an uncompressed mbox file or similar.

<comment><USER24> This is definitely your best bet. Were you using an iPhone or an iPod Touch in that time window? Maybe iTunes still has a backup of the device in its backups folder? If you were using Mail.app, also check your Mac's Mail Downloads folder. It's totally possible the attachment was downloaded and not deleted when the email was. On my machine, that folder is full of ancient files for some reason.

Also if you power on any old devices to look for the email, put them in airplane mode ASAP!

</comment></comment><comment><USER25> Can't you contact the Ethereum Foundation, shouldn't they have the email in the outgoing emails?

</comment><comment><USER26> What an interesting time to live in, when one can stock and even loose 400k in one email / text file!

Good luck anyways, hope you find them back.

</comment><comment><USER27> What about contacting Ethereum Foundation? They must have that mail.

<comment><USER28> Maybe they don't have the key but prove that they sent you a key. then maybe your lawyer will be able to force a hardfork. In which case you'd get killed by the community; which is worth it.

<comment><USER29> That would be a dangerous precedent.

</comment></comment></comment><comment><USER30> Even if you can find someone to do it, no Google engineer will be allowed to retrieve this email and then take the bounty. But good luck, I do hope you can get it recovered!

</comment><comment><USER31> I talked with some people who work in Data Retention at Google and they said this wasn't possible...

</comment><comment><USER32> Have you tried gmail support already? If you haven't then I would say you should try that first. Going on Social media usually is best after you have exhausted this option. Also, offering compensation to Google employees is probably frowned upon by Google.

<comment><USER33> Does Gmail have "support"? I tried Googling it and every road just seems to lead to a generic knowledge base page.

<comment><USER34> gmail support = AI

security related support = same AI, just slower response

escalate to manager = talk to a different AI

write a salty article, get it published on NY Times = talk to a human

</comment></comment></comment><comment><USER35> Contact Ethereum Foundation on their website email, tell them your email address it was sent to and get them to resend you your UTC.json file

<comment><USER36> Great suggestion. Also the OP may cross post this on [https://www.reddit.com/r/ethereum/](https://www.reddit.com/r/ethereum/)

</comment></comment><comment><USER37> So since there are many eyes here, I'd like to hijack a little. I have some old wallet files from a year ago - armory_xxx_encrypt.wallet, bitcoinwallet.dat, dogecoinwallet.dat and a key backup PFX. I haven't looked at cryptocurrencies since, and so don't even know what tool I'd use to check the value of these wallets. Can anyone advise?

<comment><USER38> Yes, send these files to me via email and I'll send you a personalized value report, free of charge. (just kidding of course)

Probably it'd be best to install old versions of armory etc and export raw keys, then import it to new wallet. Or if you just want to check then export only public keys (addresses). You can check the amount on blockexplorer.

</comment></comment><comment><USER28> At least you should try to get your account number from the Ethereum Team. Then monitor your account once a year or so. in the unlikely event that someone (ex GHCS / google admin, ai, hacker, ...) ever sends money from your account there are ways to get them.

</comment><comment><USER39> Might be a stupid question, but if you have any hardware from between that moment and the moment when you removed the email, which run Outlook or any other program, that makes local copies of files, you can try to disable its connectivity and get wallet from it.

</comment><comment><USER40> I did Ethereum development for a Dutch city over a year ago and because of that (and the low price) I had a lot of Ethereum. When the project was done, I removed the VM I was working in. Shit happens.

</comment><comment><USER41> This was so painful to read. I mean.. just.. ouch! I really hope you find a way to get it back. Some lessons in life are really valuable even when they sting. This one is just kind of cruel, ha.

<comment><USER42> Don't go roamimg through old bitcoin threads on Reddit then.

You'll find grave yards of people that panick sold during the Mt Gox meltdown. There was this one guy who dropped his entire life savings on bitcoin when it was $850 and then sold at $350. I think the math turned out to be in the multiple millions had he held the same amount today.

</comment></comment><comment><USER43> Good luck, I will be following this story closely.

</comment><comment><USER35> Contact the ethereum foundation through their website, give them your email address and get them to resend your utc wallet to you?

</comment><comment><USER44> That's hilarious! I did something similar. No idea where that massive chunk of ETH went to. C'est la vie!

<comment><USER45> Should not ETH have a record of your purchase email and amount? It likely is recoverable in some fashion.

<comment><USER46> The way I understand it is that the purchase email contained the keys to the wallet. It'd be extremely irresponsible if they kept that.

</comment></comment></comment><comment><USER10> give [http://ccm.net/forum/affich-676377-how-to-get-trash- deleted-...](http://ccm.net/forum/affich-676377-how-to-get-trash-deleted- emails-from-gmail#4) a try

</comment><comment><AUTHOR> If somebody could edit the spacing that would be great as well.

</comment><comment><USER47> You may wish to state that you can (or can't) prove that the Gmail account is yours, and that you opened the Gmail account personally. I believe Gmail provides a discrete set of one-time keys upon account generation.

<comment><USER33> I don't think you read the post. He has access to his account, he's looking for an e-mail he deleted 2 years ago.

<comment><USER48> > He has access to his account

Well, he has access to _an_ account in which he believes an email with valuable information was once deleted by the owner of the account. Whether this is one person or two is not determined.

<comment><AUTHOR> I'm sure my login history + 2 factor + geographical location + personal information inside would be enough to establish me as the owner.

<comment><USER48> Hopefully there is more of a solid track record than your brand new account here that you created exactly 5 minutes before posting this thread.

The advice in this thread is good. It's certainly true many Google employees read this forum and so this is a convenient place to find them for private work without creating a electronic record trail on Google's own servers. However, doing an end run around Google in order to find an employee there willing to violate their employment agreement and possibly commit crimes because of an offer of large financial compensation is not an appropriate use of this discussion forum.

</comment></comment></comment></comment></comment><comment><USER49> Contacting ethereum foundation is your best bet.

</comment><comment><USER50> Good luck, and keep us posted :)

</comment><comment><USER51> This literally depresses me.

</comment><comment><USER52> lost 1 bitcoin when Cryptsy went under, I thought I was unlucky..</comment>


Ask HN: Help finding a challenging, meaningful job? - <AUTHOR>

I am looking for a new career opportunity, and a rather specific one. I already have the job that most young programmers want, with a ridiculous salary and benefits package.
I want something challenging that could change the world. I have had major cancer twice and survived; I simply can't find it in me to glue together mockups for a random cubelet of the Borg. I have 15 years of experience doing many diverse things in the software world.
I want to cure cancer. I want to use creative, out-of-the-box ways to solve the world's biggest problems. I've been told my entire life that I have a unique ability to solve problems that others can't, but I almost never get to use that ability.
I don't know how many years I even have left to live (probably more than 10 :)). I need somebody to take a risk on me, and throw brutally hard problems at me, and see if we can't just make a difference.
Please, if you know of such an opportunity, know of somebody who does, or know me enough that you're willing to create one for us, respond to this post. <comment><USER2> I know the feeling, but I think your brain fools you. You drank the kool aid of changing the world song.

Anyway I recommend two ways to go. First, list 50 companies and/or research areas in the world who you think does really world changing stuff.

Second, don't measure yourself just by the work you produce. You want challenges, then maybe try an extremely healthy lifestyle or extreme self discipline.

Third, you said you want to cure cancer. Well, if that's the case then fully understand what your role could be in that as a sw engineer. Then go for it and forget any other world changing ideas.

</comment><comment><USER3> How about joining a team of similar minder people that want to change the world? Help us build a social business that will have a greater impact on poverty alleviation worldwide than any other technology based solution.

engageSPARK empowers NGOs & Governments to dramatically extend the reach and impact of their pro-poor programs, especially those that disseminate and collect information to help change people's lives. We will be the first self- service solution to enable organizations to easily and quickly launch comprehensive messaging, data collection, curriculum, and decision tree programs focused on developing countries via SMS, Voice Calls (roughly 40% of the world's poor are illiterate), USSD, and Mobile Money in 200+ countries.

To understand the problems we're solving, please read [http://engagespark.com/blog/is-sms-really-solution-change- vo...](http://engagespark.com/blog/is-sms-really-solution-change-voice-calls- are-for-most-poor-people/) .

We're looking for exceptional software developers to join our growing team to build pro-poor solutions! You can contact us through our website at engageSPARK.com.

</comment><comment><USER4> We are looking into cancer research and general cell research from a software engineering perspective. It is very early stages but we have a cooperation with one of the major research teams at Karolinska Institutet.

With we, I mean [http://www.muchdifferent.com](http://www.muchdifferent.com), a non-profit that make 70% of our business by providing network tools for the video games industry. But we do all kind of stuff and most of it is not public yet. Anyway, when we started this "company" four years ago, it was centered around the same spirit you mentioned; taking talent seriously and solving really hard problems. We still believe in these things but we are a little bit exhausted. Venturing into cancer research has been refreshing and by recruiting the help of like-minded capable people, we hope to improve and be able to inspire our surrounding.

<comment><AUTHOR> Very interesting, thanks! Since I also spent a few years in the game industry, I find this a bit intriguing. I contacted you through the site.

</comment></comment><comment><USER5> You can try Appcubator, although we don't have much in terms of resources at the moment. We're making it drastically easier to turn ideas into web/mobile software, while keeping the comfort of existing open-source frameworks. You can email us at firstname.lastname@example.com if interested.

<comment><AUTHOR> Appcubator looks like a great product, but I'm not sure I could use it. I'm a full-stack guy myself.

</comment></comment><comment><USER6> Check out [http://planet-labs.com/](http://planet-labs.com/) \- we're not curing cancer, but we are launching a ton of satellites to hopefully make earth data far more available and transparent, and have lots of juicy SW challenges

<comment><USER7> I want to work on that!

I submitted my application a couple weeks ago and haven't heard back. I know it says "We are not actively filling this role" but one could hope right?

Let me know if you're interested in having an ambitious software engineer on your team!

</comment></comment><comment><USER8> Hey, ping me at firstname.lastname@example.com We're looking for people. Have an LOI with UCLA Oncology and are meeting with a group of 1200 oncology researchers in a month. h4ycorp.com

Happy to talk and help where I can. -ryan

<comment><USER8> Do what you're passionate about and make the impact you want to make (or at least give it your 100% effort). Don't settle because you don't think you're capable or equipped to achieve your #1 goal. Create the opportunity you seek, if you don't see it already. "Limitations like fears are often just an illusion"

</comment></comment><comment><USER9> Do you need permission to change the world? If you're so great at solving problems others can't, do it. There's no shortage of problems out there. (Note: I'm trying to encourage you.)

<comment><AUTHOR> I appreciate it, and I have tried this many times. I've found that I just can't effectively do it without being able to focus on one job at a time. Each job would get less than half of me.

</comment></comment><comment><AUTHOR> Or contact me at: [http://codi.st/contact/](http://codi.st/contact/)

</comment><comment><USER10> I'd suggest putting an email address somewhere to get more responses.

<comment><AUTHOR> Thanks; link posted.</comment></comment>


Recursion, Tail Calls and Trampolines in JavaScript (2015) - <AUTHOR> http://www.datchley.name/recursion-tail-calls-and-trampolines/ <comment><USER2> In case you need a trampoline, it's more comfortable to use a well grown data type. Here's mine ...

Eval, a data-type for handling synchronous evaluation: [https://funfix.org/api/effect/classes/eval.html](https://funfix.org/api/effect/classes/eval.html)

IO, a data-type for suspending side effects, including asynchronous ones, an FP/lawful replacement for Promise; ported from Haskell, but better: [https://funfix.org/api/effect/classes/io.html](https://funfix.org/api/effect/classes/io.html)

Also note that Promise's implementation leaks memory in "then" chains, so be cautious when using Promises to work around JavaScript's call-stack — [https://alexn.org/blog/2017/10/11/javascript-promise- leaks-m...](https://alexn.org/blog/2017/10/11/javascript-promise-leaks- memory.html)

<comment><USER3> > use a well grown data type

What does 'well grown' mean in the context of data types?

<comment><USER2> Lawful.

<comment><USER3> I've heard of lawful but never 'well grown' \- where does the term come from?

</comment></comment></comment></comment><comment><USER4> For the record, many implementors are against STC and PTC for a few reasons:

\- It may be significantly slower than regular recursive calls (though this claim seems to be false both in practice and theory)

\- It may break debug tools

\- It may break browser telemetry (especially on IE)

Additionally, they would have to decide on an explicit syntax for STC (return.tail or something like that).

Personally, I would love to see STC anf PTC land so I can write proper functional code in JS. It would also make functional programming in JS easier to teach (less gotchas).

See TC39 discussion: [https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-...](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-05/may-24.md#syntactic- tail-calls-bt)

</comment><comment><USER5> This is the first time I completely understand what thunks and trampolines are. For some reason I always thought a thunk was some mysterious kind of closure that wasn't quite a closure. But a bind() that sends all the expected arguments is a thunk. It's very simple, I'm not sure why it hadn't quite crystallized before.

It is worth pointing out that large recursions can often be easily turned into iterative code by pre-allocating your own pseudo-stack from the heap, as long as you have a reasonable maximum upper bound size. The pseudo-stack is just an array that holds only the recursion state you need. Plus, this works even if you have branching recursion and need backtracking. Recursive flood fill is a good example, this can be done by allocating another image as the stack, and then doing the recursion via iteration and storing the backtracking coordinates in the (image) stack. Both safe and fast.

<comment><USER6> _A trampoline is a loop that iteratively invokes thunk-returning functions._

That's a description of a very common technique for implementing, e.g., Schemes. It is described in, for example, LISP in Small Pieces. But we don't usually call that a "thunk" so much as a "continuation". It's just a function (closure, generally, but the state it closes over can be passed in explicitly, which is what is done when compiling to C, naturally) that does one step of a computation and returns a continuation to do the next step.

The main point of this is that you can start allocating your true function activation frames on a heap and mostly lose the stack. This then allows one to do crazy things like return multiple times through the same path (search for call/cc).

Having different terms for the same concepts is a fact of life in this industry.

<comment><USER7> A loop which dispatches closures can implement cross module tail recursion (absent of continuations). Function A wants to call B. Instead of a direct call, it performs a dynamic return to the loop, passing it B and the arguments to be applied to B (wrapped up as a closure, or other object).

This shouldn't be called a trampoline; it's just a dispatch loop.

Trampolines are a technique for turning function pointers into closures. GCC uses trampolines for pointers to nested functions.

The trampoline mechanism constructs a piece of machine code on the stack (or possibly elsewhere). Next to that machine code at some fixed offset, there is the closure info: the real function plus context. The trampoline is referenced by the pointer to the code: a low level function pointer, compatible with C function pointers and the like. When that is called, it retrieves the closure info (via instruction-pointer-relative addressing) and calls the real target function.

<comment><USER6> Yes. I said the same sort of thing below. Trampolines are also used in signal handling and other such things. The common thread is a need to adjust the stack, so to speak, to handle a strange situation (signal handling, calling GCC-style local function closures, ...). I think TFA just misues terminology, though it's possible that those uses are common in some communities, so maybe they aren't really misuses. Having to carry a mental dictionary for translating terminology in the world of CS seems to be... a requirement that will never go away. It's OK.

</comment></comment></comment></comment><comment><USER8> As ES6 is becoming more available, how do current browsers handle this now? Do they reuse the stack frame?

<comment><USER9> I made a babel plugin to do TCO in JS [https://github.com/krzkaczor/babel- plugin-tailcall-optimizat...](https://github.com/krzkaczor/babel-plugin- tailcall-optimization)

<comment><USER10> Thanks for writing it! Reading the source was an easy intro to babel for me when I was writing a trampoline-based TCO plugin.

</comment></comment></comment><comment><USER11> Nit regarding proper tail calls versus tail call optimization: As I understand, JS maybe will be getting the former but not necessarily the latter. I.e., you'd avoid blowing the call stack, but not necessarily get a dramatic speed boost just for moving something to tail position.

<comment><USER12> I thought "optimization" in tail call optimization refers to optimizing memory usage--eagerly discard or reuse the frame upon a tail call.

<comment><USER11> There's also speed gains to be had from re-using frames instead of creating new ones in some languages, but this is a fair point.

</comment></comment></comment><comment><USER13> This explanation with examples in Python is also pretty awesome IMHO: [https://eli.thegreenplace.net/2017/on-recursion- continuation...](https://eli.thegreenplace.net/2017/on-recursion- continuations-and-trampolines/)</comment>


Web Domain White Elephant Exchange - <AUTHOR> https://docs.google.com/forms/d/1Exiey9n6VdyVtr74yWlIa1hXeplm-5D_A5Vw07jcRJk/viewform <comment><USER2> Domain guy here. Years in this business.

From my experience I've seen plenty of domains over time that have been deleted that end up getting purchased by someone sometimes for a large amount of money.

The carrying cost is quite nominal.

As a general rule if you own a large amount of wacky domains that you think have little value (that are .com I have to stress that) someone will come along at some point and offer to buy it from you.

If you want proof of this go see some of the domains that are listed on buydomains.com and the price for those domains. Ask yourself if you owned any of those domains whether you would have let them go or not (I'm talking about the ones that sell for $750 to $2000 not the obvious hi value ones).

Here's a few I just found (random)

sourcingintelligence.com $1488

pearline.com $2500

...etc.

Add: One thing I have to stress is this.

When someone comes along and wants to buy your wacky domain close the deal. You very well will not have another chance for 5 or 10 years. Get as much as you can and do the deal.

<comment><USER3> What is the usual process for exchanging a domain name? Do you use a domain escrow service?

Those buydomains.com numbers are the asking prices. I'm sure most of those are never going to sell or will sell far below asking price.

<comment><USER4> I've negotiated a 5 letter .net from BuyDomains.com from $1488 to $488. I didn't buy it, but yeah, never buy a domain name without negotiating first.

</comment></comment></comment><comment><USER5> I feel like any one of those people on Hoarders when they must choose the first thing to let go of. Not pretty.

</comment><comment><USER6> Awesome idea. Really makes me regret not holding on to whatswrongwithmypenis.com just so that I could gift it to some poor soul as part of this.

</comment><comment><USER7> Interesting idea, but if you are seeing the full list, what's stopping you from just assigning yourself to the domains that you want?

<comment><USER8> Because I'm not an asshole?

<comment><USER8> P.S. I showed this to a friend and her response was: "Little does that guy know, you're totally an asshole." So there's that...

<comment><USER9> I'm sold.

</comment></comment></comment></comment><comment><USER10> Two domains I'm not using, stretchier.com and loners.org, are expiring this month. Anyone want either? They're regged at namecheap, can either transfer there or give you a code for another registrar

Don't want to do this exchange because I really don't want another two domains :P

<comment><USER11> I might want to take loners.org from you, and create "facebook, without the ability to add friends".

/joke

<comment><USER10> haha, that's actually a pretty funny idea

<comment><USER12> One that has been done, fwiw. [https://about.me/](https://about.me/)

</comment></comment></comment></comment><comment><USER13> So I can exchange a domain I don't want for a domain I don't want, correct?

<comment><USER8> Yes, that's exactly the point. Have some fun & do stupid things.

(With that said... there are some really, really great domains in this list. So you might get lucky.)

<comment><USER4> I signed up. Will you share the list of domains after they've been exchanged? Thanks for doing this, it should be fun!

<comment><USER8> That's the plan! Going to post a list of all domains and who sent/received them at webdomainwhiteelephantexchange.com

<comment><USER2> You really need to shorten that to wdwee.com which is available.

<comment><USER8> Actually, I really don't need to do that. The absurd length is part of the humor. Plus, WDWEE.com is 10x more difficult to type.

<comment><USER2> Well you know about humor (from your profile) and I know about domains and naming.

It's (part of) what I do.

And I make plenty of money doing it (both buying and selling) as well as consulting for people who you have heard of and who you trust and that pay me for my opinion.

So given that we are talking about +-$12 or so for wdwee.com while you may not feel you need it there really isn't much in going with the expert opinion on the subject.

I mean if I decided to do standup comedy and you told me to "drink 3 glasses of water and piss before going on stage" I'd probably take your word for it and not tell you "I really don't think I need to do that". And I'm guessing I'm probably better at domains than you are at comedy.

Agree that wdwee is hard to type. But so is a long domain name (chance of typos is greater with more letters, in general). Not saying you should use it instead of the ironic name but as an additional short acronym.

<comment><USER8> Feel free to buy it and donate it to the cause. I'm already investing hundreds of dollars in opportunity cost for a dumb way to give people a few laughs, so I don't feel like throwing down another $10. :)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> Aw, I let a lot of my unwanted domains expire this year instead of hoarding them. But given that they were all rubbish, it does mean that heapt.com (you know, like 'heaped', piles of things!) and f6ing.com (a gaming thing...) are free and unencumbered.

<comment><USER15> If you had them for a while, not necessarily likely... the squatting companies tend to do a grab of recently expired domains... most that I've let go over the years (tend to get 2-3 new ones, and let 2-3 go a year) are in that group.

<comment><USER16> I let streamingcrack.com expire a while back after sitting on it a couple years, and it's still free. YMMV.

</comment></comment></comment><comment><USER17> Somewhat related: Some time ago I wanted to create a dyndns service for Rasperry Pi devices.

I registered the domains (my-pi.net, my-py.net, my-pi.de) but never created the actual website. So if anyone wants these domains for free, contact me.

</comment><comment><USER18> Made me smile for a minute but really unpractical. I'll probably register aksjfgkahgiowetiuwj.info from Godaddy for 99cents just to get involved

<comment><USER19> I believe there's a 60 or 90 day period before you can transfer a domain after you've registered it anyways.

<comment><USER8> You can usually transfer it to another user on the same registrar. They just don't want to lose it to another company. (At least, that's my super rough understanding of it.)

<comment><USER20> You should match people that have submitted domains from the same registrar so fees are avoided in most cases.

<comment><USER8> That sounds like a wonderful idea... but _far_ too much work for it to be worth it. Maybe next year...

<comment><USER20> Oh it's simple really.

      $conn = fsockopen ('whois.verisign-grs.com', 43, $errno, $errstr, 1);
      fputs($conn, $domain."\r\n");
      while(!feof($conn))
    	$output .= fgets($conn,128);
      $registrar = reset(explode("\n",end(explode('Registrar:',$output))));

<comment><USER8> Awesome! Thanks for this. I'll play with it over the weekend. Still working on the specifics.

</comment></comment></comment></comment></comment></comment></comment><comment><USER21> Do any registrars charge to transfer domains between account on their system? I would want to ensure I didn't get one of those.

<comment><USER8> Eh, if you don't want it and it costs money to transfer, then you don't have to take it. It's not like there will be a grim reaper debt collector coming after you.......

<comment><USER21> This reassures me since I know you are not asshole.

I'm sold.

<comment><USER8> I fully expect something to go very wrong with this, so I'm just preparing to not care when it does. :)

<comment><USER21> The funny thing is someone didn't know the above was sarcasm based on your previous response. I like the idea and I think it'll turn out fine.

<comment><USER8> People will always try to put us down.:)

</comment></comment></comment></comment></comment></comment><comment><USER22> So, I suck. I couldn't let go of any of my precious precious hoarded domains, so I bought a new one for the occasion.

<comment><USER8> That's fine... you're only an asshole who broke the rules.

JK – I'll let if fly. :)

</comment></comment><comment><USER23> Bummer. I have a .de domain that I really don't want/need. The web form won't accept it.

<comment><USER8> Try again... I disabled the URL validation on that field. However, the validation required [http://](http://) in front, so that may have been the issue.

<comment><USER23> Probably was the missing [http://](http://) It works now. This should be fun.

</comment></comment></comment><comment><USER24> I'm building www.nametagup.com for this type of trade/exchange year round.

<comment><USER8> I really hope you don't get stuck with these domains then... because most of them would never be purchased willingly. :)

<comment><USER24> Nah, the owners will still maintain their domains. I'm guessing moving/purchasing through us in the future.

</comment></comment></comment><comment><USER25> this is great. i have a strange compulsion to buy awful domain names, regardless of their usefulness. is there any rule against multiple entries (aside from the possibility of exchanging with yourself?)

<comment><USER8> Nope! Right now I'm allowing multiple domains, up to a point. (Maximum is 3) Enjoy!

<comment><USER4> Cool, added two more.

</comment></comment></comment><comment><USER26> I just signed up. I feel sorry for whoever gets my throwaway domains when [http://1n73r.net](http://1n73r.net) is my "good" domain.

</comment><comment><USER27> This is a fun idea. If you do this match on the 25th it will actually be like receiving a timely gift. Looking forward to the post-exchange discussion.

</comment><comment><USER28> Any possibility of adding a counter displaying the number of domains on the list.

May help hoarders like me to finally hit submit, peer pressure and all that :)

<comment><USER8> We just hit 300 people/domains who have signed up. Is that enough for you? ;)

</comment></comment><comment><USER11> Good idea. Signed up. The domain I'm offering was actually inspired by a few people at HN. Never had the time to develop it.

</comment><comment><USER29> Fun idea! I just signed up with an old domain, hope someone else might have the time to do something hilarious with it.

</comment><comment><USER30> Tossed one of my domains in. Awesome idea, took a while to figure out what domain to let go though

</comment><comment><USER31> Presumably when you publish the new owner list you won't make everyones email address public?

<comment><USER8> Emails will definitely stay private. Your name, @username, and personal website will likely be published.

</comment></comment><comment><USER32> I hope that no one gives away a domain that has a trademark or trademark "typo" in it.

</comment><comment><USER33> I like it, I've signed up with one of my hey-this-could-work-but-oh-i-got-lazy ideas.

<comment><USER8> There's a handful of those in the list: interesting old names for apps. Then there are a lot of "Wouldn't it be funny if I bought ____?" domains. Those are pretty great too.

</comment></comment><comment><USER34> What do you do if you don't have a twitter account? It's required in the form.

<comment><USER35> Maybe, create an account using the name of the domain? (if possible)

It's a domain name that no one wants, ergo one might presume that the twitter handle is equally undesirable?

</comment></comment><comment><USER36> That's a neat idea. But why twitter account is mandatory for this?

<comment><USER8> Because it's useful to have two ways to contact someone in case the exchange goes awry. It's already come in handy today.

</comment></comment><comment><USER37> I have boip.com but I have no idea what to do with it. Any suggestions?

</comment><comment><USER38> Neat. I'll might throw in koshercloud.net :)

</comment><comment><USER39> Fun idea Daniel. I'll throw something in.

</comment><comment><USER40> Ok, just added one ... this actually kinda fun

</comment><comment><USER41> Thanks for organizing this, I added one in.

</comment><comment><USER42> Submitted, this is pretty sweet!

</comment><comment><USER43> Great idea! Signed up.

</comment><comment><USER44> Neat. So tempted...

</comment><comment><USER45> Ok, i'm in :)

</comment><comment><USER46> this is hilarious</comment>


Show HN: Get instant name ideas for your next startup, business or side-project - <AUTHOR> https://namewink.com/?ref=hn5 <comment><USER2> I think you have a bug, i typed in trans as a test word and trans.io came up available, but its not.

</comment><comment><USER2> Yeah, tried another one `cross`. Said bitcross.com was avaliable but it wasn't.</comment>


Is Google Making Us Stupid? (2008) - <AUTHOR> http://www.theatlantic.com/doc/200807/google

<comment><USER2> At 4,220 words, he proves Google isn't making his writing more terse or staccato. And, with 22 links scattered throughout, are we expected to make it all the way through in one go without being distracted?

I'm tired of articles like this one. It's nothing more than people used to an old medium bemoaning the new one. To his credit, Mr. Carr draws the apt comparison with Plato:

 _In Plato's Phaedrus, Socrates bemoaned the development of writing. He feared that, as people came to rely on the written word as a substitute for the knowledge they used to carry inside their heads, they would, in the words of one of the dialogue's characters, "cease to exercise their memory and become forgetful." And because they would be able to "receive a quantity of information without proper instruction," they would "be thought very knowledgeable when they are for the most part quite ignorant." They would be "filled with the conceit of wisdom instead of real wisdom."_

Obviously, the development of writing changed the world (I contend for the better, but that may be debateable). The crux of the article is that people will rely on the internet (Google) for information, instead of knowing it. I propose this scenario as a counter-example (originally from somewhere else, but I can't remember the source):

Suppose you have two people, Alice and Bob. Alice is your typical human being, and knows quite a bit about a range of topics. Bob has some kind of dementia that keeps him from being able to remember things, so he jots everything down in a notebook. If you ask him something, he'll consult his notebook. He has an equivalent amount of information as Alice. Who is smarter?</comment>


(Bad) Experiences with the Strapi CMS - <AUTHOR> https://www.zauberware.com/en/articles/2019/experiences-with-the-strapi-cms/ <comment><USER2> Nah, I found Strapi the most flexible, easy to use and well documented CMS out there. The problem is that it's still under heavy development and if you ship it without using Docker then you'll probably break it cause it's still fragile. Don't blame it, just containerize it and be careful with your actions.</comment>


Someone live coding a distributed content network similar to YouTube - <AUTHOR> https://www.youtube.com/channel/UC63JyBlOxP6M7mtKXiGixRQ <comment><AUTHOR> More infos (including doxygen doc): [http://dailyprog.org/~kenster/](http://dailyprog.org/~kenster/)

</comment><comment><USER2> Which editor is this?

<comment><USER3> I use spacemacs, a distribution of Emacs with some extra goodies.

<comment><USER4> Nice setup, looks productive! What distro are you using?

<comment><USER3> Kubuntu because I turned into a lazy ass. I used to have a heavily riced Arch Linux setup with xmonad etc. but I gave it up, lol! (I may try again one of these days)

I liked stumpwm but had some graphical issues.

<comment><USER4> That sounds like my Linux experience over the last 20 years (repeatedly) :)</comment></comment></comment></comment></comment>


Elon Musk says the Boring Company's first car elevator is nearly operational - <AUTHOR> https://techcrunch.com/2017/06/30/elon-musk-says-the-boring-companys-first-car-elevator-is-nearly-operational <comment><USER2> The "burning" question for me is, if access is based on elevators, how do you evacuate in case of fire?

Fire safety is the chief safety concern with tunnels. Especially smaller tunnels like these where smoke and fumes spread more quickly.</comment>