The Decentral Authority - <AUTHOR> http://avc.com/2015/07/the-decentral-authority/ <comment><USER2> [http://programmingisterrible.com/post/39438834308/distribute...](http://programmingisterrible.com/post/39438834308/distributed- social-network)

The practical and social problems of distributed/decentralized social networks seems to far outweigh the gains in terms of anti-censorship/network resilience.

Reddit already suffers from a thing known as 'karma whoring', where users will work hard simply to gain karma points, often to the detriment of the quality of the community they're interacting with.

Karma points have absolutely no financial benefit or real worth outside of the status some internet denizens attach to them. I have struggled to imagine a single way of introducing financial incentives for Reddit participation that wouldn't ultimately fall prey to this.

It's also hard to conceive how moderation/curation might work in a distributed/decentralized system.

To put it simply, I've come to the conclusion that censorship is an often required tool in creating internet communities where everyone can feel welcome and safe.

I'm not sure how that would work in a distributed system.

Context:

I had this idea a while ago and started trying to write it. I really hope something comes out of all of the different approaches people are taking to this problem.

<comment><USER3> _To put it simply, I 've come to the conclusion that censorship is an often required tool in creating internet communities where everyone can feel welcome and safe._

 _I 'm not sure how that would work in a distributed system._

The solutions has been implemented at least twice, first with Newsgroups kill files and now with Twitter's block lists.

Users would publish a feed with messages and user that they think should be blocked, and others could subscribe to those feeds. To diminish moderator abuse, you could tell your client to only block messages/users which have been blocked by two or more of people.

</comment></comment><comment><USER4> Points:

(1) Reddit is in the news now. Fred's post also mentions the challenge of how to manage a social site, e.g., Reddit, that depends on a lot of volunteer workers.

(2) Fred is highly interested in nearly everything about BitCoin and blockchains.

(3) Fred runs a popular blog, AVC.com, and he regards it as an important part of his business as a VC. In this blog, Fred sees himself as a bartender who watches as others interact.

In addition, IMHO, Fred likes to toss out ideas that are easy to comment on because they are deliberately incomplete and can easily be made more complete or deliberately not very good or very well supported so that they can easily be improved on.

So, he tossed out something about social site management and the blockchain. From 50,000 feet up, the point of mentioning a blockchain for site management is that a blockchain can be _distributed_ in various respects.

In particular, with that post, Fred kept up interest in social sites, one of his favorite ideas, "a large collection of engaged users" that can form a barrier to entry, and blockchain. And he got some thoughtful comments.

Some of the commenters may have spent more time on their comments than Fred did on his post!

</comment><comment><USER5> It seems like "blockchain" is the new "NoSQL". Blockchains are designed for specific use cases, they aren't a generic powerup that you just bolt onto your idea to make it a distributed awesomeness machine.

<comment><USER6> Balaji would like a word with you

[https://medium.com/@21dotco/a-bitcoin-miner-in-every- device-...](https://medium.com/@21dotco/a-bitcoin-miner-in-every-device-and- in-every-hand-e315b40f2821)

>Conceptually, we believe that embedded mining will ultimately establish bitcoin as a fundamental system resource on par with CPU, bandwidth, hard drive space, and RAM.

</comment></comment><comment><USER7> Very misleading title, extremely stupid concept.

Really all this article suggests is a p2p network where you are paid small amounts of BTC to be a peer (and pay to access other peers) and upvotes send BTC to the poster. It's a ludicrous idea that would never work. Reddit works because, among other things, votes/karma is worthless. Everyone's vote counts equally and everyone can vote on everything once. To tie voting to BTC or incentivize people to scam/cheat/lie for real money is just idiotc.

Also the blockchain will not be used to "host" the new reddit and other people (wrong people) have suggested.

Now an identity linked to the blockchain, used to access a decentralized reddit of nodes that contained subreddits which could be synced to other nodes (think newsgroups/usenet) but with anyone being able to run a node and set retention rates on posts/comments might work. Anyone could archive off bits and pieces of it (a la google groups) but some might only be hosted on 1 node or require some kind of key or password to access the content so "dark" sub reddits. The big problem is voting, and I'm not sure if a system like this could support anonymous voting. I'm guessing not but I'm no expert.

<comment><USER8> Reddit couldn't work if upvotes were worthless. Upvotes have a time value associated with them. Also there is a market for them. A quick google for "buy reddit upvotes" exposes a large grey market facilitating the exchange of upvotes for cash.

Everyone can vote on everything once is also suspect, since many users have secondary accounts.

So at reddit, voting is already tied to an incentive like BTC, and until the censorship incidents it was working rather well.

<comment><USER9> Not only voting, posting articles too. When you receive a tip you can convert it to cash so this is a real ($$$) connection between the virtual and real world.

</comment></comment></comment><comment><USER10> Url changed from [http://recode.net/2015/07/05/fred-wilson-the-next-reddit- wil...](http://recode.net/2015/07/05/fred-wilson-the-next-reddit-will-likely- be-built-on-the-bitcoin-blockchain/), which points to this. Title changed from "Fred Wilson: The Next Reddit Will Likely Be Built on the Bitcoin Blockchain" to Fred's actual title.

Submitters: HN prefers original sources, especially when some site has shamelessly ripped off somebody else's work and stuck a baitylicious title on it. Please do your due diligence and post the real thing. The community will appreciate it, and the discussion will be better, since ripoffs tend also to be dumb.

<comment><USER6> To be fair, Fred just ripped off somebody else and provided a little of his own analysis:

[https://medium.com/@ryanxcharles/fix-reddit-with- bitcoin-7da...](https://medium.com/@ryanxcharles/fix-reddit-with- bitcoin-7da3f85fb9ba)

<comment><USER10> I'm not sure that's fair. But since that article is currently on the front page [1] and we shouldn't have two threads about this, we'll downweight this one.

1\. [https://news.ycombinator.com/item?id=9836677](https://news.ycombinator.com/item?id=9836677)

<comment><USER6> Thanks for the link, I didn't see that.

</comment></comment></comment></comment><comment><USER11> I actually created something like this for the LA Hacks Hackathon last year. [http://challengepost.com/software/coinama-vote-with-your- wal...](http://challengepost.com/software/coinama-vote-with-your-wallet)

The idea was a reddit-style AMA site where questions would each get a bitcoin address assigned to them. The Bitcoin sent to that address would be a bounty for the AMA subject to be able to claim after answering.

</comment><comment><USER12> All this type of stuff has been predicted 5+ years ago on the bitcoin forums. The tricky part is getting a userbase and making it easy for regular folk.

</comment><comment><USER13> I honestly don't understand the necessity or want for something like this. I get that people want their community detached from corporate interest, and that they don't want censorship involved with their communications and ideas... but as the article passingly mentions, the technology is coming out of groups that have a reasonable monetary incentive to push it.

I for one am hesitant to rely on a 'reddit p2p network' for which I have to seed with bitcoins.

Are there any estimates and just how much that cost/"incentive" per user is?

> Furthermore, when a user upvotes content, that sends a small amount of > bitcoin to the author of that content, thus incentivizing the production of > good content

How do you deincentivize folks from gaming that? Would we potentially run into a situation where new forms of online publishing are going to arise, where instead of being funded by Google Ads they are now funded directly by users liking their content? Will curators of cat pictures become overnight millionaires?

<comment><USER14> > I honestly don't understand the necessity or want for something like this.

Here's what I wrote elsewhere:

"Imagine you're a programmer. For us coding geeks, sites like Stack Overflow are a lifeline to getting work done. In fact, we're reasonably convinced that when Stack Overflow goes down, all programming around the world just stops. (Well, at least that's the excuse we use.) Yet, when we read an answer from someone who has fixed that (Javascript) problem we've spent hours debugging, we want to kiss that person's feet with the appropriate Wayne's World salute. It's times like those when a thank you and a (worthless) upvote just don't seem enough. That person saved us from hours of wasted effort and aggravation. That geek deserves more."

tl/dr: I want it because I don't expect something for nothing. If someone provides me value, I want to exchange something in return.

</comment></comment><comment><USER15> Basically, a lot of VCs are going to start referring to "blockchain" as a new/different kind of data store.

There may be times when building something on the blockchain makes a really big difference (i.e. payments or other spaces in which trust really matters, or the combination of data being publicly available yet encrypted for private parties matters).

There will also be times when people advocate building x on the blockchain and x could really be built with any *SQL database, but blockchain is sexy right now.

</comment><comment><USER16> This is one of those ideas that is either brilliant or complete nonsense. I'll let time tell us which one is correct.

<comment><USER7> Surprise, it's only going to take 9 minutes it looks like, I'll go ahead and spoil the ending it's complete nonsense.

<comment><USER10> Please don't post unsubstantive comments, especially dismissive unsubstantive comments. Thoughtful criticism is welcome, but glib sarcasm degrades the threads.

<comment><USER7> I went more indepth it above here: [https://news.ycombinator.com/item?id=9836496](https://news.ycombinator.com/item?id=9836496) (before I posted this comment) but I get what you are saying. Sorry.

</comment></comment></comment></comment><comment><AUTHOR> In my view the only way this would work is on a "Decentralized Autonomous Organization" model.

[https://en.wikipedia.org/wiki/Decentralized_autonomous_organ...](https://en.wikipedia.org/wiki/Decentralized_autonomous_organization)

</comment><comment><USER17> Forgive my ignorance, but where is content hosted? Can you start with and lurk with zero bitcoin or do transactions have to take place for everything?

</comment><comment><USER18> This sounds like a blunt combination of popular terms

</comment><comment><USER19> Does anyone have any examples of anyone proclaiming the wonders of bitcoin at length, without also having a strong financial vested interest in it?

<comment><USER6> Then the question would be, 'why isn't this person investing in Bitcoin if they believe in it so strongly?'

<comment><USER19> Yeah, I thought about that, but you'd think there would be at least one or two high-profile voices talking it up that didn't have millions of dollars riding on it.

Back in the mid 90s of those expounding on the potential and promise of the internet some no doubt had direct financial ties to its further development, but many others likely didn't, academics, govt people, etc.

Are there any academics, or NGO people, or similar who are super excited about bitcoin, or have some insight into future applications?</comment></comment></comment>


Show HN: Branchr – Continuous deployment of feature branches in development - <AUTHOR> https://github.com/jonocodes/branchr <comment><AUTHOR> This is a project I created a few months back for a dev need we had on my team. It could use a little work, but I figured it would be worth sharing in case people found the idea valuable.

<comment><USER2> I needed something like this at a previous job. At a brief skim it seems like a good potential solution to that problem. (Though it is not, perhaps fortunately, a problem I have right now, but I'll bookmark this in case it does come up someday.)</comment></comment>


Ask HN: Best resources for learning data science? - <AUTHOR> Looking for moocs, books, blogs and whatever you find helpful from beginner to veteran.<p>thanks. <comment><USER2> [https://hn.algolia.com/?query=learn%20data%20science&sort=by...](https://hn.algolia.com/?query=learn%20data%20science&sort=byPopularity&prefix&page=0&dateRange=all&type=story)

[https://www.google.com/search?q=data+science+resources](https://www.google.com/search?q=data+science+resources)</comment>


Demosclerosis (1992) - <AUTHOR> https://www.jonathanrauch.com/jrauch_articles/demosclerosis_the_original_article/ <comment><USER2> Clearly, what we need is a special interest group devoted to fighting special interest groups.

All jokes (?) aside, can anyone comment on how the situation has evolved—or failed to evolve—over the last quarter century?</comment>


Ask HN: Review my startup landing page, flyoso.com - <AUTHOR>

Flyoso - Book flights without the search. <comment><USER2> Initial a bit slow, could be just Squarespace.

As said below I don't want to give you my email or a fake just to preview it. But it is in alpha.

Is the logo realated? In my opinion a leaf represents ease I guess, which would make sense.

Screenshots etc?

A scroll down with info would be great.

</comment><comment><USER3> I dont want to have to enter my email just to try it

<comment><AUTHOR> Thanks for the feedback zubairq, I completely understand where your coming from.

<comment><USER3> i'll try it again wehn there is a login free version

</comment></comment></comment><comment><USER4> Would love to how you guys do it and why should I pick you guys for search for my flights before giving my email.

As sebie said, screenshots would be great! Videos would be even better!

</comment><comment><USER5> The landing page doesn't tell me what Flyoso is supposed to do better or different from Hipmunk or Kayak for example.

</comment><comment><USER6> Clickable Link [http://flyoso.com/](http://flyoso.com/)</comment>


Crypto mining of crypto currencies could influence Venezuala economy? - <AUTHOR> (Note: This is not a "pro-crypto" post. I am not a crypto proponent nor do I have any libertarian ideologies. I hate the price increases on GPUs, I laughed at Bitcoin when it hit 50k or whatever, etc.)
Shouldn't we expect to see crypto mining of cryptocurrencies (yes crypto-crypto mining) to become prevalent in Venezuela at a scale to influence the economy?
Basically, my argument is that we should expect to see a massive amount of mining from small to moderate scale rigs in the economy. Using the efficient market framework, crypto mining can be seen as conversion of electricity (and the amortized value of hardware) into cryptocurrency.
Because of Venezuela's currency collapse (as well as standard issues of the government propping up electricity prices), there's a huge gulf between electricity prices and the value of USD. My guess is that if you look at the figures, the incentives are truly enormous. This is being exploited by the authorities, but separate to this, but I would expect to see lower-middle class and up to get into mining in a huge way (albeit individually at a low scale).
This is because if I can stash a small rig somewhere, then I can produce currency.This seems like a viable way to save funds at a personal/family level.
If any of the above logic is true, the following questions are interesting:
- Is anyone seeing evidence of this?
- Will this occur on a massive-enough scale influence the provision of electricity?
- Is this one actual use case of crypto currency that can affect history in a benevolent (or at least neutral) way by "democratizing" wealth? <comment><USER2> Venezuela has some of the cheapest electricity in the world thanks to subsidies... but spikes in your power usage at home will land you in jail [1].

One workaround is pooling power from your neighbors, but the legal risk and setup are enough to deter most people.

[1] [https://www.cnbc.com/2017/08/30/venezuela-is-one-of-the- worl...](https://www.cnbc.com/2017/08/30/venezuela-is-one-of-the-worlds-most- dangerous-places-to-mine-bitcoin.html)

<comment><USER3> Also given it's "one of the world's most dangerous places to mine bitcoin", if I was in Venez and wealthy enough to mine in a meaningful way I'd probably head abroad to do it.

</comment></comment><comment><USER4> What is your cover up story when the police notice that your electricity bill is much bigger than your monthly salary? Also, do the police want to hail you or they only want a cut?

<comment><USER5> Venezuela has taken some hostile actions and stances towards miners (the people), and also the import of miners (the ASICs). I'm just waiting to see the day when the cover story for mining becomes growing marijuana. Hopefully it's just a joke, not as a result of mining becoming more illegal than growing!

</comment></comment><comment><USER6> Poor people tend to have high time preference and high loss aversion; both of those work against mining because the breakeven point is both long (relative to hyperinflation) and highly uncertain.

Buying stable cash (USD or EUR) seems like a better choice and AFAIK it's similarly illegal as mining.

<comment><AUTHOR> True, but these aren't conventionally poor but could basically include you and I (assuming you are in the vast majority of the population who relies on labor income and not tied to the ruling class) if we were wiped out by an economic calamity. This is because of how extreme Venezuela's slide has been.

Secondly, hyperflation seems to incentivize this: even the median crypto currency is going to be a better bet than the nominal currency.</comment></comment>


Logitech disables local access on Harmony Hubs, breaks automation systems - <AUTHOR> https://arstechnica.com/gadgets/2018/12/logitech-firmware-update-breaks-locally-controlled-harmony-hub-systems/ <comment><USER2> I am sad to see that Logitech has fallen into the business model of technological churn.

I've found their devices (I've owned a few mice, a keyboard, some speaker setups) to be durable, well designed, and comfortable to use. Their industrial and UX design teams are top notch.

Somebody up the marketing side of the chain should do some math and figure out how to not disenfranchise users. Maybe lock down unofficial APIs and require authentication of devices (which legitimate users could do). Or something. There are lots of options that don't involve pissing off satisfied customers.

But devolving into 'we want to sell new system X, let's brick some old devices' is a great way to drive people away from a brand entirely.

<comment><USER3> What UX team?

Their Harmony software is atrocious. It feels like a badly designed flash application.

G Hub is broken as hell. LGS is kind of OK but not going to win any UX awards.

Am I missing anything?

<comment><USER2> I mean UX for their hardware. All of the stuff I've owned has been lovely to use. I've not had to try any of their software.

</comment></comment></comment><comment><USER4> Google completely bricked their home hub, so on the bright side at least Logitech users can still use the damn thing.

This reinforces my belief that unless there's officially supported API/CLI access & the end user can control (should they opt to) the cadence of updates - you don't own the hardware.

<comment><USER5> > Unless there's officially supported API/CLI access & the end user can > control (should they opt to) the cadence of updates - you don't own the > hardware.

I would agree with a modified version of this statement. To own hardware, I need the ability to control software update cadence _and_ be able to use the device without connecting to an external server I don't control.

If an API or CLI interfaces with an external server in order to function, and that server goes down, I just lost access to my device. By contrast, a GUI app that operates entirely on my local network is never going to stop working.

</comment></comment><comment><USER6> That's why I never install any updates on IoT devices. They usually remove features like that and you can never go back. I'd rather have my device 'insecure'.

</comment><comment><USER7> Shit, I just bought one of these, I wonder if it is too late to return it. I've just about had it with all of these "smart" things that fail to live up to the advertising and get worse with every firmware update.

<comment><USER8> To be fair, it looks like they are closing off some security vulnerabilities, and I'm hoping they wouldn't kick up this much of a PR nightmare unless the security vulnerabilities were some type of horrific RCE.

They might advert this PR storm if this if they just document the vulnerabilities that they fixed.

<comment><USER9> But this was a local API, so unless an attacker already had physical access to your network there should be no way for the exploit to be utilized.

</comment></comment></comment><comment><USER10> I was surprised there isn't a mature open source / hardware design, but maybe everyone thought it wasn't worth the effort with local connectivity to their Logitech Harmony. Maybe now is the time.</comment>


Rust things I miss in C - <AUTHOR> https://people.gnome.org/~federico/blog/rust-things-i-miss-in-c.html <comment><USER2> Tangential, but if you're looking for a project to do as you learn Rust, there's an ongoing Operating Systems class being taught at Stanford in Rust right now[1]. The "Ferris Wheel" portion of assignment #1 was particularly useful for language knowledge; 25 source files which you must make compile/not compile/pass tests (along the lines of the Ruby/Kotlin Koans), along with a test harness you can run locally.

[1]: [https://web.stanford.edu/class/cs140e/syllabus/](https://web.stanford.edu/class/cs140e/syllabus/)

<comment><USER3> I'm definitely interested in giving it a try. Do you know if the Pi kit they are using is sold as a complete package somewhere? I found a list of components in the Assignment 0 description, but that's it.

<comment><USER2> Bought a Pi 3 starter kit from a local place near me. It came with:

\- Raspberry Pi 3

\- 1⁄2-sized breadboard

\- 4GiB microSD card

\- microSD card USB adapter

\- CP2102 USB TTL adapter w/4 jumper cables

\- 10 female-male DuPont jumper cables

And I had to buy:

\- 10 multicolored LEDs

\- 4 100 ohm resistors

\- 4 1k ohm resistors

\- 10 male-male DuPont jumper cables

Specifically this kit: [http://tinkersphere.com/raspberry-pi-orange-pi- boards/1538-r...](http://tinkersphere.com/raspberry-pi-orange-pi- boards/1538-raspberry-pi-3-starter-kit-raspberry-pi-included.html)

</comment></comment></comment><comment><USER4> One thing jumped out for me. No integer overflow. In my embedded work we use that all the time. We represent angles as a int16_t or uint16_t where you can add and subtract angles and never have to worry about a discontinuity at 2pi because 2pi=65536.

Is this a hack that should not be allowed? I don't think so. Every processor made (that I'm aware of) in the last 30+ years has used 2's complement arithmetic. I don't think overflow is a bad thing, I think C made a mistake in calling it "undefined". They had to because when the language came along there were other options fresh in peoples minds.

I've also worked on systems in asm that had saturating arithmetic, and that has it's own nice use cases. My preference is still to have the rollover. People can implement bounds checking when they need to.

<comment><USER5> > One thing jumped out for me. No integer overflow.

FWIW that's not quite true, Rust will panic on overflow in debug but can (and currently does on all platforms I think) allow them in release. They're not UB though, they're defined as 2's complement.

> In my embedded work we use that all the time. We represent angles as a > int16_t or uint16_t where you can add and subtract angles and never have to > worry about a discontinuity at 2pi because 2pi=65536.

> Is this a hack that should not be allowed? I don't think so.

Rust provides APIs to make these behaviours explicit decisions rather than implicit hacks: [https://doc.rust- lang.org/core/num/struct.Wrapping.html](https://doc.rust- lang.org/core/num/struct.Wrapping.html), [https://doc.rust- lang.org/std/?search=wrapping_](https://doc.rust- lang.org/std/?search=wrapping_), [https://doc.rust- lang.org/std/?search=saturating_](https://doc.rust- lang.org/std/?search=saturating_) (and [https://doc.rust- lang.org/std/?search=checked_](https://doc.rust- lang.org/std/?search=checked_)).

> People can implement bounds checking when they need to.

Being unsafe by default always ends up in tears. Checking Mitre, just this year there have already been 11 public CVE for integer overflows.

<comment><USER4> After reading responses and reflecting a bit I guess rust got it mostly right. Undefined behavior is bad, so Rust defined it. Overflow is apparently a problem worth checking for. I don't understand how people are overflowing 32 and 64 bit integers, but OK it's common enough. Having the ability to declare overflow/wraparound as being OK is a good thing so long as it compiles down to the same add or subtract instruction and doesn't add overhead. Rust claims to have zero overhead abstractions, so I'll have to try this some day.

TL;DR the decisions made in the design of Rust seem reasonable.

<comment><USER6> [https://play.rust- lang.org/?gist=5b5df368283645fbec18c4fbaeb...](https://play.rust- lang.org/?gist=5b5df368283645fbec18c4fbaeb3c960&version=stable)

Click "release" and then "asm", you'll see that they are compiled to the exact same thing.

</comment></comment></comment></comment><comment><USER7> For more detail into the porting effort, I recommend taking a look at these slides, taken from a talk the author gave last year:

[https://people.gnome.org/~federico/blog/docs/fmq-porting- c-t...](https://people.gnome.org/~federico/blog/docs/fmq-porting-c-to- rust.pdf)

 _" Rust revived my interest in maintainership. It is very empowering to finally have a good language that I can use at the level of the stack where I work."_

</comment><comment><USER8> > Rust generates documentation from comments in Markdown syntax. Code in the > docs gets run as tests. You can illustrate how a function is used and test > it at the same time:

      /// Multiples the specified number by two
      ///
      /// ```
      /// assert_eq!(multiply_by_two(5), 10);
      /// ```
      fn multiply_by_two(x: i32) -> i32 {
          x * 2
      }

Okay that's pretty cool.

<comment><USER9> Python has that as well: [https://docs.python.org/3/library/doctest.html](https://docs.python.org/3/library/doctest.html)

</comment></comment><comment><USER10> I'm working on library to bring some Rust features back into C, like semiautomatic memory management (defer), Vec, Slice, String, Str, Option, built-in test cases, generics. But I lost interest because I'm allowed to use Rust in embedded project now. :-)

[https://github.com/vlisivka/crust](https://github.com/vlisivka/crust)

<comment><USER11> Thank God!

</comment></comment><comment><USER12> It might be off topic but I just had this thought and like to write down…

If you treat your program (and your problem) as math, then it is necessary to explicitly define all its boundaries. However many (most) problems in real life are not strictly math problems due to their nature of ambiguity. The ambiguity has its physical source of unknown boundaries. For example, you may think you only need 32-bit integer and you may be sure of it today, but your assessment may change in the future. Similarly, you may think today you should use arbitrary precision and the constant boundary check does not matter, but it may matter some day. In the effort to eliminate undefined behavior, we are projecting our ideas from real world onto math realm. That projection may be quite lossy.

I am aware that the actual compiled program is always well defined and can be a perfect mathematical object, but it's source as a language do have ambiguity -- e.g. compiler implementations and undefined behavior. Ambiguous language sometimes can express ideas better than a mathematical language -- if we treat the legacy of our code more in its source rather than in its binary.

</comment><comment><USER13> TIL: How about this instead, with pattern matching on function arguments.

I didn't know you could do that. I might need to go back and see what I can simplify with that trick.

<comment><USER14> I just installed rustc to test this example, turns out you cannot do pattern matching on function arguments like you can in erlang.

note: `my_func` must be defined only once in the value namespace of this module

<comment><USER15> It might be more accurate to call what Rust can do to function arguments "destructuring" rather than "pattern matching"

<comment><USER6> Destructuring is a feature of pattern matching, so yeah, this is slightly more specific. I don't think "pattern matching" is incorrect, though.

</comment></comment></comment></comment><comment><USER16> I would just like to point out that many of these features are also features of C++ :)(RAII, Templates, etc.).

<comment><USER17> C++ does have a lot of the features that Rust has. You won't get any of the memory safety guarantees or compile time checks though. I will say that to me a lot of the C++ equivalents to Rust features seem very awkward to use (maybe not once you're used to C++ I guess).

This guy does a pretty good presentation on Polymorphism in Rust vs C++: [https://www.youtube.com/watch?v=VSlBhAOLtFA](https://www.youtube.com/watch?v=VSlBhAOLtFA)

<comment><USER18> The major issue with C++, is what also helped the language gain market adoption, copy-paste compatibility with most of C89 code.

So security conscious C++ developers tend to use _enum class_ , string, vector and array classes, RAII, iostreams, wrapping data access in classes with invariants,...

Developers with more C oriented mindset, tend to just code away like "C with C++ compiler" programming style.

Hence the need being discussing since the last three CppCon, to stop using C style programming in modern C++.

CppCon 2015: Kate Gregory "Stop Teaching C" \- [https://www.youtube.com/watch?v=YnWhqhNdYyk](https://www.youtube.com/watch?v=YnWhqhNdYyk)

CppCon 2015: Bjarne Stroustrup "Writing Good C++14" - [https://www.youtube.com/watch?v=1OEu9C51K2A](https://www.youtube.com/watch?v=1OEu9C51K2A)

CppCon 2017: Bjarne Stroustrup "Learning and Teaching Modern C++" - [https://www.youtube.com/watch?v=fX2W3nNjJIo&t=2s](https://www.youtube.com/watch?v=fX2W3nNjJIo&t=2s)

Of course, preventing copy-paste compatibility with C, already solves many of those issues from the get go.

<comment><USER19> > Developers with more C oriented mindset, tend to just code away like "C with > C++ compiler" programming style.

The way I've seen it described is 'C with more convenient comments'.

<comment><USER20> You mean C99 ? What I really miss from C , with some of the things of this article, is constexpr, compile time checked enums, ...

</comment></comment></comment></comment></comment><comment><USER21> My favorite thing in rust is the error handling and propagation.

Using JS for comparison.

Example, this code in JS

function decode(path){

        try {

            return parse(path);

        } catch (err){

            throw err; // rethrow

        }

}

Could be compacted into this using try! macro or "?".

pub fn decode(path: &File) -> Result<Image>{

        try!(parse(path))

}

For error propagation, I could easily consume the error of a third-party lib, and convert it into my own using the From trait:

/// Convert std::io::Error to RasterError::Io

impl From<IoError> for RasterError {

        fn from(err: IoError) -> RasterError {

            RasterError::Io(err)

        }

}

Where as in JS, I would have to write a lot of if else if I want to convert a third-party package's error into my own error.

if( error.name === "IoError" ){

        let err = new Error(error);

        err.name = "MyError";

        return err;

} else if (...)

        ...

    }

<comment><USER6> Don't forget that try! turned into ? so that's now

      parse(path)?

    !

<comment><USER21> Yes but I still prefer try! as its easier to see (personal preference)

</comment></comment></comment><comment><USER9> > _Some good experiences with C_

> _Reading the POV-Ray code source code for the first time and learning how to > do object orientation and inheritance in C._

But [https://github.com/POV-Ray/povray](https://github.com/POV-Ray/povray) is all C++... It even says "Written in C++" on the Wikipedia page. Was he talking about some other source, maybe some older version?

Edit: [1] Here is a discussion about this topic from 2012. It seems that POV- Ray was ported to C++ for version 3.7.

[1] [http://news.povray.org/povray.programming/thread/%3Cweb.4f01...](http://news.povray.org/povray.programming/thread/%3Cweb.4f01ba3c6f2bacd09be4b6d10%40news.povray.org%3E/)

</comment><comment><USER22> Concerning the "Pattern matching" section, I've never, in all my time programming Rust, seen that specific pattern of destructuring the input values of the function in the fn declaration part.

Now I feel the need to use that everywhere...

<comment><USER6> A lot of people didn't know! I made sure to put it in the book explicitly: [https://doc.rust-lang.org/book/second-edition/ch18-01-all- th...](https://doc.rust-lang.org/book/second-edition/ch18-01-all-the-places- for-patterns.html#function-parameters)

<comment><USER22> Huh, was that also in the first edition?

I learned using that and if this pattern matching pattern (heh) is indeed in there, I must have overread it...

<comment><USER6> I'm not sure, to be honest, it's been a long time!

</comment></comment></comment></comment><comment><USER23> I tried to do a small project using Rust and SDL2 and gave up due to having to deal with lifetimes on textures.

> you just implement the [Drop] trait and that's basically it.

Is that what I was missing? could I have done that and not had to deal with lifetimes?

<comment><USER24> You always have to "deal" with lifetimes. The rules are not that complicated once you understand them. It boils down to:

* An object can only have one owner.

* When giving a reference away from an object, the reference has a lifetime that makes sure the reference doesn't outlive the owner.

* You can either have one mutable reference >>or<< arbitrary read-only references.

* An owned object must be denoted mutable to be mutable, otherwise it is read-only.

<comment><USER25> Some comments with the caveat that I have used Rust only for a short learning exercise a while ago and I don't fully understand programming in Rust (and found it tough going), but I think the problem is not about being able to understand the ownership models and lifetimes (which seems fairly straightforward conceptually).

The problem is in being able to put together a program that the compiler does not complain about. It always seems like you have to "feel" your way around by trying different things like a jigsaw puzzle rather than having a "canonical" way to do things that fit the lifetime/ownership model. Maybe there are more canonical ways based on people's experiences nowadays and maybe this problem is due to approaching solving things using a C (or other language) mind-set. It seems like learning these ways to avoid the Rust compilers errors related to lifetimes in any complex program takes longer than in other languages.

<comment><USER24> Rust is for sure not an easy language (but compared with Haskell also not that hard/time consuming to learn). The major stumbling block seems to me is, that the syntax looks some kind of familiar, which tricks you into believing that knowledge-of-other-language applies, but in reality Rust is a completely different beast.

For me there was a gap between reading the Rust book and applying the knowledge. While reading I thought "that's easy" but later on "oh shit, the compiler complains all the time". If you make it past that point – which takes for most non-novice programmers around three weeks – then Rust becomes a very powerful tool to you.

<comment><USER6> If you have any thought or insight on how to get over that, please let me know. The docs team wants to work on "what comes after the book" next, so any insights into what made it work for you would be very helpful!

<comment><USER24> > If you have any thought or insight on how to get over that...

It depends with which concepts someone is already familiar. To me the only really new concept was the lifetime and ownership one, all others have just a different syntax plus here and there some extra goodies. As example, when I saw the match keyword I thought "cool, Rust has a keyword for guards".

I learned Rust shortly after 1.0 was released. The real obstacle for me to overcome was to build a mental concept of what Rust is. Something that wasn't really communicated while reading the first pre-release Rust book.

You have to read a lot to get an idea of Rust, it should be the other way around – a common mistake done by almost everyone teaching something. Ideally the first chapter would be a buzzword free, Rust code free chapter about how Rust works superficially and why there is a need for yet another computer language. It should describe what kind of tools and concepts in Rust exist and which problems they solve. This is better than introducing somewhat complicated concepts/tools and trying to explain how they fit into the big picture at the same time.

Ideally there would be an introduction like this:

A program needs a structure, variables, control flow, tools... blablabla... this leads to some common problems [some easy examples] and [this] are some concepts Rust invented/uses to solve them.

In later chapters the abstract ideas would be "converted into Rust". Also don't go too much into detail. I don't think for example that a representation of the memory layout of a vector helps much. At first I just need to know there is a thing where I can put objects of the same type into, how it is implemented is not that important for a beginner. It's better IMHO to know how to do something right, than why something is right. This reduces the mental burden in the beginning of the learning phase. The why is something that you learn over time – or maybe you are not that interested and skip it forever, also a valid thing to do.

Overall the Rust community does a stellar job providing so much help in so many different ways – /r/rust on Reddit is really awesome – thanks for the book and your open mind to ask for feedback.

<comment><USER6> Thank you! Very helpful.

</comment></comment></comment></comment></comment></comment></comment><comment><USER26> I found the first point on unit-testing of C odd, I always treat static functions as implementation details and test only the public interface. CUnit is nice enough (if a bit long in the tooth).

<comment><USER27> There's a culture of testers who believe 100% code coverage is important enough to include "private" implementations, and will happily break encapsulation rules for sake of hitting 100% coverage.

<comment><USER28> Eh, I think both extremes are sub-optimal.

Some small public APIs are backed by large enough implementations that it pays off to be able to test implementation details. Sure, it might be "poorly factored" code that should have a bigger API and smaller guts, but that's not always an something you can change. Also, writing tests for internal behavior before refactoring can give you a good blueprint for how the refactored code should behave--being able to read the tests to specify unclear behavior is, while far from enjoyable in some cases, better than nothing.

You're right that there are some pretty silly test suites that break encapsulation for a coverage number without actually testing anything useful, though.

I don't think an absolute "all tests must behave thus" rule (e.g. coverage requirements, "only test public functionality", "refactor the _instant_ something isn't easily testable") is useful. Explain the benefits of each path, and make sure the decision of what compromise to make--and in any project more than a one-developer hobby, you _will_ have to compromise here eventually--is in the hands of people with the experience and common sense to make the right one.

</comment></comment></comment><comment><USER29> I think that C would have lasted us much longer if it just had C++-style templates. No classes, exceptions or other C++ features needed.

<comment><USER30> Can't macros already do everything templates can? I mean, it would be nicer to have templates, but I don't see why that would be a bottleneck for anything. Someone could probably write a templating macro and you could use that to the same effect.

<comment><USER29> I've seen that many times, written a few of them, and it's pretty horrible. Real templates are needed for such basics as generic data structures.

</comment></comment></comment><comment><USER31> Enjoyed this article so much.

</comment><comment><USER32> It seems to me he, first, talks about all the wonderful code he has seen written in C, then complains about C when he runs into terribly written C code but wants to blame it on C. I have a problem with that.

He then concludes that he likes things about Rust but then states Rust is a lot harder to learn but you become a better programmer cause you have to work harder on it. But isn't that what he complains about with C?

<comment><USER33> > He then concludes that he likes things about Rust but then states Rust is a > lot harder to learn but you become a better programmer cause you have to > work harder on it. But isn't that what he complains about with C?

The difference is that when you haven't learned/aren't good enough in C, you'll make a codebase that sort-of works for now but is buggy and unmaintainable - code that reads uninitialized values or never free()s or works as an application but could never be turned into a library - whereas in Rust your code won't compile until you get good enough to write it properly.

<comment><USER32> That is a fault of the programmer, not C. Sure, having those things in rust is nice but, my point about the above line is, he's talking out of both sides of his mouth (with all due respect).

I don't want to come across as dissing rust. I've only tinkered with it and liked the parts I saw but feel some of his comments are misplaced.

EDIT: Obviously no one gets my point after twice explaining, that he's complaining about badly written code by bad programmers as his reason for dissing C, so I'll refrain from commenting anymore.

<comment><USER34> > That is a fault of the programmer, not C.

It's common to hear this line from the C fandom, and very rare to hear a serious proposal for what to do with all this Bad Code written by Bad Programmers. The status quo is to rewrite the former from scratch, and totally ignore the latter in the hopes that they'll be magically pulled down to hell and have their hands burned off by daemons. As far as I know, that part doesn't actually happen. Instead, they just keep writing more Bad Code, and meanwhile the rewrites are just as liable to cause problems as whatever they replaced, because often as not, the people doing the rewrites also turn out to be Bad Programmers.

If pressed for actionable solutions, C advocates will sometimes mention tooling such as Valgrind and ASAN, as if merely having it exist guarantees that all C programmers are educated in its use and make it a part of their workflow. This clearly isn't the case. New programmers are still learning C from material written before such tooling existed. Old programmers are still recommending it. There's no path for Bad Programmers to become Good Programmers, except to be admonished in public to Stop Writing Bad Code.

Ultimately, I agree with you: The issue here isn't with the C language. It's with the people who use it. Their priorities do not include concerns like memory safety, and their normal response to questions of code quality is to make it somebody else's problem.

If the culture of the community were to change, I expect the language would follow.

<comment><USER35> Yes, and even more so for C++ than C.

</comment></comment></comment></comment></comment><comment><USER36> > You don't have to fight dependencies. It just works when you cargo build.

Unless you're using caret requirements, or tilde requirements, or wildcard requirements, or inequality requirements, or multiple version requirements, or dependency overrides.

By default, Rust, much like every other language I know of, does not require explicit versions or checksums for dependencies. This means it's up to the developer to work really hard to make sure their code will actually work as expected outside of their own build environment. This could be mostly avoided if more people used explicit version requirements in their code, but nobody seems to want to do this (which is strange, because your code is what needs specific deps, so why not keep the version requirements right there?)

edit: For all the duplicate comments mentioning cargo.lock: The official FAQ details how libraries do not impose requirements at build time ([https://doc.rust-lang.org/cargo/faq.html#why-do-binaries- hav...](https://doc.rust-lang.org/cargo/faq.html#why-do-binaries-have- cargolock-in-version-control-but-not-libraries)): _" Users dependent on the library will not inspect the library's Cargo.lock (even if it exists)"_. The user cannot be certain their app will always work, because they can't be certain that their dependent library has been tested on each other library dependency. Basically, there's no certainty if you use libraries.

The other thing people are missing is how being able to call duplicate conflicting versions of the same library where it is needed in your code would allow you to work around complicated bugs in large projects automatically, rather than having to find a magic combination of conflicting dep versions that work for your app and its dependencies. Apparently nobody here has ever tried to manage more than one OpenStack tools tree for use by the same application.

<comment><USER37> > call duplicate conflicting versions of the same library where it is needed > in your code

Cargo already does this automatically if two of your dependencies depend on conflicting versions of the same library.

And for what it's worth, the libraries on crates.io seem to follow semver closely enough that the problem you describe doesn't really come up.

<comment><USER36>
      > > call duplicate conflicting versions of the same library where it is needed in your code
      >
      > Cargo already does this automatically if two of your dependencies depend on conflicting versions of the same library.

Assuming this is the case, your code doesn't specify which version of what function to use. So how could Cargo know which to use?

<comment><USER6> To be clear, Cargo will attempt to unify versions as much as it can. If it can't, you'll get multiple copies.

For example, let's say my project depends on two libraries; A and B. Both depend on library C.

If A depends on C version ^ 1.0.0, and B depends on C version ^ 1.1.0, and 1.2.0 is the latest version of C, then both A and B will end up with C 1.2.0.

If A depends on C = 1.0.0, and B depends on C version = 1.1.0, then you'll get two copies of C.

<comment><USER36> And when _A_ calls something in _B_? For this example, let's bump the major rev.

 _B_ is expecting _C = 2.0.0_. _A_ is expecting _C = 1.0.0_. _A_ makes a call to _B_ , which it passes to _C_. Does _A_ know that _B_ now expects to be called differently, since _C_ is also significantly different now? According to the above requirements, no version of the deps exist that could allow the app to execute correctly, even though it will technically build fine.

The way to resolve this would be to say _A_ requires _C < 2.0.0_, and simply fail to build until someone fixes _A_. But you probably won't even know about this conflict until someone tests the app with a specific feature of _A_ that conflicts with _C >= 2.0.0_, the build fails, someone figures out the conflict, and updates the requirements.

But you can only know this, and add this requirement, once you have found the conflict. Thus code in the present, even with dependency requirements, may be indeterminate in the future. (Unless you walk back through all calls in the code to find calls between multiple dependencies that eventually land on conflicts... but I don't think that is possible in Turing-complete languages)

If you pinned the version in each function call in each part of the code, you could have the compiler or interpreter walk back through dependent code, identify mismatches, retrieve a compatible dependency, and continue execution. Or at the very least throw warnings all over the place when code is running using dependencies it wasn't written for.

<comment><USER6> You get a type error, which was actually funny, given that the message used to say something like "expecting type T, got type T".

Funny enough, what you describe is theoretically possible in JavaScript, but strangely enough, it seems to work... it's something I've long been trying to come up with a POC exploit for.</comment></comment></comment></comment></comment></comment>


Pebble 4.0 Apps and Firmware Released - <AUTHOR> https://blog.getpebble.com/2016/08/30/fw4-0/ <comment><USER2> Kudos to Pebble for being the one smartwatch producer who understands their product. A smartwatch is about checking the time, notifications, and other simple information at a glance. It should not require focused attention, it should not require much maintenance (daily charge, anyone?), and it should not be physically obtrusive. It's job is to be a seamless part of the fabric of your daily life.

I loved my pebble, but when it died I decided to try something else, one of the fancier watches. I bought the samsung gear because it has the longest battery life of the non-pebble market (2 days), it's waterproof, and it looks unobtrusive. It's fine, if you disable wifi, turn the screen brightness down, and disable most of the builtins. But then I basically have a pebble with a shitty battery.

My next watch will be a pebble, because they understand the point of a smart watch.

<comment><USER3> I do charge my Pebble Time Round daily, and it's not waterproof :/

Yet I still backed the Pebble v2.

<comment><USER4> The PTR is a bit of a different beast: they sacrificed battery life and water resistance for styling. The result is (IMHO) the best-looking smartwatch available. I've been drooling over the PTR ever since it came out (I have an OG Steel). When they announced the "limited-edition" polished gold model during their Kickstarter campaign, I jumped at it, even though it will effectively a previous-generation model (I also got a Pebble 2 to use as a "beater" watch).

I think that Pebble understands better than most that, to many people, a watch is a piece of jewelry more than it is a gadget or piece of equipment—hence why very expensive watches often have _less_ functionality and reliability than a $10 quartz Casio. IMHO, the PTR and OG Steel are the only two smartwatches on the market that really appeal to this demographic.

I think that Pebble's challenge is that the traditional watch market seems to be shrinking—most of the people I know that wear an Apple Watch or Android Wear are people that wouldn't otherwise be wearing watches, and are more interested in the gadget aspect. Regardless of hardware, I don't think that Pebble will ever be able to compete in that market; Pebble support will always be an afterthought for app developers, compared to the ease of the native Apple and Android SDKs. In my experience, Pebble is already falling behind here—the quantity and quality of apps isn't that great (though perhaps I'm missing out on some good apps because my Steel is too old?). They do seem to realize this, and seem to be actively trying to build a larger developer community.

Also problematic for attracting developers: the Pebble app store has no built- in payment facilities, and developers must resort to clunky third-party solutions (such as KiezelPay) to sell paid apps and watch faces. This might not be Pebble's fault, though—I'm guessing that they're restricted by the requirements placed on them by Apple (and perhaps Google) to be in their stores.

</comment></comment></comment><comment><USER5> I'm really disappointed with Pebble.

I had a Pebble Steel (the original Steel) and it was great for a while. But when they introduced version 3.0 (I think?), which brought on the new interface I pretty much stopped wearing it. I'm not a heavy calendar user, except when it comes to work. The 3.0 update was based on the idea that users love using the calendar to schedule their days.

That one primary change took away from the simplistic interface that the earlier versions had and made the Pebble more of a chore to keep up with. I didn't want to be bombarded with notifications about tasks/meetings at work, and I certainly didn't want them showing up in the main day view. But then that single today view was mostly unused and empty.

It's pretty unfortunate, IMO. I enjoyed using it up till then. I guess I could give it another chance but at this point the Original Steel has likely reached its end of life, at least with respect to new updates.

<comment><USER6> I don't mind 3.0 (although the timeline doesn't really do anything for me), I just hate the way their "privacy" policy makes something that should be personal and trustworthy (a wrist watch) into a Trojan horse to vacuum every scrap of personal information for them to later sell on.

<comment><USER7> Wait, what? Do you have more context? I hadn't heard about this.

<comment><USER8> Not sure what taneq was referring to - but I was _very_ unpleasantly surprised the first time I got the "Pebble Health This Week" email showing me my sleep and step tracking for the last week _from their cloud service_.

That's 100% not something I'd ever intentionally sign up to "share" \- which means they either opted me in without consent, or used a dark pattern to trick me into consenting to something I wouldn't have if it'd been clear it meant my watch/app was going to send all my activity/movement data to "someone" with no way for me to know what they were gonna use it for or who they were gonna share it with.

I didn't cancel my Kickstarter pledge (my third, I've got the original and the Time) - but I _very_ seriously considered it (and still might just flip it on eBay when it arrives)...

<comment><USER6> Dark patterns:

1) They accept your order without even a mention of the T&C, EULA or privacy policy (at least as far as the checkout, I'm not putting my card number in to check for a popup during the payment process).

2) When you receive the product and go to install the app, in tiny print below the signup form they declare that by signing up, you accept the T&C. (This text is visible here: [https://youtu.be/GAYL034-j0I?t=1m19s](https://youtu.be/GAYL034-j0I?t=1m19s))

3) By accepting the T&C, you agree to the privacy policy linked from within the T&C.

In my book, this is not acceptable behaviour.

</comment></comment></comment></comment></comment><comment><USER9> I recently got a Pebble Time Round and love it. Never wanted a watch before.

Few watches provide vibrating alarms, but Pebble's helps keep me on track during the day without disturbing everyone around me with beeps. I wrote a tiny app to vibrate at different points of a meeting so I know how much time is left without boorishly checking a clock, and the development experience was smooth.

With the Android Light Flow app, I can control which contacts for which apps can send notifications, which helps keep me aware of things I need to be aware of without being a firehose of alerts.

</comment><comment><USER10> Starting with the firmware released in July it caused my iphone to lock up for seconds at a time in any other application. It took me a long time to narrow it down to the pebble app, but that was definitely the culprit.

Before I figured out that it was the pebble, I thought it was bluetooth itself - because when I turned off the bluetooth, the phone acted normally. Which sucked because I use about 6 bluetooth devices with my phone. Two cars, headphones, and indoor/outdoor home entertainment systems.

6+ with always the latest iOS if any of you pebble people are reading this. It's been a nightmare for the past two months, what was otherwise an absolute brilliant experience up until that point. This is a pebble time kickstarter edition.

<comment><USER11> The bluetooth stack on iOS isn't terribly stable. I used to blame the Pebble for it's disconnects until I discovered that it corresponds with the whole stack going out.

I've never had a problem with my phone locking up and neither has my wife but some people seem to have constant problems and some none at all. Bluetooth has never struck me as a particularly stable technology in general.

Pebble has been working on going full Bluetooth LE and dropping the regular Bluetooth connection. I'm not sure what the progress is on this (or if they abandoned it) but it would probably improve stability and battery life.

</comment></comment><comment><USER12> I loved my Pebble, but Android Wear offers such a superior experience when it comes to notification management. The only thing I use my watch for is processing incoming notifications (such as liking a tweet, archiving an email, replying to a Slack message, etc.) The 4.0 release notes hint at the power of the Android notification system, and it baffles me that Pebble still doesnt fully integrate with it.

I'm afraid that Android Wear watches will improve on the battery life and outdoor visibility front faster than Pebble will improve on the software front.

<comment><USER13> I highly doubt Android Wear will improve on battery life to compete with the Pebbles short of a huge scientific breakthrough.

A full charge of the Pebble Time lasted me 5-6 days.

<comment><USER14> They can increase battery life by making the watch bigger and heavier. Don't laugh -- okay, do laugh, but it's surprising what people will put up with. We used to think that 6" phones were ridiculous.

<comment><USER15> It's ridiculous because they were making them thinner too.

</comment></comment></comment></comment><comment><USER16> I somehow think that Pebble is underutilized because of a bad price- performance point, which they are attempting to make up for by positioning it as a high-end watch, not a modern smartwatch.

Related to this, are there any other low-end (in terms of hardware; I'm thinking something cheap and Chinese) smart watches, which allow uploading custom apps to the watch itself?

<comment><USER17> I think this is a very interesting idea since now some of the heavy users really want to keep their data to themselves. There might be a market for these

</comment></comment><comment><USER18> Just downloaded the update. It managed to crash the first time round (also really first time Pebble watch crashing on me). I'm guessing the watchface wasn't updated to work properly with the new timeline preview ("Glances") - I'll debug it if it crashes again.

So far I'm very happy they've updated the Pebble Health watchapp - it's finally usable now (and quite nice), as it display daily stats for last week in nice bar graphs. Also I have an impression that Timeline is a bit more responsive/faster now.

I'm pretty happy with what Pebble is doing (though Health interface on the mobile app could use some further rework to provide more/better information). Can't wait for the Time 2 watches to start shipping!

<comment><USER19> I had the same issue and rebooting my watch (not hard reset, just reboot [press and hold the back and select (middle button)] for 10 seconds until the pebble logo shows) fixed the problem. Just in case anyone else has this.

<comment><USER18> Yes, reboot seems to fix the problem in some cases. My watch didn't crash again after the reboot earlier today.

</comment></comment></comment><comment><USER20> I really hope Pebble is able to stick around for a while. I got an original Pebble and stopped wearing it after a couple of months, but picked up a Pebble Time Round on a whim and have been wearing it solidly.

I know it doesn't have all the features of an Android Wear or Apple Watch, but it does most of what I need (notifications and music control) and looks absolutely fantastic - I receive compliments on the watch even before people find out it's a smartwatch, and they're usually blown away when they find out what it can do.

The recent health additions make sense - while they don't blow me away, getting a step tracker for free is no bad thing.

</comment><comment><USER21> With regards to smartwatches , the Chinese have done a great job at reducing the prices(as always).

But the software isn't great(unless it's wear). So I'm curious - why does nobody release a decent smartwatch is , that supports apps, and can run well on a cheap($50) watch ?

At that price point, many new users might be interested.

<comment><USER22> The problem with smartwatches today is it's still unclear what type of apps they should run. So you might be able to create super smartwatch that's just as powerful as a smartphone but is that what people want?

<comment><USER23> I was into smartwatches back in their early 80 and 90's versions.

There is nothing interesting on this third wave for me personally versus what was already possible.

I see it as a solution the vendors are looking for, to sort out the increasingly stagnant sales of smartphones and tablets.

Specially in the countries where people don't switch their phones every two years, which is the majority of the world actually.

</comment></comment></comment><comment><USER24> Do any of these smart watches allow for extended swimming? Most of my workout is swimming laps for an hour a day.

<comment><USER25> Besides fitness tracking, what's the benefit you find for wearing a watch inn the pool? I used to wear my polar in the pool with my strap, but when I got a Garmin a few years ago it couldn't reliably track my heart rate anyway, and the GPS went wacky from being on the end of my arm when I was out on ocean swims.

You want to know the time when you're swimming?

<comment><USER15> Stroke count, pool lap times, if devices has indoor swimming support. Of course this is moot for casual swimmers.

Regarding outdoor swimming support, the device has to support openwater swimming, because then it contains algorithms to smooth out the GPS signal (it goes off when arm goes inside water). Other option is putting the device below the swimming cap, or a swimming bouy that you drag with you.

Heart rate is a different beast. Your Polar worked below water because it used their own proprietary signal that can be recorded under water. Garmin uses ANT+ which doesn't work there.

They do have a special HR belt called HR Swim (and HR TRI for outside swimming), that pairs to device, then records HR on its own while swimming. After workout it uploads the recording to the watch which combines both data together. Only top triathlon devices support those.

<comment><USER25> I wasn't aware devices had stroke count or lap count capacity

</comment></comment></comment></comment><comment><USER26> Their continuos lack of support for RTL languages is making me sad. It's 2016.

</comment><comment><USER27> Meh, no API for direct access to Bluetooth (they promised for the end of last year on the Pebble Time Kickstarter).

I still use a lot my Pebble because, unlike almost everything else, you can swim and sleep with it (because has enough battery life). But the Samsung Gear Fit 2 does look tempting and is the only non-Pebble that can also do both.

<comment><USER6> There's libpebble2 which pretty comprehensively covers the basic features if you want to talk to the watch yourself ([https://github.com/pebble/libpebble2/](https://github.com/pebble/libpebble2/)) - or is that not what you meant?

<comment><USER27> It comes very close, but still misses.

But I was dreaming about a little more, such as rssi measurements from the Pebble itself or scannig Bluetooth tokens proximity.</comment></comment></comment>


Ask HN: market size -- how to estimate? - <AUTHOR> How do you estimate the size of a market? As a marketing/business newbie, I don't know how to go about figuring out how big a market may be, especially if there aren't already statistics and numbers already gathered. We might be able to find out how big the market is for small business accounting, for instance, but for more niche markets -- as a business development person, how would you go about figuring out a market size in size and potential revenue? <comment><USER2> The best answer to this I've seen is here:

[http://www.reddit.com/r/IAmA/comments/9s5k3/iama_i_am_a_high...](http://www.reddit.com/r/IAmA/comments/9s5k3/iama_i_am_a_highprofile_silicon_valley_venture/c0e7dit)

The entire thread is gold, by the way.</comment>


Turning minor-key songs major - <AUTHOR> http://theweek.com/articles/467109/sad-songs-made-happy-amazing-art-turning-minorkey-songs-major <comment><USER2> Shameless plug for my own minor version of the Beatles' "Blackbird" — my own guitar playing mashed up with the original Paul McCartney vocal (which I extracted from the Beatles recording by abusing the stereo spectrum).

[https://www.youtube.com/watch?v=NAb9V08zcBE](https://www.youtube.com/watch?v=NAb9V08zcBE)

<comment><USER3> For those who don't know, Adrian is both an excellent jazz/acoustic guitarist AND the co-creator of Django :-)

<comment><USER4> Ah, that would explain the inspiration for the name.

</comment></comment></comment><comment><USER5> A classic of this sort is this Star Wars major/minor swap: [https://www.youtube.com/watch?v=3ppoRHBtwCY](https://www.youtube.com/watch?v=3ppoRHBtwCY)

No editor magic, just some really good live Electone playing.

<comment><USER6> It's like hearing the other side of the music. The majorized version of the Imperial March sounds the way the empire must think of themselves to justify their actions.

<comment><USER7> You'll like the soundtrack to Tie Fighter. It has plenty of heroic imperial music (and a Star Wars theme that would have been perfect for Rogue One!)

<comment><USER8> There are some interesting musical nerd breakdowns of the music that did make it into Rogue One on YouTube. Giacchino only had a couple weeks to put that soundtrack together, and did a remarkable job given the huge time crunch. Because Giacchino is himself a music nerd, there are some interesting major/minor swaps in it from well known Star Wars leitmotifs.

</comment></comment></comment></comment><comment><AUTHOR> It may be worth clarifying that these are _not_ covers (which would be musically interesting, but not technically impressive like what we have here)

It's likely that most of these versions are not even reconstructed from the original multi-tracks : it's possible to get this result with nothing more than the original song audio + editing in Melodyne.

This is of course related to yesterday's story about Auto-Tune ([https://news.ycombinator.com/item?id=15483145](https://news.ycombinator.com/item?id=15483145)), of which Melodyne is a more capable competitor these days.

<comment><USER4> Are there papers anywhere on how Melodyne works?

<comment><USER4> I found the Melodyne patents (translated from German into English): [https://www.google.com/search?tbo=p&tbm=pts&hl=en&q=ininvent...](https://www.google.com/search?tbo=p&tbm=pts&hl=en&q=ininventor:"Peter+Neubäcker")

</comment></comment></comment><comment><USER9> I'm so conflicted on these at times. I mainly dislike the original title: "Sad songs made happy."

There is nothing that says a major key _must_ be "happy" and there is nothing that says a minor key _must_ be "sad." It's also interesting to note that google claims that Losing My Religion is in the key of C Major:

[https://encrypted.google.com/search?hl=en&q=key%20of%20losin...](https://encrypted.google.com/search?hl=en&q=key%20of%20losing%20my%20religion)

The chords are, according to Wikipedia, Em, Am, D, G.

<comment><USER10> Ionian is not the only Major mode, and aeolian is not the only minor mode. For the former you also have Lydian and Mixolydian. For the latter there are Dorian, Phrygian and the rarely used Locrian.

<comment><USER11> Mixo is usually considered dominant instead of major. There's also Lydian #6 for those times when Lydian just isn't major enough.

</comment></comment></comment><comment><USER12> How about no key?

[https://youtu.be/4niz8TfY794?t=278](https://youtu.be/4niz8TfY794?t=278)

</comment><comment><USER13> Can someone recommend a good tutorial for key shifts in Melodyne? I wish I could learn how to do this for other songs.

I'm also interested in chord progressions. I wish I could tag my iTunes library with the Roman numerals for each song. But I don't know of any automatic way to do that.

Read the SuspiciouslySimilarSongs list, or watch the 4 chord song by Axis of Awesome to know what I'm talking about. The pop-punk chord progression is famous, but there are other songs that sound similar.

(e.g. Hall & Oates - Maneater, and Stevie Wonder - Part Time Lover, or Linkin Park - New Divide and The Offspring - Gone Away).

<comment><USER14> You might want to check out HookTheory - [https://www.hooktheory.com/trends](https://www.hooktheory.com/trends)

It's a big database of songs and their progressions, with a lot of other stuff (a snazzy composing app, a set of music theory ebooks which I've not read, etc).

<comment><USER13> Thanks! It's good, and is correctly showing some similar songs.

HookTheory doesn't use Roman Numeral analysis though. I like that language, because it's easy to compare songs that are modulated to different keys. For example, Forget December - Something Corporate (D F C1 G) and New Divide - Linkin Park (Em G D A) are both ii-IV-I-V.

[http://vjmanzo.com/clicheprogressions/index.php?title=Catego...](http://vjmanzo.com/clicheprogressions/index.php?title=Category:ii_IV_I_V)

HookTheory says that Fm Ab Eb Bb in the key of Eb is also like Closing Time - Semisonic. But vjmanzo's site correctly notes that it's shifted over 2 places: Closing Time is I-V-ii-IV instead of ii-IV-I-V.

I've figured out how to get the real notes out of an MP3 using Melodyne, which is how I found the notes for Forget December. But I had to search online for the key, and then look up the Roman Numerals in a table. I wish I could just throw in an MP3 and get a Roman Numeral chord progression out of the other side.

<comment><USER14> Hey, sorry for the late reply. HookTheory _most definitely_ uses Roman Numeral notation. In the link I posted, change the "Key" pulldown to "Rel", and then you can choose each numeral in sequence.

Or, for example, to see all the songs HookTheory thinks use ii-IV-I-V, the link would be:

[https://www.hooktheory.com/trends#node=126.96.36.199&key=rel](https://www.hooktheory.com/trends#node=188.8.131.52&key=rel)

> HookTheory says that Fm Ab Eb Bb in the key of Eb is also like Closing Time > - Semisonic. But vjmanzo's site correctly notes that it's shifted over 2 > places: Closing Time is I-V-ii-IV instead of ii-IV-I-V.

I don't know what you're referring to here, but it sounds like HookTheory was just suggesting similarities. HT's actual entry for the song you're referring to is here, and has the same progression you mentioned.

[https://www.hooktheory.com/theorytab/view/semisonic/closing-...](https://www.hooktheory.com/theorytab/view/semisonic/closing- time)

How this relates to your link I have no idea, it shows 404 for me.

</comment></comment></comment></comment><comment><USER15> These pieces make me viscerally angry. It's grating like Neil Cicierega but without the glee in doing it. Jeeeez.

</comment><comment><USER16> I guess I'm not very good with music. These all sound basically the same as the originals to me.

<comment><USER17> You'd probably hear the differences played side-by-side. There are few truly 'tone-deaf' people. Music is much like anything else -- capabilities (including memory for a song's tonality & chords) are increased by interest, exposure to a wider range, close study, etc.

<comment><USER18> The one that really did make a dramatic difference is notable because it didn't have the human voice involved. I'm talking about the Star Wars theme. In that one, the difference between major and minor was dramatic. But for vocal music, the emotional cues seem to override the major/minor distinction.

<comment><USER17> To me all of them sounded dramatically different. Then again I'm a musician of sorts. I'm sure there are all sorts of variables, including what sort of music(s) a person typically listens to.

</comment></comment></comment></comment><comment><USER19> my favorite is the happy version of "careless whisper":

[https://soundcloud.com/majorvsminor/careless-whisper- george](https://soundcloud.com/majorvsminor/careless-whisper-george)

</comment><comment><USER20> It's a pretty standard classical music trick to switch from minor key to major (or vice-versa), just for variation purposes, and repeat the theme in the major key. So this is what this sounds like to me, like Beethoven got a hold of REM.

</comment><comment><USER21> I have done this manually on guitar for years, playing around. I would play major key 'Bad' somewhat differently than that.

</comment><comment><USER22> When you change early 80s thrash metal from minor key to major key, you get something that's pretty close to punk rock. Metallica's Kill 'Em All in major key is a fun listen: [https://www.youtube.com/watch?v=i98v54fPYxU](https://www.youtube.com/watch?v=i98v54fPYxU)

</comment><comment><USER23> One other interesting example: Mahler's first symphony, third movement ([https://www.youtube.com/watch?v=U5A5tFyXQio](https://www.youtube.com/watch?v=U5A5tFyXQio)) which incorporates a minor-ized version of the classic (major) Frere Jacques tune as a motif.

</comment><comment><USER24> Giant Steps in C. Jazz musos will appreciate

[https://www.youtube.com/watch?v=qTYzYpb1MY0](https://www.youtube.com/watch?v=qTYzYpb1MY0)

</comment><comment><USER25> The Nirvana sounds so utterly bizarre to me - I suppose because I don't hear the original as tonal to begin with.

</comment><comment><USER26> There's no love song finer but how strange the change from major to minor every time we say goodbye.

</comment><comment><USER27> This is so 2013.</comment>


'Corporations Are People' Is Built on a 19th-Century Lie - <AUTHOR> https://www.theatlantic.com/business/archive/2018/03/corporations-people-adam-winkler/554852/?single_page=true <comment><USER2> If corporations were people, they would be subject to things like the 3 strikes law and the death penalty. People don't get the chance to simply pay fines for harming people.

<comment><USER3> The employees of corporations are absolutely subject to things like the 3 strikes law and the death penalty for things they do for the corporation. So it makes sense that they have the same rights when they do things for the corporation.

It would be inconsistent to say: If you do something in the employment of a corporation you have same duties as anyone who acts on his own, but none of the rights.

<comment><USER4> Yes but, if corporations _themselves_ are legally persons it should be the _corporation_ that is tried for murder, and potentially sentenced to death. I'm not sure how you'd imprison a corporation under the 3 strikes law, but I leave that as an exercise for the Supreme Court

Otherwise they are wanting the rights of a person with none of the obligations and thus should not have them.

</comment></comment></comment><comment><USER5> Let them be people, with all of the liabilities, responsibilities, and legal obligations as people. Otherwise what are we really talking about? The rights and privileges of personhood, but without any of the accountability? How absurd it is.

 _Indeed, the faux precedent in the Southern Pacific case would go on to be used by a Supreme Court that in the early 20th century became famous for striking down numerous economic regulations, including federal child-labor laws, zoning laws, and wage-and-hour laws. Meanwhile, in cases like the notorious Plessy v. Ferguson (1896), those same justices refused to read the Constitution as protecting the rights of African Americans, the real intended beneficiaries of the Fourteenth Amendment. Between 1868, when the amendment was ratified, and 1912, the Supreme Court would rule on 28 cases involving the rights of African Americans and an astonishing 312 cases on the rights of corporations._

Absurd!

<comment><USER6> What this shows is that judicial decisions are not based on "lies" or anything else. They are _opinions_ ; judges make decisions and work backwards toward reasons. The very existence of dissenting opinions shows that any case can be decided any way a justice wants. In the 19th Century, that meant that justices took away rights that the 13-15th Amendment tried to to protect.</comment></comment>


Ask HN: How do you write production level code? - <AUTHOR> <comment><USER2> Work on an open-source project or at a company with someone who knows the answer to this question and has been doing it for many years.

A frustrating fact about coding is that you don't know what you don't know. You feel like an expert, and then someone else shoots you down by introducing you to a new security risk you've never heard of or a technique that's better than the one you've been using.

This risk is a lot lower when you have an experienced team around you. Whatever you _might_ be missing, someone else has a chance of catching it.

It's also much easier to write production-level code when you use a language with robust typing and mature, widely-used, well-tested libraries.

</comment><comment><USER3> Write the smallest usable chunks of code and turn them into functions/methods. Add input parameter testing, exception handling and have outputs clearly defined. Write tests for each of these small chunk of code. Group these small chunks into groups and build up modules. At each module level write test code that executes all the integrated paths and keep working your way up.

Of course what I wrote is a bit of an oversimplification but overall it is how I write real production code that must be reliable.

In general I usually wind up with far more test code then executing production code if I do this all. But like everyone I will get lazy on some of it, which is usually where I find some error later.

Also, this basic design lends itself to either a functional or OO style of coding. Modules need not be classes but classes can certainly help you build modules.

Find people that will give you feedback, even if they aren't in you immediate network or peer group. It is amazing how helpful people can and will be if you just ask, respect their time and be honest about your level of experience and understanding.

</comment><comment><USER4> When you cannot work with other experience people or participate in open- source projects. Try these things.

1\. Take a task and implement it in the most laziest way (like implementing everything in a single code file)

2\. Try to make the implementation "look beautiful" (with proper indentation, etc)

3\. Try to make the instructions in your code analyze the return codes, check the input parameters to functions, catch exceptions, split them into various files, functions, classes etc by adding more code.

Third step is where you will try to learn more from the programming language that you have chosen. See [https://gist.github.com/nareshv/50fa0884d09622792e34](https://gist.github.com/nareshv/50fa0884d09622792e34) for example

Once you master the step-3, you will always do begin with these things when you start implementing your project.

Source: Personal experience.

</comment><comment><USER5> Work in a team with other experienced people. Trying to figure this out on your own is something that is tough to learn.

</comment><comment><USER6> If you have to ask this question maybe you haven't seen much "production" code. It's pretty variable. Open source projects can be a great help to see what's possible. If it's easy to understand and well used it might be pretty good.</comment>


How to read a patent in 60 seconds (2010) - <AUTHOR> http://www.danshapiro.com/blog/2010/09/how-to-read-a-patent-in-60-second/ <comment><USER2> When I did write patents the lawyers were telling us: \- Everything is patentable, it is the enforcing part that is hard (i.e. remember the computer mouse) \- Patents are only valid if you have money to enforce them.

And then I heard from some start-up about another: \- What are they offering?, they don't even have IP. Nobody is going to buy them...

I got to the conclusion that they are more than any other thing a way to demonstrate value for small companies and a tool for big companies to delay competition from new entrants. I haven't understood yet how patent offices take care of the prior art...

<comment><USER3> Came here to say the same.

I patented a thing while I was at university - there was some prior art but I'd come up with a neat solution (literally as well as figuratively) that actually worked - got as far as building a few prototypes.

I had a degree to finish, and barely managed to scrape the cash together for the UK and European patents. Let it sit, naively thinking that someone would want to develop this tech and would be in touch.

About six years ago a large corporation filed a patent that was substantially identical to mine - they replaced a spiral with a circle, as it's cheaper to manufacture, which, while covered by my claims, was secondary to the device. They shortly thereafter took the product to market. They did at least cite me in prior art.

From what I can gather it wasn't a commercial success, it added too much cost to the product it enhanced, but even if it had been, my recourse would've been the square root of fuck all.

So yeah. Patents are for corporations. They're there to stifle innovation and shut the small guy out.

Which is a shame, as that's literally the exact opposite of their purpose - they were developed to bring about a system that would release ideas to the public domain after a set period of benefit for their creator.

My "sit on it" behaviour is admittedly not their purpose, but neither was their "trample on it".

<comment><USER4> Selling to a patent troll is really the only viable option in that case.

Which really only makes lawyers any money. Which honestly seems to be the main point of the patent system.

</comment></comment></comment><comment><USER5> Funny to see my old blog post mysteriously resurface on the front page. I should note that IANAL but have spoken to many lawyers about this post over the years and am happy to answer any questions I can about it.

<comment><USER6> I'm working on a startup right now that involves hardware. How worried should I be about existing patents? Thanks!

<comment><USER5> My $0.02: If you don't have a lot of money, ignore patents for now, but realize that as soon as your ideas are public they are internationally unpatentable.

If you have a little money, file 1-2 key patents on your core ideas.

If you're rolling in money, hire a patent firm to chart the landscape for you in a way that doesn't expose you to willful infringement.

Note: the entire system is a steaming morass; I try to be pragmatic about it, but don't disagree with those who want to flip the table and ignore the whole mess.

<comment><USER7> _> ... filing a provisional patent starts a 1-year clock where, if you don't find the money and time to file a real patent, your IP irrevocably enters the public domain._

IANAL, but I believe this is incorrect. My understanding is that if you don't follow up with a non-provisional ("real") patent application, the provisionals don't count as prior art, and in fact might as well not exist. This is because provisionals are not published and cannot be discovered until the corresponding non-provisional is published. Would prefer if an actual patent lawyer could confirm, however.

<comment><USER5> You're right, fixed. Thank you. What I was thinking of was this:

1) File provisional

2) Publicly disclose

3) Provisional expires

At this point, your public disclosure counts as prior art.

<comment><USER8> Isn't provisional also public info that anyone can access?

</comment></comment></comment></comment></comment></comment><comment><USER9> Standard advice to engineers:

Don't read patents, you are exposing yourself to triple damages for knowing infringement.

If you need a patent search done, get someone else to do it

<comment><USER10> Triple damages? as in, if the opposing side can prove that you sometime read the patent in case, you get punished 3x because it's the same as willfully violating the patent?

Wow.

<comment><USER11> I have actually been told by legal people at my employer that if it can be proven that anyone at the company has read a particular patent, this can occur. So, yeah, the system is rediculous. But no looking at any patents related to software for me, I guess.

</comment></comment></comment><comment><USER12> One could reasonably make this same point about EULAs. From time to time, I'll read the EULA and, no, it doesn't take so long after you skip all of the "PRODUCT OFFERED WITHOUT WARRANTY," and "COMPANY CORP MAY HEREIN BE REFERRED TO AS 'WE' OR 'US'".

You just skip to the part about fees, termination policy, what they'll do with your data, and call it a day.

<comment><USER13> I just click "Accept" because I am a terrible human being that way. Hasn't bitten me yet, but I just assume that it could happen any day now. Then again I think that the ones that could absolutely devastate you wouldn't actually hold water in court, would they?

</comment></comment><comment><USER14> Any tipps for searching for patents? Or making sure if a patent exists or not? For example I would be surprised if the SET card game wasn't patented [1], but I couldn't find it.

[1] [https://en.wikipedia.org/wiki/Set_(game)](https://en.wikipedia.org/wiki/Set_\(game\))

<comment><USER15> Google has an excellent tool for searching US and international patents at [https://patents.google.com](https://patents.google.com)

<comment><USER14> I still can't find the SET patent. How do I make 100% sure that it doesn't exist? Should I skim through all the existing card game patents released in a plausible time frame or what?

</comment></comment></comment><comment><AUTHOR> I've never really understood why people bother with dependent claims when in a sense only the independent claim counts.

[http://patentlyo.com/patent/2008/05/theory-of- depen.html](http://patentlyo.com/patent/2008/05/theory-of-depen.html) shows some reasons, but I don't find them terribly compelling.

Would one of our resident lawyers like to enlighten me? Is it really simply tactical, and in a perfect world they wouldn't be needed at all?

<comment><USER5> IANAL (just the OP) but - imagine you invent a self driving car, and you'd like to patent it. Your lawyer tells you not to read prior art, because you don't want to be liable for willful infringement. Also you've been living in a cave, so you don't really know what prior art there is out there. You write claims like this:

Independent claim: Self driving car. (You really hope you get this, but it's so broad, you probably won't).

First dependent claim: The previous claim, where in the self driving mechanism is an actuator applied to a gas pedal. (Now you're going after the specific way you accomplished the broad problem - hopefully, even if someone's patented a self driving car before, they did it some other way, so you can protect your preferred category of solutions, and force competitors to take a different approach).

Second dependent claim: the first dependent claim, where the actuator is a brick. (If all else fails, you've at least protected the precise mechanism that you used - not enough to keep out a competitor, but at least enough to preserve your unique solution).

The patent office will often strike the independent claims but leave some dependent claims around, so you craft them strategically to get at least some protection.

<comment><AUTHOR> But if the patent office doesn't accept your independent claim, one of the dependent claims must become a new independent claim, right?

So it's simply for the process of getting a patent (and some cost issues with registration)? After the patent has been granted they are truly unnecessary?

<comment><USER15> You may have come up with what you think is a great new idea and several variations that are also useful. You claim the broadest one as an independent claim. And the refinements are dependent claims. The patent office may agree, and issues all claims.

If, later it turns out the big idea was not new, but the refinements are, then you may find yourself with an invalid independent claim but valid dependent claims (which are treated as though they stand on their own). Although you could have filed the dependent claim as independent just the same, it saves paper and cognitive time analyzing it, which is a good thing. And for that reason patent fees are more expensive if you add more independent claims rather than dependent.

</comment></comment></comment></comment><comment><USER16> I would be even more interested in something like "how do I file a patent".

But anyway, it was a great read.

</comment><comment><USER8> I failed to read the claim in 60 seconds for sure, here is a quick demo of the "independent claim":

" What is claimed is:

1\. A method for using traffic categorization to select use of different network configurations in a wireless network, the method, comprising: detecting an activity state of an application on a mobile device which traffic is originated from or directed to; detecting a time criticality of data contained in the traffic to be sent between the mobile device and the host server; determining a timing with which to allow the traffic to pass through based on the activity state or the time criticality; controlling communication use on the mobile device based on the timing with which the traffic is allowed to pass through; and selecting a network configuration for use in sending traffic between a mobile device and a host server in the wireless network based on an activity state of an application on the mobile device for which traffic is directed to or originated from, wherein a network configuration with a slower data rate is selected when the application is not interacting with a user.

2\. The method of claim 1, wherein, 3G, LTE, or 4G network is selected for passing through traffic when the application is active or when the data contained in the traffic is time critical.

3\. The method of claim 1, wherein, the activity state is determined by whether the application is in a foreground or background state on the mobile device.

4\. The method of claim 1, wherein the activity state is determined based on whether a user is expecting data contained in the traffic directed to the mobile device.

5\. The method of claim 1, wherein, when the data is not time critical, the timing with which to allow the traffic to pass through is set based on when additional data needs to be sent.

6\. The method of claim 1, wherein a network configuration with a slower data rate is selected when the application is running in the background.

7\. The method of claim 1, wherein a network configuration with a slower data rate is selection when the data contained in the traffic is not time critical.

8\. A system for categorizing traffic in a wireless network, the system comprising: means for detecting an activity state of an application on a mobile device which traffic is originated from or directed to; means for detecting a time criticality of data contained in the traffic to be sent between the mobile device and the host server; means for determining a timing with which to allow the traffic to pass through based on the activity state or the time criticality; means for controlling radio use on the mobile device based on the timing with which the traffic is allowed to pass through; and means for selecting a network configuration in the wireless network for use in passing traffic to and from the mobile device, wherein a network configuration with a slower data rate is selected when the application is not interacting with a user.

9\. The system of claim 8, wherein a 3G, LTE, or 4G network is selected for passing through traffic when the application is active or when the data contained in the traffic is time critical.

10\. The system of claim 8, wherein, the activity state is determined by whether the application is in a foreground or background state on the mobile device.

11\. The system of claim 8, wherein the activity state is determined based on whether a user is expecting data contained in the traffic directed to the mobile device.

12\. The system of claim 8, wherein, when the data is not time critical, the timing with which to allow the traffic to pass through is set based on when additional data needs to be sent.

13\. The system of claim 8, wherein a network configuration with a slower data rate is selected when the application is running in the background.

14\. The system of claim 8, wherein a network configuration with a slower data rate is selection when the data contained in the traffic is not time critical.

15\. A non-transitory machine-readable storage medium having stored thereon instructions which when executed by a processor causes the processor to perform a method for using traffic categorization to select use of different network configurations in a wireless network, the method comprising: detecting an activity state of an application on a mobile device which traffic is originated from or directed to; detecting a time criticality of data contained in the traffic to be sent between the mobile device and the host server; determining a timing with which to allow the traffic to pass through based on the activity state or the time criticality; controlling communication use on the mobile device based on the timing with which the traffic is allowed to pass through; and selecting a network configuration for use in sending traffic between a mobile device and a host server in the wireless network based on an activity state of an application on the mobile device for which traffic is directed to or originated from, wherein a network configuration with a slower data rate is selected when the application is not interacting with a user.

16\. The storage medium of claim 15, wherein the method includes selecting a 3G, LTE, or 4G network for passing through traffic when the application is active or when the data contained in the traffic is time critical.

17\. The storage medium of claim 15, wherein the method includes determining the activity state by whether the application is in a foreground or background state on the mobile device.

18\. The storage medium of claim 15, wherein the method includes determining the activity state based on whether a user is expecting data contained in the traffic directed to the mobile device.

19\. The storage medium of claim 15, wherein the method includes setting the timing, when the data is not time critical, with which to allow the traffic to pass through is based on when additional data needs to be sent.

20\. The storage medium of claim 15, wherein the method includes selecting a network configuration with a slower data rate when the application is running in the background.

21\. The storage medium of claim 15, wherein the method includes selecting a network configuration with a slower data rate when the data contained in the traffic is not time critical. "

<comment><USER17> > A non-transitory machine-readable storage medium having stored thereon > instructions which when executed by a processor causes the processor to > perform a method for X

Translation:

> do X, but with a computer</comment></comment>