Ask HN: Does the SaaS model really work?  Really? - <AUTHOR>

I'm working on a web startup with a partner and I'm just feeling unsure of whether whole SaaS thing really works.  Maybe it's because I'm personally reluctant to pay for stuff online, but I feel like some of my enthusiasm for this thing is waning because I'm doubting whether anyone really pays for anything.
I mean, I've read all the success stories about the YC companies and other web startups, I've read the "Autopsy of a web app" article that the Particletree guys wrote (awesome, btw).  But I would love to see more numbers, as well as hear success stories from others, no matter how small.
To be blunt, though, I have a hard time believing that people will really sign up and pay for this in the numbers that we need.  Our service isn't that expensive, starting at about $20 / month, and we need about 500 paying users to be "ramen profitable".  But once we get to several thousand users, things start to get really interesting.  Is that at all realistic?
I know it's heavily dependent on the market, what value we add, etc, but to give you an idea, our target market is primarily small companies, tech startups, bloggers, and others with a strong online presence.  Probably a little smaller than the market for something like Basecamp, but similar in nature.
Bottom line: is it unrealistic to think that we can get 5000 users paying $20 / month?  I know this is an unrealistic question to ask without more info, but I'm just trying to get an idea of what the upper limit of realistic expectations is.  If a company like 37 signals only has 2,000 paying users for Basecamp, then I don't feel great about our chances.  But if they have 200,000 paying users, I feel better about it.  I just literally have no idea of what's realistic in terms of the size of a paying userbase.  I know that others will be reluctant to post their numbers, but perhaps you can post them under a different account name or something?  I would absolutely love to know how many paying users you have.  Help a fellow entrepreneur out here :-) <comment><USER2> SaaS marketing is expensive. Don't look at 37s or JoelonSoftware as successful models-- they have built in advertising for their exact target market with their blogs/content.

Can you spare $500 to find out? If so, do this:

1\. Get an adwords account. 2\. Research keywords with their keyword research tool. Are people searching for what you're building? How much advertiser competition is there? This will give you some idea of demand (this part is free-- or $5 for the account setup). 3\. Build a landing page that explains your value prop as best you can and your pricing. Have a sign-up button that is BIG at the bottom that goes to a "we're in private beta right now" page with a "give us your email address to get an exclusive invite". 4\. measure how many people click on the ad. Then measure what percentage click on the signup button. That's a pretty good indication of demand and pricing sensitivity. The email is a bonus-- if you dash someone's hopes and they still are eager enough that they give you an email addy, then there might be some classic "hair on fire" problems that your purporting to solve.

Oh, and +1 for businesses. I've heard 37s say that the vast majority of their revenue comes from biz accounts.

<comment><USER3> That's a brilliantly evil way of conducting market research. Well Done!

<comment><USER2> I'd love to take credit, but it's actually straight from Tim Ferriss. :-)

<comment><USER4> I've heard of this method in 2003 or so. It's a very old method started by internet marketers.

</comment></comment></comment></comment><comment><USER5> I think you really need to go after businesses. Consumers are just plain cheap. I know I am. As an individual I don't really _need_ anything. Certainly I don't really _need_ any web service. Getting me to buy something that is just a luxury is really hard. I'm also very likely to cancel when buyer's remorse sets in.

Businesses are different. If they _need_ to solve a problem (to make or save a significant amount of money) and the choice is between paying one of their developers $10k+ in salary to build it or paying you $80/mo to have it instantly there's not much of a decision there. You just need to make sure that you're solving a problem that thousands of businesses have and then push it really hard. A simple formula that's really hard work to actually do, but quite likely to succeed.

<comment><USER6> There is also the question of how SaaS vs Outright affects businesses vs individuals. There are all sorts of aspects to it. You mention buyers remorse. That's a consumers trait. Anecdotally, it seems to me that consumers are less willing to take another regular expense on. I know I am.

It often seems that these regular expenses from magazine subscriptions to car loans are what get people into trouble, so they avoid them. Businesses on the other hand have different issues. Small businesses have cash flow issues & limited credit lines. These are (seem) easier to solve with payment products as services. larger ones have

Larger businesses have different issues. People within them may not want to be responsible for am irreversible mistake. Others may need SaaS to get around some budgeting issue, decision making process or department (bypassing IT seems fashionable).

</comment></comment><comment><USER7> Yes, it works. How well it works really depends on a lot of things. It does take patience and you do need to know your market.

I actually think you don't need to be in a huge market to be hugely successful. We serve a niche market (professional photographers) and, by most accounts, are successful with strong growth.

We have 2 main products/services that have a monthly fee. The first isn't a true SaaS (it's more Saas+web hosting), but we have several thousand customers paying monthly.

Our most recent product (nextproof.com) is a true SaaS and is also doing well. We launched in June and should hit the 1,000 account mark early next year.

The thing I like about being in a smaller/niche market is that it's easier to find and present to your target market. If you're product is good, it will sell–you just need to make them aware.

Here's some things I would suggest based on experience:

* Find some "connectors" in your market and partner with them. Give them free accounts and VIP treatment in exchange for referrals * If you need some cash up front, consider selling a limited amount of "lifetime" accounts. They pay $500 (or whatever) and get an account for life. We've done this and people jumped all over it. * Explore the possibility of tweaking your app for even a smaller niche market.

I've got lots more ideas ... but that's where I'd start. But, yes, I'm a firm believer that it can work.

</comment><comment><USER8> If it helps, I tried modelling 37signals' revenue a while back. Based on some of their posts and a few guesses I think they've got about 10k paying Basecamp customers, and across all their products will have about $8million in turnover this year.

My original blog post is here: [http://blog.jedchristiansen.com/2008/02/25/37signals-is- one-...](http://blog.jedchristiansen.com/2008/02/25/37signals-is-one-hell-of- a-profitable-business/)

You can play around with the spreadsheet I created, though I hope to update it soon.

I think it's absolutely easy to see that you can get 5000 users paying $20/month if you provide $20/month of value to your customers! Are you saving them that much per month in other costs, or generating new revenue through your software?

</comment><comment><USER9> Frankly, if you need money fast, then don't sell subscriptions. People pay much quicker and faster if it's a one time fee than if it is a subscription - what you then have to do is that once a year, you bring out something so compelling, that the users are willing to purchase another 'chunk' one time.

After trying the subscription model, and noting the pains the users would go through to NOT have to pay a subscription fee, I switched to a fixed one-time fee.

It makes you work harder to have something new each time, so that the users go through the upgrade cycle.

</comment><comment><USER10> The SaaS model works, infact it works really well. This is a great time to be selling SaaS because the TCO (total cost of ownership) tends to be much less than that of standard licensed software. ([http://www.readwriteweb.com/archives/is_saas_cheaper_than_li...](http://www.readwriteweb.com/archives/is_saas_cheaper_than_licensed.php))

The question you need to answer is "how big the opportunity is for your application?" The number of paying customers at other SaaS companies is irrelevant unless you're playing in the same market and you expect to steal their customers. Which by the way should be a valid strategy if you believe that your application is going to be better.

Figure out what you're replacing, guess the % of that market that you can own and decide if it's big enough for you to survive and thrive in.

</comment><comment><USER11> _QUICK STATS_

HUBSPOT has over 700, my guess is close to 800 and they charge like $200 per month (~$140-160k per month)

LEADS360 was doing like $400k in rev per month in late 2007.

37SIGNALS obviously, is doing well, I'm guesstimating $10 mill, at least.

ZOHO is doing like $40 million a year.

CONSTANTCONTACT is doing $50+mill a year.

Then of course, there is SALESFORCE.

</comment><comment><USER12> Understand your time frame as well. How long are you willing to wait to get to 5000 paying users? If it's 6 months, quit now. However, if you're willing to wait several years and grow slowly, it's perfectly achievable, assuming your product isn't completely asinine.

</comment><comment><USER13> Saas is a great business model as long as you can handle the deferred revenue part of it, essentially you are financing your customers purchase of the software. This can be painful when you are cashflow negative but once you go positive it is terrific as you have a steady and predictable cash flow stream.

I think the biggest benefit of Saas is that it matches the incentives of the vendor and customer far more closely than traditional packaged software. Rather than the sell and run approach of packaged business process software you focus on getting successful deployments and making sure the customer stays happy and around for a long time i.e. low churn rate.

</comment><comment><USER14> Not to skirt the question, but ten thousand dollars a month is not really ramen profitable. Your hard costs are server space and bandwidth, and whatever amount of food and shelter is necessary to keep both of you working.

A lot of subscription businesses are slow growth and high churn. Your market expands slowly as the people who will pay for your services find you and you get better at marketing to them. Unless you have a really killer service, large advertising budget or the media at your beck and call, I think it will be tough to grow to that subscriber level overnight.

<comment><USER15> Saas costs can be pretty low because you only need a couple hundred users to get to that 10K a month. A couple hundred users on most apps can probably be run totally fine off of a <100$ vps.

</comment></comment><comment><USER16> According to this, Weebly (YC startup) has over 1 million users and "well over 1%" of those are paying users. That might mean 1.1% or it might mean 5%...but apparently they've got at least 10k paying users. Not sure how much their paid plans are...

[http://venturebeat.com/2008/11/03/weebly-scores-1-million- us...](http://venturebeat.com/2008/11/03/weebly-scores-1-million-users- reaches-profitability/)

<comment><USER17> the monthly plan for weebly is $3.99 I believe. They also very smartly push buying domain names, which they surely get a couple of bucks yearly on. 40k per month is quite nice.

</comment></comment><comment><USER18> As others have mentioned, the key distinction is whether you're targeting individuals or businesses.

Typically you'll have a tough time convincing individuals to part with $20 per month and typically there's a free alternative.

It's much easier to convince businesses to spend the same amount and, as a bonus, many will be suspicious of free offerings. In fact, others will subscript to a higher premium tier purely to "buy the best for my business."

I always refer people to this StartupSchool talk by DHH of 37signals which outlines their business model, and explains their focus on small businesses: [http://www.omnisio.com/startupschool08/david-heinemeier- hans...](http://www.omnisio.com/startupschool08/david-heinemeier-hansson-at- startup-school-08)

</comment><comment><USER19> I think there is always a market for business apps that deliver value. We're a startup ourselves and pay for Basecamp and Highrise - sure there are free alternatives but BC and HR are intuitive and easy to setup and when you have non-techies included in your business those things are important.

Someone mentioned Salesforce - also check out Netsuite.

You should determine if you're 100% pay (with maybe a 30-day free trial) and primarily directed towards SMBs or freemium model directed to users and businesses. If freemium you can expect a 1-5% uptake on the paid services.

Cheers

</comment><comment><USER20> Does the model work? Yes, of course. People pay contractually for things.

I don't understand what you're asking. Whether or not people pay for anything you create? That heavily depends on what you're offering and what value it's adding to your customers. It depends much less on the model; much more on your product.

And I think 37signals have _way_ more than 2,000 paying users.

</comment><comment><USER21> SAAS works very well for a lot of companies, besides it's bound to get a lot bigger in the years ahead.

I wrote a bit about SAAS and the design decisions you should take into account here: [http://www.maximise.dk/blog/2007/01/moving-applications- to-w...](http://www.maximise.dk/blog/2007/01/moving-applications-to-web.html)

</comment><comment><USER22> salesforce.com?

<comment><USER23> Kudos for pointing out the obvious, and in one URL summarizing what another poster in this tread already explained: target businesses, not consumers.

</comment></comment><comment><USER6> context

It may help to think of SaaS as a part of a larger context. Over the past 20 years or so, many 'product companies' have become 'service companies.' Aircraft tyres is a popular business school case study. In many countries where company owned cars are the norm, leasing companies are the primary providers of cars (+ petrol + insurance + washing + servicing + all other issues). Office hardware is another good example.

If it helps, those are all _X as a Service_ business models & I believe they do quite well compared to their industries. But note that most of them targeted mature customers.

There are quite a few software segments where SaaS is or is becoming the norm: Live chat customer support, Web Analytics, CRM.

</comment><comment><USER24> That's right - you've got to be patient. It will not happen over night. And you've got to target businesses. But from what I see (<http://uploadthingy.com>) - once they're in there and paying they pretty much keep paying.

</comment><comment><USER25> if you have a business and are providing a service that the consumers want, then you will have no problem getting people to pay for that service, given you are staying competitive in the given market space.

if you are selling primarily to online companies, there is no doubt that these people will buy your service, as they are used to doing business online (unlike yourself).

how old are? if you are under 30, and you feel reluctant to pay for stuff online, then you are a minority. most teens and young adults spend their money online, with growing numbers.

right now, the economy is tough, so it's hard to say exactly how your business will fair, given most companies are cutting spending (less trade).

</comment><comment><USER26> What alternative is there really? Ad supported won't work well for most apps. It really depends on what you're doing, but it's clear that it may work, and it's often clear that it's your only reasonable business model, often with some sort of freemium twist.

</comment><comment><USER27> Another example: <http://www.cobalt.com/>

This is a Seattle company that does other stuff, but is at heart mostly a SaaS company and they're doing well. Really well actually, from what I can tell.

</comment><comment><USER28> World of Warcraft - 14 million subscribers - $15 monthly. Can you do the math?

</comment><comment><USER29> I have a small service and about 3% of the user base opts to pay for advanced features. That figure has been consistent for me for some time, even when the user base as a whole was smaller.

</comment><comment><USER30> Taleo.com - fantastic recruiting SAAS business, something like 300k paying users. Bought by individuals and corporations

</comment><comment><USER31> SaaS + Govt Regulation = Successful Business

</comment><comment><USER32> Anybody know if schools are a good target?

<comment><USER33> mylunchmoney.com is definitely working</comment></comment>


A simple webapp to get slack token with "client" scope access - <AUTHOR> https://github.com/andrewarrow/easytokens <comment><AUTHOR> this is running at utc24.org if anyone wants to try [https://github.com/andrewarrow/ises](https://github.com/andrewarrow/ises) and needs tokens</comment>


NYU professor calls Tumblr the worst acquisition of the decade - <AUTHOR> http://www.businessinsider.com/scott-galloway-tumblr-worst-acquisition-of-decade-2016-7 <comment><USER2> The worst acquisition of the decade was arguably Nest Labs, bought for $3,200,000,000 in January 2014; rather than Tumblr, bought for $1,100,000,000 in June 2013.

Both acquisitions failed to meet the expectations of their new owners. In the case of Tumblr, Yahoo bought it for its community in an attempt to gain/regain relevance with the 16-25 demographic. In the case of Nest, Google wanted a piece of the 'connected home' pie.

Tumblr is a community and it may disappear over time as alternatives emerge; it's a nature of the game. Meanwhile, Nest replaces hardware in your house that used to work fine with cloud-connected versions that have issues when you lose connectivity.</comment>


Facebook doesn't force HTTPS for login - <AUTHOR> http://facebook.com

<comment><USER2> How so ? Do you mean by default ? Are you sure you have Secure Browsing (https) enabled in the settings ?

<https://www.facebook.com/editaccount.php> > Account Security

<comment><AUTHOR> By default it doesn't. Majority don't even know that setting even existed.</comment></comment>


WhisperSystems' encrypting text messaging client is now Open Source - <AUTHOR> http://www.whispersys.com/oss.html

<comment><USER2> Oh, what Stringer Bell would have given for this in 2003.

</comment><comment><USER3> When things like CarrierIQ exist, I imagine this is rendered somewhat ineffective...</comment>


Call your friends with their own number - <AUTHOR> http://webnesbay.com/643/call-your-friends-with-their-own-number/ <comment><USER2> <http://www.textmygf.com/> was doing something sorta similar --- sending text messages to a person and making it look like it was from your own number ... I always wondered whether the guy behind it was actually making money.</comment>


Luck and Startups - <AUTHOR> https://medium.com/@csentropy/luck-and-startups-f93bce58b272 <comment><USER2> Can this be done legally?

<comment><AUTHOR> I did write it legally :)</comment></comment>


Rust Dataframe: Update 1 - nevi-me https://github.com/nevi-me/rust-dataframe/blob/master/notes/update-01__04-04-2020.md <comment><AUTHOR> One of the things that most pisses me off about numpy, pandas, and the whole scipy ecosystem is that everything is "immediate mode": all operations evaluate _instantly_ to new arrays or dataframes. There's no opportunity for any component to evaluate a whole expression tree and optimize it, e.g., by loop hoisting.

The _right_ way to design a data analysis DSL is to do it the way Python's dask does it: build an operation graph and execute it as the last step. The trouble is that Dask doesn't get it right either because, as part of its graph formation, it computes sizes of operands, and computing operand sizes can involve huge amounts of computation, and so dask, _in effect_ , is also an "immediate mode" system.

What I really want to see is something _lazy_ that can do sane _query planning_ and that can work within limited system resources. Maybe one day I'll open source the work I've done in this space. Query languages are infinitely nicer for analytics than data processing libraries.

<comment><USER2> It really is remarkable that Python's numerical computing libraries have such poor performance. When doing chains of elementwise operations on large arrays (such as toy example `elementwise cos(sqrt(sin(pow(array, 2))))`), Julia appears to outperform Python by a factor 2! Numpy cannot avoid computing each intermediate array, which means it has to allocate a ton of wasteful memory. Meanwhile Julia does the smart thing and coalesces all operations into one and applies that single operation elementwise, allocating only a single new array.

Pandas does not also defer computations, which means computing Boolean functions that include the same data multiple times must make multiple passes over said data. Absurd.

<comment><USER3> numpy appears to have optional arguments for the storage location of outputs: [https://docs.scipy.org/doc/numpy/reference/generated/numpy.c...](https://docs.scipy.org/doc/numpy/reference/generated/numpy.cos.html) \- Could you elaborate a little further? The syntax might not be as nice as another language or framework, but it's not "unavoidable".

Disclaimer: have never used numpy, have used python fairly extensively.

<comment><USER2> You are right about the `out` argument, I'd forgotten about that. But even avoiding the wasteful memory allocations, numpy _still_ is about 60% slower than Julia, as it makes multiple passes over the input data. (If there's a way to get numpy to just make a single pass over the data and remain performant, I'd love to know.)

<comment><USER3> The first thing I'd reach for is to refactor into a list comprehension. Looks like this is the proper way to do it:

      for x in np.nditer(a, op_flags = ['readwrite']):
        x[...] = cos(sqrt(sin(pow(x, 2))))

That's some knarly syntax though. I've never seen that ellipsis operator?

Edit: just read about `Ellipsis`. I'm a fan, even if it's sort of nonstandard across libraries. Those readwrite flags are a travesty though, but at least you can paper over it with a helper function.

Something like:

      def np_apply(a, f):
        for x in np.nditer(a, op_flags = ['readwrite']):
          x[...] = f(x)

      np_apply(x, lambda x: return cos(sqrt(sin(pow(x, 2))))))

or

      def np_apply(a, *argv):
        for x in np.nditer(a, op_flags = ['readwrite']):
          for f in argv:
            x = f(x)
          x[...] = x

      np_apply(lambda x: return pow(x, 2), sin, sqrt, cos)

Edit3: There's a way to turn this into "pythonic" list comprehension code, but it would probably only make it look prettier rather than more performant.

</comment></comment></comment></comment></comment><comment><USER4> Some thoughts on dataframe.

\- Don't put methods on it like pandas.DataFrame. You won't get the API right the first many times and you'll end up with a million methods.

\- Make chaining easy.

\- Use pure functions. No mutation.

\- Get inspired by R's dplyr and data.table.

<comment><USER5> "Pure functions" is usually a bad idea with large numeric data structures if they are non-lazy - because you'll end up copying the data.

One of the common pure alternatives is to make them lazy - i.e., all those pure methods don't do anything but rather just collect the information on what to do with your data. But then you need to write an execution engine for arbitrary computation graph, which ain't easy.

<comment><USER6> > "Pure functions" is usually a bad idea with large numeric data structures if > they are non-lazy - because you'll end up copying the data.

This isn't necessarily true due to Rust's strong ownership. Methods can take `self` (without reference) as an argument which means the method takes ownership of itself. There is no copy for 'double' in the below example, yet it is pure:

        #[derive(Clone)]
        struct A {
            v: Vec<i32>,
        }

        impl A {
            fn double(mut self) -> Self {
                for x in &mut self.v {
                    *x *= 2;
                }
                self
            }
        }

        fn main() {
            let a = A { v: vec![2, 3, 4] };
            let b = a.double();
            dbg!(b.v[1]);
        }

If you now tried to access `a` the compiler would error out, saying you're trying to access a moved-from variable. If you still wanted to keep the original `a` around you simply write `let b = a.clone().double()`.

</comment></comment></comment><comment><USER7> A good Rust equivalent to Pandas is really the main thing keeping me from switching to Rust for about half of my day job. This is incredibly promising, and I am following your work with great interest. Thank you for working on this!

<comment> nevi-me Out of interest, what are the common tasks that you'd be looking to achieve? We can't replace Pandas and its ecosystem in the short-term, so for me a Rust- backed backend to a dataframe that is compatible with Pandas would be a win.

<comment><USER7> My workflow usually reads something like this:

1\. Import data using hand-written SQL from SQL server (read_sql)

2\. Perform various filtering, aggregation, math (loc, iterrows/itertuples, groupby, agg)

3\. Push results either out to delivery file or back to source server (to_csv, to_excel, to_sql).

Really bread and butter stuff, but the relative ease and stability of using pandas to do it is the attraction.

</comment></comment></comment><comment><USER8> Getting a fast & safe Rust UDF layer that targets SPIR/CUDA/PTX would be quite interesting wrt enabling RAPIDS.ai (libcudf + python bindings) as well. It'd enable getting rid of slow & quirky numba etc - I remember Mozilla had GPGPU RUST codegen experiments here awhile back...

<comment><USER9> rustc does have a working nvptx target today, though it's not supported nearly as well as the mainstream cpu targets, and some things you would really want for gpu programming (e.g. shared memory address space) are not currently exposed in the rust language. But kernels written in rust can compile to ptx; you'll still need to write glue code.

<comment><USER8> Yeah this would be about extending it to columnar analytics funcs, like `df['x'].apply(f)`, `df.query("x > 10 && y < 10"). I realized I may be wrong about the compiler speed part, not sure if it'd be faster than numba for codegen nowadays :)

</comment></comment></comment><comment><USER10> What is a dataframe? I wish libraries would define their key terminology. Especially when the term is rather generic.

<comment><USER11> It's kinda like a spreadsheet with a programmatic interface. Check out pandas for a nice introduction!

<comment><USER12> Am I the only one who finds pandas to be terrible compared to dplyr?

<comment><USER7> Everyone does. On the other hand I, and many others I assume, aren't willing to move to R for the sake of the one superior tool over python. Two if you count ggplot2, I suppose.

<comment><USER12> Yeah but for giving someone an intro to what dataframes are, I think pandas might leave a sour taste where dplyr would allow someone to learn comfortably.

Although, one might run into a "true level" situation. This is when Morty feels what true level is like, then says "everything is crooked, reality is poison" when he has to live in the "fake level" world.

</comment></comment></comment></comment></comment><comment> nevi-me TL:DR; I've been writing a Rust dataframe library for a while (on and off when I have time). This is my first update, to motivate why I'm writing it.

<comment><USER13> Nice, there are definitely people trying to push more of their datascience/ML stack to Rust and a good dataframe implementation would be useful.

As a side note, a small usage example in the readme would be good.

<comment> nevi-me Thanks for the feedback. I was thinking that Update 2 would be in the form of examples of what can currently be done. I'll also add that to the README

</comment></comment></comment><comment><USER14> What bothers me is: why can't Rust developers just import a C++ library that does the job? What novelty would a Rust version of the same thing bring really? Why not focus on real innovation, and use wrappers for things that were already built in another language a decade ago?

<comment><USER15> I name that the isolated island syndrome.

If you wait long enough, any stable working solutions will be reinvented in its own Language.

It's completely unproductive. But there is reason to that: compatibility with the language toolchain and understandability.

<comment> nevi-me it has to be done at some point. I still have vcpkg on my Windows machine, because I needed to install it and a few GB of other things, just to use PostgreSQL in Rust a few years ago (I think Diesel).

If someone hadn't implemented the libpq protocol in Rust, I likely wouldn't have written in binary copy support on the dataframe in one afternoon.

This reduces the barrier for people to productively use their favourite languages. It might be unproductive at first, but we see the benefits as time goes on.

<comment><USER15> > This reduces the barrier for people to productively use their favourite > languages. It might be unproductive at first, but we see the benefits as > time goes on.

It is vastly unproductive to reproduce anything useful in 10 different language just because our cross-language tooling awfuly suxxe.

The lack of cross-language dev-oriented lead us in the ridiculous situation where every language has its own package manager and his completely unable to use a package made for an other language.

There is reasons to that... but much more political than technical and that's the sad state we are in.

</comment></comment></comment></comment><comment><USER16> Oh this is really cool! I could definitely make use of something like this.</comment>


Kdenlive, the Linux video editor I want to use (2015) - <AUTHOR> http://www.networkworld.com/article/2876381/opensource-subnet/review-kdenlive-the-linux-video-editor-i-want-to-use.html <comment><USER2> So the number one most important feature is, "it doesn't constantly crash!"

Not very complimentary to the Linux software market there.</comment>


Ask HN: Lesser known web software products? - <AUTHOR>

I'm just curious, as a coder with some free time to work on a new product or two ... what sort of web software are companies purchasing outside of the usual CMS, CRM, cart, and campaign products? So, this mostly excludes SASS except as a secondary business plan. <comment><USER2> SASS = Syntactically Awesome Stylesheets?

<comment><AUTHOR> Argh, I meant SAAS. Anyway, looks like my topic was ignored.</comment></comment>


Show HN: Explore Quake/Half-Life maps in your browser - <AUTHOR> https://github.com/sbuggay/bspview <comment><USER2> This is really cool. It's such a fun project to pursue. I actually spent a few years building a native application for analyzing CS:GO demos, with a fully custom rendered 3D world for Source maps, along with demo parsing, player animations, and the ability to rewind and fast-forward instantly. You can take a peek at it here: [https://rewind.site](https://rewind.site)

I saw in your README that you're looking to add source support, might I recommend building off of zik's code? He already is quite far along in rendering Source maps in webgl: [https://github.com/Metapyziks/SourceUtils](https://github.com/Metapyziks/SourceUtils)

Best of luck, feel free to reach out if you ever want to connect.

<comment><USER3> I've wanted to integrate Source maps into [https://noclip.website/](https://noclip.website/) for a while, it's been a pretty major request for the site. If you wouldn't mind, I'd love to ask some questions about rendering them. Do you have any contact information?

<comment><USER2> Sure, my email is in my profile.

</comment></comment></comment><comment><USER4> See also [https://noclip.website/](https://noclip.website/)

<comment><AUTHOR> Wow this is awesome, thanks for sharing. I worry about supplying the .WADs for textures. Quake and Half-Life are both open source now but I'm not sure if their resources files are.

<comment><USER3> I'm not a lawyer, but this is my philosophy on why I continue to run [https://noclip.website](https://noclip.website) like I do.

[https://twitter.com/JasperRLZ/status/1100819780691357696](https://twitter.com/JasperRLZ/status/1100819780691357696)

<comment><USER5> How do you get started deciphering the object data from an unknown format stored as binary? I've tried to extract data from ps1 games but have no idea where to begin.

</comment></comment></comment></comment><comment><USER6> Nice! A visitor to my super-old Dark Forces II: Jedi Knight site ([https://www.massassi.net/](https://www.massassi.net/)) wrote and contributed something similar for Jedi Knight maps. (The site uses frames and thus I can't easily link to a page where you get the whole menu; if you start at the root just click "Levels" and pick a category.)

Example: [https://www.massassi.net/levels/files/323.shtml](https://www.massassi.net/levels/files/323.shtml) Github: [https://github.com/stephanreiter/jkview](https://github.com/stephanreiter/jkview)

The textures are present but blurred to avoid the copyrighted textures issue.

<comment><USER7> holy cow this brings me back to highschool. thanks for the hours I wasted here waaaay back.

</comment></comment><comment><USER8> Very cool. I just loaded up some Half Life maps that I made when I was 15 and it ended up being a little trip down memory lane. Thanks for that!

<comment><AUTHOR> That's awesome :) I'm glad the drag and drop feature worked for you.

</comment></comment><comment><USER9> Long time ago I was a fan of KZ mod in CS 1.6 and I made this: [http://kzplayer.azurewebsites.net](http://kzplayer.azurewebsites.net). It's open source, but there is no "pipeline" to generate stuff on the fly.

You have demo player and you can explore some maps freely

<comment><USER10> Hi m0ver, I made a similar thing back in the day [https://github.com/skyrim/hlviewer.js](https://github.com/skyrim/hlviewer.js)

It uses original file formats (dem, bsp, wad, ...), so you don't have to generate anything. You can view all current KZ world records with it here [http://hlviewer.stefan100.com/](http://hlviewer.stefan100.com/)

</comment></comment><comment><USER11> Amazing! I spent _ages_ building a Counter Strike map with the Valve Hammer Editor back in 2004. I was super proud of it, but I never got to play it! My other, sillier creations ended up being played quite often at my then local Internet gaming café.

Now I'll get to explore it once again :)

</comment><comment><USER12> Super cool! By any chance were you on the old facepunch forums? I remember something similar on one of the devlog threads

<comment><AUTHOR> Nope that wasn't me. I do recall a similar project but I'm not able to find it anymore, if you find it please let me know. Thanks!

<comment><USER3> You might be thinking of [https://github.com/rein4ce/hlbsp](https://github.com/rein4ce/hlbsp)

</comment></comment></comment><comment><USER13> Really cool! Add CS:GO to the list and you'll get hugged to death in no time!

<comment><USER14> [https://github.com/Metapyziks/SourceUtils](https://github.com/Metapyziks/SourceUtils)

</comment></comment><comment> java-man is there an option for inverting the mouse movement?

<comment><AUTHOR> I've added it, you can press "\" to toggle mouse Y inversion.

<comment> java-man thanks!

</comment></comment></comment><comment><USER15> Brings back so many memories!</comment>


My iOS game Splash Dash is now available for free – Please show some love - <AUTHOR> https://itunes.apple.com/app/id618121113

<comment><USER2> You are announcing a "free" iOS game with in-app purchases. How is this not spam? How does your game deserve HN visibility more than the hundred other "free" iOS games with in-app purchases that came out today?</comment>


Making floating point math highly efficient for AI hardware - <AUTHOR> https://code.fb.com/ai-research/floating-point-math/ <comment><USER2> Here's the bottom line for anyone who doesn't want to read the whole article.

> Using a commercially available 28-nanometer ASIC process technology, we have > profiled (8, 1, 5, 5, 7) log ELMA as 0.96x the power of int8/32 multiply-add > for a standalone processing element (PE).

> Extended to 16 bits this method uses 0.59x the power and 0.68x the area of > IEEE 754 half-precision FMA

In other words, interesting but not earth shattering. Great to see people working in this area though!

<comment><USER3> At least 69% more multiply-add flops at the same power iso-process is nothing to sneeze at (we're largely power/heat bound at this point), and unlike normal floating point (IEEE or posit or whatever), multiplication, division/inverse and square root are more or less free power, area and latency-wise. This is not a pure LNS or pure floating point because it is a hybrid of "linear" floating point (FP being itself hybrid log/linear, but the significand is linear) and LNS log representations for the summation.

Latency is also a lot less than IEEE or posit floating point FMA (not in the paper, but the results were only at 500 MHz because the float FMA couldn't meet timing closure at 750 MHz or higher in a single cycle, and the paper had to be pretty short with a deadline, so couldn't explore the whole frontier and show 1 cycle vs 2 cycle vs N cycle pipelined implementations).

The floating point tapering trick applied on top of this can help with the primary chip power problem, which is moving bits around, so you can solve more problems with a smaller word size because your encoding matches your data distribution better. Posits are a partial but not complete answer to this problem if you are willing to spend more area/energy on the encoding/decoding (I have a short mention about a learned encoding on this matter).

A floating point implementation that is more efficient than typical integer math but in which one can still do lots of interesting work is very useful too (providing an alternative for cases where you are tempted to use a wider bit width fixed point representation for dynamic range, or a 16+ bit floating point format).

<comment><USER2> The work is definitely great and I have no doubt we'll see new representations used in the future. But at least on the chip I work on, this would be a <5% power improvement in the very best case. For the risk/complexity involved, I would hope for a lot more.

</comment></comment></comment><comment><USER4> Not sure why this isn't getting more votes, but it's a good avenue of research and the authors should be commended. That said, this approach to optimizing floating point implementations has a lot of history at Imagination Technologies, ARM and similar low-power inferencing chipsets providers. I especially like the Synopsys ASIP Design [0] tool which leverages the open- source (although not yet IEEE ratified) LISA 2.0 Architecture Design Language [1] to iterate on these design issues.

Interesting times...

[0] [https://www.synopsys.com/dw/ipdir.php?ds=asip- designer](https://www.synopsys.com/dw/ipdir.php?ds=asip-designer) [1] [https://en.wikipedia.org/wiki/LISA_(Language_for_Instruction...](https://en.wikipedia.org/wiki/LISA_\(Language_for_Instruction_Set_Architecture\))

</comment><comment><USER5> A bit off-topic, but I remember some studies about 'under-powered' ASICs, ie. running with 'lower-than-required' voltage and just letting the chip fail sometimes. I guess the outcome was that you can run with 0.1x power and get 0.9x of correctness. Usually chips are designed so that they never fail and that requires using substantially more energy than is needed in the average case. If the application is probabilistic or noisy in general, additional 'computation noise' could be allowed for better energy efficiency.

<comment> david-gpu That sounds awful for verification, debugging, reproducibility and safety- critical systems. Imagine this in a self-driving car. Scary.

<comment><USER6> Well, you could simply not use these in a self-driving vehicle.

</comment></comment></comment><comment><USER7> Wow! It's kind of a wierd feeling to see some research I worked on get some traction in the real world!! The ELMA lookup problem for 32 bit could be fixed by using the posit standard, which just has "simple" adders for the section past the golomb encoded section, though you may have to worry about spending transistors on the barrel shifter.

<comment><USER3> The ELMA LUT problem is in the log -> linear approximation to perform sums in the linear domain. This avoids the issue that LNS implementations have had in the past, which is in trying to keep the sum in the log domain, requiring an even bigger LUT or piecewise approximation of the sum and difference non- linear functions.

This is independent of any kind of posit or other encoding issue (i.e. it has nothing to do with posits).

(I'm the author)

<comment><USER7> Thanks for your work!! (And citing us ofc)

Do you think there might be an analytic trick that you could use for higher size ELMA numbers that yields semiaccurate results for machine learning purposes? Although to be honest I still think with a kuslich FMA and an extra operation for fused exponent add (softmax e.g.) you can cover most things you'll need 32 bits for with 8

<comment><USER3> I've thought of that, but the problem is that it needs to linearly interpolate between the more accurate values, and depending upon how finely grained the linear interpolation is, you would need a pretty big fixed point multiplier to do that interpolation accurately.

If you didn't want to interpolate with an accurate slope, and just use a linear interpolation with a slope of 1 (using the approximations 2^x ~= 1+x and log_2(x+1) ~= x for x \in [0, 1)), then there's the issue that I discuss with the LUTs.

In the paper I mention that you need at least one more bit in the linear domain than the log domain (i.e., the `alpha` parameter in the paper is 1 + log significand fractional precision) for the values to be unique (such that log(linear(log_value)) == log_value) because the slope varies significantly from 1, but if you just took the remainder bits and used that as a linear extension with a slope of 1 (i.e., just paste the remainder bits on the end, and `alpha` == log significand fractional precision), then log(linear(log_value)) != log_value everywhere. Whether or not this is a real problem is debatable though, but probably has some effect on numerical stability if you don't preserve the identity.

Based on my tests I'm skeptical about training in 8 bits for general problems even with the exact linear addition; it doesn't work well. If you know what the behavior of the network should be, then you can tweak things enough to make it work (as people can do today with simulated quantization during training, or with int8 quantization for instance), but generally today when someone tries something new and it doesn't work, they tend to blame their architecture rather than the numerical behavior of IEEE 754 binary32 floating point. There are some things even today in ML (e.g., Poincaré embeddings) that can have issues even at 32 bits (in both dynamic range and precision). It would be a lot harder to know what the problem is in 8 bits when everything is under question if you don't know what the outcome should be.

This math type can and should also be used for many more things than neural network inference or training though.

<comment><USER8> > It would be a lot harder to know what the problem is in 8 bits when > everything is under question if you don't know what the outcome should be.

I might have a solution for that : I work on methods to both quantify the impact of your precision on the result and locate the sections of your code that introduced the significant numerical errors (as long as your numeric representation respects the IEEE standard).

However, my method is designed to test or debug the numerical stability of a code and not be used in production (as it impacts performances).

<comment><USER3> None of the representations considered in the paper (log or linear posit or log posit) respect the IEEE standard, deliberately so :)

<comment><USER8> You drop denormals and change the distribution but do you keep the 0,5 ULP (round to nearest) garantee from the IEEE standard ? And are your rounding errors exact numbers in your representation (can you build Error Free Transforms) ?

<comment><USER3> For (linear) posit, what the "last place" is varies. Versus a fixed-size significand, there is no 0.5 ulp guarantee. If you are in the regime of full precision, then there is a 0.5 ulp guarantee. The rounding also becomes logarithmic rather than linear in some domains (towards 0 and +/\- inf), in which case it is 0.5 ulp log scale rather than linear, when the exponent scale is not 0.

For my log numbers under ELMA (with or without posit-ing), the sum of 2 numbers alone cannot be analyzed in a simple ulp framework I think, given the hybrid log/linear nature. Two numbers summed are both approximated in the linear domain (to 0.5 ulp linear domain, assuming alpha >= frac + 1), then summed exactly, but conversion back to the log domain when done is approximate, to 0.5 ulp in the log domain. But the result is of course not necessarily 0.5 ulp in the log domain. Multiplication, division and square root are always the exact answer however (no rounding). The sum of two log numbers could of course also be done via traditional LNS summation, in which case there is <0.5 ulp log domain error.

Kulisch accumulation throws another wrench in the issue. Summation of many log domain numbers via ELMA will usually be way more accurate than 0.5 (log domain) ulp rounding via LNS traditional summation techniques, because the compounding of error is minimized, especially when you are summing numbers of different (or slightly different) magnitudes. Kulisch accumulation for linear numbers is of course exact, so the sum of any set of numbers rounded back to traditional floating point is accurate to 0.5 ulp.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> For those interested the general area I saw a good talk about representing and manipulating floating point numbers in Julia at CSAIL last week by Jiahao Chen. The code with some good documentation is on his github.

[https://github.com/jiahao/ArbRadixFloatingPoints.jl](https://github.com/jiahao/ArbRadixFloatingPoints.jl)

</comment><comment><USER10> caveat: i haven't finished reading the entire FB announcement yet.

google announced something along these lines at their AI conference last september and released the video today on youtube. here's the link to the segment where their approach is discussed: [https://www.youtube.com/watch?v=ot4RWfGTtOg&t=330s](https://www.youtube.com/watch?v=ot4RWfGTtOg&t=330s)

</comment><comment><USER11> > Significands are fixed point, and fixed point adders, multipliers, and > dividers on these are needed for arithmetic operations... Hardware > multipliers and dividers are usually much more resource-intensive

It's been a number of years since I've implemented low-level arithmetic, but when you use fixed point, don't you usually choose a power of 2? I don't see why you'd need multiplication/division instead of bit shifters.

<comment><USER3> Multiplication or division by a power of 2 can be done by bit shift assuming binary numbers represent base-2 numbers; i.e. not a beta-expansion [https://en.wikipedia.org/wiki/Non- integer_representation](https://en.wikipedia.org/wiki/Non- integer_representation) where binary numbers are base-1.5 or base-sqrt(2) or base-(pi-2) or whatever (in which case multiplication or division by powers of 1.5 or sqrt(2) or (pi-2) could be done via bit shift).

But when multiplying two arbitrary floating point numbers, your typical case is multiplying base-2 numbers not powers of 2, like 1.01110110 by 1.10010101, which requires a real multiplier.

General floating point addition, multiplication and division thus require fixed-point adders, multipliers and dividers on the significands.

</comment></comment><comment><USER12> I find it interesting that they were able to find improvements even on hardware that is presumably optimized for IEEE-754 floating point numbers.

<comment><USER8> It is a trade-of : they find improvements by losing precision where they believe it is not useful for their use case.</comment></comment>


Ask HN: Service for secure SMS verification for websites? - <AUTHOR> Is there a service that gives you a phone number to use for verifying SMS for company accounts on sites without needing a phone number?<p>Are small to medium size startups all using someones personal phone number for SMS verification for Twitter for example? <comment><USER2> This is a worrying thought! Does someone like Twilio do this? Might be worth having a look. We grappled with the same problem because we do device authentication as a single factor of authentication. In a SME setting, ideally the business signs up using email@example.com and then they can register any number of devices to carry out the device authentication and remove any device remotely if, say, Barbara from accounts retires on Tuesday.

</comment><comment><USER3> I had a similar concern where my number might be known to an adversary but the site I was using had to use SMS validation. So, I tried rolling a solution for this problem with Twilio but the range the number was assigned from was blocked because I guess others have had the same idea and used it to abuse the service.

I guess I'd propose that a company phone is allocated and kept in an office somewhere, not ideal though as it's a single point of failure.

Twitter however is reasonably rare in that you can't create subaccounts for individuals, most B2B products will let you do that.

An industry has sprung up around this however and there are Twitter management services however that will hold the credentials for you and allow you to accounts for named users etc.

</comment><comment><USER4> At a previous company we had "the office phone" which had a number that everyone used. SMS notifications were forwarded to a desktop app if you were out of the office.

</comment><comment><USER5> There is no such thing as secure SMS.

</comment><comment><USER6> [http://receive-sms-online.info/](http://receive-sms-online.info/)</comment>


Ask HN: HTML5 Mobile apps that work? - <AUTHOR>

I am in the middle of a new project where we need to publish a new mobile app. We are a team of pretty good js web devs, so we went with the (for us) obvious choice of cordova + jQuery Mobile.
We implemented a prototype with most of the features we would like to use in our finished product, and the app does what it has to, but animations are very slow, and using the app just feels "wrong".
Should we ditch jQM and switch to something else? Has anyone of you experience in building a Hybrid app with HTML + JS with any framework where the result was a bit better than acceptable? <comment><USER2> I have a Phonegap App (Flapcast Mobile) that I think works quite well; The only thing that makes it feel like its not native is because I did the art and design myself and I'm not very good at that. There are plenty of (native) apps that don't use native UI controls, its just up to you to make it look and feel good.

My advice is to stay away from the UI libraries, they don't actually look that good and are slow and clunky. Just roll your own if you can, or find a lightweight UI library. But do use a JS framework; I used Backbone.js and it runs like a charm; LinkedIn also wrote a mobile app with Backbone.js (they may have gone native recently though?) and it was beautiful.

</comment><comment><USER3> Keep it as lean as possible, use CSS3 animations everywhere via libraries like jQuery Transit and avoid jQMobile at all costs; it's a clunky, bloated beast.

<comment><USER4> This is very true. Using jQMobile on phonegap can make your app slow down to a crawl. I would suggest CSS3 animations and Zepto.js as an alternative. See the discussion on HN of how tumblr built their iOS app <http://news.ycombinator.com/item?id=4496150>

</comment></comment><comment><USER5> What are you testing your app on? JQMobile on my new Samsung S3 looks and flows very well. Where as my old android would have had trouble loading it.</comment>


Atom: A new approach to text rendering - <AUTHOR> https://github.com/opensourcenovel/opensourcenovel <comment><USER2> Wrong link - I think you meant [http://blog.atom.io/2017/06/22/a-new-approach- to-text-render...](http://blog.atom.io/2017/06/22/a-new-approach-to-text- rendering.html) .</comment>


Ask HN: Do you like to shop for clothing? - <AUTHOR>

<comment><USER2> as opposed to getting clothes as a gift?</comment>


Fixing a 37-year-old bug by merging a 22-year-old fix - <AUTHOR> http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/head/head.c?rev=1.18&content-type=text/x-cvsweb-markup <comment><USER2> This fix leaves a variable uninitialized, and depends on funny logic to later give it a value.

The general structure should be

      FILE *fp = stdin; /* sane default */

then override with a new pointer from fopen if necessary.

In fact, looking at this more closely, note how fp is scoped to the body of the for loop. That's where it should be defined:

       for (firsttime = 1; ; firsttime = 0) {
         FILE *fp = stdin;

         /* logic flips it to fp = fopen(...) as necessary */

       }

[Note: the C compiler Joy was working with probably didn't support block scope declarations except at the top of the function. This comment applies to merging the fix using the environment of today.]

Note how the fclose at the bottom of the loop ends up closing stdin in the case that fp == stdin! It ensures that this only happens once, but you have to analyze it to see that this is true. I would write this as:

         if (fp != stdin) /* defensive! */
           fclose(fp);

Making it an infinite loop terminated by calling exit is unnecessary. There is already a continue in the loop, and a break in an inner loop; another break instead of the exit, and a "return status;" at the bottom wouldn't hurt. Better yet:

      /* Enter loop whenever there are args left to
         process, or even if there are no args if it is
         the first time through (to process stdin instead). */

      for (firsttime = 1; firsttime || *argv; firsttime = 0) {
        FILE *fp = stdin;

        if (*argv) {
           /* have args; do the fopen to replace stdin */
           /* set status = 1 and continue if cannot fopen */
        }

        /* do head logic */

        if (fp != stdin)
          fclose(fp);
      }

      return status;

C itself was only a couple of years old when that code was written originally, and the systems were small. Whereas I've been using it since 1989. Not criticizing the original!

<comment><USER3> I would argue your insistence on giving the variable a "sane default" is a matter of opinion. I personally am much happier seeing a variable left uninitialized than ever seeing it double-assigned, as to me a fundamental semantic logic error has occurred if you are overriding the value of this kind of variable, especially as part of a conditional later where it might not be clear whether or not it happened: I really would prefer to look at the variable being assigned and think "ok, now we know the value". The compiler is entirely able to determine whether or not the variable has been initialized in all possible control flows for a case like this (at least, once we move the scope of the variable to inside of the for loop, of course), so there is no safety benefit to hoisting that default assignment out, nor is it saving a meaningful amount of code: it only serves to obfuscate the "default" control flow by making what had been an explicit if/else into an implicit if/default :/.

<comment><USER4> Always initialize your variable. There is not aesthetic argument, but there are multiple software engineering argument against failing to initialize variables.

For starter, you don't have prescience. You can't prevent future version from growing new alternate code paths. As the code evolve, checking that every initialization-free variable will still get initialized is a burden and easily overlooked. Then there are more potent evolution that will make it just impossible: the code will get generalized, or moved into a library, or get a a context object to be able to run multiple instances. Or will get a state machine to handle complex combination of options.

You're relying on the compiler telling you the variable will get initialized. But the compiler may change. Or the human compiling it might not look at warnings.

OTOH, double-iniitalization is mostly a myth. If the compiler can tell the variable may not get any initialization and warn you are exactly the same as the case the optimizer will be able to see the double init and optimize it out. I've looked at generated code and see compilers properly eliminate redundant stores.

You're better off betting on optimization and get bitten by occasional double- stores than get bitten by uninitialized variables and give system penetrators yet another free lunch.

<comment><USER5> If you use static analysis, defensively initializing to a wrong value may mean that your tooling doesn't tell you when you fail to correctly set it _from_ that wrong value.

<comment><USER2> I have seen this argument numerous times before.

It doesn't hold water, because potentially initializing variables to wrong values is just as much as _consequence_ of using that static tool, as it is a consequence of an "always initialize" coding habit.

The static tool produces a report of uninitialized variables or potentially uninitialized ones. The developers react to this by fixing all those instances, so that the tool is "shut up". Once that happens, they have a code base for which the tool doesn't report anything, just like the other developers who always initialize.

There is no reason to believe that either team has a lower or higher rate of incorrect-initial-value bugs. Or is there?

I would argue that the developer who is writing the code, at that moment, quite possibly has a better idea of what the correct initial value should be, than someone who is running a tool across a large code base and following up (by him or herself).

Really, the coding convention should be "always initialize, with the correct value which doesn't need to be overwritten later."

Even in imperative languages, we should program as "functionally" as is reasonably possible.

Imperative code that mutates local variables should only do so if it implements iteration. If the code has no loops and is setting local variables conditionally, that shows that it's trying to influence the behavior of some common code where the control flow paths merge --- instead of putting it into a function!

In the specific program we are looking at, for instance, the function is trying to use the head processing block at the end, but over different input streams. This can be done by putting it into a function, so then there is no assignment to the fp variable:

       if (!*argv) {
         head_processing(stdin);
       } else {
         FILE *fp = fopen(*argv, "r");
         /* check for fopen failure ... */
         head_processing(fp);
         fclose(fp);
       }

We can eliminate assignments out of loops, too, but that requires tail recursion:

       /* pseudo code */
       head(int argc, char **argv, int first_time)
       {
         if (argc == 0 && first_time) {
           return head_processing(stdin);
         } else if (argc == 0) {
           return 0;
         } else {
           FILE *fp = fopen(*argv, "r");
           /* head_processing checks for null */
           int status = head_processing(fp);
           fclose(fp);

           /* tail call, if status was good */
           return (status != 0)
                  ? status : head(argc - 1, argv + 1, 0);
         }
       }

C programmers will tend not to be comfortable with this style, and it requires tail call support in the compiler to not generate O(N) stack. So for pragmatic reasons, you can't make a coding convention out of this.

<comment><USER5> No tool will help you much if you don't know how to use it. In this case, using the tool wrong, one failure mode puts you in the same situation as not using the tool and defensively initializing. That is a _very_ poor argument that the tool does no good.

<comment><USER2> That argument isn't that the tool does no good. The tool is useful even if you follow the practice of always initializing: it helps catch accidental deviations from that practice.

<comment><USER5> Well sure. My point is that it basically devolves into checking that if you treat it poorly, and can be more useful if you don't. If you make a habit of initializing variables with the wrong value, it's _less_ useful.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> The extremely odd for-loop structure feels to me like someone was trying very hard to avoid a goto, and in the process obfuscated the flow quite a bit more. The special case of head'ing stdin is similar to the classic "loop and a half problem" (which is really only a problem if you religiously abstain from goto use.) I'd consider this a more straightforward way to do it:

        FILE *f;
        int i = 1;
        ...
        if(argc < 2) {
           f = stdin;
           goto do_head;
        }
        ...
        while(i<argc) {
           f = fopen(argv[i], "r");
           /* check for failure to open */
           ...
          do_head:
           /* head'ing code goes here */
           ...
           fclose(f);
           i++;
        }

That being said, OpenBSD code is still far more concise and readable than GNU; compare coreutils' head.c here:

[http://code.metager.de/source/xref/gnu/coreutils/src/head.c](http://code.metager.de/source/xref/gnu/coreutils/src/head.c)

GNU head has a bit more functionality, but I don't think the increase in complexity - nearly 10x more lines - is proportional to that.

<comment><USER7> Here's the version used in OS X. It's a bit bigger but not GNUishly big.

[http://www.opensource.apple.com/source/text_cmds/text_cmds-8...](http://www.opensource.apple.com/source/text_cmds/text_cmds-87/head/head.c)

<comment><USER6> Looks like a small extension to the BSD one, that can also handle head'ing by byte count.

(Although I think the use of malloc() and strcpy() to handle the -[0-9]+ case seems rather unnecessary...)

</comment></comment></comment><comment><USER8> In a 24-year-old version control system.

 _edit:_ Wow, not sure what's offensive here...

<comment><USER9> People here downvote what they _don 't like_

<comment><USER8> I'm well aware of _that_ , the question is _why don 't they?_ I found it a neat aspect that an long-lived bug with a long-lived PR is in a long-lived VCS.

<comment><USER10> You're single line comment might have appeared dismissive of the version control used by the OpenBSD people, especially because it's something that often comes up in threads about BSD.

Threads involving OpenBSD can involve fierce downvoting so it's probably a good idea to be clear about what you're saying.

<comment><USER11> I think all of this could be easily avoided if HN stopped allowing people to try and silence valid comments that they happen to disagree with.

The site is now more political than ever and this just seems to fuel the "silence what you don't agree with" type voting, which I don't think is a good thing.

</comment></comment></comment></comment></comment><comment><USER2> This link to the commit log is slightly better:

[http://cvsweb.openbsd.org/cgi- bin/cvsweb/src/usr.bin/head/he...](http://cvsweb.openbsd.org/cgi- bin/cvsweb/src/usr.bin/head/head.c)

You're one click away from the diff.

<comment><USER12> What's with the previous commit about a "DDOS" \- it's just changing exit(0) into exit(status)?

<comment><USER2> There must be more context to that. CVS doesn't have change sets; just from looking at this log, we don't know what else may be related to this.

Maybe some important shell scripts hang in a loop because they expect head to report an unsuccessful termination status when a file doesn't exist. Maybe some situation exists where a privileged system script can be fooled into looping by an unprivileged user.

Here is the mailing list discussion:

[https://www.mail- email@example.com/msg132628.html](https://www.mail- email@example.com/msg132628.html)

There is no report of any actual DDoS. Craig Skinner was really just testing tools on nonexistent files!

So the commit comment just follows from some general hypothesis that incorrect exit statuses from tools can be exploited in some way by attackers.

<comment><USER12> Looks like that's it, and the commit log was probably just sarcastic then. :)

</comment></comment></comment></comment><comment><USER13> One of my coworkers found a data integrity causing bug that has been around for 11 years.

He and his team lead had no idea how such a bug missed 11 years of peer-QA through all edits on that module / activity.

It was as simple as converting to string and back and hitting an edge case on internationalization with commas vs periods.

<comment><USER14> My favourite decimal separater i18n bug was in a product where we were reading a time dilation factor from a config file. In the default shipping file (which basically nobody ever changed) it was specified as "1.0". We would then read this using (this is in .Net) Double.parse() which honors the users locale if none is specified, so for all users in Europe, and probably elsewhere, this was interpreted as 10 ('.' is a grouping construct and more or less ignored). So the software was running 10x slower than expected.

<comment><USER15> . would be a weird here as well (and we had a share of issues with early online banking systems: Think "I want to pay 10 $currency, let's put 10.00 - and the bank uses the . as a delimiter for thousands, i.e. 1.000,00 / you meant 10,00).

That said, my favorite localization issues stem from CH/Switzerland. Numbers are formatted as 1'000.00 there (someone correct me), which is especially odd:

1) That's a weird decimal separator. DE uses a , and as far as I know FR uses a , as well. I _assume_ IT uses a , - so why is this a . in CH?

2) The ' really kills a lot of naive parsers and causes quite a bit of frustration in other fields (think OCR - some overly fat 1'000 might turn into a 11000 with bad luck/crappy image quality or (marginally better) lead to 1 _000 where_ means 'I think here's a character, but no clue what that might be')

<comment><USER16> Different currency has different conventions?

<comment><USER15> I'm confused.

Yes, different conventions exist (in this case the thread drifted to bugs based on locales, so obviously we're talking about different conventions here). I .. don't understand what you're saying.

(and my original post is missing an asterisk in two places, as in 1?000 as OCR result for example - messed up the formatting in the middle of the night)

<comment><USER16> Sorry - my point was counter to your about DE, FR and IT having the same conventions, so it's odd CH doesn't too. They all use the same currency, whereas CH doesn't, hence why there'd be a different one (?). E.g. we use £1,000.00 in the UK.

<comment><USER17> DE, FR and IT have the same currency only the last 15 years or so. One would expect that they would be using the same conventions because of the history and relationships between CH and all of these countries.

</comment></comment></comment></comment></comment></comment></comment><comment><USER18> I like that the -number option is "obsolete". I still use it.

<comment><USER19> That's pretty funny. I'd say that the majority of the time that I call head or tail, it's using that syntax.

<comment><USER20> Exactly, and I bet that it's not going away any time soon, "obsolete" or not.

</comment></comment></comment><comment><USER21> Here is the diff:

[http://cvsweb.openbsd.org/cgi- bin/cvsweb/src/usr.bin/head/he...](http://cvsweb.openbsd.org/cgi- bin/cvsweb/src/usr.bin/head/head.c.diff?r1=1.17&r2=1.18&f=h)

</comment><comment><USER22> If OpenBSD has anyone young enough, would've been a fun twist to have someone who wasn't even born at the time of the fix make the commit.

</comment><comment><USER23> > for (firsttime = 1; ; firsttime = 0) {

does this line predate the while loop?

or boolean values in C?

<comment><USER24> What's the common way of doing this in C? Is it normally something like this?:

      firsttime=True
      while (True) {
      ..
      ..
      ..
      firsttime=False
      }

<comment><USER25> Depends on the person. There likely is a correlation on what century you learned programming, but certainly one whether you have experience with pascal-ish languages.

People educated in the Wirth way would say "that's not a for loop; there is no way to tell how often it will iterate when it is first entered" and write it as a while loop.

Old-school C programmers seem to think one iteration construct is enough for everybody and like to write any iteration as a for loop, ideally with a few commas and no actual statements, as in the classic strcpy:

      char *strcpy(char *dst, CONST char *src)
      {
        char *save = dst;
        for (; (*dst = *src) != '\0'; ++src, ++dst);
        return save;
      }

(from [http://www.ethernut.de/api/strcpy_8c_source.html](http://www.ethernut.de/api/strcpy_8c_source.html))

Programmers with soe Wirth-style training do at least something like

      char *
      strcpy(char *s1, const char *s2)
      {
        char *s = s1;
        while ((*s++ = *s2++) != 0)
    	;
        return (s1);
      }

(from [http://www.opensource.apple.com/source/Libc/Libc-167/gen.sub...](http://www.opensource.apple.com/source/Libc/Libc-167/gen.subproj/ppc.subproj/strcpy.c))

[If you google, you can find way more variations on this. for example, [http://fossies.org/dox/glibc-2.20/string_2strcpy_8c_source.h...](http://fossies.org/dox/glibc-2.20/string_2strcpy_8c_source.html) does a do {...} while(....) that I am not even sure is legal C; it uses offsets into the source to write into the destination]

From your example I guess you are definitely in the Wirth (Pascalish) camp, beyond even that second state. Classic C programmers would either use 0 and 1 for booleans or #define macros FALSE and TRUE (modern C has true booleans, but that extra #include to get it increases compilation time, so why do it?

I am in te Pascal-ish camp. I like to say C doesn't have a for loop because its 'for' is just syntactic sugar for a while loop.

<comment><USER26> I find the for loop easier to read.

</comment></comment></comment></comment><comment><USER27> Looking through all these comments, my only response is "effing nerds..." <3</comment>


Helping computers fill in the gaps between video frames - <AUTHOR> http://news.mit.edu/2018/machine-learning-video-activity-recognition-0914 <comment><USER2> This could lead to major size reductions in new compression algorithms based on AI that can take frames that are partially filled or even sequences with completely missing frames and fill in the blanks.

</comment><comment><USER3> It's taking everything within me to not scream with excitement (I'm at work). I've never seen activity recognition before, let alone something so detailed!

<comment><USER4> What would you do with this? More accurately, what would you [like to] do with this if you could?

The reason I ask: you obviously see the thousand and one possibilities this enables. I look at it, appreciate that it's ridiculously good and go "...coool.", but the best I can come up with are the So Very Original™ robotics suggestions already mentioned in the article.

The only related thing that this prompts me to think of of is motion analysis in video encoding (a la `mplayer -lavdopts vismv=7 <file>`), but I suspect video encoding requires a different kind of specificity than the one demonstrated in the article.

<comment><USER3> I'd use it for something like processing through video so I don't have to. For example, locally people have been robbing flowers and other things off of graves. I'd like to set up a camera and receive video clips of people when the rob the graves, but not any other time. I don't want to sift through hours and hours of footage every day.

I wouldn't mind something similar for someone stealing a package off of my porch, or a dog crapping on my lawn. I know dogs crap on my lawn, and I want to know which owner isn't picking it up. If I set up a camera to send me a clip of just the dog crapping on the lawn, I'd be much closer to solving my mystery.

Another use could be if crosswalking guards are leading kids across the streets or if cars are stopping past a stop line (or at all).

<comment><USER4> Okay, these use cases are _very cool_ , and I suddenly see a lot more relevance. Thanks very much for the enlightenment; I reread the article with newfound interest, while I sadly ruminated how sad it was that so many new areas of research are announced without any way for me to play with them too. " _Where 's the source code?_" I thought... as my eyes fell upon the last words of the article,

> _"We also open source all the code and models. Activity understanding is an > exciting area of artificial intelligence right now."_

Oh.

A couple of clicks later, in rapid sequence:

1\. Name of author: [https://www.google.com/search?q=Bolei+Zhou](https://www.google.com/search?q=Bolei+Zhou)

2\. Their MIT page: [http://people.csail.mit.edu/bzhou/](http://people.csail.mit.edu/bzhou/)

3\. Linked GitHub account: [https://github.com/metalbubble?tab=repositories](https://github.com/metalbubble?tab=repositories)

4\. This looks like It™!: [https://github.com/metalbubble/TRN- pytorch](https://github.com/metalbubble/TRN-pytorch) (BSD 2-clause license)

(NB. Someone needs to clue in MIT's media department about the existence of the wonderful HTML _anchor_ tag.)

<comment><USER3> Just had some more ideas-- Video categorization. A less-than-upstanding example could be knowing when certain actions are being performed in porn videos by auto-tagging portions of the video. Maybe something less nefarious could be for education, where you pull in automatically for a compilation a bunch of videos of, say, beetles flying-- Could be useful for art, as well. I've seen a recent project that creates an intermediate stick figure for "DeepFake" image generation from one video to another. I think the paper was called "Everybody Dance Now". Maybe for stores to know when someone might be shoplifting.

I think my point is that if you could label activities in video, you could collect datasets more quickly for training other networks as well.

</comment></comment></comment></comment></comment><comment><USER5> Paper? The video is really impressive if it's not just a highlight reel.

<comment><USER6> [https://arxiv.org/abs/1711.08496](https://arxiv.org/abs/1711.08496) is linked in the "Related" section.

<comment><USER5> Thanks, I couldn't find it on mobile.

</comment></comment></comment><comment><USER7> Not that it is any less impressive, the title gave me the impression that it was about Tween frames.

<comment><USER8> Same thing here. The title should be something such as: Helping Computers Fill the Gaps In Machine Observed Actions</comment></comment>


Ask YC: Why have/will you build an startup? - <AUTHOR>

Simply because you can? For the money? For respect? For fun? To change the world? To avoid pointy-haired bosses?<p>I will do it because I can, for fun and to change a little bit the world. <comment><USER2> I've always been dissatisfied with my employee's life. There are various way to get in control, building stuff on your own is one.

Moreover, if I can have a positive impact on average people health with my sport website, that'll be better.

<comment><USER3> What's the URL to your site? I don't see it in your profile.

<comment><USER2> I'm in beta now, but I updated my profile.

If you speak french and wants to access the real site, drop me an email at : firstname.lastname@example.com

</comment></comment></comment><comment><USER4> For the money, the respect, the fun, to change the world, and to avoid pointy- haired bosses (and a few more reasons).

Why would there be a single (or even a handful) of reasons?

I wouldn't believe anyone who says: \- I don't care about the money (even if they were already rich - all the wealthy people I know want to get richer!) \- I don't care about being respected (everyone wants to be respected) \- I don't want to have fun \- I don't want to make the world a better place (for me or others) \- I like to be ordered around by someone less competent than I am

<comment><AUTHOR> I agree with you, I meant which are the _main_ reasons.

</comment></comment><comment><USER5> Because I love building shit.

Because I have crazy ideas that people say "that's the dumbest idea I've ever heard," and I feel compelled to say "fuck you! I'm going to make it anyways..."

Because through every action I take I consider whether it will be a declaration of my independence or an act of conformity.

Because I want to get that paper!

Because it feels good when you build something that people like to use.

Because I want the respect.

Because entrepreneurs create the world, and everyone else just lives in it.

</comment><comment><USER6> Because it's dumb not to. For me there's very little difference between doing something I love and work. Working long hours devoting intelligence and passion to something you don't own a part of seems like wasted effort. I no longer want to be a sharecropper.

I've also realised my brain is punishing me for not. I've had many ideas, the better (I think) it is the more I can't stop thinking about it. Strengths, weaknesses, market, how, competitors, growth strategy, ... I find I can't sleep, the insomnia won't stop. I tend to resolve this by throwing my brain a trinket and throwing myself into my work (coding). I think the only way this is going to be resolved in the long term is to actually do something about these ideas. I've hit a point where I've got to know. I think if my brain is either satiated or knows it's ideas aren't actually that good it will stop keeping me up and scheming.

</comment><comment><USER7> I have to ask - for those of you who work full-time at a company- what do you guys think of the Intellectual Property/Employee work agreements (that you probably signed on your 1st day) - are you worried that if your idea is good enough the company will claim ownership of your work, your idea even if you (wisely) did not work on it during company time or equipment?

I am working to sell (not financially, but buy-in) a startup-type project to my company. It might involve developing the prototype and emotionally selling the prototype to key individuals. But if that happens, then I'll be able to work on it officially.

<comment><USER3> I don't like those agreements, but luckily I have an employer that was willing to rework the agreement with me to a way that favors both of us. We changed the wording to cover that which relates to actual work done for my employer, in effort to lessen the likelihood of them trying to claim something unrelated to their business. Our agreement explicitly assigns to me the ownership of the project I began before taking employment with them. Much better than the "we own you and your mind" approach.

</comment></comment><comment><USER3> For the flexibility of schedule, as a better test of my abilities than landing a high-paying job, and to change my tiny little piece of the world.

It's not revolutionary, but I enjoy the complexity of online stores, so I'm working on a solution that addresses: Easier customization for 3rd- parties/customers (in terms of time and knowledge required); Prevent upgrades from breaking those customizations; and some other things.

</comment><comment><USER8> For me, its 'Why not?' The way I look at it, big companies will always be there, and if you realize that a startup isn't for you, there will be a ton of companies waiting to hire you. But the experience of building something you are truly passionate about, filling a need that exists, without the politics of a big company is something that I don't want to pass up.

</comment><comment><USER9> There's no better feeling than solving a problem/need, and having people thank you for doing it.

</comment><comment><USER10> Compared to what? Obviously we think it's the best thing to do right now, so it has advantages over every other possible job. Name a job, and I'll tell you why I'm not working there.

</comment><comment><USER11> Because I wanted secure and efficient online backups, and nobody was providing them (at least, not up to my standards for security).

<comment><USER12> Did you look at Jungle Disk?

<comment><USER11> Jungle Disk didn't exist when I started working on this; but it doesn't satisfy my security requirements anyway.

</comment></comment></comment><comment><USER13> Because I've said, "Who wrote this sht?!?" 342,864 times.

Every time I had to maintain someone's else's crappy software, I've said things like:

"I can do better than that. Way better."

"Why would anyone buy this &#@^&^?"

"People shouldn't have to suffer with this."

"If other hackers only knew how to x, y, or z, then it wouldn't have to be this way."

"I really oughta quit working on other people's crap and do it right."

I'm finally putting my money where my mouth is. Money and employee status have little to do with it (although they're nice). Now is my chance to get these great software ideas out of my head and into other people's lives.

</comment><comment><USER14> A good reason for a startup is because there is a large gap in the market which currently exists, is emerging, or is imminent.

</comment><comment><USER15> For me, it's not the money or prestige, it's because of how good the constant desire and pressure to innovate feels.

</comment><comment><USER16> This time, to solve a problem that I've wanted to see solved for a long time. Hope I'm not the only one.

</comment><comment><USER17> Because I would rather work to make myself rich then to make some shareholder of a corporation richer.

</comment><comment><USER18> fixing common problem.

Shoe polish selling nice cars with phone numbers.

I am making a way to connect those people with buyers in a nicer way including a website. I can beat ebay and local newspaper.

</comment><comment><USER19> Because I can. And because it seemed like a fun thing to do...</comment>


The $23,698,655.93 Book (2011) - <AUTHOR> http://www.michaeleisen.org/blog/?p=358&

<comment><AUTHOR> This was posted 1400 days ago ([https://news.ycombinator.com/item?id=2475854](https://news.ycombinator.com/item?id=2475854)), but I re-remembered it today and thought it was worth posting.</comment>


Hayao Miyazaki upsets some fans and angers conservatives with his latest film - <AUTHOR> http://www.economist.com/news/books-and-arts/21582490-celebrated-director-upsets-some-fans-and-angers-conservatives-above-fray

<comment><USER2> > Conservatives have responded by telling Mr Miyazaki to stay out of politics.

The nexus of creative entertainment and politics alienates many. If one of your well respected entertainers makes a political statement that you don't agree with it can come as a shock. This attitude of "Stay out of politics and stick to entertaining us you court jester" is present probably in every country, and the most saddening because it has an implicit attitude of "I'm allowed to state my opinion, but you are not."

<comment><USER3> Generally, it's dismaying to discover that someone whose work you respect holds worldviews that you disagree with. An example that many readers of HN will relate to is the one of Orson Scott-Card, whose books are pretty great, but who holds some pretty outdated views towards homosexuality*

*: [http://www.huffingtonpost.com/john-becker/orson-scott-card-h...](http://www.huffingtonpost.com/john-becker/orson-scott-card-homophobia_b_3569146.html)

<comment><USER4> His books are entertaining, but "great"? Speaking as someone who suffered through Speaker and Xenocide and couldn't get past the first chapter or so of the first Thomas Covenant book, I beg to differ.

<comment><USER5> (The Thomas Covenant series was by Stephen Donaldson by the way)

Card definitely has his own style with his work. Whether it's great or not is dependant on the reader - [http://one-starreviews.tumblr.com/](http://one- starreviews.tumblr.com/) gives some fantastic examples.

If you can, try the Seventh Son series though. easier read than Speaker or Xenocide, and very interesting IMO.

<comment><USER4> Whoops! I meant Alvin Maker. Well, I'm not a huge fan of Donaldson either, for whatever that's worth.

</comment></comment></comment></comment></comment><comment><USER6> Perhaps some casual Miyazaki fans were confused about why Grave of the Fireflies ([http://en.wikipedia.org/wiki/Grave_of_the_Fireflies](http://en.wikipedia.org/wiki/Grave_of_the_Fireflies)) was not mentioned in this article. It was animated by the same studio but was not written or directed by Miyazaki.

<comment><USER7> Thanks! This was my first thought. One day I'll have the courage to re-watch that movie; it takes on a slightly different tone when you have a son and daughter about that age...

</comment></comment><comment><AUTHOR> > A SOMBRE exploration of love, responsibility and death, "Kaze Tachinu" ("The > Wind Rises") is being described as Hayao Miyazaki's first animated film for > adults.

I have been a fan of Miyazaki since childhood and am looking forward to what he can do with more adult themes.

</comment><comment><USER8> A trailer for those interested: [http://www.youtube.com/watch?v=DthK9nX3UQY](http://www.youtube.com/watch?v=DthK9nX3UQY)

</comment><comment><USER9> Well. There were some spoilers.

<comment><USER10> That sucks. Thanks for taking one for the team.

</comment></comment><comment><USER11> Princess Mononoke a film for children? I'd say it's a touch too bloody for most parents to deem it appropriate for their children.

<comment><USER12> I wish I had seen it as a kid. It really has a lot of depth in it, a lot of empathy. Self-sacrifice. Not showing the world as good/bad but as the complex system it really is. Not giving up. A lot better than your average saturday morning cartoon. Kids need to learn these things (not by watching cartoons necessarily, that's just the carrier), or they might end up as adults with a too simplistic world view.

Of course, for the younger children, Spirited Away might be a better choice. And Totoro.

<comment><USER13> naruto never gives up.

</comment></comment></comment><comment><USER14> A very poor article on the topic. I saw the movie last week in Japan, and it was alright, but not extremely good either (But since I hated the stupid "Ponyo" movie, it could only be better than the previous one...).

It's very difficult to make a movie about an engineer who does not fly himself (and therefore where there is not much action involved). Conveying his process of thought was near impossible and most of the time you end up seeing him scratching stuff on paper in the movie, or making paper airplanes. Mmm. This could have been better.

The love story felt very pointless (and almost fake), compared to his other movies as well. And since the movie was set in a realistic setting, there was not much of the imaginative fantasy that I like from his previous works.

I liked some other aspects, like how he refers to the cultural exchanges between Germany and Japan before the War, and how Japan felt that they were clearly behind in terms of technology vs Junker. That was insightful and well done.

All in all, an OK movie. I won't go and watch it a second time, however, I don't think it deserves a second viewing. Unlike most of his other movies that I watch from time to time.

Funny trivia, that you may have heard of: the director of Evangelion (Anno Hideki) was chosen to dub the hero's voice in 'Kaze Tachinu'. However you can clearly see he's an amateur and he does not put much passion in his lines. Maybe that was on purpose. You get used to it after a while, but it really feels like he's reading.

</comment><comment><USER15> During a visit to Japan, I had the opportunity to get along to the Ghibli Museum in Mitaka[1]. I've enjoyed the Ghibli/Myazaki stuff that I have seen, even though my tastes generally lean towards the Seinen side of things. But the point I wanted to make here is that the Ghibli Museum was totally awesome and I'd recommend it to anyone with any interest in manga or anime.

1\. [http://www.ghibli-museum.jp/en/](http://www.ghibli-museum.jp/en/)

<comment><USER16> I also visited it a few years back.

It's no Disneyland but there's a wholesomeness to it. It's not just about money, but also about humanity.

I really love Ghibli films and want to support the studio.

</comment></comment><comment><USER17> At what point would conservatives have been happy with any of Miyazakis films?</comment>


ResearchCoders: Find ideas from the scientific community for coding projects - <AUTHOR> http://www.researchcoders.com/ <comment><USER2> There only appears to be a single research paper looking for an implementation. I click to read, it takes me to google scholar. I click the article, it takes me through to a pay site, where I must pay $15 to read the article...

<comment><USER3> I've been using the Unpaywall[0] extension, and it's been a godsend. It'll detect if the webpage is about an academic paper, and it'll display a green icon on the side to click on which will take you to a free, legally open distribution channel.

[0] [https://unpaywall.org](https://unpaywall.org)

<comment><AUTHOR> Thanks for sharing, really useful tool.

</comment></comment></comment><comment><USER4> Thoughts: \- The call to action for programmers is unclear, there is only one paper on the site and it's below the fold on my laptop and less obvious than the rest of the stuff. Put a big button on the paper like you have on the Read More. Also move the "Communication" stuff below the main point of the site, eg the table.

\- Research Title looks like the start of the footer.

\- Reading the premise for honeypot passwords I have no idea what would need to be implemented to show it useful.

\- I have no idea of what you're looking for for proof of concept, or is this just a "take this paper and do what you want with it, I thought these papers were interesting."

\- It'd be nice to be able to pin or remove articles eventually when you have a lot. Categories and tags as well.

<comment><AUTHOR> Thanks a lot for your suggestions. Your notes will be considered.

>> I have no idea of what you're looking for for proof of concept, or is this just a "take this paper and do what you want with it, I thought these papers were interesting."

Yes, it is "take this paper and do what you want with it, I thought these papers were interesting." :-)

</comment></comment><comment><USER5> Great idea! I look forward to see more research papers to help. I think that this project addresses a real need, often undervaluated in the academic research. This is the only project active in this space?

<comment><AUTHOR> Thanks a lot. Sure, more papers will be added in the future.

<comment><USER6> Maastar - slightly adjacent idea. Research papers sometimes involve data through which the hypothesis is made, getting access to this data can help understand hypothesis better. It can also fuel other ideas for people. Would be great to also have workspace where people can engage in active data- sleuthing through these shared spaces and workbenches.

<comment><AUTHOR> Thanks for your suggestion. May you give me an example of such kind of papers.

</comment></comment></comment></comment><comment><USER7> I read the paper and it's very interesting. I always wander how would I know if my DB is compromised and this provides a solution, i don't know and I am not capable to tell if this is a great solution or not but it makes sense.

As a note to the paper for the 2.1. Honeychecker; It's not that efficient to have a second system that stores what the correct password is, it's just a waste of resources. A simple and more robust solution could be to have a checksum from a field, let's say the username, that generate a number from 1 to 5. That way you can tell which password is the correct one. The attacher must have access to the code to know the checksum formula and how that applies to the password list. I guess this is much better than the suggested solution.

<comment><AUTHOR> That's an interesting idea, can you please share it in "ideas" section in ResearchCoders on the same page of the research.

</comment></comment><comment><USER4> In general where does one go to look for these types of papers, a stream of research, is that what journals are for?

<comment><AUTHOR> You can use Google Scholar for searching if you have specific topic in your mind. Under each paper in the search results you can find two links, they are "Cited by ..." and "Related articles", you can find more papers about the topic by using these two links. The link of Google Scholar is [https://scholar.google.com/](https://scholar.google.com/)

SemanticScholar is also good: [https://www.semanticscholar.org/](https://www.semanticscholar.org/)

<comment><USER4> What if I just want to learn about random shit? The main reason I read him is to learn about new things and things that might be big in 5 years.

</comment></comment></comment><comment><USER8> very debatable that the world is a better place after the development of distributed processing engines.

Source: I'm a data engineer and almost every application I've seen in production made the world a worse place.

The manifesto is extremely naive and it's not a manifesto. A call to action with an ethical goal doesn't make sense without an ethical framework to decide what to implement and what not. Otherwise it's just implementation for the sake of implementation, nothing different than what is already done by random projects on GitHub.

<comment><AUTHOR> I appreciate your participation, will consider your notes. Thanks a lot.

<comment><USER9> I think you can make your manifesto page 'more like a manifesto' by starting it with a sentence something like

"Our goal in ResearchCoders is to draw the attention of programmers to research that has not yet been realised and urge those programmers to implement practical systems that realize the ideas of that research".

This is based on one of the existing sentences.

Actually the wikipedia definition [0] of 'manifesto' is fairly loose: "A manifesto is a published declaration of the intentions, motives, or views of the issuer, be it an individual, group, political party or government". By that definition, you have a manifesto.

[0] [https://en.wikipedia.org/wiki/Manifesto](https://en.wikipedia.org/wiki/Manifesto)</comment></comment></comment>


New York City lockdown reduced coronavirus transmission by 70 percent - <AUTHOR> https://www.washingtonpost.com/health/2020/09/15/virus-nyclockdown/ <comment><USER2> Maybe, but people don't realize that the subway was open during the entire lockdown. I would be extremely skeptical that the lockdown did anything at all since it looks more like New York achieved herd immunity (or close to it) rather than it reduced any transmission.

I've also not heard many people say lockdowns prevent transmission, rather they flatten the curve, but you still get the same number of people getting the virus. The flattening makes the amount at any one time much lower, so I would still be very suspicious of someone who said they were able to prevent people from getting it. Unless they are talking about a very specific group of people such as people in nursing homes.

</comment><comment> just-juan-post > (by the) New York City Department of Health and Mental Hygiene

and it also

> has yet to be peer reviewed

Is it possible that governor Cuomo would push for a study like this in order to increase public perception of his credibility as a leader during Covid 19?

Does NYC have any fortcoming studies about the (thus far) economic impact of the lockdowns?</comment>


twitter.com is down - <AUTHOR> http://www.twitter.com <comment><USER2> Twitter goes down regularly (insert innuendo joke here haha). It's usually short-lived downtime however, just like this time. It seems fine to me.

</comment><comment><USER3> The website is, though I seem to be getting new tweets through twitter clients like Tweetdeck.</comment>