Can design save the newspaper?  - <AUTHOR> http://www.ted.com/index.php/talks/jacek_utko_asks_can_design_save_the_newspaper.html <comment><USER3> Imagine the web came before the newspaper, and you were an investor. Then someone came to you and pitched you : I'll take the best stuff on the web, print it daily on paper in factories, transport it all over the country in the night, then sell it for the price of a cup of coffee. I'll also hire a bunch of expensive writers to write quality content, and I'll also make that content available for free on the website so as to make people want to buy the paper.

Would you invest?

<comment><USER4> If you watched the video then you'd know that the designer did a great job of integrating the content into the design of the newspaper. It isn't a copy- paste job. There was design and layout and graphics that you just can't do on the web, and he demonstrated that people like it.

So if you change the question to, would you invest in a designer who had a track record of boosting circulation by 20-100% in two years time?

<comment><USER5> Did he call it a magazine?

</comment></comment></comment><comment><USER6> Can interpretive dance save NASA?

<comment><USER7> That was unfairly modded down IMO.

TED is great in its way, but it caters to, some would say flatters, an elite crowd of people - the type who buy expensive artwork for their houses - <USER2> of the stuff proposed there might sound great to the chardonnay-class participants but has little relevance in the real world.

Can design save the newspaper? Of course not, and merely raising the question with a straight face impressively demonstrates the out-of-touch, ivory tower, art-gallery-opening-attending disconnect of the speaker.

Such a question is, in my opinion, at least as _prima facie_ ridiculous as posing that interpretive dance might save NASA, so the parent's comment is an entirely valid _reductio ad absurdum_.

<comment><USER8> In what way is the speaker out-of-touch? He has personally overseen circulation improvements of ~ 30 - 100% in the newspapers he has redesigned.

"Design" in this sense goes far beyond "graphic embellishment" and is actually about changing the entire product/company involved -- and thus very relevant to the future of newspapers.

A few quotes from his speech:

"It was my personal, intimate challenge to talk to the readers."

"the changes we made were not about changing the look, it was about changing the product completely"

"my bosses wondered, why is he asking all these business questions, why is he not showing us pages? This is the new role of the designer, to be in this process from the beginning to end."

</comment></comment></comment><comment><USER9> No. British broadsheet The Guardian had a high-profile redesign in 2005 which shifted the newspaper away from the traditional broadsheet into a full-colour Berliner, and soon after the paper won multiple design awards and their circulation has increased while the rest of the industry has contracted. However, the devil is in the details: the newspaper has continued to make large operating losses (£26.4m this year compared to £15.9m last) and continues to be propped up by other businesses in the group.

</comment><comment><USER10> I think the real problem in a lot of cases is that newspapers are trying to be something that they simply can't. They are trying to give you up to the minute news, but logistically you aren't going to receive it until the next day. They simply can't compete with the web for breaking news. Where I think they can win though is with relevant and in-depth reporting on stories which you won't see on the internet (and not just printing half of the AP feed either).

<comment><USER11> Yep. I think they need to come a little late to the table with WAY more substance and to follow scandals a month later with serious indictments. Let the net build the buzz before the big reporting and then spread the news and discussion after the big reporting. A good complement.

Decided to follow up on my blog with a vignette: [http://justindz.tumblr.com/post/91601837/this-is-sam-he- work...](http://justindz.tumblr.com/post/91601837/this-is-sam-he-works-at-the- miami-tortoise)

</comment></comment><comment><USER12> I can't watch the video right now, but I do have a question:

Why would we want to save the newspaper?

<comment><USER13> Newspapers still do the bulk of the workaday journalism, which is the raw material of almost all "news" in TV and the internet. CNN will still be able to cover national topics in the future, but local stuff will go uncovered. I predict increased municipal corruption throughout.

<comment><USER14> Newspapers _themselves_ don't do journalism; newspaper journalists do. The journalists who write for newspapers will still exist, and still write what they write, if newspapers die out; their content will just be converted to, and paid for by, a different part of the media.

<comment><USER15> err... how will they be paid for?

<comment><USER16> Capitalism. This is the magic of capitalism. There's demand for journalism on one side and supply on the other, and if there's a profitable way to bring them together, it will be found. Newspapers can stand in the way of that by constraining what people think of.

You don't know how it will be done. I don't know how it will be done. But nevertheless, similar miracles happen every day; there are _millions_ of examples of this sort of thing occurring, it is not the exception. One of the most intriguing things about markets is that they can be smarter than any given participant. (This is part of why they can become hard to regulate; they are as good at outsmarting regulation as evolved programs can be, in much the same way.) Bounding what the market is capable of by your comprehension or your credulity is not the path to understanding.

In truth, it is not that there is no possible way to bring them together, the problem is that there are a _staggering_ number of ways to bring the supply and demand together and nobody knows what is best. It seems unlikely that newspapers are the answer, though.

<comment><USER17> The "magic" of unregulated capitalism brought us Fox "News" and the economic collapse we are currently experiencing.

Unregulated capitalism is an extremist form of economic system. There are no answers to be found in extremism.

The answers to our problems will found somewhere in the middle of the range between unregulated capitalism on one extreme end of the spectrum and socialist economics at the other extreme end of the spectrum.

Government oversight of markets. Elimination of monopolies. A voice for the employees. etc. In this case, there will probably be some donated money and some government money going to a public journalism system similar to public broadcasting.

<comment><USER16> You miss my point entirely. You can only conceive of the old system going, so you want to get the government to fund it. But there's another way: Let the market figure something out.

Governments can't do new things. They usually can't conceive of them, and if they can, they can't get them past committee.

The old system isn't working. Pouring more government money into it has no realistic prospect of working. For one thing, how can the "fourth estate" function as a watchdog if they're getting too much of their money from the people they're supposed to be watching? Your only hope of something that actually works is a truly new system, and the government can't come up with that.

But the market can, even if you can't think of what that may be and if I can't think of what it may be. It's not blind faith, _every_ niche works that way. The government did not create the auto industry. The government did not create the electronics industry; it did not create the RAM industry or the CPU industry or the video card industry. It did not create the insurance industry, it did not create the furniture industry. It did not create just-in-time delivery or Amazon.com. These all came from supply on one side figuring out how to reach demand on the other, with all sort of creative chaos in the middle (and ongoing) that could never have been legislated into existence. (It can, on the other hand, be legislated _out_ of existence.)

Why should the government prop up the current system instead of letting something new happen?

Nothing in my post had anything to do with "unregulated capitalism". It's simply how the economy works, and without this critical understanding, not only can you not go forward, you can not understand how we got where we are.

<comment><USER17> "letting the market figure it out" is unregulated capitalism. Unregulated capitalism is exactly the extremist economic policy nonsense that created the mess we are in. When Bush eliminated most of the regulation on the financial services industry, what that "let the market figure out" is that it is very, very easy to steal money when there is little regulation.

Libertarian economics policy advocates utterly fail to recognize that when money is laying around with no regulations/regulators protecting that money, people steal that money.

I don't know why libertarians can't figure out people steal money that is left around unguarded, but they just don't comprehend that fact.

<comment><USER18> > When Bush eliminated most of the regulation on the financial services > industry

Since Bush did no such thing....

> Libertarian economics policy advocates utterly fail to recognize that when > money is laying around with no regulations/regulators protecting that money, > people steal that money.

Libertarians recognize that govts don't protect money all that well and that big thefts always involve a govt.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> Fancy checking out a PDF conversion of the newspaper that was featured in this video..? I found a copy at <http://rapidshare.com/files/142517365/pb.04.09.08.pdf> \- I'd mirror it, but even though I'm sure they'd love for people to check out their newspaper, it's just too risky legally.

</comment><comment><USER20> In an industry that worships smart engineers this is pretty refreshing. I am biased being a designer but it's still a good watch for you Hackers and also a lesson for the newspaper industry (Hint: death is coming).

<comment><USER21> are you talking about the tech industry?

as an engineer/hacker, i think its pretty clear that design is important. its cold, hard facts that people like something that is visually appealing. the issue is, though, that this is a community of hackers, and so we're all mostly poor at artistic design, nor are we particularly interested in it, so we don't talk about it.

its definitely interesting, and this meshes well with the community because its a discussion on the numbers of how design works.

just my $0.02, though

</comment></comment><comment><USER22> It's been a few weeks now since the Seattle P-I went web only. Anyone else notice how there were lots of news stories about that change, and now nothing?

Reporters aren't even interested. They just believe that going to the web equals death.

</comment><comment><USER23> Donation-funded reporting: <http://spot.us/>

</comment><comment><USER24> No.

</comment><comment><USER25> Newspapers must drop the 'paper' from their name and embrace the web. Profit can come from diferent ways, like ads, classifieds, job boards, obituaries, etc.</comment>


How a simple dialog increased the sales of our Android app by 260% - <AUTHOR> http://www.androidsx.com/how-a-simple-dialog-increased-the-sales-of-our-android-app-by-260/

<comment><USER2> Shame to have to mislead the users by saying the app is expired.</comment>


Show HN: BitBar – Put anything in your Mac OS X menu bar - <AUTHOR> https://getbitbar.com/#.Vrm140voO5A.hackernews <comment><USER2> I find Hammerspoon[0] ideal for this kind of thing, and dynamically scriptable in Lua too. [1]

[0] [http://www.hammerspoon.org/](http://www.hammerspoon.org/)

[1] [http://www.hammerspoon.org/go/#simplemenubar](http://www.hammerspoon.org/go/#simplemenubar)

<comment><USER3> I can vouch for Hammerspoon, it is an excellent scriptable Lua environment with built-in hooks for probably every native OS X feature you've ever wanted to script. Great project, I highly recommend it.

<comment><USER4> Can you compare it to Keyboard Maestro, assuming you've tried it out.

<comment><USER5> KM is a lot easier to use than HS, but likely more frustrating for programmers.

</comment></comment></comment></comment><comment><USER4> Previous thread: [https://news.ycombinator.com/item?id=10835544](https://news.ycombinator.com/item?id=10835544)

As far as the app, been sporting it for a while now and I really like it. Github is active as well.

I'm a big fan of menulets and scripting so this is great for me. Currently tracking sales. I use it with Bartender, so that it hides when the sales are not happening and pop up when something changes.

</comment><comment><USER6> There's [https://github.com/jaredks/rumps](https://github.com/jaredks/rumps) for Python.

<comment><USER7> Great Python package in combination with PySide you can build tiny desktop apps in just a few lines of code.

</comment></comment><comment><USER8> There is still an annoying bug that will create multiple BitBars in the menu bar.

[https://github.com/matryer/bitbar/issues/21](https://github.com/matryer/bitbar/issues/21)

</comment><comment><USER9> I've been using it for a while. It's ace. A couple of plugins I've written for it:

List local vagrant boxes with statuses: [https://gist.github.com/onion2k/3462b6effd55472aa192](https://gist.github.com/onion2k/3462b6effd55472aa192)

Show your current HN karma (needs nodejs): [https://gist.github.com/onion2k/2e7fe16d1bb568271f32](https://gist.github.com/onion2k/2e7fe16d1bb568271f32)

</comment><comment><USER10> I love this app.

I connected it to my bank in order that I could watch my monthly spending through my menu bar [0]. Surprisingly useful way of managing money as it makes it impossible not to pay some attention.

[0] [https://twitter.com/nouswaves/status/684396522675527680](https://twitter.com/nouswaves/status/684396522675527680)

</comment><comment><USER11> I get "launch path not accessible" whichever plugin I try to run. :(

<comment><USER12> This happens to me, too, with a yellow triangle icon showing. Running in Terminal shows "No such file or directory" (strange since I even redownloaded it).

<comment><USER13> chmod +x plugin_name

<comment><USER11> Thank you, dear wizard!

</comment></comment></comment></comment><comment><USER14> Just as a quick sidenote: If your plugin directory is inside your User folder, it seems that you have to add the +x flag to your plugins.

Example: chmod +x pluginname.sh

</comment><comment><USER15> I use it to display my (remote) docker uptime stats and the external/internal ip adres. It works quite nice.

</comment><comment><USER16> This is really useful. I'm going to dump billings and use this to record time for invoicing to clients in a .yaml file and add a nice little preprocessor for creating a csv file for importing invoices into xero.

</comment><comment><USER17> does something similar exist for Ubuntu?

<comment><USER18> In the past I made one using Electron, but then I checked Swift/OSX and ported there, loved the 8MB ram usage :D and settled there. But it's really easy to make one on Electron and have it cross-platform [1].

[1]: [http://electron.atom.io/docs/v0.36.7/api/menu/](http://electron.atom.io/docs/v0.36.7/api/menu/)

<comment><USER19> Cool!

Did you ever release yours on the app store? I'm struggling with electron packaging for the Apple app store and hoping to find a kindred soul to help get through it!

</comment></comment></comment><comment><USER12> Forgive my ignorance but how do I get a plugin to work with BitBar? There's no download button on Git for the reddit plugin (do I need to sign up for Github to see it?)

<comment><USER20> you can click the raw view link for the plugin's source and then save it to your plugin directory. Just make sure you set it's permissions correctly so bitbar can run the plugin. Instructions on permissions and such are here: [https://github.com/matryer/bitbar#installing- plugins](https://github.com/matryer/bitbar#installing-plugins)

</comment></comment><comment><USER21> Pervious discussion:

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

</comment><comment><USER22> Deja Vu. Saw this on here already before and if I remember correctly it made HN front page as well.

Still a cool project though.</comment>


Google's interactive doodle in celebration of Alan Turing's 100th birthday - <AUTHOR> http://www.google.co.nz/

<comment><AUTHOR> Once you complete the six puzzles, click the bunny button to get some more challenges.

</comment><comment><USER2> I found a way to get an infinite loop on one of the puzzles, but it looks like the machine halts after a fixed number of iterations. Does this mean it doesn't meet the criteria necessary to be considered a Turing machine?

<comment><USER3> I think it checks if you get far enough on one side or the other of the preprinted numbers on the tape that the numbers can no longer be seen, at which point it declares an infinite loop and restarts. Sure, technically it should keep going, but it's a game.

<comment><USER4> There are puzzles where it's very easy to loop it forever, while not straying from the prepreinted numbers. It's more likely just the number of iterations.

Here's an example where it loops up/down. It speeds up and then "burns out": [https://dl.dropbox.com/u/80052639/Screenshot%20from%202012-0...](https://dl.dropbox.com/u/80052639/Screenshot%20from%202012-06-22%2014%3A38%3A03.png)

</comment></comment></comment><comment><USER5> I'm just getting a static jpg; did they take it down?

<http://www.google.co.nz/logos/2012/turing-doodle-static.jpg>

</comment><comment><USER6> The doodle was surprisingly enjoyable. I would love for an iphone or ipad version. Sudoku for programmers.

</comment><comment><USER7> Ok I get that it's emulating a turing machine, but can anyone explain what you are supposed to do with this?

<comment><USER8> I guess have fun with it.

<comment><USER9> No. Solve puzzles. When you run it, it checks each number to see if it matches the expected result shown in the top-right.

</comment></comment></comment><comment><USER10> Why is there a bunny?

<comment><USER11> Because it leads you down a rabbit hole of unproductivity.

</comment></comment><comment><USER12> Curious about what the final-final TM does:

        "1 . D1 . .  .  . _  R  D_ B2"
        "R U _  R D_ B2 . 1  B8 1  D_ L  B2"
        "U . B2 . 1  R  0 U_ L  B2 0  B9"

Was it just spitting binary words?

I am too lazy to redo the previous 12 TM again. If you get there, do not reload.</comment>


Can Sucking CO2 Out of the Atmosphere Really Work? - <AUTHOR> http://www.technologyreview.com/featuredstory/531346/can-sucking-co2-out-of-the-atmosphere-really-work/

<comment><USER2> His scheme seems to be, "We can pay for sucking CO2 out of the atmosphere by selling the CO2." Okay, reasonable enough, but just a quick question: doesn't the sold CO2 just get dumped back in the atmosphere?

He suggests that industrial CO2 is used to rejuvenate oil wells, carbonate beverages, and juice up commercial greenhouses. Of those, carbonated beverages CERTAINLY release all their CO2 back into the atmosphere in a time-frame of at most years and probably weeks. I assume that some percentage of the CO2 used in commercial greenhouses is turned into, well, plants (though most plants pretty quickly decay and release their CO2 back into the atmosphere, with the exception perhaps of some woods), but I'd guess that 90%+ of it goes back into the atmosphere. I'm not sure how much of the gas stays underground for decades in the case of pumping CO2 into an oil well.

<comment><USER3> Where does the CO2 in carbonated beverages come from currently? Is it something produced which would now be displaced resulting in a net reduction? If we're producing CO2 as the product, we could lower that amount by recycling already produced CO2.

<comment><USER4> Carbonated beverages are a red herring. This page[1] says a can of soda has 2.2g of CO2. If every single person in the world (population 7.125B) drinks 10 cans of coke every day for a year, we will be using 63 Mt of CO2.

Mankind emitted 33615 Mt of CO2 in 2010[2].

[1] [http://chemistry.stackexchange.com/questions/9067/what-is- th...](http://chemistry.stackexchange.com/questions/9067/what-is-the-carbon- dioxide-content-of-a-soda-can-or-bottle) [2] [http://en.wikipedia.org/wiki/List_of_countries_by_carbon_dio...](http://en.wikipedia.org/wiki/List_of_countries_by_carbon_dioxide_emissions)

(Edit: sorry I at first miscalculated the result to be 6.3 Mt.)

<comment><USER3> I only intended to point out it is possible to reduce CO2 emissions by recycling it, even it the end product releases the same amount of CO2.

I don't know that we produce CO2 for CO2, or where the numbers lie. Just that the prior post said it gets released anyway, so how can it be an improvement?

</comment></comment></comment></comment><comment><USER5> We already have free self-replicating devices that do just that: plants. Just add water.

<comment><USER6> The oceans are the largest carbon sinks currently: [http://en.wikipedia.org/wiki/Carbon_sink](http://en.wikipedia.org/wiki/Carbon_sink). My professor in college predicted that at some point we'll start building highly efficient CO2 sinks out of specific types of plankton and dumping them into the oceans to float around and offset our bad CO2 behavior.

<comment><USER7> Dump them into the ocean? That's a bit of a scary thought. Not only tinkering with the oceans ecological balance, but also the idea of our genetically engineered plankton spawning out of the control. I'd prefer to keep them in controlled environments.

<comment><USER8> Iron fertilization ([http://en.wikipedia.org/wiki/Iron_fertilization](http://en.wikipedia.org/wiki/Iron_fertilization) ) is a little less likely to spiral out of control, and once discontinued should stop having an effect in relatively short order. I've brought it up to people and had them say such large scale experiments are too scary to carry out, but we are already engaged in a CO2 experiment of that scale (without much ability to cease the input).

<comment><USER9> >once discontinued should stop having an effect in relatively short order

Not even close. The largest iron fertilization "experiment" to date was done by Russ George with just 100 tonnes off the Pacific coast of Canada in 2012.

It's now 2014 and the salmon population has quadrupled from the algal bloom. We don't know what sort of impact iron fertilization at scale will have on the ecosystem.

<comment><USER8> Consider that you could have provided more information without trying to pin down what I was thinking (or could've asked what I was thinking). I've tried several different ways to say that, this one seems the least whiny.

<comment><USER9> What?

<comment><USER8> "relatively short" is a pretty fuzzy statement, saying it's "Not even close." invites me to try to argue about what I was thinking when I wrote it (ooh fun), and it isn't all that necessary to your point.

<comment><USER9> Yes it is, but I have a feeling you're still going to be bitter and worm your way into contonuing to patronize.

<comment><USER8> I was trying to express frustration (I think unnecessary argumentation often damages discussions here), but I take your point, such things can come across poorly.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER10> The sticking point seems to be the energy required to process the CO2. How to get that energy in a way that doesn't produce more CO2 than is captured seems like a hard problem, approaching a violation of the laws of thermodynamics.

Perhaps the reason he's gotten little interest so far is that he hasn't shown his process to be CO2-negative, and the experts are skeptical of what might amount to a very complicated version of yet another perpetual motion machine.

<comment><USER11> I don't think nuclear, solar, wind or hydro plants produce much CO2.

<comment><USER12> The whole premise of carbon capture is that we're still burning fossil fuels. If the world literally eliminated 100% of carbon emissions then biological carbon sinks (plants) would eventually restore the natural equilibrium, the problem is we're burning more carbon than they can keep up with.

Using nuclear power to sequester carbon is useless if someone else is still using carbon to power their air conditioner or whatever, you would do better to just use the nuclear power to run the air conditioner.

<comment><USER13> There are lots of good reasons to burn carbon to produce energy. What we need is a carbon tax that goes to operations such as these, bound to the waste energy from nuclear or solar plants, for example. That way the carbon emissions can be offset by the carbon intake.

Maybe we could burn all the carbon we wanted, at a rate even far exceeding the rate we make carbon emissions today, if those emissions were balanced with large-scale carbon removal. If that carbon removal produced fuel, that would be fine - the balance would be a lot closer to zero, and more importantly, we could have a control on the acceptable carbon in the atmosphere.

<comment><USER12> There is no "burn all the carbon we wanted" regardless of climate change because we're eventually going to run out of cheap oil. The cost of recovering it will eventually exceed the cost of renewable energy. The problem is that waiting until that point to stop burning oil and coal would do catastrophic damage to the planet.

The thing that makes much better sense is to have a carbon tax and use the money to subsidize non-fossil energy on a per KWh basis, and set the amount such that it makes non-fossil energy cheaper. Do that and the market would sort it out in short order.

<comment><USER13> We are in complete agreement in that the way out of the current mess is a world-scale governmental movement to assert policy change that at least tries to solve the problem of human created environmental change, and carbon dioxide specifically.

I don't think we will run out of "cheap" oil though, since oil can be produced from coal and coal is hugely abundant. I agree that waiting for oil to become more expensive than renewables before investing in renewables, or in other words expecting free market dynamics to solve the problem, is not going to work.

</comment></comment></comment></comment></comment></comment><comment><USER14> Given that we need to stop emitting carbon into the air within the next few decades to avoid predictions for disaster, I think we should do whatever we can? Energy companies make a great deal of money, and they have a social responsibility to not drive up pollution. It's not just at the infrastructure level, people can also drive less and eat less meat.

<comment><USER15> I emit carbon each time I exhale. But I would not be surprised if I'm surrounded by sentient vegetables.

The debate about climate change is much more productive. Eventually someone has to realize we have to stop mistreating the ocean.

</comment></comment><comment><USER16> don't trees and plants do this? Could'nt we just plant more. Especially on top of buildings?

</comment><comment><USER17> We could try it! You can do a home experiment with a bottle, some baking soda and vinegar maybe, a lamp and a thermometer to demonstrate how adding CO2 increases the temperature.

Scares the holy-bejeebers out of the kids.</comment>


Patching the Internet - <AUTHOR> http://blog.jgc.org/2012/05/patching-internet.html

<comment><USER2> The other side of this is that the attack surface /on CloudFlare itself/ is absolutely enormous. Think about it: they're talking about allowing people to write their own plugins that will have to cope with arbitrary web traffic. An attacker trying to compromise CloudFlare could easily control both ends of the connection going through them. And if you did "own" CloudFlare you could do massive damage.

<comment><AUTHOR> That's not what our developer program is offering. We won't take arbitrary code and execute it on the TCP streams that go through us. We're offering the ability to write JavaScript apps that can be inserted into pages just as we do today for things like web analytics with some CloudFlare specific additions.

</comment></comment><comment><USER3> I posted this to the blog comments, but it's under moderation so it might not show up for a while:

An "Edit" button. You can change the content of a page and save your changes for later visits. Optionally: a history of your edits to a page, or a way to share your changes, or see that other people have edited the page, or "subscribe" to changes from certain users. Like turning the web into your private wiki.

</comment><comment><USER4> Or as the privacy cynic might put it:

An American company can now snoop into https, see all the data and insert random javascript whenever they want? And they can do it for an ever growing segment of the web?

Great. Just great.

I loved the idea of CloudFlare, now not so much. Or am I massively misunderstanding what they are capable of doing?

EDIT: This went further than I meant it to. I think CloudFlare is great. I'm just not sure you should run your SSL stuff through it, this article made me realise how they actually handle SSL.

<comment><USER3> You do realize that the site owner has to set all this up ahead of time, right? Any caching proxy could do the same.

<comment><AUTHOR> Certainly true that any proxy at all (even the transparent ones that are often used by ISPs, corporations and mobile providers) can inspect and modify traffic.

In addition, if we started doing any of the nasty things the parent suggests (inserting random JavaScript of our choosing or spying on the traffic passing through our network) we'd be out of business. Our entire business rests on the web site owners trusting us with their traffic. That means not doing bad things.

As our CEO likes to say: it takes 5 minutes to sign up for CloudFlare and just 2 to leave.

<comment><USER4> Have I fundamentally misunderstood SSL?

How can an ISP or mobile install a new certificate onto your computer? I know how companies do it as they send their IT bud round to do it. Or is SSL far less secure than I thought? Totally exposed to MITM attacks?

The SSL decryption is happening all in one massive centralized place. Running through one legal company. Completely under American jurisdiction. The server doesn't have the SSL certificate, CloudFlare does:

[http://blog.cloudflare.com/easiest-ssl-ever-now-included- aut...](http://blog.cloudflare.com/easiest-ssl-ever-now-included- automatically-w)

I'm more than willing to admit being wrong. But I don't see how CloudFlare being able to inspect all SSL traffic between two parties is anything like ISPs and mobile providers having proxies.

And worse the consumer has no reasonable expectation that a third party is even involved. Will all EU startups need to start putting disclaimer clauses in?

I'm not suggest your CEO want's to become the new go to guy for FBI wire tapping, I'm just saying he could be forced to and given the current climate in America it's a bit worrying that everyone's going to CloudFlare if this is the case.

It just seems, well, all a little dangerous. Imagine someone hacking CloudFlare. Wow, they're really becoming a very high value target.</comment></comment></comment></comment>


Phone Walking: Keeping Your Phone Out Without Using It - <AUTHOR> https://medium.com/mit-technology-review/researchers-wonder-what-it-means-when-you-keep-your-phone-out-without-using-it-ea8d17e12f22 <comment><AUTHOR> This seems to me an example of a research that dives deep into the problem, without actually trying to use some "common sense" at the start.

I sometimes "phone walk", especially in San Francisco. Why? Because in most cases, taking the phone out of my jacket pocket, or my jeans pocket, is quite uncomfortable or slow, and I know that I need to consult my phone frequently for the next few minutes (e.g. when I am walking to a place, don't know exactly where it is, and need to consult the map often).

In their research, there's no evidence of any weight being given to what I just described above.

The only interesting part is the stark difference between men and women - wonder where that comes from.</comment>


Slack introduces message buttons - <AUTHOR> https://slackhq.com/get-more-done-with-message-buttons-5fa5b283a59#.72tct7k3b <comment><USER2> > Approve new hires with Greenhouse

> Recruiting teams who use Greenhouse can get hiring manager approval for new > job postings and candidate offer letters.

Sure, why not, i'll hire someone with a single click in Slack. And maybe then post a party parrot emoji. Crushing it!

Like any messaging app, Slack has value precisely because it segregates small, ephemeral messages from the large, persistent ones in my email. It lets me tap into a stream of what's going on right now without obstructions. Trying to shoehorn in these great wads of HTML which don't require immediate attention detracts from Slack's value, rather than enhancing it.

<comment><USER3> You assume that everyone is hiring six figure developers. If you are hiring part time staff, at a rate of one per week, this makes a lot more sense.

Also makes sense to approve expenses. Right now all that stuff happens in another app which sends me an email which launches a browser which asks me to login which shows me the same button.

I actively look for SaaS apps that have slack integration.

<comment><USER4> That's exactly why we developed Talkus (customer support 100% in slack).

We were fed up to spend our time to switch between Slack and the web app.

</comment></comment></comment><comment><AUTHOR> More details on their developer blog: [https://medium.com/slack-developer- blog/message-buttons-and-...](https://medium.com/slack-developer-blog/message- buttons-and-the-slack-api-ab938174af70#.zdhye3738)

<comment><USER5> This is well worth the read thanks! I will likely experiment with this for PUSH alerting from the web app I am working on.

Eventually we will build a Mobile application, but in the meantime this seems like a good quick hit value add.

</comment></comment><comment><USER6> Telegram has custom keyboards and they are very useful. [https://core.telegram.org/bots#keyboards](https://core.telegram.org/bots#keyboards)

</comment><comment><USER7> Can multiple people be required to click the Approve button?

That would actually be interesting.

<comment><USER4> Yes, you can keep track of who clicked on the button and for example, if three clicked, you remove the button. (oh oh, just thinking of a fun game...)

</comment></comment><comment><USER4> That's really a cool feature. We are developing a help desk 100% in Slack and try to see what we can do with these buttons:

[https://medium.com/talkus/how-the-new-slack-message- buttons-...](https://medium.com/talkus/how-the-new-slack-message-buttons-make- helpdesk-10x-easier-with-talkus-a1d6a86832eb#.2nnj8aju7)

</comment><comment><USER8> We've been using this internally as the integration was developed. Having a message continue to change to show updates is super useful, and is a nice way to avoid spamming a channel with changes / cuts down on the "noise".

</comment><comment><USER9> What about hardware buttons that would change behavior based on context/app and provide the same? Nice arcade style yes/no.

I remote in often or work from different desks so this wouldn't be for me...

</comment><comment><USER10> I just hope these companies are not locked into Slack, but rather, embracing text interfaces more broadly. It's great to implement new UIs for your product if it means better engagement or conversion. Some of these integrations might actually see some heavy use.

I do hope the Slack terms of service are not onerous.

</comment><comment><USER11> I think buttons adds a new whole of opportunities to Slack integrations, straight forward interactions.

</comment><comment><USER4> Slack added a category for apps that use buttons: [https://slack.com/apps/category/At1H7NS2KY-all-buttoned- up](https://slack.com/apps/category/At1H7NS2KY-all-buttoned-up)

</comment><comment><USER12> So, we use PagerDuty, which is one of the listed integrations. I just created a test incident, but no buttons. (I've long wanted buttons on those integrations.)

<comment><USER13> Oh no! I'm with PagerDuty Support and we'd love to help you get your integration up and running! Please drop us a line: firstname.lastname@example.com

<comment><USER12> Turns out we had an old version of the integration, on the Slack side. Removing that, and adding the equivalent integration on the PagerDuty side got it working.

Love the buttons.

</comment></comment></comment><comment><USER14> We're using HipChat at our company, about 50 users in total. Is it worth making the effort and migrating everyone over to Slack?

</comment><comment><USER15> Thanks for posting this. Can wait to test it out

</comment><comment><USER16> Nice move, and it'll be better if they can make their service more stable.

</comment><comment><USER17> This is something I need in general! Not just within my Slack team! Would be great!</comment>


What's New in C# 7.0 - <AUTHOR> https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/ <comment><USER4> Pattern matching! Tuples! Awesome, C# 7.0 is scratching two itches I've felt every time I've worked with it.

If only .NET had a suitable cross-platform UI toolkit, then I'd be using it everywhere. Eto.Forms is a good attempt but I found rather buggy and limited at this point in development. Avalonia, while further along in terms of stability and features, doesn't even try to fit in with any platform's look and feel.

<comment><USER5> Feels kinda crazy to see tuples and pattern matching "just arrive" when other languages have had them for years.

<comment><USER6> Every language has something missing, but C# has plenty of other great features so tuples weren't really that big of a problem. There are also plenty of built-in containers like the Tuple class that can offer the same functionality.

<comment><USER7> A tuple struct fills nearly zero of the real use cases for language level tuples. No pattern matching makes it sort of useless.

<comment><USER8> What about returning multiple values from a function without declaring a dedicated type? That is pretty useful.

</comment></comment></comment></comment></comment><comment><USER9> Sometimes it feels like we're entering a new age of coding. C# is so full of "features" that code refactoring tools like ReSharper, CodeRush and JustCode became simply indispensable. It is quite hard to be sure, every time, what is the most elegant/compact way of doing things.

In the .Net/VisualStudio world, the language tooling (Intelisense, visual drawing XAML & WinForms, etc) became as important as the language semantics or the availability of frameworks and documentation.

A long ago there was a fad, known as CASE (Computer Aided Software Engineering) that advocated doing on programming what CAD did to other engineering. It seems that were finally getting there.

<comment><USER10> The most productive I've been as a developer was 20 years ago when I was creating VB6 apps and components...

<comment><USER11> So true. Between 1998 and 2000 VB6 was perfect, you could develop Windows GUI applications in a rapid manner. The VB6 IDE, the Windows UI guideline, the VB6 API, everything was great. And PlanetSourceCode.com was what was later SourceForge and nowadays GitHub. When I read about Microsoft's vision for .Net in 1999 about applications running as a service over the internet (that was their original idea), I thought that will end the great Windows platform and started looking for alternatives. Microsoft dumbed VB6, but it took them until 2003 to come up with DotNet with a different implementation, it (C# 1) was basically a Java clone with small syntax improvements. The biggest fail was to announce VB.Net and their lackluster Channel9 video that showed the third party developed the converter wizard (VB6 to VB.Net) that barely worked and was free only in the lite version. In the meantime I switched to C, C++, PHP, etc. The web replaced desktop applications in many cases anyway. And nowadays Android and iOS are important targets too. Sadly, the rapid development never got that easy to use as it was with VB6 IDE, with HTML4+PHP with Dreamweaver being almost as fast. But nowadays, the GUI builder aren't as polished and well integrated and don't support all features of the supported languages - <USER2> many skip the GUI builder and write the GUI code by hand.

<comment><USER12> Edit-and-Continue is the greatest productivity feature ever added to a development stack _for the real conditions one would encounter in large projects_ , and it astonishes me even now how misunderstood it's purpose is.

Consulting has me moving jobs a lot and I encounter a veritable kaleidoscope of crappy work. Being able to correct minor issues in scope without restarting, while ten form posts deep in an archaic webforms app with dodgy "we-didnt-know-so-we-rolled-our-own" state management has been a lifesaver. Thank you nineties VB team, it's because of you that I'm not rocking back-and- forth in a padded cell making animal noises today.

<comment><USER13> Does Edit-and-Continue ever work? I'm curious, because I'm almost always forced to build x64-only, because of some libraries we have to use that are 64-bit only, and I've never been able to change code while the debugger is running. Supposedly it is supposed to work in VS 2015, but I'm not seeing it - it's always the nasty messagebox saying "Changes to 64-bit applications are not allowed"

<comment><USER12> Build 64-bit only or release 64-bit only?

I only ask as I can usually manage 32-bit builds on dev while working, then just test there's no spooky differences when I target 64-bit.

There are issues with some projects that aren't well documented. E+C on web apps on local or remote IIS are a no-go (at least to the best of my knowledge), whereas if you can target IIS express during development it works beautifully.

I've always found that the juice has been worth the squeeze, for values of _squeeze_ that only require me to tweak configuration for my dev box.

</comment></comment></comment></comment></comment></comment><comment><USER14> All I want is easy syntax for immutable records, and C#-like a fluent syntax for .WithPhoneNumber(phoneNumber) etc. Seems like it'd be a cinch to implement, and for me the single handiest feature from F#.

In F# these are "guaranteed" to be non-null, even though null instances come up during deserialization all the time. In C# use cases, I don't think the non-null "guarantee" should be made or implied, just a POCO.

<comment><USER15> Hi there! C# language designer here.

You can see (and participate in) the discussion on records here if you'd like: [https://github.com/dotnet/roslyn/issues/10154](https://github.com/dotnet/roslyn/issues/10154)

> Seems like it'd be a cinch to implement

Ah... how i wish that were so :)

<comment><USER14> Indeed. While records are my favorite feature from F#, they _could_ be improved.

I'd love it if record definitions were extensible (even abstractly--sometimes you want a record with just the data, and sometimes including db-centric "id, createdTime, etc"), and there should be a way of defining / converting between them without a ton of boilerplate. That would allow something like:

record DbStuff = { id: int; created: DateTime }

record UserRecord: DbStuff { name: string; ... }

var userRecord = new UserRecord(...)

var userData = userRecord.WithoutDbStuff() // but what would be the reflected name of this type?

var newRecord = userData.WithDbStuff(3, DateTime.Now)

\----

Sometimes you want to be able to define records

PhotoData{source, metadata, yada, etc, url} and

PhotoDisp{source, metadata, yada, etc, bytes}

without the repetition, and again with an easy way to convert between the two. (And yes you could simplify the above by using containership but oftentimes there are cross-cutting things that containership doesn't solve. You really want a flattening solution.)

Easy integration with C# anonymous classes should be considered too.

C# has always been the more real-world-centric language so I'd hope these common use cases would be considered.

<comment><USER16> I second this! The ability to easily create intersection types would be awesome!

</comment></comment></comment></comment><comment><USER17> Having done a lot of python recently, this looks great (and familiar).

But some things feel a little bit rushed:

\- In the example "(o is int i || (o is string s && int.TryParse(s, out i))": When reading this statement as a human, o is obviously not an int when it comes down to the TryParse function. But if the 1st part was removed, the 2nd part wouldn't be valid either. I know this is technically how declarations work and I don't have an idea, if there is a better solution for this, but it feels weird.

\- The new features of the case statement are nice but the old syntax with the mandatory break is probably worth getting rid of. Especially since all cases share a scope, adding/removing cases is prone to errors. I'd love to see a solution similar to "catch".

\- The Deconstruct method is introduced as a "magic name". No interface, no override, nothing... Even the return type is "void". Why not use something like "public out Point(...)" to keep it similar in fashion to the constructor. Other options may be something with "this" (like indexing) or "operator".

<comment><USER18> I was thrown by the first one you pointed out too, I'm still not sure I understand it.

The page said for type patterns it will "test that the input has type T, and if so, extracts the value of the input into a fresh variable x of type T", so if o is an int it'll be extracted to a fresh int i with that value

But the out syntax in TryParse isn't the new one they mentioned, it's the current one that requires predeclared variables - to be new it'd be out int i or out var i. So i is already declared as an int before this code example? In that case how can the first bit work? Does it not create a "fresh variable" if there's already one in scope with the desired name and type? That could be quite confusing, usual behavior is to compile error if an inner scoped variable conflicts with an outer one, I'm not sure I understand why this should be different.

<comment><USER19> The expression

        o is int i

is effectively:

        int i; // in the nearest enclosing scope
        (o is int && (i = (int)o)) // in place of an expression

The "fresh" variable `i` is available for use elsewhere. If an `i` already exists in that scope (the block the `if` statement is in), that is a redeclaration of a variable which is a compile-time error.

If the "is" expression evaluates to `false`, the variable `i` will not be assigned, however, it will still be declared. Attempting to use `i` if it is not definitely assigned is a compile-time error. However, you have the opportunity to re-assign it.

Some examples:

        {
          if (!o is int i) throw Exception();
          use(i); // works: i is declared and always assigned
        }

        {
          if (o is int i) { do_something(i); }
          use(i); // compile-error: i declared but might not be assigned
        }

        {
          if (o is int i) { do_something(i); }
          else { i = 0; }
          use(i); // works -- definitely assigned
        }

Thus the example pointed out in the post boils down to this in C# 6:

        int i;
        if (o is int) {
          i = (int)o;
        } else {
          string s = o as string;
          if (s != null && !int.TryParse(s, out i)) {
            throw Exception();
          }
        }
        // i is definitely assigned here.

</comment></comment></comment><comment><USER20> I don't like the idea of accessing tuple values by their local name

        var names = LookupName(id);
        WriteLine($"found {names.first} {names.last}.");

It's leaky and should simply use the deconstructing syntax instead.

I'm on the fence about the ref returns. It can lead to some fantastic performance improvements and enable otherwise unusable datastructures. But is C# really a language you want if that is important to you. Why not go all in a use a lib in C or C++ for the critical parts of the code?

I still miss better immutability support, and probably most of all, ability to declare something at non-nullable.

But that said, the update is a fantastic update to an already good language.

<comment><USER21> > But is C# really a language you want if that is important to you.

C# is used by hundreds if not thousands of games by ways of Unity and is therefore demonstrably good enough in this scenario. Furthermore, just because a language is not C++ does not mean you shouldn't take every opportunity to give programmers tools to write fast code - at the end of the day I doubt anyone would be interested in a language that is purposefully slow.

Performance was a core feature of the language (yes, yes, it's managed) from day 1 with unsafe - it's nice to see further improvements in that department.

Use C++ when you need to, definitely, but when you're copying about 256 bytes around for a trivial world-view-projection matrix multiplication[1] you have a problem.

[1]: [https://github.com/dotnet/roslyn/issues/10378#issuecomment-2...](https://github.com/dotnet/roslyn/issues/10378#issuecomment-223318382)

<comment><USER22> Isn't Unity stuck with C# 2.0 ?

<comment><USER21> Poked around Google and it seems as though you are correct about Unity; however, C# tends to use existing MSIL features and doesn't require the BCL public key token for supporting infrastructure. You can patch in many recent features in by simply defining the types yourself. A common example of that would be:

        public sealed class ExtensionAttribute : Attribute { }

Even async/await comprises of a convention and an interface - I haven't tried it, but _in theory_ using the CLR 2.0 TPL should bring async/await your project. So far as I know, the feature being used for ref returns has always existed for C++/CLR so this stuff should work on CLR 2.0 (although you will need the C# 7.0 compiler).

</comment></comment></comment></comment><comment><USER23> Out variables seem like a mis-feature, especially when they are adding a better alternative (Tuples) in the same release.

It's great to finally have tuples, but the c/java style syntax is showing it's age compared to something like scala which has return type declarations at the end, which I find much more readable.

Literal improvements will be a godsend for writing database migrations.

Ref returns and locals look like a source of constant headaches. It's much harder to reason with code when the data can be modified by random others bits of code. Currently I can look for all references to an array to find everywhere that modifies it now I can't.

<comment><USER15> Hey there, C# language designer here.

> Out variables seem like a mis-feature, especially when they are adding a > better alternative (Tuples) in the same release.

Out variables are really great when working with existing code that predates Tuples (for example, the entire BCL). We don't just introduce language features that will only work well for new code. We also want to make the experience of coding against existing APIs feel better.

> Ref returns and locals look like a source of constant headaches.

That 'headache' has to be weighed against the needs of some parties to write very fast code and to have as little overhead as possible. ref returns enables a much more pleasant coding experience that enables these sorts of speedups in these specialized scenarios.

> It's much harder to reason with code when the data can be modified by random > others bits of code.

There is a simple solution to this of course, don't expose your data through ref returns :)

For many (likely most) developers, ref returns simply won't be something that ever hits their radar. Similar to stackallocs and other esoteric features, this is really a targeted improvement for people who really like working in .Net but are finding it hard to squeeze out essential perf in some core scenarios.

The .net runtime supports this features fantastically. We wanted to make it available to people who like the power and safety of C#, but occasionally need some low level hooks to get that extra perf boost as well.

<comment><USER23> > That 'headache' has to be weighed against the needs of some parties to write > very fast code and to have as little overhead as possible. ref returns > enables a much more pleasant coding experience that enables these sorts of > speedups in these specialized scenarios.

I'm worried this could result in a loss of focus, you can't make everyone happy all the time. c# is a fantastic language to develop applications in (web or desktop) but it's never going to be the fastest language around or be a systems level language. For me some of the other features listed here (like immutable records) would be a much better fit for where c# excels already.

<comment><USER24> Well maybe you don't care, but there are folks that do (I'm on that list) ;-) I want the speed of C but the safety of C#.

There are many pieces of code that you probably use every day that go to great lengths to squeeze as much power as possible. Why not help these folks help us? I'm glad there is more focus on performance because we all benefit. (Hoping to see more on the CLR side.)

<comment><USER23> Why c# and not rust or something similar that has a lower level focus?

<comment><USER25> Because some of us believe in GC enabled systems programming languages, as done already at Xerox PARC (Cedar), DEC (Modula-2+/Modula-3), ETHZ (Oberon, Active Oberon, Component Pascal) and MSR (Sing# / System C#).

What is missing is a company like Microsoft to push it down to mainstream developers, at all costs, like it happen to all luddites.

</comment></comment></comment></comment></comment></comment><comment><USER26> I still lack some kind of sum type that is always checked for exhaustiveness. When I'm creating a class hierarchy for a domain, 9 times out of 10 I'd rather have a simple sum type. When I have to make a class hierarchy in C# anyway (because there are no simple sum types). I'd like to be able to write something like this, and have this match/switch _fail_ to compile if I add a new type of shape.

        match(shape)
        {
          case Rectangle r
            return r.With*r.Height;
          case Circle c
            return pi*c.Radius*c.Radius;
        }

<comment><USER27> I'm just going to pimp my library (github.com/mcintyre321/OneOf) which lets you pull this off in c#. I'm quite sad it's needed though, it would be great to have it in the language.

<comment><USER26> That's very neat, it should be pretty easy to sugar something like that into the compiler with no CLR changes.

</comment></comment></comment><comment><USER28> It looks like they've added a lot of rope to hang ourselves with typos.

        int myvar, I;
        foo(out int mvar); // oops, not myvar; maybe caused by a refactor?
        bar(out *); // oops, not I; was up too late coding

And so on. Things like this would be easily missed when reading code at-a- glance, and it's this sort of bug that arises often in languages that allow implicit declaration of variants.

<comment><USER15> Hi there, C# language designer here.

I don't really see your example in that way. Let's start with the latter one first:

> bar(out *); // oops, not I; was up too late coding

I'm not sure how this situation is any differnet from any other case where you need to pass some variable, and you pass the incorrect name. This is already possible all over the language. For example, you might have written "bar(out J)" when you meant "bar(out I)". As usual, the recommendations here are to use strong types and good names to help keep your code clear in intent and to allow the compiler to tell you when something seems awry.

Now let's look at your first example:

> foo(out int mvar);

This version immmediately screams at me that something is happening that requires my attention. First off, just the presence of 'out' is an immediate call that this is not a normal call. Nearly all calls pass by value, so out/ref stick out like a sore thumb (esp. in an IDE that classifies them accordingly). Second, the "out int" is another large indicator that this is doing stuff very special.

Finally, i'd point out that the mispelled name problem is really no different than what you might experience today with code like:

      int myvar;
      ...
      // much later and indented a bit ...
             int mvar;
             Foo (out mvar);

Here you've unintentionally introduced a new variable that you may or may not have intended to. Without a collision, there's no way to tell.

> it's this sort of bug that arises often in languages that allow implicit > declaration of variants.

No implicit declarations are allowed. All declarations are explicit. We just don't force you to have to declare in one location and use in another. This is a pattern that many people hate, and which goes against a desire to immediately declare and initialize, and thus not have to track down how a variable is written to.

<comment><USER28> > I'm not sure how this situation is any different from any other case where > you need to pass some variable, and you pass the incorrect name.

It's a wildcard. Passing in any other variable name would ideally raise an error about the use of an undeclared variable or a mismatched type. The use of a wildcard disposes of those errors.

> the mispelled name problem is really no different than what you might > experience today

Not quite; your modified examples includes two declarations on their own lines. Being on their own line gives them greater visual presence at-a-glance than the new syntax which buries the declarations within a parameter list.

Worth noting is that my trivial example managed to confuse at least one reader who was unable to see the issue[0].

> All declarations are explicit.

While true, you've muddied the lines a little by moving declarations into the syntax of other expressions. Where previously a declaration sat on its own line or at the beginning of an assignment, they may now be peppered throughout the syntax in ways that are not so easy to observe at-a-glance.

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

</comment></comment></comment><comment><USER29> Wow, lot's of great stuff! I especially like local functions, I'm all for breaking up complicated methods into several methods to simplify and clarify syntax... but it always felt weird that all those methods where on an class scope even though they only were relevant for that method.

This resulted in many cases that those methods needed to be broken out into their own class... which is the way to go some times but felt like a bit of overkill in others

<comment><USER30> I mostly agree, but until now I just created private helper methods and went on with my life. If there are many of them, I put them into a #region. There are alot of cases where such helpers can be used from two separate locations and they also increase discoverability for other devs.

If you really wanted to, wasn't it already possible to create anonymous delegates/lambdas locally? The only improvement I see with local named methods are readable stacktraces.I have to admit, the mangled names are a major headache for me (and the stacktraces starting at lamda invocations, missing the 'original' stacktrace. I'm looking at you Parallel.Foreach!)

</comment></comment><comment><USER12> I've been really excited about this release, but also a little disappointed that we still don't have proper object composition.

I'd be happy with either extension methods with state or adding traits to the language as a separate feature. I understand the reasons it was decided against in C# 4, but its hard to preach composition over inheritance when the framework is philosophically against it, and it runs contrary to how the whole framework is structured (single inheritance from Object). But it still irks my fussiest self.

You can get something that sort of gets mostly there with ConditionalWeakTable, but its not endorsed by the vendor, and in the experience I had with it while trying to create a mixins module for C# a few years back, makes the GC leak like a sieve at scale.

</comment><comment><USER31> What's the point of

        GetCoordinates(out var x, out var y)

over destructuring assignment like

        var x, var y = GetCoordinates();

the former looks completely backwards.

<comment><USER32> Wondered about this myself, is this something that is needed for backwards compatibility or something?

IMO fishing parameters back from functions is one of the things I do not miss from old C.

Anyone has anything to add to masklinn's explanation?

Edit:

found CyrusNajmabadi's comment here: [https://news.ycombinator.com/user?id=CyrusNajmabadi](https://news.ycombinator.com/user?id=CyrusNajmabadi)

</comment></comment><comment><USER33> I just realized that I don't remember I ever saw a C# rant on HN and very very rarely in general. It must have the highest usage/complaints ratio in the industry. Now that I said that I'd love to see the languages ordered by that ratio!

<comment><USER34> Maybe not exactly what you want but it is a "% of developers who are developing with the language or tech and have expressed interest in continuing to develop with it".

[http://stackoverflow.com/research/developer- survey-2016#tech...](http://stackoverflow.com/research/developer- survey-2016#technology-most-loved-dreaded-and-wanted)

</comment></comment><comment><USER35> Since we're all chipping in with features we'd like to see in C#, here are mine: anonymous classes - with actual class bodies, that can implement interfaces - and traits.

<comment><USER36> Can you give an example of how C# would be different with anonymous classes?

Googling that term just gives a whole lot of references to inner classes in Java.

<comment><USER23> One I've come across is binding a command to a button. With anonymous inner classes you can have something like:

      myButton.AddListener(new Command {
        bool enabled() {
          return false; //more logic goes here
        }
        void onClick() {
          //do something
        }
      });

<comment><USER36> I'm not convinced that gives you that much more over using a delegate.

<comment><USER23> It doesn't. It's a nice to have feature, not a world changing one.

</comment></comment></comment></comment></comment><comment><USER37> Im so excited by this in particular

"Switch statements with patterns

We're generalizing the switch statement so that:

•You can switch on any type (not just primitive types)

•Patterns can be used in case clauses

•Case clauses can have additional conditions on them

Here's a simple example:

switch(shape)

{

        case Circle c:

            WriteLine($"circle with radius {c.Radius}");

            break;

        case Rectangle s when (s.Length == s.Height):

            WriteLine($"{s.Length} x {s.Height} square");

            break;

        case Rectangle r:

            WriteLine($"{r.Length} x {r.Height} rectangle");

            break;

        default:

            WriteLine("<unknown shape>");

            break;

        case null:

            throw new ArgumentNullException(nameof(shape));

}

There are several things to note about this newly extended switch statement:

•The order of case clauses now matters: Just like catch

clauses, the case clauses are no longer necessarily disjoint, and the first one that matches gets picked. It's therefore important that the square case comes before the rectangle case above. Also, just like with catch clauses, the compiler will help you by flagging obvious cases that can never be reached. Before this you couldn't ever tell the order of evaluation, so this is not a breaking change of behavior.

•The default clause is always evaluated last: Even though the null case above comes last, it will be checked before the default clause is picked. This is for compatibility with existing switch semantics. However, good practice would usually have you put the default clause at the end.

•The null clause at the end is not unreachable: This is because type patterns follow the example of the current is expression and do not match null. This ensures that null values aren't accidentally snapped up by whichever type pattern happens to come first; you have to be more explicit about how to handle them (or leave them for the default clause).

Pattern variables introduced by a case ...: label are in scope only in the corresponding switch section."

</comment><comment><USER38> I wish they did not call it pattern matching. Instead this is more like Destructuring combined with Switch. the guarantees are different

<comment><USER39> "Full" pattern matching, as one would expect from F# for example, wouldn't be something I could expect from C#. For example:

        type Tree<'a> = Empty | Node of 'a * Tree<'a> * Tree<'a>

There is no way to express this directly in C#. Thus, I am "locked out" of a whole class of Pattern Matching that I would get with F#.

But that doesn't mean that C#-style pattern matching (really, Is-patterns and a Type Switch) don't fall under the umbrella of Pattern Matching. You can define tuple patterns that you can match on with the switch statement in C#, which is every bit a form of pattern matching as matching on a particular case of a union type.

<comment><USER38> > C#, is every bit a form of pattern matching as matching on a particular case > of a union type.

I'm afraid that is not the case, because in the current C# version, the compiler does nothing help you determine if you've matched all the possibilities. (it is not exhaustive)

Exhaustiveness is important because it gives warning or an error to help you refactor and modify code without fear of breaking other code. Why engage in all the static typing business if the compiler is not going to help you refactor things?

This is important in the same way that adding a subclass requires exhaustively supplying all the abstract methods (true pattern matching is "dual" to adding a subclass; you use the compiler feedback to direct what actions to take next. you can't do this with the Switch based formulation because you don't get any feedback from the compiler if you missed cases or have refactored other code to add cases (for example, adding/refactoring abstract methods in a base class provides feedback on where to add/update methods in the subclasses)

<comment><USER39> Yes, and because of the lack of record and union types in C#, it's (probably) nigh-impossible to pull off exhaustive pattern matching. However, this is _still_ pattern matching - you can define tuple patterns which decompose the data, much like you can in F#; just with some different syntax.

I agree with you that exhaustiveness is incredibly important, and I really hope that it can be done in C# some day. However, record and union types are also a piece of this puzzle.

<comment><USER27> You can achieve something similar via a library: [https://github.com/mcintyre321/OneOf](https://github.com/mcintyre321/OneOf)

I also think language level support for this would be a killer feature, it turns OOP and the requirement to use polymorphism to guarantee strategy-per- type on it's head.

</comment></comment></comment></comment></comment><comment><USER40> CSharp once again showing it is the best language in terms of features and improvements. Great job all round by the designers.

<comment><USER41> I'd say Swift is more or less in line with C# with regards to functionality. Many new features added to C# seem to already exist in Swift. Swift could use some async/await mechanism en sometimes it's a bit annoying to typecast simple types for calculations, but otherwise Swift is a really sweet language to work with.

Nonetheless C# is a nice language. I enjoy writing C# code, just as I enjoy writing Swift code.

<comment><USER40> I'd disagree with you to be honest. Swift is still in it's infancy, and while it copied many of it's features from CSharp, it did so poorly and even now they continue to make breaking changes to their standard with each update.

<comment><USER42> Yes I have noticed this. It is interesting observing the changes to Obj-C just to keep up with the developments in Swift-land, when Swift itself is changing so frequently.

</comment></comment></comment></comment><comment><USER7> Will C# ever start to increase type inference to make it less verbose? Local functions are ok. But why not lambda syntax+inference? Probably still because of making quoted code have ambiguous syntax. But this ends up adding noise and increases the barrier on deciding when to put code into a tiny function.

When using C# I'm constantly noticing how much extra code there is. It's just frustrating, and I don't feel like I'm getting a unique benefit in return (unlike, say, in Rust). I know F# would be more concise and work just as well. But I know it's not easy extending the existing design decisions.

(The tuple story is sad, eh? This was F#'s original design, using structs. Then they made peace with the strange heap allocated framework tuple. And now...? No tuple interop?)

Anyways, congrats, C# definitely is the best general dev language commonly accepted at a large amount of companies, especially when factoring in tooling.

<comment><USER43> > how much extra code there is. It's just frustrating, and I don't feel like > I'm getting a unique benefit in return (unlike, say, in Rust)

Actually you are getting a benefit in return (unlike, say, in Rust) - <USER3> libraries. Verbose syntax is less complex in regard to writing the code, so more developers write the code. I have no scientific evidence to provide about the fact, but observations speak for themselves. Compare the quantity of libraries available for Rust and yet another 'overly verbose' language, Go. We can find Go wrapper for almost anything, and often a few to chose from.

<comment><USER44> > Compare the quantity of libraries available for Rust and yet another 'overly > verbose' language, Go. We can find Go wrapper for almost anything, and often > a few to chose from.

Rust was stabilized last year, while Go was released six years ago. It is simply wrong to say that Go has a larger quantity of libraries because it is more verbose. IMHO the Rust ecosystem is surprisingly comprehensive for a language its age.

</comment></comment></comment><comment><USER45> Nice! I was also hoping for some sort of guaranteed not-nullable type and immutable classes. Maybe in C# 8.

<comment><USER14> F# has guaranteed not-nullables, except when you do default<NotNullableThing> it returns null. That said, it generally works well in well-defined situations but any time there's deserialization it's often a bigger mess than just never assuming not-null.

I think it's a problem that needs to be solved in the CLR, not C#, and my guess is it probably never will be.

</comment></comment><comment><USER46> Does the pattern matching also statically check that you don't try to use a failed match.

What if instead of

         if (o is null) return;     // constant pattern "null"
         if (!(o is int i)) return; // type pattern "int i"
         WriteLine(new string('*', i));

somone forgot to return, as in

         if (!(o is int i)) {
             // do something
         }
         // incorrectly try to use `o` as an int
         WriteLine(new string('*', i));

Rust uses the special `match` syntax to avoid this. But I suppose C# 7.0 also analyse the structure of the `if`s and `return`s to acheive the same effect more flexibily.

And if it can do that, could that they also start phasing in statically- checked null avoidance?

<comment><USER19> This was a concern of mine as well, as you can see in the discussion of scope changes for pattern variables [1], the C# checks for definite assignments handle this. So:

        if (o is int i) { f(i); }
        use_int(i); // <-- error: variable `i` is not definitely assigned

But then if you have:

        if (o is int i || (o is string s and int.TryParse(out i)) use_int(i);

We know that `i` is definitely assigned at that location.

[1]: [https://github.com/dotnet/roslyn/issues/12597](https://github.com/dotnet/roslyn/issues/12597)

</comment></comment><comment><USER47> I tend to avoid using switch/case for quite irrational reasons. The break statement just looks wrong and I can't layout the code in a way I find at all pleasing. I'll almost always use a sequence of else if conditions instead.

In my ideal world, it'd look like...

        switch (x)
        {
            case 1:
            {
                /* ... */
            }
            case 2:
            case 3:
            {
                /* ... */
            }
        }

And before anyone points it out, switch is the same as else if when the thing being compared is a simple local variable.

<comment><USER48> Same here, plus I think the parent brakes are noise, can the compiler just know that the switch statement ends on last case?

<comment><USER49> Not with nested switch statements.

<comment><USER48> ...I don't want to ever have to work with your code.

</comment></comment></comment></comment><comment><USER50> Like everything except "Ref returns and locals".

I don't think I've ever seen a case where I wished for that feature.

All the other things - tuples, anonymous out vars, pattern matching - I've found myself wanting quite often.

<comment><USER51> I believe ref returns are a performance feature. They seem a bit like move constructors in C++ in that they can save you a copy? But I am not confident I understand the nuances of move constructors to compare them properly.

<comment><USER52> They don't move anything, they are either pointers to a value on the stack or to a field in an object on the heap. The first is more like how standard C++ references are usually used, and the second are interior pointers like Go has. No code gets executed to make them happen, and no data is copied.

</comment></comment></comment><comment><USER53> Since C# is starting to look more like JavaScript (i.e. local functions) and vice versa (i.e. arrow aka lambda expressions). I'm going to throw my pocket change into a couple features I've been growing old hoping to see:

1\. Regex expressions just like Regexp in JS:

        /^\s+$/.IsMatch("  "); // or
        Regex r = /^\s+$/;

2\. DateTime expressions, similar to regex, something like:

        DateTime clockTowerLightning = #1955/11/12 10:04PM#;

<comment><USER54> I'll take DateTime literals, for sure. But only if they require using ISO date format. A slight munge of omitting the timezone to mean 'system local timezone' would be fine too.

My main objection is over the month/day confusion with other formats. Is that November, or December?

<comment><USER13> ISO-serialized datetimes are the only serialized datetimes. At least if you want to avoid painfulness. Similarly, UTC is good. If there's one thing I've learned, it's that, for my own sanity, datetimes should be localized and formatted at the last possible instant, just before a human has to see them, and kept in a consistent, canonical form at all other times.

</comment></comment></comment><comment><USER55> I thought pattern matching in C# would look like pattern matching in Elixir. For example, two functions with different signatures run based on the parameters you give it.

        def hello("sergio") do
          IO.puts "Hello Sergio"
        end

        def hello(name) do
          IO.puts "Hello #{name}"
        end

        ---

        hello("sergio") => "Hello Sergio"
        hello("mia") => "Hello mia"

<comment><USER14> Isn't that more an example of `multiple dispatch` rather than `pattern matching`?

<comment><USER56> Both :) You can pattern match in function head (definition)

[http://elixir-lang.org/getting-started/pattern-matching.html](http://elixir- lang.org/getting-started/pattern-matching.html)

</comment></comment></comment><comment><USER57> Pattern matching, tuples, local functions... feels like someone was inspired by how Typescript turned out :)

<comment><USER20> Or just looking at F#.

</comment></comment><comment><USER58> In the binary literal proposal there is also some unresolved discussion about octal support, chip in if you like:

[https://github.com/dotnet/roslyn/issues/215](https://github.com/dotnet/roslyn/issues/215)

<comment><USER59> I wish more languages would take a radix-agnostic approach (at least to a reasonable limit). What's wrong with:

      2#1010101
      8#75342
      1341235
      10#13451
      16#feb1300

radix#value, from erlang.

Or:

      #b10101
      #xfefe
      #o7777
      #36rSSSS

From common lisp.

Customize in some fashion for C# and its current notations for hex and (now) binary literals.

      036rSSSS
      02r10101
      0b10101 // this and above are equal

<comment><USER60> The reason people don't do this is:

1\. Our current base notation is already familiar and widely used. Nobody is confused about 0xA vs 0b10.

2\. Nobody will really use those other bases, so you're adding obscure features that muddle your syntax.

</comment></comment></comment><comment><USER61> Wow! These are some really impressive features. I started learning F# a few months back and I can see some interesting parallels. Very excited to see Tuples and Pattern Matching.

</comment><comment><USER62> Is 6.0 widely used in industry/open source?

<comment><USER63> At my work I do a lot with 3.5 still. We need to upgrade our version of devexpress. More recent projects use MVC with .Net 4.0 or 4.5 (but our IT guy is nervous about installing such new runtimes on the servers that don't have 4.5 already..)

We use VS2012

<comment><USER64> You can easily use c# 6 with .NET 3.5. I know because we do!

You just need to upgrade VS to 2015. Language version has nothing to do with framework version!

</comment></comment></comment><comment><USER65> Noob question, why tuples? I mean why 3?

<comment><USER66> t doesn't mean three, it works with 2 or more.

</comment></comment><comment><USER67> Microsoft is mixing object oriented and functional in c#. This is not right, not only in case of Microsoft but also Python etc. They are fundamentally different and self-contained and need to be kept separate.

</comment><comment><USER68> Unfortunately, C# can flail about adopting F# features yet the best feature of F# is something C# can never get:

Dependency Order Compilation

<comment><USER14> Except it does. And F# doesn't. F# just has _in-order_ compilation. C# has an extra step to determine dependencies and compile them in dependency order.

The only thing for F# is that F# allows the user to determine the compilation order and show it in Visual Studio.

<comment><USER68> Sorry I wasn't clear, I meant in the following sense:

"One of the most common complaints about F# is that it requires code to be in dependency order."

In light of your statement I understand the way I put it made little sense.

</comment></comment></comment><comment><USER69> My instant concern: the variable names used by function declarations have become part of the API. If you use var to match the library producer's naming for tuple members, a rename of the variable in the definition will break your code, as the name you previously used will no longer exist!

Old example:

        bool Hello(string name) {...}
        var myName = "world";
        Hello(myName);

The developer can change the name of variables in the prototype to be more (or less!) descriptive without a problem - they're decoupled.

New example:

        (string interjection, string name) GenerateGreeting() {...}
        var greeting = Greeting();
        Console.Write("{0} {1}", interjection, name);

Now should the author change "interjection" to "greeting", _ your code won't compile _ and in a way that you likely didn't expect.

<comment><USER70> I assumed they are still decoupled and just shorthand for:

      string interjection;
      string name;
      (interjection, name) =  GenerateGreeting() {...}

I can't believe the C# team would introduce something so brittle into the language. If you're right, that a serious concern.</comment></comment>


Ask HN: What do you need in HN search? - <AUTHOR> Based on your feedback we've come up with a new search UI that should better stick to HN's style: https://new-hn.algolia.com
Tell us what you think about it and what you'd like to see next (we're thinking for instance about adding search analytics on frequent queries in the last 24h/month/....)
Talking about next evolutions, we actually had something in mind and wanted to run it through HN's community. It's kind of crazy different so we hope we'll get tons of feedback on this one. This is an experimental skin with more search features and you can try on https://new-hn.algolia.com/?experimental
Here is a blog post explaining our reasoning about this experimental style: http://blog.algolia.com/try-new-experimental-version-hn-search/
We can't wait to get your comments and ideas! <comment><USER2> 1\. A more powerful time filter would be very useful (Last week, last month, last year, custom range where dates can be picked).

Without this search is not very useful to me at the moment. So I use Google to search HN since they do offer a filter

2\. Points filter and comments filter would also be great (> 10 points and/or > 5 comments). I get lot of results which have no activity

<comment><USER3> 1\. Makes sense, good point!

2\. Yes, there is actually a trick in the query syntax: if you use "points>10" you'll get all posts that have more than 10 points. I'll plug the filter on the number of comments as well (like comments>X). Do you think we should rather have sliders?

<comment><USER2> Sliders will probably make the UI a bit busy in the current version. If the syntax is easy, just linking to the syntax should be sufficient.

In your experimental UI, the sidebar can expose all these filters without cluttering up the main UI

</comment></comment></comment><comment><USER4> The one thing I do like about the new search site is that it doesn't open everything up in a new tab... something that is an annoyance with the current search. Please keep it that way! If I want something in a new tab, I'll just Ctrl+Click on the link.

Some other issues:

* Stories which have no external URL (text submission only) have titles which are not clickable.

* Comment results link to the submitted URL of the story. I was expecting the link would go to the comment itself, though this is likely a personal preference. When I view an individual comment, I either want to see all the other comments on the story or see the context by navigating to the parent if the comment is a reply. Seldom would I expect to view a comment several replies deep and then want to read the story.

* Clicking on the time reference (eg: "an hour ago") takes you to the anchor for the comment within all comments in the story, whereas clicking the "comments" link takes you to the specific individual comment. This is backwards.

* The up arrow shown in results seems to have no function. While it preserves the HN feel, it breaks expectations by having a different behavior. As it's unlikely upvoting from an external site is going to ever work, this should be changed to some other visual indicator.

<comment><USER3> Thank you for the detailed feedback; we'll work on that!

</comment></comment><comment><USER5> Well, my large corporate employer uses Websense which seems to categorize hn.algolia.com as ("Category: hacking"), and blocks all queries (HN itself is fine). So I guess I'd say I need...search. Maybe you can get off the blacklist/on a whitelist?

<comment><USER3> Oh, interesting :/ Is it the same on "new-hn.algolia.com"? (we removed the HTTP OPTION query that was performed to deal with extra headers & CORS -> maybe it didn't help).

<comment><USER5> I can access new-hn though I can't say whether it's due to your changes. The https redirect adds an extra step because of a click through "this site could be evil" that Websense adds--I think it stores the acceptance for the http site, but then the https redirect happens which isn't registered on the "possibly evil" click through acceptance list so it initially fails. Manually going to the https version fixes this problem, though.

Man, I hate proxies.

</comment></comment></comment><comment><USER6> How about making the site responsive/mobile-friendly first before tackling search?

<comment><USER7> it's planned but we wanted to validate the layout before making all responsive.

<comment><USER8> This is how the website looks on my machine: [http://i.imgur.com/j2bavtp.png](http://i.imgur.com/j2bavtp.png). Horizontal scrolling only reveals more of the search results.

</comment></comment></comment><comment><USER9> I like the additional filtering in the experimental interface, for example to switch between "All" and "Hot". I could see that being quite useful. Though the experimental page has too much whitespace for my liking - I can see 5-6 stories on a page vs. 10 or so on the HN style page.

It would be great if it saved my preferences (Sort by, date range) since I usually end up flipping those values to the same thing.

One minor annoyance is "JavaScript" being picked up when I search for "java". Would be nice to have the option to search for whole words.

A very minor annoyance is usernames are treated the same as text in stories. If I search for 'IBM' for example, I'll get all stories submitted by user 'IBM'.

<comment><USER3> Yes "prefixed" search is enabled by default as-you-type. Just press "Enter", it will disable it. Being able to totally remove the "prefixed" search makes sense however.

</comment></comment><comment><USER10> I haven't been able to produce a reliable test case, but I have noticed that fairly often, I try to search for a story or comment that I _know_ exists, that I distinctly remember seeing in the past, and I won't be able to find it. Then randomly, perhaps after reposting said article, I'll try again later, with the exact same search terms, and it will show up in the results. Then a few days later, I look it up again, and it doesn't show up anymore.

I'm sorry that that isn't a terribly helpful bug report, but I think you have a frustrating bug in your backend somewhere.

A more concrete issue present in both the old UI and the new one would be that there is some kind of problem with your search form such that, on iOS Safari, the multiple forms control with the little arrows to select between fields pops up, even though there is only one field. This means you cannot see the search results while you are typing, when you would otherwise be able to see at least the title of the first result. Also, hitting "Go" (or now "return") doesn't make the input control go away, you have to hit the X next to the field select arrows to view the results, which manages to trip me up every time. I'm not a web guy though, so I don't know if that last one is inevitable for this kind of form or something.

</comment><comment><USER11> People.

I'd love to see people-search-results beside the regular results. Who were the top submitters and commenters on links/comments related to my search? so HN identities like jlemoine.

Bonus points for people mentioned as subjects or authors in the stories/comments (and the articles the links point to) without an HN identity. Recognizing human names would be huge. Searching HN for Captain America, Linus, Steve Jobs, Paul Graham, or your own name should be popular.

</comment><comment><USER12> A search URL that does not change, preferably hosted on ycombinator.com. A search URL that does not redirect to Octopart, bless their hearts.

</comment><comment><USER13> Notifications like Google Alerts. Whenever I add some certain topics, I want to be notified if someone adds a comment with those words.

</comment><comment><USER14> Guys I love your search, but what I am missing is that you index the content behind the headlines. So I've build my own, for example:

[http://search.nagrgtr.com/#/search?q=greater%20than%2030kmh%...](http://search.nagrgtr.com/#/search?q=greater%20than%2030kmh%20speed)

</comment><comment><USER15> I ran into a problem today where I'm trying to find something I saw a really long time ago - so sorting by date from oldest to newest would be great.

EDIT - If I can filter by date ranges like others have suggested, I would much prefer that to my sort direction request!

<comment><USER16> I do this all the time. I need to go to google and hope I can find it. I usually only remember some small thing about it... like "flights" or "data set". Sorting by date it was on the front page of HN would be best for me.

</comment></comment><comment><USER17> I _always_ immediately turn the settings to "All" and "sort by date"

<comment><USER3> Oh btw, your post is highlighted in our blog post Steve :) [http://blog.algolia.com/try-new-experimental-version-hn- sear...](http://blog.algolia.com/try-new-experimental-version-hn-search/)

<comment><USER17> Ha, neat! :)

</comment></comment></comment><comment><USER18> The ability to search only my saved articles. I'm guessing HN does no link click tracking, but searching viewed articles would be nice. These would be especially useful if the text on the target page were indexed as well.

<comment><USER7> You can star articles and limit your search to those articles by clicking on the 'Starred' tab from the left sidebar. Does it help?

</comment></comment><comment><USER11> Permalink the query and add comments. So "[https://new- hn.algolia.com/?experimental&query=GOTHAM%20-man...](https://new- hn.algolia.com/?experimental&query=GOTHAM%20-manhattan%20-nyc%20-york&sort=byPopularity&prefix&page=0&dateRange=all&type=all") can become a destination for conversation.

</comment><comment><USER19> Perhaps this is too far outside of your existing scope of functionality but I'll throw it out there: I would really love a "Hacker News Alerts" feature. I make the same searches every week on a few key terms but it's a manual process.

If you could push new search results directly to my inbox it would be convenient.

<comment><USER3> We could partner with [https://www.hnwatcher.com](https://www.hnwatcher.com) (using the HN Search API btw), they proposed us their help a few months ago.

</comment></comment><comment><USER20> Custom date ranges with a calendar picker!

<comment><USER7> It seems that you're not alone to need this feature [https://news.ycombinator.com/item?id=8875125](https://news.ycombinator.com/item?id=8875125)

</comment></comment><comment><USER21> Good job ;-) just for fun, I've build my own - based on Elasticsearch [http://hnpaper.forge.partlab.io](http://hnpaper.forge.partlab.io)

</comment><comment><USER22> I used to use HN Search until the Algolia switch. Now I use Google site search. Why? Algolia just doesn't help me find what I'm looking for.

<comment><USER3> Could you share with us some failing queries, I would love to fix them.

</comment></comment><comment><USER23> Would be cool if it crawled the search terms of the target link. Often I try to find some HN post but I have problems thinking of the words in it.

<comment><USER7> Do you mean that some automatic tags would help you to remember the keywords for a future search?

</comment></comment><comment><USER24> Shameless plug: HN Search [http://hn.21zoo.com/](http://hn.21zoo.com/)

</comment><comment><USER25> I'd like something that searches the remote contents of the posted urls, sorted by date.

</comment><comment><USER26> Search over only articles I have read - I often want to find an article I read last week

</comment><comment><USER27> The option to only search in titles, ignoring the full text of text posts.

<comment><USER3> By default the title is better ranked but then it will also fetch results in the text, you're right. It could actually makes sense. Just need to figure out the best way to use it (without flooding the UI). Maybe in the dropdown menu before the input or with a search syntax.

<comment><USER27> I mostly search ordered by date (because I often try to find things again and have a rough idea when they were submitted), so I obviously don't see the ranking effect.

</comment></comment></comment><comment><USER28> I don't. I use Google site search. It's never failed me.

</comment><comment><USER11> Link back to original HN entry. Can't see it.

</comment><comment><USER11> "Ask HN" as a search category.

</comment><comment><USER29> can you differentiate C#, C++, C? (I know n-grams means a much bigger lucene index when i looked into it)

</comment><comment><USER30> A real customized algorithm based on vector space.

<comment><USER31> Do you mean representing each user as a vector in an N-dimensional space for N = number of possible votes, then using the distance between them as indication of similarity to weigh their votes relative to your preferences?

If so, +1.

<comment><USER30> Um, yes distance being calculated by a smarter calculation than Pearsons or Euclidean, a variation of RV or something that closely mimicks the way our minds compare for similarity. No bag of words or naive Bayes. True probability.</comment></comment></comment>


Firfox Preview Nightly Now Supports uBlock Origin - <AUTHOR> https://mobile.twitter.com/FirefoxPreview/status/1224760128035086338 <comment><AUTHOR> There are still some bugs, but it's working. You'll need to update to the latest Play Store build if you already have it installed (and sometimes you need to tap the app name to get the update).

APKs are available at [https://firefox-ci- tc.services.mozilla.com/tasks/index/proje...](https://firefox-ci- tc.services.mozilla.com/tasks/index/project.mobile.fenix.v2.nightly/latest)</comment>


Chinese Search Company Baidu Built a Giant Artificial-Intelligence Supercomputer - <AUTHOR> http://www.technologyreview.com/news/537436/baidus-artificial-intelligence-supercomputer-beats-google-at-image-recognition/ <comment><USER2> The tragedy here is that the political climate of China will hamstring the usefulness of this achievement. Baidu's search results are inferior to those of Google's; it doesn't matter so much that Google's computing power is inferior. Google can actually use the results.

Whatever technical achievements that Baidu can accomplish will be wasted because they won't be able to overcome the political issues that come with being able to make use of those achievements. :(</comment>