My Favorite Rust Function Signature - <AUTHOR> https://www.brandons.me/blog/favorite-rust-function <comment><USER2> You don't have to write the lifetimes here, this can just be

      fn tokenize(code: &str) -> impl Iterator<Item=&str> {

but including them to be more explicit does make sense for the post.

<comment><USER3> In that case, how does the caller know that the results will last as long as the input? Does it assume `'static` or is there some cleverness?

<comment><USER4> Elision never assumes 'static, since that's an unusual case that has very few real-world uses.

This leaves the only remaining possibility that references in the return type must have the same lifetime as references in function's arguments. Without a GC, or leaking memory, you can't make a Rust reference/lifetime out of thin air, so there's always such relationship.

When a function takes multiple arguments by reference, the compiler will ask to disambiguate which one is used for the return type. Borrow checker intentionally checks borrowing against function prototypes, not function bodies.

<comment><USER5> > Elision never assumes 'static

I'm pretty sure boxed trait objects (maybe all boxed objects?) are assumed to be 'static. That is, Box<dyn MyTrait> is shorthand for Box<dyn MyTrait<'static>). If you want non-static lifetimes you have to do something like Box<dyn MyTrait<'_> \+ '_>

(I only just learnt this so take it with a pinch of salt.)

<comment><USER6> You might be interested to know that the + '_ is inferred from the lifetime of the trait bound it comes from. By default if no lifetime is involved what will be inferred is 'static (namely, an owned thing). This means that if you write Box<dyn My trait<'_>> that's enough. If MyTrait _doesn 't_ have a lifetime parameter then you might have to write Box<dyn MyTrait + '_> to "flip the inference" from the default, but that only comes up in practice on return types, particularly with impl Trait.

TL;DR: Trait<'a> is actually understood as Trait<'a> \+ 'a.

<comment><USER5> I don't think so. Try removing the `+ '_` from this code:

[https://play.rust- lang.org/?version=stable&mode=debug&editio...](https://play.rust- lang.org/?version=stable&mode=debug&edition=2018&gist=97692026a1d749b0e3fba760a2b1759a)

<comment><USER6> Oh, you're right. Clearly I'd forgotten the rule. `'a` is not inferred for `dyn Trait<'a>`, it is inferred for `&'a dyn Trait`[1].

[1]: [https://github.com/rust- lang/rfcs/blob/master/text/0599-defa...](https://github.com/rust- lang/rfcs/blob/master/text/0599-default-object-bound.md)

<comment><USER5> Aha! Thanks for the link. Why isn't this in the official documentation anywhere?

Also I'm going to point people here next time someone tries to claim that Rust is simple.

<comment><USER6> If you look at the date that RFC is from before my time. My guess would be that you don't _need_ to know the rule: 95% of the time you don't need to use `+ '_` anywhere (these rules predate the ability to use `'_` to begin with, which is why the RFC talks about `+ 'a` only) because the behavior matches the user's expectation (not having to write `&'a Foo<'a> \+ 'a`), and, nowadays, when on the 5% of cases you _do_ need 'a the compiler will tell you about it

      help: to declare that the trait object captures data from argument `self`, you can add an explicit `'_` lifetime bound
         |
      14 |     fn things(&self) -> Box<dyn Things<'_> + '_> {
         |                                            ^^^^

Edit: having said that, the docs _do_ explain these rules[1], reachable from the trait object documentation[2], while it seems that The Book doesn't.

I'm also noticing that my confusion was likely due to `&'r Ref<'q, Trait>` being interpreted as `&'r Ref<'q, Trait+'q>`, which is behavior that was introduced in a follow up RFC[3].

[1]: [https://doc.rust-lang.org/reference/lifetime- elision.html#de...](https://doc.rust-lang.org/reference/lifetime- elision.html#default-trait-object-lifetimes)

[2]: [https://doc.rust-lang.org/reference/types/trait- object.html?...](https://doc.rust-lang.org/reference/types/trait- object.html?highlight=trait,object#trait-object-lifetime-bounds)

[3]: [https://github.com/rust- lang/rfcs/blob/master/text/1156-adju...](https://github.com/rust- lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> > The downside is that, if you perform this as a separate pass, your parser > now has to iterate over all of the source code twice. This may not be the > end of the world: tokenizing isn't the most expensive operation. But it > isn't ideal, so some parsers combine the two passes into a single one, > saving cycles at the expense of readability.

This paragraph is a bit muddled:

* If you keep the two passes separate, then the second pass is over the token stream. So it's irrelevant that "tokenizing isn't the most expensive operation" because you're never going to do the actual tokenising a second time.

* If you combine the two passes then you're not "saving cycles" because you're _still doing both of the loops_ \- it's just that they're now happening in parrallel rather than in sequence. This confusion is repeated later when he says the combined one is "without the runtime overhead of a second loop".

* What you _are_ saving is memory, because you don't have to keep the whole token stream in memory at once.

But really this is a nitpick on a small note. The overall article is great.

<comment><USER8> Nitpick^2: You are probably saving a few cycles due to loop overhead around pointer offsets and bounds checking, + not having to load the items into cache twice, if the sequence is too long to fit into cache.

<comment><USER7> Agreed! I definitely wasn't telling the whole truth by saying the amount of cycles spent on looping is ultimately the same. Although the difference is complex enough that I could imagine it going either way (but you're right that the cache effects would probably be the clincher).

</comment></comment></comment><comment><USER9> Really enjoyed seeing this broken down and explained. Is a function like that considered idiomatic Rust?

<comment><USER2> Yep! See my comment about the lifetimes, though, you may not actually write them out in the real code, but conceptually, this is Rust's bread and butter.

</comment></comment><comment><USER10> That function really is a good example for explaining lifetimes in Rust.

<comment><USER11> The function may be a good example, but this blog post doesn't really do a good job at explaining it, at least not to people unfamiliar with Rust (which I assume it's aimed at). If I understood correctly, if you assign the lifetime _' a_ (or _' x_, _' l_, whatever) to all parameters, you tell the compiler that they all have the same lifetime? And if you wanted to have different lifetimes, you could use _' a_ and _' b_? But the article doesn't explicitly mention that, so you could end up thinking that _' a_ is some kind of a magical constant that you have to use...

<comment><AUTHOR> The target audience was programmers who are at least familiar with the basic concepts of stack, heap, and pointers, including but not limited to newer Rust programmers.

You make a good point about 'a; I could have made that clearer. In practice it works the same way as a generic type (the letter is arbitrary, and it's declared inside the < >), which I assumed people would be familiar with, but I can see how the connection between the two may not have been obvious.

<comment><USER10> You can still edit it to improve it in that regard. Maybe add a footnote or something.

<comment><AUTHOR> Yes, I plan to go back and make several improvements this evening after I'm off work :)

</comment></comment></comment></comment></comment><comment><USER12> It'll be fun when we get first-class generators and you can write a simple, imperative function and no helper types and still use this type signature :)

<comment><USER2> Until then, [https://doc.rust- lang.org/stable/std/iter/fn.from_fn.html](https://doc.rust- lang.org/stable/std/iter/fn.from_fn.html) can handle many cases.

<comment><AUTHOR> Oh that's really neat, I didn't know about that

</comment></comment></comment><comment><USER13> > This is something that you cannot do both a) this safely and b) this > efficiently in any other language.

This is wrong. Pretty sure you could do this in ATS for example.

<comment><AUTHOR> I may have overstated that. What I really meant was "any other language that I'm passingly familiar with", which includes the majority of mainstream languages.

<comment><USER14> Substrings in older versions of Java used to reuse the character array of the original string instead making a copy. The flip side is that the original string must be retained in memory until all the substrings have "become garbage". So there is a trade-off.

<comment><USER15> The Rust version has that same tradeoff; the string can't be deallocated until all the tokens' lifetimes have ended. (In this particular use case, that's not really a cost, since you probably need to keep the string available the whole time anyway.)

Go, which is garbage-collected, also does the slice-by-reference trick (but fails criterion #1 because it doesn't really have iterators).

</comment></comment></comment></comment><comment><USER16> You might find generics useful as well, to support any parameter that can be referenced as a `&str`, such as a `String`:

        fn tokenize<S: AsRef<str>>(code: S) -> ...
            code.as_ref()

Edit: whoops, was too quick, apparently this isn't a great idea here.

<comment><USER17> In cases like this, it can be useful to have the generic function call a separate, private function which does the implementation and is _not_ generic. Generic functions are monomorphized, meaning copies are generated for each concrete type they're called with. Separating them out in this way can reduce the size of the generated code after monomorphization.

<comment><USER18> In cases like this, the generic function cannot return an Iterator of &str that borrow from the input because the input is being consumed, so it's a bad suggestion. The input needs to be &str to be able to return borrows from it.

If they had tried to complete their code and compile it, they would've noticed there's no way the function could return `code.as_ref()`.

<comment><USER17> That's true that in this case their plan of making the input generic wouldn't work, as it relies on the output being borrowed. The technique of reducing the size of monomorphized functions would be useful in other contexts, but not this one.

</comment></comment></comment></comment><comment><USER19> Tokenizers usually need to retain some information about where each token came from, like the range in the source.

In C++ I might do it like this:

        struct token {
            string::iterator start;
            string::iterator end;
        };

and then the range in the original source can be recovered via:

        size_t offset = tok.start - src.begin();

What is the preferred way to do this in Rust? Is there something better than using indexes?

Rust doesn't appear to have a way to say "give me the location of this &str in that &str" (even though it seems like it would be safe).

<comment><USER20> > What is the preferred way to do this in Rust? Is there something better than > using indexes?

I don't think so.

> Rust doesn't appear to have a way to say "give me the location of this &str > in that &str" (even though it seems like it would be safe).

'course there is: str::find ([https://doc.rust- lang.org/std/primitive.str.html#method.find](https://doc.rust- lang.org/std/primitive.str.html#method.find))

It looks a bit abstract because it takes a Pattern rather than an `&str`, but a char, a slice of chars, an &str, or a predicate function, are all patterns.

<comment><USER19> str::find performs a substring search, which is incorrect if the same token appears more than once.

What I want is the literal offset of a string slice in another, aka pointer arithmetic in C:

       fn derp() -> usize {
          let src = "xxxxxxx";
          let tok = &src[3..4];
          let offset = tok.as_ptr() - src.as_ptr();
          offset // should be 3
       }

this should be doable safely; I think it's just an annoying hole in the API.

<comment><USER2> cast both of those as_ptr()s to usize and this does what you want.

<comment><USER21> I know it's just an example, but in case anyone tries to grab the code - it's worth noting that this will panic if you try to slice into the middle of a UTF-8 sequence, and will give byte offsets and not char offsets, so it might not give the answer you expect if src contains multibyte chars before tok. Also I'm fairly new to Rust so it's possible there's some other way to do it that I just don't know about.

</comment></comment></comment></comment></comment><comment><USER22> I really don't like usage of ' in the function signature, it simply looks wrong.

In generally that is my main complaint as I am trying to learn Rust, the syntax seems to be all over the place. Maybe that feeling will fade away as I get more use to the language.

<comment><USER2> Almost none of it is unique to Rust, but it does draw inspiration from a wide variety of influences, so it can feel like that for sure.

This syntax was taken from OCaml.

Incidentally, nobody really loves it, but nobody could come up with anything clearly better either.

</comment></comment><comment><USER23> This might be a good thread to mention nom[1], a parser combinator in Rust.

1\. [https://github.com/Geal/nom](https://github.com/Geal/nom)

</comment><comment><USER24> You can actually kind of do this with `std::shared_ptr` [0], but it's going to be nowhere near as efficient[1] as the Rust mechanism. Maybe a single-threaded implementation of it could come close but you'd have to roll it yourself or use something like `boost::local_shared_ptr`. You may also need to go to intrusive pointers to make sure there's memory alignment.

Of course the Rust variant is not only cheaper (no ref counts), it's also guaranteed thread-safe (which again, C++ would have to use something like the atomic `shared_ptr` to achieve)

TLDR: Even when C++ can kind of do it, you have to give up concurrency safety to get close while adding memory pressure & still not being as fast while Rust gives you guaranteed concurrency safety for free regardless of accidental misuse of your API.

[0] Currently that would be constructor #8 on [https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_p...](https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr) [1] Not only are you always paying for atomic ref counting even when you don't need it, aliased `shared_ptr` will be as expensive to take a ref for as normally constructing it - there's possible no way to `make_shared` with aliasing. This means the aliased shared_ptr will be even more expensive every time you need to access the ref count since the control block loses cache coherency. On the other hand if you structure it more carefully maybe you could vend `const std::shared_ptr<std::string>&` in your iterator so that in the single-threaded case your only overhead is constructing the aliased shared_ptr once & you leave it to the user to take a copy when transferring to another thread.

<comment><USER25> Nobody in their right mind will use `shared_ptr` in this context. It will be `string_view` in and out with lifetime management left as an exercise to the programmer.

<comment><USER2> I read your parent as saying "assume we start from needing this to be checked," and then saying that this is the best that can be done. You're absolutely 1000% right that nobody would write that ever and would use string_view and not have it statically checked.

<comment><USER24> That's exactly it. Just showing how trying to get the same safety guarantee in c++ is an either or between performance and safety.

</comment></comment></comment></comment><comment><USER26> why do we need the lifetime after the function name? i.e. `tokenize<'a>`

<comment><USER27> To make the function generic over some lifetime 'a, similar to how generic functions can be generic over some type T (e.g. foobar<T>). This is usually not necessary to write as it is elided in common use cases.

<comment><USER26> thanks! I think what was confusing me was that in some examples i see it omitted and in some not. Now it's clear.</comment></comment></comment>


Ask HN: Any data on Twitter user base growth & Smartphone growth trends? - <AUTHOR>

I am looking for latest trend data for Twitter user base growth. Also data for smart-phone user growth. Thanks in advance. <comment><USER2> I've been crawling Twitter user data for awhile, and I can tell you that the # of ACTIVE twitter users is somewhere between 15 million and 25 million users.

I notice this because in the beginning, I'd be crawling a ton of users a day, but have reached a peak in the past few weeks as I've crawled more and more (now I only crawl maybe 10,000 new users a day that weren't crawled already).

<comment><AUTHOR> Great- thank you for the information.</comment></comment>


From 0 to $1B – Slack's Founder Shares Their Launch Strategy - <AUTHOR> http://firstround.com/article/From-0-to-1B-Slacks-Founder-Shares-Their-Epic-Launch-Strategy <comment><USER2> There's something much deeper going on here, and I don't think Butterfield or the media understands it.

What I'm reading is that Slack underwent a critical period of user-focused product design. This is the story of a _product development process_ , not a launch.

The other factor is hidden behind some of the headings: "When key users told us something wasn't working, we fixed it — immediately." That's nice to say, but you don't just say that, you have to achieve it, and that's the hard part.

Both of these point to critical internal systems that are set up extremely well. Someone or several people inside Slack know the importance of systems even at their small size, maybe even learned from Deming and TQM, and it's clearly greatly amplified their ability to take all of the user input, product feedback, and vision and distill it into something that's actually cohesive. This probably also applies to their UX process, product design process, and feedback cycle, as revealed by the article. All of this has to be driven by a management style that enables it, understands the organizational psychology behind accomplishing a quality product, and leadership that knows the whole is important. It doesn't happen often.

What you're seeing is the surface analysis of a reverence for systemic quality and the culture, systems, and management style needed to sustain it. It's very clear because of the results. It's like seeing just the light spectra of a star and being able to determine its size and age and chemical makeup; the unmistakeable signature of the inner core.

This would simply not be possible without the ongoing product process that they've set up, and the article is just the tip of an iceberg that lies mostly beneath the surface, large and cumbersome and meticulously designed. Read between the lines and think about why all these efforts have been successful. Take that deeper analysis and learn from it.

<comment><USER3> I don't know _anything_ about Slack's design so maybe you are correct and there is some really special sauce powering their success.

HOWEVER - it does not strike me as remarkable that they are able to quickly iterate on a product that was only 7-9 months old (at the time of the anecdote) with (apparently) a relatively small group of internal and external stakeholders to be creating friction. It would be more remarkable if they had already lost the ability to iterate in such a short period of time.

<comment><USER2> I find it's closer to the norm that a company doesn't begin the product design process correctly, and shifts to a period of quality-impacting chaotic whitewater where the product is considered 'sellable' and it becomes more of a marketing and sales game to make the company successful.

Slack, at least during its rise to fame, had not yet hired a sales or marketing team. I think they have remarkable product focus, and it's a testament to how unbalanced business thinking generally is in the spectrum. I think the status quo is a little too far past "the product won't sell itself," and Slack is a good example of a company balanced more toward the quality side of the equation. To me, that's the core reason for their success so far, and it's surprising that more companies haven't dawned on this way of operating (well, not surprising when you consider mainstream American business ideas).

It does remain to be seen if they can keep up the solid quality as they grow. It requires an orchestration that is very deliberate and well intentioned, and if they came upon their initial strategy by luck, it won't last.

<comment><USER4> Translation:

1\. The Slack team didn't need to generate revenue at all for a solid year so they could ignore commercial considerations that would harm product development.

2\. The Slack founders had the industry clout and interpersonal relationships to not just get beta users for their app, but to get the RIGHT beta users for their app, ones that would give valuable, relevant, on point feedback reflective of the concerns of a large valuable addressable audience.

<comment><USER5> This comment is so reductive, and the GP is so dismissive of Slack's accomplishment that it is actually making me angry. This is like all the kids in 2006 claiming they could build Basecamp in a weekend because it was a "simple" app.

What you're saying here is technically true, but these things are only 20% of the story. Most companies given these gifts (and let's face it #1 is pretty easy in today's fundraising environment) would not be able to create a product with the polish of Slack.

To paraphrase calinet6, it's not just the feedback, it's knowing what it means and using it to drive a cohesive UX vision. I've worked on some extremely talented teams, and I've created some great products, but let me tell you it's very very difficult to actually take a large amount of feedback and polish something so it works as well as Slack. It's difficult because if you pay attention to the wrong comments, or you come up with the wrong solution you end up off in the weeds with a product that can never regain its cohesion. Even if you have a strong visionary making all the calls, it becomes increasingly difficult for that one person to maintain the whole picture as the userbase and use cases grow. Even if you have all the right people and no poor decision makers, you still find things can get lost in the communication layers and you end up with a suboptimal product.

If you actually use Slack in anger with multiple teams and purposes and you pay attention to the UX, it is at a level of polish that is astounding. We've seen apps with this level of UX before, but they tend to me much simpler (eg. Instagram), there are also more complex apps with impressive aspects in their UX, but they reach anything approaching this level of cohesion (eg. Facebook). Slack is not just a story of good strategy and positioning, it's a story of phenomenal execution, and people who miss that are not going to take away the right lessons.

</comment></comment></comment></comment></comment><comment><USER6> This really, really reads like an advertisement. It's not a short article, but the little useful information in it is buried amongst a lot of self- congratulatory quotes.

Slack is just one of many team chat apps. Maybe the secret to their traction is that they can get so many fluffy articles written about them?

<comment><USER7> That was one of the tidbits buried in the article:

      The big lesson here: Don't underestimate the power of traditional media when you launch. It must be your primary concern, starting months beforehand and continuing for weeks afterward. Pull the strings you have. Work closely with your PR firm to find your hook. It can be personalities on your team, impressive customers you already have in the bag, prestigious investors, etc. But don't leave it to two weeks beforehand and throw something together.

Sounds like they don't spend that much money on advertising, but a bunch on PR and social media. And later they also point out how they use customer service as another marketing opportunity.

<comment><USER2> An extremely unified, well-designed, and likable marketing story and brand really helps them.

Again, I think the holistic quality at play throughout the organization is being greatly underplayed.

</comment></comment></comment><comment><USER8> I think everyone underestimates how much the slack team's game-dev experience with Glitch (even a failed one) would have impacted Slack's success.

There are tons of things that makes using Slack "an experience" \- tiny bits of things that are not really "necessary" but just add that little bit of polish. This is gamification at it's best - when it stops being a excuse to add some points and silly badges and developers use real, practical things they generally use to build good games and apply it to non-game products.

The end result is an experience, as opposed to just "features". Hipchat doesn't get it. Neither does Hall or any other startup in this space.

Slack's only real threat, IMHO, is Whatsapp. Whatsapp has a brilliant mobile experience which works offline too - Slack is weak there and I don't know why they can't have a mobile app that works properly offline. With Whatsapp coming to desktop (although via a mobile go-through), whatsapp is suddenly a bit more usable for a team.

Now if they introduce a whatsapp API which works without having a phone number, it can rapidly make it an amazing alternative to Slack. Don't know if they will be going behind the B2B market though.

<comment><USER9> Slack is an "experience"? You're outta your mind. It's a freaking chat app.

<comment><USER8> Slack is definitely an experience, if you compare it with something like hipchat.

A few of the small things I've noticed -

\- Sounds are just beautiful. The pings and the clings are selected very thoughtfully. Sound is the invisible thing that generally makes a good game, great.

\- The slack loading message - there are a bunch of different welcome messages that just bring a smile to your face. And they cycle through it, so you don't see the same message every time.

\- The loading animation is just beautiful. I saw an update where all they did was improve the resolution for this icon on retina display

\- The channels thing is awesome - it's like the IRCs. They even went ahead and added the "#" even though it's unnecessary.

\- The details - the colors chosen, the fonts, even the minimalistic design in general - it's just done very, very nicely.

\- The search is just awesome.

You might go "meh" on this, but these are things that the competitors are ignoring. These are things that made me fall in love with Slack when we started using it an year back. Yes administration is simple, yes they have amazing documentation. Yes, they have segmented their users well. But I think the core product is just beautiful, and that gives them a huge leg-up over their competitors even without the other places they are doing well.

</comment></comment></comment><comment><USER10> I like Slack, because I can rely on non-technical people to use it, but if I'm working with people who actually know what they're doing, I don't see the advantage over IRC.

For free, it's a great service. For $5/mo it's a great service...but for $5/mo/user, it's pretty pricey!

If you don't pay, it doesn't make a good replacement for email, because you don't get infinite scrollback.

<comment><USER11> Mm... If $5/month/user makes any difference to your bottom line in comparison to salaries and the benefits you are getting from the service, I suspect that you have a problem -- and one that has nothing to do with Slack. (As in, you've a serious sales or management problem in your organization, or you're not a qualified lead, e.g. you're a student or a non-profit.)

<comment><USER12> It's this attitude that enables businesses to accumulate an unwieldy number of services!

My company subscribes to Google Apps, HipChat, Slack, Yammer, Zoom, … The costs accumulate.

<comment><USER13> And all of them save employee time which is your businesses biggest asset.

<comment><USER12> Unless everyone is using a separate application.

</comment></comment></comment></comment></comment><comment><USER14> I've never understood why slack is so famous and got so much traction when other alternatives existed way before it, like hipchat

<comment><USER15> In my opinion the big difference was a usable free tier, and the recent move to easily support logging in to multiple teams at once. Also general quality.

<comment><USER16> The big thing is that they let you use it for free, get hooked, and then when your team is all in on using it, paying the $60/user per year is worth the upgrade. They made their base product good enough that you don't need the full version... until you do.

There were interviews from last year where he talked about slowly converting teams from free to paid.

I use slack for a side project with 15 or so people involved and while we're using the free version, it is on the list of things to pay for once we have some sort of revenue.

</comment></comment></comment><comment><USER17> The team is great and clearly shows in the product they have built. However, at current pricing I would rate them expensive. Other enterprise offerings which go by per user pricing, like Google Apps, are much affordable for instance.

I hope with time their economics work out and they could offer more affordable plans.

<comment><USER18> The thing is, as far as firms go, $5/employee is nothing compared to how much an actual employee costs. It might as well be free if it makes communication better.

<comment><USER17> There are people for whom even $100/mo/user would not be a big deal but then there are bootstrapped businesses in 3rd world countries with lots of non tech part time employees (I want all of them on same communication medium). For them its not an easy decision.

This is not to claim Slack is pricing it utterly wrong. Of course they have their target audience and should do things best for their business.

</comment></comment></comment><comment><USER19> Everytime I see something about Slack i immediately think of SlackWare.

<comment><USER20> Especially since I always called Slackware 'Slack'

<comment> vezzy-fnord It's not just you, it's pretty much the standard semi-official shorthand for it.

</comment></comment></comment><comment><USER21> So, you should start out by having your well-connected friends in the SF tech scene use your product and give you lots of free feedback.

Sounds good to me!

</comment><comment><USER22> > As it turns out, Slack founder Stewart Butterfield isn't so sure himself. > Speaking on stage at the Digital Life Design conference in Munich, Germany, > Butterfield said he didn't know why Slack had taken off while his last two > startups had fizzled.

"I get in trouble with my PR team for saying this," he said. "But I have no f___ idea."

That being said, they respond to user feedback. For example, the mute a channel feature is very well designed. It took them a while to implement. It doesn't hide the channel in your list, it greys it out.

</comment><comment><USER23> Demonstrating the broad appeal of Slack - my dad's medical practice has started using it. The current software ecosystem for collaboration tools in medicine is horribly bad and this can actually have tragic consequences. Slack would be wise to take a closer look at this market and see how they can optimize for the needs and requirements of physicians and nurses. Healthcare spending will only increase in the years to come and if they can demonstrate positive patient outcomes and get a few hospital CTOs on board this vertical could explode for them.

<comment><USER24> All I can say is be weary of HIPAA compliance. It's a pretty big concern because failure to comply can be very costly; I've heard from many in the health/medical field that they can't touch these kinds of tools until they get comfortable with HIPAA. It's not on the roadmap for Slack right now: [https://twitter.com/slackhq/status/535281662196977664](https://twitter.com/slackhq/status/535281662196977664)

<comment><USER23> Using Slack in a medical context doesn't automatically mean that HIPAA is being violated, but you're right, without compliance, its usage will be limited when discussing individual patients in unobfuscated detail. I hope Slack makes this a priority at some point as I truly believe that this market could be gigantic for them, but I understand that they might be better off targeting other verticals in the short term that don't have this kind of roadblock

</comment></comment></comment><comment><USER25> This article talks a lot about switching costs without naming it as such. But they're pretty key for getting B2B customers to try something new. You can definitely try to maximize them (if you're the incumbent that doesn't want to be displaced) or minimize them, as in Slack's case, with information. We just did a write-up on this topic: [http://www.emphatic.co/blog/switching-costs- marketing/](http://www.emphatic.co/blog/switching-costs-marketing/)

</comment><comment><USER26> So as a user of an engineer-oriented product, what kind of testing and validation process would _you_ like to see? If the product makes your life as an engineer significantly easier (as Slack does), would you want to participate in a beta, even with warts? If not, what kind of testing would you want the product to go through?

I think this could be instructive for a lot of startups in the tools space. Clearly, Slack did something right.

<comment><USER2> Even before a beta, work with your prospective customers directly and closely. Determine what they really need and how you should really solve their problems before even presenting a product. If you don't do that before building a product, chances are you've built the wrong one, and a beta will only give you one or two degrees of course corrective ability from there.

<comment><USER26> Thanks. I feel really good about the "solve their problem" part. The problem I'm trying to solve is engineers working on large, complex software systems who can't fix things because they don't have access to the information needed to fix it - it might be locked away in silos, or in opaque enterprise tools, or simply lost (you applied that patch - do you know what it looked like before you applied it?). I've worked in that field for 20+ years, and talked to literally hundreds of engineers about it. When I start hearing phrases like "holy grail", I'm pretty sure I'm solving a real problem. :)

The trick, though, is the subtleties. The transition from "this is a great idea" to "eating my own dogfood" taught me tremendous things about the product. The transition to beta will teach me a lot more. What I want to do is make sure the data is as useful, well-structured, and accessible as possible. I don't think I can do that without real-world testing, but what testing approach is best?

This is where Slack excels. Lots of companies make IM clients. Why is Slack so far-and-away better? What did they do so right?

</comment></comment></comment><comment><USER27> Step 1: Be Stewart Butterfield.

<comment><USER28> Being Stewart Butterfield didn't do much when he lost a bunch of money making an online game.

<comment><USER12> Step 2: Make a consumer web app.

<comment><USER29> I'll modify that slightly,

Step 2: Take your internal messaging app and make it a commercial product.

<comment><USER30> Isnt there a Step 1.5 - Make your own internal messaging app then?

</comment></comment></comment></comment></comment><comment><USER31> I really hate these "Tweet your selection" widget things.

</comment><comment><USER32> I think Slack is kinda neat but stopped using it. Do any non-tech startups use it? I get the feeling that its usage outside SV is verrrry small.

</comment><comment><USER33> Sounds like they just had a solid product management plan, even if it might have been informal.

</comment><comment><USER34> I though it was $1B is sales. Instead it is just valuation.

<comment><USER35> You did??

<comment><USER36> I don't see why that's such a surprise. I thought the same for a split-second.

</comment></comment></comment><comment><USER37> pretty much any failed startup used the same launch strategy</comment>


Help reddit celebrate 1 year of opensource by promoting your favorite project - <AUTHOR> http://blog.reddit.com/2009/06/help-reddit-celebrate-1-year-of-open.html

<comment><AUTHOR> Someone is going to nominate Arc, right?</comment>


PurifyCSS – Remove unused CSS - <AUTHOR> https://github.com/purifycss/purifycss <comment><USER2> I've been looking into this kind of tool for a while, but none of them are quite right for my purpose. I don't want a tool that spits out just-the-CSS- that-is-used, I want a tool that shows me blocks of CSS that it thinks are NOT used - ideally after I've loaded a number of different pages in a browser.

My use-case is for analyzing a large, existing website that has many years of accumulating CSS, and getting a feel for which blocks of code can be safely eliminated.

I'm pretty sure what I'm after needs a full-blown DOM to work effectively - either with something like PhantomJS or even running as a Chrome Extension. So far I haven't seen anything that fits the bill.

<comment><USER3> I honestly think this needs to be a part of Chrome Dev Tools's profiler. Already it's able to record sessions that persist across page loads, and tracks what CSS selectors are applied and which properties are overridden. I don't think it's much of a stretch to add a feature like this.

<comment><USER4> +1 for something along these lines to be available in all vendor's dev tools!

<comment><USER5> Agreed! We need something that collects data from multiple pages as you browse through and use your site. At the end it gives you a table of all your classes that didn't match anything (with line number references to your css file).

</comment></comment></comment></comment><comment><USER6> I created and maintain Helium. [https://github.com/geuis/helium- css](https://github.com/geuis/helium-css)

The problem with the PurifyCSS approach, like so many before it, is that you cannot really do this accurately from the server. It has to be done in the browser.

Helium is a dev tool. It takes a list of sample urls from the developer because its presumed the engineer will be able to make the best choice as to pages that represent all the aspects of their site.

It will work in any web page regardless of framework, because ultimately its all just web pages.

Helium will find the actual style sheets loaded into each page, then at the end of the scan give you an accurate and realistic report of the css selectors that were not found anywhere in your site.

There are some minor limitations, such as the inability to test for user- interactions with pseudo selectors like :active, :focus, :hover, etc.

<comment><USER7> As a designer that would love this tool for the speed and cleanliness factor it would give, i have a few other Qs:

1\. Does it spit out a css file or multiple css file I can use immediately? Can i actually amend a local document with it, or do I have to copy paste?

2\. Does it give any critique on poor selector methods? Definitely have a few foolish ways of doing things that could be improved with a little bit of "hey...stop that" feedback, in my work

3\. ??? PROFIIT

4\. Can it give me a few stats on the css to benchmark it? You're already showing me the unused ccs selectors, can you present other data that you could present to your boss and say hey...look at this, this is why it's worth doing this stuff

5\. Known browser issues highlighted. "Hey! In IE8...that div ACTUALLY does this". Also, heres how to fix it. Insta–contextual documentation. As I say that I realise I'm asking for Clippy back in a way so I shall bow out. Responsive design? worth thinking about...anyway!

Really interesting project! I'm going it use it this weekend and see how it goes :)

<comment><USER6> It doesn't modify your css files. That's your job. It gives you a report of unused selectors. It can't test pseudo selectors requiring human interaction.

</comment></comment></comment><comment><USER8> Like most CSS tooling, this is a treatment for a symptom of an underlying disease: the inherently global nature of CSS[1].

Rather than "blob" all your CSS together, and _then_ "de-blob" it, why not build your CSS dynamically based on what components your app is using?

[1] I strongly encourage you to watch this talk: [https://vimeo.com/116209150](https://vimeo.com/116209150)

<comment><USER9> Because it slows down your app by a relevant amount.

Edit: I see we're referring to inline styles instead of requirecss. In that case, it's because code reusability becomes a pita and you bloat your JS.

<comment><USER10> There's another way besides inlining and requirejs. In cases where you're doing server-side programming anyway, you can just have the server inject view-specific <link> elements pointing to individual CSS files as needed - augmenting the site's core CSS file. The downside is more requests to fetch those files, but after the first time you can take advantage of the browser's cache. As long as you keep the number of extra CSS files reasonable, this method costs almost nothing.

A variant of this is where you compile one CSS file from many view-specific ones beforehand. The advantage is it'll speed up things on the client side and the programming overhead is relatively small if you're using something to generate CSS anyway.

</comment></comment></comment><comment><USER11> This looks awesome. If it did a second run to look up where the CSS comes from in my SASS and remove the SASS instead, that would be magical. :D

<comment><USER12> Couldn't you just add a Grunt task to purify the compiled SASS?

<comment><USER13> This would miss the point. Sure, it would still lighten the css file downloaded by the client, but it would do nothing to clean up the source file developers work with and thus lighten their cognitive burden, which imo is more important.

</comment></comment></comment><comment><USER14> Nice. But from the description, it apparently doesn't work if you construct class names by string manipulation (like "item_" \+ (selected ? "selected" : "")). Maybe you shouldn't do that anyway, though.

<comment> white-flame Even worse, I've sometimes done things like

      $(...).addClass("bg" + getSomeClassIdentifier(obj))

Linking some string hanging off some runtime object to its CSS class usage quickly runs into halting problem issues.

There are certainly some arguments to keeping class names as opaque magic strings, but given certain levels of dynamic complexity and the lack of tools like CSS class inheritance, naming policy is sometimes far cleaner and more manageable.

Also, there is a minor concern about false positives. If you have a class called "name" or something generic like that, the odds of that string appearing in non-CSS usage your source code is fairly high.

</comment></comment><comment><USER15> I _think_ it shouldn't be too much code. For my rails project, I wrote a simple shell script[1] to get all unused css classes and remove it my hand in final step, to make sure i will not remove css classes that actually used (e.g pre-define and use in future, overriding of third party css class)

The script basically does:

1\. Use REGEX match all css classes, `cat` into one place

2\. Read the class line by line and search in html,js files to see if this css is used (even support #addClass from js)

2.1 it also supports several class adding styles e.g. class="abc", class: "abc", :class=> 'abc' or even "xxx" class in this: class="abc xxx ijk"

2.2 People even do this in js: $modal.append($('

')); and the REGEX can also detect this lol.

[1] [https://gist.github.com/50kudos/3028fac585eda85aea9a](https://gist.github.com/50kudos/3028fac585eda85aea9a)

You can adapt my REGEX, and custom your directory where those css files are in.

Simply copy the code and save into your filename.sh, and can run safely because my script don't write any file of your project.

</comment><comment><USER16> This setup is ideal IMO. Keep your existing files, like bootstrap, intact in case you ever DO use them but integrate this into your deploy process to do compression and minification prior to getting out to your server.

Workflow wise, this is a huge win.

</comment><comment><USER17> Apparently it also has a gulp plugin: [https://github.com/purifycss/gulp- purifycss](https://github.com/purifycss/gulp-purifycss)

(just in case you were also wondering) =)

</comment><comment><USER18> This could be really useful when I do a major refactor later this year. Thanks.

<comment><USER19> Kind of funny. Although maybe true.

</comment></comment><comment><USER20> This is nice. Just in case, you might also like to look at the likes of [https://github.com/giakki/uncss](https://github.com/giakki/uncss)

<comment><AUTHOR> Yes! that is a great library. Unfortunately, that library does not automatically detect the classes used in JS. So we thought we could give it a try to make one that would detect classes used in JS by default

</comment></comment><comment><USER21> How do you do this for JavaScript? In Java I used a mixture of static analysis[1] and code coverage[2] with great success. For JavaScript there seem to be many (dead) coverage tools but nothing comparable to UCDetector.

[1] [http://www.ucdetector.org/](http://www.ucdetector.org/)

[2] [http://www.eclemma.org/jacoco/trunk/doc/](http://www.eclemma.org/jacoco/trunk/doc/)

</comment><comment><USER22> I use a similar tool on my personal site (www.peterbe.com) It also inlines all CSS but only does so with the selectors that are actually ever used.

Go to [http://www.peterbe.com/plog/mincss](http://www.peterbe.com/plog/mincss) and click to view source. 120Kb of bootstrap excess baby!

</comment><comment><USER23> What is the actual performance advantage gained in contrast to a simple minifier?

Given today's CPU speeds, I think the only thing you can save with this tool is bandwidth on mobile and even with this, the effort is not always worth the resulting speed gains as mobile networks get faster and faster.

</comment><comment><USER24> The dynamic class allocation here looks really robust and amazing. Huge concern in similar libraries.

</comment><comment><USER25> >Able to also detect dynamically-loaded CSS classes in your javascript.

Awesome! I worked with a tool like this that did not have dynamically loaded classes in mind.

For people not sure on how to use this, I personally use tools like these when working with a CSS framework.

</comment><comment><USER26> An alternative to this is symdiff [http://symdiff.github.io/](http://symdiff.github.io/) (Disclaimer: I'm the author).

The auto-remove part you would have to code yourself though.

</comment><comment><USER27> Wrote a quick tutorial [http://grunt-tasks.com/grunt-purifycss/](http://grunt- tasks.com/grunt-purifycss/) on how to use it with grunt and grunt-usemin

</comment><comment><USER28> Cool. I will try later. I'm using UnCSS[0] with Gulp. What is the different with UnCSS?

[0] [https://github.com/giakki/uncss](https://github.com/giakki/uncss)

</comment><comment><USER29> Mobile developers dream tool!

</comment><comment><USER30> Would this work with [https://github.com/jaysonsantos/jinja-assets- compressor](https://github.com/jaysonsantos/jinja-assets-compressor)?

</comment><comment><USER31> This is awesome and makes so much sense, great work team.

</comment><comment><USER32> This is a very handy tool. I have a question, would it be able to take wildcard and recursive argument for filepath of HTML, JS? Thanks.

</comment><comment><USER33> AWESOME!! this is just what i was looking for!!

</comment><comment><USER34> When it says it works on single-page apps, does that mean ONLY single page apps?

<comment><AUTHOR> Thanks for giving a heads up. It works with all apps. We just put the emphasis on SPAs. Updated readme for this

</comment></comment><comment><USER35> This is amazing.

</comment><comment><USER36> Cool. Nice work!

</comment><comment><USER37> super awesome.

</comment><comment><USER38> So basically it's a tool to remove the mess that we've created? Maybe we shouldn't have done so in the first place.

<comment><USER39> Do you also scorn at the existence of debugging tools because we should've written the code correctly the first time?</comment></comment>


You Shouldn't Have to Buy a Book to Understand 'Star Wars - <AUTHOR> https://screencrush.com/star-wars-rise-of-skywalker-visual-dictionary/ <comment><USER2> The Disney reboot retconned all the lore established by the decades of games, comics, and books of the extended universe. To be fair, the extended universe was a mess and had plotholes galore. On the other hand it makes it hard to empathize with _the Mandalorian_ when your understanding of the mandalorians comes from _Knights of the Old Republic_ where the Mandalorians are essentially space-mongols that ravaged much of the Galaxy in wars of abject destruction.

</comment><comment><USER3> There was no possible way of closing out this trilogy without some very entitled fans making a stink.

Meanwhile most moviegoers are content to enjoy a highly entertaining popcorn film and are appreciative that a big company is willing to risk hundreds of millions of dollars to tell stories about space wizards.</comment>


Ask HN: Do You Still Read Comics (And Do They Inspire You)? - <AUTHOR>

How many of you regulars here derive pleasure and draw inspiration from reading comic books?
Do you eagerly await the latest X-Men to be put on the shelf of your regular newsstand on your way to work, or have it on order at your newsagent? Do you subscribe to your favourite titles and have them delivered to your home?
Or have you set aside the monthly issues, concentrating on collected stories and omnibuses, hanging around in comic shops on your off days haggling over prices and conditions of individual books with fellow comic traders?
Do you follow any particular title, such as Batman, The X-Men, Thor, The Avengers - or are you a Brit and a Squaxx Dek Thargo, a hardcore 2000AD addict until your dying day?
One of the oldest regular comic readers I ever heard of was 83 when he died. Japanese businessmen read their manga religiously on the commute to work. So nobody is really too old to read comics.
Taken in that light, how about you? <comment><USER2> I still read Japanese graphic novels or Mangas. I hope that counts.

Growing up in Vietnam, my parents generally forbid us kids from reading comics because they're not... smart materials. I don't know, but I tend to disagree with that.

I find graphic novels/comics fascinating because it seems like the writers can get their messages across with just an image an a short bubble/line of text. On that front, I think web creator should learn a thing or two from comics writer :)

I love the older cartoons. I think waking up Saturday mornings or rush home from school to watch cartoons was so good back then.

That's why I archive a lot of my favorite cartoon series (Arthur, Life with Louie, Fat Albert and the Cosby Kids, etc.) for my future children :)

My hope and inspiration to make the web a more positive experience in my daily work definitely has something to do with the simplest stories which come from some cartoons I saw as a kid.

<comment><USER2> Just saw Thor last night. That was a very entertaining movie!</comment></comment>


Sun to cut up to 6,000 workers, 18 pct of staff  - <AUTHOR> http://news.wired.com/dynamic/stories/S/SUN_MICROSYSTEMS_LAYOFFS?SITE=WIRE&SECTION=HOME&TEMPLATE=DEFAULT&CTIME=2008-11-14-10-01-16

<comment><USER2> Dupe (from a different source): <http://news.ycombinator.com/item?id=364245>

</comment><comment><USER3> And who buys Sun boxes still, exactly? I mean I know there's a market, but isn't Linux (on Intel) eating their lunch?

<comment><USER4> Sun makes great x86 kit. And Solx86 is a great OS.</comment></comment>


Ghosting: Julian Assange (2014) - <AUTHOR> http://www.lrb.co.uk/v36/n05/andrew-ohagan/ghosting

<comment><USER2> > He said that Tim Geithner, the US secretary of the Treasury, had been asked > to look into ways to hinder companies that would profit from subversive > organisations.

Media freedom is being eroded small steps at the time by those in power. Big changes never happen overnight in order to keep the uninformed public under the illusion that things are all good. A lot will have to get worse before the public wakes up. It'll be too late then.

</comment><comment><USER3> This piece is a disturbing study of some of Assange's mental pathologies. As a sympathetic party and partially informed observer, I greatly enjoyed reading O'Hagan's writing about Assange's outlook and concerns. I laughed; I cringed; I would read it again.</comment>


Show HN: HN Proxy that Transforms Upvote Buttons into Links for TUIs (like lynx) - <AUTHOR> https://hnproxy.glitch.me <comment><AUTHOR> I couldn't figure out how to upvote posts when browsing HN through the lynx browser. So this pass-through proxy replaces the caret with an "[upvote]" text that is clickable in a lynx browser. User data is not persisted in the server.</comment>


Not your grandad's .NET: Pipes, Part 1 - <AUTHOR> https://cetus.io/tim/Part-1-Not-your-grandads-dotnet/ <comment><USER2> All this streams stuff is still a bit pie-in-the-sky; it's definitely nice that someone is finally pursuing reducing allocations (big enemy of GC / performance!). Now's the time to get in on the API design stage!

You can catch some things like this on Github's trending C# page, where 5 stars in one day is often enough to make the list. It's unfortunate some of the main .NET core repos wind up soaking up so many spots there; very few non- MS employees are paying that much attention to them on a day-to-day basis.

[https://github.com/trending/csharp](https://github.com/trending/csharp)

\--

Part 2: A faster lower allocation stream stack wielded for ALPN/TLS and… HTTP2

[https://cetus.io/tim/Part-2-pipelines/](https://cetus.io/tim/Part-2-pipelines/)

Part 3: The journey continues to Secure Pipelines, via OpenSsl

[https://cetus.io/tim/Part-3-Pipelines- OpenSsl/](https://cetus.io/tim/Part-3-Pipelines-OpenSsl/)

<comment><USER3> > it's definitely nice that someone is finally pursuing reducing allocations > (big enemy of GC / performance!). Now's the time to get in on the API design > stage!

As an aside, I'd love to be able to stack allocate in .NET. I realize there are huge complications with doing this, but there are just so many short lived objects that I'd love to control the lifetime of.

Of course part of the problem is that in all the .NET libraries everyone news objects willy nilly, so it would likely require making a "stack alloc clean" library from scratch, so there wouldn't be much immediate benefit.

<comment><USER4> That's crazy! I always thought objects were stack allocated by default unless escape analysis showed them to escape the function return. Goes to show how little I know about .Net memory allocation..

Could you elaborate on what the problems would be with storing on the stack? I'm oblivious to what the problem would be. Stack relocation?

<comment><USER5> no escape analysis in .NET, yet, it is coming. set

<comment><USER6> I wouldn't hold out too much hope. Java always intended for escape analysis to remove the need for value types. Now they're adding value types.

</comment></comment></comment></comment></comment><comment><USER7> Marc Gravell had a good post on Channels/Pipelines too:

[http://blog.marcgravell.com/2016/09/channelling-my-inner- gee...](http://blog.marcgravell.com/2016/09/channelling-my-inner-geek.html)

This is a key part of the .NET roadmap to speed up the basic data pipeline workload of most apps:

[https://github.com/dotnet/corefxlab/blob/master/docs/roadmap...](https://github.com/dotnet/corefxlab/blob/master/docs/roadmap.md)

[https://github.com/dotnet/corefxlab/blob/master/src/System.T...](https://github.com/dotnet/corefxlab/blob/master/src/System.Threading.Tasks.Channels/README.md)

</comment><comment><USER8> Cool that you spoke to these guys in chat. Where do they hang out? I've only really seen interaction in GitHub comments, which doesn't really suit the sort of water cooler conversations you describe (and you really need in a large project).

<comment><USER9> [http://tattoocoder.com/aspnet-slack-sign-up/](http://tattoocoder.com/aspnet- slack-sign-up/) is one Slack which has been suggested to me which is frequented by the ".NET crew". Booyah.

</comment></comment><comment><USER10> .NET v1.0 was released in Feb 2002. I'm not sure 15 years is enough time to attribute something to your granddad.

If it was javascript, then it would "not your forefather's".

</comment><comment><USER11> Was hoping for an article on some previously undiscovered Perl-style pipe syntax in .NET. Severely disappointed. This is a relatively contentless post.</comment>


How language gives your brain a break - <AUTHOR> http://newsoffice.mit.edu/2015/how-language-gives-your-brain-break-0803

<comment><USER2> The concept of dependency distance is actually equally useful in programming languages. For example, instead of writing

        if condition:
          #...a lot of code...
          value = process()
          return value
        else:
          #...return error information (e.g. in a web app)
          return error_information

I always try to write something like this instead

        if not condition:
          return error_information

        #...a lot of code...
        value = process()
        return value

This make reading and understanding the code much easier since things that belong together are close together. This seems trivial but there is a lot of code that is written like the first block and therefore harder to understand. Sometimes, small things can make a large difference.

That said, I am probably a bit over-sensitive to this kind of problem as a German, since we also have the habit of holding back the vital information in a sentence until the very last word.

<comment><USER3> This fits quite well in the large advice (expressed e.g. by Martin Fowler) that a function should not contain deeply nested if/then/else constructs, but a flat series of "if" statements each finishing with a "return" statement. And if this is impossible, break the function into smaller functions such that each of them is composed like that.

This advice is especially helpful when coding complex conditionals in business logic. (but small enough so you don't need/want a generic rules engine and rules DSL for that.)

</comment></comment><comment><USER4> Dependency distance is why it is good to have programming language constructs like

      for (init; test; increment)
        body-statement

and their ilk. Though the evaluation is out of order, (test, body-statement then increment), certain related things are kept together.

It also explains why infix notations (and 2D math notation) are effective: they physically clump semantically near things.

Postfix notations with no parentheses are absolutely the worst; you don't know what goes with what at a glance:

      1 2 + 3 4 + 5 6 + * 7 8 / - *

If my eyes land on, say, the inner * , it's not immediately clear what the left operand is.

Prefix with parenthesization lets us fold and indent the darn thing for a 2D visualization:

      (* (+ 1 2) (- (* (+ 3 4) (+ 5 6)) (/ 7 8)))
                     ^__ orig. distance__^

The (- ...) expression jumps down and gets indented. Thus it is visually lined up with its sibling, and _near_ the connecting operator:

      (* (+ 1 2)
         (- (* (+ 3 4) (+ 5 6)) (/ 7 8)))

We recursively apply this:

      (* (+ 1 2)
         (- (* (+ 3 4)
               (+ 5 6))
            (/ 7 8)))

      (* (+ 1 2)
         (- (* <---
                ... reduced distance, and visual alignment
            (/ <---

<comment><USER5> Prefix (with fixed number of arguments) need no parentheses

      * + 1 2
        - * + 3 4
            + 5 6
          / 7 8

Postfix can be indented similarly

          1 2 +
      3 4 +
      5 6 + *
        7 8 / - *

Or parentheses less infix

        1+2
      *     3+4
          * 5+6
        - 7/8

</comment></comment><comment><USER6> One thing I find interesting about the example in the article:

(1) John threw out the old trash sitting in the kitchen. (2) John threw the old trash sitting in the kitchen out.

Yes, (1) is easier to parse (and I prefer it) but (2) is less ambiguous: (1) could equally well mean that John threw the trash out _while he_ was sitting in the kitchen.

I also find the title of the post a little confusing. I thought the article would be about how learning languages helps your brain recover.

<comment><USER7> Wouldn't there be a comma if he was sitting in the kitchen? Isn't there an old adage as well, "don't end a sentence with a preposition"?

edit: Apparently that's an old wives tale, the preposition one.

<comment><USER8> That's the kind of grammar prescription up with which we will not put.

<comment><USER9> While I agree that the rule "Thou shall not end a sentence with a preposition." seems to be a borrowed Latinate prescription and is at variance with modern English usage, _inhale, deep breath_ , I think your example of using the phrasal verb (put up with), though common, to demonstrate your point is not a good example. :)

If we consider put-up-with as a verb that just so happens to be a compound verb-postposition-postposition _unit_ then the sentence "That's the kind of grammar prescription which we will not put up with" actually ends in a verb. If you see what I mean. Does this make sense? I'm just punting this intuitively.

I'm trying to think of an actual case where a bare adpositional word terminates a sentence... which is not in question form... and I can only think poetic uses... and after having Googled a bit... verb+prep or phrasal verb or question are the only examples I've _come across_. :)

<comment><USER8>
      s/which/that/

Sorry, but that drives me crazy. I think your "verb+prep" gives the game away, as that is very common idiom. What about this: "That's the store we got the candy from." Perhaps a sentence using "where" would be more stylish, but you can't very well throw out a prescription of grammar just to immediately replace it with one of style.

<comment><USER9> Do you mean where I said, "which is not in question form..." I should've said, "that is not in question form..." My inner ear is not ringing any alarm bells there. Care to explain?

I like your example. Never mind about style. I can riff on that: "There's the table we put the apple on.", "Here's the bag I keep my laptop in." And so on. Nice!

<comment><USER8> I would have sworn that your "verb that just so happens" was once something like "verb which just so happens". Hmmm.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> _> That means language users have a global preference for more locally grouped dependent words, whenever possible._

YMMV, but for German (I'm not a native speaker, although fluent) you can't figure out the meaning of the sentence until the very end.

The authors' even acknowledge this:

 _> German, which has some notoriously indirect sentence constructions, is far less optimized, according to the analysis.

>And the researchers also discovered that "head-final" languages such as Japanese, Korean, and Turkish, where the head word comes last, show less length minimization than is typical._

German, Japanese, Turkish seem like quite a big chunk of languages (population-wise), so I wonder if initial statements are not too English- specific.

<comment><USER11> _Gödel, Escher, Bach_ has a great paragraph on this in the context of recursive structures and processes (i.e. things that can be modeled with stacks, i.e. push and pop operations):

        Recursion in Language  (p. 138):

        Our mental stacking power is perhaps slightly stronger in
        language.  The grammatical structure of all languages involves
        setting up quite elaborate push-down stacks, though, to be sure,
        the difficulty of understanding a sentence increases sharply with
        the number of pushes onto the stack.  The proverbial German
        phenomenon of the "verb-at-the-end", about which Droll tales of
        absentminded professors who would begin a sentence, ramble on for
        an entire lecture, and then finish up by rattling off a string of
        verbs by which their audience, for whom the stack had long since
        lost its coherence, would be totally nonplussed, are told, is an
        excellent example of linguistic pushing and popping.  The
        confusion among the audience out-of-order popping from the stack
        onto which the professor's verbs been pushed, is amusing to
        imagine, could engender.  But in normal ken German, such deep
        stacks almost never occur-in fact, native speaker of German often
        unconsciously violate certain conventions which force verb to go
        to the end, in order to avoid the mental effort of keeping track
        of the stack.  Every language has constructions which involve
        stacks, though usually of a less spectacular nature than German.
        But there are always of rephrasing sentences so that the depth of
        stacking is minimal.

Here is an example of such a (grammatical) beast:

        Der Mechaniker,
            auf den wir wegen dem Unfall,
                den wir,
                    bevor wir die Stadt,
                        die im Norden liegt,
                    erreichen konnten,
                hatten,
            gewartet haben,
        ist endlich angekommen.

This can't really be translated to English:

        The mechanist,
            for whom because of the accident,
                which,
                    before the city,
                        which lies in the North,
                    we could reach,
                we had,
            we have waited for,
        has finally arrived.

<comment><USER12> The mechanic the accident affected is well known in the city he was late to. The people the city the mechanic the accident affected was late to contains sing songs about it, in fact. The tourist guide calls them the songs the people the city the mechanic the accident affected was late to contains sing.

The buildings the money the tourists the songs the people the city the mechanic the accident affected was late to contains sing attracts spend paid for are also a big draw.

</comment></comment></comment><comment><USER13> The way the study is presented makes the reasoning sound somewhat circular: Language A is optimal because the dependencies are short. The dependencies are short because that's optimal. Not sure what we learn from that. I also find statements like "language A is more optimized than language B" questionable because (i) it's not clear how to measure optimality and (ii) there are no good reasons to assume that some languages evolve to be flawed, the pressure to perform well is just too high. Anyway, I suppose that these are just problems of the dumbed down press release. Looking forward to see the actual paper.

<comment><USER14> I think the criterion for optimization came about from this line... "If there is a large amount of time between one word and another related word, that means you have to hold one of those words in memory, and that can be hard to do." They're basically saying you can pop things off your mental stack more readily with smaller DLM languages.

<comment><USER13> Just had a look at the paper. They indeed assume that long dependencies are hard and that languages therefore tend to optimize for short dependencies. They also argue that some languages (like German) may have longer dependencies because other aspects of their grammar make it easier to process those dependencies than would be the case in short-dependency languages like English. This suggests that languages that are more optimized for dependency length may be less optimized with respect to some other aspect of processing. Languages may thus make different tradeoffs with respect to the various sources of processing difficulty. This means that German may have seemed hard to Mark Twain not because it is intrinsically harder but simply because it makes different tradeoffs than English.

</comment></comment></comment><comment><USER13> Link to the (paywalled) paper: [http://www.pnas.org/content/early/2015/07/28/1502134112.abst...](http://www.pnas.org/content/early/2015/07/28/1502134112.abstract?sid=39bcf418-68c6-474c-a21a-a6ceec737679)

Abstract: Explaining the variation between human languages and the constraints on that variation is a core goal of linguistics. In the last 20 y, it has been claimed that many striking universals of cross-linguistic variation follow from a hypothetical principle that dependency length—the distance between syntactically related words in a sentence—is minimized. Various models of human sentence production and comprehension predict that long dependencies are difficult or inefficient to process; minimizing dependency length thus enables effective communication without incurring processing difficulty. However, despite widespread application of this idea in theoretical, empirical, and practical work, there is not yet large-scale evidence that dependency length is actually minimized in real utterances across many languages; previous work has focused either on a small number of languages or on limited kinds of data about each language. Here, using parsed corpora of 37 diverse languages, we show that overall dependency lengths for all languages are shorter than conservative random baselines. The results strongly suggest that dependency length minimization is a universal quantitative property of human languages and support explanations of linguistic variation in terms of general properties of human information processing.

</comment><comment><USER15> Effort carries meaning. It shifts focus around and introduces exquisite nuances or even a sub-text (i.e. what if John has mixed feelings about his current girlfriend?) It boosts thinking. It works visually as well with, for example, what R. Barthes called "punctum."</comment>


Show HN: You don't need to travel to Jerusalem anymore. Submit your Note online - <AUTHOR> https://notes.online-kotel.com/ <comment> core-questions So are you printing them out, and sticking them in the wall?

<comment><AUTHOR> Well, the idea is that this is online Kotel - Wall, you do not need physical object to notify HIM.</comment></comment>


Detecting Living Eyeballs During Retinal Scan - <AUTHOR> http://spectrum.ieee.org/the-human-os/biomedical/imaging/biometric-researcher-asks-is-that-eyeball-alive-or-dead <comment><USER2> What about abuse of the person bearing the eyeball while still attached and living. Have a second camera verify the whole picture, the number of persons involved etc.

<comment><USER3> What about coercion via phone and internet?

<comment><USER4> What about "this was never a good idea." Can't remember where I read this, but biometrics are a username, not a password!

<comment><USER5> [http://blog.dustinkirkland.com/2013/10/fingerprints-are- user...](http://blog.dustinkirkland.com/2013/10/fingerprints-are-user-names- not.html)

</comment></comment></comment></comment><comment><USER6> So Doomguy's "mash the corpse's head into the bioscanner" trick won't actually work in the future?

</comment><comment><USER7> Even if the pupil dilation response to light is not consistent over time (or affected by drinking/stress), wouldn't the mere fact that it responded at all be proof of a living eye?

<comment><USER8> Someone could play a video

<comment><USER7> But a video would have the characteristics of a photograph rather than a physical eyeball, so the other techniques used to try and detect photographs from eyeballs would catch the video.

</comment></comment></comment><comment><USER9> iris not retinal...very different</comment>


Show HN: What do you think of our startup? - <AUTHOR> http://www.bilderlanguages.com

<comment><USER2> This is very interesting to me. I started Russian and decided I should learn French before Russian so I didn't have to do as much with the alphabet. However I always get busy and stop for just long enough to forget most of what I learned. I will be eagerly watching for reviews of the process from people who have gone through it.

Site looks good, but I think some review of the readability of the bigger paragraphs could be done. Specifically the bullet points on the Guarantee page are a bit difficult to read. Also they are formatted different between Our Promise and Your Commitment, which you may have a good reason for.</comment>


Single element heart animated in pure CSS - <AUTHOR> http://codepen.io/shankarcabus/pen/slbdA

<comment><USER2> WebKit only. Please use -moz prefixes as well; Firefox has supported CSS animations for quite a while now.</comment>


When Done Right, In-App Purchases can be Based on Trust - <AUTHOR> http://www.baekdal.com/insights/when-done-right-inapp-purchases-can-be-based-on-trust

<comment><AUTHOR> This is Baekdal's follow up post to a recently popular article "How in-app purchases have destroyed the game industry" which you can comment on here: [https://news.ycombinator.com/item?id=7161901](https://news.ycombinator.com/item?id=7161901)</comment>


Facial recognition will be turned off for Facebook users from Europe - <AUTHOR> http://europe-v-facebook.org/EN/en.html

<comment><USER2> Misleading title. It'll be off by default, but users will be able to turn it on if they want.

<comment><USER3> thanks for the clarification, this was pissing me off :)

</comment></comment><comment><USER4> Privacy is dead. Except where it is still enshrined in law.

</comment><comment><USER5> I know a lot of people in the industry are wondering if this type of legislation will come stateside. Don't know if anybody else noticed this, but with Google+ it looks like they've already implemented "opt-in" style facerec.

But I think people will be surprised how high the rates are when they make the 'opt-in' button the big blue one.

</comment><comment><USER6> I'm EU citizen but I live out of EU. Will it be turned off for me? What I have to do? To change my country to a EU state?

<comment><USER7> Theoretically the EU privacy laws do not apply to you, the scope of the law concerns EU territory only. But of course I don't know how Facebook will handle its compliance, so maybe changing your country to an EU state might work.

</comment></comment><comment><USER8> It's good European Union does something useful for a change

<comment><USER9> EU has done lots of consumer and 'little guy' laws, like employee rights law, anti-discrimination law etc.

</comment></comment><comment><USER10> This website is an utterly chaotic mess of information.</comment>


Lawrence Lessig and Change Congress start constitutional convention movement - <AUTHOR> http://www.callaconvention.org/

<comment><USER2> Like most people, I guess, my gut reaction to large powerful corporations making massive political expenditures is one of discomfort.

But, at the end of the day, aren't said expenditures just SPEECH? It's not like corporate entities have a vote (and while they can, now, post-Citizens- United, endorse a specific candidate, they still can't give money directly to a candidate). So, they are simply putting their point of there for those who actually can vote to consider.

I struggle to see what exactly is so wrong with that?

And, consideration #2: Wouldn't a better way to keep corporate/business influence out of Washington D.C. be to reign back in the overwhelming influence the Federal Gov't has? When you have FedEx and UPS jockeying over who can better us the government to screw the other over, something's gone awry, but it's not due to corporate speech.

And the final concern, what about small organized groups, that might, like, want to put together a movie about a candidate, which express some sort of opinnion about said candidate, and sell/distribute/advertise that movie 60 days before said candidate's election?

<comment><AUTHOR> I think your analysis is right on and I think this case is very much a matter of principles vs pragmatics.

The symptom is plainly that people and groups of people (corporations) with very deep pockets have vast access to and influence on all levels of government, and influence is a zero sum game so that comes at the expense of the mythical "average" citizen.

The Fair Elections Now Act is the most direct and obvious way to mitigate that corporate influence.

I think that it also undermines the freedom of speech of those who have influence.

So, the extent of my understanding/analysis at this point is that essentially what we are looking at is a decision between the welfare of American democracy vs the principles upon which it was founded.

I know the hard-line libertarians will decry me for that sentiment claiming that the two never diverge, but I don't see how anyone can deny a) that the corporate influence is disproportionate to the numbers it represents b) rarely aligned with the interests of the population.

<comment><USER3> The most direct and obvious way is to cut the amount of money the government is spending.

<comment><AUTHOR> I was going to ask whether annual expenditure has _ever_ decreased year over year but I found the answer.

<http://en.wikipedia.org/wiki/United_States_public_debt>

Looks like it's not unprecedented but debt over GDP hasn't decreased year- over-year since before Reagan, so it just hasn't happened in most of HN's visitors' lifetimes.

</comment></comment></comment></comment><comment><USER4> Related discussion here: <http://news.ycombinator.com/item?id=1101508>

(And my comment which probably is more salient here: from Reason.com - "Stop the Car, Larry. I Want to Get Out", excerpt: "While the folks at Cato would respond to special-interest lobbying by reducing the size and scope of government so less of life is politicized and there is less to lobby about, Lessig would respond by amending the Constitution to restrict freedom of speech.")

<comment><USER3> Agreed, I spent some time talking to some of the people @ the Change Congress group when they first started. I told them the problem wasn't speech or lobbying it was the amount of money that was being spent by congress, and that if they instead spent their efforts having legislation moved from federal to state they would succeed in making lobbying to expensive to be worth it. They told me I was pushing my own agenda and that I didn't care about corruption.

You have to ask yourself are you looking at fixing systemic causes or merely putting a bandaid on a flawed system.

<comment><USER5> I think increased Federalism is really our only hope. Increased centralization, or even our current level of centralization, simply makes the central control construct too rich a target to pass up, and too easy a target to capture. This is the 21st century, and everything else is decentralizing; why isn't governance?

We shouldn't be arguing about which one-size-fits-all health care plan should be enacted at the national level (and it's extremely hazardous for an entity which can print money to be doing anything of that nature anyhow); we should be letting the lower jurisdictions work it out. (If you don't think states are large enough to do that, go look at actual stats; many states are larger than entire major European countries and nothing would prevent states from banding together or adopting each other's systems once proved, it's not like poor Rhode Island would have to come up with their own _de novo_ plan. In fact such sharing mechanisms already exist to some extent.)

It is also a trivial exercise to show this permits a much larger set of people to get the much more of the things they desire out of their government, whatever those things may be (including "less things" if that's what the people want).

<comment><USER3> In fact, you can see in MA we have a universal healthcare bill much like the one being proposed and let me tell you it's causing all sorts of problems.

[http://www.boston.com/bostonglobe/editorial_opinion/oped/art...](http://www.boston.com/bostonglobe/editorial_opinion/oped/articles/2009/03/02/mass_healthcare_reform_is_failing_us/)

</comment></comment></comment></comment><comment><USER6> I support Lessig

I support him because what he is trying to do is MONUMENTAL. When laws are purchased by the highest bidder they allow people to subvert the free market. When laws are purchased then the democratic voice of the people has no chance! Lessig is trying to bring free speech, and free markets, to the US. I support Lessig!

<comment><USER7> Here's what puzzles me a bit- if you believe legislation and legislators are up for sale to the highest bidder...then why do believe a constitutional convention would not be the same, with much more serious consequences?

I think it's incredibly dangerous to imagine that a con-con would not be the target of truly massive amounts of influence peddling. And you can't limit the scope of a con-con either, so EVERYTHING is up for grabs.

</comment></comment><comment><USER8> Is corporate campaign spending a big deal? One way to tell is to look at state laws. Some states do not restrict corporate expenditures on political speech, and others do. Can anybody tell the difference? If not, then who cares?

</comment><comment><USER9> The point of corporate campaign finance is not to persuade the existing officials. It is to select for officials who already support your views. They are morally rightous crusaders on your behalf.

The fact that lobbying access does in fact also bring influence is also true, of course, but don't confuse the two issues.

</comment><comment><USER7> A constitutional convention would massively disruptive, and would almost certainly lead to things the people who called for it would not want.</comment>


Sequoia's Investment Memo on YouTube - <AUTHOR> http://milesgrimshaw.com/sequoia-investment-memo/

<comment><USER2> Really neat to see the investor "pitch" for YouTube. While founders have their passions about ideas, the VC goes straight to the business fundamentals.

Also interesting how many features YouTube's infrastructure had already implemented at that scale.

Are there legal reasons more of these investment memos are not made public? Would it open the investors up to any liabilities?

<comment><USER3> There is a potential liability in there, Reid Hoffman an investor in Flickr which is noted as a competitor, discloses internal flickr strategy.</comment></comment>


C++ String to Int - <AUTHOR> http://www.kumobius.com/2013/08/c-string-to-int/

<comment><USER2> I just finished my first semester in C++, and as someone formerly familiar with PHP and javascript I was surprised at how much of an issue this is when you don't have operator overloading and bounds checking and have to manage memory and types yourself. I was spoiled by just expecting "string"+int to work.

I ended up taking all user inputs as strings then trying to cast them into floats with atof() to avoid overflows... which I'll probably learn is a terrible idea next semester.

</comment><comment><USER3> strtol does fail on overflow [1] -- setting errno to ERANGE and returning LONG_MIN or LONG_MAX. Since those are also valid return values and it doesn't update errno on success, it's recommended to set errno to 0 first.

Or, you could c++11 std::stol [2], _et alia_ , which are similar (libc++ is a wrapper around strtol) but throw an exception on overflow.

1\. [http://pubs.opengroup.org/onlinepubs/009696699/functions/str...](http://pubs.opengroup.org/onlinepubs/009696699/functions/strtol.html)

2\. [http://en.cppreference.com/w/cpp/string/basic_string/stol](http://en.cppreference.com/w/cpp/string/basic_string/stol)</comment>


Show HN: Comprehensive Tutorials in Deep Learning Using TensorFlow - <AUTHOR> https://github.com/open-source-for-science/TensorFlow-Course <comment><USER2> how does this compare to something like fast.ai? I have no experience or knowledge in this field

</comment><comment><USER3> There is something off with the math equations here - [0]. Does Github render math equations? Or is there any reason they are written like that, maybe to export that to HTML/PDF with proper math rendering?

[0] - [https://github.com/open-source-for-science/TensorFlow- Course...](https://github.com/open-source-for-science/TensorFlow- Course/tree/1be55e52caf836fa096066c167942bdba235ff78/docs/tutorials/2-basics_in_machine_learning/logistic_regression#logistic- regression)

<comment><USER4> Github doesn't support LaTex equations. I've never understood why not. Always seemed like a problem that was solved but no support integrated.

</comment></comment><comment><USER5> Good compilation or recipes!

</comment><comment><USER6> Love it! Is it ok if I publish this as a website? Obviously I'll link back to the original repo.

<comment><USER7> There is a license in the repository. Should help you to understand what you have to do.</comment></comment>


Video: Django's Adrian Holovaty Shows Off EveryBlock's Guts - <AUTHOR> http://www.webmonkey.com/blog/Video%3A_Django_s_Adrian_Holovaty_Shows_Off_EveryBlock_s_Guts <comment><USER2> 48 minutes, but the last 18 are questions. It doesn't talk much about django itself, but concentrates on the types of data they have to deal with, how they obtain it, etc.

The big news (to me, anyway) is that under the terms of the grant under which EveryBlock is developed, it will be open-sourced on June 30.

There's some interesting discussion right at the beginning about their data model, which seemed to be forcing non-relational data into a relational model. This was actually addressed in a question about 34'15"; he said they'd been investigating CouchDB, but are currently limited by the lack of geospatial support.

</comment><comment><USER3> That really looked like a good candidate for non-relational databases. I was watching and thinking it was weird they didn't go with that approach, but he explained the reasons later on. Their solution is not that pretty, but valid.

It was also interesting that it became more of a discussion about Open Data than python or django itself.</comment>


What I would look for in a junior developer - <AUTHOR> http://tosbourn.com/junior-dev <comment><AUTHOR> OP Here – Would love any feedback from people who are either;

* Junior folk themselves

* Hire junior folk</comment>


If I make enough money now, I can quit and do what I really love later. - <AUTHOR> http://www.fastcompany.com/magazine/66/mylife.html?page=0%2C0

<comment><USER2> _Most of us don't get epiphanies. We only get a whisper -- a faint urge. That's it. That's the call. It's up to you to do the work of discovery, to connect it to an answer._

 _Of course, there's never a single right answer. At some point, it feels right enough that you choose, and the energy formerly spent casting about is now devoted to making your choice fruitful._

Pearls of wisdom summed up nicely.

<comment><USER3> I just read the whole article then came here for comments... I wish I had just started with the comments. Perfect summary.

</comment></comment><comment><USER4> good article, but why do these publications (read: Forbes) insist on drawing out articles to 9 or 10 different pages? Awesome for page views, very annoying as a reader.

<comment><USER5> first thing I do when I see such an article is look for the printable view link.

</comment></comment><comment><USER6> His books are well worth a read ("What Should I do with my Life?" and "Why do I Love These People?"), and they're nice commuting/bedtime reading because they're a bunch of short vignettes that follow a general theme.

And as far as I could glean from a 30-minute reading, he's a real _mensch_.</comment>


Deploy Scalable and Highly Available Web App (Omaha Server) on AWS Cloud - <AUTHOR> https://medium.com/@ptuladhar3/deploy-scalable-and-highly-available-web-app-omaha-server-on-aws-cloud-69e26df7c85b <comment><AUTHOR> Deploy Omaha (Google Update) server on Amazon ECS using CloudFormation</comment>


Ask HN: I'm trying to find a demo video of a text editor on a tablet - <AUTHOR>

I saw a demo video not that long ago (within six months?), probably on HN.  Someone (the developer?) was demoing, on a tablet I am pretty sure, an interface for document editing where you could highlight quotes, drag them around, insert annotations, and do a bunch of sorting of these things.<p>I remember it being interesting and can't find it anywhere. <comment><USER2> Was it this? <http://liquidtext.net/demos/> <http://news.ycombinator.com/item?id=4401550>

<comment><AUTHOR> Yes! Thank you!</comment></comment>


US Army warns of Twitter dangers - <AUTHOR> http://www.breitbart.com/article.php?id=081025182242.js2g2op8&show_article=1

<comment><USER3> Really. This should be on the onion.

"Terrorists known to wear clothes to aid with their terrorism - Clothes are known to keep terrorists warm, helping them to kill innocent civilians. We should think very carefully about banning clothes all together"

While we're at it, on a recent flight to the US I was asked "Where are you staying. You need to provide an address etc" (Security reasons apparently - <USER2> guess terrorists slip up there and reply "Oh I won't actually be landing... oops!"). I didn't have a clue of the address, I only know how to drive there. The guy checking me in just said "Ah don't worry, I'll put 'holiday inn, SFO'.

Either security like that is important, or it's not. If it's not, get rid of it!

<comment><USER4> I once wrote "Dad's house" in there and this was enough to get me searched. I didn't know the address off the top of my head. What I've found even funnier there is that I have US citizenship and still have to fill that out -- like, what are they going to do, not let me back in if I don't know where I'm staying?

<comment><USER3> Terrorists are beyond being able to look up a valid address on the internet. It's way too difficult for them. Once they work out how to do that, we're all in big trouble.

Just like at the moment, they haven't been able to figure out how to separate a large bottle of explosive liquid, and put it in lots of little bottles which are then allowed through security.

</comment></comment></comment><comment><USER5> "Twitter has also become a social activism tool for socialists, human rights groups, communists, vegetarians, anarchists, religious communities, atheists, political enthusiasts, hacktivists and others to communicate with each other and to send messages to broader audiences"

Vegetarians?

 _Vegetarians?!_ Seriously?

<comment><USER6> You'd be surprised by the breadth of social classifications which scare the US Army. We still use "Fag" as a generalized insult. TIME WARP, BABY!

<comment><USER7> yeah, I have to admit, I grew up in Kansas and went straight into the military after high school. It has taken a long time to recognize and undo the damaged values they instill you with.

<comment><USER8> All that duty, honor, country stuff?

Keep working at recognizing the damage. They say admitting you have a problem is the first step.

<comment><USER6> _Do you love your Guns? Yeah! God? Yeah! The Government? Fuck Yeah!_

</comment></comment></comment></comment></comment><comment><USER9> When they were using technologies like PGP there was reason for concern. When they start using stuff like Twitter I think it's great news for all of us non- terrorists.

<comment><USER10> I can has bom! lolz!1!

Dudez, watch out for copperz!! they b readin ur twitter!

<comment><USER10> I r serious hacker, this b serious thread.

</comment></comment></comment><comment><USER7> Better link: the Wired story, which actually provides a link to the FAS report: <http://blog.wired.com/defense/2008/10/terrorist-cell.html>.

<comment><USER11> UPDATE: Found the site. I feel stupid now. Here's the full text though: <http://www.fas.org/irp/eprint/mobile.pdf>

OLD:

I found that, but I still can't find the full text of the report. It looks like all they have is a link to FAS's main site, so I'm currently digging through their site. If anyone has the link to the report, they'd be much appreciated.

</comment></comment><comment><USER12> I'm more interested in microblogging as a battlefield awareness tool. Anyone know if someone's working on it?

</comment><comment><USER13> I worry more about Facebook status updates:

Osama bin Laden's next attack will kill over 9000.

Kefka Palazzo wonders what to do with these 3 statues Sarah Palin gave him.

Kurt Godel just read the U.S. Constitution <ContradictionException @ #x1f3b7908>

Ken Lay is tired of living in his girlfriend's basement. Faking your own death fucking sucks, man.

Eric Cartman is going home.</comment>


Is ".com" domain still important for startup? - <AUTHOR>

Hi
I am the founder of secQ.me, which we offer personal mobile safety app. Initially, we like to register our domain as "http://secure.me", but as the domain taken, we resolve it to "http://secq.me"
A good friend of mine commented "A large section of the population do not click/trust domains that are not .coms. Every single time we miss out a segment, we lose a potential segment"
Is the statement still valid.. love to hear from u.
James Khoo <comment><USER2> If your app targets tech people, then the .com may not be necessary. However, if your app targets a general audience then a .com should be used.

Here is a good test. Find a non-tech person (someone that does not know about your website), and ask him/her to go to your website. Sit him/her in front of a computer, and say, "Please go to secq.me" See if he/she can get to your website without any further directions. Here are some questions you will likely get: "Is there a .com?" "How do you spell that?" If you try this on a few people and nobody has troubles, then great.

<comment><USER3> An interesting point I've observed (and I think it's been validated) is that, for some segments, Google is their domain search... if you tell them, "go to xyz.com", they type xyz.com on Google !

<comment><USER2> That is a good point. I think I have seen that before too. Depending upon your website SEO, that may or may not help.

</comment></comment></comment><comment><USER4> [http://adage.com/article/news/o-overstock-backs-o- change/230...](http://adage.com/article/news/o-overstock-backs-o- change/230983/)

Overstock.com changed their primary domain to "o.co" in what I can only assume was an attempt to make people type less.

Customers rarely entered "o.co", instead they entered "o.com" because that's what they expected to domain to be.

Result: tons of cash wasted as Overstock reverted to "Overstock.com".

Get a .com and move on.

</comment><comment><AUTHOR> Thanks everyone for the suggestion..this is followup question, both I am bad at finding a good domain name for my product and service, since secureme.com is taken, what is the next best name for my product..

Here's a 2 minute intro video about our product.. <http://youtu.be/1Hf5hbVxuJw>

I am open for suggestion, appreciate your help

Thanks James Khoo secQ.me Founder

</comment><comment><USER5> I'd like to hear some opinions on this myself. I personally don't think it matters anymore, but every time I get an idea for a product/domain, I get told "No. It should have a dot-com." Hm, really? Should it? I like how Delicious went from De.licio.us to delicious.com when they had the money. Most devs can't afford simple domain names.

</comment><comment><USER6> Yes, see this.

[http://www.seomoz.org/blog/how-to-choose-the-right-domain- na...](http://www.seomoz.org/blog/how-to-choose-the-right-domain-name)

Using real words is also generally necessary. One "u" pops right out and ruins the batch.

</comment><comment><USER7> I'd like to see .us used by more companies in the US.</comment>


The New Old Home - <AUTHOR> https://www.yakcollective.org/projects/the-new-old-home <comment><USER2> Fascinating stuff!

Do any of these people actually live in the suburban household they assert will become more popular?

There isn't a single mention of the neighborhood... Mine was previously mostly emptied during much of the day, as people left to go to work or school. It is now full of pedestrians, bicyclists, and children in the afternoon. Front-yard conversations with neighbors is MUCH more common when everyone is working from home.

What will happen to community in this post-COVID environment?

<comment><USER3> We take a lot more walks and see a lot more neighbors as well. We even had a socially distanced happy hour with another family in the front yard.

I think a return to having a tightly connected neighborhood would do the US a lot of good. People may pay more attention to what's happening in their town and local politics which could help change things from the ground up.

Most importantly though, I think tighter neighborhoods would help people see those they don't agree with as actual people with more in common with them than not. As Thomas Jefferson said, "I never considered a difference of opinion in politics, in religion, in philosophy, as cause for withdrawing from a friend."

As an aside, I have been thinking about how much I would love to be able to buy an empty lot in my neighborhood to open it up as a community space to bring people together outside of social networks.

</comment></comment><comment><USER4> I like it, and it's great that people are thinking about it.

One thing that felt unexplored is socialization, and in particular meeting new people, and in particular dating. I know that a lot of people use dating apps nowadays, but many (most?) use them only for first contact, and still prefer to meet in shared spaces like bars, which is harder to accomplish if these are scarcer and if people live much further away.

One of the effects of the move to concentrated coed spaces (factories and offices) and of the increase of housing prices in certain areas seems to have been an increase in the number of people who enter into a relationship with someone of the same economic class. But if your coworkers and colleagues all live two states away, and if more uniform land prices make it more likely for people of different incomes to live in the same area, there might a reversal of this change.</comment>


Colaboratory: Jupyter notebook environment that requires no setup to use - happy-go-lucky https://colab.research.google.com/notebook#fileId=/v2/external/notebooks/welcome.ipynb&recent=true&forceEdit=true&sandboxMode=true&scrollTo=9J7p406abzgl <comment><AUTHOR> It does require signing in to Google, however.</comment>