Why I don't use bug tracking software. - <AUTHOR> http://fragile.org.uk/2010/04/why-i-dont-use-bug-tracking-software/

<comment><USER2> I'm a big fan of this approach, but I find that bugtracking is really useful when you want to look back on the project and data-mine to identify problems with your _process_ that you want to fix.

For example, if bugs get identified quickly and fixes mailed quickly, but the fixes sit in code review for a long time, maybe it's time to lean on your code reviewers a bit more. If 50% of your bugs are CSS regressions, maybe it's time to invest in a CSS-testing framework. If most of your bugs are crashes caused by memory corruption, you need to straighten out object ownership in your C++.

These kind of overall patterns are very hard to discern when you're considering one bug at a time, yet fixing the root cause of them can lead to big productivity gains.

</comment><comment><USER3> There's a major problem with completely ignoring and not tracking ignored bugs:

They can come back and bite you. What may seem innocuous in one system now may end up being a huge roadblock later on down the line when you want to extend/modify/update said system with new features. While I understand that some bugs are simply too minor and the edge cases simply too rare to bother fixing, it's still a good idea to track them.

This also makes certain that they aren't brought up again as a new bug six months down the line - you can point to the tracking software and say, "Yes. We know about it, and it's not worth fixing."

<comment><USER2> Then you fix them later, when it _becomes_ a roadblock. At that point, you'll have much more information about _why_ it's a roadblock and how you should change things so that further development proceeds smoothly. And many bugs may never become roadblocks at all (or may be obsoleted by other changes), so you save all the development effort of fixing things speculatively.

I've seen a lot of time wasted trying to anticipate what might break later on and bullet-proofing that, when the bullet-proofing simply breaks in new and unforeseeable ways when you actually do try to extend it.

As for running across the same bug six months later - at that point, you probably should reevaluate and decide again whether you want to fix it. The "WONTFIX" designation was made on the basis of information that's now 6 months out of date - the fact that the bug has come up to bite you again is perhaps a good reason why now it should be fixed.

<comment><USER3> Very true - all the more reason to keep track of it having been reported.

</comment></comment></comment><comment><USER4> This ignores a critical use of bug tracking - communication. This approach might work in a small local team, but falls apart in a bigger organization or in a distributed environment. Bug tracking software is one place to store information about the bug that multiple people can comment on. The person discovering the bug might not be a developer, and often not. The person testing the bug shouldn't be the developer; QA is doing it. If the fix involves several people and they need to add input, they can add in their comments in the bug tracking system. Cvs/Svn/Git can tie with the bug tracking ticket to create a reverse lookup. There are so many benefits to have a bug tracking system.

</comment><comment><USER5> "Hopefully such occurrences are rare and can be considered a special case."

What if it's both high-priority and hard? Like you find out that a fundamental part of how your product works causes data to be miscalculated in a certain scenario, and rewriting it while maintaining backward compatibility is a multi-week task? During which you will get more high-priority bugs...

This article sounds like a fantastic sentiment, but even a small project of a few hundred thousand lines will completely fall over as soon as it's released into the wild. And if you had a medium-sized project you wouldn't even make it past the point where internal testing is doing large scenario evaluation.

That said, if it works for your team, go for it. Never throw in more process than you need, but don't assume that what works for small teams scales. Unless you're trying to sell a book or consulting services, of course :-)

<comment><AUTHOR> "What if it's both high-priority and hard? Like you find out that a fundamental part of how your product works causes data to be miscalculated in a certain scenario, and rewriting it while maintaining backward compatibility is a multi-week task? During which you will get more high-priority bugs..."

Perhaps it's a matter of terminology, if something is going to take a significant block of time and have multiple people working on it then you need some way of planning and tracking progress, your bug tracker may support project planning as well (JIRA perhaps), but used a pure bug tracker will not be as effective in fixing the problem.

"That said, if it works for your team, go for it. Never throw in more process than you need, but don't assume that what works for small teams scales."

I fully agree with this sentiment, in this case we're talking about a dev team of 6 working in a broader team of 50 developers. So I wouldn't describe it as small, though there again if we were 250 developers then certainly, we'd need more process.

<comment><USER6> I'm not sure how much team size is relevant here. You're still creating project history through a series of discussions and decisions, things that a bug tracker can record quite well if used properly. Every team also has turnover. Having your project's history recorded in written form can be invaluable for new (and old) developers to research why something was done a certain way, and not have to rely on memory and hearsay to do it.

</comment></comment></comment><comment><USER7> It's a good strategy when you're doing small, quick, low impact releases. When you have to coordinate with other areas of the company about when, and what to release, or when the software becomes so large that there's a new bug every day, then you need to keep a detailed track of the bugs.

</comment><comment><USER8> i don't understand what this has to do with bug tracking software. you can realize the same thing by placing all bugs in the tracker, and still ignoring low-importance bugs.

at least that way when the bug re-surfaces, and you discover "its a bigger deal than we thought", you'll know for sure that you've seen it before

<comment><USER9> I can definitely see an argument for _logging_ ; particularly as relates to project and developer metrics.

But 'Bug Tracking' is used to describe much more than 'Bug Logging'. Bug tracking software packages define themselves and pitch their value based _entirely_ on how they handle that 'everything else'.

Ergo, if you reject the 'everything else' (as the author does), you are rejecting bug tracking software.

</comment></comment><comment><USER10> It's good to track low priority bugs; and specifically the customer they affect.

In slow weeks (when we have little to do) we pull out the low-pri bugs and fix them - then fire off a personal email to the relevant customer(s). It's helpful in building an ongoing rapport with your clients.

<comment><USER11> You have slow weeks? In a start-up?

I'd consider that a very worrying sign.

<comment><USER12> Everything is relative. In a startup a slow week might be like a really busy week for a regular 9-5 job.

</comment></comment></comment><comment><USER13> It (obviously) works fine for small to medium projects, but I believe the bug tracker-free approach doesn't scale at all. I don't know if the author thinks it does or not, I just want to point it out to prevent people from getting ideas. :)

Scenario 1: A salesperson or customer advocate reports five bugs found during deployment of application X. Some of the bugs crosses several products, and you have to "pass on" the bug to backend server developer Bob when you find out your code is working as intended. How should you communicate the reported bug and your analysis to Bob? Assign the bug to him in the tracker, and he will get access to the complete bug history - initial report, discussion, reproduction steps, analysis, why-this-isn't-a-problem-with-module-Q-even- though-it-looks-like-it, new comments, screenshots, log files and configuration file attachments from the customer. How will you (and Bob) communicate progress to the salesman? He is CC-ed to each bug in the tracker.

Scenario 2: Your team is responsible for 4 products, which it switches between focusing on every few weeks. When you're hard at work on releasing product A version 3.1, and you spot a nasty and subtle problem with the design of the message queue in the upcoming version 2.3 of product C. Immediately drop development on A? No, you have a deadline to respect and the product C bug isn't affecting anyone yet. Forget about the bug and _hope_ to rediscover it or remember it (and 5 others) in 6 weeks time? That is irresponsible. You put it in the bug tracker, and when product C time comes around, you look at the bug database before starting work.

Or as larsberg says, when your project reaches a certain size and userbase, you _will_ get several hard and timeconsuming bugs at the same time. You can't always fixemrightaway or drop them.

</comment><comment><USER14> A real benefit I have found in not tracking bugs is that the constraint makes you much less cavalier about introducing complexity in the first place, which is totally a good thing.

</comment><comment><USER15> Assuming you have more work than resources (which is what one should plan for) I would find it hard to sacrifice the 'strategy' aspect of bug tracking systems. A good bug tracking system allows you to balance quick/low-overhead logging with an ability to create categorical data points that let you analyze your work & workload.

Having this data collection & reporting allows you to identify & trend problem areas that can not be seen looking at a single bug at a time by different people. It also allows you collect similar/overlapping areas of work to strategically manage your resources and productivity - saving you time and money.

Maybe the case is that the article comes from a company that's just too small to realize the benefits of planning.

</comment><comment><USER16> I add low-importance bugs that can be done quickly to a "quick" list. If I have some time to spare, I check that list and knock off a couple.

Another idea is to simply try find out where a bug might be and add a TODO comment to the file/class. This way, if someone changes that class later they can keep the issue in mind.

</comment><comment><USER17> I often find bugs when I'm too bleary eyed to care about fixing them. If I just go to bed at that time, I'll have forgotten about it in the morning. Instead, filing a 2 line bug report serves as a good enough reminder for when I wake up.

Also, what everyone else said :)

</comment><comment><USER18> When you bleed you need band-aid, but it's best not to bleed in the first place.

Ideal situation is where you don't _need_ a bug tracker.</comment>


AirBNB why did you terminate my account? – An Open Letter to AirBNB - <AUTHOR> https://medium.com/airbnb-superhosting/airbnb-why-did-you-terminate-my-account-an-open-letter-to-airbnb-9631213f8a1b <comment><USER2> What a shitty termination notice and a shitty way of handling things from an account that has clearly been one of their better hosts. If you're going to ascribe the "superhost" appellation, you'd think they'd actually give a fuck before algorithmically cancelling the user's account, or maybe work through a warning or validate their concerns or literally ANYTHING before turning things up to 11 and nuking the account from orbit.

Even if AirBNB had a perfectly legitimate reason (which, to be clear, would make the author a borderline sociopath to publish like this, but isn't out of the question), the termination notice and the complete lack of transparency is so Kafkaesque and needlessly horrible that this just makes AirBNB look awful.

I've considered going the host route, but reading through something like this makes me seriously second guess using them. I understand that it's their platform and they can de facto rule by fiat, but that doesn't mean it's good policy and that potential hosts shouldn't have some sort of communication or chance to rectify an issue or any level of transparency.

It's also disappointing when a company effectively has to be shamed into taking anything resembling a human approach to a problem. It's been a week of "we can't tell you anything, sorry" which is bullshit. There's simply no reason for that, and it's disheartening to say the least.

<comment><USER3> You know how the web 2.0 companies have a massive amount of revenue per worker?

It's because the normal rough edges of handling customer complaints is shoved out the door, because that didn't really matter, right?

"For your convenience your account has been closed. Do not reply to this email."

</comment></comment><comment><USER4> This is a tough read, because someone's livelihood and in some part happiness combine with their AirBnB business, and losing it is painful.

The hell of it is that there are many circumstances in which the customer would not be allowed to know why the cancellation.

I'm most familiar with Bank Secrecy Act rules; some of which definitely apply to AirBnB.

So, for instance, an algorithm flags the house as a likely money laundering location. AirBnB response: notify FinCEN, Thai authorities, turn off customer account without explanation. In the US even telling your employees down the line why the account was canceled might lead to fines and jail time for the compliance folks. I am not making this up, or exaggerating. That's just how it is.

Or, perhaps a repeat customer is the target. Same stuff. Or, perhaps the owner is a small time pornographer / drug dealer / etc in Thailand, and Thai authorities notify the bank, which notifies AirBnB's bank.. Of all the employees contacted, only the CTO would know, but even he might be told "flagged, don't ask." And, that will be all. No matter how much he might care that a good customer stay happy and with the company, getting rid of them is infinitely better than being deposed over a BSA violation and information leakage.

<comment><USER5> Anti-money laundering regulation was my first guess as to why, but it doesn't really fit because companies are not allowed to do anything to warn customers that they are under investigation. Cancelling their account could certainly tip them off to this and so it seems unlikely that it would comply.

Having said that, I don't know what the Thai regulations are. Perhaps this fits better under those.

<comment><USER6> I read a FATF report that stated it was still far to easy to launder money in Thailand's cash economy.

Reporting starts at 2 million baht ($56k)

[http://www.bangkokbank.com/BangkokBank/WebServices/AMLRegula...](http://www.bangkokbank.com/BangkokBank/WebServices/AMLRegulations/Pages/Default.aspx)

</comment></comment></comment><comment><USER7> We've been considering doing the whole AirBnB thing (also in Thailand), but the problem with all of these online services is that you just aren't in any control of your income.

I've kept only to business models where I bill directly. This rules out google adsense, Apple and Android paid apps, AirBnB etc. I won't even use anything like PayPal to collect money for me -- there's just far too much risk for capricious loss of the business through factors that you have absolutely no control over.

Building a business is hard, it seems utter folly to give another entity this sort of control over what you're doing.

<comment><USER8> Reading that article makes me furious -- of course, there are many things we don't know, and this person may be full of it, and she may have crossed a line (knowingly... or unknowingly), etc.

But, even if that's true, not giving reasons why you're kicking users out is infuriating.

No due process, no appeal, just a big "fuck you" with no explanation whatsoever. These companies apparently think it's a normal way of dealing with users -- and something they can do with total impunity once they have acquired near-monopoly status.

Let's hope for a big backlash some day soon.

<comment><USER9> Indeed, Stripe for example built its entire business on people's frustration with similar behavior by Paypal.

<comment><USER10> Absolutely, yet they closed accounts for no good reasons too.

</comment></comment></comment></comment><comment><USER11> Airbnb is a short-term rental company, not a f __*ing nation state.

It amuses/disgusts me when the default position of companies like this is to treat their security policies as some sort of state secret, leading to these Kafka-esque scenarios.

Sadly, I don't really know what the person here can do except write articles like these. Probably doesn't have much of a legal leg to stand on.

<comment><USER12> Kafka-esque is the perfect qualifyer for this situation. Absurd things like this make me feel queesy, sort of like vertigo.

</comment></comment><comment><USER13> "Sharing economy" = shareCROPPING economy. (look up "sharecropping" to understand )

But basically, sharecroppers were exposed to all the risk, and the landowner got the initial first dibs on the crops. The landowner often times had complete ability to be completely arbitrary ( like AirBNB is in this case )

You are not running a business if you don't have direct access to your clientele. You are a shareCROPPER. Look it up.

Use AirBNB, as a marketing vehicle, not your only income source.

Woo hoo, I love these downvotes. Seriously, peeps...give me your hate. And while you are doing that - please tell me which bit of my statement is _factually_ incorrect.

<comment><USER14> I looked it up.

"a tenant farmer especially in the southern United States who is provided with credit for seed, tools, living quarters, and food, who works the land, and who receives an agreed share of the value of the crop minus charges"

There are no crops involved in the posted story. Further, AirBNB doesn't own the land so I'm not sure the term even makes sense as a metaphor.

<comment><USER15> Take a look at [http://olivierblanchard.net/stop-calling-it-the-sharing- econ...](http://olivierblanchard.net/stop-calling-it-the-sharing-economy-that- isnt-what-it-is)

<comment><USER13> perfectly said.

</comment></comment></comment></comment><comment><USER16> I don't like to be the "I told you so" guy. But I told you so.

I wrote this a couple of years ago:

"All Eggs in One Airbnb" [http://www.adormo.com/blog/marketing/all-the-eggs- in-one-air...](http://www.adormo.com/blog/marketing/all-the-eggs-in-one- airbnb-1st-part/)

because I keep meeting hosts who say "I'm fine with just Airbnb". The build a whole business based on a single website, a single failure point.

Disclosure: we help hosts be present in several platforms, including Airbnb.

</comment><comment><USER17> Often in these articles, you read through to some sort of detail hidden at the end which reveals why the company actually did cut ties, and the aggrieved party is blind to it or trying to talk around it. In this case, there's nothing.

My guesses were assault, theft or maybe some effort to actively sabotage Airbnb by promoting a competitor. But if any of those things happened, they're not detailed or hinted at all.

I imagine Airbnb are vague for legal reasons. But it must feel hugely unfair to be in the position of the author and lose a significant portion of your life and livelihood.

<comment><USER18> The sense I get is just that they don't cancel successful accounts very often; given the escalations, I have to believe they have some strong reason. It sounds like they will have some host community issues now, but what got me was how they cancelled guests. It sounds like they just used the host cancellation process, but if I found out AirBnB did that masked as the host, I'd go from annoyed at the world to very angry at AirBnB...

</comment></comment><comment><USER19> AirBnB's ability to handle failure modes is beyond bad.

If a host fails to accommodate you, you better have a hotel in mind for a plan B.

Their UK customer service phone line drops calls after 300 seconds in the waiting queue. Go and try it: +448435047257

Form replies to e-mails, never enough detail, multiple days' response times.

What's the procedure for documenting a host has checked in, or hasn't? That's right, there isn't one. They do everything by hand, and is't a he said/she said, I will take a week to deliberate, and then cut the baby in half kind of deal.

<comment><USER17> When I have had a host screw me over in a major city where finding accommodation in a peak time is incredibly difficult, I've complained to Airbnb very persistently and aggressively, and they've compensated me.

<comment><USER19> That's exactly the point I'm trying to get across: there should be a well- defined business process, reflected in the UI in their app/website, for getting refunds. That there isn't speaks volumes.

<comment><USER17> True of almost every large company until you complain like a bastard. I've been stonewalled by Dell, Airbnb, airlines, etc but eventually won through sheer stubbornness.

</comment></comment></comment></comment><comment><USER16> In the meantime you may upload your apartments in Housetrip, Wimdu, Booking.com, Homeaway and so on. None is as good and smooth as Airbnb but they work. When hopefully Airbnb reopens your account, keep these portals too, so you don't have all your eggs in one basket.

</comment><comment><USER20> The iPhone logging in all over the US sounds like it's probably the cause. The account may well have been shuttered for being a conduit of fraud or the like and thus the account got canned. It'll be interesting to hear any follow-up to this.

</comment><comment><USER21> Imagine if they dealt with their employees in the same way.

Your fired, leave. I'm not telling you why.

The unicorn paradox:

      1. Create a small startup to disrupt the corporations
      2. Create a loyal user base
      3. Ride the hockey stick on your unicorn
      4. Treat your users as a commodity as you scale
      5. Become a terms & conditions black box
      6. Congratulations, you are a corporation.

</comment><comment><USER22> Quick read the AirBnB terms (termination). Seems like they can basically terminate you however/whenever they want. IANAL but that seems rather flimsy. Aren't they essentially an infrastructure provider (website, app, booking etc.) that should have service contracts?

That pretty much means you should not and cannot depend on AirBnB as a major source of income. Risk management wise that's just insane. It puts a decent amount of theoretical "extortion power" in their hands. "Oh yeah we see you make X which likely means you heavily depend on this income. Would you kindly agree to these new terms/new rates or be screwed?"

Independent of all of this it is horrible style to terminate someone without further notice or reason. Writing this into ToS is a pretty bad sign. It generally seems better to have a policy that defaults to explaining the reason for termination except in special cases (funny money laundering laws etc.).

Makes me wonder, is there is any "ToS" ranking site out there? X,Y,Z in ToS are a bad sign, here's why? Kind of like the sites calling out bad UX practices that are meant to trick people into buying extra stuff.

<comment><USER23> The problem here is that this sort of termination clause is basically standard practice these days. For instance, Google's TOS just says "Google may also stop providing Services to you, or add or create new limits to our Services at any time": [http://www.google.com/intl/en/policies/terms/](http://www.google.com/intl/en/policies/terms/) \- That's pretty damn scary given that I (and most people I know) have a Gmail account as their primary contact!

Everyone just accepts it on the assumption that it's a last-ditch protection against 'bad people', and hopes that in their case if anything goes wrong the company will deal transparently and fairly with them.

</comment></comment><comment><USER24> It's good to be the king.

Google is king of search and can cut you off without reason or explanation. AirBNB is king of home sharing and can cut you off without reason or explanation.

Companies that have a virtual monopoly can treat their ecosystem this way because there's no reason not to.

If this is the way they treat their very best hosts, can you imagine how rock bottom badly you'll be treated if you're anything less than a stellar superstar.

</comment><comment><USER25> An obscure, not fully tested algorithm applies a filter to all users. Maybe it's an internal beta, maybe some integrator that should have considered account history pulled a blank table instead of real values. Whatever. It happened.

Your account gets canned. No one at the company knows why. Nobody even _can_ know why. No one has the authority to fix it because it was never supposed to happen like that in the first place. _Nobody_ wants the responsibility for dealing with it.

So there you have it.

<comment><USER10> If you have algos in place to flag an account and forget to implement the reason why that algo came to the conclusion, you should seriously rethink your setup.

<comment><USER26> That may not always be possible. For example, if you have a neural network doing the flagging, you might not be able to figure out exactly 'why' a particular account was flagged.

</comment></comment></comment><comment><USER27> This reminds me of a similar story of an Airbnb host in London who's suing Airbnb for cancelling his account.

Basically, it comes down to allegations made against him by a guest.

[http://www.standard.co.uk/news/homeowner-massaged-by-his- air...](http://www.standard.co.uk/news/homeowner-massaged-by-his-airbnb-guest- sues-after-being-kicked-off-the-website-10421149.html)

</comment><comment><USER28> Perhaps the Thai government asked them to close the account.

<comment><USER7> It's always possible, but doesn't seem like the sort of thing they'd do. If it's a domestic problem they'd sort it out themselves.

</comment></comment><comment><USER29> "So far the emails have been opened and read over 350 times, from multiple places around the world. Who knows who these email addresses really go to."

1)How can you track this in a reliable way? 2)So 350 read this email and did not answer it? Do I read that correctly?

<comment><USER30> You could embed a tracking pixel and email clients that don't block remote content will fetch it from the server where you'll see the number it's been accessed.

</comment></comment><comment> saiko-chriskun I recently went through the exact same experience. Absolute shit.

</comment><comment><USER31> What was the point of having someone phone the account holder but not act like a human being? If you're going to hide behind the algo (and hopefully do an investigation and apology) isn't it better not to have any human contact? If you phone someone, the person on the other end tends to expect some humanity (ability to ask questions, commitment to investigate).

</comment><comment><USER14> No mention of whether the Paris talk invitation by AirBNB was cancelled. That would be an entertaining forum to raise this topic in.

</comment><comment><USER10> "I really cannot understand why I am being kicked out of a community I loved, promoted and cared for so passionately."

It's not a community - it's people meeting on a commercial platform who's in for the big money.

Still, as a previous host and renter, I am disgusted.

<comment><USER32> I guess most communities aren't communities then.

<comment><USER33> chinathrow is right.

A community is a body of people who respect and act in each other's best interests or for the collective good.

A company is not a community, it's a for-profit enterprise, and it does not give a fuck about respecting you or your best interests if there is profit to be made, or even if there is internal bureaucracy to be followed.

Loyalty to business and corporate interests is seldom well placed.

<comment><USER32> The company _is_ not a community (arguable) but it _has_ a community.

</comment></comment></comment></comment><comment><USER10> To the fine folks at AirBnB who for sure are watching this thread:

\- You fucked up badly in 2011 with that wrecked apartment in SF

\- You cleaned up nicely eventually, introduced insurance and whatnot

Now, you absolutely seriously need to clean this up the proper way. The shitstorm is already brewing.

</comment><comment><USER34> This definitely sounds like some agency was using/used the home as a safe house.

</comment><comment><USER35> So, what's the situation now? Has AirBnB contacted the author? There seems to be no update yet on the blog that I can see.

</comment><comment><USER36> Sounds to me like there's fraud activity observed or reported, likely by more than one guest in the same location.

</comment><comment><USER10> Why did this item get burried?

<comment><USER27> <conspiracy>YCombinator is an investor in AirBNB and doesn't like to see negative stories about them</conspiracy>

<comment><USER37> Nobody who knows dang or follows his comments would think this is true.

</comment></comment></comment><comment><USER38> Does Airbnb have two factor login ? If so use it.

</comment><comment><USER39> This item was on the front page just a minute ago with 11 points. It grew to 134 but is now all the way on the fourth page. Something is suspicious.

<comment><USER40> No admin touched this post. It dropped in rank because of user flags and the flamewar detector, which is algorithmic and treats all posts the same way.

HN admins don't penalize posts for being anti-YC or anti-YC-startup.

<comment><USER39> Ok, that's a possible reason. But shouldn't there be some amount of human intervention for false positives? There wasn't a flamewar brewing in this thread.

<comment><USER40> 'Flamewar detector' is a catchy name that stuck, but it isn't only about flamewars. It's about damping, on HN, the kind of low-quality, unsubstantive discussions that swell up quickly and would otherwise flood this site the way they do most of the internet.

Indignation is a common driver of these. Look at the top comment in this thread, beginning "What a shitty", or the one that, with admirable forthrightness, says "Reading that article makes me furious". Such discussions do often lead to flamewar-like behavior (e.g. the argument about the definition of 'community'), so "flamewar detector" isn't exactly wrong, either.

We do look several times a day at the stories that are penalized by this software, because sometimes there are genuine false positives that need rescuing. I wouldn't say that this article and thread rise to that level, though.

<comment><USER10> Appreciate your feedback on why it get burried.

A little meta, that an algo said to flag the thread down while the airbnb host in the linked article likely got flagged down by an alogrithm.

<comment><USER40> > while the airbnb host in the linked article likely got flagged down by an > alogrithm

We really don't have the slightest basis for that assessment, do we?

That highlights the deep problem with posts like this: they invariably have only one side of the story. That's not the authors' fault—why shouldn't they tell their side of the story? But it makes objective discussion impossible. Since the internet abhors a vacuum, what rushes in to replace the missing information is speculation and rage, and those things make for poor HN discussions no matter what the topic.</comment></comment></comment></comment></comment></comment>


A Guide to the New HTML5 Form Input Types - <AUTHOR> http://sixrevisions.com/html5/new-html5-form-input-types/

<comment><USER2> >reduce our reliance on client-side- and server-side-scripting for validating common data types like dates, email addresses, and URLs

Like what's shown in the article, the main purposes for these new additions is for ui/ux. Devs should still rely on validation scripting prior to a form submission (js) and processing (server side). Although I do know we can implement patterns on the inputs like pattern="[A-Za-z0-9]*" , if your form is submitted with js, it's a good idea to still run some simple validations. (Ex. in chrome, I had a 'required' markup in a hidden input that is suppose to show after a certain field in a form, I encountered form submission problems, even after the area was visible.)

On a side note...I didn't know about the url [input=type], thanks for that one :)

<comment><USER3> >Devs should still rely on validation scripting prior to a form submission (js)

Why? Adding redundant code that doesn't solve a problem is always a bad idea.

<comment><USER4> UX. It's much faster to have JS return an instant error because you forgot an @ in your email than to have to do a roundtrip to the server and watch the page flicker (reload), especially on a crappy connection.

Not so big a deal on one field, but if you have 5+ errors in a long form, it can add up.

You of course still have to validate server-side to stop ancient browsers or people trying to hack your site from submitting bad data.

<comment><USER2> Browsers which support HTML5 form validation are "suppose," to validate the input prior to submitting the forms. I think this trended a bit ago here on HN about email validation...even if you do a <input type="email">, a user can still submit an email in these forms (blah@you , firstname.lastname@example.com , 12345@localhost ,...get the idea).

Another quirk about form validation in HTML5 is the forms won't get validated UNTIL the user submits the form and then the browser may highlight the error in consecutive order (1 at a time o_O), imagine your poor UX for a user that has multiple errors.

</comment></comment></comment></comment><comment><USER5> As somebody who's currently making a web app that makes use of a variety of form input types, HTML5 form inputs are great.

I would also add a recommendation for Select2 - [http://ivaynberg.github.io/select2](http://ivaynberg.github.io/select2) \- "Select2 is a jQuery based replacement for select boxes. It supports searching, remote data sets, and infinite scrolling of results."

</comment><comment><USER6> I find the Wufoo guide to be more useful: [http://www.wufoo.com/html5](http://www.wufoo.com/html5)

</comment><comment><USER7> I like how the URL input type not only spellchecks its contents, but also helpfully marks "http" as a misspelling.

</comment><comment><USER8> The problem with these inputs is how do you style them or customize the UX? For example, how do you style an element that is a color swatch on some browsers and a text field on others?

<comment><USER9> You don't. Form elements were never really meant to be styled. That's why there are so hard to style and get a consistent look across all browsers. Of course, that doesn't stop people, so all sorts of hack are employed, many include javascript that actually replaces the native element with a jumble of html elements to re-create the designer's holy vision.

<comment><USER10> It just seems like it ends up making these useful for utility stuff, but will just get ignored for most real projects. It's 2013, the idea that anything should not be able to be styled is ignoring the real world.

<comment><USER11> No, having identifiable form elements is freaking important, computers are hard enough for a novice to learn without the basic idioms change shape and meaning because designers want to get creative.

The real world needs consistent form inputs.

Also. Damn you firefox, Implement the bloody date input.

</comment></comment></comment></comment><comment><USER10> They are good for mobile and fairly useless on desktop browsers.

<comment><USER12> Why? Using them doesn't hurt as they fallback to the text input type. But semantically the code makes more sense as it is more specific, and for those browsers that don't support them, you could fall back on using some javascript to get similar functionality, if you're so inclined.

Of course, these elements will look differently on different platforms/browsers, but for a lot of applications that doesn't matter. Maybe, in the next version/iteration of HTML they make these things a bit more style- able?

<comment><USER10> The argument is that support on desktop is so spotty that you are going to have to implement it in JS/HTML anyways. A bare text input field is not sufficient for something like a date or color picker, and is it really better semantically if you have to hide the field entirely if the input sub-type isn't supported?

Then if you are going to implement a custom version, it's easier to just use that on all browsers, since you can style it properly, and you don't have the risk of it changing under you as browsers add support in random version updates.

</comment></comment></comment><comment><USER13> I've re-entered the world of web apps recently & think this is excellent!</comment>


The Pull Request for Designers - <AUTHOR> http://layervault.tumblr.com/post/32816352689/design-feedback-delivery

<comment><USER2> The video has no scrubbing controls on it. The project sounds neat but I couldn't fast-forward to the meat of the video so I bailed.

<comment><USER3> Yeah, there should be scrubbing controls. I don't mind watching the entire video but I'd like to know how long the video is so I can decide to watch it now (if it's 45 seconds) or later when I have free time (if it's 10 minutes long).

</comment></comment><comment><USER4> Very cool, but their website is down (HN'd?) and their lack of any real "call to action" (which gets me off their tumblr and to their ACTUAL website) will leave many a mouse-wielding monkey stupefied.

<comment><USER5> Not HN'd. Problem with our host. We're working with them to resolve it ASAP.

</comment></comment><comment><USER6> Congratulations, gentlemen -- this looks fantastic.

<comment><USER7> I agree, I don't do much designing ( especially at the scale where you'd be a likely customer for Layervault ) but I think it looks and feels great and should make the workflow for a lot of designers less frustrating.

</comment></comment><comment><USER8> CubicleNinjas, your post is dead, but you seem to offer some good feedback for the Layervault team. Just a heads up that you might want to create a new account and repost.

</comment><comment><USER9> Sounds really good, but I can't tell what it actually does. I'm assuming you replicated some features of git with your own gui? Let's see a good description of what this is. I'm on my phone and don't want to watch your video that's too big for my screen. Just some friendly advice.

P.S. RIP cubicleninjas

</comment><comment><USER10> Looks great but these days I rarely design entire sites in graphics programs, I design right in the browser with CSS/HTML.

</comment><comment><USER11> Not one single link to the product in the post. sigh.

<comment><USER12> This is a great suggestion - there should be a call to action and a link directly to the feature you're talking about right at the end, as well as some interspersed in the post.

Don't overlook simple marketing. You gotta do this stuff guys.</comment></comment>


Getting rusty – we need new best practices for a different development world - <AUTHOR> http://www.wait-till-i.com/2011/08/15/getting-rusty-we-need-new-best-practices-for-a-different-development-world/

<comment><USER2> So write them. Don't ask others to do it. Just start writing. If it's as important as you say, others will join in.

</comment><comment><USER3> Also, that is _exactly_ what I am against. You do not _write_ best practices. you _discover_ them.

</comment><comment><USER3> I will, this was just the first article in a series of talks and articles.</comment>


WakeMate Update - <AUTHOR> http://blog.wakemate.com/2010/07/06/super-july-mega-update/

<comment><USER2> I realize that many people who frequent HN are quite grumped about wakemate (and perhaps rightfully so).

Nonetheless, its worth pointing out that designing and then manufacturing an electronic gadget (as a single end to end process) is in many ways orders of magnitude more difficult than shipping a webapp that works on a post IE6 web browser. Theres perhaps certain regulatory elements that need to be dealt with, as well as liability issues that just don't happen with normal software, and thats ignoring quality control issues in manufacturing.

Moreover, somehow amidst being busy with all this (and perhaps wanting to actually ship both so that theres no CA suit from those who pre-ordered, as well actually having a product with sales), they're doing a pretty good job about being open about hiccups along the way, and to in a relatively timely fashion respond to most nice email requests.

Pray tell hn, how many companies discussed on hn are open about the end to end design process for some physical product? I can't think of many myself, and I'd actually really like/enjoy it if once they're comfortably got v1 shipping, that they take the time to write some more elaborated posts documenting their whole design through to final manufacturing or something like that.

just my $.02

<comment><USER3> It doesn't help that they have an uncanny ability to piss people off with every major blog post.

They haven't even reached their first major shipment yet, but already:

* They told people in January that shipping Q1 actually meant shipping July 31st.

* They mentioned "premium analytics" or the like and gave everyone fears of having to tack a monthly fee on top of the $50 they had committed to paying for their devices.

* They said that they haven't taken any money from customers yet when they actually have.

None of those are really that bad on their own, but the fact that they've had 3 of these gaffs before the first major shipment understandably gives some people doubt.

</comment></comment><comment><USER4> _Although no money was ever collected from those who have pre-ordered_

Bullsh!t.

Just because they didn't collect the _entire_ cost of the wakemate, they can't claim not to have collected money. Many here on HN and elsewhere (myself included) paid the down payment of 5 bucks to get on the waiting list. Of course I don't care about the 5 bucks, but for them to claim they didn't take any money.......

<comment><USER5> I've updated the blog post to reflect what actually happened...

the majority of pre-orders (> 80%), which were through Google Checkout, were never charged; the Paypal pre-orders, however, were.

<comment><AUTHOR> To follow up on that further: PayPal quickly limited the account, hence the move to Google. PayPal funds remain in PayPal and are used to process refunds.

To make it 100% clear: the only entity to profit from pre-orders has been PayPal, from interest earned on locked funds. We have not made a single dime.

<comment><USER6> More bullshit. I ordered through Google Checkout and definitely have a $5 my credit card bill.

<comment><AUTHOR> Did you confirm the charge was never returned? That's how the $1 authentication charge works on our new store; we charge $1 and if the full amount isn't settled within a couple weeks the $1 is returned and we're charged a small fee (so pre-orders actually cost us money). If that's not the case, it's probably a fluke.

<comment><USER6> I apologize for the accusation. I have an email from Google confirming that my card will be charged, and an email from my bank alerting me to the ($5) charge, but there is no actual charge on my bank statement (though it was there at one time).

</comment></comment></comment></comment></comment></comment><comment><USER7> The last update email I was sent from these guys (coincidentally received on April Fool's) said I'd receive a unit no later than July 31st, as a conservative estimate.

No communication between then and now, over 3 months, so I emailed them 5 days ago - no lick of a response.

And can someone clarify this for me, because I have a paypal receipt showing I sent them 5 bucks:

"Although no money was ever collected from those who have pre-ordered..."

<comment><AUTHOR> That's odd; we reply to all emails. Where did you send it? Also, check out help.WakeMate.com; we're very good about managing that as well.

I clarified your question in an above comment.

<comment><USER8> I also sent an email a week ago, and got no response. Sent to firstname.lastname@example.com

<comment><USER8> Update: I got a response within 24 hours after emailing firstname.lastname@example.com

</comment></comment></comment></comment><comment><USER9> Honest question here and I apologize if it comes off as snarky. I'm just curious. But why is Wakemate pursuing this sort of business model as opposed to say, producing a few prototypes and shopping those around to gadget makers who would manufacture and sell them? Gadget makers are notoriously good at making gadgets, and notoriously bad at making web sites. Even if they were to steal your idea for the gadget, they'd still farm out the web site and probably pay $250K to some agency to get that part of the job done. So partnering with you would make a lot of sense. You might even have been able to get some up-front money out of the deal.

</comment><comment><USER10> The big mistake they made was that pre-order. It was a great marketing move in the start, but when things went wrong, it became their biggest enemy.

Moral of the story: Don't collect any money at all from people till you can immediately send them what they paid for.

<comment><AUTHOR> When I first joined the company I felt the same way. Then I was told the whole story and it made a lot of sense. Basically, without pre-orders, there would be no WakeMate. They were in the tough position of having to prove the product's viability to investors and the investors wanted actual credit cards to prove that viability. At the end of the day, it worked out as best as could be hoped for given such a bad launch estimate: roughly 90% of customers were never charged (PayPal being the exception, though the money remains PayPal's) and investors ponied up enough cash to hire the necessary people and pay for everything going into the first big run, which all together will end up costing waaaay more than what those $5 could have bought.

Don't get me wrong, it's still embarrassing to everybody that we've had pre- orders waiting for so long; that was never the intention. It's a shitty way to treat our first customers, but it was an honest mistake. Many such mistakes were made—especially with regard to communication—but knowing what I know now I don't feel the pre-order taking itself was one. In fact it's probably the only reason the product is nearly out now.

</comment></comment><comment><USER11> I'm curious as to why their "About us" page is empty. Beyond their manufacturing complications, I'm wondering what qualifies them to make statements and a device that claims to help people sleep/wake up better. It leaves the door open to everything from "read some academic papers written by grad students" to "medical doctor with years of sleep research". I'm sure a quick google search would bring up more info about the founders, but it seems more appropriate to be able to find it from the company itself.

That aside, this product does seem promising. I typically sleep only 5-6 hours per night and wake up naturally (without an alarm clock). I feel fine most of the time, but I do notice on those occasional days that I sleep 8+ hours, I feel much better. Being able to analyze my sleep with a $50 device at home is something that does interest me.

<comment><USER12> Here is the background of the Wakemate staff, yes they are qualified to build a sleep aid device: <http://en.wikipedia.org/wiki/WakeMate> Craig has a PhD from HST, it doesn't get much more qualified than that.

<comment><USER11> PhD from HST in itself is just a credential and doesn't mean much beyond that. I'm sure you've seen the commercials for "doctor recommended back-pain relief products" that are being endorsed by dentists...

</comment></comment></comment><comment><USER13> While many people seem uberly disturbed about the delays and "$5" charges (under 20% of people who pre-ordered it even seemed to affect), I took the opposite opinion. I'm excited to see a startup trying to build hardware and software, all from an original seed investment with ycombinator. It is suffering from situations most other seeded and angel invested startups go through, and they seem incredibly excited to improve.

What more could you ask for? Sure, the product. Fair enough, but give them some slack. It's not like some of the software vaporware we've seen (like The Hit List for iPhone). I know it must be hard not to be able to get that Venti Double Whip Quad Shot Mocha until you get your $5 back!

Whatever! This negative response only excited my interest in the product and I just got done pre-ordering one. And if I don't get it in a couple weeks, they'll release my $1 hold. Nothing lost. And if it ships, I'll improve my sleeping habits.

</comment><comment><USER14> People are taking it too hard on these guys. It's $5 for a nifty gadget, the lack of which is not the end of the world. I pre-ordered one, and I don't think their delays are a big deal - probably because you expected that from a startup.

<comment><USER15> I think their bad communication just makes things works (as far as I see).

<comment><USER16> they have fixed this. They regularly blog, have sent email messages, twitter posts etc apologizing for the delays and keeping us informed on the latest updates on shipping, demos of the product to show they are making progress etc. I'm really not sure what else they could do in the communication regard, their only problem now is they aren't shipping the product.

</comment></comment></comment><comment><USER17> Wakemate has done very poorly in setting my expectations. Therefore, I will set my own.

I'll get charged the remaining $45 in 4Q 2010, and receive the product in 2Q 2011. It will break in 3Q 2011.

</comment><comment><USER18> Wakemate are facing the common software "thing", only with hardware :) never quite finished, always redesigning something, "nearly" there, always 90%.

Will they ever make it?

</comment><comment><USER19> Take full and complete responsibility for the fuck-ups and people _will_ give you a break. No hedging, no explanations... nothing that can possibly be interpreted as rationalization.

Express only pure remorse and gratitude and the mood will change _immediately_.

</comment><comment><USER20> Will the wakemates work with an iPad?</comment>


Show HN: Guide to upcoming HN meetups worldwide. Have we missed any? - <AUTHOR> http://lanyrd.com/guides/hacker-news-meetups/

<comment><USER2> I'm really glad for this post. I'm the organizer of LA Hacker News ( <http://www.meetup.com/Los-Angeles-Hacker-News/> ), and I've found that posts for upcoming metups just don't make it to the frontpage anymore.

Luckily, we built up traction in the past while we could.

<comment><USER3> btw, meetup already does this automatically on a topic basis. Your group only has one topic, hacking, so it will show up on the map at <http://hacking.meetup.com>. Likewise, you can see groups tagged with "hacker news" at <http://hacker-news.meetup.com>.

(disclosure: i work for meetup)

</comment></comment><comment><AUTHOR> This is an example of our latest feature release, Guides. (Blog entry: <http://lanyrd.com/blog/2012/guides/> Featured guides page: <http://lanyrd.com/guides/>)

I've created the Hacker News Meetups guide as an "open" guide, which means any Lanyrd user can join the guide and help out by adding events we've missed.

<comment><USER4> Feature request: easily filter by geography. As much as I would like to go, Tokyo and Amsterdam are out of driving distance for me. I can search, but then I lose the HN specific part, so I have to do more complex searches.

Otherwise, great tool. I hope it catches because I'm sure there are things going on around me I'm clueless about and would like to be more clueful.

<comment><AUTHOR> I've been thinking about that as well - we do have a place filter against our existing "topics" feature, so you can subscribe to an ical or RSS feed from here:

<http://lanyrd.com/topics/hacker-news/in/uk/>

(change /in/uk/ to another place for different pages)

We may well add a /in/uk/ filter to guides as well, not sure how we'd expose it in the UI though.

</comment></comment></comment><comment><USER5> San Diego - [http://cses.ucsd.edu/wiki/index.php/San_Diego_Hacker_News_Me...](http://cses.ucsd.edu/wiki/index.php/San_Diego_Hacker_News_Meetup)

Agree with andrewvc about it being increasingly impossible to get meetup announcements onto the HN frontpage.

<comment><AUTHOR> Thanks, listed here and added to the guide: <http://lanyrd.com/2012/san-diego- hacker-news-meetup-jan/>

</comment></comment><comment><USER6> Anyone want to have Boston/Cambridge one? I can schedule it.

<comment><USER7> Count me interested.

<comment><USER6> jim shoot me an email or ping me on twitter so I can contact you when I try to organize one.</comment></comment></comment>


Humans really are still evolving, study finds - <AUTHOR> http://www.msnbc.msn.com/id/47236398/ns/technology_and_science-science/ <comment><USER2> How could this not be true?

<comment><AUTHOR> Insufficient benefit from small changes such that they stick around through a few generations?</comment></comment>


What's New in Python 3.8 - <AUTHOR> https://docs.python.org/3/whatsnew/3.8.html <comment><USER2> As a developer who has primarily developed applications in Python for his entire professional career, I can't say I'm especially excited about any of the "headlining" features of 3.8.

The "walrus operator" will occasionally be useful, but I doubt I will find many effective uses for it. Same with the forced positional/keyword arguments and the "self-documenting" f-string expressions. Even when they have a use, it's usually just to save one line of code or a few extra characters.

The labeled breaks and continues proposed in PEP-3136 [0] also wouldn't be used very frequently, but they would at least eliminate multiple lines of code and reduce complexity.

PEP-3136 was rejected because "code so complicated to require this feature is very rare". I can understand a stance like that. Over complicating a language with rarely-used features can definitely create problems. I just don't see why the three "headline" features I mentioned are any different.

[0]: [https://www.python.org/dev/peps/pep-3136/](https://www.python.org/dev/peps/pep-3136/)

<comment><USER3> > As a developer who has primarily developed applications in Python for his > entire professional career, I can't say I'm especially excited about any of > the "headlining" features of 3.8.

Python is a fairly old, mature language.

What features _would_ you have been especially excited about?

<comment><USER4> Though not a language feature per say, I would love if the language would take on the packaging ecosystem and deliver a ground up approach that isn't just a kludge on a kludge on a kludge.

<comment><USER5> Unfortunately, that'd mean a package manager for C, Fortran, etc. as well, since so many Python packages have non-Python dependencies.

I've started using Docker for ensuring prod behaves the same as dev. Going from Mac dev to Linux prod would otherwise cause trouble.

<comment><USER6> Sounds like Conda.

<comment><USER5> Conda can't fix some problems, like Python 3.7 wanting ncurses >6, but a dependency wanting ncurses 5.9

</comment></comment></comment></comment></comment></comment><comment><USER7>
      def f(a, b, /, c, d, *, e, f):

Wow: IMHO that is a very ugly syntax to define a fn with 6 parameters, although it looks to be a path dependency on previous decisions (*, and CPython ,/) and clearly there was much discussion of the need for the functionality and the compromises: [https://www.python.org/dev/peps/pep-0570/](https://www.python.org/dev/peps/pep-0570/)

It amazes me to see how certain features make it into languages via community/committee (octal numbers in JavaScript - arrgh!).

One thing I find really difficult to deal with in languages is the overloading of different syntactic(edit:semantic) usages of different symbols, which itself is a result of limiting ourselves to the ASCII symbols that can be typed. I don't recall written mathematics having the issue badly (although I haven't had to write any for a long time!).

<comment><USER8> > _which itself is a result of limiting ourselves to the ASCII symbols that > can be typed_

I think we're ready for programming languages using some visually good Unicode characters, instead of overloading `[]{}!@#$%^&*()-_/` for everything!

<comment><USER9> Oh god, this. I want a language that as I type, != Gets replaced with a proper ≠ not equals sign and proper symbols for AND, OR, and NOT.

<comment><USER10> Use a ligature font!

[https://www.hanselman.com/blog/MonospacedProgrammingFontsWit...](https://www.hanselman.com/blog/MonospacedProgrammingFontsWithLigatures.aspx)

</comment></comment></comment></comment><comment><USER11> This got missed from the release announcement, but now there's `functools.singledispatchmethod`,[1] as the class method sibling to `functools.singledispatch`.[2] This allows you to overload the implementation of a function (and now a method) based on the type of its first argument. This saves you writing code like:

        def foo(bar):
            if isinstance(bar, Quux):
                # Treat bar as a Quux

            elif isinstance(bar, Xyzzy):
                # Treat bar as an Xyzzy

            # etc.

I understand runtime type checking like that is considered a bit of a Python antipattern. With `singledispatch`, you can do this instead:

        @singledispatch
        def foo(bar:Quux):
            # Quux implementation

        @foo.register
        def _(bar:Xyzzy):
            # Xyzzy implementation

With `singledispatchmethod`, you can now also do this to class methods, where the type of the first non-self/class is used by the interpreter to check the type, based on its annotation (or using the argument to its `register` method). You could mimic this behaviour using `singledispatch` in your constructor, but this syntax is much nicer.

[1] [https://docs.python.org/3/library/functools.html#functools.s...](https://docs.python.org/3/library/functools.html#functools.singledispatchmethod)

[2] [https://docs.python.org/3/library/functools.html#functools.s...](https://docs.python.org/3/library/functools.html#functools.singledispatch)

<comment><USER12> The issue with this and `singledispatch` is that they no longer support pseudo-types from the `typing` module [1] so you can't use them with containers of type `x`, e.g. `List[str]`, or protocols like `Sequence`.

[1] [https://bugs.python.org/issue34498](https://bugs.python.org/issue34498)

<comment><USER13> Yea, this one is really annoying... required a lot of rewriting of code to make some old code work with 3.7.

</comment></comment></comment><comment><USER14> The expansion of f-strings is a welcome addition. The more I use them, the happier I am that they exist

[https://docs.python.org/3/whatsnew/3.8.html#f-strings- suppor...](https://docs.python.org/3/whatsnew/3.8.html#f-strings-support-for- self-documenting-expressions-and-debugging)

<comment><USER15> Why didn't Python ship with the opposite functionality as well? Parsing instead of formatting. Given a string and a format string, return a list of variables (or a dictionary).

<comment><USER16> Are you talking about parsing f-strings? How would that look like?

As far I understand the following:

        print(f"your name is {name}")

is roughly equivalent to:

        print(f"your name is " + format(name))

What is there to parse?

<comment><USER15> For example, to checkpoint a model, I would save it as "ckpt-{epoch_number}-{val_loss}". Given this file name and the original format string, I would like to recover the epoch number and validation loss variables back.

From: ckpt-8-0.300 To: epoch=8, val_loss=0.300

</comment></comment></comment></comment><comment><USER17> This is the release that contains the controversial assignment expressions, which sparked the debate that convinced GvR to quit as BDFL.

They didn't select my preferred syntax, but I'm still looking forward to using assignment expressions for testing my re.match() objects.

I haven't used 3.8.0 yet but I hope its a good one because 2020 is the year that 2.7 dies and there will be a lot of people switching.

<comment><USER18> Because of the luddites at RedHat, Python2.7 isn't actually dead until 2024. It's infuriating.

[https://access.redhat.com/solutions/4455511](https://access.redhat.com/solutions/4455511)

<comment><USER19> If you want other people to make a change then it's on you to make a convincing argument for _why_ the new thing is an improvement, not just go on tirades about how people should get with the times.

Personally, I lost faith in the Python core team because of the Py3 migration. Yes, 3.x now has a bunch of nice features that 2.x did, but almost none of them actually depend on the 3.0's breakage (as proven by Tauthon).

If you want people to follow you through a break-the-world migration then you need to motivate why it is needed and why it couldn't be done incrementally, not try tempt them with a bunch of unrelated carrots that are bundled together with the breaking change.

<comment><USER20> > If you want people to follow you through a break-the-world migration then > you need to motivate why it is needed and why it couldn't be done > incrementally

They did. I remember looking through this, and I remain convinced that the core developers were correct and there was no way to fix Unicode handling incrementally.

<comment><USER19> Add the u-sigil for unicode (as they did), add the b-sigil for bytestrings (as they eventually did), and then go through a regular deprecation cycle for sigil-less strings (rather than releasing a 3.0 where the u-sigils were removed completely). Maybe at some point re-add sigil-less strings as an alias for u-strings, but I'd rather have old stuff break with a clear message than have a bunch of weird side bugs.

Do the same for the type names.

</comment></comment></comment></comment></comment><comment><USER21> Buried in the notes for the `typing` module:

> "Final" variables, functions, methods and classes. See PEP 591, typing.Final > and typing.final(). The final qualifier instructs a static type checker to > restrict subclassing, overriding, or reassignment:

> pi: Final[float] = 3.1415926536

As I understand it, this means Python now has a way of marking variables as constant (though it doesn't propagate into the underlying values as in the case of C++'s `const`).

The equivalent Java:

        final float pi = 3.1415926536;

<comment><USER13> The thing is, it is only enforced in mypy... code that modifies a Final object (pi = 3 for example) later on will run fine.

<comment><USER22> Correct- as usual the annotation indicates intent, but is not enforced at runtime.

</comment></comment></comment><comment><USER23> Real Python have a great post out today going through most of the changes: [https://realpython.com/python38-new- features/](https://realpython.com/python38-new-features/)

They have a lot of code samples and examples about how and when to use the new features.Personally, I love the new debugging support in F strings.

<comment><USER24> Too bad I'm losing good articles like this one because of those patronizing, click-baity newsletters that they started sending out a year or two ago.

<comment><USER23> They appear to have toned down their marketing efforts recently. You no longer get bombarded with clickbait pop ups or alerts.

</comment></comment></comment><comment><USER25> > The typing module incorporates several new features:

> A dictionary type with per-key types.

Ah, I've been waiting for this. I've been able to use Python's optional types pretty much everywhere _except_ for dictionaries that are used as pseudo- objects, which is a fairly common pattern in Python. This should patch that hole nicely.

<comment><USER6> IMO A better fix is to use [http://attrs.org](http://attrs.org) or dataclasses to replace the dicts entirely.

<comment><USER26> And then use a library like json-syntax[1] to translate those into JSON.

[1]: [https://pypi.org/project/json-syntax/](https://pypi.org/project/json- syntax/)

<comment><USER27> this looks interesting. we use cattrs, which has worked well for us but has a long-delayed 1.0 release.

</comment></comment></comment></comment><comment><AUTHOR> Arguably one of the hotter debated functions is assignment-as-expression through the := or walrus operator.

Quite happy with the new SyntaxWarning for identity comparison on literals and missing commas :)

Especially neat is also the `python -m asyncio` shell which allows you to run top-level awaits in your repl instead of needing to start a new event loop each time!

<comment><USER6> IPython has supported top-level async for a while too, plus many other features!

</comment></comment><comment><USER28> I like the additions of the f-strings and walrus operator, but I find myself wishing a breaking-release removing the old features that the new features covers. Python's philosophy was to have one way to do something, but the current situation of Python is very inconsistent. Python 3 has like 4~5 ways to format strings, and due to the addition of the walrus operator, we have (I understand the differences between := and = but) two different syntaxes for variable declaration/assignment.

I understand that Python can't break all kinds of code (as the 2->3 conversion is still a pain), but still I imagine a Python-esque language without all the warts that Python have with it's 'organic' growth.

<comment><USER29> That's a good use case for a linter. Ban outdated constructs in your code, but still allow you to depend on things that use them. Beats another 2->3 split again.

<comment><USER28> Yeah, and I already use linters to remove all outdated constructs; but... It's a pity that "There's only one way to do it" doesn't work in 2019 :-(

<comment><USER30> It was never "there's only one way to do it".

It is: "There should be one-- and preferably only one --obvious way to do it."

The core of that statement is "There should be one obvious way to do it" \- there's no "only" there, it just says that when you need to do something, there should be an/some obvious way to do it. Then, _preferably_ , that should be the only obvious way — though of course that doesn't preclude there being many other less-obvious ways.

With string interpolation we've certainly now got multiple ways to do it; that doesn't violate the principle. I agree that at least two of those are "obvious" (f-strings and .format()), and you could argue that %-interpolation is obvious too — but none of that is in violation of the principle that there should be an obvious way to do it, just of the preference that there's only one.

Finally it's worth remembering where this idea came from: it was in contrast to the perl mantra of "there's more than one way to do it", and a reaction to the resultant confusion frequently experienced when reading someone else's perl code — this was python saying "we're not perl, we value clarity and comprehension". I think that much of that problem was bound up in perl's syntax choices, and that in the cases in python where there's more than one way to do it (say, string formatting, dataclasses/attrs/namedtuples/etc.), it's usually pretty obvious what machinery is actually being used. When was the last time you looked at a line of python and said "I have no idea what the fuck is going on here?" That was a frequent experience with perl in the heady days of the late 1990s.

</comment></comment></comment></comment><comment><USER31> I do not know exactly what caused this, but my internal project test-suite got a much appreciated 5% speedup! Thank you Python team!

<comment><USER32> I you care about performance, maybe you should try pypy (the alternative python compiler)

<comment><USER31> I try PyPy every 3 months. It has improved greatly and for some periods I migrated to it. But for this particular project, most of time is spent inside lxml, pandas, scikit-learn and other extensions. CPython is actually faster than PyPy for this project. Maybe GraalVM / GraalPython can improve on this use-case.

<comment><USER33> Like, if graalpython gets ever released.

</comment></comment></comment></comment><comment><USER34> > Added new multiprocessing.shared_memory module

Hard to understand why this is so far down. This is fantastic news!

</comment><comment><USER9> Ugh, I hate assignment expressions. I liked that they were missing from Python.

I've been coding in algolesque languages for 20 years and hiding assignments inside of expressions instead of putting them on the left like a statement has always tripped me up.

<comment><USER35> But, but, but... now you don't need to write that extra line of code! It's going to make everything sooooo much better, code will practically write itself now.

I'll just leave this here:

"There should be one—and preferably only one—obvious way to do it."

<comment><USER36> At this point it's about as true as G not being evil.

Which is fine by me, it was a silly idea to begin with. What you really want is separated concerns that compose well, obvious here doesn't mean anything over there.

</comment></comment></comment><comment> w-m > The list constructor does not overallocate the internal item buffer if the > input iterable has a known length (the input implements __len__). This makes > the created list 12% smaller on average. (Contributed by Raymond Hettinger > and Pablo Galindo in bpo-33234.)

Wow. I believe it's a stated goal of CPython to prefer simple maintainable code over maximum performance. But relatively low-hanging fruit like this makes me wonder how much overall CPython perf could be improved by specialising for a few more of these.

</comment><comment><USER37> I don't mind the walrus operator, but holy cow the "positional operators" syntax is completely unintelligble...what the hell were they thinking?!

<comment><USER38> It really is not supposed to be used unless you are wrapping a C library. Or at least that's the original reasoning, I think. Let's hope it doesn't get abused.

</comment></comment><comment><USER39> Shared Memory is the star of this release IMHO.

<comment><USER18> Is shared memory one of those things that I should try to access/use immediately, or wait for someone to write a wrapper library around, due to the large number of edge cases/strangeness that might occur?

<comment><USER40> Why not both? You get a great feel for what the edge cases are and how they occur, and thus a better understanding of why decisions in "wrapper libraries" were made, when these edge cases bite you.

<comment><USER18> Mostly because I don't want to be up at 3am on a Saturday night debugging production code...

</comment></comment></comment></comment><comment><USER41> Damn... this is rather confusing: [https://www.python.org/dev/peps/pep-0572/](https://www.python.org/dev/peps/pep-0572/)

I really like the walrus operator, but I didn't realize how many "you shouldn't do this" and "this is too hard already" cases exist where they are discouraging using the walrus operator.

</comment><comment><USER42> It's interesting to see Python's gradual acceptance to TMTOWTDI.

</comment><comment><USER43> The new assignment expression is great and I wish that an optional operator (`?`) and Elvis operator (`?:`) will make it to Python one day, too. I would love to write:

        v = obj?.prop1?.prop2 ?: "default"

instead of long if conditions:

        v = obj.prop1.prop2 if obj and obj.prop1 and obj.prop1.prop2 else "default"

A PEP for Python 3.8 existed but has been deferred: [https://www.python.org/dev/peps/pep-0505/](https://www.python.org/dev/peps/pep-0505/)

</comment><comment><USER44> I gave a talk on this at the PyBay conference this summer, and more recently at the ChiPy meetup in Chicago last week.

Presentation: [https://docs.google.com/presentation/d/1a3Zoav7NmeN_gXjGcV_l...](https://docs.google.com/presentation/d/1a3Zoav7NmeN_gXjGcV_lalROR8Mo8CxDpgV1qAdof9U/edit?usp=sharing)

Video from PyBay: [https://www.youtube.com/watch?v=OtdQN24Z5MA](https://www.youtube.com/watch?v=OtdQN24Z5MA)

It covers assignment expressions in some depth, as well as highlights elsewhere.

</comment><comment><USER45> Looks like python is trying to out C++ the C++ language with kitchen sink bolt ons.

</comment><comment><USER46> > In this example, the assignment expression helps avoid calling len() twice:

        if (n := len(a)) > 10:
           print(f"List is too long ({n} elements, expected <= 10)")

Um, no it doesnt?:

        a1 = [10, 20, 30]
        n1 = len(a1)
        if n1 > 2:
           print(f'{n1} is greater than two')

<comment><USER47> Yes, but your example is less efficient than the new code.

Remember: every variable is an assignment into a dict, and every lookup a query into a dict. Reducing name lookups and assignments can yield good speedup in tight loops. For instance, caching os.path.join, os.path.split into local names can significantly speed up tight loops iterating over a filesystem. For example, os.path.split is potentially 5 dictionary lookups. Checking locals, nonlocals and globals for os. Then another to find path, and a final one for split. And this happens at runtime, for every invocation.

<comment><USER48> Local variables aren't stored in a dict, likewise when a class has defined __slots__. Globals, modules and usual classes do use dicts internally, but locals do not. So from the efficiency standpoint it's (almost?) the same. I haven't checked the bytecode, maybe there is some slight difference.

<comment><USER29> I checked the bytecode, in the walrus version you get [...DUP_TOP, STORE_FAST, ...] in the non-walrus you get [...STORE_FAST, LOAD_FAST, ...]. Besides that identical. I imagine DUP_TOP is faster than LOAD_FAST, but I feel either way this is useless micro optimization at its finest.

<comment><USER29> In cpython:

DUP_TOP:

                PyObject *top = TOP();
                Py_INCREF(top);
                PUSH(top);
                FAST_DISPATCH();

TOP:

                (stack_pointer[-1])

LOAD_FAST:

                PyObject *value = GETLOCAL(oparg);
                if (value == NULL) { /* throw */ }
                Py_INCREF(value);
                PUSH(value);
                FAST_DISPATCH();

GETLOCAL:

                (fastlocals[i])

So looks like either way, you have an array access of something definitely in cache, a Py_INCREF, a PUSH, and a FAST_DISPATCH. The walrus operator saves you a null-check, but that check is probably skipped right over by the branch predictor, as it always throws. I'd bet the performance is indistinguishable, but I'd be interested to see for real.

</comment></comment></comment></comment></comment><comment><USER49> New "f-strings support = for self-documenting expressions" but you cannot use f-strings as doc string ;)

</comment><comment><USER50> The := operator is the assignment operator on Object Pascal, just saying, remembering my old days. BTW not so old for everyone -> [https://news.ycombinator.com/item?id=15490345](https://news.ycombinator.com/item?id=15490345)

</comment><comment><USER51> I stepped away from Python for about a year, and now I'm coming back to it. I hardly recognize the language. I'm not happy about this at all.

I don't really have a point, except that Python 3 feels like a moving target.

<comment><USER52> I feel the same way as you do. For me, which version of an interpreter I'm using should be the kind of issue I only need to worry when solving extremely specific, deep-level problems. Python 3+ breaks this pact too often for my taste.

Considering this f-string example taken from another announcement:

       f"Diameter {(diam := 2 * r)} gives circumference {math.pi * diam:.2f}"

This is valid Python 3.8, but it's not valid in Python 3.7 (no walrus operator). And removing the walrus operator still doesn't work in Python 3.5 (no f-strings). On top of that, other comments already mention how f-strings have lots of weird corner cases anyway.

The entire point of Python in my circle of friends was that it made programming easy. Instead, I feel more and more in need of those "It works in my machine!" stickers. And good luck solving these issues if you are not a full-time programmer...

<comment><USER53> I'm not sure why you frame this as an issue with Python 3. This has always been the case, even in the 2.x days every release added new features, and if you ran code using them in an older version it wouldn't work.

The minor releases are always backward-compatible, so just run the latest version and everything will work.

<comment><USER51> The issue is that the ecosystem as a whole tends to follow the tip of the version chain. This means that any human-oriented Python stuff (e.g. documentation/tutorials/code-review/etc...) requires you stay up to date with the language changes.

Asyncio was the worst culprit, as it essentially introduces an inner-platform with its own dataflow semantics, but at least there the upsides were large and tangible.

</comment></comment></comment></comment><comment><USER54> I don't understand why the walrus operator is needed at all. Why not allow, this to work:

        if m=whatever():
            do_something

Why create a new assignment operator? For all the talk about making code not confusing, etc., some of these decisions sure seem nonsensical.

Oh, OK, it confuses passing arguments into a function by name? Really? C'mon.

Also, I can't understand the nearly religious rejection of pre and post increment/decrement (++/\--) and, for the love of Picard, the switch() statement.

I enjoy using Python but some of these things are just silly. Just my opinion, of course. What do I know anyhow? I've only been writing software for over thirty years while using over a dozen languages ranging from machine language (as in op codes) to APL and every new fad and modern language in between.

As I watch languages evolve what I see is various levels of ridiculous reinvention of the wheel for very little in the way of real gains in productivity, code quality, bug eradication, expressiveness, etc. Python, Objective-C, Javascript, PHP, C# and a bunch of other mutants are just C and C++ that behave differently. Sure, OK, not strictly true at a technical level, but I'll be damned if it all doesn't end-up with machine code that does pretty much the same darn thing.

The world did exist before all of these "advanced" languages were around and we wrote excellent software (and crappy software too, just like today).

What's worse is that some of these languages waste a tremendous amount of resources and clock cycles to do the same thing we used to do in "lower" languages without any issues whatsoever. Mission critical, failure tolerant, complex software existed way before someone decided that the switch() statement was an abomination and that pre and post increment/decrement are somehow confusing or unrefined. Kind of makes you wonder what mental image they have of a programmer, doesn't it? Really. In my 30+ years in the industry I have yet to meet someone who is laid to waste, curled-up into a fetal position confused about pre and post increment/decrement, switch statements and other things deemed too complex and inelegant in some of these languages and pedantic circles.

Geez!

</rant off>

</comment><comment><USER55> Is Python now becoming the new C++?

<comment><USER56> This is fair criticism. I've worked with Python for many years now, and one of the things that attracted me was that there was always a fsirly static "Pythonic" way to do things. The language has now grown so much that 80% of the people only use 20% of the language, but not always the same 20%, making it difficult to read other people's code. And all the syntactic changes contribute to fragmentation (not every project can have its Python interpreter upgraded regularly).

There's something to be said for a more stable, if less elegant, language.

</comment></comment><comment><USER57> Disappointing that Python sill has no support for a sorted container in its standard library, akin to C++ `set` or `map` classes.

<comment><USER58> [https://docs.python.org/3.0/library/bisect.html](https://docs.python.org/3.0/library/bisect.html)

> This module provides support for maintaining a list in sorted order without > having to sort the list after each insertion.

<comment><USER57> Problem with bisect is that bisect.insort() insertion is O(n), whereas C++ set.insert() is O(log n).

<comment><USER59> It is somewhat strange that Python does not have a binary tree in the standard library. I also couldn't find any discussion on the topic either. It might be a nice contribution.

Edit: it was coined a few times on the python-ideas mailing list but it seems it just died a silent death there. [https://mail.python.org/archives/list/python- firstname.lastname@example.com...](https://mail.python.org/archives/list/python- email@example.com/message/3XA5XVGOPQNOVP6PRODTARAFPFXWG3PX/)

<comment><USER58> I suspect it's because you rarely need them in Python because the existing built-ins (list, tuple, dict, set) usually work well enough for a given job, or you're already using e.g. Pandas or something.

FWIW: [https://github.com/calroc/xerblin/blob/master/xerblin/btree....](https://github.com/calroc/xerblin/blob/master/xerblin/btree.py)

</comment></comment></comment></comment></comment><comment><USER60> Everything of this looks like syntax sugar. I would expect more work on internals. Python has a lot of awkward edge cases in standard lib. In a lot of cases None is valid output for not-done states. Also I hate multithreading programming in Python 3, it has all drawbacks of C with additions of GIL.

</comment><comment><USER61> I'm still migrating from 2.7...to 3.5

</comment><comment><USER62> Does the python community care about concurrency at all? I havent seen anything new in terms of concurrency in a while. I might be wrong about this, but walrus operator seems like a gateway to writing obfuscated perlesque code.

<comment><USER63> 3.8 brings shared memory to multiprocessing: [https://docs.python.org/3/library/multiprocessing.shared_mem...](https://docs.python.org/3/library/multiprocessing.shared_memory.html#module- multiprocessing.shared_memory)

</comment></comment><comment><USER64> It would be nice if the Python web site would be mobile friendly.

</comment><comment><USER65> Anyone else most excited about PYTHONCACHEPREFIX? :-P

<comment><USER66> Not sure about _most_ excited, but I am looking forward to setting PYTHONCACHEPREFIX to a location that isn't in a volume mounted into my Docker container for development.

<comment><USER67> +1

</comment></comment></comment><comment><USER68> Can I chain the walrus operator? All examples I've seen were part of if/while blocks.

Something like:

        r1 = foo(x:=bar)
        r2 = baz(x)

</comment><comment><USER69> Assignment expression is something I miss from JavaScript which I used a lot to strip lines of code. Great to see in Python.

</comment><comment><USER70> Updates on `f-string` are quite fun. :)

`f'{username= }'` 'username="tolgahanuzun"'

I like it.

</comment><comment><USER71> Any idea how long it will take before it's an option with pyenv?

</comment><comment><USER72> Still no pattern matching and no immutable vars :-(

</comment><comment><USER73> Interesting! Thanks for the share!

</comment><comment><USER74> man do I wish they would make multiprocessing easier

<comment><USER21> Subinterpreters are coming in 3.9, which should fill most of the same roles as multiprocessing but without the complexities and edge cases of multiple real OS processes.

[https://www.python.org/dev/peps/pep-0554/](https://www.python.org/dev/peps/pep-0554/)

<comment><USER43> According to [https://www.python.org/dev/peps/pep-0554/#provisional- status](https://www.python.org/dev/peps/pep-0554/#provisional-status) they should already be present in 3.8 for evaluation.</comment></comment></comment>


Ask HN: How will the recession affect those working in tech? - <AUTHOR> How will a global economic recession affect those working in tech? In my country South Africa we can already see the effect. Companies wanna pay less for more and a huge amount of restructurings are happening. <comment><USER2> Companies will want to pay less for more and you'll see a huge amount of restructurings happening.</comment>


Ask HN: How would you securely send Excel files from one company to another? - <AUTHOR> I am working with a client that needs to send Excel files with a lot of personal data, to many B2B suppliers regularly.
The B2B suppliers have the right to see the data etc.  The problem is about transporting the data.  GDPR makes this more complex but taking into account how you can deliver a solution that is not over-complicated for the sender or receiver of the data.
We need to consider that the delivery method itself is secure, that the person who gets the file is who they say they are and the Excel file itself is secured.  Once the Excel file has been used, to confirm its removal in some way.
You could add a password to the Excel and then email the password and file to person.  However, that's not very secure as a password is in email so you could accidentally email the wrong person.  Also, very easy to hack excel security etc.
Maybe send the password via SMS – as 2FA approach.  However, means keeping a database of people receiving the file who could be an individual in a large company who moves around, phone numbers change. Very hard to keep track of many people in many companies all with secure delivery.
You could encrypt the Excel file with PGP, assumes the person at the other end has PHP to decrypt etc. Same problems as above with how to get the password – SMS, Email, POST?
Any other options?
Any SaaS solutions out there that do this?
Many thanks <comment><AUTHOR> Thanks for the replies. I need someone that works via an API - as will be coming from a platform sending to many B2B suppliers. problem with things like Gdrive, firefox is you are uploading the confidential data into their systems. A lot of files going to lots of different people. We are Microsoft / Azure stack - so maybe do somethig from them.

The link below to Cisco might be an option - looking I guess for enterprise style solutions.

</comment><comment><USER2> [https://www.cisco.com/c/en/us/products/security/registered-e...](https://www.cisco.com/c/en/us/products/security/registered- envelope-service/index.html)

</comment><comment><USER3> [https://security.stackexchange.com/questions/195406/secure-w...](https://security.stackexchange.com/questions/195406/secure- way-of-sending-a-excel-document-to-a-third-party)

</comment><comment><USER4> By sending a link from gdrive, with permissions enabled by email address

</comment><comment><USER5> [https://www.box.com/security](https://www.box.com/security)

</comment><comment><USER6> firefox send

[https://send.firefox.com/](https://send.firefox.com/)

Encrypt it at your end, password protect it. Send the link to your recipient. They download it and use the pre-agreed password (agreed over the phone with a known entity at the recipient - not over email).</comment>