My New Favorite Tool for Reviewing PDFs: Okular - <AUTHOR> https://harriskenny.com/2019/03/23/my-new-favorite-tool-for-reviewing-pdfs/ <comment><USER3> I just evaluated Evince, Okular, Foxit, and Acrobat for annotating PDFs.

My particular use case is to annotate emails, spreadsheet, etc., and merge them as exhibits into a legal brief.

After annotation, the other programs can export the original or it export the annotation layers but it could not give you a PDF with both the original and the annotations merged into one layer. This was a deal breaker.

With Okular you can print the PDF with the annotations as a new PDF to make sure your annotations are always visible. With the other programs the annotations are on separate layers which can get hidden on purpose or by mistake.

I found no other free program that could flatten the layers.

Okular deserves to be better known.

<comment><USER4> In theory, shouldn't every PDF viewer support printing... and both macOS and Windows 10 support printing to PDF... which flattens the layers?

Just tried it with macOS Preview and totally flattens it, the annotations pane lists nothing, I can't select/move annotations... they're permanent.

However, also just tried with Acrobat Reader on macOS, and infuriatingly after selecting the system's "Print to PDF" Acrobat pops up an error saying it doesn't support print to PDF. _WTF_. Why would they intentionally go _out of their way_ to _disable_ that?

<comment><USER5> Because they sell PDF creation tools: [https://acrobat.adobe.com/us/en/acrobat.html?promoid=C12Y324...](https://acrobat.adobe.com/us/en/acrobat.html?promoid=C12Y324S)

</comment></comment></comment><comment><USER6> I really enjoy Okular, it's fast, looks good and has smooth-scrolling (looking at you Foxit). However, I have been forced to use Foxit when dealing with annotations, because a lot of times Okular simply cannot display them if they were created in other programs.

</comment><comment><USER7> I discovered Okular late in my dissertation-writing. I was pretty thrilled to discover that it could display annotations made with Acrobat. This was my advisor's preferred way of interacting, since I was somehow not able to interest him in learning git or LaTeX. At the time it was far better than evince. I've also found that it does a better job with big complicated pdfs produced by graphviz.

</comment><comment><USER8> Okular is actually the reason I created Polar:

[https://getpolarized.io/](https://getpolarized.io/)

Well, one of the reasons.

First, if you like Okular, you're stuck if you want to run on any other platform. It doesn't work on mobile, it doesn't work on the web, doesn't work on Linux, MacOS or Windows [1]

Additionally, there were pretty severe bugs when I used it and there were 1-2 long outstanding bugs regarding annotations that weren't fixed for nearly a decade.

The main issue with PDF annotations also applies. If you use PDF annotations it means mutating the PDF which has all sorts of problems.

I've had issues where you're working on Okular or Preview or Acrobat and then try to use another app and your annotations simply don't work or the PDF is corrupted in some weird way.

Having an immutable PDF solves that problem which is the avenue I went with in Polar.

Polar supports Web + Linux + Windows + MacOS. It also supports annotation without mutating the PDF and it's VERY hackable since it's just based on Typescript - which is one of the features I wanted.

We're very close from having mobile too and just need to clean up some CSS.

Anyway.. would LOVE your feedback if you play with Polar and find it doesn't perfectly nail your use case.

I'm actively developing it now and I'm pushing 1-2 releases per week.

1\. My understanding is that while it DOES work on these platforms - <USER2> doesn't work WELL on them. Last time I checked there was no download for Windows or MacOS and you had to install the full KDE for these platforms.

<comment><USER9> You found that you had to download too much bloat to use Okular so you made an Electron app? Im pretty sure you dont have to download all of KDE to use one of its apps, just the package manager and the libraries Okular uses.

<comment><USER10> "apt install okular" requires an extra 195 packages and 194MB of space on a Ubuntu machine I have handy.

It's not all of KDE, but...

<comment><USER11> Somehow I don't find 194 MB that bad if the proposed alternative suggests a 197 MB download as "probably easiest to install", but why let details like that let an opportunity to promote your project over someone elses go to waste... If someone with a Debian box handy wants to try how much in dependencies the .deb pulls in...?

</comment></comment></comment></comment><comment><USER12> > _You have so many rounds of back and forth on collateral that it's clear you > don't have strategic alignment and it's spilling over into stifling > execution._

What does this sentence even mean? Could someone ELI5 it to me?

<comment><USER13> you're changing the content so much that its clear the group doesn't have agreement on what should be created, so much that it's now spilling over to getting stuff out the door

</comment></comment><comment><USER14> For PDF annotating/collaboration, Xodo for the web deserves to be better known: [https://www.xodo.com/app/#/](https://www.xodo.com/app/#/)

It displays/creates standard PDF annotations. You can collaborate with people online if you want, or annotate files on your computer without uploading them to a server (it uses emscripten/wasm/pnacl client side).

</comment><comment><USER15> I used to use Okular before.

Even now when ever I try to use it, it is slow, and e eating up a lot of ram, scrolling doesn't look smooth enough. Whenever loading a new page, load time is clearly visible it used to work fine back in 2017.

My main desktop environment is KDE Plasma but I use evince for now while reading.

</comment><comment><USER16> Okular is the only PDF reader that could handle PDF on my previous slow computer. Windows was a breeze but I always had problems with PDF on linux before I could settle for okular.

It bugs me that it's easier to select text with the underlining tool than with the select tool.

<comment><USER17> PDFs are kinda weird because there are somehow always PDFs that slow one viewer down but usually another viewer is fine. E.g. I have PDFs where Okular takes a couple seconds to render the first page, while LLPP renders it much faster. And vice versa -- which is the confusing part.

</comment></comment><comment><USER18> I work in publishing and we use PDFs extensively for proofing manuscripts. If you ever need to compare across PDFs, I created a small tool for it:

[https://www.parepdf.com/](https://www.parepdf.com/)

<comment><USER19> I really like diffpdf: [http://www.qtrac.eu/diffpdf.html](http://www.qtrac.eu/diffpdf.html)

</comment></comment><comment><USER20> How does okular compare to zathura (which can use mupdf or poppler as its pdf backend)?

<comment><USER21> Okular is to Zathura as Acrobat Reader is to Vim. :-)

</comment></comment><comment><USER22> My favorite tool for extracting data from PDFs: Tabula [https://github.com/tabulapdf/tabula](https://github.com/tabulapdf/tabula)

</comment><comment><USER23> One tool that doesn't seem to get the attention it deserves is Marginnote. I spent a bit more money than I should have on it, but in terms of reading, annotating, and making notes from PDF's I don't think there's anything else even close. I particularly love the ability to create a mindmap, flashcards for spaced repetition, and native export to evernote. [https://www.marginnote.com/](https://www.marginnote.com/)

</comment><comment><USER24> For those wanting to try okular on macos, it seems easier to setup via homebrew ( [https://brew.sh](https://brew.sh) ). The steps are:

$ brew tap kde-mac/kde

$ brew install cpanminus (needed for KDE-mac/kde/kf5-kdoctools)

$ cpanm URI

$ brew install okular

Then go make coffee while things compile.

source: [https://github.com/KDE-mac/homebrew-kde](https://github.com/KDE- mac/homebrew-kde)

</comment><comment><USER25> When I'm on windows I'm always puzzled about how Adobe Reader is slow and has tons of features I will never going to use. Just let me get to duplex printing dialog, adobe!!!

I mostly use Okular for navigation and printing, but it also has a great feature of letting you select area of the document and either copy selected text or image into a buffer. This doesn't sound like a lot, but it makes working with pdf documents really comfortable.

</comment><comment><USER26> I use okular on gnome when I absolutely need to annotate the PDF, I could not find other alternatives. okular is heavy and slow but it gets the job done when it's needed. I hope calibre can support annotations one day for the file formats it supports.

99% of the time I use evince to read PDFs though.

</comment><comment><USER27> Okular is also wonderful for epubs if you documents ever move to that format.

<comment><USER21> Okular is great for epubs in that it can show them as a single document whereas most programs break them in to chapters that can't be searched across. However, it can also be terribly slow on some epub files even on a fast PC [0]. It also has problems rendering some files that other readers like epubreader have no problem with.

[0] [https://bugs.kde.org/show_bug.cgi?id=359932](https://bugs.kde.org/show_bug.cgi?id=359932)

</comment></comment><comment><USER28> Yes yes yes and I am very thankful to the KDE on Windows builds programs.

</comment><comment><USER29> If only there was tool which would render my annotations in TeX, it'd make reading papers so simpler. Meanwhile, Okular

</comment><comment><USER30> Okular is awesome for reading .djvu file as well. Love it.

</comment><comment><USER31> On Emacs use pdftools. Qed.

<comment><USER32> I love emacs but pdftools is kind of meh. You need it for pdf tools and a different addon to read epubs that works differently.

Then it uses a lot of memory, scrolls a little slow, and doesn't remember your place in a document.

Zathura remembers your place and reads epubs and pdfs while using less ram. Conversion between epubs and pdf seems to preserve the text but often results in ugly docs that are less pleasant to read so a good solution needs to support both.

I would love someone to improve document reading to the point where I COULD use emacs for document reading.

</comment></comment><comment><USER33> This is a terribly written article. Needs some serious editing.

"You have so many rounds of back and forth on collateral that it's clear you don't have strategic alignment and it's spilling over into stifling execution. Hate to say it, but the tools aren't the problem here."

What does this even mean???</comment>


SF Man Wants to Give a Slice of Pizza to Each of the City's 8k Homeless - <AUTHOR> https://sfist.com/2020/02/02/san-francisco-man-wants-to-give-a-slice-of-pizza-to-each-of-the-citys-8-000-homeless/ <comment><USER2> Great, make them fat _and_ out of work.</comment>


Building CSS3 Transforms - shay-howe http://learn.shayhowe.com/advanced-html-css/css-transforms

<comment><AUTHOR> I haven't checked this chapter out yet, but this whole project is really awesome, Shay. There's not many materials out there that aim to help out intermediate devs. It's obviously a market problem...why make a book where the audience is 15% of the "beginner" one, but I'm glad you're doing this. Definitely putting this in my short list of educational materials for front end devs.

<comment> shay-howe Thank you! When you get around the checking it out please let me know what you think, I'd love any feedback.

</comment></comment><comment><USER2> Excellent resource!

Also, the Backface Visibility example doesn't seem to work properly, both examples in that section look the same.

Ubuntu + Chrome 24.0.1312.57

<comment> shay-howe Thanks!

I'll check into the backface visibility bugs. :)

</comment></comment><comment><USER3> Yes - thanks Shay, these lessons are really awesome!

</comment><comment><USER4> Very well done. I'll admit to skimming through most of the heavier text to check the code examples, but it's all nice and thorough. Also, congrats on not making some weird mobile version of the site. It was super easy to read from my phone and all the examples worked perfectly (iOS 6).</comment>


The 25 Most Dangerous Programming Errors - <AUTHOR> http://www.theregister.co.uk/2010/02/17/top_25_programming_errors/ <comment><USER2> here is the direct link to the list - <http://cwe.mitre.org/top25/#Listing>

</comment><comment><USER3> The title makes me think that if you make these errors, lives will be at stake. Sadly, the title is more interesting than the article.</comment>


Ask HN: What's the best way to approach blogs to write about your startup? - <AUTHOR>

As a developer, "selling" people on my projects is something I often struggle with.<p>I'm sure a lot of others on here would also find advice on this topic to be helpful. <comment><USER2> I usually sneak up from behind and hit them over the head...

Think about what YOU would want to read in a blog. Blatant, shameless product pitches rarely have much value. Talking about how or why you added a particular feature is usually more interesting. Realistic use-case examples, either from your own dog-food eating (I hate that term), or even better from real customers gives people something they can relate to.

Basically, talk about anything but "selling", instead aim for something a little more conversational and along the lines of cool story you might tell a friend or colleague.

</comment><comment><USER3> Write a guest post about a topic of interest to that blog's readership that doesn't directly pitch you product. Then insert a shameless plug (and label it as such) at the end of the post.

</comment><comment><USER4> Zee of The Next Web is awesome approachable. @zee on twitter. Reach out to him, TNW is a big name (I think it goes TC -> RWW -> VB -> TNW)

</comment><comment><USER5> Involve the blogs with the product during its feature-spec stage. Not only will you get better press from them once you need it (people like to write about their influence...), but you should also get some good feedback from the blog authors and users.

I'd contact blog owners during dev, tell them, "hey i've found this pain, and I'm building MyProduct to solve X, Y, Z. Do you think these are the biggest problems, as you see it?"

This way you can get press, you can network, you can get good feedback from potential customers... And the blog owner gets to feel special, and look special, to their readers. Win win.</comment>


Announcing the First Alpha Release of TiDB - <AUTHOR> http://www.pingcap.com/posts/alpha-release.html <comment><AUTHOR> After months of hard work, we are excited to announce the alpha release of TiDB. With this milestone, TiDB becomes an ACID compliant distributed RDBMS.

TL;DR:

1\. Use HBase with a cross-row transaction layer as underlying KV storage.

2\. MySQL protocol server is ready.

3\. Asynchronous schema update.</comment>


An Introduction to Web Sockets - <AUTHOR> http://bigbangtechnology.com/post/an_introduction_to_web_sockets

<comment><USER2> For non-games usually Server-Sent Events (<http://dev.w3.org/html5/eventsource/>) may be simpler to use:

• it's pure HTTP, message format is dead simple ("data: payload\n\n")

• browser handles network failures and reconnections automatically.

• browsers can share same stream URL between windows

His use-cases with to-do app and analytics were good fits for SSE.

<comment><USER3> Once Firefox supports SSE I agree that it would be easier to implement in many use cases. Although it doesn't have the same sort of fallback mechanisms available to it that WebSockets have (ActionScript sockets).

Here is some additional information about it that I found at stackoverflow: [http://stackoverflow.com/questions/5195452/websockets-vs- ser...](http://stackoverflow.com/questions/5195452/websockets-vs-server-sent- events-eventsource)

<comment><USER2> You can fall back to XHR with long polling — the stream is trivial to parse.

</comment></comment></comment><comment><USER4> slides: <http://www.slideshare.net/CameronWestland/websockets-8031217>

</comment><comment><USER5> Is anyone else kind of baffled by the comment about the political risks of web sockets? Why do people waste time with answers like that?

<comment><USER3> Hi Neoveller,

I gave the talk and I agree the political risks comment was misplaced. I didn't think it was worth it to shut the person down though as it's my personal philosophy never to embarrass anyone if possible.

I hope you found the others parts of the talk more useful.

</comment></comment><comment><USER6> I can't watch the slides, but I wonder if they spend any time discussing how WebSockets don't offer any client security beyond raw TCP sockets.

<comment><USER7> Why would WebSockets offer any client security beyond raw TCP sockets?

<comment><USER6> It was one of the original promises of WS and _the_ reason that browsers offer it to client-side JS.

<comment><USER3> There are some people building on top of WebSockets with an eye towards security. Check out <http://pusher.com/> for example, they designed system to account for 100% untrusted client.</comment></comment></comment></comment>


Google's Pound of Flesh - <AUTHOR> http://www.cringely.com/2010/09/googles-pound-of-flesh/ <comment><USER2> Cringely suggests Google could offer payday loans at 20% interest, and further would make that same rate as a profit. That seems far-fetched; these loans are costly to offer and collect upon, with high default rates.

Various sources peg the profit margins of existing payday lenders, with their "400%" effective interest rates, at only 3-10% -- less than Google's margins in their existing lines of business, I suspect.

<comment><USER3> Except that Google would probably do "algorithmic" collections. They already roam the streets with a fleet of cars equipped with cameras and face recognition software. Equipping them with robotic drive by shooting attachments should be simple enough.

</comment></comment><comment><USER4> _Why would Google do that? Payday loans are despised by consumer advocacy groups, governments, and my Mom, alike. Nobody likes payday loans, except of course the companies that make billions providing and servicing them._

Those companies and the people that actually make use of their services, of course. This author might not have noticed, but generally markets for things no one wants don't exist.

It's tempting to view loans that are typically paid back quickly in terms of an APR, but it's extremely deceptive. The reason the annual rate is so high is that, surprise, people who can't plan their budget out more than a few days in advance are also not generally the best at paying loans back on time (or at all.) And viewed in raw amounts, paying an extra few dollars a week from now for milk today isn't the worst deal in the world, if it keeps the kids fed.

<comment><USER5> Also, "400% APR" is misleading because it implies somebody might potentially take out the loan and pay it back five-fold a year later, when in reality these loans are almost always paid back either quickly or not at all.

By extension, any time you pay 50% more on the price of something in order to have it one day sooner (cough medicine at a convenience store, food at an amusement park, etc.) you're getting it at an APR in excess of 10 to the 60th power.

<comment><USER6> I don't agree the APR is misleading. An APR is a normalised, comparable rate. That's exactly why you should look at the APR. Just because the loan is for a short time is irrelevant. It's like staying in a hostel and being charged a 5* rate just because you'll only be staying there for a short time.

Edit: the company you are borrowing from will be borrowing the money they lend to you at probably 10 - 15% APR (in the UK). That's quite a spread.

<comment><USER7> There are even worse APR's. Suppose you place a bet at 2:1 odds, 7 minutes before a 3 minute horse race. The racetrack is essentially borrowing money from you at at an APR of 3.6 million %!

The right way to look at loans is to break them down into APR and default risk multiplier. The total amount which needs to be paid back is DRM x exp(APR x duration). Payday loans, much like the racetrack, have reasonable APR's but high DRM's.

Dividing ln(DRM) by small numbers is as ridiculous as dividing a $1 investment by 1/1 billion % of a company and claiming that 37 signals has a $100 billion valuation. Yeah, they are using a standard formula, but in a ridiculous way. Models are pointless when you use them beyond their range of validity.

[http://37signals.com/svn/posts/1941-press- release-37signals-...](http://37signals.com/svn/posts/1941-press- release-37signals-valuation-tops-100-billion-after-bold-vc-investment)

</comment></comment></comment></comment><comment><USER8> This author is confused about the meaning of "don't be evil". He seems to think it means to conform to a particular morality (i.e., the one to which the author subscribes) in all aspects of business. He probably thinks this is supported by the fact that Google embraces various left-leaning causes (investing in geothermal energy, etc.) when it's not clear that this could be justified in a business sense by the good publicity it generates.

But I think the original meaning of "don't be evil" is much more modest. It means: don't betray the trust of the user. For example, don't sell SEO favors, don't sell the user's info to advertisers, don't trick the user into downloading anything, don't abuse a monopoly position, etc. (This isn't to say that Google hasn't bent/broken these rules.) The fact that Google _also_ supports various left-leaning causes is just a reflection of the fact that an unusually small number of left-leaning people influence the company's decisions.

I think the wikipedia article supports this interpretation.

I really don't think "don't be evil" has anything to do with a particular ideology which might disapprove of pay-day loans or whatever.

<comment><USER9> There aren't many ideologies that accept pay-day loans as anything other than evil frankly, so it's not one particular ideology that disapproves of pay-day loans, it's all of them. See <http://en.wikipedia.org/wiki/Usury> and note that a pay-day loan is exactly the kind of loan that is usurious — anyone who takes one hasn't got the money they need to make it to the end of the month, i.e. their outgoings are more than their incomings. They will never be able to pay such a debt off.

This is not a business I would have thought Google wants to get into, not because of the evil nature of it, but simply because making money from it legally is logically impossible.

<comment><USER8> I don't think we'll settle an argument here, but I'll say this: The large majority of payday loans are repaid. So long as (1) the borrowers are well informed and (2) there is healthy competition between the loaners, payday loans are good for society. They allow people who otherwise wouldn't get credit to float over rough patches.

Let me ask you this. If you are poor and living month-to-month, and your uninsured car--which you need to get to work to continue earning money--is wrecked, what do you do? Not everyone has families to help them in this situation.

</comment></comment></comment><comment><USER10> Based on the quote in the article, I'm not sure why Cringely would leap to the conclusion that Google is planning on _entering_ the loan business. It would make much more sense for them to set up some kind of competitive marketplace to connect lenders and borrowers, which would meet their stated objectives of "[righting] inefficiencies, [providing] better transparency, and [allying] with consumer protection agencies."

<comment><USER11> Ah, sense! This is similar to Google's move into credit card and mortgage comparison shopping (read: lead generation).

Arguably Google is a beacon of transparency in the latter industry, and I say that as someone who a) has spent time researching the business and b) don't hold with the majority geek/HN view of Google as being the Universe's Love Child.

</comment></comment><comment><USER12> There's nothing wrong with being a pay day loan company. Their interest rates (500% or more) are through the roof for making high risk loans that no other bank will touch.

high risk = high reward

<comment><USER6> I'm not sure how much risk these outfits really run. They're not unsecured loans. You don't repay it, they'll call in the debt collectors and take away your TV and anything else they can get their hands on.

<comment><USER12> If payday loans are really as secure as you make them sound, the interest rates wouldn't be so high on the loans. It's pure economics.

</comment></comment></comment><comment><USER13> Google 'getting into the payday loan business' is likely just Google continuing to test its Comparison Ads feature:

[http://adwords.blogspot.com/2009/10/introducing-adwords- comp...](http://adwords.blogspot.com/2009/10/introducing-adwords-comparison- ads.html)

Not surprising that they're there - the industry throws off a boatload of money, but only a portion currently goes to Google, since there's an established lead gen industry acting as intermediaries between Google and the actual payday loan providers.

Same situation as with mortgage leads - and in fact Google's used the same 'bringing transparency to a shady and inefficient industry' rhetoric when they've talked about mortgage lead generation.

Like with mortgage leads, this initiative is probably doomed, since the big advertisers in the space have absolutely no desire to efficiently compete for consumers via directly-comparable financial terms. When an industry's confusing and opaque, it's usually for a reason.

</comment><comment><USER14> An aside to his point about Google.

400%? In the UK we've got companies charging over 2500% a year for payday loans.

While I accept these are high risk, there surely has to be a limit?

<comment><USER15> Amazing. And is that legal? In my country there is limit on how high interest rates can get. Maximum credit interest rate is ... 20%. Of course loan sharks are circumventing this rule in every way they can by requiring from you to buy additional services and insurances.

<comment><USER14> That sort of law was being proposed by the previous government but it doesn't seem to be on the new government's agenda.

<comment><USER16> The alternative to expensive credit isn't cheap credit. It's no credit at all.

<comment><USER14> Personally I'd see that as a good thing for people who are likely enough to default that expensive credit is all they can get.

<comment><USER9> I'd rather, for their own sake and for the good of society that they couldn't get credit at all. It's too easy and tempting and it doesn't help for more than a few days.

<comment><USER16> So how much interest is "too much"?

Also I think you may misunderstand who these people are. Take wonga.com for example, they're on ads on TV with their iPhone app. How many truly poor people have iPhones?? Their customers are people who need (want) cash for the weekend before payday to go drinking/clubbing/partying. It's a luxury (of sorts) and people always pay a premium for luxury.

<comment><USER9> I don't know, but most jurisdictions have a view on that and most ethicists would to. I can tell you it's less than 400%.

I think "these people" are not a homogeneous group, so defining them as truly poor is tricky. I would argue though that it is still a social negative to lend to anyone who has an iPhone but doesn't have the money to go on a night out before pay-day. I can't think of a better example of socially-useless lending. I think that is bad for the state to allow that, but I can see not everyone would agree. There are however definitely much worse off people using such services, and they should be prevented from doing so [1].

The other issue thing I want to mention is that the state schooling system is woefully inadequate in the area of personal finance. Maybe it's the parent's job, but budgeting and managing your finances is too important a skill to be left to them, and schools waste plenty of time teaching "personal, social and health education" — it'd be easy to shove money management in there.

[1] With the possible proviso of a proper social emergency loan or payment system for people living below the poverty line with unexpected non- discretionary spending [2], e.g. car breakdown which prevents them getting to work.

[2] Don't even get me started on medical bills here. Pay-day loans are a third-level kludge on a totally broken system there.

<comment><USER16> The headline interest rate is misleading remember. Let's say it costs s fixed amount to do the paperwork to set up _any_ loan. Obviously that is going to be a greater or lesser part of the overall interest charge if the loan is for 1 week or 100 weeks.

How would you ensure your "social emergency loans" were ever repaid?

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER17> I'm not sure what to make of this. So far Google has largely succeeded at not being evil - as much as any large corporation can, really. Google's stated reason and the posters logic holds up to the test of possibility. And it would seem to fit into Google's general way of doing things and its ADHD tendencies. I guess we'll all have to just watch and see what happens.

<comment><USER15> What's evil in payday loans? High interest rates. If Google was offering payday loans at 5% annual interest rate how would that be evil?

No profit for Google from such loan? How doing unprofitable things was any trouble for Google?

<comment><USER17> Right, I know all that. What we're waiting to see is whether or not that's really what Google is up to. I strongly suspect that the poster has it right in thinking that this is what Google is doing. Like I've said, they've done a pretty awesome job of not being evil so far.

</comment></comment></comment><comment><USER18> On his point about Google placing the news for "payday loans" at the bottom of the screen instead of the top - I really do think that's algorithmic, rather than a concious decision by Google to hide bad press. In the UK, I'm seeing the news box appear at the bottom of the results for "car insurance".

</comment><comment><USER19> Payday Loans: New laws aimed at payday lenders will end up hurting the poor:

<http://news.ycombinator.com/item?id=1735537>

</comment><comment><USER20> Ugh, I can't stand Cringely. He relentlessly bashed Apple around the time I was starting to switch over from Windows and made some of the dumbest predictions and damnations about Apple at the time, all of which were totally off base. His reputation was ruined for me.</comment>


BetaCandy: Idea to Launch in Under 24 Hours - <AUTHOR> http://collaborable.com/blog/betacandy-open-signup-now

<comment><USER2> Really interesting idea.

One issue I was conscious of while reading the description: I'm not sure the intersection between the early adopter cohorts for different markets would be very large. There is a certain mindset involved, sure, but people need to also be passionate enough about the subject or pain point to bother with bleeding edge products.

If you try to just sign up as many people as possible who self-identify with the early adopter mindset, it may take a while before you have broad enough coverage of interests in that audience for it to be useful to startups outside the core "tech for techies" market.

<comment><USER3> It might take a while to get the right audience but it could be like the App Store for small/new developers who could never get any sizable audience at all to really explore a project in process.

</comment></comment><comment><USER4> Ha, awesome! Nice to see all sorts of ideas around this space pop up. Love that companies have to give the subscribers something special to be featured.

(We submitted AlphaList, which doesn't do promotions and asks the e-mail list subscribers to give the founder feedback, ten days ago: <http://news.ycombinator.com/item?id=2140672> )

If y'all need any help or have any questions, just let me know.

</comment><comment><USER5> Your incentive driven approach seems to overcomplicate what you're trying to solve. You're creating a commitment and operational overhead for a new service where it's not really needed.

If I'm an early adopter, it's because I already love trying out new stuff. No need to give me candy, just tell me where the van is.

<comment><AUTHOR> I understand your point, but an unsweetened offer quickly becomes another tech blog/feed, another e-mail you ignore because it's like every other beta intro.

I believe sweet offers give subscribers a reason to pay attention to the entrepreneurs product, beyond what you'd get at a typical tech blog.

Thanks for your feedback!

<comment><USER5> I think early adopters are smarter than that. They don't need to be lured in with the offer of free stuff. The very reason they're early adopters is because they grasp the potential for a new service and how it fits into their lifestyle. Not because of a superficial offer of freebies.

Companies that are confident about their quality products at an early stage don't need to bait beta testers with free stuff to lure them in.

In fact, I think you're going to skew the kind of user who would sign up based on getting free stuff in the wrong direction.

No doubt, you could get _more_ users if you offer free stuff, but at this early point, companies want the _right_ kind of users, not quantity.

</comment></comment></comment><comment><USER6> Umm... what does it do?

<comment><AUTHOR> Entrepreneurs sometimes have trouble getting a new product into the hands of its most important target: early adopters.

It's an e-mail list, open signup for now, but invite-only soon, of picky early adopters. People that are usually the type to play with beta products (good ones, great ones).

Entrepreneurs create a killer offer to attract these early adopters (BetaCandy subscribers) and the "best" will be sent to this list. Hand picked, no spam.

Think of it like a shortcut for the famous "email signup splash page". If we grow a quality list of true early adopters, keep the offers relevant and awesome, it should work out well for both startups and subscribers.

</comment></comment><comment><USER7> One weekness of this is that it won't work well (at least in the beginning) for startups whose products are focused more towards businesses.

<comment><AUTHOR> So far, most of the signups identify themselves as entrepreneurs. That means business products may fare well.

As things go, we'll come up with clever ways of segmenting and targeting the list, to maximize impact for entrepreneurs and relevance for subscribers.

<comment><USER8> I'd have liked the opportunity to self identify with multiple options as I'm sure others here would as well.

</comment></comment></comment><comment><USER8> Now I want this kind of list for iOS apps. Suggestions?

<comment><AUTHOR> Have a particular iOS app/maker in mind? I want to approach the best, and get the best offers for our subscribers.

</comment></comment><comment><AUTHOR> Currently at about 50 subscribers (double opt in).

<comment><AUTHOR> 150

</comment></comment><comment><USER9> I signed up. The confirmation mail hasn't arrived after nearly 20 minutes :S

<comment><AUTHOR> Ouch, it's a campaign monitor list, so delivery is up to their system (campaignmonitor.com). When it closes to invite only, we'll use our own system to manage invites and emails.

You can subscribe multiple times and it should re-send the confirmation.</comment></comment>


Silent subwoofer - <AUTHOR> http://www.kickstarter.com/projects/311239538/subpac-portable-tactile-audio-technology

<comment><USER2> How does this compare to <http://www.thebuttkicker.com/> ?</comment>


Human heart is a Turing machine - <AUTHOR> http://igoro.com/archive/human-heart-is-a-turing-machine-research-on-xbox-360-shows-wait-what/

<comment><USER2> I have two difficulties with the abstract (not having read the entire paper.) First is while I don't dispute the claim that the heart cells are capable of turing-machine activities (conveniently forgetting the infinite tape as noted by cjg), it isn't evident that the heart's activities are limited to what the turning machine can compute.

The second thing that i am wondering about is that the heart, like any physical oscillator, is a dynamic system, and as such, is chaotic. This seems to be an important question regarding the modeling. Chaos theory won't tell you that your heart won't stop, in fact, it won't give you any comfort that it will be immune to slight changes in its environment, say with increased salt content.

And the turing-complete claim about the game of life is clearly for grids that have no bounds. I suspect that there are not an infinite number of states that the heart and all its cells can encompass. Thus the heart is not a Turing machine.

So I am not seeing any added value of this Turing result that isn't already better described by Chaos theory.

</comment><comment><AUTHOR> Of course, it's nonsense because a heart isn't infinite...

<comment><USER3> PCs aren't infinite either, but that doesn't help compilers prove halting / non-halting during analysis. A few GB of memory, never mind internal and external storage, is more than enough state space to be equivalent for proof purposes.

<comment><USER4> Or at least big enough, to make our models apply.

The real world is also not made up of smooth stuff --- atoms pop up when you look to close. But engineers are using differential equations without too many problems.</comment></comment></comment>


Long discussion on using CAPTCHAs to get more followers on twitter. - <AUTHOR> http://groups.google.com/group/twitter-development-talk/browse_thread/thread/c4820fbb9bb296d7

<comment><AUTHOR> BTW, I've been using the term "CAPTCHA" incorrectly. It stands for "Completely Automated Public Turing test to tell Computers and Humans Apart."

What I describe here isn't automated. Users must submit a question to test comprehension of their tweet selection.

But like a CAPTCHA, we want to make sure this is not a computer (or mindless clicking by a human).</comment>


An example of a GA using Clojure - <AUTHOR> http://github.com/yogthos/Clojure-Genetic-Algorithm-Example

<comment><AUTHOR> If you just want to get to the nougat-filled center:

[http://github.com/yogthos/Clojure-Genetic-Algorithm- Example/...](http://github.com/yogthos/Clojure-Genetic-Algorithm- Example/blob/master/src/ga/main.clj)</comment>


Kreatorschool – A Nocode Significant Content Platform - <AUTHOR> https://dev.to/rudrakshborana/kreatorschool-a-nocode-significant-content-platform-1of6 <comment><USER2> It's better to link directly to their platform than just linking to this post which links to nothing</comment>


Algorithms Behind Modern Storage Systems - <AUTHOR> https://queue.acm.org/detail.cfm?id=3220266 <comment><USER2> I read this book titled "Designing Data Intensive Applications", which covers this and a lot of other stuff about designing applications in general. [https://www.amazon.com/Designing-Data-Intensive- Applications...](https://www.amazon.com/Designing-Data-Intensive-Applications- Reliable-Maintainable/dp/1449373321)

<comment><USER3> It's the best written computer-related book I've read. On a par with Friedl's "Mastering Regular Expressions".

Very highly recommended.

<comment><USER4> > On a par with Friedl's "Mastering Regular Expressions".

That comparison sold me. You deserve a commission.

<comment><USER3> Thank you!

Be warned, the O'Reilly print quality is miles apart between the two. Their print-on-demand text quality and the binding are real let-downs.

<comment><USER4> That's too bad. The MRE book was great - the special typography for zero-width indicators and whatnot was really great. Progress.

</comment></comment></comment></comment></comment><comment><USER5> There's is one important detail that is never fully articulated in this article. It says B-trees are read optimized. This is true, but there's only a big difference for random reads and not sequential reads. Because seeking a key in LSM is relatively expensive, because it has to read multiple indexes. But after this is done, reading the a lot of keys an values from this point on is not expensive (or at least not much more so than in a B-tree). The reason for this is mentioned in the article, which are the SSTables. These allow for quick through the keys, because they are stored on disk in sorted order.

<comment><USER6> LSMs do not guarantee that sequential key/value pairs are stored in the same SSTable so reading "n" k/v pairs, in the worst case, could require seeking through "n" different SSTables. There are datastores that use LSMs such as HBase that provide guarantees on top of LSMs to facilitate efficient range reads and, of course, many LSM compaction algorithms improve range reads, but the basic LSM is optimized only for single k/v reads. That's the reason, for example, why Cassandra doesn't even offer range reads such as "SELECT * FROM mytable WHERE KEY > x AND key < (x + k)".

<comment><USER7> > That's the reason, for example, why Cassandra doesn't even offer range reads

This is not true. The reason why Cassandra doesn't support that is because of hashing of keys across the cluster -- you'd have to query all shards and merge the results. That has nothing to do with the LSM storage.

</comment></comment></comment><comment><USER8> _cough_ bcachefs's b+ tree can push about a million random updates per second (almost half a million single threaded, last I checked).

I haven't heard of anything faster...

edit: found the benchmarks I ran [https://www.patreon.com/posts/more- bcachefs-16647914](https://www.patreon.com/posts/more-bcachefs-16647914)

<comment><USER9> Congrats! That is Redis-on-Xeon territory! [https://redis.io/topics/benchmarks](https://redis.io/topics/benchmarks)

Though I assume that, like Redis, a reboot would lose acked writes?

An SSD can't save a write in a microsecond, its latency is at least an order of magnitude higher, right?

<comment><USER10> NAND program operations are in the order of O(100us) to O(1ms).

<comment><USER10> I see how you made that mistake now. SSDs typically have many (eg 10s-100s) program operations happening in parallel. They also pack each write into something around 16kb or larger units so it's possible multiple b+ op are in each program.

</comment></comment></comment></comment><comment><USER11> Isn't this pretty traditional stuff? What is modern about it?

Does any of this map to a GPU for column-oriented analytical data processing? Basically, machines are only good at reading and writing large, contiguous chunks of data. As these machines evolve, the optimal width of those chunks keeps getting larger. The volume of data available is growing. And the types of operations being done on data are becoming more "analytical" (meaning column-oriented and streaming access, rather than row-oriented random access). I would expect "modern storage" algorithms to therefore be cache friendly, column oriented and take the modern, in-memory storage hierarchy into account (from on-chip registers to, to high bandwidth GPU type parallel devices, to NVRAM system memory).

This article comes off to me like a CS101 intro doing Big-O asymptotic analysis on linked lists, without even mentioning the existence and effects of memory caches.

</comment><comment><USER12> This reminds me of RAID 6's use of abstract algebra.

<comment><USER13> I wrote a blog post a while back that might be of interest: [https://www.akalin.com/intro-erasure-codes](https://www.akalin.com/intro- erasure-codes) . It's similar to Igor's but fills in a few more details.

<comment><USER14> That's a fantastic introduction (although it's far more than an introduction!). I wrote a native addon for Node.js that does Reed Solomon, also using optimized Cauchy matrices (MIT license): [https://github.com/ronomon/reed-solomon](https://github.com/ronomon/reed- solomon)

<comment><USER13> Very nice! I think I stumbled on your implementation when researching my post. :)

<comment><USER14> Thanks. If that was in November last year, then it's changed a lot since then (and now a few times faster). Back then it was using a Vandermonde matrix as it was based on Backblaze's Java implementation, but a month ago everything was rewritten to use optimized Cauchy matrices.

</comment></comment></comment></comment></comment><comment><USER15> Most interesting thing I have seen for for database indexes is this paper.

[https://www.arxiv-vanity.com/papers/1712.01208v1/](https://www.arxiv- vanity.com/papers/1712.01208v1/)

Using a Neural Network in place of a B-tree. What is interesting is a NN can use many processors at the same time versus you can not with a B-tree.

In the end it comes down the power as in joules to get something done.

<comment><USER8> it's more about space efficiency. if a model can fit in only one or two cachelines, and get you "close enough", you may end up touching a lot less memory than if you just did a binary search.

</comment></comment><comment><USER16> Obligatory reiserfs joke: [http://www.baltimoremick.com/blog/wp- content/uploads/2008/07...](http://www.baltimoremick.com/blog/wp- content/uploads/2008/07/reiser-wife.jpg)

</comment><comment><USER17> This was a bad post and shouldn't be preserved. And I can still edit it. So I did. Please see below, it's a better post (even if it's bad).

<comment><USER18> >> LSM-trees are great, but better stuff exists.

Sure. My knowledge is pretty much limited to what this articles talks about, so interested to know what else is out there.

<comment><USER19> Fractal Trees as used in TokuDB (now owned by Percona).

The big thing in practice is that TokuDB vs InnoDB is dealing with large datasets.

However, I don't know where the very latest MyRocks stands vs TokuDB.</comment></comment></comment>


Measure code execution time accurately in Python - <AUTHOR> https://knasmueller.net/measure-code-execution-time-accurately-in-python <comment><USER3> One of my special skills as a young developer was intuiting that the perf tool timings for small methods were highly inaccurate (at the time I characterized this as lying), and in a GC'd language that inaccuracy can be quite amplified.

I found a lot of performance issues that others missed, and there were a number of quite notable cases where I had rather extraordinary results. Like 20% from tweaking (not even deleting) a method measured as taking 5% of run time. Not the weirdest I every did, but a solid number of top ten entries from this category.

How did I find them? Sorting by invocation count instead of run time. You can blindly jump into any of functions and get some useful results, but a more sophisticated approach is to think first about expected versus actual results. You think to yourself, "I just ran this task ten times. It has this much data to deal with. How many calls to this particular function should I have expected? 250? Then why was it called 759 times?"

What you find next will be architectural problems, or problems of data flow through the system (while some, including me, would argue that I just repeated myself, not everyone accepts that).

The fastest methods are the ones you never call, and I'm surprised at how frequently people ignore call count even though it's often right there in the results. Maybe because it's often the last value displayed, as if to say "This is barely worth mentioning."

<comment><USER4> That's a great advice.

Another one is to only look at memory allocations. Usually when there is a lot of allocations, a lot of data is being handled. This gives a bit of a different perspective where you start thinking of folding chunks of data together.

The nice thing about those two approaches is that they don't vary between CPU and architectures.

<comment><USER3> Certainly. When a quick function allocates lots of memory, the slowdown gets blamed on the functions that follow. In purely sequential code this leaves some clues behind. With event-based or concurrent code these problems can be more elusive.

Cache invalidation can follow a similar misattribution pattern.

When you do succeed in making an improvement, the % of time for everything else should increase. 10% of 90% is 11%. Look back at the old results and see if anything else went up disproportionately, and see if you can understand why.

Related to that notion, and as a parting thought, since this is getting some love: game and A/V programmers understand something the rest of us do not. And that is a computation/time budget. It doesn't matter if one thing takes four times as long as the other if they both take too long. You haven't fixed "the problem" until you've fixed them all. Late is late.

There's another "systematic" approach to making very large perf improvements that doesn't fix problems from most to least significant but by functional unit. Fix all of the problems in that functional unit even if it's 1% of the total (if you're after a 5x speed gain it's actually 5% of the total budget). If you make large scale changes you are going to have to do some expensive regression testing on this part of the code, tests or no tests. Once you've paid that price once, you will never go back for that last 2% because you can not justify it to your organization. You're stuck with those in ten different functional areas, forever. What you _can_ justify is boosting a raft of work from 18% to a 20% overall improvement.

</comment></comment></comment><comment><USER5> No mention of PSL timeit? [https://docs.python.org/3/library/timeit.html](https://docs.python.org/3/library/timeit.html)

Also, quote from the timeit page:

> Note: It's tempting to calculate mean and standard deviation from the result > vector and report these. However, this is not very useful. In a typical > case, the lowest value gives a lower bound for how fast your machine can run > the given code snippet; higher values in the result vector are typically not > caused by variability in Python's speed, but by other processes interfering > with your timing accuracy. So the min() of the result is probably the only > number you should be interested in. After that, you should look at the > entire vector and apply common sense rather than statistics.

<comment><USER6> It's technically true that the lowest value will approach the lower bound of how fast your machine can run the code, but there's no guarantee that number is valuable. If there is any significant non-determinism in the execution, the minimum time will be a value that you'll only expect to reach in a fraction of executions, even if there are no other processes contending for resources.

The only real solution for avoiding noise is to control its sources.

Reference here: [https://tratt.net/laurie/blog/entries/minimum_times_tend_to_...](https://tratt.net/laurie/blog/entries/minimum_times_tend_to_mislead_when_benchmarking.html).

<comment><USER5> If there's significant nondeterminism in the execution, the method discussed in TFA is also worthless. It's pretty clear determinism is the basic assumption of this discussion; no one's arguing that you should use the minimum execution time among random cases as the performance characteristics of timsort, for instance.

Of course, caching of deterministic code complicates matters too.

<comment><USER6> I would have to spend a long time studying the relevant Python implementation to think I knew whether there was nondeterminism present in a given benchmark. That's a tall order.

<comment><USER5> Now that I think about it, you're right that randomized hashing in Python itself could cause nondeterminism in seemingly deterministic code. However, timeit does mitigate that to some extent by repeating the same code a large number of times — 1 million times by default, and it's better used that way. Of course, depending on the actual code, it could be the case that all 1M invocations are skewed by the specific choice of PYTHONHASHSEED; it's not something that you can solve in-process, so there's no panacea, you must ditch the idea of getting a single stable number in that case.

</comment></comment></comment></comment></comment><comment><USER7> Victor Stinner (python dev) wrote a good series on trying to get stable benchmarks in python:

[https://vstinner.github.io/journey-to-stable-benchmark- syste...](https://vstinner.github.io/journey-to-stable-benchmark-system.html) [https://vstinner.github.io/journey-to-stable-benchmark- deadc...](https://vstinner.github.io/journey-to-stable-benchmark- deadcode.html) [https://vstinner.github.io/journey-to-stable-benchmark- avera...](https://vstinner.github.io/journey-to-stable-benchmark-average.html)

</comment><comment><USER8> Eurgh for starters using `time.time()` is a bad idea because it calls gettimeofday which is susceptible to clock changes. `time.perf_counter` is what you want to use as it can never go backwards and it will always be from the highest granularity clock.

<comment><USER9> Next, if you really want to time something fast you should probably know about cache. In a modern computer there are levels of memory. For now we'll say we have 3 levels: cache, ram, and a hard drive. Cache is small but very fast, it is the closest level to the CPU. RAM is bigger but slower and the hard drive is much much slower. Because the cache is small the computer has to pick what's in it. At program load the cache will be full of information related to whatever was running before you. After you run you will have left some information in the cache which will not need to be fetched from slower levels of memory. Unless your usecase is to run your test code repeatedly very quickly, you should be wary of timing multiple calls in fast sequence as the later calls will execute faster due to the cache being primed to execute your code.

<comment><USER6> Great point. In addition to caching, there's potential for branch prediction effects.

This is why the JMH samples warn against including loops[0] of the operations you're trying to measure, and have an API that's designed to avoid the programmer having to every write their own looping code.

[0] [https://hg.openjdk.java.net/code- tools/jmh/file/7bc6011260aa...](https://hg.openjdk.java.net/code- tools/jmh/file/7bc6011260aa/jmh- samples/src/main/java/org/openjdk/jmh/samples/JMHSample_11_Loops.java)

<comment><USER10> Great point about using JMH. As of JDK 12, it's included in the SDK: [https://openjdk.java.net/jeps/230](https://openjdk.java.net/jeps/230)

What's the equivalent of JMH for Python?

<comment><USER6> I'm afraid I don't know, I really don't have any particular knowledge of performance engineering in Python.

</comment></comment></comment></comment></comment><comment><USER11> I don't know how else to put it, but the technique suggested in this paper is irreparably incorrect in the setting that it recommends. Attempting to fix a linear least squares fit by removing points with high residuals does not work. Please don't do that: they won't necessarily be the outliers in the dataset and your model will converge to the wrong thing.

Statistics is hard. Like, really really hard. Stuff goes wrong all the time. Please leave it to the experts.

If you're going to do this, please look up the methods behind (for example) robust least squares, outlier detection, L_1 regression, etc. The right way to do this is to start with a small dataset that is with very high probability free of outliers, and slowly grow it by never adding points which have large residuals. (If you've done 3D scan registration and image alignment, this is what RANSAC does.)

The principle is, intuitively, that once an out-of-distribution point gets into your linear model, the model is poisoned forever. You can't trust the model to tell you that the bad points are the outliers. The way this paper does is is irreparably broken, sorry :/

<comment><USER12> There's another reason too; there are strong reasons why the timing of successive code executions should not be linear. Typically the first call to a function will incur the cost of fetching data into a cache. At minimum the basic blocks for the function will be loaded through the l1/l2/l3 pipelines.

2, 3, 4 function calls in a row will benefit from that caching, but also help train the speculative execution engine. At some point that speculation may radically alter performance. Later, with a sufficient number of runs, the timing will also suffer from preemption, context-switches, or other interruptions that can invalidate both the cache and the speculative execution engine.

The idea that there is a fixed performance time for a function is naive on modern hardware.

<comment><USER11> You make a good point I hadn't considered. In that case, not even robust least squares will save you, because the samples are not independent of one another. You'd have to start looking into explicit time-dependent methods and yikes, I have no idea of what the literature says about time dependence _and_ outliers. I wouldn't be surprised if it's "here be dragons" territory.

<comment><USER13> You are speaking as a stats person. :)

While there are dozens of things that can go south in benchmarking, how to solve them is not about applying advanced stats, but about understanding and eliminating the sources of noise.

Most benchmarks in CS can be done quite easily as long as one understands all the technology stack.

<comment><USER11> I'm not a stats person! But I have been burned in real projects by doing the wrong thing. I just have learned --- the hard way --- to honestly appreciate it.

</comment></comment></comment></comment></comment><comment><USER14> It's good to know about turbo boost when measuring cpu bound code. When the cpu gets hot, the clock drops, sometimes by a large factor. When it's cooler and the OS wants to run code, the clock goes back up. This can be disabled in BIOS to get a more stable result. You can monitor the cpu clock in Resource Monitor on windows 10, to see how big a deal the issue is. It varies by cpu model, temperature, cooling of your particular machine etc.

<comment><USER15> ...but obviously only disable it if it is disabled in the environment which you want to predict. Don't try extrapolating from an environment in which it is disabled to one in which it is not, and vice versa.

<comment><USER14> Not really true. If the particular computer you're running the code on is warm due to weather conditions, which affects clock frequency, it doesn't tell you anything about the performance of your code.

</comment></comment></comment><comment><USER16> Isn't figuring out the slope a red herring? The total run time is:

        n * timing_overhead + n(n+1)/2 * runtime

Seems like you'd do better by measuring n^2 runs and dividing by n^2. But that's not very good because it's not taking into account the observed variance. What you really want to know it something like the 95% confidence interval after observing n runs.

My teammate has been working on a library to do just this for JavaScript, with added automation for running a set of benchmarks until some set of thresholds, like A is 95% likely faster than B.

[https://www.npmjs.com/package/tachometer](https://www.npmjs.com/package/tachometer)

<comment><USER15> > What you really want to know it something like the 95% confidence interval > after observing n runs.

Great in theory, but almost always relies on a normality assumption which just doesn't hold in general for performance measurements.

How well does this package handle pareto distributed run times?

<comment><USER17> Though this particular package doesn't, you can certainly derive confidence (or better, credible) intervals for non-normally distributed data.

</comment></comment></comment><comment><USER18> [https://arxiv.org/abs/1608.04295](https://arxiv.org/abs/1608.04295) this paper is the statistical basis of time measuring in Julia. It is, at least a good read when trying to measure the execution of some program seriously at low level. It uses also a predictor of the estimate number of evaluations via a logistic function

</comment><comment><USER19> Off topic, but why is there a pop up on the site that says "This website uses cookies to ensure you get the best experience on our website"? What is the "best experience" that I am missing out on by refusing to allow cookies? I didn't think cookies on a blog are useful to anyone except to the website owner for tracking, but maybe I am missing something?

<comment><USER20> One thing I've learned over the years is that "best experience" is an euphemism for "what we want to force down your throat".

</comment></comment><comment><USER21> So the "algorithm" is just... running the code different numbers of times and then using least squares linear regression? Or am I missing something?

</comment><comment><USER22> I used to develop in C and C++, back then the software ran on a single machine, and the most common performance issues we faced were unintentionally introducing some O(N^2) complexity, usually within a deep call stack.

Today I develop mostly in Python on a web backend system. Now, the most common performance issues I see are making multiple network calls when one would suffice (e.g., not caching repeated database queries). I have no doubt that there are many hidden O(N^2) issues lurking in the python code, but because network calls are so expensive, they seem to dominate optimization efforts.

I suspect that I'm not alone here, as today, there are many I/O performance tools than there were in the past.

</comment><comment><USER23> I haven't used Python full time in a few years, but it seems like this has been a solved problem for a while with timeit[0]. Am I missing something?

[0]: [https://docs.python.org/3/library/timeit.html](https://docs.python.org/3/library/timeit.html)

</comment><comment><USER24> Just use the timeit module, or the %timeit iPython magic command.

</comment><comment><USER25> You could also do the following to compute the overhead of the timing function:

        time_start = time.perf_counter()
        time_end = time.perf_counter()
        execution_time = time_end - <USER2>

<comment> fleur-de-lotus I initially thought it was an entry for a Rube-Goldberg contest.

</comment></comment><comment><USER26> We made measurements this way in my physics I lab classes. Guess there's no reason why it wouldn't apply to software.

</comment><comment><USER27> how about a simple average ?

</comment><comment><USER27> how about a simple average?

</comment><comment><USER28> 20 minutes

</comment><comment><USER29> Its python! The moment you need to measure precise execution time of functions is the moment you should be looking at rewrite to C, C++, Rust, maybe even Java.</comment>


Neugram, Go scripting - <AUTHOR> https://neugram.io/ <comment><AUTHOR> I wanted to give a deeper link, to David Crawshaw's first blog post about his project, but the main page has a better title.

[https://neugram.io/blog/neugram-briefly](https://neugram.io/blog/neugram- briefly)</comment>


The 1980s Trade War Between Brazil and Apple - <AUTHOR> http://www.brasilwire.com/the-1980s-trade-war-between-brasil-and-apple/ <comment><USER2> Brazilian here. A professor who taught me engineering once quipped that Brazil needs a monument to the unknown smuggler, because, if everyone were to follow the law, Brazil's high-value-added industries would have disappeared at the 80's. No one could legally buy world-class computers in the middle of their revolution. Talk about unintended consequences.

<comment><USER3> It was hard and expensive to buy the latest hardware, but at the same time there was no effort to make the best of what we (Brazil) had.

Even an MSX machine with extra RAM, an 80-column card, and a floppy drive could have been a very reasonable business machine in the 1980s. The Unitron Mac was quite impressive.

Brazilians were complaining about not having the latest and greatest while the UK was putting BBC Micros in every school.

So I think that the real problem with closing the IT market was that Brazil didn't even try to make the best of it.

<comment><USER4> Let's not forget that while the official excuse for the closed market was to (somehow) foster the country's industry, the real reason was that Brazil was a dictatorship and the dictator was giving control of a large booming industry to some of his best friends and holding the country hostage.

It's 100% corruption. There wasn't even a law saying what you could or could not import, you would just get your imports confiscated if you happened not to be in the group of friends of the military.

<comment><USER3> I don't believe this to be true. There was a genuine desire to foster a Brazilian IT industry. And it did partially succeed.

They just didn't invest enough in education and to widen the market (make them cheaper).

In the end, they thought that selling oranges to the US was more important (as the Unitron case shows).

<comment><USER5> that's extremely naive. btw the same still happens with cars. car manufacturers are very profitable to corrupt people in the government, so importing a car is pretty much impossible. taxes are absurd and the law is so insane that nobody can follow it. most importers already included a bribe fee. and i am taking about Brazil today, not in the 60s

<comment><USER6> What are you talking about? "Importing a car is pretty much impossible"?!?! I walked around São Paulo last week on a tuesday, and I saw a bunch of BMWs, a bunch of Land Rovers, a bunch of Volvos, a bunch of Audis etc. And I'm talking about new cars, 5 years or newer. Importing a car is actually simple today. You just pay the import taxes, deal with the bureaucracy, and you got yourself a legal, corruption-free if you want it to be, import car dealership. I agree completely that the taxes are very high, and the bureacracy is complicated, but please don't exaggerate things.

<comment><USER5> all those brands have official brand imports. they assemble the last bolts in Manaus and avoid paying taxes. it's mostly wrong according to the law but they know who to pay. Harley does the same.

try to import any not "made in Manaus"

<comment><USER6> C'mon, first show me where where these automakers are breaking the law, and also where it is these days where you can't import a car without bribing someone. Here are some stories by reputable journalists showing how expensive and bureaucratic it is to import a car by yourself if you want to, yet also how completely legal it is:

[http://carros.uol.com.br/noticias/redacao/2014/05/08/burocra...](http://carros.uol.com.br/noticias/redacao/2014/05/08/burocracia- dificulta-importar-carro-mas-preco-final-pode-compensar.htm)

[http://economia.terra.com.br/carros-motos/importar-carro- por...](http://economia.terra.com.br/carros-motos/importar-carro-por-conta- propria-pode-ser-30-mais-barato,168d6037a18da310VgnCLD200000bbcceb0aRCRD.html)

[http://www.gazetadopovo.com.br/automoveis/importar-traz- excl...](http://www.gazetadopovo.com.br/automoveis/importar-traz- exclusividade-mas-requer-paciencia-ecc6x59lrub8ynmsbmawjpt8u)

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Did the Brazilian govt write off the $10M loan they gave Unitron?

It's a stark reminder that companies' success and failure depend a LOT on the govt's policies. One interesting example is India where many medicines have been forced out of IP restrictions, giving rise to a big generic drug manufacturing business. I wonder what will happen to these businesses (many are publicly trading companies) if the patents start getting enforced because of some pressure form US/EU.

<comment><USER8> About the loan: who knows?! It was the 80's and Brazil was under a crazy military dictatorship imposing lots of economics barriers like the one described in the article. I could bet some money they did it in the shadows and Unitron happily accepted it but I guess it will be impossible to know for sure. What everyone agrees with in Brazil is that those restrictions did more harm than anything else to the country's economy and its technological progress.

By the way, Brazil has a 15-year-old (huge!) generic drug manufacturing market so to me it's clear the US has lost this particular battle, see [https://en.wikipedia.org/wiki/HIV/AIDS_in_Brazil#Drug_patent...](https://en.wikipedia.org/wiki/HIV/AIDS_in_Brazil#Drug_patents) for more info about it. This fight on drug patents was supported by the UN and other emerging countries, like India.

<comment><USER5> drugs and software IP were the driving force behind TPP. and India following Brazil was probably what set the urgent timing for it.

</comment></comment></comment><comment><USER9> Interesting article, but bad website (scroll hijack).

</comment><comment><USER10> Brazilian here. Wow I remember those times. People travelling to Paraguay to buy computers. crazy.

</comment><comment><USER11> The article gives the impression that they interviewed me, but they really copied fragments from [http://merlintec.com/lsi/mac512.html](http://merlintec.com/lsi/mac512.html)</comment>


Adventures in Data Science - <AUTHOR> https://sumitonsoftware.wordpress.com/ <comment><USER2> Isn't anything patented published by definition?

<comment><AUTHOR> Not really, you can patent before you publish. It is actually required in some countries. [http://softlib.rice.edu/ques.html#10](http://softlib.rice.edu/ques.html#10)</comment></comment>


A Shallow Dive into GNU Make - <AUTHOR> https://interrupt.memfault.com/blog/gnu-make-guidelines <comment><USER2> The one common paradigm of Makefiles I'm enjoying (and using myself) is the pattern for enabling more verbose logging.

      ifeq ($(V),1)
      Q :=
      else
      Q := @
      endif

      somerule:
        $(Q)$(CC) -c $^ -o $@

      $ make V=1

It's mentioned in this article and I suggest everyone use it in their Makefiles, for when the time comes for me and others to debug it.

<comment><USER3> There's no need to write $(V) and $(Q) since they are single letter variables you can just do $V or $Q. Of course, you may prefer the more verbose version.

</comment></comment><comment><AUTHOR> While CMake & Bazel are gaining in popularity, Make is still the de-facto standard for firmware projects. It certainly is miles better than some of the XML-based, GUI-first build systems IDEs bundled with Keil or IAR.</comment>


Ask HN: Review my startup - <AUTHOR> http://www.swfstats.com/

<comment><USER2> I've made a few "bigger" flash applications (for fortune 500s and the like) and in general I don't see the benefit of this versus Google Analytics[1], which provides a Flash tracking API[2]. All your points you note on the left side I've done in one way or another via Google Analytics.

I admit that the google analytics flash API only allows you to track "events" and sometimes pass a numeric value with an event which analytics will mean for you, but in practice, I've found that that is often all that was requested by my employers. e.g. "We want to know when people go from A => C => B, vs. A => B => C." Easily done! "We want to know the average time a user spends on this panel" Done!

So could you explain to me some features you have that google analytics doesn't have? And justify their benefit enough such that a company would sacrifice a single analytics account to view all their web analytics for two sites to view their page and SWF analytics separately?

[1]: <http://www.google.com/analytics/>

[2]: [http://code.google.com/apis/analytics/docs/tracking/flashTra...](http://code.google.com/apis/analytics/docs/tracking/flashTrackingIntro.html)

<comment><AUTHOR> An excellent question and one I should have prepared an answer for earlier, sorry it took me so long to reply!

We're really targeting two different markets with the common thread being Flash but two very different uses of it. In some cases you could force the relevant data streams into GA but you're working against the system and yourself from the very start - gaforflash is not the same as ga for flash games, which doesn't really exist and has no community of developers to help you figure it out.

Google Analytics is fantastic at what it's designed to do, which is track a site and with gaforflash pieces of Flash on a site. There are a few key reasons why that's not a good match for casual games:

1) GA is from the ground up designed to presume the people are coming to you, and it's the opposite with the casual game business, our games go to 100s or 1000s of different websites. Straight away you lose a lot of the functionality that makes GA great because it just isn't applicable / usable.

2) Events don't transfer directly to the structure of games, in general as a concept they do and especially compared to our custom events, but when you start digging into per-level and tracking multiple streams of data and multiple values on those streams it becomes complicated and difficult to interpret the results and even to figure out just how you're actually able to track these things.

To put it in perspective, if I quit on level 1 is the category quit and the action level 1, or vice versa, or both? If I collected 30% of the coins then the problem gets bigger - category level 1, action collected, value 30%? Or category collected, action level 1, value 30%, or category collected 30%, action level, value 1? These are all the right answer, together, but now you're tripling the requests you're sending back to Google and creating so many events that you start jeopardizing the ability to interpret what's going on.

The other issue with the complexity of GA is most of the time you only get one chance at getting this stuff right - and there's a lot you need to get right otherwise the data's useless - because after your game's being distributed you can't easily push changes out to all the sites your game will be on.

3) The gaforflash api is heavy - 160 kilobytes - which is an expensive addition in terms of filesize and especially performance, both of which are critical in casual games where we might already be cramming a ton of work into a 30-times-a-second loop that already doesn't run well on whatever office/college/school computer the player's using.

</comment></comment><comment><AUTHOR> So following my post the other day about how exactly people go about launching a beta we just leapt in and opened up. We scored a nice blog post from a prominent blogger in the Flash game space which has doubled our userbase already, and we're working hard on even more features to better-align us with the requirements for social games, and to go even deeper into casual game tracking.

It's going to be a very interesting February seeing how we cope with all the new games being added. :)

</comment><comment><USER3> I would put an action call at the bottom of your price chart. while the user is there, get them to test the system or sign up. present an opportunity to make a decision.

<comment><AUTHOR> Just this comment alone has made it worth posting here, I didn't even think of that heh.

</comment></comment><comment><USER4> I would work on some landing page optimization. For example the Join our Beta, which I am assuming is your call to action right now should be on the left side of the page and above your stats bar. Also, the first big text the user sees should be you main value point, at this point the first big text doesn't even include the word Flash or Game.

<comment><AUTHOR> Thanks, I fixed that up most of that after you posted earlier, the join button I'm in the process of relocating.

</comment></comment><comment><USER4> I would work on some landing page optimization. For example the Join our Beta, which I am assuming is your call to action right now should be on the left side of the page and above your stats bar. Also, the first big text the user sees should be you main value point, at this point the first big text doesn't even include the word Flash or Game.

</comment><comment><USER5> It's somewhat difficult to read the numbers in the middle of the page.

<comment><AUTHOR> Thanks I made the text darker so it stands out more clearly.

</comment></comment><comment><USER6> I think a demo will really help in showing what your app does.</comment>


Ask YC: Is there a way to get the RSS feed for "new" submissions to HN? - <AUTHOR>

Or do I have to use a 3rd party service to monitor changes on the page? <comment><USER2> Try this:

<http://www.dapper.net/services/hackernewsnew>

<comment><AUTHOR> Legend. thank you :)</comment></comment>


Surprise graphene discovery could unlock secrets of superconductivity - <AUTHOR> https://www.nature.com/articles/d41586-018-02773-w <comment><USER2> Previous discussion: [https://news.ycombinator.com/item?id=17743796](https://news.ycombinator.com/item?id=17743796)

</comment><comment><USER3> _Superconductors come broadly in two types: conventional, in which the activity can be explained by the mainstream theory of superconductivity, and unconventional, where it can't. The latest studies suggest that graphene's superconducting behaviour is unconventional — and has parallels with activity seen in other unconventional superconductors called cuprates. These complex copper oxides have been known to conduct electricity at up to 133 degrees above absolute zero. And although physicists have focused on cuprates for three decades in their search for room-temperature superconductors, the underlying mechanism has baffled them._

Magic angle graphene (sheets twisted 1.1 degree relative to each other) isn't a temperature breakthrough because the sample must be cooled to 1.7 K.

Rather, it appears to be a novel system for studying unconventional superconductors. The best-studied example to date is based on cuprates. Both cuprates and magic angle graphene are characterized by insulting state very close to a superconductivity state.

The hope seems to be that magic angle graphene will prove to be a better system for understanding unconventional superconductivity. That could lead to high temperature superconductors.

 _In contrast to cuprates, the stacked graphene system is relatively simple and the material is well-understood. "The stunning implication is that cuprate superconductivity was something simple all along. It was just hard to calculate properly," says Laughlin._

<comment><USER4> I'm going to take a wild guess that it has something to do with electron de broglie wavelength somehow being resonant in certain lattice structures. Twists in graphene layers are known to create a morie pattern giving it a quasi-periodic structure at much higher length scales than simple atomic lattices. This is likely related.

</comment></comment><comment><USER5> >And although the system still needed to be cooled to 1.7 degrees above absolute zero,

awww :(

<comment><USER6> Correct me if I'm wrong, but I think the significance of this finding is not so much about temperature, rather it's a big piece of the puzzle in understanding superconductivity. This is the first time that we are able to achieve superconductivity via mechanical property rather than molecular property. Our current superconductors are based some crazy alloys, and we have little insight of why they are superconductive.

In this finding they were able to make graphene superconductive by simply shifting two sheets of graphene by 1.1 degree angle. Graphene consists of only carbon atoms, its atomic properties are much easier to model than an alloy, so by examining why this magical angle work, it can greatly help us understand why superconductivity occur, eventually helping us design higher temperature superconductors.

<comment><USER7> Correct. It's a significant finding. I'm annoyed at the breathless explanations of our current superconductor situation as a lead in followed by this revelation that this new superconductor isn't really useful as a high- temperature superconductor at all.

I.e. I'm annoyed by the writing not unimpressed with the science :-)

</comment></comment></comment><comment><USER8> Any article with the words "graphene breakthrough/discovery" or "battery breakthrough/discovery" should get a blanket ban...

/s

I guess...

</comment><comment><USER9> It's interesting that every single article about graphene shows a 3D model of a plane of molecules, but never a photo...

</comment><comment><USER10> Science headlines with the word 'could', 'could' hold the secret of eternal youth.

</comment><comment><USER11> > Graphene can do just about anything except leave the lab.

</comment><comment><USER12> This is six months old</comment>


Ask HN: About to publish my very first open-source project; what should I know? - <AUTHOR> I've been working on some games over the past few years, and although they're still far from release, I've ended up with a game engine that I think might be useful to other independent devs. It's a library; just code, with no editor app or art/sound assets.
I'm especially looking for advice on the non-coding side of things, like:
• What kind of license should it have? Should it have one at all?
• Do I need to do anything to ensure that I won't ever get "locked out" of my own work? i.e. by someone repackaging the code under their own brand and charging money for it, or worse, preventing me from using the name/code in my own games?
I'm just keeping in mind some of the horror stories I've read from other devs. Or am I worrying too much at this point?
I have no legal representation in the US (or anywhere). I'm just a "bedroom coder" trying to make the kind of games I've always wanted to play and contribute to something along the way, while hopefully generating some interest for my future projects. <comment><USER2> I think you'll be lucky to have the kind of problems you're worried about. A lot of open source projects have one developer and no users. (Which is fine, we all have itches to scratch.) Definitely pick a license. Permissive if adoption (particularly commercial) is more important to you than reciprocity, copyleft otherwise.

The other thing to remember, if your work is any good, is that you have a big head start on doing whatever it is you're doing that makes your engine better than others, and you probably have even better ideas in the pipe. Open- sourcing this project is an expression of confidence in your own ability to come up with something better in the unlikely event that worse comes to worst and the project somehow gets hijacked.

One word of warning -- there are probably more open source game engines out there than anything else, including actual open-source games. Your project has a lot of competition and may not gather a lot of attention unless you work hard to sell it.

</comment><comment><USER3> I personally prefer CC0-1.0 for software licenses.

> Do I need to do anything to ensure that I won't ever get "locked out" of my > own work?

Yes, you must maintain positive control over your application and all its trademarks. Sometimes people can feel emotional or involved with an application, particularly if they believe they cannot live without it. As the owner you dictate the direction of the application. This will mean telling people _no_. When people get sad because they cannot have something they want from _your_ application they have four choices:

* fork your application and maintain it on their own

* abandon the software

* shut up and take it

* do the requested work on the desired feature and write a pull request

Never, ever, let other people dictate the direction or terms of _your_ software or your time.

</comment><comment><USER4> Really don't worry about it, it's very rare for an open source project to get any traction.

Definitely pick a license though - [https://choosealicense.com/](https://choosealicense.com/)</comment>


We need a full investigation into Siri's surveillance campaign - <AUTHOR> https://www.theguardian.com/commentisfree/2020/aug/14/apple-siri-secret-surveillance-campaign-investigation <comment><USER2> I know it's a comment piece and all, but this kind of content really rubs me the wrong way.

It's totally fair to investigate and regulate companies' privacy practices. Many of them are downright scary. But we don't need to deliberately misrepresent them in order to do so. There is no "surveillance campaign"; abusing the term weakens the argument against all of those actual surveillance campaigns out there.

</comment><comment><USER3> Does this stem from the "Listen for Hey Siri" setting?[1] I'm assuming that means my phone is "listening" at all times in case I say the magic words. What I _wasn't_ assuming was that snippets of that "listening" would ever leave my phone. It's unclear to me whether recordings being sent to Apple are a separate setting. If I allow Siri to listen but have turned off Siri analytics[2] was Apple still potentially listening?

Even reading the description of the second setting though doesn't make it clear Apple could be listening to recordings you never intended to make:

> Help improve Siri and Dictation by allowing Apple to store and review audio > of your Siri and Dictation interactions on this device.

If my phone is in my purse and I say something that my phone thinks sounds like "Hey Siri" I wouldn't consider that an interaction but perhaps Apple would.

[1] General > Siri & Search > Listen for "Hey Siri"

[2] General > Privacy > Analytics & Improvements > Improve Siri & Dictation

<comment><USER4> Siri voice recognition happens on Apple servers.

The device continually listens for the trigger words. Recognizing these happens on the device.

Once it thinks it recognizes these words the Siri ui appears, the chime plays, the recording starts and is streamed to Apple.

The scandal the author is referring to is that to improve the speech recognition, they had humans listen to a random selection of the recordings and correct the automatic recognition. Apples mistake here was that these people were not Apple employees but contractors. One of these employees leaked information about the recordings.

Sometimes the device will think it heard someone say 'hey Siri' when that wasn't really the case. Typically the the recordings will be of a random part of a conversation but it may also be background noise of people having sex.

Compounding this problem is that to improve recogniton the Siri servers know things you are likely to refer to, like the names of your contacts. That way it'll know that where one person may refer to Tom where another may be referring to Thom. The contractors had access to this information.

Is this spying? It isn't particularly covert. Again, it was a mistake for Apple to outsource this task to people who clearly can't be trusted. So now you can tell Apple to leave your recordings out of that process and they have stopped outsourcing the work. The fact that the contact information etcetera is used is clearly mentioned in the agreement.

<comment><USER5> I disagree that people even care if they are employees or contractors of Apple. There are way too many questions here:

1\. Was this really only a problem of accidentally captured audio? 2\. Why did this "improve voice recognition for Siri" program ever feel it was in scope to use any recordings accidentally captured? 3\. Why weren't better controls in place on something so personal from a company that specifically markets a strong stance on privacy? 4\. Does turning off "hey Siri" actually prevent ambient audio from ever arriving on Apple's servers? 5\. Why can't they implement specific consent per recording rather than just do a stupid blanket "some of your captured conversations may be used to improve..." 6\. What laws are needed to better protect consumers?

<comment><USER4> It's clearly stated that Siri runs on Apple servers and (now optional) that people may listen to the audio to improve the service. So audio that is not accidentally captured is not a problem, it's sent with consent.

If you don't have 'Hey Siri' on it only listens when you press the button.

Apple does have strong controls but they employ human beings. Control is not absolute, their own secrets leak all the time and of course yours are not immune either. They tried to improve control by making this optional and by moving it in-house where they can for instance make it harder for employees to record, screen employees etcetera.

The point of the program is to improve voice recognition, if Apple could determine with certainty what is an accidental recording and what's not they wouldn't need to improve it.

Specific consent, what do you expect? After every question to Siri a pop-up appears that asks you for consent? That's just not practical.

What laws do you feel were broken? How do you feel consumers were impacted? The thing they consented to happened. Now there's even more options and control. What more do you want?

Do you believe people at the phone company can't listen in on your calls? Do you think bank employees can't look at your statements? Do you think the people at your ISP can't check your traffic? What kind of law would you want that mitigates that yet still allows these companies to provide their services?

</comment></comment></comment></comment><comment><USER6> This is why I would love to see more devices with physical disconnect switches for mic and camera.

Software just can't be trusted for this use case.</comment>


Ask HN: Re: 37 Signals - List of successfully bootstrapped tech startups? - <AUTHOR>

I'm guessing the 8+ submissions of the 37 Signals/Twitter satire were killed due to fatigue. It makes sense, the argument surrounding the VC vs. bootstrap model in the context of the Mint buyout generated 300+ comments, often heated.
Instead of rehashing the same arguments can we look at this empirically?
lets create a list of successful (defined by exit or long term profitability) tech start ups that haven't taken VC. Then we can compare it to the portfolios from the top 5-10 VC's. It won't conclude anything, but at least we can argue facts instead of opinions.
I'll gladly put together a comparison site if we can generate enough names:
Successful tech start ups that haven't taken VC:
1. Craigslist.org
2. PlentyOfFish.com
3. MyBlogLog.com
4. ClubPenguin.com (angel)
5. Threadless.com (took on a small amount of expansion capital, but was profitable before hand)
Others? <comment><AUTHOR> Dell/Microsoft

([http://www.entrepreneur.com/magazine/entrepreneursstartupsma...](http://www.entrepreneur.com/magazine/entrepreneursstartupsmagazine/2002/october/55776.html))

<comment><USER2> does anyone know about microsoft's early funding? was it VC at all?

<comment><USER3> Bill Gates had a trust fund because he had rich parents and grandparents. I don't know if he used any of it to fund the company, but he didn't need VC to buy groceries.

</comment></comment></comment><comment><USER4> I'm wondering if someone could use the CrunchBase API to do such a comparison–grouping companies by if they have any investments or not (assuming the data is accurate, of course). <http://crunchbase.com/help/api>

<comment><USER5> I've looked through these companies many times and never noticed the Bootstrap category until now. Thought I would point it out - <http://crunchbase.com/companies?q=bootstrapped>

</comment></comment><comment><USER6> I don't remember 37signals claiming you'll hit the jackpot with their proposed model either. Their entire argument can be summed up as "forget the freaking jackpot!"

Hoping to win the lottery is not a good way to make money. Instead, you should just build a profitable business that you can live very comfortably from. That's hard too, but it's a _lot_ more feasible than winning the lottery.

And by winning the lottery, I mean getting an exit of a ridiculous amount of money, whether you were VC funded or not.

</comment><comment><USER4> iStockPhoto

Acquired for $50MM by Getty Images. Projected revenue of $200MM this year.

No VC funding that I'm aware of.

</comment><comment><USER7> SAS Institute is the worlds largest privately owned software company. $3Bn revenue last year.

There are probably literally dozens with revenue in the tens of millions of dollars though. All the ones you listed are B2C, there'll be tons of very successful B2B service providers.

Two local [to me, Cambridge UK] ones spring to mind: Jagex and Red Gate Software both employee 150+...

<comment><AUTHOR> For sure, thanks for the names. I don't doubt that there are lots of great mid sized companies with large teams and revenue streams. I just get frustrated when 37S talks up their process and doesn't mention others that are doing likewise. I wouldn't be surprised if the bootstrapped companies were better deals overall for the founders, you just don't hear about them nearly as much as the vc backed ones.

<comment><USER8> With a VC you get a rolodex, which includes press contacts. Maybe there is something to that whole "you hear more about VC backed companies" thing.

</comment></comment></comment><comment><USER9> Though probably not a start-up anymore, I don't think Zoho has taken any VC money.

<comment><AUTHOR> Great call, I forgot about them. You are right, they just mentioned how they had no investors as it related to Zimbra's unpredictable future.

</comment></comment><comment><AUTHOR> IIRC Kerpoof was acquired by Disney pre-funding (<http://www.crunchbase.com/company/kerpoof>)

</comment><comment><USER7> its probably backwards to look for exits in private companies. Usually the founders are 110% committed to building a long term company, and strive to ensure they own the majority of the company so they aren't told what to do.

</comment><comment><USER7> none get large without VC.

<comment><USER10> What's your definition of large?

<comment><AUTHOR> Lets say over 200 people or $25MM in revenue as a first filter. Seems like a relatively low barrier. A more conventional definition might be 1,000 people or $100,000,000.

<comment><USER11> none of whom?

clearly there are some

</comment></comment></comment></comment><comment><USER11> "I'm guessing the 8+ submissions of the 37 Signals/Twitter satire were killed due to fatigue."

interesting. I guess VCs don't like it when they're not needed?

<comment><AUTHOR> Borism,

I was thinking more the moderators were tired of running through flamey threads that amounted to "VC is the only way to build a REAL company" "Nah man, VC's suck! Bootstrap 4 eva!"</comment></comment>


Spam Suspect Uses Google Docs; FBI Happy - <AUTHOR> http://www.wired.com/threatlevel/2010/04/cloud-warrant/

<comment><USER2> Note to self: starting developing online collaborative planning tool for criminal activity that can be guaranteed secure from search warrants. High monetization potential.

<comment><USER3> Remove the word 'criminal' above - and people living in non-democratic countries, such as Iran, Uzbekistan, Russia, China etc. will be very grateful to you.

<comment><USER4> Russia and Iran have democratically elected presidents. How is that non- democratic?. Democracy does not mean "complying to US dictates". Fully agree with the overall point though.

<comment><USER5> I could be misremembering, but I thought there was some pretty big hubbub over Iran's election!

<comment><USER6> Where as recent US elections have been almost entirely hubbub free. (I agree there is a difference in extremity)

</comment></comment></comment></comment></comment><comment><USER7> Is anyone aware of any such services that actually allow encryption that _you_ control? I.e., keyed off a password you provide?

<comment><USER8> That wouldn't be controlling the encryption; that would be giving whoever runs the webserver your data and a key and hoping that they actually use the latter. Controlling encryption means you do the encryption.

Edit: Provided I'm understanding you correctly, of course. I might not have.

<comment><USER9> I think you miss understand him - the encryption would happen entirely on your side.

That way if a warrant was presented, all they would have would be a bunch of unreadable files.

</comment></comment></comment><comment><USER10> Other than the warrant being furnished "under seal" everything here seems to be above board.</comment>