Should you launch at a conference? - <AUTHOR> http://joelonsoftware.com/items/2011/09/15.html

<comment><USER2> This is an excellent post. I would like to add that what you get out of a conference is proportional to the work you put into it. There is no magic place where you just show up and then become successful.

This includes pre-planning:

\+ Get a list of journalists that will be at the event and email them beforehand. Don't just mass-mail a pro forma press release.

\+ Track down bloggers from that list that you think may be interested in your product (because they have written about a competitor, or have written a feature on the space) and tweet them or email them a quick intro and tell them you will be at the conference

\+ Do the same for investors. A simple tweet like "@vc would love to grab a few minutes with you at TC Disrupt to show you a demo of our product which is xyz etc.". Attending a conference is a great intro to cold emailing or tweeting somebody

\+ Plaster your website, blog, twitter etc. with information about the conference and where you can be found. Include clear contact details. I would go as far as to place contact details on the front page of your site (or a separate conference dedicated page which is clearly linked to from the frontpage), along with your photos (so people remember you). This is so when somebody from the conference lands on your site they remember you and can find an easy way to get in touch with you.

During the conference:

\+ Use the time you have at the conference to book demos with people you know will be there beforehand.

\+ Don't just sit and wait at your demo table. Be pro-active by having one person constantly out and about on the conference floor introducing themselves to people and handing out cards

\+ Be memorable - plaster yourself in your brand and color with t-shirts or shirts. Have a gimmick such as handing out sweets. One desk at TC Disrupt had a basketball hoop with prizes. I always seem to remember the companies that look good and are out and about.

\+ Make it very clear what your intentions are - press, fundraising, hiring, partnerships, etc. Have a 30 second pitch for each one of these, a 30 second demo, and then a 4-5 minute pitch and a 4-5 minute demo. Take down contact details and place a note beside each contact you get

\+ Attend all the after-parties

Post-Conference:

\+ Attendee's are inundated with information during the 2-3 days of the conference. Have a way to remind them of who you are and what you do after the conference. Take down their email. Don't just be another business card in a pile of business cards. Don't assume that a journalist or investor remembers who you are when you email followup - always re-introduce yourself

Disclaimer: former techcrunch employee

</comment><comment><USER3> This is all excellent advice but a huge chunk of the attention Trello received is a reult of the name "Spolsky" being attached to it.

He has a strong personal brand that has been cultivated for a decade.

<comment><USER4> Yes, and this post IS part of the continuing launch publicity he's generating for Trello.

</comment></comment><comment><USER5> Joel is in the other camp than me when it comes to launching. I believe in getting feedback from the public as soon as possible, but I just realized that there is a factor that Joel not mentioning here but which makes a big difference: celebrity.

If you launch something and have a large following like Joel, lots of people will see it. For me, the "one chance of making a first impression" isn't that important because very few people are going to get that first (and bad) impression. For me, the feedback is of higher value and losing maybe a few hundred potential customers is not a serious threat. But what would happen if, say, Steve Jobs announced a poorly iterated new product? Millions would try it out and two things would happen: 1) they would hate it and never try it again -- the first-impression thing. But more importantly, 2) Steves reality distortion field would lose many energy-points (or whatever those run on).

If Joel "officially" launches a three weeks old web page with an input element and a submit button, it could damage the personal brand he has worked hard to establish. But if you are not a celebrity, and your ego can handle it, it's possible that you are better off with the launch early strategy..

</comment><comment><USER6> Joel is doing a live chat right now (11 AM EST) at <http://chat.stackexchange.com/rooms/1293/onstartups>

</comment><comment><USER7> I think in general the "you never get a second chance to make a first impression" attitude by startups is overblown. It's a big world out there. That's not to say you should launch something that sucks, but get it out there if it's interesting.

<comment><USER8> This depends. For most startups what you say is true. You can launch 5 times and most wouldn't notice. But for a startup with a lot of press, a bad launch can hurt momentum (I'd think). Look at Color.

<comment><USER9> or Cuil. Or Apple Ping, or Google Wave, or Google Buzz.

<comment><USER7> Ok, so if you're a big name, big brand, or have invested big money in a product you may not a get much of a second chance (be it from customers or investors/managers).

But, for the rest of us nobodies, there will be other opportunities for news and first impressions as we trudge along. I launched my first app in 2005 to no press, just a couple of blog posts. It was almost dead, then NY Times writes about it 3 months later while covering the topic (Personal Finance). Every few months a another press mention would popup out of the blue and 5 years later when it got its second NY Times coverage a whole new batch of people discovered it. Of course, I no longer own or work on it, and I'm still "working for the man" so what do I know?

</comment></comment></comment></comment><comment><USER10> This is a great writeup. The only thing I would add is that if you are a startup and you don't have press contacts a PR firm is a huge help. We launched <http://www.ApartmentList.com> at Disrupt and got a similar response as Trello did because of it.

Or it could have been the Sprinkles cupcakes we handed out.

</comment><comment><USER11> _The morale boost you'll get will be incredible. After months of toiling away, the feeling you get from seeing real-world people actually start using your product is the best feeling you will ever get as a software programmer in your professional life. These are the great moments that make it all worthwhile. We made something. People used it. It matters._

Ain't that the truth. I shipped some code last week, and then spent some time at a customer's site demoing the new features and doing one-on-one training. It's a real buzz to see people use the stuff you made. It's easy to lose sight of that feeling when sitting in your air-conditioned beige office, divorced and detached from the realities that your users face, but when someone hugs you because of all the time and energy the code you just wrote will save them, it really validates what we do.

</comment><comment><USER12> Imho, when you're launching a product, if your final goal is to get VC funding, then go for a tech conference. If your final goal instead is to sell a product, then you probably want to look at other venues, and spend your energies in marketing efforts to reach out to your potential clients.

</comment><comment><USER13> If you have to _rely_ on any conference to gain traction you are in deep trouble. Make sure you have a solid business that can execute with as little external dependencies as possible. Launch on your results and accomplishments, not just stories and promises. People who attend these conferences are suffering from information overload. Prove something and you'll get a chance to stand out from the crowd. Generally you'll get way better treatment if you make them want to be part of your success, rather than be a supplicant desperate for a lifeline.

</comment><comment><USER14> Joel - I'm just wondering. With your reputation and clout, how would your product launch have compared if you'd just announced it via your blog / twitter / SO ? I wont be surprised if you'd have gotten a pretty good response via that method as well. I think launching @ conf is even more important to others who dont enjoy the same reputation / following as you do.

</comment><comment><USER15> Agreed that launching in a conference is useful. Getting a table, not so much. You may get a visit from a few VCs who will most likely waste your time if they don't know you. Most VCs send their most junior staff to walk the floors and results in perceived traction with said VC - not real traction.

</comment><comment><USER16> Secondlife for facebook.Nice!If secondlife was done right, maybe there wouldnt even have been FB!:P

</comment><comment><USER17> Joel completely nailed it - if you can get on stage at a big conference, do it.

Another question is: Should you go to a conference like TCDisrupt but present at Startup alley?

We (FeeFighters) did that. We aren't launching anything sexy that TC would like (We are in payments and even if you are making money and have saved businesses (including Fog Creek) $75million it isn't sexy unless Jack Dorsey is running the show) so we didn't bother applying to Disrupt.

We're launching next week at Finovate instead. So we decided to present at Startup Alley. It isn't cheap. We had to fly out there, it costs $2k for a table, etc. For us, its good to get out to SF every so often to visit with friends, investors, partners, etc anyway. Early on, not that many folks came by our booth (we were in the 500 startups alley, not the main one, so we were a bit away from the crowd).

Ultimately though, for us the exposure was worth it. We had several good meetings and customers came out of it - often it was often from folks we met at an afterparty who stopped by our table the next day. We also did a few guerilla things that helped us gain even more exposure: [http://feefighters.com/blog/3-ways-feefighters-disrupted- tcd...](http://feefighters.com/blog/3-ways-feefighters-disrupted-tcdisrupt/) Who else can say that top VC's tweeted about them from the bathroom? We then followed up with some of the VC's who said they love our scrappiness and have had several email conversations (we aren't actively raising money, but never hurts to meet w/ VC's).

There are ways you can maximize your opportunities and I think far too few people did those things. Generally though, if you can afford it, I think it is worth going even in the alley - but you have to make the most of your opportunities... We saw folks sitting behind their table, and people who just weren't very friendly/outgoing. That doesn't work at conferences. Send your most extroverted people out there. You need to be able to talk and relate to people instantly.

<comment><USER18> Good job on the marketing. I honestly never noticed your booth, but definitely noticed the urinal things (I assumed it was something officially sponsored).</comment></comment>


Interactive visualization of 2013 Thomson Reuter's Global Innovators Study - <AUTHOR> http://datagoldminer.com/innovators-thomson-reuters/

<comment><USER2> A couple critiques. The "No Breakout" view is almost meaningless. It would be more effective as a ranked list with words. If I take a screenshot of that, it means nothing. Circle positions, sizes, and colors encode no information in this initial view. The only way to get information is to hover, letting you browse the list in a disorganized fashion.

It's not clear on load what colors represent. There are no labels whatsoever. The colors make more sense on the "Country Breakout", but you lose the context again if you go to the "Industry Breakout". The last breakout also seems somewhat arbitrary. According to this, Google is part of "Internet Search". Don't they make hardware and software as well? Is IBM still a hardware company? The lines are fuzzy, but this categorical view draws a sharp divide between different sectors.

The graphic this is based on, Four Ways to Slice Obama's Budget Proposal, contains much more information and labels it well.

[http://www.nytimes.com/interactive/2012/02/13/us/politics/20...](http://www.nytimes.com/interactive/2012/02/13/us/politics/2013-budget- proposal-graphic.html)

Notice that circle area encodes proposed spending, which is a good measure of size/importance. The coloring is also a quantitative metric with an associated scale. When you go to the "Department Totals" view, you can see how the size/coloring reveals insights about proposed Defense spending (heavy cuts).

<comment><USER3> Yea, I was going to post that the initial No Breakout view conveys absolutely no information. The colors haven't yet been explained, the circles are all the same size, and... there are 100 of them (but we already know that). Hovering over dots to find more information is really low bandwith.

Another point: the top category on the Industry Breakout view is obscured by the drop down. It wouldn't be such a big deal, but that category is probably _the most important_.

Also, selecting options from the drop down can leave you hovering over a different company, which creates a new hover tooltip. That's pretty confusing.

And a typo in the title: itsself

</comment></comment><comment><USER4> It's a pretty stock force chart that would probably would have been a lot more useful as a horizontal bar chart. The industry breakout is useless without a legend since I have to switch to country breakout to understand what the colors mean. The circles don't quantify any data, especially unhelpful when you could have used the unique inventions metric to indicate a company's contribution.

So yeah, this is sexy, but also quite useless.

</comment><comment><USER5> Visualization, shmisulization. Only so much that bouncy balls can do to sex up a strangely parochial list. No ARM, no Tesla. But Blackberry is on the list? Seriously? How many CEOs are currently asking themselves "how can we be more innovative, like Blackberry?"

<comment><USER6> A failure of Blackberry to have a respectable market share does not mean the company isn't innovative. I think any company with its back against the wall is probably attempting to be innovative at every turn.

<comment><USER5> In theory, they certainly should be. However in practice that's not always the case. What significant innovations has Blackberry brought to market in the past three years (the timeframe this list covers)? Offhand I can't think of any.

I haven't delved into the list's methodology, but at a glance it appears to basically be a count of in-house patents, which is a reasonable approximation of the amount of innovation a company produces multiplied by the number of patent lawyers on its payroll. If the second variable is large enough, the first one need not be that significant...

</comment></comment></comment><comment><USER7> Sorry to be a grump but I think we're actually worse off for having these very shallow and simplistic analyses of data. Also, patent != innovation.

That being said aesthetically it's very pleasing and with some rigour there might be something of value here.

</comment><comment><USER8> Nice visualisation, but what's the value in this? Symantec's a "global innovator" (really? I'm skeptical, but am I missing something?) And splitting companies into "electronic components" and "computer hardware" seems dubious too, since there's presumably a lot of overlap.

<comment><USER9> You should blame Thomson Reuter's report for that, as I understand it, this page is an attempt to make a boring ranking ([http://top100innovators.com/](http://top100innovators.com/) ) into a sexier and more meaningful visualization.

</comment></comment><comment><USER10> Pretty use of D3.js. Obviously this is your business but it would be great if there was some sourcecode to share with the community.

The report that the data is based on is not worth much. They claim to use Volume, Success, Global and Influence as measures. Apply this the Blackberry and Symantec and decide the value.

<comment><USER2> There's a step-by-step guide to creating this kind of animated chart by Jim Vallandingham.

[http://vallandingham.me/bubble_charts_in_d3.html](http://vallandingham.me/bubble_charts_in_d3.html)

</comment></comment><comment><USER11> Why not add the country code into the circles? Right now it is relying on color alone and that is bad. Firstly there is no intuitive or learned connection between a color and a country and secondly it is problematic for people with bad color vision.

</comment><comment><USER12> I knew it. When I saw the title with "D3" and "sexy" (or some other over-used overhyped adjective), I just knew it was going to involve some non-sensical clump of animated balls. This is far less useful than even a simple table.

If you're going to do balls in D3, at least do it with force:

[http://www.nytimes.com/interactive/2012/09/04/us/politics/de...](http://www.nytimes.com/interactive/2012/09/04/us/politics/democratic- convention-words.html)

<comment><USER4> You're right. The best visualizations wouldn't care about the library used to build them. By putting D3 in the title, it becomes obvious the authors care more about the technology than the content.</comment></comment>


A Greener Google - <AUTHOR> https://agreenergoogle.com/ <comment><USER2> This is a parody site as it says on the very bottom:

> This site is not sponsored by or supported in any way by Google. It is a > parody site protected as "fair use" under Section 107 of the Copyright Act. > If you work for the legal department of Google, and you believe your brand > is being negatively affected by an announcement that you would want to halt > the climate emergency, please email firstname.lastname@example.com.

IMHO it's a bit over the top; [https://amazondating.co/](https://amazondating.co/) for example is obviously a parody and still achieves its objective great. This google site is not obvious at all, only a tiny notice with low contrast says it is on the bottom.

<comment><USER3> Parody without being obvious is no longer parody. It's just misleading.

</comment></comment><comment><USER4> Google executives finally doing the thing their employees have wanted for months.

[https://medium.com/@googworkersac/google-workers-are- strikin...](https://medium.com/@googworkersac/google-workers-are-striking-for- climate-sept-20-7eba2100b621)

[edit]: they got me good with their "In lieu of our normal April Fools' joke, today we're getting serious"

<comment><USER5> They're not. It's a fake.

</comment></comment><comment><USER5> Is this real, or an April Fool's Day prank?

The custom domain name + Google branding has the feel of a Yes Men[0] project designed to shame Google into doing the right thing.

[0] [https://en.wikipedia.org/wiki/The_Yes_Men](https://en.wikipedia.org/wiki/The_Yes_Men)

 __Edit: __Very tiny print at the bottom:

> This site is not sponsored by or supported in any way by Google. It is a > parody site protected as "fair use" under Section 107 of the Copyright Act. > If you work for the legal department of Google, and you believe your brand > is being negatively affected by an announcement that you would want to halt > the climate emergency, please email email@example.com.

</comment><comment><USER6> Why is this flagged? It's a great way to use April fools for a good purpose.

</comment><comment><USER7> Sick joke, not funny. This negatively effects the movement. Whoever wrote/participated in this article should be ashamed.

</comment><comment><USER8> How is it even possible that this is posted again? This was killed earlier for good reasons [https://news.ycombinator.com/item?id=22746260](https://news.ycombinator.com/item?id=22746260)

<comment><USER5> The "good reason" being that it shamed Google?

<comment><USER8> Its a site that fakes being google while it is by extinction rebellion, one of the most vile group of people on the face of the earth

<comment><USER9> RE: one of the most vile group of people on the face of the earth

Can you explain why? What makes them vile?

</comment></comment></comment></comment><comment><USER10> Another killed thread said this is a product of Extinction Rebellion.

</comment><comment><USER11> The HTTPS certificate is from Let's Encrypt, unlike most Google services.

The website also has some bugs, including a useless search bar and an inactive menu bar.

I would not put too much faith in this being real.

</comment><comment><USER12> Soo... what about china? And fossil fuel companies using GCP?

<comment><USER13> "Zero contracts with fossil fuel companies" presumably covers GCP...

Does that mean hundreds of thousands of oil company employees will receive "access denied" when they try to log into their email this morning?

If so, that scares me - My industry isn't oil, but I don't want my service provider pulling the rug out from under me with zero notice based on it being 'good PR' to do so...</comment></comment>


Golang Diaries II - <AUTHOR> https://www.tbray.org/ongoing/When/201x/2013/07/15/Golang-Diaries-2 <comment><AUTHOR> Of course, anyone can make a Map function for any particular type combination, but Tim Bray has a point. The generic, functional map function cannot be written, and never will.

There is an issue of elegance. If generics were to be added, lists and maps would need to have similar syntax, because they feel and behave like generics. However, they cannot. Their syntax is… not generic enough.

Oddly enough, elegance through consistency was never reached when designing built-in functions like make(): those can be applied on any type, but user- defined functions don't have this freedom. Essentially, there is a Java-like divide between built-in types (which, for instance, you cannot create methods on) and user types. Their rules of elegance don't apply to the built-ins, which is quite odd.

I doubt that this impedes on programming efficiency compared to C. However, some of the duplicated code out there cannot be factored into a library, and map is an example of that.

<comment><USER2> I took a couple minutes to whip up a quick map function, to be honest I didn't quite believe you. This may be my naivete, but is there any way it's not sufficiently generic for types? I realize it's not suitable for maps, but it satisfies the OP's request for a map that can convert arrays of type Foo to type Bar

[http://play.golang.org/p/jxMFq5UYs1](http://play.golang.org/p/jxMFq5UYs1)

<comment><USER3> I think the point is, if you write map like this you might as well be using a dynamically typed language in the first place because you're deriving no benefit from the type checker. In fact, you're just using casting to completely circumvent it.

<comment><USER2> Of course. If the main cornerstone of your project is map it's probably not the greatest idea to use Go, but if you're using Go for other reasons and happen to need a quick map function there's no reason to change languages just because Go doesn't have a standard library implementation

<comment><USER4> But then it's pretty odd to use Go because you like the language, while not being able to design a proper map().

And map() btw is only the tip of the iceberg in functional programming. But then again, Go is not a functional programming language.

</comment></comment></comment></comment></comment><comment><USER5> > Isn't it pathetic that so many allegedly-mainstream languages don't have > HTTP libraries that are this natural and idiomatic?

That's after 13 SLoC to make a single HTTP request - I like Go, but that seems almost like a parody. It's not that different from other languages, and the error handling makes it look longer, but for something described as "natural and idiomatic" I would expect it to be one function call plus one failure test, not six and three...

<comment><USER6> When people complain about comprehensive error-checking, it makes my blood boil.

Checking and handling all possible error conditions is a GOOD thing.

<comment><USER7> > Checking and handling all possible error conditions is a GOOD thing.

I agree. But Go seems to have taken the most verbose way to achieve that. Pattern matching should have been the way to go if they did not want to use exceptions. Then again, Go does not have functional constructs, and you wouldn't be able to get far with it. Though it still prevents you from ignoring errors, unlike what exists in the language.

</comment></comment></comment><comment><USER8>
         if ... { return failure }

three(!) times in a row and then he writes:

> _Isn't it pathetic that so many allegedly-mainstream languages don't have > HTTP libraries that are this natural and idiomatic?_

Isn't it pathetic that a wannabe mainstream language doesn't provide exception handling?

<comment><USER9> Exceptions are horrible if you're trying to make a fast, dependable, reliable, low-level, concurrent modern day programming language, as Go is. Exceptions are also horrible in that they never improve the readability and understandability of any code they exist in. The Go team, some of whom actually designed C back in the day, are well familiar with Exceptions, why they are bad, and explicitly chose to not implement them.

So no, using the word "pathetic" implies a gross oversight. This was a very deliberate decision, and a good one at that.

</comment></comment><comment><USER10> Just recently, I needed a concurrent map for my project. I looked for a library and started using it. Fast forward a bit and I realized the map was completely untyped. Fast forward a slightly longer bit and I realized (perhaps wrongly? Enlighten me) that there was no way to implement a concurrent map library that wasn't untyped.

We need generics, or perhaps it's more goy to have the same features by some more clever way. But still. We need those features and bad.

I'll be looking at Rust with some more interest meanwhile.

</comment><comment><USER11> Screw map, let me pass a comparator function into sort for interfaces.

<comment><USER12> That's not necessary. You can just create a type that embeds the type you're sorting, and define the Less function however you like. It's very efficient since you're just wrapping the entire slice object, not every element in the slice.

      package main
      import "sort"
      type RevIntSlice struct {
          sort.IntSlice
      }
      func (arr RevIntSlice) Less(i, j int) bool {
          return arr.IntSlice.Less(j, i)
      }
      func main() {
        myList := RevIntSlice { sort.IntSlice {1, 2 , 3 } }
        sort.Sort(myList)
        for _, elem := range(myList.IntSlice) {
            println(elem)
        }
      }

Note that if all you want to do is reverse the sort order, sort.Reverse is a better way than what I wrote here. This is just an example of the kinds of things you can do.

<comment><USER13> >That's not necessary. You can just create a type that embeds the type you're sorting

But that's more work (and more boilerplate) than simply passing an anonymous comparator to the sort function.

<comment><USER12> Let me guess. You are coming from Java. In Java this would be:

      myArray.sort(new Comparator<MyClass> ({
        @Override
        CompareTo(MyClass lhs, MyClass rhs) {
          return rhs.compare(lhs);
        }
      }));

Is that really shorter? I don't think so.

In any case, there is a more elegant solution in Go, which is simply:

      sort.Sort(sort.Reverse(array))

You need to open your mind a little bit, to learn a new language.

<comment><USER13> _You are coming from Java._

Nope. Clojure and Haskell. Clojure:

        user=> (sort > (vals {:foo 5, :bar 2, :baz 10}))
        (10 5 2)

Haskell:

        >>> sortBy (flip compare) . map snd $ [("foo", 5), ("bar", 2), ("baz", 10)]
        [10,5,2]

</comment></comment></comment></comment></comment><comment><USER14> tbray works for Google as "Developer Advocate". Which means he markets to developers.

This is a marketing fluff piece from Google.

"I still haven't written 1000 lines of Go." Why do we care what this guy says then? Because lots of Googlers vote it up.

I suggest you flag this spam :)

</comment><comment><USER15> > Isn't it pathetic that so many allegedly-mainstream languages don't have > HTTP libraries that are this natural and idiomatic?

But at every point where Tim then returns a failure we lose insight as to why something failed.

My preferred idiom for handling all errors when it comes to web requests or responses is to return both the error (as it has the detailed message of what happened) and the http status code that matches the error (as it has translated the message into a code that describes the type of error).

This bit would change:

        if !strings.HasPrefix(mediaType, "application/json") {
            // bogus media type, deal
            return failure
        }

to:

        if !strings.HasPrefix(mediaType, "application/json") {
            // bogus media type, deal
            return HttpErr{Err: errors.New(""), Status: http.StatusUnsupportedMediaType}
        }

Whatever receives that knows there has been an error, and has the code available to do tell the developer or end user something meaningful without relying on the error message.

I'm sure others are also creating their own http error as well, so whilst Go does http really well it seems in practise that there are still a few places where it could benefit from a little extra to help standardise the code we write.

All of those Http codes are here: [http://golang.org/pkg/net/http/#pkg- constants](http://golang.org/pkg/net/http/#pkg-constants)

Regarding the map stuff, the only other place the lack of generics has stood out has been within slices of a type of thing.

The scenario is: I have a slice of identifiers in an order important to me, for each of these concurrently fetch the record being identified and create a slice of those records ordered as per the initial slice.

We've ended up using this type of thing:

        // Envelope for making sorted concurrent requests for Comment
        type CommentRequest struct {
            Comment Comment
            Err     error
            Seq     int
        }

        type CommentRequestBySeq []CommentRequest

        func (v CommentRequestBySeq) Len() int           { return len(v) }
        func (v CommentRequestBySeq) Swap(i, j int)      { v[i], v[j] = v[j], v[i] }
        func (v CommentRequestBySeq) Less(i, j int) bool { return v[i].Seq < v[j].Seq }

        // Much later in the code...

        // Make a request for each id
        req := make(chan CommentRequest)
        defer close(req)

        for seq, id := range ids {
            go HandleCommentRequest(id, seq, req)
        }

        resps := []CommentRequest{}
        for i := 0; i < len(ids); i++ {
            resp := <-req
            if resp.Err != nil {
                return resp.Err
            }
            resps = append(resps, resp)
        }

        // Sort them
        sort.Sort(CommentRequestBySeq(resps))

        // Extract the values
        ems := []Comment{}
        for _, resp := range resps {
            ems = append(ems, resp.Item)
        }

In that example a Comment is a comment made on a forum web page and we're fetching lots concurrently, but needing to return them in the order that they will be displayed.

The problem stems from that envelope, and the need to implement that sort function for every type that we ever want to concurrently fetch and sort.

It's the only place where I think, if we just had generics this could be a lot better.

<comment><USER16>
      if !strings.HasPrefix(mediaType, "application/json") {
            // bogus media type, deal
            return HttpErr{Err: errors.New(""), Status:    http.StatusUnsupportedMediaType}
        }

Sorry, but having dealt with a HTTP library in PHP that did something similar, I would have to hunt you down and kill you. The HTTP response status code from the original request was NOT 415 Unsupported Media Type. Do you have any idea how misleading this error is to the developer? The error you SHOULD be returning is an Application error code "Unexpected Media Type", NOT a HTTP error code. It's the application that has a problem with the returned media type.

<comment><USER15> > I would have to hunt you down and kill you

Attempts at off-the-cuff witty death threats don't tend to work too well online. I truly hope you were jesting.

<comment><USER16> Apologies, yes it was an attempt at humor. I was hoping for more of a discussion on the two approaches though if your still game.

<comment><USER15> Sure.

My scenario is a web service, that calls other web services.

It throws an error and then has to return something meaningful to the callee, which is usually both a message that tells the developer calling the web service how to fix it (if it's something that they can fix) as well as the relevant response code.

The advantage from assigning the code at the earliest point the error is detected is that one avoids any later text parsing of the error message to figure out the right code to return. It also allows general switching on the error code range to see whether you really need to throw the error or whether there is some other branch of logic that could be done instead.

</comment></comment></comment></comment></comment><comment><USER12> With regard to the functional-style "map" function, is it really that much less typing than a simple for loop?

      output := make(output_type, len(input))
      for idx, e := range(input) { output[idx] = convert(e) }

compared to:

      output := map(input, func(in input_type) output_type {
          return convert(in)
        }
      )

There are cases where functional programming can be a lot terser (for better and worse), but I don't think this is one of them. My guess is that the original poster is just adjusting to different ways of doing things between Golang and Ruby-- that's natural.

My biggest complaint about Go so far is that you have to use an external library to get an ordered tree structure. Maps suffice most of the time, but sometimes you need ordering.

[edit: fixed map example]

<comment><USER17> Loops impose, and guarantee, ordered traversal of a collection. Maps do not. This means that maps can sped up by dividing up the collection into smaller parts and mapping each of them in parallel.

For a language that has concurrency as a central design motivation, it's an unfortunate omission.

As we say in the database world: think in sets, not in arrays.

<comment><USER18> It's an imperative language with side-effects, unordered mapping would break expectations and produce buggy code.

You can still achieve those speed ups, you just need to be explicit about the division (e.g., by creating a channel, launching goroutines and then collecting the results).

[https://sites.google.com/site/gopatterns/concurrency/paralle...](https://sites.google.com/site/gopatterns/concurrency/parallel- for-loop)

<comment><USER17> I'm not talking about what Go _is_ ; I'm more interested in what it might have been. There's nothing in the law that prevents mapping with side effects. If the side-effects don't require a particular order, why constrain them?

<comment><USER18> _I 'm not talking about what Go is; I'm more interested in what it might have been._

Well yes, but there are certain core concepts that _define_ Go, and being imperative with side-effects is one of them. If we drop that, then we're no longer discussing Go but some hypothetical language.

 _There 's nothing in the law that prevents mapping with side effects. If the side-effects don't require a particular order, why constrain them?_

But they aren't constrained, they just aren't built-in. Go has loops, not maps, but if one wants to make a mapping function, the link I posted shows there's no constraint in having it execute out of order.

<comment><USER17> I think we're just restating our arguments. I'm happy to leave it here.</comment></comment></comment></comment></comment></comment>


NSA dreams of smartphones with "split" crypto keys protecting user data - <AUTHOR> http://arstechnica.com/tech-policy/2015/04/nsa-dreams-of-smartphones-with-split-crypto-keys-protecting-user-data/ <comment><USER2> Not a bad article, except for not gloating about how risible the NSA "multiple keys" proposal is. The author, Dan Goodin, presents the "tech companies" viewpoint, and the NSA proposal.

I'd have to say that the whole "objective journalism" thing is used here to give the NSA proposal more weight than it deserves. We've seen from the Snowden docs that the NSA isn't above lying, cheating, stealing, intercepting shipments, and did I mean lying to Congress under oath? If Goodin had pointed out how mendacious the "Intelligence Community" has been recently, and historically, Admiral Micheal S. Rogers would have seemed less like a rational stakeholder, and more like someone grasping for straws.

</comment><comment><USER3> I am not a cryptographer is there any already implemented system that can do something similar to this with multi-part-keys to unlock a _vault_?

</comment><comment><USER4> Isn't this just key escrow all over again? Does nobody remember the 90s?</comment>