Please Offer an Excel Export Option - <AUTHOR> http://www.evanmiller.org/please-offer-an-excel-export-option.html <comment><USER2> "Data is ultimately meant to be consumed by people."

I disagree. Information is consumed by people. Data underlies information, and sometimes is mistaken for it. But raw data is absolutely parsed and processed before being consumed by the average audience. Some analytic folk will read raw data, but only to serve a higher level purpose - to answer some question or gain some knowledge.

But in general, data is analyzed and filtered and summarized and visualized before being consumed. This author may just work too close to the data on a day to day basis to realize where the average audience really fits.

<comment><USER3> That was my interpretation as well.

If we want to talk about ease of use for the consumer, we need to ask what kind of person downloads datasets from websites.

Not normal people, that's for sure. The target demographic for that is probably 5% researchers and 95% idly curious developers and statisticians.

The researchers can take the time to deal with an XLS format, but why would they want to? The developers and statisticians are doing this in their off time, and are going to want or need (I wouldn't expect a statistician to be able to work with the XLS documentation) an easier format to deal with. So if you give it to them in XLS, they're just going to have to turn it into a CSV immediately before starting to hack up an interpreter for it.

So why not skip the middle man and deliver it in CSV? This author has the situation almost exactly 180 degrees backwards.

</comment></comment><comment><USER4> I'm a long term enterprise user of Excel, and I taught myself to program using VB6 and have now moved onto Postgres/Python etc. For any serious data application, CSV is a must, because navigating data types in Excel is a nightmare. Over and over, colleagues of mine have lost the leading zero in a string because Excel automatically typed it as a number, or had a cell value interpreted as a formula, or had a VLOOKUP not work because the number is typed as a string or vice versa. These problems often have counterintuitive solutions, and for a basic user, these issues exist in both excel formats and in csv. Excel has pretty robust ODBC integration that drives data directly into Pivot Tables or through VBA. In this way you can provide informative (and pretty) reports to end users, with dynamic aggregations, filters etc. If your users are more technical than that or require more detailed atomic data, the widely compatible solution is generally csv. What I'm trying to say is that the excel format fills a gap that is very small, between completely non- technical and slightly technical data users, and honestly probably isn't worth implementing.

</comment><comment><USER5> For PHP, I can recommend [https://github.com/PHPOffice/PHPExcel](https://github.com/PHPOffice/PHPExcel).

</comment><comment><USER6> Sorry but this would only keep the proprietary file format madness that is Excel. I would prefer to share the data in JSON and let the user decide what to do with it ...

<comment><USER7> That doesn't solve the lossless encoding of doubles problem.

<comment><USER8> Lossless encoding of doubles is a long solved problem. Use hexadecimal floating point format (%a with printf in C99, inherited by most high-level languages that sit on top of C). The problem is platforms that still don't support C99.

<comment><USER9> I was wondering why he said that CSV was not capable of supporting full precision for doubles. Are you saying that the problem is not with CSV per se, but instead the C libc printf function? I'd have thought that modern standard libraries would do this right with the usual decimal %f and a large enough precision: [http://pubs.opengroup.org/onlinepubs/009695399/functions/pri...](http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html)

<comment><USER8> The trouble is that (a) the standard recommends but does not require that all binary-to-decimal and decimal-to-binary conversions be correctly rounded and (b) even if it did require correctly-rounded conversions, the precision needs to be absolutely enormous to guarantee that every double is exactly representable in the chosen format (which makes it wildly wasteful), otherwise you'd get different results depending on the rounding mode in effect at the time of conversion back to double.

</comment></comment></comment></comment></comment><comment><USER10> As a user, I agree 100%. The only way I use CSV files is to import them in Excel.

I've always assumed that programmers output to CSV because they are too lazy to implement an Excel output function.

<comment><USER11> CSV can be consumed by anything (with the caveats mentioned in the article), XLS/XLSX by spreadsheets only )if you want to work with the data).

Excel files have row limitations, potential file format incompatibilities.

Depending on the language being used, it can be the same level of effort to emit XLS file as a CSV file, so unless we are talking about programmers how don't bother learning how to use output libraries, I suspect CSV is more common for reasons of compatibility.

<comment><USER10> "CSV can be consumed by anything"

That's the thing. For 99.99% of users there is no _anything_. There is only Excel. And dealing with CSV files is headache for them.

It's as if you designed parking garages to accommodate both horses and cars - because _someone out there_ might be coming on a horse.

<comment><USER11> 99.99% is a made-up stat, and highly dependent on audience.

Noting Excel can open CSV natively (again with the caveats mentioned in the post), my users want a garage not limited to cars, but trucks and bicycles too.

</comment></comment></comment></comment><comment><USER12> Is there any reason why the open ODS format would not be a better alternative for those of us concerned about open standards?

<comment><USER13> You should also provide it, but some people may not be able to use it with their tools.

<comment><USER14> At least MS Office 2007 and later support ODF import/export.

</comment></comment></comment><comment><USER15> _In all likelihood they are going to open your CSV file in Microsoft Excel 2004, or if you 're lucky Microsoft Excel 2007_

When did he write this? It says Nov 2014 at the top but that doesn't seem accurate.

<comment><USER16> He also mentioned pandas, which isn't that old. So, it's probably hyperbole.

<comment><USER17> It wouldn't surprise me in the slightest that the corporate envronment still uses Excel 2003 (? not 2004, I thought?) or maybe 2007 rather than 2013.

Then again the WinXP EoL should have changed that, but watch it not have.

<comment><USER18> Excel 2004 is basically the Mac version of Excel 2003. It's EoL'd too.

As for the article, personally I'd say drop XLS support and go for XLSX. The more that users are aware their version of Excel is no longer supported, the more noise they'll make about wanting upgrades. Plus, it's not limiting, in the sense you can get free tools that open XLSX (LibreOffice, etc...).

I would imagine there'd be XLSX-handling libraries for most mainstream programming languages. I've used XlsxWriter with Python, it's fairly intuitive... [https://xlsxwriter.readthedocs.org/](https://xlsxwriter.readthedocs.org/)

<comment><USER19> We do a ton of Excel import/export in our web app. The day we moved to XLSX, every one of our users cheered because the reliability of our Excel related features improved dramatically.

The problem with XLS is that its internal format (called BIFF8) has no official specification. It has been reverse engineered to a great degree, but every implementation I've used outside of actual "excel.exe" has show stopping bugs that you will encounter at some point.

XLSX, on the other hand, has an actual published spec (OOXML). There is plenty of political strife surrounding OOXML, but at least we have a spec we can develop against. It has also been my experience that "simple" XLSX files can be constructed more reliably than their BIFF8 counterparts. Because XLSX files are XML internally, there are a great number of libraries that can be used to construct the required XML structures, while avoiding edge-case errors in composition that are inherent to reverse-engineered binary formats. At a bare minimum, software authors can use something like libxml to construct valid XML, rather than some ad hoc BIFF8 serializer.

FWIW, we use the axlsx gem for our Ruby app, and it hasn't let us down yet. It even supports some pretty eccentric Excel features like data validations.

</comment></comment></comment></comment></comment><comment><USER20> An alternative is to provide data as ressources that can be imported using Excel web queries. I don't thnik vanilla excel can be linked to JSON ressources, but a simple HTML table does the trick. Excel Web queries can use parameters, making the use of several ressources faster vs the download of several files. As a bonus you can set the Excel file for the client, with your data ready and up to date in it.

</comment><comment><USER21> I've seen a weird hack where an export to excel option was provided, but what was actually exported was an html file of some sort with a .xls extension that happened to open fine in Excel. I think it even had different tabs.

If you just create a text file and put an old fashioned html table in it and rename it to .xls Excel will complain a little, and then open it, and even respect font tags like <b> and <i>

<comment><USER22> xls is a catch-all extension for a bunch of formats that Excel (the program) will interpret. See my comment below about SpreadsheetML.

</comment></comment><comment><USER23> There's also the Open Xml SDK, written in C# and works with Mono (in addition to .NET on Windows)

[https://github.com/OfficeDev/Open-XML-SDK](https://github.com/OfficeDev/Open- XML-SDK)

Someone has also created a javascript version of the SDK - [http://openxmlsdkjs.codeplex.com/](http://openxmlsdkjs.codeplex.com/)

<comment><USER24> If you're using .NET I would recommend looking at EPPlus instead: [http://epplus.codeplex.com/](http://epplus.codeplex.com/)

</comment></comment><comment><USER25> I was doing CSV but couldn't get multiple files into the same sheet (tabs). I had 20 CSVs to download I didn't need 20 different files.

I work in JSON mostly do wrapped the excellent XLSX library it was very useful [https://goo.gl/S7rlFm](https://goo.gl/S7rlFm)

</comment><comment><USER26> CSV export is for Numbers users, I think.

Apple has failed to support OpenDocument Spreadsheets, and their XLS importer regularly crashes altogether for the operations people at my office, though maybe it's super stable elsewhere.

<comment><USER27> In my experience, Numbers doesn't even import XLS anymore.

XLSX works fine, though (for the features that Numbers supports)

</comment></comment><comment><USER28> I have a product that lets our users (who are non-technical) export data. CSV exports were a source of many support requests. We switched to XLSX exports and everybody seems happy.

</comment><comment><USER29> I use Google Refine (OpenRefine you name it) for exploring data, it's more powerful than excel for visualizations, have a lot of ways to order it. It's amazing.

</comment><comment><USER30> Just expose an odata endpoint than can be consumed by excel, various other analytic tools as well as whatever programming language you want since it is just rest.

<comment><USER31> So for users that we are thinking are going to have too much trouble converting a csv to an excel document, we will instead use a custom data source. I dont think that solution really works for people using it at the level he is talking about.

</comment></comment><comment><USER13> xlslib, at a brief glance, looks like it is based on the .xsl format, not .xlsx. Wondering if it is easier to generate .xlsx XML files for export, or not.

<comment><USER32> They're totally different formats. It'd have to be a separate implementation. xls is binary, xlsx is XML based.

<comment><USER22> xls is not just one format. There are several formats which Excel will understand, that uses that extension. One of them is a real simple xml-based format (SpreadsheetML), that is way easier to generate than proper excel files and has most of the features you need (At least for data transport purpose). Highly recommend using it.

<comment><USER33> I second SpreadsheetML; it's plain XML (not multi-part compressed .xslx) and it supports multiple sheets, formulas, formatting, and some other bits like named ranges, print settings, and such.

<comment><USER13> Ok,so is there a simple implementation guide/library?

<comment><USER33> Yes, here it is:

[http://msdn.microsoft.com/en- us/library/aa140066%28office.10...](http://msdn.microsoft.com/en- us/library/aa140066%28office.10%29.aspx)

It only describes the data part and doesn't document Excel options such as print settings and filters; if you need them, create a sample in Excel, save it as XML Spreadsheet 2003 and examine the result.

(The 'big' Excel format that is a part of Office Open XML format is also called Spreadsheet ML, but they're different; from what I understand this one is a subset.)

<comment><USER14> It's a deprecated format that was essentially Microsoft's first experiment at an XML based format in the Office XP/Office 2003 days... whether it will continue to be supported in future versions is anybody's guess, given that the successor format OOXML is much more widely adopted.

<comment><USER33> My impression is that Microsoft is fairly reliable when it comes to supporting old formats and standards. E.g. I can still send Word and Excel DDE commands and this is a tech from 90s, Windows 3.1 and stuff. OOXML is certainly more powerful, but it's also more complex.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER34> "When they export their data as CSV, they'll probably just bring it into Excel first to have a look around."

If the first thing the the user is doing is bringing the file into excel and you don't need multiple tables per file what is the difference to the end user other than the file having a csv instead of a xls or xlsx file extension?

<comment><USER35> its right there in the article: Dates, times, and durations; Percentages; Number formatting

the number of times i've opened a csv to find that excel has tried to determine the dates, and decided that the year thats being referred to is 1914 instead of 2014...

<comment><USER34> I've never had an issue like you describe with dates before. I've always output them in the csv in Y-m-d format and that has worked as expected.

I should have been more precise and said if your data isn't using the set of features described in the article there isn't a big difference. Not all data has dates, time durations, percentages, and number formatting.</comment></comment></comment>


Intel: an expensive many-core future is ahead of us - <AUTHOR> http://arstechnica.com/news.ars/post/20080702-intel-an-expensive-many-core-future-is-ahead-of-us.html

<comment><USER2> I remain unconvinced that software development will ever be able to make that kind of a titanic shift; people naturally think in serial and accomplish tasks in serial, and many programming tasks simply don't break down neatly into highly-parallelizable chunks. For example, you can parallelize at the web request level, but are you really going to start parallelizing the rendering of the output of that request? Would you bet your website on you being able to get that 100% correct, or would you rather trade off some speed for the sake of correctness and implementation ease?

To put it another way, parallelization is a cost-benefit analysis; having more cores changes the "benefit" side of the equation but not the "cost" side, and I don't see any magic bullet coming that will drastically alter the "cost" side. Increased use of multiple cores at the lowest level will only happen thanks to better tools and frameworks that keep people from having to think about threading/parallelization themselves. As soon as you have to worry about ordering dependencies, you've entered a world where implementation is very difficult and testing/verification is nearly impossible. Most applications right now are "fast enough" to make correctness and implementation ease far more important concerns than raw speed.

So you might see people migrate to frameworks that allow for easier parallelization, and web applications will obviously benefit, but I doubt you'll see any fundamental change in how people write software.

<comment><USER3>
      many programming tasks simply don't break down neatly into highly-parallelizable chunks.

You're exactly right. The answer to multi-core programming isn't to run serial programs in parallel. The answer to multi-core programming is to solve a different class of problems.

There are large categories of problems that have been known to be embarassingly parallel for decades. It's those problems where the growth will be in the computer industry: graphics rendering, video and audio processing, data mining, etc...

My bet is that OS's are going to have a lot more eye candy in the next decade or so.

</comment></comment><comment><USER4> This is good news for great programmers. Anything which helps to easily stratify (and hence appropriately reward) the great from the average is welcome.

<comment><USER5> While I want to believe that, I think that there will always be a place for mediocre programmers, and the factors that make mediocre programmers better or worse have roughly the same effect on great programmers.

It IS, however, great news for great languages. Our existing set of programming languages are great for abstracting away the nuts and bolts of registers and processor commands, but not so great for making it straightforward for programming on a cluster instead of a single processor.

Long live Erlang! :)

</comment></comment><comment><USER6> "Having to write programs of that scale on systems with hundreds of processors is difficult and totally alien to the vast majority of developers out there."

Since when is writing multi threaded applications an "alien" concept. haven't preemptive multi tasking operating systems been around for decades?

</comment><comment><USER7> This basically marks the transition from software engineering transforming into hardware engineering. No longer is it about sequential algorithms, it's not about linearity. It's about destroying sequential algorithms; breaking down large sequential algorithms into smaller algorithms manipulating the same data at the same time. This requires a great amount of brain power and essentially helps us understand algorithms in greater detail, and make them run faster, but in no way would I agree that it helps software functionality.

EDIT: It provides more power to the programmer. Power that is useless for a programmer that wants to develop functional software. This is why new languages and more CS/EE research will be involved. More power == more levels of abstraction. It depends on the level of abstraction that you're working with to decide whether you're going to benefit from performance or expressiveness (code expressiveness, which I like to directly correlate to software functionality independent of code performance).

I love shitting my brains out on this type of stuff; Could be right, could be wrong. All I know is that the future is undef... and I enjoy it...

</comment><comment><USER8> Intel Thread Building Blocks [http://www.intel.com/cd/software/products/asmo- na/eng/294797...](http://www.intel.com/cd/software/products/asmo- na/eng/294797.htm)

It makes writing apps that take advantage of multi-core architectures almost trivial. We've benchmarked it on our machines and on Amazon EC2 with very impressive results.

Also, RapidMind has some nice libraries that allow you to fairly easily parallelize code to optimally take advantage of multi-cores and GPUs. Although their licensing is obscenely expensive at the moment.

<comment><USER9> I'm sure this works great when you can split up your application to 2-10 threads. But how well will your programs work when you have to cope with 200-2000+ cores?

</comment></comment><comment><USER10> It looks like we're going to be wishing the GHz wars were still going on pretty soon.... All my software is multi-threaded, but not in a way that would make it any faster on 200 threads than maybe 4 maximum. It's not (as Ars makes it seem) an issue of my deciding to split the code into only 4 sections; it's a matter of launching new threads when you need them instead of whenever you can just for the hell of it.

For instance, my usage of multi-threaded code is to to keep the UI alive and responsive while firing off threads in the background to accomplish different things. A thread for each _independent_ procedure being done in the background - but the problem is that there simply aren't enough procedures happening at once to go around!

Not all programs are just a single big mathematical problem being analyzed that can be split to an arbitrary number of threads, most of the time, most of the software, you just can't spread your code to an infinite number of CPUs - it would be stupid to even try.

Instead of getting into a pissing contest over core counts (anyone remember the tri-core AMDs?!?) the chip giants should be focus on better instruction sets, improved pipelining, lowered energy consumption, and - yes - even faster clock speeds... just not at the cost of performance as they had in the past.

<comment><USER11> Intel would like to charge people more for multi core CPU's because they are easy to design, but don't forget each of those new cores can still do 1,000,000,000's of operations per second. If your app works fine on say a 1GHz single core PIII then nothing is wrong and there is no point in writing multi core code. Anyway, it's not like Intel is going to build a CPU than can't run single core code as fast as their current crop of CPU's so I don't see any problems.

<comment><USER12> Adding cores to a CPU is not quite as trivial as all that. You have to consider the implications of shared memory and caches and the overhead of bus traffic between the cores. As the number of cores increases the overhead begins to dominate the design rather than the cores themselves.... there's been lots of good research on how to overcome those issues but it's very much an open problem at this point.

</comment></comment></comment><comment><USER13> There's at least one advantage to such a future.

Correct me if I'm wrong, but a great many of the techniques you use to scale to multiple cores in one machine can be used to scale to multiple machines. So you can practice your parallel processing skills and improve your tools in that area by just buying one computer instead of buying or leasing, say, 32. Programming for clusters won't be quite so arcane anymore.

<comment><USER14> Not really. You can practice cluster programming on a single core and your OpenMP, TBB, and Cilk++ programs won't run on a cluster.

<comment><USER15> While it's true that a Cilk++ app will run within a shared memory node, you can certainly run multiple Cilk++ apps on a cluster of nodes, if the goal is to increase app throughput.

</comment></comment></comment><comment><USER16> You know -- there aren't a vast number of consumer-facing applications that really need this kind of power.

Video games? Ripping a DVD? Editting video?

And what does this mean? As a hacker, am I forced to target my tiny little application to multiple cores?

<comment><USER17> "640K ought to be enough for anybody"

</comment></comment><comment><USER18> Multicore is nothing special if you are doing web apps. So I guess the trend towards multicore and the trend towards web apps will reinforce each other.

<comment><USER19> Untrue.

Now that CPU time is really cheap, memory is expensive again. For example, I have a $30/month slicehost and only get 512M of RAM. Even though I have 4 cores on that box, my application uses too much memory per instance for me to be able to run 4 separate processes. So if I needed to scale, I would either need to buy more memory, or design my app better. Buying more memory works for 4 cores, but what about 128? Probably not.

<comment><USER18> Yeah, memory handling of Ruby is severely broken. Enterprise Ruby might help you.

If you use thread-based model for handling web requests (JVM or .NET application), you won't have this problem. I think even Python processes would share most of their memory.</comment></comment></comment>


ShowHN: FastType - Speech Recognition in browser done right - <AUTHOR> https://dictanote.co/demo/

<comment><AUTHOR> Underneath it uses webkit speech api tightly integrated with bootstrap-wysiwyg editor. The service itself has a relatively good accuracy at-least for the English language.

<comment><USER2> I just tested it and had a huge problem with accuracy. It may be good enough for search, where you're speaking only a few words, but trying to actually dictate a document, I wouldn't find this useful.</comment></comment>


Elon Musk leads 116 experts calling for outright ban on killer robots - <AUTHOR> https://www.theguardian.com/technology/2017/aug/20/elon-musk-killer-robots-experts-outright-ban-lethal-autonomous-weapons-war <comment><USER2> I'm afraid history has shown that once the cat is out of the bag someone will use it and other countries will follow suit. And the cats already out of the bag because the technology that allows autonomous cars, civil/industrial robots, drones, and face recognition programs to work just need to be combined and modified to make "killer robots".

</comment><comment><USER3> Would this include remote operated stuff like the predator drones?

<comment><USER4> Current drones were humans are involved in making decisions are not included:

"Autonomous weapons select and engage targets without human intervention. They might include, for example, armed quadcopters that can search for and eliminate people meeting certain pre-defined criteria, but do not include cruise missiles or remotely piloted drones for which humans make all targeting decisions." [1]

[1] [https://futureoflife.org/open-letter-autonomous- weapons/](https://futureoflife.org/open-letter-autonomous-weapons/)

</comment></comment><comment><USER5> An argument against would be that something like a killer drone with face recognition could take out terrorist leaders with less collateral damage than the usual bombs / missiles.

<comment><USER6> Ethically a human should do it to another human.

<comment><USER7> How is that ethical? You are now harming two people, one by mental trauma who is presumably innocent, to reach the same goal you could have reached by sending in a UAV.

</comment></comment></comment><comment><USER8> WW3 is going to be a real bitch.</comment>


Ask HN: What do you want your list app to do? - <AUTHOR> Would you use pre-curated list of things you need for popular activities like hiking, travel, office supplies, moving supplies, etc?<p>What other websites do you currently use to prepare? <comment><USER2> Multiple things - quickly capture things to do, remind me when I need to do things that have a deadline, magically self manage things that are essential vs non essential, keep track of things, categorize them, have controls to interact with it (checkbox, etc), scheduling like repeating todos, and a whole bunch. TODO apps have the potential to fit into any organizational style except most are so opinionated that if you don't work that way, it doesn't work for you past the initial rush. Ideally it needs to get everything I need and then get out of my way. Which is why I <3 my BuJo. Todoist comes close. I wouldn't use pre curated lists unless it was very specialized. Like packing for Iceland where I might not know what I need to get, or back to school lists, but unlikely.</comment>


When Movies Fly: How Modern Internet Experience Is Made Possible by Airplanes - <AUTHOR> https://www.flexport.com/blog/the-internet-is-powered-by-airplanes/ <comment><USER2> This sounds suspiciously like rubbish to me, at least in the general case. There are too many videos that need distributing in a short time for this to be how the problem is generally solved. Think of a recently uploaded YouTube video, or the coverage of a sports event that's now available on your Catch Up TV provider (iPlayer, NFL Now, etc.).

As a way of seeding the contents of a new CDN node when it's built, I can believe this. As a way of continuously synchronising an existing node, I have more trouble believing it.

<comment><USER3> Then why does Amazon S3 offer a "ship us your disk" service?

[https://aws.amazon.com/blogs/aws/send-us-that- data/](https://aws.amazon.com/blogs/aws/send-us-that-data/)

</comment></comment><comment><USER4> "Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway."

– Andrew Tanenbaum

My own CS professor used to use a similar analogy of a donkey carrying hard drives on his way to New Zealand. I think most us probably had a CS professor that used similar analogies, as it quickly distinguishes between latency and bandwidth.

<comment><USER5> Tanenbaum may well have not been using an analogy. He might have been talking from personal experience.

I have a co-worker whose father worked in the Bay area during the 70's and 80's. Back then computer time was expensive and not many places could afford to install high quality hardware (basically the 70's mainframe is the 2010's data center - there are relatively few). So people who wanted work done would have to ship their tapes over to the computer and have their job run. My friend's father was one of these couriers who would run the tapes around in the back of his station wagon.

<comment><USER6> My grandma tells a story about when her husband and her brother were running an experiment in grad school that needed computer analysis in the middle to tweak the final run. The problem was that their lab was on one side of Oakland, and the only computer they had access to was a mainframe on the other side of the city. And they only had the lab for one night.

So that night they had Grandma sit outside the lab in her car. As soon as their first run was done, they ran the punch cards with the results out to her. She drove across the city and started the computer run while they reset the experiment. As soon as the run finished, she drove the new cards back to them.

They ran their second experiment, got their results, and got the best grade in their class.

The way Grandma tells it is that she was driving 90mph across the city in her brother's Corvette at 3am. I'm not sure how true that part is...

</comment></comment></comment><comment><USER7> I had to do this once. I went on a trip to Africa with an organization where I shot tons of photos and HD video. In the end, I had over 100GB total, and they needed my source footage to edit videos and such. I lived in Florida, and the editor lived in Georgia. We tried dropbox, but that just was going to take weeks.

Our plan? He went to Best Buy, got a USB hard drive & mailed it to me. I loaded it up with footage and mailed it back to him. Once he got it, I think he was even able to return the hard drive and get his money back. The only expense was postage, and we saved a lot of time.

<comment><USER8> I work in the ediscovery industry, we very regularly need to send large collections which can easily be a TB+ to another location on short notice. One of our favorite things to do with new folks is have them hop on a plane with a hard drive, give it to someone at the airport, and get right back on the same plane.

</comment></comment><comment><USER9> Imagine someone who travels around the world with a suitcase of SSDs to deliver data... possibly for criminals, big corporations, or governments. Johnny Mnemonic meets Transporter except plausible.

</comment><comment><USER10> "In the 75 minutes it took for the pigeon to fly 120 kilometers, only 24% of Brumfield's video was uploaded."

TIL pigeons can average 60MPH for 75 minutes: [https://www.google.co.uk/?gws_rd=ssl#q=%28%28120%2F1.6%29%2F...](https://www.google.co.uk/?gws_rd=ssl#q=%28%28120%2F1.6%29%2F75%29*60)

<comment><USER11> Yes, the average airspeed velocity of an unladen homing pigeon is around 50mph, so with a moderate following wind that doesn't seem unrealistic.

<comment><USER12> Not entirely sure whether or not this is a Monty Python reference.

</comment></comment></comment><comment><USER13> The American company I work for once decided that the shared folders of the German team should be located on an American server. So they flew the hard drives to the USA over a week-end. Then the Germans complained because of the time it took them to open their excel files. So the company had to fly the hard drives back to Germany. Anecdotal, but a good example IMHO.

</comment><comment><USER14> Netflix ships the open connect boxes out fully loaded, right? Do they push new popular content down from time to time or what?

<comment><USER15> nightly -- they want a 10gbit link dedicated to the box for refreshing content

</comment></comment><comment><USER16> I am not so sure it is physics but accidents of economics business and Engineering. Companies have not been so enthusiastic to put optic fiber to where people live. Also the TCP protocol doesn't support really fast connection when you're going up to a gigabit or so. There is a company with a patented protocol based on UDP that companies like Disney use to move big video files around.

<comment><USER17> I believe you're talking about Aspera, recently bought by IBM. It's pretty fast and reliable and I've never had a problem with it over even residential Internet speeds ( many master files for delivery well over 100GB). Bitmax is the big CDN that uses it for media delivery.

[http://asperasoft.com/technology/transport/fasp/](http://asperasoft.com/technology/transport/fasp/)

<comment><USER18> There's a free alternative I have to talk up any time Aspera gets mentioned, and that's GridFTP by way of Globus Connect.[1] It's pitched as a way to move massive quantities of research data around, but it's free for personal/academic use and dead simple to set up.

There's a standalone command line client too [2], but it requires a bit more knowledge of how to tweak the settings, while Aspera and the Globus client does a lot of auto ranging stuff.

In any case, both of them will easily get you line speed from your slowest node.

[1]: [https://www.globus.org/](https://www.globus.org/)

[2]: [http://toolkit.globus.org/toolkit/data/gridftp/quickstart.ht...](http://toolkit.globus.org/toolkit/data/gridftp/quickstart.html)

<comment><USER17> This is great, thanks for mentioning it. I'll definitely dig in and give it a trial run!

</comment></comment></comment></comment><comment><USER19> Another thing I find interesting about the speed of light is that the Internet of today wouldn't be possible in the same form as here on possible settlements on the moon and not at all on the Mars

<comment><USER20> You mean on the planets themselves, or between Earth and Mars or the moon?

<comment><USER21> Between. Although connectivity to the moon should be fine, pings in the order of 3-4 seconds happen regularly on Earth, too. From personal experience I can attest that WoW is perfectly playable with pings of up to 5 seconds.

Network connectivity between Earth and Mars is going to be a slow affair, though, and will require relay satellites for when the Sun is between the planets.

A worst case round trip time of 45 minutes definitely won't be fun with TCP.

<comment><USER22> I often think about that. What would a solution to this problem look like?

Will interstellar communication really be almost as difficult as interstellar travel?

<comment><USER21> I think people shouldn't get their panties in a bunch. Letters used to take months to travel from one end of a continent to another for some 3600 years and people coped just fine. We won't have near-real-time chat, but the rest of the internet ecosystem will work as before. Mail, forums, cat videos, etc. pp. will work fine.

The engineering problem is already solved for probe communications anyway.

</comment></comment></comment></comment></comment><comment><USER23> Why wouldn't something like BitTorrent be faster?

<comment><USER24> BitTorrent is a CDN.

But it's still quicker to put a box of HDs on a plane from Miami to New Zealand than to wait until the data has propagated.</comment></comment>


The Most Powerful Municipal Utility in the United States - <AUTHOR> http://www.williamha.com/the-most-powerful-municipal-utility-in-the-united-states/

<comment><USER2> Estimated bills are perfectly normal, sounds like the author has an axe to grind and is clutching at straws. All his friend had to do is give an actual meter reading.

Also complaining about a company paying their staff well is pretty depressing. How is this crazy inequality between the top 10% going to get fixed unless staff are paid more? And yet here is someone complaining about a workforce that obviously have a strong union and insinuating it is corruption. Very sad.

(Source, temped at electricity company in UK while at uni).

<comment><USER3> Its not that easy, I have been through this in Ontario, Canada. Use to call in every month with actual meter reading and still get crazy bills. I then started taking pictures of the meter every month and told them to fix the issue or I will contact local media. It turned out the issue was systematic

[http://www.theglobeandmail.com/news/national/hydro-one- react...](http://www.theglobeandmail.com/news/national/hydro-one-reacted-to- billing-errors-with-deflection-deception-ombudsman/article24587387/)

</comment></comment><comment><USER4> Despite its internal issues and the damage it has caused to the Owens Valley that it has caused over time, the LA DWP has one thing going for it: It doesn't have to deliver a profit to investors. To me, this eclipses the fact that some people may be overpaid.

If you live in a city served by an investor-owned utility, and the LA DWP, you'll pay considerably less for electric power per kilowatt hour from the DWP, then you will from someone like Southern California Edison.

I'm of the opinion that utilities should be non-profit entities along with education and healthcare. I know this will stick in the craw of some people, but having to pay dividends to investors is what causes electric rates to be too high. Also, I believe that overpaying the employees of a public utility can be tolerated in moderation, and that the additional salary paid out is money put to better use than paying dividends to investors.

</comment><comment><USER5> I have another story of LADWP. About 3-5 years ago, I read in LA Times the story of union members of LADWP filling the LA City Hall Council Meeting demanding pay raise. City was resisting it.

The very next day (or week), power to the LAPD HQ and LA City Hall Building were cut for a few hours (or a day?). No other area of LA had power outage.

I spent a few minutes searching for the 2 stories but couldn't quite find it. But it did happen.</comment>


What is a Good Recommendation Algorithm? - <AUTHOR> http://cacm.acm.org/blogs/blog-cacm/22925-what-is-a-good-recommendation-algorithm/fulltext

<comment><USER2> Greg nails something that seems to be passing the academic world of recommendations by: you can't measure recommendations quality with RMSE. It's just not a good metric. _User happiness_ is the goal, not the ability to predict ratings of unrated items. I'm glad to have someone with a little more clout than me saying this.

Some ask, "What's the difference?" If I tell you about 5 albums that you've already heard of, are the recommendations good? Even if we're pretty certain you'll like them? If you're buying an obscure jazz album and you get "Kind of Blue" as a recommendation (probably most popular jazz album in history and one any jazz fan would know of) is that a good recommendation?

How do users build trust of recommendations? How does that factor into the algorithms? It turns out you need a mix of obvious and surprising results. All obvious and they don't discover anything; all surprising and they don't trust them.

Those are the right questions. A good algorithm for recommendations is one that people interact with and discover things with.

This is an awesome read (in fact, I uhm, submitted it a few minutes before at Greg's blog, but it's good enough that I upvoted it here too). As soon as I ran across it I immediately blogged, tweeted, and submitted here. I'd had a draft of an essay along these lines kicking around for ages.

<comment><USER3> I think they use RMSE because it's easy, not because it's ideal. Bellkor, a participating team in Netflix challenge, discussed this in their paper describing their method who won the progress prize; they calculated whether minute differences in RMSE improved the quality of top10 results; it did pretty significantly.

<comment><USER2> Just fished it out -- paper is here for the curious:

[http://public.research.att.com/~volinsky/netflix/RecSys08tut...](http://public.research.att.com/~volinsky/netflix/RecSys08tutorial.pdf)

It's one, amusingly, that I'd skipped because it seemed to be less technical. :-) Good stuff.

</comment></comment></comment><comment><USER4> I'd argue that "user happiness" isn't the goal for Netflix, long-term revenue is. That's relatively easy to measure, and certainly easier than something nebulous like "user happiness." You can even test different recommendation algorithms and see which maximizes long-term revenue.

Presumably Netflix knows that the recommendation algorithm has a significant impact on their bottom line, which is why they launched the Netflix Prize to outsource new algorithm development.

Now, Netflix can't give revenue data to third parties, and they also don't want to let third-party recommendation algorithms run on their system because an "average" algorithm will hurt their bottom line.

The question then becomes: which well-understood metric correlates best with long-term revenue?

Perhaps the answer is RMSE, which is why Netflix chose it. That doesn't seem totally implausible to me.

<comment><USER2> You'd expect that. In the recommendations world that's called "business rules" and includes things from skewing results based on margins to not showing inappropriate recommendations (say, women's clothing to men).

However, I'm pretty sure that Amazon's recommendations don't do that, or don't do it much, anyway. Their "similar product" recommendations seem to be on a very simple (and often mediocre quality) pure counting correlation between two items purchases. It's much harder to guess which algorithms are at work for personalized recommendations.

At the end of the day, profit margins aside, there's a lot that goes into optimizing recommendations that can't be easily measured. How do you measure customer loyalty based on good recommendations? There have been a number of market research studies that indicate that recommendations do drive customer loyalty, but it's hard to say where the sweet spot is between skewing things toward higher margins vs. skewing things towards customer utility. About 80% of Amazon's visitors aren't there to buy stuff -- and that's great for them! They've become an information portal / window shopping location that happens to also sell stuff. Which is a great position to be in when somebody does think of buying stuff.

That Netflix uses RMSE for their contest doesn't bother me. What I think Greg is reacting to (and certainly my sentiment, again, this is really similar to something I'd been writing) is that there's becoming a blurring between stimulus and response here and there's the assumption, if not in this subfield, certainly among those casually tracking recommendations advances, that RMSE _is_ a good way of measuring a recommendations algorithm, not just, "the metric Netflix is using", when in fact, it's really a much more inexact science.

</comment></comment><comment><USER5> A simple item based algorithm which has been reported to work quite well is Slope One. The advantages are that it is easy to implement, can be updated on the fly, and it works well (enough) for sparse data sets.

<http://www.daniel-lemire.com/fr/abstracts/SDM2005.html>

There's also examples using python, java, and PHP/SQL.

</comment><comment><USER6> A friend of mine made a Rails plugin called acts_as_recommendable (a plugin for collaborative filtering): <http://github.com/maccman/acts_as_recommendable/tree/master>

</comment><comment><USER7> 1) Getting more preference-defining data from the user trumps algorithm improvements at this point. Netflix would have improved RMSE even more by turning over additional data like queue-adds, page views, user age\gender, etc. 2) Use caution criticizing RMSE as overly blunt. It may seem so, but it is not obvious that an algorithm can be improved for top N prediction simply because you declare that as the focus.

</comment><comment><USER8> Netflix needed a formal measure for their contest, so RMSE is a useful one while "making people happy" is not. A business that relies on recommendation can plug a new algorithm with better RMSE and get improved results immediately, it is an important part of the puzzle.

<comment><USER9> "Making people happy" is hard to define, but you can pick better concrete metrics than RMSE, and this article offers suggestions on how. An important part of solving any problem is defining success correctly.</comment></comment>


Ask HN: (O/S) DevOps Tool to Identify Wasteful Cloud Spending - <AUTHOR> Hello, I am looking for a software tool that basically helps you lowering your cloud bill finding holes in the set-up or architecture.
I found Hana Insight (Azure) and Cloudability (AWS) with seems like the right tool but not Open Source and both have a lot of Enterprise features.
Does somebody know either an O/S tool or something that can support Azure & AWS?
It would be nice but doesn't have to be O/S rather have something that works :) Just curious if there are tools DevOps are using I am not aware of. <comment><USER2> Have you looked at AWS trusted advisor? You can get advise from cost, performance, etc.

<comment><AUTHOR> No, I will look at it, thanks!

</comment></comment><comment><USER3> CloudHealth?

<comment><AUTHOR> Thanks, never heard of it!</comment></comment>


Snowden denies allegations of spying for China - <AUTHOR> http://www.nytimes.com/2013/06/18/world/asia/nsa-leaker-denies-giving-classified-data-to-china.html?ref=asia

<comment><USER2> _"All I can say right now is the U.S. government is not going to be able to cover this up by jailing or murdering me," he said. "Truth is coming, and it cannot be stopped."_

Beautiful.</comment>


Exposing China's Digital Dystopian Dictatorship [video] - <AUTHOR> https://www.youtube.com/watch?v=eViswN602_k <comment><USER2> Watched this earlier, a bit creepy. I wonder how it will play out in the next 10-15 years with China's expansion into Africa.</comment>


I Became a Disciplined Investor over 40 Years. The Virus Broke Me in 40 Days - <AUTHOR> https://www.nytimes.com/2020/03/27/business/stock-market-pandemic-coronavirus.html <comment><USER2> Even right now the markets are crazy. The Economy is holed up but market is rising ? Because of the feds stimulation, may be?

Timing the market is a fools errand. It's not about what happening in the world, it's happening in other people's mind when they decide to buy or sell.

Sure the trader lost 30% of his net worth, many people are losing their lives and jobs. Many more are about to lose their homes.

Just putting things in perspective. I'm just grateful I work in Tech. I have some funds saved up to ride this out for a couple of months.</comment>


Trump asked China's Xi to help him win reelection, according to Bolton book - <AUTHOR> https://www.washingtonpost.com/politics/trump-asked-chinas-xi-to-help-him-win-reelection-according-to-bolton-book/2020/06/17/d4ea601c-ad7a-11ea-868b-93d63cd833b2_story.html <comment><USER2> I feel like there's some deeper game here that I don't understand, when Bolton (reportedly) says that the President did many things similar to or worse than the Ukraine episode and the impeachment should have pursued them. And then prominent Democrats fire back saying that he refused to testify, so why is he saying this now? I can't tell what anyone's motivations are. Everybody engages in elaborate dances, everybody agrees the President is terrible, but they accomplish nothing.

<comment><USER3> Bolton's might be to sell copies of a book. Democrats might be to avoid looking bad, to hopefully win the next election.

Somewhere in there, one side or the other (or even both) might care about the truth, or about doing what is good for America. Maybe.

<comment><USER2> I can understand someone wanting to make money by selling a book. And I can understand someone not wanting to do the heroic thing to save the country if it looked too personally costly. But at some point, it looks from afar like it would have been _easier_ to just take him down, which makes a paranoid mind ask what's really going on and is there hidden protection?

<comment><USER4> I think if the House had subpoenaed Bolton, he would have refused to show up. This would have opened him up to be sued, but it would have been a long, drawn out process in the courts, which would have prolonged the impeachment proceedings by several months, by which time public opinion on the impeachment proceedings could have become negative.</comment></comment></comment></comment>


Don't Become a Scientist (1999) - <AUTHOR> http://katz.fastmail.us/scientist.html <comment><USER2> Sad but true, especially in the basic sciences. We are failing to invest in the future.

</comment><comment><USER3> Yup</comment>


Show HN: Method Draw, an SVG drawing application - <AUTHOR> http://editor.method.ac

<comment><AUTHOR> Credit where it is due: this is a fork of SVG Edit [http://svg- edit.googlecode.com/svn/trunk/editor/svg-editor.h...](http://svg- edit.googlecode.com/svn/trunk/editor/svg-editor.html) which has code that is beyond my mind. I just wish it had a nicer and more usable interface so I forked my own version.

It builds upon some of the ideas of Bret Victor (hey, who isn't doing it these days?) with a scrubbable interface to manipulate numbers. You can introduce an exact number by double clicking on it.

Some nice features that might not be obvious:

* Alt + drag = clone

* Alt + scroll = zoom

* Spacebar + drag = pan

* Shift + Arrow key = move by 10 pixels

* Drag and drop import of SVG and bitmap files.

If you want to give it a spin with a really complex SVG file you can open your own or load this example file: <http://editor.method.ac/?url=gallardo.svg>

I made the app touch friendly, so you can check it up on your iPad. Some touch specific customizations are in order but it works.

<comment><USER2> Might be nice if there were some shapes available either on the menu or on the tool bar to the left. Arc, circle, box, rectangle, all come to mind. Then the ability to scale and instance of same would be quite handy. First thoughts...

<comment><AUTHOR> The star in the left toolbar is a shape library. There are many prebuilt shapes there.

You can draw rects and circles by clicking on the corresponding tool and clicking and dragging on the canvas (standard drawing app conventions).

You scale and resize the intance by dragging its corner. If you want to draw perfect circles and squares hold shift while drawing.

</comment></comment></comment><comment><USER3> This is awesome. Thanks!</comment>


Why I'd never do a TED talk -and it's not just because they're named after a man - <AUTHOR> https://www.theguardian.com/commentisfree/2018/jul/23/ted-talk-smugness-presenters-embarrassing <comment><USER2> Pot calling kettle black. Pointing out no less than twice that lame named- after-a-man joke. If that hits home her readers must be every bit as vapid as the average TED attendee.</comment>


Testing is not a Replacement for Static Typing - <AUTHOR> http://lovehateubuntu.blogspot.com/2010/03/testing-is-not-replacement-for-static.html <comment><USER2> Let me argue the following standpoint: programming is hard, algorithms are hard, and compile time type checks are not much more than spell correctors.

Any algoritm operates and creates state. It is nice your statically typed language prevented you to add your socket file descriptor to an int. So you fix your 'typo' and add the index of the file descriptor (assuming your open sockets live in an array, or similar scenario). But what if your algoritm requires you to do a subtraction? You still have a bug.

No type check can check runtime dependent data. You pass in a List but the list requires to be at least of length 2? (Actually you some languages can tackle this too, but these sort of requirements become arbitrary complex.) You will deref the list out of bounds and you have a bug.

So now I just sketched two scenario's where you still need to actually run your program to catch bugs. And your type system did nothing.

A very certain kind of bug -- mostly typo's or slightly higher level mistake -- are caught by a static type systems. The question is, is this worth the restricted semantics of the language?

The advantage of a static type system is clear; these mistakes are caught where and when they are introduced, not where their result is used.

The disadvantage is also clear: restricted semantics. How would macro's look for lisp if it had type checks?

Without types, your language is better at creating macro-like abstractions. You can capture patterns with these, and prevent a lot of typos that way. (And a write a lot more concise code.)

And even more, think about Java's performance hit on ArrayStoreException ... So even such statically typed languages need to do runtime type checking more often then you would like.

</comment><comment><USER3> Most arguments of this type focus on the end result and not on the process of writing a program. Static typing and (in many cases) writing tests before code work well if you have a well-defined idea of what you're trying to create. They don't work as well in a situation that's very experimental or very iterative.

In the real world, static and dynamic typing both have their place. Different problems have different tool requirements. There is no One True Language and there never will be. For most of the things I do, I can make do with four.

</comment><comment><USER4> Just to address a depressingly common misunderstanding whenever testing and static typing is brought up:

 _Static Typing vs Testing: Which is better?_ No! Stop that! There is no "vs"!

To take Haskell as an example, it is a completely statically typed language which, if not abused cleverly, guarantees that you don't have code trying to add inches to centimeters, or divide a hangar by a sorted apple. It _also_ has a very powerful unit test generation and execution library (+), code coverage tools, and test statistics tools. These libraries and tools are frequently used by Haskell programmers. Creating any large project without unit tests is just as silly in Haskell as it would be in Python.

Nobody has ever (or possibly, only nobodies have) argued that static typing eliminates the need for tests. The author of this post didn't argue that either.

(+) [http://www.haskell.org/haskellwiki/Introduction_to_QuickChec...](http://www.haskell.org/haskellwiki/Introduction_to_QuickCheck)

</comment><comment><USER5> This argument sucks. All this guy has to say is that statically typed languages will automatically detect some errors at compile-time. Yeah, no shit. The question at hand (among other differences, like expressiveness, compiler complexity and optimization) is whether those errors are common and severe enough to warrant any programmer overhead dealing with static types.

</comment><comment><USER6> Static typing isn't a replacement for testing, either. You can get away without static typing. You probably can't get away without testing.

<comment><USER7> You could argue static typing can replace testing for some subset of tests when compared to dynamic languages, but for the most part yeah, you can't use any type system I know of (not strongly conversant in Scala or Haskell's) to replace the vast majority of unit/etc tests.

<comment><USER3> Haskell programmers are fond of claiming that their type system is more expressive than some programming languages, and that an impressive number of programs work correctly the first time they pass the type checker. I've been using Haskell for a while and I've found quite a bit of truth in that claim. I've found it to be more true when I actually _use_ the type system, creating my own data types instead of just sticking values in to lists or tuples.

<comment><USER8> _an impressive number of programs work correctly the first time they [compile]._

Everybody says this about Haskell, and it's probably true.

But really, isn't it about as true of Lisp, Scheme, or Clojure? Once you can call your program in a repl, it's probably mostly right. Maybe it's just my inexperience with Haskell showing, but ISTM that the square-peg-round-hole errors catchable by type checking are pretty rare.

Am I missing something?

<comment><USER3> I've found my Haskell code much more likely to do what I want the first time it is accepted by the compiler than Clojure, CL or Scheme. On the other hand, I find it easier to play around with things in a Lisp REPL than GHCi. Maybe that's because I have more experience with Lisp than Haskell, but I suspect there's something inherent. I don't think one approach is better than the other, but each has strengths that help with certain kinds of development.

<comment><USER9> For one, GHCi doesn't even provide the whole language. You can't define new types, classes, or instances, and as a matter of syntax you have to use explicit braces or semicolons for multi-line things. I haven't used it much, but O'Caml's REPL is better on these counts.

As far as semantics, GHCi doesn't let you redefine a function and continue working, largely, I suspect, because Haskell doesn't describe how that should work.

Conversely, if you keep your source open in an editor and reload, then you can change classes, macros, etc, but you lose your state across reloading (declaring top-level values to set up your testing state can help, but it's less fluid).

</comment></comment></comment></comment></comment></comment><comment><USER10> The test of whether static typing is useful is pretty simple: Do you ever get type errors when you write code with static types?

If you do (and the errors are not spurious), then the static type system is catching real bugs that would have survived for some length of time in a dynamically typed language.

</comment><comment><USER11> I don't know why we have to rehash this argument all the time. There are certain problems where the current state of typing technology gets in the way. These usually involve the UI and testing layers where, for example, you may want to mix together different types that have a common protocol or trait (the Java people call them interfaces). This is much easier to deal with in languages that let you (or force you to) dynamically bind methods at runtime, like Objective-C and Javascript.

Then there's the data-processing-heavy backends where you need to do a lot of parsing, a lot of analytics, a lot of processing, etc... static typing helps a lot here. You do not want to make silly stupid mistakes when you're parsing one value to another, and types help make sure you're getting the right inputs and outputs. When you're doing your metrics, you often don't even want to be accidentally mixing your floats and ints. If you want to get real fancy about it, monads and functors can help immensely for managing state and joining data for a lot of these backend problems.

The folks who don't see this generally haven't had the good luck to work on big problems throughout the stack to see where the strengths of each paradigm come into play. There's plenty of functional programmers who don't know how to exploit a dynamic language (stop trying to impose types on the system dammit!) and vice versa.

</comment><comment><USER12> It looks like a great example of the all else equal fallacy: "let's take language S which is statically typed and language D which is dynamically typed [...]. Let's also say that these two languages are identical in all respects except for this single fact [...]"

If all else were truly equal, Britton would be right -- static typing clearly would be better. (I think. It's a question I wrestle with quite a bit.) But all else isn't equal [ _], so the static vs dynamic distinction is just one of many aspects to take into account when choosing a programming language.

_ Please correct me if I'm wrong: if there's a language that has the feel and rapid turnaround of a dynamically typed language with type checking performed early, I'd like to know about it! The closest I've used is probably Scala, maybe OCaml (but I've only studied it briefly, and I've certainly never mastered it, alas).

</comment><comment><USER13> Tests and static typing are alternative solutions to the same problem. I think we're just going to have to admit that they both have strengths and weaknesses in comparison to each other.

I say that static typing is like a game where you have to push square pegs into various holes that aren't square. You say that dynamic typing is like opening the flood gates on bugs.

Oddly enough, we're both right and both wrong at the same time.

<comment><USER14> They don't solve the same problem though. All static typing does is make sure you don't have any type mismatches. Sure, it helps enforce assertions about your inputs and outputs, but there are a million ways your code can compile without issue and then proceed to fail spectacularly. The fact that, as this article states, tests are optional is another issue entirely, but it doesn't change the fact that static typing is only useful up to a point.

<comment><USER13> I don't know where you seem to be getting that I am for static typing. In fact, what you say about static typing only being useful up to a point is exactly what I was getting at. Neither way is perfect to remove bugs from your programs.

<comment><USER14> I don't think I made any assumptions about your feelings on static vs. dynamic typing, I'm just pointing out that even though on the surface they can be both used to solve similar superficial problems, static typing is woefully limited with regard to the scope of problems it can actually detect. Tests can go way farther to help verify the expected results of your code.

<comment><USER13> "Tests can go way farther to help verify the expected results of your code."

This is definitely debatable, but I think we should agree to disagree at this point.

</comment></comment></comment></comment></comment><comment><USER15> Why on earth is he blocking links from Reddit and HN?

</comment><comment><USER16> Static typing and testing are not replacements for structuring your code so that when you read it at each level of structure you know that it is right.</comment>


Pwn.college - <AUTHOR> https://www.pwn.college/ <comment><USER2> Looks good but if I may add a suggestion is to remove the slides from google docs. Maybe let us download them locally?

1\. Corp VPN's will block google docs very regularly 2\. Some people refuse to use google services 3\. It shouldn't take you to a different domain to read the learning material

</comment><comment><USER3> Great job getting this in front of people as soon as possible, this is a very polished product for a beta. Nothing worse than sitting on something waiting for it to be perfect or "complete". Excited to see where you go with this!

</comment><comment><USER4> Another software exploit thing that appears to be entirely Linux centered. Nothing against it but this doesn't even touch "core cybersecurity concepts". As crappy as it is, a security+ will teach you more infosec than knowing how to write kernel rootkits and create rop gadgets in your sleep. Case in point: most "advanced" attackers (except the "equation group" lol) very very rarely use a zero day, A majority of attacks by these guys does not even see new exploits out of known public vulns. As easy and comfy as Linux is to hacker, try doing this in Windows land. You will gain a broader perspective. Just my $0.02c ,I am still glad to see more content like this.

<comment><USER5> We must have a different definition of advanced attackers because I can think of numerous countries that use zero days. A handful more that use COTS malware (i.e. NSO) that employs zero days.

<comment><USER4> Yes a few, very few compared to the rest. You will note I said most of them don't use 0 days and even 1 days. A lot attempt exploitation in some form of another, typically for vulns older than a few months.

It's simply too easy to use other means of delivery.

Look at drive by: [https://attack.mitre.org/techniques/T1189/](https://attack.mitre.org/techniques/T1189/)

In most cases the only thing exploited is the sites hosting their malware (typical joomla/wp sites).

Spear phishing attachment: [https://attack.mitre.org/techniques/T1193](https://attack.mitre.org/techniques/T1193)

I see about 3 examples out of 40 that use exploits.

Spearphishing link: [https://attack.mitre.org/techniques/T1192/](https://attack.mitre.org/techniques/T1192/)

2/20

[https://attack.mitre.org/techniques/T1190/](https://attack.mitre.org/techniques/T1190/) only 5 examples for public facing asset exploit,mostly sql injection.

Mitre is not a complete list but they do a good job of keeping up with APT techniques. The most famous ones indeed use 0days and that is one of the reasons they're famous. But the end of the day they should be noteworthy based on damage done not "coolness" of the hack.

Software exploitation is a thing but not only is it seen less and less, modern mitigations are making a lot of the techniques obsolete. Look at the fall of exploit kits as an example.

<comment><USER5> I do not consider spear phishing an advanced attack (despite many governments doing it). Credential theft definitely is not. Malicious docs generally are not (as they are typically just macros that the user has to run).

Watering holes can be depending on how the malware is delivered once the user visits the site. If it just tries to download it and hope they click, that is not advanced IMO.

I do agree that this is what most organizations face as threats though. Resources like these are for people who want to eventually sell exploits, hunt for bugs, or learn enough to analyze them effectively. I do not think these are for teaching someone to teach corp users to not run docms.

<comment><USER4> No no no...

It is the threat that is advanced not the technique. That was my whole point. If corp users with all their security teams are still victims how much more are individuals. Or does the world outside of tech bubbles not exist?

Also, macros and docm are only small vector, most non technical people for example would open say...a jar file with a PDF icon that came from an email from a compromised account of someone they know, and trust me I've seen plenty of non corp users without the typical mandatory phishing training fall victims,lose large sums of money,etc...

I have no clue why you don't think spear phishing is an advanced thechnique. Just recently I stumbled upon a word exploit being used and it was not "spear" phising just normal stuff. Does it have to be sophisticated and impressive to be advanced? Often, the most damaging exploits are the ones with minimal attack complexity (a CVE vector that adversley affects the score mind you). Regarsless of your opinion , the offensive way is to use the easiest and quietest method.

As to my comment, the author stating the material teaches people "core cybersecurity concepts" is what I disagreed with. Memory safe lanuages and exploit mitigation solutions make these software exploit techniques very difficult to pull off. Plus, any decent EDR solution easily detects and blocks exploitation of browsers,productivity apps and other well known initial access vectors, so you're basically left with mostly linux that is not hardened and even then only on servers and network devices since most people don't run Linux desktop (and to my point the post does not even touch windows).

Essentially, my point is that any infosec education that is not informed of current practical threats and attacks while very fun to go through, it may not provide as much value as you think.

Even in a tech company/startup where everyone uses linux and mac, it is much more important to have good security architecture and hygeine, do authentication properly (you're exploit proof but someone exposed their ssh private key and got you pwned),knowing risk analysis, threat modeling,incident response,etc... Is much more "core" while exploitation of software and even spearphishing are "edge" concepts.

<comment><USER5> >Does it have to be sophisticated and impressive to be advanced?

Yes. I think this is where our opinions differ. It is always a joke to be reading a blog post about an advanced attacker and the exploit is, as you say, the user clicked a jar with a pdf icon.

I agree completely about things that add value to corporations. This is why I am not working corporate security at a startup. I do not care so much about implementing U2F policies or server authentication methods, even though these are much more impactful for the business. I work for a small company, work on less impactful things (in regards to corporate security), and enjoy myself considerably more. If I could stomach the other stuff I would make more money, but I prefer to enjoy my work and hack on obscure things.

Your namesake with eternalblue is quite advanced (even though it was n-day). That stuff is interesting. Reverse engineering that stuff is interesting. I think these things prepare people to do that sort of work.

<comment><USER4> That's fine,having a specialized interest is ok,just don't say that is a "core concepts of cybersecurity".

You like impressive exploits and vulnerability research,which is good,that upstream work is useful in downstream "core" security whether it be for corporations (a 2 person startup is one) or consumers.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Check out:

[https://blog.ret2.io/2018/09/11/scalable-security- education/](https://blog.ret2.io/2018/09/11/scalable-security-education/) These guys have built an epic b0f research education platform - could be also sold as a cloud-based research platform for vuln developers

Another one is [https://www.youtube.com/channel/UClcE- kVhqyiHCcjYwcpfj9w/vid...](https://www.youtube.com/channel/UClcE- kVhqyiHCcjYwcpfj9w/videos) for mostly C/C++ overflow type education

<comment><USER7> > could be also sold as a cloud-based research platform for vuln developers

You'd have a tough time getting any public Cloud provider to allow you to run known vulnerable software, on purpose, on their network and then exposing it to the Internet.

If you kept it under a decent amount of network security and heavily restricted access it might work.

I would suspect you'd need permission to set this up, though.

<comment><USER6> True. I think the biggest buyer of this would be gov institutions that are constantly looking for building their offensive capabilities (mainly around exploit dev) but find it hard to get new recruits trained up. The alternatives are mostly instructor-led training which is good but combined with this type of platform + remote assistance via chat etc could scale things up.

<comment><USER7> Yeah.

I'm just in the beginning phases of learning pen testing. I want to move from DevOps to DevSecOps to PT.

I'm keen to see what labs exist out there already and how I can build my own complex labs (consisting of complete virtual networks) that I can hack against. A real wargame.

</comment></comment></comment></comment><comment><USER8> See also:

\- Wechall

\- OverTheWire

\- SmashTheStack.org

\- CryptoPals.com

\- Google Gruyere appspot

<comment><USER9> And:

\- [https://pwnable.tw](https://pwnable.tw)

\- [https://pwnable.xyz](https://pwnable.xyz)

<comment><USER10> [https://microcorruption.com/](https://microcorruption.com/) is also quite fun!

</comment></comment></comment><comment><USER10> Great work, Yan and Connor! It's interesting that the solutions are not made publicly available. Is this intended towards educators to use in their cybersecurity classes?

</comment><comment><USER11> Looking forward to the collection of modules. Right now I'd say it's a bit too linux centric. Especially when it comes to bringing cypersecurity concepts to new people I think it's usually better to start with basic stuff like SQL injection ('bobby tables') or ARP spoofing. They even state it's aimed at white belts, yet have slides about the different rings in a linux kernel. But maybe that's just my perception. Great anyway!

<comment><USER12> A beginner in offensive cyber security/infosec is better off learning Burp and common web app vulnerabilities.

In my opinion that is.

<comment><USER11> That's exactly my point, yes.

</comment></comment></comment><comment><USER13> Cannot connect to [https://pwn.college/](https://pwn.college/) (only works on HTTPS with www subdomain) - somewhat of a problem for sharing this website.

</comment><comment><USER14> Ironically, a website centred around security doesn't support ed25519 ssh keys.

</comment><comment><USER15> Cool stuff. Does anyone know of a similar program for web security?

<comment><USER16> Not exactly the same but [https://portswigger.net/web- security](https://portswigger.net/web-security) has several good lessons and labs about specific attacks.

</comment></comment><comment><USER17> This is awesome. I'd definitely watch the videos!!

</comment><comment><USER18> Gotta be a bit less cheap and solve your ssl problems if you want people to take you seriously when it comes to security... Use cloudflare or routepath.app.</comment>


Show HN: An Android app for tennis, squash, badminton (and more) players - <AUTHOR> http://killermatch.com/

<comment><AUTHOR> It's an app that allow you to input your game and match results against opponents, and share results and statistics through email, social media and similar. It will keep you (and your opponent) honest about who is better and by how much, and should give you extra motivation to improve your own game (for instance knowing that your winning percentage will cross 50% if you win the next match..).</comment>


The Quest to Restore American Elms: Nearing the Finish Line - <AUTHOR> https://blog.nature.org/science/2017/08/09/quest-restore-american-elms-nearing-finish-line/ <comment><USER2> Folks might also be interested in the effort to bring back the American Chestnut tree; [https://www.acf.org/](https://www.acf.org/)

It was similarly taken out by a fungus brought over from the old world. They are attempting to backbreed in resistance from an Asian species of chestnut, and it appears to be going well so far.

<comment><USER3> The only example I've ever seen of American Chestnut is in the North Chagrin Reservation Nature Center. It's amazing wood, it almost glows, even 80+ years after construction:

[https://www.google.com/maps/place/North+Chagrin+Nature+Cente...](https://firstname.lastname@example.com,-81.43592,2a,75y,11.44h,85.26t/data=!3m6!1e1!3m4!1sLFTrfB2C16wuU4ZOvxlLFw!2e0!7i13312!8i6656!4m5!3m4!1s0x883100caac3c8a75:0x6102ef1553e68bb0!8m2!3d41.5628987!4d-81.4330531?hl=en)

If you go there, you can read the plaque describing the building and the loss of the chestnut which is now, strangely, between the bathrooms:

[https://email@example.com,-81.4357392,2a,75y,3...](https://email@example.com,-81.4357392,2a,75y,33.31h,91.93t/data=!3m6!1e1!3m4!1s_ARfogbx8u67g4rA6-14yw!2e0!7i13312!8i6656?hl=en)

</comment></comment><comment> mark-r I spent my childhood in a Minneapolis neighborhood where 100-foot Elms lined the streets, making a canopy from both sides of the street - the umbrella shape of the Elm coupled with its size makes a unique landscape. It was truly glorious, and I'm glad at the possibility of future generations experiencing this.

</comment><comment><USER4> Exciting that they have varieties that are resistant.

I don't think that is the finish line though. The finish line is decades in the future when there are mature trees in many of the forests that lost their elm to the disease.

<comment><USER5> The Elm is a magnificent tree. When humans get enough tolerant strains together that they start breeding new strains in the wild, the trees will take it from there.

<comment><USER4> That would be a very long process. The natural range is vast:

[https://commons.wikimedia.org/wiki/File:Ulmus_americana_rang...](https://commons.wikimedia.org/wiki/File:Ulmus_americana_range_map_2.png)

Any effort to really restore it will require establishing thousands of resistant colonies.

<comment><USER6> Then let this be the first step among many thousands.

</comment></comment></comment></comment><comment><USER7> So can we focus on the Ash and Walnut trees now? Please?

<comment><USER8> Think baby steps. Getting NYC/Albany to remove some of the legislation that prevents similar efforts there would be another nice direction to pivot.

</comment></comment><comment> mark-r I worry that their testing regime is only getting half the viable trees. Being resistant to the beetle would be just as effective as being resistant to the fungus, but their testing bypasses the beetle entirely.

<comment><USER5> Is there an elm that is already resistant to the beetle? Because if not, they have nothing to start from.

<comment> mark-r They're starting with trees that have survived somehow. It's hard to know if those trees survived due to fungus resistance or beetle resistance or just plain luck.

<comment><USER9> We know their offspring are (sometimes) resistant to the fungus. From the article:

> When the tiny elms reach 1 inch in diameter, the injections begin—every > single sapling gets a shot of the two strains of DED. "That is the moment of > truth," says Marks. "We can tell in a couple of weeks whether they will be > disease resistant.

Since they have a higher success rate than elm trees in the wild, we can infer that their parent trees were likely resistant to the fungus.

</comment></comment></comment></comment><comment><USER10> Let's be real here, how are these things at growing morels?</comment>


Show HN: Golang and raspberry-pi and websocket = awesome - <AUTHOR> http://labs.yulrizka.com/en/2015/08/testing-go-1-dot-5-cross-compilation.html

<comment><USER2> Really awesome indeed, what other architectures golang supports?</comment>


Edits Quarterly - <AUTHOR> http://editsquarterly.com/

<comment><USER3> Yes. YES. I've been saying this forever, and finally someone has done it.

It's far too common for online "magazines" to simply try to copy its dead-tree counterpart. PDF files, or even the concept of discrete, non-interactive, view-only pages, traditional print dimensions and layouts...

The browser, tablet, and mobile as a medium can out-magazine traditional print, I don't get why everyone is still satisfied with just cloning all of the properties of print magazines into the digital world.

</comment><comment><USER4> Even the CSS is nicely organized: <http://editsquarterly.com/lib/css/edits.iancoyle.css?0.0.0.9>

<comment><USER5> And the content is still fully accessible if you disable JavaScript and CSS.

<comment><USER6> Doesn't work for me without JS, it only shows the first page then.

<comment><USER5> You have to disable the CSS as well. The CSS stylesheet will hide everything except the first page, letting the JS code change visibility when the user presses keys.

If you see the HTML code, all the pages are there, delimited by <article> elements.

</comment></comment></comment></comment><comment><USER7> Very well done, as a photographer I think the concept is just great. Very inspirational for a web site design.

</comment><comment><USER8> Even though the effect can be used terribly, I love these scrolling/animating websites. This one is by far the nicest one I've seen too.

</comment><comment><USER9> Really beautiful. Unfortunately, the scrolling effects don't work on iPhone/iPad, which is too bad, as this would make a really nice format for a tablet-based interactive magazine. I wonder what it would take to get this running in Mobile Safari?

</comment><comment><USER10> Wow, that is beautiful. Best optical illusion of curved paper I've seen yet too, on the motorcycle photos a few pages in.

Kudos.

</comment><comment><USER11> Finally! The world needs more creative explorations of the HTML medium.

</comment><comment><USER12> eclectic format reminds me of original Whole Earth Catalog - <USER2> interspersed with cool stuff. fun to read - kind of like an exploration with new things around each corner.

</comment><comment><USER13> Awesome, even the scrollbar works as normal.

</comment><comment><USER14> Excellent. Inspiring. awesome.</comment>


Ask HN: Would YC be accepting similar companies in subsequent batches? - <AUTHOR> Hey all, We've just submitted our YC application for Winter 2019. However, we know that a similar company is already in 2018 batch. Just curious if YC be accepting such kind of companies or avoid them in the name of "conflict of interest"! <comment><USER2> I really don't think they reject based on "conflict of interest". I don't remember the name of the companies but I've seen similar companies in different batches but they've been a few years apart.

<comment><AUTHOR> hoping for the best!

</comment></comment><comment><USER3> Somewhere in those yc blog articles I read they do accept companies with similar ideas. I can't give reference right now, will appreciate if any one post a link to it.

<comment><AUTHOR> Great!</comment></comment>


"Scientific Method for Startups", and AMA with Michael Seibel - <AUTHOR> http://blog.ycombinator.com/the-scientific-method-for-startups/ <comment><USER2> I think there's clear danger of having a local maximum problem here. This is because the role of hypothesis in the process seems either misunderstood or misplaced.

The Tim Robinson example in the article recounting the removing of links on the checkout flow illustrates this. He observed something interesting in the data (people clicking on links), but he then skipped straight to a test which removed links and found conversion went up. It's implied that people were being distracted from the main task by the links.

But it might equally be that they wanted to click the links to find some missing information about the product. Or even some other reason. Without any qualitative analysis to establish a reason _why_ people were clicking on them, you don't know if he might have raised conversion even higher had he kept the links and addressed a need people had. This is particularly important in a checkout flow where the numbers of people are comparatively low and behavioural elasticity is also comparatively low.

So I'm reading between the lines here that because qualitative analysis is hard, people don't do it. Maybe that's fair enough, but that doesn't prevent you from kicking the tyres on hypotheses. Quant analysis and A/B testing will only tell you _what_ happened, not why did.

</comment><comment><USER3> I always love the debate on whether great products are imagined or are discovered through experimentation (certainly a bit of both). This post details the advice I usually give to startups on this topic and I'm happy to answer questions and join the discussion.

<comment><USER4> In the creativity bucket, there's also a fair amount of inspiration from:

1\. Studying other products and reasoning about them.

2\. Conceptually dissecting multiple existing products and looking at different combinations of some subset of their components.

Any thoughts?

PS: Loved your essay

<comment><USER3> Yes, one of our YC partner Dalton Caldwell hammered this idea in my mind. He told me that when he sees a founder trying to attack a product that other have either failed or succeeded at - he looks for what they've learned from those folks. If the founder dismisses previous attempts to solve this problem or similar ones - that is a very bad sign.

<comment><USER4> Really enjoyed your piece on product dev cycle fundamentals: [http://www.michaelseibel.com/blog/product-development- cycle-...](http://www.michaelseibel.com/blog/product-development-cycle- fundamentals)

Just curious growth wise, did Socialcam have a lot of word of mouth, or was some growth hacking involved as well. 16 million downloads in 3 months is incredible.

</comment></comment></comment></comment><comment><USER5> This was a better article than I expected. Finding ways to measure your assumptions is great, because if you can measure the behavior, you can measure the impact of changes.

Generally, I'm not a fan of "scientific method" as a phrase. It's too often used by people dismissing intuition in a very non-scientific way.

<comment><USER3> Thanks - I agree that balance is really important. Also, in many cases - especially where the founder is a user - intuition can be a key early driver of success.

<comment><USER5> Absolutely agree. I'm a "scratching my own itch" founder, and building a product based on years of doing the job of my target users. "Scientific method" isn't terribly useful for me as I build the initial product.

On the other hand, I don't necessarily know what this technology is going to mean to end users. They're going to find problems to solve that I didn't even imagine. As we're closing in on a beta, I'm doing demo/interviews as often as I can (a couple of times a week at this point), and seeing where their minds run. As William Gibson said, the street finds its own uses for things.

Once we get the product in the hands of real customers, it'll be far easier to start taking measurements and figuring out what to work on from there. But for now, intuition is the only tool I have.

<comment><USER3> This is one of the reasons why YC pushes people to launch MVPs so quickly - the speed of learning is much faster when the product is in customer's hands.

</comment></comment></comment></comment><comment><USER6> I actually always translated the lean startup model as the scientific method for startups in my head and while explaining to others.

My question: how do you apply that when you have tens of visitors/users? Not nearly enough to have a reliable ab test.

Edit: so far he answered only one question. Not much of a AMA, right? Maybe remove it from the title.

<comment><USER7> It's not as scientific, but you can prepare a/b tests for paper prototypes and ask your users to go through them as they would go through the site.

Quantitative methods aren't reliable with such a small dataset so you will have to rely on assumptions and guesses. Unfortunately this makes your observations prone to bias from your hypothesis, so it's especially important to be mindful of this and keep them separate.

Edit: Didn't realize this was an AMA but hopefully my answer contributes to the discussion.

<comment><USER6> Sure, it does! I just added it to register that is weird to publish as an AMA and not answer many questions.

I think your approach is right. One thing that helps me is to use hypothesis from users/visitors/customer as much as possible. Talk to customers and try to distill what are their hypothesis about a specific problem. Talking to customer goes a long way.

On the topic, I think that famous quote atributed to Ford "If I asked my customer what they wanted, I would be trying to create faster horses". I think is BS (and probably bogus). That ad absurdum scenario would only happens if he asked the wrong questions and/or followed the most superficial answers.

<comment><USER3> Its funny - I think the Ford quote is right. I always tell folks to not ask a customer what they want but ask them what their problem is. Its the customer task to describe and demonstrate their problem - its the founder's task to think up and test solutions for that problem.

<comment><USER6> Thanks for answering below!

About the quote, it kinds of depends on what do you mean by "want", but I understand and agree of your approach (while still disagreeing with the quote if that is possible).

BTW the quote is probably bogus, as the first Ford cars were slower than horses. 45km/h vs 88km/h (world record)

[https://en.wikipedia.org/wiki/Ford_Model_A_(1903%E2%80%9304)](https://en.wikipedia.org/wiki/Ford_Model_A_\(1903%E2%80%9304\)) [https://en.wikipedia.org/wiki/Horse_gait](https://en.wikipedia.org/wiki/Horse_gait)

<comment><USER8> According to Patrick Vlaskovits and others, there's no evidence that Henry Ford actually made the quote. So, I would agree that it's probably bogus.

[https://hbr.org/2011/08/henry-ford-never-said-the- fast](https://hbr.org/2011/08/henry-ford-never-said-the-fast)

[https://www.quora.com/Did-Henry-Ford-actually- say-%E2%80%9CI...](https://www.quora.com/Did-Henry-Ford-actually- say-%E2%80%9CIf-I%E2%80%99d-asked-my-customers-what-they-wanted- they%E2%80%99d-have-said-a-faster-horse-%E2%80%9D)

</comment></comment></comment></comment></comment></comment><comment><USER9> Hi Michael! What problem do you think a game company is solving? What would be reasonable key advantages at a company level? I.e.: What do you know/have that Zynga (or even smaller studios) don't? lol

<comment><USER3> I think gaming companies are solving the problem of consumer entertainment and I think in that world a/b testing is super important.

<comment><USER9> Yeah! I agree! I asked that because I think it's hard to distinguish yourself by solving this general consumer entertainment problem. Seems that all game companies do that, even when thinking about small studios, it is hard to find differentiating factors that does not rely on the game itself.

I also agree that A/B testing is super important! We are following exactly what you have described here [http://www.michaelseibel.com/blog/product- development-cycle-...](http://www.michaelseibel.com/blog/product-development- cycle-fundamentals) but for a game, and the results are pretty interesting! Specially because we don't need a GDD (a document describing the game), all members of the team are involved in the creation process (and they feel more motivated to work - and believe me, this is big problem in indie studios) and is easier to propose changes and improvements to the game, since them just need to bring us closer to our goal with the game (for example: 20k ad visualizations / day). I'm anxious to get into this A/B testing phase! We haven't launched yet.

Thank you so much for sharing the knowledge! These posts were really valuable and helpful for me! And I think they are complementary!

</comment></comment></comment><comment><USER10> I wish the article had "screenshots" to show what was being changed, and why. It would help people to visualize and apply the steps better to their startups. Excellent read!

</comment><comment><USER3> Hey folks - btw - I'll be in and out of the thread all day and I'll try to answer every question - so keep them coming and check back in :)

</comment><comment><USER11> Thanks for doing this Michael! Any advice on getting people to pay for something before it's built? I think a lot of people will say they will pay a certain price for something but when it comes to signing up once they can enter their credit card, that doesn't end up being the case. Are LOI's the main way, and does that work for smaller projects < $100/mo?

</comment><comment><USER12> Thanks for taking the time to do this.

My Q: When one a/b tests there is generally a winner, but a better option might be possible if the team spends a bit more time brainstorming and hypothesizing. Do you have any thoughts on when to go with the results of the a/b test vs when it's worth going back to the drawing board to try to brainstorm a better idea?

</comment><comment><USER13> Thanks Mike! Great post.

What people often don't realize is the amount of inspiration you get by discovering your hypothesis was wrong.

</comment><comment><USER14> Michael,

How much racism have you faced in Silicon Valley? Do you ever face racism from companies going through the YC program?

<comment><USER3> In operating my startup or working at YC I haven't faced any overt racism (in the real world just living life that is a different story). Have I faced any covert racism? - very hard for me to tell because so much of startups is facing failure and there are often many probable causes of that failure. Not sure what you mean by the second question.

</comment></comment><comment><USER15> Hey Michael, thanks for the post. It seems like most big companies started out of projects people were making for themselves in the early days.

Why do some projects evolve into behemoths, and when do you advise people building projects to start talking to users?

<comment><USER3> I always tell folks to start talking to users from day 1 :)

</comment></comment><comment><USER16> A shorter and cheaper version of this would be to create an emotional connection between your users and your product. You need to become a user and figure out if you feel accomplished after using your own product.

</comment><comment><USER17> What are some best practices for evaluating ideas before building anything. You mentioned talking to users which is good advice but assumes that an industry has been identified already.

<comment><USER3> The first thing I ask a founder is how often does the target customer have the problem they are looking to solve and how much money are they willing to spend to solve it. The more often the customer has your problem and the more money they are willing to spend - the easier it will be (all other things being held equal) to get customers and iterate. Sequoia calls these problems hair on fire problems. The second thing I ask is who else is trying to solve the same problem and what do you know that they don't.

<comment><USER18> This is great advice and advice I wish I taken onboard earlier. As a technical founder Ive found myself making a large set of assumptions which are usually proved to be incorrect when going to the market.

Going into the market and talking to your customers early on so you can answer those two questions will really help tell you if you have a viable idea.

</comment></comment></comment><comment><USER19> Hi Michael, how does one conduct customer research? What questions do you ask? How do you know you're doing it right? Are there any good books on customer research?

<comment><USER3> Different answer depending on whether you have a product built or not. Also different if you have a consumer product. My best personal experience with customer research is for live consumer products. In that case we would recruit potential customers off of craigslist (offering $50 for an hour of their time). We would bring them into the office and sit them at the table. The entire team (small) would be in the room. We would give them a scenario and ask them to complete a task in our app in front of us. For example, you saw a really good video on Facebook made with this app and now you want to download that same app and make a video for yourself. Then we would ask them to complete that task asking us any questions they had and sharing their inner monolog out loud. Some questions we would answer but most we would ask them to figure it out. It was very important that everyone involved with building and designing the product was in the room experiencing the user test live. We would take notes on issues the customer faced and conduct about 5 interviews in an afternoon. Anything that came up 4-5 times we would attempt to fix. We would rince and repeat monthly.

<comment><USER20> >>> It was very important that everyone involved with building and designing the product was in the room experiencing the user test live.

Was there ever a point when you had too many cooks in the kitchen?

</comment></comment></comment><comment><USER21> Hey Michael, apart from custom internal analytics tools and solutions similar to GA which other tools would you suggest using?

<comment><USER3> I always loved Mixpanel - but its been a couple years since I've been active on the product side and there are now tons of great tools. In the end of the day - use the events based analytics product that your team will enjoy looking at everyday.

<comment><USER22> snowplowanalytics.com - What do you think of this one? It's open- source...pretty crazy.

</comment></comment></comment><comment><USER23> We are new to the startup scenerio.We have a great customer following.But we r looking for our seed fund /guidance to start it up;Its a platform to connect ,facilitate and empower moms.What would be ur suggestion for us to march ahead ,its a real world problem we r trying to solve .We dnt have an app and an mvp to show as our business model is slightly different.what would be ur suggestion to march ahead?We want to launch asap.

</comment><comment><USER24> Is there a legal risk of using freelancers when building product version 1.0? What is the correct way?

<comment><USER3> Yes - recruit a technical co-founder :)

<comment><USER24> We are a technical team. But still need extra body to speed things up :) What do you do in such cases?</comment></comment></comment>