Ask HN: Do you know people behind SmugMug? - <AUTHOR> SmugMug has acquired Flickr and they have found that to make it work, they must step back from the Flickr generous unlimited storage offer and delete photos that exceed their offered new quota of 1000 images starting from the least recent ones.
This is understandable. What they seem not to understand is that Flickr is a database  of very specific historical information about the photography itself.
Many people joined Flickr when the film photography was still a thing and therefore there are many pictures that show the behavior photographic films that are not produced any more. These are pictures in greatest danger.
Beside that Flickr contains large amount of labeled samples of specific historical lenses and other very specific information like historical camera repairs.
It is a huge cultural value that they are threatening to destroy and I am afraid that the management just does not get it.
So please, if you happen to know the right people, help. <comment><USER2> This has been pretty widely discussed elsewhere, including Twitter, and in part was the reason SmugMug changed that policy at the last minute to include preservation of freely licensed photos, and deceased users' accounts: [https://petapixel.com/2019/03/09/flickr-will-save-all- creati...](https://petapixel.com/2019/03/09/flickr-will-save-all-creative- commons-photos-deceased-members-accounts/)

Likely the best way to "save" free accounts with more than 1000 photos that haven't yet been deleted is to use the new option to gift them a Pro membership, which apparently doesn't require the account's consent.

<comment><AUTHOR> Yes, it is something but I am not sure that this is enough.

There are accounts that contain important information and I could not see how the owners of these accounts would change the license.

There are users that

Giving pro membership is the option I am going to use but this is not perfect either because the amount must be paid upfront and is relatively large - $50.

I could support up to 10 accounts with the monthly subscription but I could not pay $500.

The pro membership only lasts for a year and then we are back in the same place.

<comment><USER2> You could promote those accounts to @FlickrJubilee, which at one point was taking names and donations: [https://twitter.com/flickrjubilee](https://twitter.com/flickrjubilee)

Archive Team had a Warrior project to preserve at least freely licensed photos, and they have an EFnet IRC channel #flickrfckr where you might be able to provide accounts for further archiving: [https://www.archiveteam.org/index.php?title=Flickr](https://www.archiveteam.org/index.php?title=Flickr)</comment></comment></comment>


GPUs are a dying breed  - <AUTHOR> http://www.theinquirer.net/gb/inquirer/news/2007/12/18/gpus-dying <comment><USER2> Oh please. It's not about pixel resolution. It's about the amount of realism in each pixel. Pixar and FX houses render frames at the same 1080p resolutions - but they do them at over 2-10 hours PER FRAME. The GPU is getting better, but the artistic and realistic quality of images will probably always be in front of the technology.

You could make this same, lame argument about CPUs, but we've always used those limits too.

<comment><USER3> But GPU has nothing to do with those rendering techniques that you mentioned in Pixar case. You don't use OpenGL pipeline on a GPU card to render a Pixar movie, you did all tricks in non realtime offline rendering to make them beautiful.

</comment></comment><comment><USER4> To some extent, he's right that GPU processing power will get to a point where pumping more pixels will not be discernible to the human eye. But that doesn't mean that there aren't more transformative steps you can insert in rendering computer graphics to make it look more realistic. Convincing fluid and smoke dynamics come to mind.

</comment><comment><USER5> The work on general-purpose computing with GPUs (e.g., protein folding) has only begun. This article is either trolling or shortsighted.

It's like looking at the web in 1995 and saying it's dying because there are only so many pages you can fit on a "what's new" page (at one point there were so few webpages that you could list all of them on one page).

GPUs are very exciting and a major reason why desktop computing will continue to matter outside of business applications.

</comment><comment><USER6> The thing he doesn't get is that you can always have more smaller polygons, rendering a single 3D cube is trivial in any resolution/framerate you may want, the problem is that polygons interact/intersect and that takes some real computing power.

Which reminds me of a UF cartoon from my youth: [http://ars.userfriendly.org/cartoons/?id=20000615&mode=c...](http://ars.userfriendly.org/cartoons/?id=20000615&mode=classic)

</comment><comment><USER7> GPU's are getting more and more programmable, while CPU's are getting more and more cores and streaming instructions.

It's getting harder and harder to tell them apart and this means a typical PC more and more looks like two general purpose computers that are talking to each other over the PCI bus. Which is kinda dumb.

</comment><comment><USER8> My eyes started glazing over when he started doing math. Did he calculate the amount of processing power for, say, a room sized, 6-sided monitor, or for a monitor with 1000s of layers in the Z-dimension? Because, it seems like those would take quite a bit of power...

</comment><comment><USER9> Umm, they don't make GPU's for 30 inch monitors yet. Resolution is always increasing. How long until a GPU can run a full wall display at 300DPI?

I think they've got a lot of work ahead of them.

</comment><comment><USER10> 640K ought to be enough for anyone!</comment>


Show HN: 4square & 7 years ago: What were you doing a year ago? - <AUTHOR> http://4squareand7yearsago.com/

<comment><AUTHOR> A couple of friends and I created an app during the foursquare hack day that sends you an email of what you were doing a year ago.

A nice little hack to remind you where you were. Part nostalgic, part discovery (blackout nights), totally awesome :)

Enjoy!

</comment><comment><USER2> Clever.</comment>


Microsoft accidentally gifts pirates with a free Windows 8 Pro license key - <AUTHOR> http://www.extremetech.com/computing/141052-microsoft-accidentally-gifts-pirates-with-a-free-windows-8-pro-license-key

<comment><USER2> I'm not sure why this is gifting "pirates" only. Doesn't this work for people who legitimately bought Windows 7 too?</comment>


Ask HN: eBay but Mostly for Developers? - <AUTHOR> Developers use many devices (e.g. keyboards, mice, monitors, etc.) and sometimes the costs are too high. (e.g., Apple's Magic Keyboard is $94). Do you know of any platform that connects developers to potential buyers who are interested in their gadgets? There are sellers on eBay, etc., but I'd trust a fellow developer more than them. <comment><USER2> Let's see, you might pound on a $100 keyboard for two years, maybe 4000 working hours, that is 2.5 cents an hour.

If that's the way you think you aren't certainly valuing yourself and the only way I would count on you valueing me is if I use force.

</comment><comment><USER3> Some forums have marketplaces. I haven't looked for any technology related ones, so I can't give you any examples.

I use a keyboard that costs <$20, a 13 year old laptop,and 8 year old desktop. I'm cheap and don't upgrade unless there's a compelling reason.

</comment><comment><USER4> /r/mechmarket looks like a working model of this but only for mechanical keyboards

</comment><comment><USER5> Choose:

\- A decent, ergonomic keyboard

\- Reduced productivity, pain/discomfort, physical therapy, wrist brace, etc...

<comment><USER6> What are some decent ergonomic keyboards? I've been using "60%" keyboards with mechanical switches, can't go back to the cheap rubber switches but I need a new kb and I'd like something more ergonomic.</comment></comment>


Guys, unless you are hot don't waste your time on Tinder - <AUTHOR> https://medium.com/@worstonlinedater/tinder-experiments-ii-guys-unless-you-are-really-hot-you-are-probably-better-off-not-wasting-your-2ddf370a6e9a <comment><USER2> "Guys, unless you are hot don't waste your time on any Internet dating site."

There, FTFY.

</comment><comment><USER3> So are you telling me that I need to be attractive?</comment>


Show HN: Eulerian Video Magnification for Python - <AUTHOR> https://github.com/brycedrennan/eulerian-magnification

<comment><USER2> Very cool, man. I'm going to try this out sometime tomorrow.

</comment><comment><USER3> Impressive!</comment>


Amazon's Dash Smart Shelf can automatically order new office supplies - <AUTHOR> https://www.theverge.com/circuitbreaker/2019/11/21/20974790/amazon-dash-smart-shelf-order-office-supplies-automatically-small-businesses <comment><AUTHOR> I'd love to have a version of this I could use to manage my own inventory, and not be linked back to Amazon. Has anyone had experience with a scale like this?

I imagine a simple load sensor hooked up to a microcontroller and a wifi board would be a simple implementation.</comment>


Ask HN: Making $3000+ residual income monthly? Any tips/advice for a beginer? - <AUTHOR> Hello HN. I'm a self-taught developer (currently doing an Msc in CS). I mostly do freelance web development. My UI skills aren't good enough to label myself as a full-stack developer but I'm getting there. However I'm comfortable with server side development (Python and Golang mostly), client/server side Javascript and I also have enough system admin knowledge to run my own server (metal/VM).<p>Are there any revenue streams I could tap into with my current skill set that would enable me to generate (eventually) recurring monthly income of $3000 and above. I don't mind putting in the work/time to build it up. <comment><USER2> This is totally possible. The general advice is to solve a problem. But to be a bit more specific, I will say the following:

\- Create a product in a niche and focus on finding customers within that niche. For a goal of $3000/month, it is surely possible and not too crazy

\- Don't just rely on yourself even though there are many 1 man success stories here on HN. I would say get at least 2-3 trusted helpers even if they are part time and slowly delegate the not so critical aspects to them while you still focus on the core. For example, if you a SAAS product, you could still do coding + customer support while you could delegate some of the other admin stuff including some customer support to someone else. This will give you leverage.

</comment><comment><USER3> I've asked a similar question, and the responses are all the same. I think anyone with a specific answer is always going to "play their hand close to their chest" to prevent competition. That being said, look at what businesses are paying for, and try to understand the general lack of knowledge out there.

I have a client, now, that is paying me to build a custom CRM for his business. The specs keep changing, and I just keep delivering. In the end I think he'll spend $50k+ to get his own version of what's already available. So look deeper into that concept.

What do businesses need to do better/more efficiently to make more $ or save more $: track customers (lead follow-up), close sales, find customers, track hours and costs, customer lifetime value and customer acquisition costs...are just a couple of examples of things that you could improve on. Then literally go to these businesses and show them your product, offer it for free to improve it, then start selling it.

Bottom line is this: you're going to have to actually speak with people to find out what they want so you can give it to them. After that starts to take off, then invest in digital marketing using real experience as a guide.

</comment><comment><USER4> 1\. Pick up a tiny niche based on

(a) target audience already pays for tools online

(b) target audience is easy to find online - there exists at least one forum targeting this niche

(c) niche is so small that it is not profitable for most companies to go after

(d) you are passionate about the niche or already have some link to it (know enough people in your social circle)

2\. Figure out how you will market to your audience. Spend tiny amounts of time/money on each channel to test whether you could gain traction through any one.

(a) Posting on forums

(b) Content marketing

(c) SEO

(d) Paid acquisition

3\. Research on existing tools and competitors in the niche. Focus research on

(a) lack of functionality in the tools provided

(b) tool is too generic for the niche

(c) they are not using a specific marketing channel that you think would work very well

4\. Out-compete your competitors on the following

(a) Build a better tool

(b) Do better marketing

(c) Provide better customer support

Important things to keep in mind

1\. Never compete on price

2\. Do marketing before product development. For e.g. if your main channel is content marketing, start writing content before you build your product. If it is forum posting, start posting on multiple forums and gaining credibility there before you think of your product.

</comment><comment><USER5> It's all about finding the right (simple) idea, and executing quickly.

</comment><comment><USER6> I'm actually on the same path, I've built a SaaS website feedback tool, which started 4 years ago as a side project, but since Sept this year I've been working on it full time, hoping to reach around $3,000 MRR (currently at $900)

So far it's working, I'm way ahead of my target 7% month on month growth, so I'd recommend doing something similar - build a SaaS app that you can manage by yourself, and invest as much time as you can in learning marketing.

If you're interested I'm doing a completely transparent blog series about my progress - [https://blog.bugmuncher.com/2015/10/22/from-side-project- to-...](https://blog.bugmuncher.com/2015/10/22/from-side-project-to- profitable-start-up-part-1.html)

Good luck!

<comment><AUTHOR> Thanks for sharing this, great stuff! Good luck to you too!

</comment></comment><comment><USER7> The problem with most Saas problems is capital. If most investors suggest a LTV of 3x CAC and if your average customer is $30 per month and your LTV is $360(3 yrs) then you need $120 per customer or $12,000 to invest in advertising to match what other Saas companies are doing to reach your goal.

<comment><USER8> Care to explain more? Thanks

<comment><USER7> I take back what I said. To get to scale you probably need advertising to get there. The more I think about it though, you probably could get to $3000/mo with SEO.

</comment></comment></comment><comment><USER9> Solve problems for small businesses, they have lots of them. If you can save a business owner time or money, they'll give you money!

<comment><USER10> Sounds reasonable. How to find small businesses who have problems?

<comment><USER11> Personally I got connected to a lot of small businesses with problems by working at a coworking space. Found clients, but also providers there, all in a friendly atmosphere.

Otherwise, you can try to do some networking at events targeted to business owners...</comment></comment></comment>


Making Profits on the Captive Prison Market (2016) - f-securus https://www.newyorker.com/business/currency/making-profits-on-the-captive-prison-market <comment> f-securus I just received a phone call from my mom who was disgruntled that the county jail now requires $20 to make a visitation appointment from home. The alternative is to drive almost an hour away to make an appointment for free at the facility, but not a same day appointment (so what previously took one evening, now takes two and a week of planning). For somebody with low income it has become difficult to do something that was traditionally done in one evening with no fee. Now they are charging a premium for 'convenience'. I am dumbfounded that this behavior is allowed. Anti consumer monopolies are totally allowed within jails.

The facilities that use these 3rd party services receive a percentage of the fees. So you create conflict of interest. Higher recidivism rate = more money for the jails.</comment>


Experiments with Ruby and Go - <AUTHOR> http://jorin.me/textstat/ <comment><USER2> Two things jumped out at me when I switched from Ruby to Go

\- Go speeds up my workflow since the compiler catches many of my errors. When I write Ruby, I'm about 75% confident it will be right first-time. With Go, that's about 95%.

\- I ended up thinking about every possible error. With Ruby, edge-cases would often only crop up after a few weeks of running the code in production.

<comment><USER3> > I ended up thinking about every possible error.

Exactly. In Go you can't just wrap code in a try/catch block and not deal with the fall out. You can ignore errors with _, but you still have to explicitly write out _, so you visually see what you're ignoring.

I think this is Go's simplicity is actually helpful. It feels like boilerplate at first, but there is something to being _forced_ to handle edge cases sooner rather than later.

<comment><USER4> It's not just the try/catch thing. Ruby code can have a syntax error in a conditional that is rarely true, which may crop up in production from time to time. I've seen it happen many times, including in some popular Ruby libraries. A compiled language would have caught that.

<comment><USER5> "Ruby code can have a syntax error in a conditional..."

No, it can't. If this is something you've seen "many times", would you mind providing an example? Show me a program that Ruby tries to execute without having been able to parse it.

<comment><USER6>
        if foo.something
          foo.instance_eval "SYNTAX ERROR"
        end

I know any form of eval is sort of cheating...

But perhaps what he meant was not a syntax error, but things like:

        if foo.something
          foo.something_misspelled = bar
        end

Which isn't technically a syntax error, but that code is invalid in a statically typed language.

</comment></comment></comment></comment></comment><comment><USER7> I'd highly recommend 7 Languages in 7 Weeks by Bruce Tate.

It doesn't have Go, but it walks you through Ruby, Io, Prolog, Clojure, Scala, Erlang, and Haskell. It will give you a wide basic understand of why design tradeoffs have been made.

</comment><comment><USER8> Totally have a look at Haskell next. It takes a while, but it's worth it :)

</comment><comment><USER9> Java is not that bad too: [https://gist.github.com/anonymous/b5c2b77545157a89d0b9](https://gist.github.com/anonymous/b5c2b77545157a89d0b9)

<comment><USER10> Thank you for sharing, looks awesome! Can't believe this is Java code! I definitely need to checkout Java 8 at some point :)

</comment></comment><comment><USER11> It's funny that many people don't distinguish between language and standard (or default) libraries.

<comment><USER12> Not sure what you're talking about. Go provides No "methods" for arrays.

You have to remember all these tricks :

[https://github.com/golang/go/wiki/SliceTricks](https://github.com/golang/go/wiki/SliceTricks)

You can't even wrap them into functions or you'd have to write type assertions everywhere.

Now,you could define a custom Array type with methods, but goodbye type safety. It's funny how sometimes Go works better as a "dynamically typed" language than as a statically typed one.

Ruby on the other hand provides loads of methods for every single "core" type.

<comment><USER13> This is my biggest gripe with golang; I want to be able to write functional extensions for the blessed generic types (slice, map etc.), but can't. Until we can do things like this, or implement our own generic types, golang will be a niche language.

<comment><USER14> I don't think so. What you're saying is you want to apply a niche concept (fp, I know it's getting traction, but still pretty niche in the business world) to an OO language and have a hard time doing that. Golang is niche right now too, but the lack of functional ability is probably not going to to hugely affect anything.

<comment><USER15> I'd disagree that FP is niche; the concepts are used throughout business, and more and more back ends are being written in an FP language. Front ends using JS are being written more and more in an FP style as well.

</comment></comment></comment></comment></comment><comment><USER16> anyone else actually found the go code easier to understand than the ruby one liner combining sort, maps, reverse a funny "&" syntax (of which, as a non- ruby developer, the meaning isn't really obvious) ?

<comment><USER17> Well, it's not very meaningful to compare a good example of something with the bad example of something else (one lines are generally considered bad practice also for this reason).

If that line would be "optimized for readability", there would be at least one or two intermediate variables.

<comment><USER7> I would disagree and say the functional style is perfectly fine in its one- liner form. I'd even say it is preferable in many cases over using intermediate variables. Why? Because naming is hard and more often than not I see the intermediate variables named things like "sorted_histogram" or "sorted_reversed_histogram" which is hardly any clearer than "@histogram.sort_by{..}.reverse" while being much more verbose.

Intermediate variables in functional languages are largely used for memoization. Occasionally are they used for self-documentation but generally I see "people.map(&:full_name)" over "full_names = people.map{ |p| p.first_name + ' ' \+ p.last_name }".

<comment><USER18> For me the debugger tends to drive if I use one liners often or not. In C++ or C# it tends to be easier to step thru code if it's broken out. In Ruby I think it's probably less common to work with a source stepping debugger so it feels more natural to write nice functional one liners that do a lot.</comment></comment></comment></comment>


The 5G BlackBerry could be 'the most American-made phone out there' - <AUTHOR> https://www.engadget.com/5g-blackberry-keyboard-global-flagship-american-made-peter-franklin-175112005.html <comment><AUTHOR> They really should go after Apple for its misleading "DESIGNED IN CALIFORNIA" (and in tiny letters underneath "made in china").</comment>


Ask HN: Protecting your innovation from the big guys - <AUTHOR>

First off, excuse the cryptic nature of this post, hopefully all will become clear.
I have a profitable startup started fromn scratch with no investment in a competetive, but relatively stale in terms of innovation, industry.  We are a tiny player competing for business with plenty of big guys with massive budgets.  We're not even close to being able to compete on advertising or marketing for example.
What we have done now though is be pretty innovative and developed a unique service that will make people's lives who use these services that little bit better... a lot better in fact.
We've been able to build this service (and it is great!), but to be honest I am scared of launching it because:
1.  We simply dont have a budget for marketing or or contacts for doing a big launch.
2.  Our service is pretty innovative, but it wouldn't take too much to copy.
3.  We're worried we will launch, the big guys monitoring the industry will see the product, launch their own in a few months and drown us out with their massive marketing budgets.
I guess the question is, how can we protect our product or service and avoid the above scenario?
Thanks <comment><USER2> Big guys in a mature industry won't launch a similar product in a few months. First, they are monitoring the other big players, not the small fish. They won't even notice you before they start losing customers. Then it will take a few months for them to get all the approvals to hire a renowned firm to build the product for them, which, unless it's something you made in a couple of weekends, will probably take the better part of one year to get in the hands of their customers. EDIT: that's my general personal experience, but maybe you have better information on your industry. In that case you can try to apply for a patent, but I think you have more important things to spend your time and money on.

<comment><AUTHOR> Thanks for the reply. My thoughts on patents are pretty much the same, its probably not the best use of time and money.

Feels a risky strategy to just rely on them not noticing. I know a couple of competitors have signed up for our service and following on twitter etc.

<comment><USER2> Every company with more than a few hundred employees has enough projects in its pipeline for a couple of years. Copying an unproven product, no matter how great it looks, probably won't get pushed to the front of the line. Now, reversing the question, what if one of these companies launches a product similar to yours before you do?

</comment></comment></comment><comment><USER3> Mate, if it "wouldn't take much to copy" somebody is going to copy you. It _will_ happen. So don't worry about it and launch.

Launch the best damned product you can, and provide the best customer service you can.

This is just a little bit of stage fright before the curtain is about to be pulled up ... fear not, launch!

All the best.

P.s. send us the URL, I'd love to see it

<comment><USER4> One big worry for me is somebody coming out with a free version - or worse, a bundled version.

I usually cheer up after remembering what proportion of the software development job pool can't figure out a linked list.

</comment></comment><comment><USER5> well, i guess the best is to be insanely fast, cause the "big player" have mostly the issue that their inner bureaucracy takes time. Second is the already mentioned thing that you'll be to small to notice in first, so you can polish your service before the Battle begins. Last but not least before they try to copy you, they'll try to buy you ^^

</comment><comment><USER6> The key, I believe, is customer service and attention to your users. Follow up every single email on a personal basis. Big companies can never compete on customer service and people love feeling that they are being listened to - encourage direct feedback and engage your customers.

</comment><comment><USER7> Start small --> Heavily test your product --> Fine tune and perfect it to the point of your users falling in love with it --> Big bang (launch big, grab land.) --> Excel in product design and customer service --> Don't worry about competition.

Good luck!</comment>


Algorithmia raises $25M Series B for its AI automation platform - <AUTHOR> https://techcrunch.com/2019/05/14/algorithmia-raises-25m-series-b-for-its-ai-automation-platform/ <comment><USER2> Hey, this is Mike from Algorithmia. We'll have team members answer any questions you may have about machine learning infrastructure here. Feel free to ask.

</comment><comment><USER3> Congrats

</comment><comment><USER4> So excited</comment>


The Cheese Board Collective - <AUTHOR> http://priceonomics.com/the-cheese-board-collective/

<comment><USER2> The Cheese Board just kills. Lines around the block. I'd like to think that their lazer-focus for their product (one type of pizza a day), is aligned with their great success.

<comment><USER3> It's a big part of the appeal. It's hard to get fresh out of the oven pizza in thirty seconds anywhere else.

<comment><USER4> The Cheese Board has reproduced... in the form of Arizmendi Bakery:

"Forty years ago, Berkeley's now-famous cooperative, the Cheeseboard, opened its doors. In 1997, inspired by their own success, they helped open another bakery based on cooperative principles. Arizmendi Oakland debuted that year on Lakeshore Avenue, named after the Basque labor organizer.  The endeavor was a hit, so what next? They decided to open another bakery, this time in San Francisco. Once again the group, along with members of the Oakland store, graciously imparted their knowledge of cooperative business practices and shared secrets of their recipes.

In October of 2000, Arizmendi Bakery San Francisco was born. The Cheeseboard's gift to us has become our gift to the neighborhood."

[http://www.arizmendibakery.com/about](http://www.arizmendibakery.com/about)

<comment><USER3> Ah yea, I love Arizmendi but I don't go there as often as I used to Cheeseboard, probably because SF has many more alternatives than Berkeley did.

</comment></comment></comment></comment><comment><USER5> I love the cheese board, and not just for the pizza. When I was in grad school at Berkeley, I knew I could go there and get really good advice about what kinds of cheeses I should get for whatever dinner I was having or hosting. Everyone there is super-passionate about their work, and they took plenty of time to explain and educate about their cheeses.

I don't know if it is a coincidence that these people were employee-owners of the coop, or if it was a natural outcome of the way the cheese board is structured. I'd believe it was the latter; as the article mentioned, without an owning corporate board there's not a big urge to expand like crazy and extract maximum profits. The goal is for all the employee-owners to make a living wage doing cool stuff.

Granted, it makes me a socialist or whatever, but I'd love to work in a system like that- a small worker-owned cooperative doing software. Of course, the problem with some markets is that you probably need lots of starting capital, and hence the VC system.

</comment><comment><USER6> I wish more software companies — or, indeed, _any_ software companies — followed the cooperative model. It just seems like such a healthier and fairer way to run a business.

<comment><USER7> Let me ask you a honest and serious question. Would you start a software company and when it becomes successful, hire me on to be an equal partner?

If so, I would join your co-op. There is something to be said about being rewarded for taking a risk, but if you're willing to share that reward, I would think highly of you and gladly partake.

</comment></comment><comment><USER8> I'm a huge fan of the cooperative model, and I eat at Arizmendi all the time. But I think the main reason for their success is they just do one thing: one pizza per day, and they do it really well. You don't know exactly what you'll get, but you get the gist of it, and you know it will be good.

Compare to Bakesale Betty down the street in Oakland, which is not a cooperative, and just sells really good fried chicken (or tofu) sandwiches. They have a line around the block too. Both of these places have about 10 feet of standing room between the door and the cash register.

I think people are realizing you don't have to be the Cheesecake Factory and cook everything under the sun with a huge dining room in order to make money selling food. It's a resurgence of takeout and small menus and Cheeseboard was way ahead of the curve on that game.

</comment><comment><USER9> Their pizza really isn't all that great--it's salty, oily, with a bland crust. Love the cooperative model though.

<comment><USER10> I was earnestly hoping that this comment was satire, and comfortably believed that until I got to the bit about 'bland crust'. The pizza is indeed well seasoned and dressed with olive oil. The crust, however, is pretty fantastic.

So, unfortunately, not satire; just sad, uneducated and possibly treasonous.

<comment><USER9> Fantastic? Treasonous? I feel sad for you--unless you work there.

EDIT: I guess the truth of California is you can't get good food here, even for a grand. What you do get is a "great experience." People here don't know what they're missing...</comment></comment></comment>


Private Helm repo for Kubernetes cluster - <AUTHOR> https://blog.minio.io/minio-as-helm-repository-for-your-kubernetes-cluster-9b2dcc771ee5 <comment><USER2> It's always worth pointing out with Minio: they optimized for disk usage (with erasure encoding) and came up with an object store that tops out at 16 drives.

"Note that with distributed Minio you can play around with the number of nodes and drives as long as the limits are adhered to. For example, you can have 2 nodes with 4 drives each, 4 nodes with 4 drives each, 8 nodes with 2 drives each, and so on." [https://docs.minio.io/docs/distributed-minio-quickstart- guid...](https://docs.minio.io/docs/distributed-minio-quickstart-guide)

Minio is the least scale-able of the open source object stores. Check out Swift, Ceph, Manta, or Riak CS.

<comment><AUTHOR> Minio is deliberately designed in this manner for scale. It is in our intention to make storage deployment to be simpler and scaling is achieved by deploying many smaller instances.

So each minio cluster is a deployment unit which scales with your orchestration software like kubernetes. In our view creating a gigantic cluster with single namespace is scary, where single server can take down the the entire data center.

With Minio's design the intention is to isolate such occurrences and safely operate/upgrade clusters without disturbing a single namespace.</comment></comment>


Scaling email transparency - <AUTHOR> https://stripe.com/blog/scaling-email-transparency <comment><USER2> For some reason I was under the impression they used Slack at Stripe. Was I incorrect about this?

In either case, to what degree would Slack allow Stripe to replace email altogether? It seems set up to solve many of the problems their email system was created for.

<comment><USER3> We do use Slack. It's great for real-time communication, and has made us way happier than any other chat system we've tried. (In fact, a year prior we'd tried out lots of chat systems, each time feeling like the switching cost to try was higher than whatever incremental value we were getting. But when we came across Slack, it was so obviously better we decided to try again. We ended up pretty painlessly switching within a day.)

However, email hasn't gone anywhere. As soon as you want to interface with the outside world, it's a hard requirement. It's also pretty hard to beat a lot of the properties of email: arbitrary-sized blobs of text and attachments that are fully searchable, taggable, organizable, and have read/archive states.

I think everyone would love to see an email killer come along (and I'd love if that were indeed Slack), but thus far I haven't seen anything come close.

<comment><USER4> > I think everyone would love to see an email killer come along

Can you explain this?

I've heard this sentiment before and never really understood it. The common complaints I hear about email are usually inherent in the fact that it's a universal communication mechanism[0], or a symptom of inadequate clients[1].

I can understand the need for better email clients (that's what Gmail originally was, back in the day[2]). But I still haven't been able to find a compelling reason that email itself is fundamentally broken in a way that requires a new system altogether.

 _EDIT_ : I should acknowledge that privacy and security are obviously a major issue, and email is by design incompatible with security (Silent Circle tried this and failed, which is why they are creating an alternative protocol). But I generally hear this complaint in other contexts, so I don't think that's the reason.

[0] e.g. "I get too much of it" \- thirty years ago, people complained about getting too much physical mail, simply because that's the way all important work was conducted then (dead trees).

[1] Having email clients tailored towards email power users can make up for problems like overwhelming volume - Google's "Inbox" app is an example of this.

[2] Along with providing massive amounts of space (which was itself a hard requirement in order to provide the many client-side improvements it brought).

<comment> grey-area _But I still haven 't been able to find a compelling reason that email itself is fundamentally broken in a way that requires a new system altogether._

I'd love to use something very much like email which had a few things like this:

Verified identity

Public key encryption as standard (of content at least, possibly of most headers too)

TLS everywhere

UTF-8 everywhere

Metadata for social presence so that twitter/fb/github/intranet profiles could be referenced in mails and used for things like identity (see verified identity above)

Standardised globally unique message ids (uris perhaps)?

Attachments uploaded to a server by the sender instead of clogging up mailboxes, not fetched unless required

Maybe even mail uploaded to a server and not sent across the wire unless actually requested - why do we need to send messages when I might be able to infer from metadata that I don't want to read it 50% of the time? An API for email clients which pull data as they wish would be nice, instead of the current broadcast all the data model. This plus identity would make it easier to block spam.

HTML with inline CSS for styling (clients could strip to plain text as required, not send the message twice) - no JS for obvious reasons. We pretty much have this already, but it'd be nice if it were just the standard.

Email is a great tool, but it really is showing its age - it was defined in a different age where there was trust by default of network users and servers, and it's been hugely exploited as a result. If it were proposed now it would never be adopted. You could shoehorn a few of the above points into client changes, but some things would be easier with a new protocol.

<comment><USER5> > Maybe even mail uploaded to a server and not sent across the wire unless > actually requested - why do we need to send messages when I might be able to > infer from metadata that I don't want to read it 50% of the time?

If you go there, you're basically talking about something that's more like blogs with RSS feeds, rather than email. To me, half the point of email is that it is "pushed": this allows to send messages to people you don't already have pre-existing relationships with, simply by finding out their contact details.

<comment> grey-area You could push the fact there is a message at date n from x with subject y to the recipient servers without wasting bandwidth on the message itself along with attachments before you know it will be read. This would also have other effects (possibly delete/modify after send, invert control from the recipient to the sender etc), so it certainly would change the way email is used - probably not everyone would agree with this particular point.

<comment><USER5> I would think that if you're already going to do the SMTP transaction, the average (plaintext) email message body is small enough to slide into the same packet as the end of the transaction headers. It's the same as keeping the data of small files inside their directory-entry structures on disk.

On the other hand, it would indeed be interesting if email was simply a "unicast presence notification" channel to allow accounts to publish knowledge of a (private, ephemeral, encrypted, authenticated) message channel to other accounts, and then messages flowed via automated subscription-based pull. You'd still want your MUA to be a web service with active background polling, though (like cloud RSS reader services), since otherwise a user could send a message and then "retract" it from their feed before your own client had retrieved it.

But this would solve at the very least the spam problem: you could simply unfollow a channel that's sending you email, and receive no future messages on it. It'd be like every (sender, receiver) pair having its own dedicated inbox, that the true receiver consumes only voluntarily.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> This is awesome. Being a payment company, how does this influence your ISO 27001 / PCI DSS compliance efforts?

I encourage lists at work but the first objection is often around our "need to know" security policy, thanks to ISO.

</comment><comment><USER7> I think this level of transparency is great while you are a startup. However I have concerns over the "early discussions" and "sensitive partnerships." In my experience that is where things have always managed to go the worst for the employee base as a whole, not in the minor day to day operations of the business.

Can you speak to how you bring transparency to things like this?

<comment><USER3> Email transparency is one tool for spreading information within an organization. It excels at some use-cases (namely, freeing email that would normally be locked up in someone's inbox). However, it's poor at other cases: for example, it has no story for making that information more digestible (most teams address this by sending periodic state update emails to the company). Said another way, just lobbing an email to a list isn't sufficient for transparency.

One of the biggest problems we've found with using email transparency for "early discussions" is that it's often actively harmful (totally orthogonal to the content of the conversations). For example, we once were considering doing a particular acquisition. We approached it with full email transparency internally, sending on-list emails before we'd really figured out the parameters of the potential deal.

Immediately, people started to express strong opinions in favor or against it. We had a full-company sitdown to talk about it, but it was really weird because it was all just hypotheticals. Ultimately, we burned a lot of time on it, and the deal was kind of dead in the water due to this approach.

The list of exceptions are the cases (either found empirically or through inspection) where "absolute transparency" can be harmful. It's kind of like the "shouting fire in a closed theater" free speech idea — you should make sure your transparency mechanisms don't cause unnecessary emotional turmoil.

On the other hand, there tend to be good alternative mechanisms to make these cases transparent, such as talking about them at your all-hands meeting, where you can provide additional context and discuss in realtime.

<comment><USER5> > Immediately, people started to express strong opinions in favor or against > it. We had a full-company sitdown to talk about it, but it was really weird > because it was all just hypotheticals. Ultimately, we burned a lot of time > on it, and the deal was kind of dead in the water due to this approach.

This sounds like the sort of problem you solve with a policy, not by breaking the enabling technology. What about just telling your employees that nascent partnerships—like nascent microservices—start out "owned" by the people exploring them, and everyone can observe their development, but nobody has an implicit right to have input on them until they get to the "release-candidate" phase?

<comment><USER3> It's kinda (and in some cases maybe even irresponsible) unfair to drop major things on people without providing more context. The point of email transparency isn't to make everything transparent; it's to increase efficiency. We don't need to cover _everything_.

Generally with similar initiatives these days we'll talk about them at all- hands, or if they're particularly interesting have a dedicated gathering to discuss them. We also find ways of increasing transparency once the need for secrecy has been removed, such as opening up the list archives post-hoc.

</comment></comment></comment></comment><comment><USER8> > Early stage discussions about topics that will affect Stripes personally > (e.g. changing our approach to compensation).

Why is this excluded from transparency?

</comment><comment><USER9> I have too much email of my own to go around and read someone else's, email transparency or not. In all fairness I think this is just creating a false sense of openness at a cost of potential severe information overload (or underfiltering).

<comment><USER3> Don't read it then! But it can still be useful to have a lot of auto-archived email in your inbox -- for example, searching for a name or topic will often pull up relevant threads you otherwise wouldn't have been discovered.

<comment><USER9> That's what mailing lists are for and it's hardly an innovation.

<comment><USER3> Yep. Email transparency gracefully degrades into just a plain old mailing list.

</comment></comment></comment></comment><comment><USER10> Can I ask what internal wiki software you guys use at Stripe?</comment>


Ask HN: Why don't companies use blind hiring to address non-talent-bias? - <AUTHOR> <comment><USER2> It worked great for hiring orchestra musicians. When the Australian public service tried it though, it backfired. [http://www.abc.net.au/news/2017-06-30/bilnd-recruitment- tria...](http://www.abc.net.au/news/2017-06-30/bilnd-recruitment-trial-to- improve-gender-equality-failing-study/8664888)</comment>


Programming is for Stupid People - <AUTHOR> http://www.whattofix.com/blog/archives/2010/10/programming-is.php <comment><USER3> "Instead we reward people for being smart -- for learning more and more details about trivial libraries that will be deprecated in ten years' time."

I get what the author is trying to convey in this post, but I feel he is unintentionally attacking a strawman.

I don't think many developers set out to memorize small details of libraries -- it's just something they pick up naturally over time with more usage.

My take is: on the surface, knowledge based on experience often _seems_ like memorization. That's because when say Alice brings up a better way/library/tool, she's acting as a layer of abstraction.

You don't immediately get to see the internal processing Alice is doing to decide which library to use and why it is the best choice for your specific task. All you see is her output: "here's what you use in this situation". This isn't about knowing trivial details of libraries. It isn't about rote learning. It is the practical application of knowledge borne out of experience.

That experience is what is being rewarded, not the memorization. How to tell the difference? The best developers come with introspection tools: they are able and very willing to explain the reasoning behind their recommendations in detail.

<comment><USER4> Writing code is such a small part of our jobs anyway. If it were everything, our jobs _would_ be easy.

Most of my time is actually spent answering these questions:

      * Why isn't this working?
      * How could the user fuck this up?
      * How could another programmer fuck this up?
      * What do I want this thing to do?
      * What's the best/fastest/safest way to do it?

No amount of abstraction will ever fully eradicate these questions while leaving a sufficiently general framework to work in - they characterise programming. And they are by no means "stupid".

</comment></comment><comment><USER5> I think there are two mind sets when it comes to programming, those that relish in learning every detail in a particular technology and those that find beauty in simplicity. (technically there is probably a third which is just a hack).

I don't think that these two programmer see eye to eye. One looks to apply the chains of functions to a problem to simplify the task at hand. While the other looks to creatively attack the problem with a minimalistic approach to writing code. They find beauty in recursion and abstraction, through interfacing things so that common logic can provide different results based on plug-able interfaces.

They are different mind sets entirely, where one looks to reuse existing library code the other looks to not write as little code as possible through creativity. Both are very valid programmer types and both can achieve mastery, it is more just a matter of how ones mind works. I myself am the latter, I love abstracting problems away till they just seem to disappear. I love closures and delegates, interfaces and anonymous functions. These are my utensils of mastery.

One thing I have noticed though is that programmers tend to work better with other programmer of the same type. For most of my career I have worked with the same development team. Many of the guys I trained and then they trained others. We are like a caravan of programming gypsies one of us would find a position at a start-up or find backing and the rest would follow in time.

Anyway, after the sale of the last company we where at I had to go out and find a real job. I did, and the entire team was of the other type it seems that they had amassed in a similar fashion as my group of developers and ended up there. Anyways, I have to say, for the first time in my life I was a drag on the team it just seemed that my code and their code just never jived, i mean it all worked properly but when I would have to work on one of their code or they would have to work on my code it was just hours of lost productivity. I eventually resigned because it was clear that for the first time in my life I was not working out as a developer. I was just mediocre at doing it there way.

Anyway, just food for thought, maybe you are like me Daniel and see the elegance of code. While the other guy sees the robustness.

<comment><USER6> "I think there are two mind sets when it comes to programming, those that relish in learning every detail in a particular technology and those that find beauty in simplicity. (technically there is probably a third which is just a hack).

I don't think that these two programmer see eye to eye. One looks to apply the chains of functions to a problem to simplify the task at hand. While the other looks to creatively attack the problem with a minimalistic approach to writing code. They find beauty in recursion and abstraction, through interfacing things so that common logic can provide different results based on plug-able interfaces."

You've essentially just described the difference between a left-brained person and a right-brained person, although I'm not sure this has much to do with whether you like using libraries or not.

Left-brained people use the language centers of their brain more heavily. That's why they spend so much time trying to come up with the right names, adding comments, and adding documentation while ignoring useful abstractions.

Right-brained people build instinctual models in their heads. That's why they spend so much time thinking out interfaces and how things fit together and so little time thinking about the semantics.

The only thing I'd be careful of is in using terms like "simplicity", "creativity", and "elegance". The left-brained guy thinks his code is just as simple, elegant, and creative as the right-brained guy thinks his is. The difference is what they're measuring these things by.

In general, I think the ultimate goal is for these two types to learn working together. That can be a very great thing for a team, but can be fairly frustrating.

<comment><USER5> _The only thing I'd be careful of is in using terms like "simplicity", "creativity", and "elegance"._

Sure, that is my perspective because it is the code I tend find compelling but yes they are matters of subjective opinion.

</comment></comment></comment><comment><USER7> The article is decent, but the HN-bait title is a work of art.

<comment><USER8> Daniel writes primarily for the HN audience I think, so you might say he optimized his choice of words in the title, given his audience.

</comment></comment><comment><USER9> > Things I _probably_ am going to reuse in other projects. [emphasis added]

Fred Brooks said that a "programming product" takes about 3 times as much work as a plain program (so it becomes a module reusable by anybody). The extra work is in things like generalizing, testing and documenting. He claimed that a "programming systems component" takes about three times as much work again (that is, a module reusable somewhere else), with the work going into things like precisely defining interfaces, and integration testing. _p.6-7, MM-M_. He said all that long before _object oriented_ was coined (even before ADTs), so he wasn't talking about objects, but about code reuse in general.

What's the evidence? We see notoriously few FP libraries, but 10,000's of Java libraries (as an OO eg). The latter is a major reason touted by JVM languages for targeting it.

While FP individuals do seem to reuse their own code quite a bit, the code reuse of _systems programming products_ remains mostly theoretical for FP - but standard practice for OO.

I think a more relevant distinction is between _component consumers_ and _component producers_. The former learns libraries; and latter creates them. The former is closer to the customer and their application domain (where value becomes tangible); latter is closer to the raw materials, the essence of programming and nature's wild bounty (where value originates).

<comment><USER10> I'm still very much a novice at FP, but seeing as far as I can through my keyhole view I think FP offers a different, and in some ways deeper, level of absraction than OO, providing more re-use to the individual who becomes proficient, but less publishable reusable code.

Here's what I mean by that. The author, in talking about the reusable functions he writes for the kind of tasks he performs is really creating a domain specific language (or fragments of a language) addressing his programming domain, whatever that is. The extra work that would be involved to make this reusable for other people is daunting, primarily because he can be fast and lose in defining his domain for his own personal use (in fact he may not even reflect on the fact he is defining a domain), but for his domain specific language to be useful to others he would have to be far more rigorous in domain definition, with all the attendant documentation, use case testing, etc. This level of effort is way beyond the level of effort require to define an OO framework, for instance. Therefore he produces something that provides him a deeper level of abstraction, but is not useful enough to others.

</comment></comment><comment><USER11> What frustrates me about this article is the false dichotomy of 'smart solutions to problems' vs 'simple solutions to problems' - especially when it comes to C# vs. F#, languages I know well.

The whole point of programming languages is to make it easier for human beings to understand each other's + their own code; a computer could, in theory, accept code via binary tapped in on a front panel, it really doesn't care how it gets told what to do.

The point is that code quality is pretty well the same thing as simplicity - there is no dichotomy here. Like @keyist said, a strawman.

It's also important to remember that there are things that a language can achieve that simply no library can; the whole point of much of FP is to make it _easier_ to write code simply. Pattern matching, type inference, tuples, immutability, these are not 'tools for smart people', they make it easier to write code which is declarative, and thus more clearly expressing what the programmer _meant_ rather than how he goes about it.

Additionally, I don't think we should cede to the programmer who says 'I'm stuck in my ways and can do it all with libraries, blah' - that's a red flag in my view - a programmer who is not willing to constantly improve and question their work (can I make this better? How do I improve this?) - <USER2> likely to be the kind of programmer who produces code of a certain (almost certainly low) quality and has no means of improving on that. The 9-5 Bobs.

Let's not mistake inertia + fear of learning something new for wisdom, please.

<comment><USER12> In defense of the Bobs, I must say that some of us aren't programming just for the love of programming, and you have to be pragmatic.

I'm certain there are a lot of better solutions to what I'm doing, but I'll do them the way I know today, and try to learn a better way tomorrow.

The programmer that doesn't want to learn a new way, ever, yes, that's not a good programmer.

<comment><USER11> Sure, and I don't claim to be a great programmer by any stretch, rather it's the willingness to improve and to be open to things, within practicality.

'Smart and Gets Things Done' :)

Although I do like 'Done and Gets Things Smart' - [http://steve- yegge.blogspot.com/2008/06/done-and-gets-things...](http://steve- yegge.blogspot.com/2008/06/done-and-gets-things-smart.html)

</comment></comment></comment><comment><USER13> _Instead we reward people for being smart -- for learning more and more details about trivial libraries that will be deprecated in ten years' time._

Having memorized a lot of facts is not what I think of when I hear someone described as smart. I think of the ability to find and synthesize new information. Memorizing facts is often a waste of time that could have been spent working out their implications and deriving new knowledge.

<comment><USER14> In modern culture, that rote memorization is what passes for "smart" now.

Memorizing facts is _always_ a waste of time.

The biophysics professor that I worked for in college had that attitude. He studied protein structure, but rather than wasting his time memorizing the structures of amino acids, he just worked with them, and eventually the knowledge of their structures became second nature. In biochemistry, the professors tried to make everyone memorize all of those structures... but even the professors didn't get them all correct.

Those same professors couldn't explain basic things like ionization, or make sense of the fact that .1 cm = 1mm.

<comment><USER15> _Memorizing facts is always a waste of time._

Not true. Knowing the APIs you most commonly use instead of having to keep flicking back to the reference makes you much more efficient.

Your professor DID memorize them, he was just smart about how he did it. Instead of memorizing upfront, he did it in bitesize pieces, and was productive along the way. That's what a good programmer does too.

<comment><USER16> This way of memorising things is called Chunking - <http://en.wikipedia.org/wiki/Chunking_%28psychology%29>

Chess champions use this technique too. I remember seeing a TV documentary where they got a chess champion to look at a board layout for a few seconds and reproduce it in front of them. They could do this easily for a valid board layout. But when they got people with no knowledge of chess to design the board layout in an invalid manner the chess champion could not reconstruct the board as accurately or as quickly.

I guess a common programming equivalent would be a design pattern.

</comment></comment></comment></comment><comment><USER17> This article seems to be following the "Microsoft frameworks are for simple programmers" theme that I've been seeing more and more of here on Hacker News.

I don't know if that's bad or good since I've never really had to work in a .NET environment but I would hate for this article to be the embers of a forthcoming flame war.

<comment><USER18> I don't think that's the point at all. If anything it's "some Microsoft frameworks are too big and complicated" (but others - F# - aren't so let's try those)

<comment><USER19> F# is just another CLR language, so the "Framework" is just as big under F# as it is under C#. It's just a different way of looking at development (specifically, the OCaml way).

.NET is big because it actually contains _a lot_ of useful APIs. I think this is a natural outgrowth of a framework that attempts to be all things to all people.

I'm not a .NET apologist, but I use it every day at work and it has it's strengths and weaknesses (like everything), but overall it is a fairly well- designed framework. My biggest beef with most .NET development is that you have to do it on Windows...

<comment><USER20> _My biggest beef with most .NET development is that you have to do it on Windows..._

I once shocked a Windows "Platform Evangelist" when I told him the only thing I needed Windows for was Visual Studio.

</comment></comment></comment></comment><comment><USER21> _OO code, on the other hand, is rarely reused._

This is true in situations where OO is done wrong. OO is supposed to help us implement types, and you can do this portably. You can write bad functions, too, that have too much dependency on things specific to your framework. This is not a matter of FP vs OOP but of writing portable code, which neither approach forces you to do.

FP vs OOP is not a real conflict anyway. The two are compatible.

<comment><USER22> I have yet to see OO objects live on from one internal project to another. It's always the same cycle: design domain model objects; let them grow/bloat for the purposes of the project; end up redesigning them the "right" way for the next project.

<comment><USER21> Assuming we are talking about classes, I am glad someone released Path::Class for perl, among many other class packages. This is a social problem, not a problem with the technology.

<comment><USER23> Except to the extent that the technology exacerbates the social problem. Or even just enables the social problem to continue.

</comment></comment></comment></comment><comment><USER24> Over in Drupal land we are talking a lot about the direction we want to take Drupal 8; FP vs OOP.

The last couple of posts on this blog are a good read. <http://www.garfieldtech.com/>

</comment><comment><USER25> I think this is basically a re-statment of Larry Wall's _three virtues of good programmers_ :

<http://c2.com/cgi/wiki?LazinessImpatienceHubris>

TFA says programming is for stupid people, but I'd argue he meant _lazy_.

</comment><comment><USER26> FTA: _FP says that you don't have to have 20 thousand libraries. Or rather, you're welcome to have as many libraries as you want, but you develop those 30-70 functions that you use most often in your job and re-use them Instead of learning a new problem domain for each project and then working inside of it little piece by little piece, you're creating you own minimal set of symbols that work on all of your projects, thereby making each new project more and more trivial._

Would anybody mind making a non-comprehensive list of these 30-70 functions?

I know the article says they're specific for each job, but I'm sure there's an overlap among most of them.

<comment><USER27> The attitude of spinning your own mini environment to solve a variety of problems using the exclusive set of idioms known best to you reeks of what has plagued Forth and C++.

I love functional programming, but I don't think this animosity towards using known, tested libraries is all that healthy.

</comment></comment><comment><USER28> I feel for you -- whenever I try to write about basic algorithms (sorting, etc) I always get comments that you can do it in library. Yes, obviously, but I'm teaching an algorithm, not how to use a library!

<comment><USER29> You still need to know what your library's performance is like under various conditions - large or small numbers of items, whether comparisons are cheap or expensive, how much extra memory it takes up, etc. If you don't understand the library, how are you going to be able to use it, except in relatively trivial cases?

<comment><USER28> I don't debate library usage (reuse!), but I teach mostly theory, with code snippets to present algorithms concisely.

There are many tools to solve a problem, and I want to educate on a different layer. For instance, in sorting alone there are many sorting algorithms, I don't expect someone to interrupt me with "just use quicksort!" when I'm teaching bubblesort. There are lessons to learn in both, but it's a bit presumptuous (or at least, there are less smug ways) to assume ignorance, and not intention.

<comment><USER29> Sorry - that was sort of my point, but I didn't put it very well. Your student likely isn't taking any of that into account. One way to get your point across is to ask them a few pointed questions about (eg.) the data set that they're sorting. If it's relatively small, then the overhead of quicksort might not be worth it. If it's already mostly sorted, then bubblesort is potentially better, and so on.

</comment></comment></comment></comment><comment><USER30> Reminded of Tim Bray's 'Forget the defaults': [http://www.tbray.org/ongoing/When/201x/2010/06/29/No- Default...](http://www.tbray.org/ongoing/When/201x/2010/06/29/No-Defaults)

</comment><comment><USER31> If you ask an engineer if other engineers should work toward standards or make up their own, they'll tell you every time that engineers should work against standards.

In the programming world, libraries represent those standards and every time you try to roll your own solution to a well explored problem, you're telling the rest of the world to avoid your code.

</comment><comment><USER32> I don't see the connection between FP, OO and code reuse. Is there proof that using FP automatically leads to higher code reuse? That OO code is not reused?

Anyway, the biggest benefit of OO is abstraction & encapsulation, not code reuse.

</comment><comment><USER33> Presumptuous, controversial, relevant. What a beautiful HN link-bait title.

</comment><comment><USER34> I'm not so sure that FP code is so much superior to OO code in terms of reusability as the article implies.</comment>


Offer HN: User feedback for your project - <AUTHOR>

I've found the HN community really helpful over the last 12 months, so I thought I'd use my first submission to offer something that others might find useful.
I'm used to analysing projects & providing feedback reports for businesses. Also I've helped a few folks out here before with UI/UX suggestions and new ideas that come from taking a fresh look at things.
If you would find detailed user feedback for your project, idea or company helpful post here or drop me a mail! <comment><AUTHOR> Hey all! Just a quick update (around 5pm GMT)

Just so you aren't all waiting and wondering, I'll be sending 5 reports out per day over the coming week.

I'm really pleased I've had lots of requests and I hope the feedback I provide is really useful.

I spend a good while on each site & writing up notes on all different aspects.

I sent 5 out last night and I'll be sending another 5 tonight and so on.

Thanks guys, hope you all have a great weekend!

</comment><comment><USER2> I you could spare a few minutes at <http://www.mobicentr.com>, I'll honored. The site is not yet officially launch (there'll be an HN show) because I still have to add screenshots and marketing text in the features pages; and update the Android client.

I'm not a native English speacker, the text is not yet proofed by a translator, so please forgive the spelling mistakes.

<comment><USER2> I forgot: this is a B2B website, aimed at medium to big business (management of Android devices fleet), I don't know if it fits HN, I mainly see B2C here.

<comment><AUTHOR> Ok no problem. I'll keep that in mind. Do you have a mail address I should reply to? Thanks!

<comment><USER2> my username @ gmail.com

Thanks!

</comment></comment></comment></comment><comment><USER3> Would love some feedback on Corsvi - <http://www.corsvi.com>

Got to add a proper 'about' page which explains it - but Corsvi is a content discovery site which focuses on tech, formula 1, film, gaming and photography right now (whilst still developing ranking methods). If you think it would benefit from having more categories or anything else, do say!

<comment><AUTHOR> Sure! I'll look at it this evening and mail you back Fri.

<comment><AUTHOR> Have you got a mail address I can reach you on?

<comment><USER3> sure - firstname.lastname@example.com

</comment></comment></comment></comment><comment><USER4> I've got a couple that could use some feedback:

<http://giniji.com> (shopping search)

<http://swym.me> (Share What You Make; this is a random weekend project that I'm in love with.)

Thanks!

<comment><AUTHOR> I'm happy to take a look! It'll be over the next few days if that's ok!

</comment></comment><comment><USER5> Just want to add that we received some really valuable feedback from Helen in Dec and it helped us take our site to the next level! Her comments were not only helpful but on target and extremely constructive! If you are getting feedback - take it to heart and if not - you should!

</comment><comment><USER6> Hi, I'd love your feedback on <http://www.roompatible.com>

I am relatively new to programming and would love to hear your thoughts! Please feel free to contact me at myusername @ gmail.com

Thank you in advance!

<comment><AUTHOR> Sure, I'll take a look. Will get back to you in the next 24 hours.

<comment><USER6> Thank you very much, looking forward to it :)

</comment></comment></comment><comment><USER7> I'd love some feedback on a project I just launched called Jukebox For Me. (<http://jukeboxfor.me>)

I come from a programming background so pointers regarding the interface are more than welcome. Thanks.

<comment><AUTHOR> I was just looking at your site! I'll write some detailed notes & send them across to you shortly!

</comment></comment><comment><USER8> I'd love your thoughts on WhiskeyNotes: <http://www.whiskeynotes.com> ! Any/all feedback and ideas are welcome! My email is firstname.lastname@example.com

Thank you!

<comment><AUTHOR> Thanks Ben! Will send them across over the weekend :)

</comment></comment><comment><USER9> Just shot you an email, thanks so much for the offer!

<comment><AUTHOR> Replied :)

</comment></comment><comment><USER10> Hi, we would love some feedback on (<http://diglig.com>)

<comment><AUTHOR> Great, will do! What address should I email feedback to?

<comment><USER10> Thank you.. Email is in my profile now</comment></comment></comment>


Access Now and EFF Condemn the Arrest of Tor Node Operator Dmitry Bogatov - <AUTHOR> https://www.eff.org/deeplinks/2017/04/access-now-and-eff-condemn-arrest-tor-node-operator-dmitry-bogatov-russia <comment><USER2> > Put simply: running a Tor exit node is not a crime

In Russia? You sure about that? I wouldn't be, if I lived in Russia, and I'd be much less so today than yesterday. It wouldn't surprise me if this prosecution were intended to make a point, in the characteristically subtle style of the modern Russian government, that regardless of what any potentially relevant legislation might say, running an exit node, and by extension acting in ways that help conceal communications potentially of interest to the state, isn't a very good idea if you cherish whatever stability and comfort your daily life affords.

The modern US government, on the other hand, has tended to be rather less blunt about making such points, and to choose different such points to make.

<comment><USER3> > if you cherish whatever stability and comfort your daily life affords.

I reckon this was their point rather than a rebuttal. They seem to believe it is legal as well as a right and they're going to at least try.

Would I do run a tor node? Not in Russia and prob not in the US where I live. I am glad a global network of people are braver than I am.

<comment><USER2> Well, whether it's legal and whether it's a right - itself a concept of law, with no meaning outside that context - is up to the state, and the state doesn't seem thus far inclined to decide the question in their favor. Perhaps they will convince it otherwise.

<comment><USER3> Right. I meant that potentially they consulted lawyers / evaluated the law before making the claim. I have no idea if it is legal in Russia (and they may not either) but the quote seemed to be a statement which if levied at RU; hopefully has something backing it up

<comment><USER2> I read that as a normative, not a positive, statement. If there's anything at all to suggest it be taken otherwise, I'd love to see a cite, because I've looked for one and not found it.

</comment></comment></comment></comment></comment><comment><USER4> edit: please comment as opposed to downvote -- HN's value is civilized debate and information.

I value privacy and support VPN use, but for some reason this seems different to me. Maybe something to do with a VPN being a company using servers to create an obvious layer of identity protection that police can generally subpoena when of importance.

By running a Tor exit node, this individual was consciously allowing _his_ IP address to be used for potentially malicious purposes. Why can't it easily be compared to someone making a cover for or assisting a criminal they don't know the identify of, which would be a crime if committed in person? Investigations lead back to him because he put himself in that position.

analogy: VPNs seem like concealing your ID from everyone, however police can sometimes work to see it if a court deems it justifiable and necessary. Individuals running Tor exit nodes seem like being given someone else's ID instead, with no trace otherwise.

Untraceable VPNs (ones unaffected by subpoenas) are somewhere in the middle, but the primary issue I see with this is the Tor system's use of someone else's ID rather than hiding your own (investigators are aware when they find a VPN service's IP).

<comment><USER5> There really isn't much to debate. Your stance is very myopic and makes assumptions that fail in a global context.

For example, you assume the police are legitimate and not the tools of an oppressive government.

For example, you are completely ignoring non-"malicious" purposes for disguising origin, say whistleblowing.

Finally, you are equating providing a legitimate service that may be used for a crime with actual facilitation of crime. We should lock up telephone company execs on this theory.

<comment><USER6> There's a lot to debate. If you're running a TOR node, you have child porn traversing your system. You also have a whistleblower's traffic who might be beaten or tortured if found.

Does the existence of the latter negate the former?

To claim that is an answered question is myopic to me.

<comment><USER7> [https://www.torproject.org/docs/faq- abuse.html.en#WhatAboutC...](https://www.torproject.org/docs/faq- abuse.html.en#WhatAboutCriminals)

</comment></comment></comment></comment><comment><USER8> If you're going to run a Tor node at home make it a relay, not an exit. There is practically no risk to running a relay. Exits have risk because of situations like this.

If you want to run exit nodes use a hosted server. It separates it from your normal traffic and makes it clear that it has a specific purpose.

<comment><USER9> You'll also get the occasional website that blocks or reduces services for you because they (or their IP reputation provider) doesn't understand Tor and grabs the entire list of relays.

Notably, BrightCloud (Webroot) is such an ill-informed provider, and Dan's DNS blocklist offers both exit and relay lists (the latter is an attractive nuisance). Care2 is a consumer that blocks intermediate relays, although only on their http: traffic, not https:. (I'm guessing their SSL termination proxy messes up their IP detection!)

The odd thing is that the Tor Project _provides_ an easy to parse, up-to-date list of exits ([https://check.torproject.org/exit- addresses](https://check.torproject.org/exit-addresses)) but these providers go to a lot of trouble to harvest bad data themselves.

</comment></comment><comment> temp-dude-87844 This is disturbing, but this is how the buck stops, isn't it? All of these cryptographic dataflow concealer technologies have one very unpleasant failure mode: somewhere they have to interface with the physical overworld, where they're subject to all the unpleasantness of both their home jurisdiction (in this case, Russia), and in some cases, the jurisdictions of those who are intent on their laws applying worldwide (such as governments like the United States -- who are absent from this particular case, but not others).

No amount of condemnation on part of the EFF and declarations that "running an exit node is not a crime" is going to help Bogatov, where the Russian government has decided it will do what it takes to prove a point. This is how chilling effects work: when it endangers your own freedom and livelihood, you are forced to suddenly re-evaluate your priorities between big abstract issues like freedom of speech and whistleblower protection, vs. holding your head down and hoping you don't get caught up in something much bigger than yourself.

It also proves that these anonymizing networks only function in a free society, and break down in the exact situations where they would be most needed.

<comment><USER7> > All of these cryptographic dataflow concealer technologies have one very > unpleasant failure mode

i2p doesn't. It is a parallel dark-net.

</comment></comment><comment><USER10> Why not make exit nodes only able to use secure protocols?

Am I missing something or could thing whole problem be put to rest, at the same time the rest of the net is transitioning to https only.

<comment><USER11> wont change the fact that the originating IP is still the exit node. If you use tor and spam some https website the source IP will still be the exit nodes IP. Secure protocols cant hide the source IP(which is way more complicated, requires compromised router for a man in the middle attack, if TCP)

<comment><USER10> Ok I see, your saying it's not just spying on clear text, they just wait for subversive propaganda to appear the force the site where it's posted to cough up the ip address.

Maybe it would help if site took pains to not keep logs, but sometimes even that is difficult.

</comment></comment></comment><comment><USER12> TIL Kanye West is illegal in Russia.</comment>


Sheaf Theory: The Mathematics of Data Fusion (audio starts at 10:44) [video] - <AUTHOR> https://www.youtube.com/watch?v=b1Wu8kTngoE&list=PLSekr_gm4hWLvFtJX0WUueVO65uhvBPrA <comment><AUTHOR> A sheaf is a combinatorial, high-dimensional data structure on a topological space. You can use it to stitch together images, spatio-temporal target tracking, inference, data fusion, IoT time-series, continuous functions -- all kinds of things. Crazy cool stuff!

Applied sheaf theory is pretty new, and not yet widely known. This DARPA sheaf tutorial is a full two-day video series by Prof Michael Robinson (great teacher), and it's about the equivalent of a semester CS course compressed into two days. If you want to see an intro/big-picture overview video on what the sheaf data structure is, and how it's related to graph databases, topology, category theory, and data analysis, see:

"Sheaves for engineering problems" [https://www.youtube.com/watch?v=223-0x2KNOg](https://www.youtube.com/watch?v=223-0x2KNOg)

And for a deep dive into a paper, see:

"Sheaves are the canonical data structure for sensor integration" [https://arxiv.org/abs/1603.01446](https://arxiv.org/abs/1603.01446)

Python Cellular Sheaf Library:

[https://github.com/kb1dds/pysheaf](https://github.com/kb1dds/pysheaf)

<comment><USER2> Have you found a book or a review/survey paper on this topic?

I just started Computational Homology by Kaczynski et al. but I just looked in the index and didn't find anything on sheaves.

<comment><AUTHOR> Prof Robinson's book is _Topological Signal Processing_ [1], and there are a ton of papers linked from his home page [2].

For a general overview, check out the wikipedia page: [https://en.wikipedia.org/wiki/Sheaf_(mathematics)](https://en.wikipedia.org/wiki/Sheaf_\(mathematics\))

[1] [https://www.amazon.com/Topological-Signal-Processing- Mathema...](https://www.amazon.com/Topological-Signal-Processing-Mathematical- Engineering/dp/364236103X)

[2] [http://www.drmichaelrobinson.net/publications.html](http://www.drmichaelrobinson.net/publications.html)

</comment></comment></comment><comment><USER3> Fascinating stuff. I've now done maths for some years now and this is the first time I even hear about sheafs.

Makes one wonder what else you may have missed just because it's not something profs at your programme are interested in.

edit. Follow-up. I wonder if there's a list of curious and possibly useful math stuff you might easily miss because it's not as ubiquitous and 'canonical' as (e.g.) analysis, linear algebra or functional analysis?

<comment><USER4> I had sheaf theory at an advanced algebraic geometry course, essentially you need them to define schemes. They are on the "you won't need this unless you go for a PhD" area, usually, although they are not _that_ weird (I found schemes weirder than sheaves for some reason)

</comment></comment><comment><USER5> So, I can probably try to provide the beginnings of an ELI5 from a math point of view, since the heading _really_ caught my eye: a sheaf is a way of assigning some data to subsets of a space which satisfied some commonsense axioms.

For instance, suppose you have a sheaf F that assigns to every open interval I on the real line the set[1] F(I) of real-valued functions defined on it. If I write F(a,b) for F((a,b)):

* f(x) = x is in all the F(a,b), since it's defined everywhere on the real line

* f(x) = 1/(x-3) isn't in F(2.9, 3.1) or even F(1,5), but it is in F(4,5)

And so on. There's an axiom that says that if you have

* f in F(I)

* g in F(J)

such that f = g everywhere on the intersection of I and J, then there is in fact some function h defined all over I ∪ J (i.e. h ∈ F(I ∪ J)) which you can restrict to I and J to get f and g respectively. So "compatible functions can be stitched together", where "compatible" means "agree on overlaps".

Sheaves give you a language to coherently[0] talk about "partially-defined" functions such as 1/(x-3) above, to stitch them together, and go from the "local" to the "global" picture and back comfortably. This last point is actually a hallmark of mathematics in the last one or two centuries: for instance, consider some equation which you want to find integer solutions for. If you want to show it has no solutions, you can reduce both sides modulo some number and show that there are no solutions mod n, which means it is impossible to find any solutions to begin with. It is a much more deep fact (the Hasse principle) that if you can find solutions mod all n (and a real one), you can always solve the original equation! (I'm fudging a bit here: see [2] for details.)

(Quick plug: I have a short post that talks about these things here[3], as well as another on the "p-adic" numbers that appear in the Hasse principle.)

Sheaves are general enough ("data" can mean[4] almost anything!) that Paul Cohen used them to prove the independence of the axiom of choice[5] from the Zermelo-Fränkel axioms (which is _hard_ set theory) even though they were created for geometry, broadly speaking: in particular, they were one of the tools with which Grothendieck and his collaborators powerfully recast algebraic geometry in the 20th century, giving birth to "scheme theory"[6], which is e.g. vital in modern number theory. (I should probably mention the standard example of Wiles' proof of the Taniyama-Shimura conjecture that settled FLT.)

Cool stuff.

[0]: excuse the pun

[1]: ring, really

[2]: [https://en.m.wikipedia.org/wiki/Hasse_principle](https://en.m.wikipedia.org/wiki/Hasse_principle)

[3]: [https://mrkgnao.github.io/schemes-i/](https://mrkgnao.github.io/schemes-i/)

[4]: Well, a sheaf can be defined as a certain kind of contravariant functor into a category, which one can think of as the "type" of our data.

[5]: [https://en.wikipedia.org/wiki/Forcing_(mathematics)](https://en.wikipedia.org/wiki/Forcing_\(mathematics\))

[6]: [https://en.wikipedia.org/wiki/Scheme_(mathematics)](https://en.wikipedia.org/wiki/Scheme_\(mathematics\))

<comment><USER6> I don't understand why the claim in your second paragraph is an axiom. Doesn't it follow trivially from your definition?

<comment><USER5> The "sheaf axioms" define what it means for a "rule" associating "data" to open subsets to be a sheaf, and I was just trying to illustrate them with the example of "F". (Perhaps calling them "properties" or "laws" \-- or even an interface or typeclass! -- might help?)

In general, proving that something that looks like a sheaf really is one may be nontrivial. :)

In the special case that I outlined above, it certainly is easy to show that F satisfies those axioms, as you point out. And it is a sheaf (the sheaf of continuous real-valued functions on R) precisely because it does.

<comment><USER6> Sorry, I meant the claim about f and g. Assuming you meant that F(I) should be continuous functions, you can construct an h from f,g to be cont on I and J, no? So it's not an axiom. Just making sure I understand correctly...

<comment><USER5> Again, that was just an example. F is just one possible sheaf on the real line, and in the case of F, yes, continuous functions can be stitched together.

You could define A(I) = { } for a trivial example of a different sheaf A where the "data" (always an empty set, regardless of I) is very different from what it was in the case of F (the set of continuous functions on I).</comment></comment></comment></comment></comment>


America's craziest shopping mall finally opens after 20 years - <AUTHOR> https://www.ft.com/content/e58eb93e-f5da-11e9-a79c-bc9acae3b654 <comment><USER2> Great</comment>


Tesla drops restraining order request against allegedly dangerous short seller - <AUTHOR> https://techcrunch.com/2019/07/19/tesla-drops-request-for-restraining-order-against-allegedly-dangerous-short-seller/ <comment><AUTHOR> Hothi's defense team has their perspective of this action here: [https://www.gofundme.com/f/skabooshka-defense- fund](https://www.gofundme.com/f/skabooshka-defense-fund)

Sounds like they were willing to strike any of the conversations that could be considered private or confidential but Tesla refused. Given the internal audio recordings would be a good indicator of how threatened the vehicle's occupants felt, it's strange that Tesla dropped the case rather than produce them.

Looks like Hothi may be preparing a counter suit alleging malicious legal action.</comment>