Researchers answer a question about the decline of the middle class - <AUTHOR> https://www.washingtonpost.com/news/wonk/wp/2017/05/08/researchers-have-answered-a-big-question-about-the-decline-of-the-middle-class/ <comment><USER3> The peak for the average worker seems to revolve around 1965-1970, based upon various stats that I've read. This jives with my personal experience also. My father, who was employed in manufacturing as a foreman (and later, cost accountant, after earning his degree), was on his way up until the late 1970s. It was right around that time that manufacturing operations in the midwest and northeast started their first moves toward lower labor costs by relocating plants to the south and southeast (later, even this would not be enough and they would move to Mexico, China, etc.). The main purpose seemed to be union- busting. It practically killed our family, financially. My parents used up all of their savings (quite a bit, I might add) while my father tried, in vain to find employment. They had to sell their custom-built dream home (think modest 70s home, not modern McMansion monstrosity), and we were, technically, homeless for half a year while we lived with my aunt/uncle. My father eventually found employment as a cost accountant, but we had to uproot our lives and move to Florida. And, more importantly, my father's real earnings _never_ recovered and he never got back to the level he had previously earned.

There's a lot of evidence to show that all of this was intentional and orchestrated:

[http://www.laborrising.com/2013/07/union-organizing-and- the-...](http://www.laborrising.com/2013/07/union-organizing-and-the-business- roundtable-and-american-labor/)

Note, this was written in 1979, after about 10 years of the effects of the efforts of organizations like the Business Roundtable.

BTW, I can't help but add: the small hometown where I grew up in the midwest now has a pretty bad Oxy/Heroin/Meth problem on its hands.

<comment><USER4> > The peak for the average worker seems to revolve around 1965-1970

The era also coincides with massive amounts of women entering the workforce.

<comment><USER3> Yes, but they weren't closing and re-locating entire manufacturing plants because women were entering the workforce.

</comment></comment></comment><comment><USER5> Summary:

On average, workers born in 1942 earned as much or more over their careers than workers born in any year since

The trend has also widened the gap between the rich and everyone else as, overall, the economy has continued to grow overall but the bulk of those gains have ended up in the pockets of the affluent.

While economists have been concerned about recent data on earnings, the new paper suggests that ordinary Americans have been dealing with serious economic problems for much longer than may be widely recognized.

The new research shows that in the past, a good guide to forecasting typical career earnings among Americans of a given age has been their average income they were 25.

Young workers' incomes are still declining today, suggesting that their trajectories over the rest of their careers will be lower as well.

<comment><USER6> I suspect that the at 25 income prediction will be less and less accurate as a predictor given high value PhD's. In the past the rarity of those programs might have covered up the problem with using those estimates for that group, but as it grows it probably creates substantial challenges for such a metric. Similarly, with start-ups becoming more popular, income at Age 25 might value options at 0 and lead to an underreported value for anyone in a successful exit. Willingness to take risk with low income when young, might also lead to situations where founders are reporting 0 income at 25, but are likely to have successful careers regardless of whether they exit.

<comment><USER7> Statistically, those high value PhDs and successful exits are way off on the high end of the tail of the distribution for all 25-year-olds. I suspect they are not going to budge the median values at all.

</comment></comment></comment><comment><USER8> The article also doesn't take into account education and housing debt. Not only do you make less, more of what little you make goes toward things that would have been paid off after a few years. Add to that the expectation that the younger generation is footing the Medicare and social security bill for baby boomers and you have a case of generational servitude.

</comment><comment><USER9> I take most of these articles with a grain of salt. The Washington Post has not (lately, at least) been a source of hard hitting analysis. Additionally, this study has not been peer reviewed, but they certainly treat it as though it has.

Looking at the charts and the analysis - one concern raised is that workers starting out in 2010 had lower real wages than their counterparts from 1969.

A really simple explanation might be that in 2010 we were still in the deepest part of the biggest recession in recent history. What do you think that would do to starting wages?

I know there is a narrative they are trying to tell, but in the past 12-24 months they are so obviously biased I simply don't believe anything they write anymore.

Edit: I might add that I worry very much about the decline of the middle class. The problem is I don't trust any news source to tell me objective truths, and the more I dig for this information the more the black and white rhetoric doesn't seem to fit.

<comment><USER10> You are cherry picking on the 2010 issue. The graphs show lines for the beginning of every decade since 1980. The year 2000 was basically the peak of the .com bubble, and it still showed 25 year olds making less than 25 year olds in 1980.

I get your point about selecting data from any individual year, but the trend lines shown in the graphs cover entire periods.

</comment></comment><comment><USER11> I have seen a ton of these kinds of articles posted here over the years, but none of them touches on what PG wrote in one of his essays: the reason salaries were so high after the war and until the 70is were that the US was the only country that had a modern, intact industrial base and so it was worth it for the companies to overpay for labor, in the same way that it is worth it for a start-up to overpay for e.g servers.

Later, after the boom, they started to cut their overspending.

<comment><USER12> So where did the "excess" from the "overspending" go in your model? Surely it didn't bring up the standard of living worldwide, because we'd have noticed it by now. No, your term "overspending" is far too loaded for me to believe in.

I am far more inclined to believe the Investor Class has been doing their damndest to widen the wealth gap at every opportunity since WWII, and wouldn't you know it, all the numbers add up. It's much more like there was a healthy dynamic between management, investors, and the working class, and it's all been shot to shit in the name of quarterly profiteering and Ayn Rand "bootstrap" delusions.

<comment><USER11> After World War II, about the time the US was about to begin its boom, people in Holland had to go out near the coal trains so that they could pick up whatever coal had fallen off the trains, or they would have nothing to heat their homes with; Germany was flattened as was Japan and Korea. Meat rationing in the UK did not end until July 4, 1954 – that's almost a decade after the war. Japan did not start getting back on its feet until the Korean War.

I have been to Germany and I can personally assure you that the life they live now is nothing like it was in 1950. So yeah, there's your rising standard of living worldwide. Key point _worldwide_, although some of it also happened to US.

</comment></comment></comment><comment><USER13> I think it is actually a lot worse than household incomes suggest. Having a parent stay home is tremendously valuable to a household in providing childcare, food preparation and all sorts of other valuable labour. None of this gets measured in incomes/GDP but as soon as you have both parents working and paying for childcare, paying for prepared meals and so on it does get measured in household income and GDP. So when we just look at household income we're actually underestimating the decline because there also used to be more unmeasured value provided by stay at home parents.

</comment><comment><USER14> I don't mean to be sexist, but I've wondered purely out of curiosity if the decline in wages is related at all to the entry of women into the work force. You've nearly doubled the number of wage seekers without necessarily increasing the supply of jobs.

I also wonder if two income earners are likely to earn more money than a single income earner for a given labor demand, considering overhead of employment, which I think has also increased over time (e.g. benefits). That couple explain some of wage stagnation, I'd bet.

<comment><USER9> I don't think you're being sexist. I think that's a very good question. If we roughly double the supply of labor, but have roughly the same number of jobs - what would happen? Wages would naturally go down. It's obviously not that simple, but there's good reason to believe that the entry of more women in to the labor force put downward pressure on wages.

What will be interesting is if the more recent trend of young men leaving the labor force will put upward pressure on wages, or if the jobs will just disappear.

<comment><USER15> Why would we have the same number of jobs? If more women are working who didn't before, they will need some way to commute to said job, to buy work clothes as well as leisure clothes, have more disposable income, etc.

<comment><USER9> Yep, that's why I said "it's obviously not that simple". I also described "downward pressure" on wages, not a cutting of wages in half.

</comment></comment></comment></comment><comment><USER16> When I see a statement such as, Income in men declined 10-19% over several decades, I think:

OK. Why? Is the ratio of young/old different from before? Were those living on social security included in those stats? What does that have to do with wages? Is it because men are choosing different jobs? Is it because they are working fewer hours? Is it because they are choosing to earn less, because cable TV and internet connection are enough? Is it because cars cost less? Is it because, generally over the population, men are choosing activities other than work? Is it because feminists have changed women who have changed men into deciding not to marry women, generally over the population, which reduces the drive or opportunity to pursue larger incomes? Is the pay hidden somehow, more now than before, going to medical costs instead of salary?

The conclusions in the news article depend heavily on definitions for "middle class" and "workers" and seem to assume that wealth equals money and that income equals wages.

<comment><USER17> Consider that women and African Americans were exclusively fenced off on the fringes of the workforce.

Between increased domestic supply of workers, increased supply of foreign workers, globalization and demographic drag as we need to pay the pensions of the baby boomers with smaller cohorts of workers. Combine that with anti-labor policies and its a no brainer why earnings are dropping.

</comment></comment><comment><USER18> I wonder when it is going to become clear that America's economic growth has peaked.

I recently read that Warren Buffet made the point in 2006 that in order for America to continue growing as it has for the last century, the Dow would have to surpass 2,000,000 by 2099, and during the years 2000-2006, it didn't grow at all from its place at roughly 11,000 (but now it appears to be growing again).

Sidestepping the question of whether or not it _has_ peaked, and when that peak was/is, it seems to be in everyone's best interest to at least pretend that it has not, and perhaps, will never.

<comment><USER19> > America's economic growth has peaked

I assume you mean, the size of the economy has peaked. The rate of growth was never thought to be increasing (i.e., it didn't grow 4% one year, 4.1% the next, etc.).

This question is answered by well-known data, GDP growth. That popular number represents, effectively, the increase in the economy's size every year. The U.S. economy has grown and continues to grow every year since 1950, with the only exception being 2008, the worst year of the Great Recession.

[http://www.multpl.com/us-gdp-growth-rate/table/by- year](http://www.multpl.com/us-gdp-growth-rate/table/by-year)

<comment><USER18> I'm not talking about the _rate_ of growth peaking. I'm talking about the size of the economy.

You've only illustrated my point. Everyone is very highly incentivized to believe that the growth of the economy is infinite. I mean, just look at the numbers! It only grows, never shrinks.

Is it really possible for economic activity in a country to grow forever with no upper limit? If not, then what's the upper limit?

<comment><USER19> An interesting question, but I think theoretical at this point. The evidence is very strong, not only in the U.S. but in other advanced economies who all perform similarly. In addition to the evidence, expert opinion (economists) seem unanimous; that is, I've never heard one say otherwise.

Fundamentally, the size, i.e., the output of the economy is easy to compute: _Inputs_ (resources, such as labor and capital) x _Productivity_ (how much benefit is wrung from the same resources).

The inputs generally increase. One major input that increases is labor. As the population grows, there are more people doing productive work. Productive workers, which is almost everyone with a paying job and very many without one (homemakers, volunteers, etc.), produce more than they consume - an important point. It's not a zero-sum situation; adding people doesn't reduce everyone's slice of the pie, it makes the pie bigger.

Productivity also increases. You see it in SV every day, with better and better software, as one simple example. Every improvement in knowledge and technology, in every field, adds to productivity. Is there a limit to productivity? It's hard to imagine, but if there is then we're nowhere near it.

> Everyone is very highly incentivized

Or maybe the evidence is very strong. For example, is everyone is incentivized to believe the theory of gravity, or is the evidence very strong?

<comment><USER18> I appreciate that business is not zero-sum, but what happens to a non-zero sum when parts start getting subtracted from it? The population is growing at a rate of about 1%, but labor participation is down around 14 million people since 2002, and has not started to bounce back. And how does widespread underemployment, a growing deficit, and billions of dollars in debt owned to foreign countries play into the picture?

Call me Chicken Little but I don't see how economists can be optimistic about growth until all or at least some of these trends start going in reverse. Economic growth doesn't just result from coming up with snazzier software - <USER2> requires citizens to acquire and deploy capital.

<comment><USER19> A few thoughts, though I'm not an economist:

* 14 million is a big number, but it's less than 5% of the U.S. population. I do agree that it's a serious concern, but because of the welfare and economic opportunity for those people, and because of the social disruption of economic inequality; the economy in aggregate is doing well. For those interested, you can find the numbers here (you can adjust the years at the top): [https://data.bls.gov/timeseries/LNS11300000](https://data.bls.gov/timeseries/LNS11300000)

* Debt is a bad word colloquially, but in finance / business / economics, it's actually a great efficiency: Instead of useful resources (e.g., money) sitting around unused (e.g., in a vault), they are lent out to others to make productive use of. Financial institutions are like Airbnb for money - others get to rent your asset while you don't need it, and you make something from it. Borrowing is fine as long as you are generating more income from the borrowed funds than it costs you - e.g., as long as the software you build with the borrowed funds earns a better return than the interest you owe. Generally, that works out well or people wouldn't have a reason to lend or borrow.

* As of December 2015, of the total U.S. federal government debt, 40% was held by foreigners. Interest paid was $94.9 billion that year. The U.S. economy was ~18 trillion that year, so the debt service was ~1/180th of U.S. income; not a problem. Source: [https://fas.org/sgp/crs/misc/RS22331.pdf](https://fas.org/sgp/crs/misc/RS22331.pdf)

<comment><USER18> I'm glad you're not an economist, because neither am I!

I'm of the mind that the recent jump in indicators like GDP and the Dow are more likely a result of corporate stock buyback programs than any real recovery. Corporate America spent about 4% of GDP on buybacks just last year. Meanwhile the GDP grew by half that amount. Stock buybacks are specifically designed to move stock prices higher.

I understand that debt can be used strategically, but America is running consistently in the red. So although the part of the national debt that's foreign-owned is small, it represents wealth that has permanently left the country.

<comment><USER18> Eh, never mind. Guess I assumed that stock prices are included in GDP. Turns out they aren't.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> Technology is the elephant in the room, isn't it?

It's possible to make money with fewer and fewer employees, and it takes less money to meet our basic needs and entertain ourselves. The result is declining birth rate and income. It is going to continue in this direction and we don't know what to do about it.

<comment><USER21> Has the percentage of income spent on food and housing gone down?

</comment></comment><comment><USER22> When the syndicates stopped to get some respect from workers? It looks like correlated to the lowering of wages.

</comment><comment><USER23> I thought the question was going to be "why?" but instead the question they purported to answer was "when did it start?" Kind of a click-baity headline by the WP; I wish they had a "did not meet expectations" button :(

</comment><comment><USER24> The middle class is decreasing mainly because of divorce and thus the creation of single parent homes; additionally middle class families leave the middle class because BOTH parents work and thus moving them into the upper class - when if one of them worked they would stay in middle class.

<comment><USER25> If the majority of your income comes from salary or wages, you are not in the upper class, no matter how high that number is. The primary defining characteristic of the upper class, in my opinion, is supporting your lifestyle via your ownership, rather than your labor.

Certainly, there is some fuzz and overlap there. A retiree earning $50k/year on dividends and capital gains meets that criterion, while a top-shelf skilled professional or DINK couple earning $400k/year solely from working 40 hours per week (each) does not. The latter could certainly become upper class rather easily just by paying off debt, avoiding unnecessary expenses, and dumping excess cash into index funds, but as long as that plan can be cut short by two simple words ("you're fired") they haven't crossed that class boundary yet.

Generally, when the middle class shrinks, it isn't because a significant portion of them are becoming upper class. More often, it is because expenses rise faster than prevailing wages. The mark of the middle class, to me, is being able to comfortably pay all living expenses with all adults in the household working no more than one full-time job (probably salaried, but not necessarily) at 40 hours per week. You can get everything you _need_ with just one job, and some of what you merely _want_.

The instant you cross that line where you have to abandon desires and work longer to make ends meet, you're in the lower class. There are certain needs in the US that are not actually survival-level necessities, but rather mandatory to meaningfully participate in civil society. Those have expanded. In earlier decades, you essentially just needed a motor vehicle, a location- based telephone number, and a mailing address. Now, you also need one or more person-based telephone numbers, an Internet connection, and various forms of insurance. Expense categories expanded, even as costs for each expense rose. Median wages stayed stagnant. So people drop out of the middle class. They stop going to the movies and take on more hours or a part time job in order to pay their phone bill.

<comment><USER26> >Median wages stayed stagnant. So people drop out of the middle class. They stop going to the movies and take on more hours or a part time job in order to pay their phone bill.

But we can get that "side-hustle" now, so that makes it all right?

<comment><USER25> Right. Those Uber ads are rather tone-deaf to fears of downward class mobility. They try to paint the company as helping middle-class people earn extra money to buy the things they want, when in actuality the majority of rides are driven by lower-class people that are trying to earn their living as drivers.

One person's second job may be another's primary source of income.</comment></comment></comment></comment>


The Design of a Signage Typeface - <AUTHOR> http://ilovetypography.com/2012/04/19/the-design-of-a-signage-typeface/ <comment><USER2> I find the end result pretty attractive, and it's definitely distinctive - perhaps it could have wider applications than just signage: <http://fonts.info/pub/pdf/wayfinding-sans-pro.pdf>

<comment><USER3> I wonder how it looks when rendered at very small sizes on computer screens? It might be surprisingly legible...

</comment></comment><comment><USER4> Great post. Very interesting work.

My picky question is - why so thin? The 'blurred' examples show the font broadening through the 'blur', which is why thinner fonts work well here, but is there a scientific basis for this? I would assume that this is good for light text on a dark background. For the opposite, I'd assume a thicker font would do better (text would become 'thinner' as your eyes blur?). Also, if there is any damage/weathering of the sign, Id assume a thicker font would cope with this better.

<comment><USER5> Lettering and the a sign's border are often made out of reflective material.

The blurring will thus occur at night when car's headlamps illuminate the signage.

</comment></comment><comment><USER6> The typeface 'Transport' used in the UK seems to have solved most of the problems identified in this article. The article notes how good Transport is, but says it is too wide. I wonder if just reducing the spacing on Transport a little would have been a shortcut - the results appear remarkably similar to my eye.

Wikipedia article on Transport: <http://en.wikipedia.org/wiki/Transport_%28typeface%29>

</comment><comment><USER7> The market for fonts is nuts. You can buy one style of Wayfinding Sans for $374.50--or all twenty for _$374.50._

<comment><USER8> Sounds like the foundry has an all-or-nothing philosophy of font pricing, even if the marketplace their fonts are found on doesn't quite support it.

To understand this perspective, don't miss the bottom of the House Industries FAQ page:

<http://www.houseind.com/fonts/faq/generalfaq>

</comment></comment><comment><USER9> I like the article, but the fat, fixed header is killing an otherwise great design. Making the header absolute (not stick to the top of the window) would leave more vertical screen space for the crisp graphics and typeface.

<comment><USER10> I agree 100%. Also, the page down key doesn't work correctly anymore: It scrolls too much. For me, the lacking page-down-usability is enough that I would never even consider placing a fixed bar on top or bottom.

</comment></comment><comment><USER11> Great article.

"Once I even ended up in a holding cell at the border crossing to Norway, because the customs officers just wouldn't accept that someone would drive all over Europe simply to take photographs of traffic signs."

Would love to hear more about this :)

</comment><comment><USER12> great blog.. i love how each article has a different layout emphasizing the content.

<comment><USER13> Nice observation. It's very pleasant to read it all.

</comment></comment><comment><USER14> Only have just skimmed it, but this is a great blog entry, more of an article really. Slick graphic design as well.

Will have to come back later to re-read.

<comment><USER15> The PDF specimen linked at the end is also worth a look.

</comment></comment><comment><USER16> Very inspired by his love and devotion to his craft.

</comment><comment><USER17> This article is terribly difficult to follow the flow of text. I've never understood the desire of some designers for columns of text on the web. Web pages are infinitely tall. Why would you want to replicate a restriction of old media on a new one? This implementation is proof that it's not a usability win.

<comment><USER18> Well using Chrome on Ubuntu with a resolution of 1366x768, I really had a problem, reading this post.

The words were cut at the end of a column, so that it was really impossible to follow the article.

for someone stating "I love typography", this usability-problem, kind of seems like anathema to me.

Or am I just the outlier with the wrong screen-resolution?

<comment><USER19> same here, also Chrome on Ubuntu, different screen resolution.

Text in columns is a really bad idea.</comment></comment></comment>


We convinced a group of islamist radicals to let us scan their brains - <AUTHOR> https://theconversation.com/the-neuroscience-of-terrorism-how-we-convinced-a-group-of-radicals-to-let-us-scan-their-brains-114855 <comment><USER2> I think a DNA test would have been more useful than a brain scan.

<comment><USER3> Could you please elaborate on that?

<comment><USER2> [https://en.wikipedia.org/wiki/Monoamine_oxidase_A](https://en.wikipedia.org/wiki/Monoamine_oxidase_A)</comment></comment></comment>


Show HN: Free AI-based online writing editor - <AUTHOR> https://textly.ai <comment><AUTHOR> Just sign-up for Textly, upload your document or start typing right away and get your writing fixed, receive instant feedback with AI and ML fueled corrections and recommendations.

Textly is also fueling education and business processes, has a built-in library of text templates for different tasks, and features a secret mode for working on sensitive information.

</comment><comment><USER2> so it is just a bad clone of Grammarly</comment>


Show HN: Conductance - next gen webapp server built on StratifiedJS - <AUTHOR> https://conductance.io/

<comment><USER2> This looks super interesting. I personally like the way JS is maturing into the back-end, with stuff like this and node picking up steam. What I liked about this site, even while I'm installing it to play with it, is that they seem to have put in a lot of effort on it to make it intuitive + clear , even at such an early stage (just to be clear - this is the first time I've seen it). I'm taking this for a test drive to play around with it, and hopefully if it works well find some place down the line where I can put it to use.

<comment><AUTHOR> Thanks! We've tried hard to make it understandable for new users (and provide good documentation for users of any vintage). There's quite a lot of _different_ stuff in Conductance compared to vanilla JS, but our belief is that once you get up to speed, it should make programming concurrent apps much more straightforward. Thanks for taking it for a test drive, don't hesitate to jump on the mailing list if you need help down the road - [https://conductance.io/community](https://conductance.io/community)

And yep - today is our first public release of Conductance, although StratifiedJS (the language it's built on) has been evolving for a couple of years now.</comment></comment>


F-35 crashed and lost in the ocean off of Japan - <AUTHOR> https://www.foxnews.com/tech/missing-japanese-f-35-poses-major-security-headache-for-us-if-it-falls-into-russian-or-chinese-hands.html <comment><USER2> 404'd 1 hour after this post

<comment><AUTHOR> It appears it has been found now [https://www.bbc.com/news/world- asia-47876128](https://www.bbc.com/news/world-asia-47876128)</comment></comment>


For women, running is still an act of defiance - <AUTHOR> https://www.1843magazine.com/features/who-runs-the-world <comment><USER2> Wow. I have to believe things are worse for women in England than in Los Angeles, where I live. Do you have something like high school cross country for girls? I think here there are more girls running XC than boys.</comment>


William Shatner criticizes Facebook hoax ad announcing his death - <AUTHOR> https://www.hollywoodreporter.com/heat-vision/william-shatner-not-happy-facebook-death-hoax-ad-1096600 <comment><USER2> URL changed from [https://tech.slashdot.org/story/18/03/24/0158212/william- sha...](https://tech.slashdot.org/story/18/03/24/0158212/william-shatner- criticizes-facebook-hoax-ad-announcing-his-death) which linked to this.</comment>


How I Start: Rust - <AUTHOR> https://christine.website/blog/how-i-start-rust-2020-03-15 <comment><USER2> In case it helps, Render ([https://render.com](https://render.com)) has first class support for Rust webapp hosting without needing Docker.

And here's the Hello World URL for this tutorial! [https://rust-nix- helloworld.onrender.com/hostinfo](https://rust-nix- helloworld.onrender.com/hostinfo)

More info at [https://render.com/docs/deploy-rocket- rust](https://render.com/docs/deploy-rocket-rust). I'm the founder; happy to answer questions here or in our user chat at [https://render.com/chat](https://render.com/chat).

<comment><USER3> Didn't know about this render.com, very nice hosting. Thanks for this.

</comment></comment><comment><USER4> As much as I use Rust personally and for some of my own pet projects, for serious HTTP services and introducing it into a new developer team, I'm afraid that isn't feasible for my requirements. I'm put off with the immaturity of the crates ecosystem and the costs it will bring. Most of the crates are not even 1.0 including Rocket and that also requires a nightly build which isn't good enough for my requirements. (I only use stable Rust).

As a language it is mature, but the crates ecosystem is of lesser quality, especially for applications like HTTP servers. I've already overcome its learning curve, but the devs who swear by other languages that pay them well may not be so forgiving.

<comment><USER5> I totally agree that Rocket requiring nightly is a deal-breaker for production. I suspect the author picked Rocket because it feels more beginner friendly than alternatives.

Actix-web is in 2.0. The original author stepped away recently, but it has quite the community behind it.

If readers are curious why Rocket requires nightly, it has to do with the macros (that resemble Java annotations/python decorators). Specifically Rust wants all its macros to be hygienic - they shouldn't be able to (for example) create variables that clobber user-defined variables. Rust has multiple types of macros, but the type used by Rocket, procedural macros, don't have this hygienic property yet. For context, procedural macros operate on TokenStreams, whereas "normal macros" (declarative macros) operate on AST nodes. See the issue [https://github.com/SergioBenitez/Rocket/issues/19](https://github.com/SergioBenitez/Rocket/issues/19)

<comment><USER6> > Actix-web is in 2.0.

What's the situation with use of unsafe now?

Although toxicity that was shown by the community was obviously uncalled for, I was very put off by the original author's stance on the issue and am wary of using it in production.

<comment><USER5> All issues dealing with undefined behavior (UB), segfaults and the like are currently closed. Actix-Web makes use of unsafe (as high-performance Rust usually does) so there could be some UB hiding.

<comment><USER7> Honest question: What is the point of using Rust if you have to use unsafe constructs to get performance?

<comment><USER8> What are your alternatives? Managed memory language or C/C++?

Rust has much more modern and ergonomic syntax, features and package management over C, so even inside unsafe blocks it's simply easier to write.

<comment><USER9> Managed memory languages like Swift, F#, C#, D, Nim, offer the productivity of GC, value types, unsafe if really needed and AOT compiled toolchains.

<comment><USER10> "productivity of GC" is often offset by much harder management of resources other than memory due to lack of deterministic destruction.

Also benchmarks show Swift and C# are still about 2x-5x slower than Rust and C++, and that only if you're very careful and you write non-idiomatic code (e.g by avoiding heap allocations). When you're not, and you use OOP abstractions heavily, 10x worse is a much more likely outcome.

<comment><USER9> That is only true if using a language that doesn't not offer mechanisms to have deterministic destruction, when required to do so.

Winning the benchmarks game is meaningless, other than "I fell good" kind of thing.

What matters is having the language features that allow to optimize the 1% of the code base, when it actually impact the acceptance criteria of project delivery.

I have been replacing C++ systems with Java and .NET based solutions since 2006, it hardly matters that C++ wins in the micro-benchmarks.

And if really needed, only that 1% gets packed into a C++ library with managed language bindings, turning C++ into our "unsafe" module.

<comment><USER10> My point is these languages you mentioned don't offer good tools to optimize that 1% and they make the other 99% an order of magnitude slower and more resource hungry to the point where it actually matters and annoys users. Also neither C# nor Java offers deterministic destruction. Try with resources is a joke, because it is limited to a lexical scope. Java and C# are not true alternatives to Rust or C++. They are inferior both on performance side and abstraction/productivity side, and severely inferior if you want both in the same fragment of code.

In many applications there is also no single bottleneck and the split is not 1/99, nor even 20/80\. After you optimize the most obvious bottlenecks you end up with a flat profile, where majority of time is taken by cache misses scattered across almost the whole codebase.

It might not matter for some apps where performance is less critical, but in this case you probably don't want to use Java or C# when there exist languages offering much better abstractions (and surprisingly - Rust and C++ can be higher-level than Java or C#, leading to better abstractions, shorter code and higher productivity). Don't conflate EASY with PRODUCTIVE. Easy languages are not always more productive (if it was true everybody would be coding in Scratch).

<comment><USER9> C++ can be indeed higher level than Java, except that you are forgetting about the money spent fixing C related bugs, developer salaries, lack of tooling to plugin into a cluster and just monitor it like JFR, VisualVM, ETW, lack of interoperability between libraries due to conflicting requirements (RTTI, Exceptions, STL avoidance, ...)

As for Rust, it remains to have something that matches Orleans, Akka, Kafka, ....

Then there is the whole IDE tooling experience, libraries like the one here that require nightly toolchains, and lack of support for stagging binary libraries, which cargo might eventually get one day, but isn't here today.

Java and C# might be inferior products from your point of view, but as mentioned, what I get are rewrites from C++ into Java and .NET languages, not the other way around.

And I never sensed lack of productivity, quite the contrary, specially when I usually don't have to think about which C++ flavor of the month I am allowed to use, or having political discussions about enforcing the use of static analyzers on the CI/CD pipeline (assuming there is even one to start with).

<comment><USER10> But now you're taking about tooling and not languages. Rust will eventually get there.

IDE support is already very good and better than for many popular languages (e.g. dynamic ones).

Performance profiling is also better than in Java. I'd take perf over visualvm any time.

Java had much worse tooling when it was at the age of Rust today.

<comment><USER9> Languages are not used in isolation, the days that grammar and semantics were enough to warrant a language change.

IDE support can be considered very good if the baseline is the 90's Borland and Microsoft IDE experience, not what modern Java and .NET are capable of, which starts to finally approach the Smalltalk and Common Lisp development experience of yore.

Rust IDEs can't still offer completion that works all the time, let alone all the other IDE features.

Perf is no match for Visual VM, as it is a Linux only tool, and it's usability is found lacking. It is so good that Google was forced to create their own graphical based tooling after years of Android developers complaints being forced to use it.

Yeah, except not every business is willing to wait 25 years for Rust to achieve parity with today's Java ecosystem.

Note that C++ is 40 something years old and still there are domains that it is fighting against C, which require a generational change before being open to try out anything else.

Rust's has a big selling story for OS low level systems libraries, the niche C++ is heading to, with the caveat that C++ will as secure as Rust, that is where the language should focus.

To be honest, had Go supported generics from day one, Nim or D some corporate backing, and I would have never considered Rust for hobby projects beyond the language geek thing of trying out new languages every year.

<comment><USER10> > Yeah, except not every business is willing to wait 25 years for Rust to > achieve parity with today's Java ecosystem.

Unfounded speculation. You've made this number up.

> Rust IDEs can't still offer completion that works all the time, let alone > all the other IDE features

I didn't see any problems in IntelliJ. If there are cases where autocomplete doesn't work, these are rare edge cases and they don't affect predictivity. VSCode was a bit laggy, but that's probably VSCode problem not Rust's. This is what happens if you base a desktop tool on a browser running JS.

> Rust's has a big selling story for OS low level systems libraries

It is good at that, but this is not the primary reason to use Rust. Rust selling point are explicit lifetimes which make it virtually impossible to create pointer hell I found in every commercial Java codebase I worked on. It is the same level of productivity enhancement as introducing static types over dynamic. Explicit lifetimes make it a bit harder to write in Rust but code is being read 99% of time and written only 1% of time.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER11> I love the way this tutorial was written. I can't explain what exactly, but I found the entire experience to be very didactic. Congrats, and thank you! Wish we had more of this.

</comment><comment><USER12> Author of the post here, feel free to ask me anything!

<comment><USER13> It was really helpful doing some first steps with rust.

One suggestion: add a warning for macOS users that psutil::host::uptime is not available on macOS. I had to figure that out myself and it was quite frustrating.

I figure you didn't know that, and it's not like the article claims otherwise, but it would be useful to add I think.

<comment><USER14> Thanks, I had the same issue - and only figured it out because this comment came up in Google results for the error message.

</comment></comment></comment><comment><USER15> > routes!(...)

> routes_with_openapi!(...)

Macros, macros everywhere. I understand their use in basic functions like println!(), but I'm worried too much macros in client code will lead to problems (unreadable, clashes that will need custom names). If there are no problems with macros, why not making every function a macro then?

<comment><USER16> Macros are extremely important to make rust productive. It sometimes feels as if you were writing in a higher level language.

One of the best examples is the serde crate. What a beautiful library!

<comment><USER17> Macros are powerful, but they should be used sparingly because they often have outsize effects on compilation times and degrading error message quality. I personally give myself a "macro budget" where macro-based solutions are prioritized based on benefit to a particular project.

</comment></comment></comment><comment><USER18> Love seeing more Rust. It's good stuff.

        extern crate rocket;

I thought "extern crate XYZ" was old-style? "use XYZ"?

<comment><USER19> It's still fairly common to use in conjunction with

        #[macro_use]

for when you want to easily import all of the macros from a crate across your entire project. But yes, you could do

        use rocket::{get, routes};

instead.

</comment></comment><comment><USER20> One thing I wish was covered in these is how to go past 'hello world', especially things like error responses and serialization models. It took me a while before I got to the point where I think I can be productive in both querying the data from the front-end and getting back the shape that I wanted. Couple of lessons learned:

\- Start with separating your API models and DB models out early, you'll be thankful later. You can also help yourself out by implementing From/Into for your database models to your API models. Obvious lesson from CQRS but since rust doesn't allow easily for ad-hoc structs this is a must, especially since there are a lot of examples out there that put a Serialize/Deserialize onto the database object.

\- If you have deeply nested objects, look into JSON:API or Juniper. There are a couple of crates that implement the jsonapi spec and I'm hacking on one of them to make it a bit more usable for my personal pet project, but Juniper will make your life easier especially if you're starting with a React frontend.

\- Understand that there's still a tracking issue for a few items such as multipart data, although there's a third party crate that integrates the multipart crate into rocket. However if you need an upload you could probably get away with just returning a signed S3 endpoint to the user, which is what I ended up doing

\- If integrating with redis or some other database that's not application critical, there is no (as far as I'm aware) graceful degredation that comes out of the box with rocket_contrib, unless there was some config value I was missing. This is usually fine, since you can easily declare an ad-hoc fairing that connects to redis and falls back to an Option::None in the case where it couldn't connect.

And finally, if you want to support different error status codes yourself based off of mappings from internal errors (such as 409 conflict when inserting the same data), your best bet is an enum that's wrapped by a responder derive like so:

        #[derive(Responder, Debug)]
        pub enum UserApiError {
            #[response(status = 500, content_type = "json")]
            Unavailable(Json<UserApiErrorMessage>),
        }

        impl UserApiError {
            fn wrap_body(message: &str) -> Json<UserApiErrorMessage> {
                Json(UserApiErrorMessage {
                    status: "error".to_string(),
                    message: message.to_string(),
                })
            }

            pub fn unavailable(message: &str) -> Self {
                Self::Unavailable(Self::wrap_body(message))
            }
        }

Which can be called like:

        Err(UserApiError::unavailable("The database is gone!"))

Most of my other lessons learned come from diesel, both are an absolute pleasure to work with and have given me incredible confidence while coding.

<comment><USER21> > Start with separating your API models and DB models out early, you'll be > thankful later. You can also help yourself out by implementing From/Into for > your database models to your API models. Obvious lesson from CQRS but since > rust doesn't allow easily for ad-hoc structs this is a must,

Can you explain why? This advice doesn't make intuitive sense for me.

<comment><USER22> Not the parent, so I can't speak for them, but my experience is that it's pretty likely that you'll eventually run into situations where you really want to store something different in the DB than what you send out from your API.

For example, you may want to keep some fields internal and not expose them to users, or you may want to normalize your DB schema so some fields are stored in a linked table, or maybe you had something as timestamp+duration, and need to keep the same external API for compatibility, but also want to refactor it internally into two timestamps.

<comment><USER20> Yep! Serde allows us to cheat a bit since you can call for it to skip certain fields (such as password hashes), but my preference is for the field to not exist at all in your serialization structs. Less of a chance to forget that #[serde(skip)] flag

</comment></comment></comment></comment><comment><USER23> > Adding the --vcs git flag also has cargo create a gitignore file so that the > target folder isn't tracked by git.

Doesn't cargo make a git repository by default, anyways? Why doesn't it add a sensible gitignore in the process?

<comment><USER24> Yeah but I'm guessing it's there in case someone has disabled it globally.

</comment></comment><comment><USER25> Why "cargo init" instead of "cargo new"?

Also, wondering when Rocket will be usable without nightly. That makes me concerned that it is not stable enough.

<comment><USER20> I've used it for 6 months on the async branch and the master branch and master was incredibly stable. Async is less so because it's a large scale effort to try and convert over the entire API with minimal breakage(apart from fairings/middlewares). You can pin to a specific stable nightly if you're needing extra sanity, although CI makes this hard with the nightly docker images. There's a tracking issue for proc_macro_hygine here: [https://github.com/rust-lang/rust/issues/54727](https://github.com/rust- lang/rust/issues/54727)

Looks like the last feature is almost stable!

</comment></comment><comment><USER26> A few comments:

* missing `use rocket_contrib::json::Json`

* `unwrap_or` is better than `or` followed by `unwrap`

* the psutil crate already has hostname info

* the psutil crate doesn't provide an uptime function if you're on a unix system.

* once you setup the hostinfo route, your example says to curl the index

* your docker link is broken

</comment><comment><USER27> > Rocket has support for unit testing built in

Do I really want my HTTP service framework to be my unit testing framework too? Could these not be separated?

<comment><USER28> I believe the author meant that Rocket provides helpers to make unit testing easy. The tests are written using the ordinary "#[test]" Rust annotation and run by the standard Rust test runner.</comment></comment>


Show HN: Extend reddit's comment ranking system to rank players. - <AUTHOR> http://www.blog.fruiapps.com/2012/04/Chose-a-mathematical-model-to-rate-players

<comment><USER2> This was a cool hack, I'd love to hear more about the way you modified things. Are you releasing a library?

<comment><AUTHOR> Probably yes, once the system gets matured and we have something that is fault-proof. We would love to share. Probably we will try with Trueskill, ELO and glicko and see how each of them works. For now if you wish to see the code its some 4 lines of python, 4 lines is too short for a library ;)

<comment><USER2> I'd love to see it.

It'd save me from writing the same, if you post it as a gist, or post it here under a MIT license or similar.

I'm always testing different ranking algos for ChronX, my online CCG. Right now, a modified glicko2 has been best, but I'd love to try your idea here.

I've seen Reddit switch to the Algo, and it's clever, but I didn't think of applying it to game ranking.</comment></comment></comment>


Ethereum is Doomed (2016) - <AUTHOR> https://nakamotoinstitute.org/mempool/ethereum-is-doomed/ <comment><USER2> The issue with smart contracts is that the people behind the idea don't seem to understand that the issue with traditional contracts does not lie in the parts that a clearly defined, but in those that are not. These are the parts where the legal system comes into play in order to reach a decision on grey areas like that.

The other problem is the obvious issue that smart contracts make the implicit assumption that we are able to write bug-free code. Evidently, that is not the case.

There clearly needs to be some sort of mechanism to sort out issues that may arise from this. But in practice Ethereum has replaced an imperfect but robust mechanism in the form of the legal system with one guy, who is accountable to no one, making discretionary decisions with no guidelines to bind him.

<comment><USER3> The platform has more far reaching use-cases than being used to replace legal contracts, and written contracts can have "bugs" just as smart contracts can.

<comment><USER4> Do these far reaching use-cases matter in practice?

> ... written contracts can have "bugs" just as smart contracts can.

The onus on smart contracts is to come up with use cases where they are superior to written contract, not to find examples where they are equally flawed.

<comment><USER3> The purpose is to remove the middleman to have an autonomous outcome and by that they have succeeded. However, just as contracts have evolved over time after iterations have been found to have "bugs", I'm sure these will as well.

<comment><USER5> It does not cut out middlemen it only renames them to "oracle".

</comment></comment></comment></comment></comment><comment><USER6> This article judges Ethereum as a potentially useful tool and author proves such a tool has no advertised usefulness in it so it's doomed.

I think this is wrong approach. Ethereum and most of the altcoins are not tools aimed to solve a problem. They are gambling machines. What matters for them is marketing, charismatic leader and wide audience (developers). Ethereum has all of these.

</comment><comment><USER7> >Because the code of the DAO is a legally-binding contract, how can you argue so as to convince a judge that some behavior of the program is really a bug?

Is it? I know that some people intend the code to be law, but I suspect if/when this butts up against the real legal system, we'll see a variety of different interpretations.

Just because someone left their window open doesn't mean you get to take all their stuff.

<comment><USER3> I'd imagine it'd follow the same rules of a faulty traditional legal contract. If the wording of the contract is wrong in a traditional contract, are exploitations valid? Does the decision depend on context?

<comment><USER8> Real legal contracts are invalidated all the time for not meeting the basic requirements of a contract:

[https://www.nolo.com/legal-encyclopedia/contracts- basics-333...](https://www.nolo.com/legal-encyclopedia/contracts- basics-33367.html)

<comment><USER9> There's an equitable remedy for that, a quasi contract, yielding quantum meruit damages if it's any good.

[https://legaldictionary.net/quasi- contract/](https://legaldictionary.net/quasi-contract/)

</comment></comment></comment></comment><comment><USER10> This article has aged badly. There is currently a huge amount of money in intricate smart contracts on Ethereum, not being hacked.

For example, there is $250,000,000 worth of Ether in the MakerDAO contract, collateralizing around $70,000,000 in DAI, a decentralized stablecoin that has maintained its peg to the dollar during a 90% price drop of the underlying asset, Ether.

This blog post reads like someone in 1992 using some obscure hypothetical FTP server bug to argue that secure computer networks are by definition impossible.

</comment><comment><USER11> > The legal implications of this hack are more interesting than the hack > itself. Because the code of the DAO is a legally-binding contract, how can > you argue so as to convince a judge that some behavior of the program is > really a bug? The DAO provides nothing other than its own code to specify > how it is supposed to work. For example, there is no specification in a > formal language, or proofs as to its correctness. If the Ethereum team knew > how to test software, they might have produced something like that, which > also could have provided corroborating evidence that any bug was unintended.

You could say the same about many hacks that involve money and assets. Judge, the software let me in! That was the original intention of the programmers!

To get away with something like this you're going to have to convince a judge or jury that exploiting a bug in a software program entitles you to a huge payout. I suspect this might fall under unjust enrichment.

<comment><USER12> > You could say the same about many hacks that involve money and assets. > Judge, the software let me in! That was the original intention of the > programmers!

The difference being that ethereum smart contracts are supposed to be autonomous, hence "The Code is the Contract".

If you need or rely on outside parties then why not just have a standard contract?

<comment><USER3> They are autonomous, but sometimes have unintentional outcomes. Same goes for written contracts. Sometimes they're poorly written/worded and loopholes are found.

</comment></comment></comment><comment><USER13> Tends to take 12 years for a programming language with traction to really take hold. Maybe 4-6 years for the language to reach maturity so long as it was well-designed and implemented; given early adopter feedback is present. Smart Contracts are best served with a well-typed, highly safe, and formally verifiable language feature set. You need confidence that the smart contract will operate without error once deployed. Implementation-wise I expect the ideal smart contract language will have a robust typing system with functional programming defaults where state is largely immutable and highly explicit. Probably some variation of an ML language.

<comment><USER5> Such languages won't make it far because the software they produce isn't really useful in industry or business. Whether or not there may be some future application for "dApps", currently none exist so there isn't much incentive for learning a dApp language (except pure curiosity about the platform) when you could learn a language that can produce useful software (e.g. Kotlin, Rust, Golang, C# etc)

<comment><USER13> I disagree a smart contract language is without value to business - but I agree it's speculative and unclear at the moment. The best we can do is look at cloud platform and programming language maturation/adoption to get a feel for what a decentralized app platform will take in time and engineering effort.

The idea being we're a few years at least before language and infrastructure can be mature enough to have value for most users beyond earliest of adopters. The other languages you've mentioned are much further along than any "dApp" platform at what they do. Decentralized application platforms like Ethereum are a new space with new requirements but, as far as I can tell, necessitate a new language to satisfy unique requirements. The hot-take is that Solidity is probably going to take some big changes to make it much further. I've not been impressed with it.

<comment><USER5> It is useless at this time. There are no legal businesses that are now possible that weren't before the advent of cryptocurrency and criminal businesses still existed in the cash-only world (although they are easier to facilitate with cryptocurrency).

> _we 're a few years at least before language and infrastructure can be > mature enough to have value for most users beyond earliest of adopters_

There isn't really a clear explanation of why that would be the case. The bottom line is that smart contracts require a trusted oracle to feed data into the system, at that point, the advantages over a centralized system are essentially zero. There is no reason why anyone except enthusiasts, tinkerers and criminals would get involved.

</comment></comment></comment></comment><comment><USER14> Noone needs etherium or any other crypto tech. Only gamblers, believers and anarchists. There is not a single usecase besides gambling where crypto would be a good replacement for something existing. Cars did replace horses, because they were fsster and bigger. With crypto there is this theoretical dream of having a certain solution running completely decentralised, without an authority abusing it. That's not a commercial solution.

<comment><USER15> > Noone needs etherium or any other crypto tech

There's a huge difference between something being necessary and something being useful. I'm in no way an evangelist, but I can at least imagine some interesting applications of blockchain.

</comment></comment><comment><USER16> This comment itself isn't useful, so I expected to be down voted, but I was just wondering if there's anyone out there—who doesn't have an ax to grind—who can comment on the practicality of Ethereum. Is anyone using it to do something useful that couldn't be done (or couldn't be done nearly as well) otherwise?

<comment><USER17> It sounds like it could be practical, but in practice, it can't. You can't just go around having everyone run code they can't audit. That's insane. It also causes terrible slowdowns in the network which is why they can't scale.

</comment></comment><comment><USER17> The idea of a "world computer" where everyone runs everyone else's code and branches to code they cannot see was a security nightmare and a mistake from Day 1.

Satoshi left out Turing-completeness from Bitcoin for this exact reason.

</comment><comment><USER18> Anybody have rust removal for my pick? May need some for my shovel too. Getting blockchain confused with a capital raising trading vehicle is the wrong move.

</comment><comment><USER19> Ethereum will have a new upgrade on the 16th of January and is well on its way towards the 2.0 vision of a PoS consensus, sharded chain and eWasm / EVM execution environment over the coming months and years.

Posting stale criticism (3 years old) about a technology that is still evolving at this time strikes me as FUD.</comment>


LLVM's garbage collection facilities and SBCL's generational GC - <AUTHOR> https://medium.com/@MartinCracauer/llvms-garbage-collection-facilities-and-sbcl-s-generational-gc-a13eedfb1b31 <comment><USER2> > I hope I explained why "one size fits all" does not really do it in garbage > collection.

Great to see people acknowledge this. Garbage collection is full of tradeoffs; be skeptical of any claims to the contrary.

I also like the way the author emphasizes the importance of inline bump allocation in the nursery. In the fast path, allocation of memory doesn't need to be any more than 5 or 6 instructions. This speed advantage is huge, and GC schemes that throw it away need to have a _very_ good reason for doing so.

<comment><USER3> > In the fast path, allocation of memory doesn't need to be any more than 5 or > 6 instructions. This speed advantage is huge, and GC schemes that throw it > away need to have a very good reason for doing so.

I have some experience writing garbage collectors and with the situations I was targeting the handful of instructions quickly fades when multiple threads come into the equation.

1\. Using atomics for bumping the pointer had some luck but contended atomics on the platforms I was targeting meant that the low-instruction-count allocation was still slow.

2\. Using locks (futex-style) was slow, as expected.

3\. The best results I found for my use case (precise garbage collector for a runtime targeting video game consoles) resulted in per-thread nursery-type allocation arenas, selected by TLS, with no locks in the fast-path. This was slower than the ideal single-threaded fast path because of the TLS overhead.

<comment><USER2> Yeah, the canonical solution for multithreaded GC is the third option (TLABs). The TLS overhead is annoying, but on some architectures you can get away with burning a register to save the TLS load. It might well be worth it on AArch64, with its 32 GPRs...

(TLABs are the recommended solution for multithreaded malloc implementations like jemalloc and tcmalloc as well.)

<comment><USER4> AArch64 has a dedicated register (TPIDR_EL0) for TLS.

<comment><USER2> Didn't know that, thanks!

</comment></comment></comment></comment></comment><comment><USER5> At least two of the article's statements about LLVM are false. In particular:

1) LLVM doesn't place any restrictions on how a language runtime allocates memory.

2) LLVM doesn't "expect" a stack map -- it provides infrastructure to compute them if the front end wants to, but the front end is completely free to ignore that infrastructure.

<comment><USER6> Are those corrections to the incorrect statements, or the incorrect statements themselves? It's not very clear, I'm sorry.

<comment><USER7> So I wouldnt say that LLVM places restrictions, but I will say a little of my experience doing LLVM + BoehmGC

BoehmGC uses the stack for its root set (where it starts to find live memory). With LLVM, you dont ever need to explicitly use the stack, you can use registers for everything and make LLVM figure out if it should go on the stack or not. If you want to use Boehm with LLVM, you are forced to explicitly allocate everything on the stack, and not just on a register, so that Boehm is guaranteed to find the memory.

So I wouldnt say restriction, but definitely you need to think about how LLVM operates with the GC and other runtime components of your language.

</comment></comment></comment><comment><USER8> I love the idea of a "liberal" GC that occasionally throws away bits of memory still in use in the name of raw performance for restartable tasks.

<comment><USER9> How do you know when to restart the task? Or that your output isn't the product of an out of range memory access?

<comment><USER10> You unmap the memory when you free it so that it causes a segfault if you access it, and then if a segfault occurs you know something went wrong.

<comment><USER11> > so that it causes a segfault if you access it

No, this is UB. It can cause a segfault, but it can also allow _bad things_ ™ to happen.

<comment><USER12> Let's be clear on the difference between C and C++ undefined behaviour, and machine behaviour that GCs and runtimes can use for implementation.

It is not unusual to rely on triggering a hardware exception in runtimes and GCs, up to and including segfaults. For example, a check for safepoint might be implemented by attempting to read a particular address. When the GC needs to stop the world, it could change the protection bits on the page that contains that address. This technique minimizes the amount of code in the safepoint test and doesn't require any branching logic.

See e.g. [https://stackoverflow.com/questions/46394575/safepoints- in-j...](https://stackoverflow.com/questions/46394575/safepoints-in-jvm)

Another technique: a runtime can support dynamic growth of the stack by keeping an unmapped or protected page at the limit, and extending it when hit. This is how stacks work on Windows, and it relies on help from codegen: compilers targeting Windows need to generate code that performs a loop touching every page in its stack frame allocation one at a time in allocation order, if the stack frame is larger than the page size.

See e.g. [https://geidav.wordpress.com/tag/stack- probing/](https://geidav.wordpress.com/tag/stack-probing/)

</comment></comment></comment></comment></comment><comment><USER13> > Another example where you want to keep for-GC bookkeeping overhead in > mainline code low is if you can "GC-by-fork", which is basically throwing > away processes as they would need to GC

That's one of the common options in Erlang/Elixir: spawn a worker process for each task with a `min_heap_size` high enough that most workloads would not trigger a collection (the default is fairly low), let it die after it's handled the request. More complex/memory intensive tasks will fall through to normal GC-ing behaviour once they breach the `min_heap_size` limit.

</comment><comment><USER14> > it is copying, however other passes that just punch holes into existing > cards (to wipe pointers that are not pointed to anymore without moving a lot > of memory) have and will be added

I have a basic understanding about card tables and promotion but couldn't find anything about hole punching. Pretty sure I have heard the term before and was just as confused, could someone point me into the right direction for this?

From context I'd guess that it means the gc doesn't copy unless x% of the block is unused?

<comment><USER15> I use the "punch holes" phrase in the following situation: \- GC is copying/compacting \- GC is at least slightly conservative \- allocation is fast/inline/increment-only \- that leaves you in a situation where you cannot move/compact some part of the heap

You cannot move the possibly (conservatively) pointed to thing because you cannot adjust the pointer to it (because it might be a non-pointer thing such as an integer.

Now you have some GC unit worth of space occupied by one unmovable object, otherwise it's empty space backed by physical pages. What do you do with the rest of the space? In a C/malloc scheme you are aware of such holes and fill them from new allocations. When you have a fast allocation scheme not involving complex code to find holes you will keep these "hole" as long as the conservative-pointer looking thing exists. You do wipe all the other pointerish things in that GC area, though, so that they don't hold down additional space. Still, now you "waste" a whole GC card worth of physical RAM on a single object, the tradeoff being that you do not want to move to an allocation scheme that spends time thinking about fragmentation.

You could use the empty space in those GC cards as a target for the next moving GC, however that has drawbacks as you know continue to have to special- treat such regular objects co-located with possibly conservatively pointed to objects.

If there is a better term than "punching holes" for this I would be interested.

ETA: now that I think about it, you could give back all physical pages in that GC card that do not contain the held down object. This assumes that GC card size is more than one VM page.

</comment></comment><comment><USER15> (author here) Just wanted to say that I have seen the comments and will address them when I have a chance. My post turned out to be a lot more popular than I anticipated and I was busy yesterday and today. I wrote most of this in summer 2017, so given the popularity I will also provide a refresh with today's state of LLVM.

Please keep corrections to my post coming, the time to determine and influence GC design restrictions in LLVM is now. Before a popular GCed language comes along and then tramples whatever its current GC happens to be into the status quo.</comment>


Convore (YCW11) is reborn as Grove.io, a chat service for businesses - <AUTHOR> http://gigaom.com/2012/01/10/convore-grove-io/ <comment><USER2> I think the trick here is going to be who you decide to market to.

Right now, it looks like the target audience is really small, tech-savvy start ups (most likely those start ups out in San Francisco that the grove.io team can directly market to, etc). That's probably fine but it seems like a rather small audience. So alright then, the audience is tech-savvy start ups located anywhere. This might be tricky because now you have to convince the tech-savvy people to quit hosting their own IRC server, or to add a new IRC server to their list of servers that they already frequent. I already run my own UnrealIRC daemon, on Linode, for $20/mo with however many users it can handle. I have a logger bot that logs chat to a nice looking web page, and obviously IRC supports channel access control out of the box. Plus, now I have a Linode server to play on. So, I don't think I would do grove.io for my own start up. So, then maybe an easier audience to market this to would be tech-savvy start ups that are too busy to mess with hosting their own (probably a good portion of them) or do not like the other free servers. They'd probably buy this, but you have to wonder why they're not using IRC already (do they really want it or need it?). You could try targeting non tech savvy start ups, but then you have to figure out how to speak their language and explain why they need a chat service when they already have email, or something. This is probably why Campfire stayed away from making the IRC connection.

I have to admit that I feel like this is a bit like trying to sell ice to an Eskimo, or whatever. Do start ups have this problem? I'm not knocking the service. I'd love to be offering a service like that. Heck, I do offer an IRC service but I just do not get paid for it. Perhaps I'm just jealous that I did not attempt this type of service myself. :) I love the idea and best of luck!

<comment><USER3> "I already run my own UnrealIRC daemon, on Linode, for $20/mo with however many users it can handle."

Then I would argue you're not the target market. I'm a tech company CEO. I have WAY better things to do than set up an IRC server, even though my background is Linux system administration. My employees (we have 8 people currently; hiring #9) also have better things to do (like, you know, features our customers want :)

So we use Hipchat. And Hipchat rocks. Everyone on our team loves it. (We actually tried grove first, but it just wasn't mature enough for our needs-- Hipchat has Mac OS, Windows, web, Android, AND iPhone apps, and we're all on different platforms, so that works out well.)

When you're paying developers $$$, you don't want them to be setting up IRC servers. Better to use a Hipchat or a Grove.io and be up and running in 5 minutes with clients on every device. For us, it's well worth the few $ a month to have one less thing to set up and maintain.

<comment><USER4> "When you're paying developers $$$, you don't want them to be setting up IRC servers."

Fair enough but still if it takes 1 hour to set it up vs paying 50$*12. (But I get your point, that's why I said I found it a bit risky in another post.. that's the developers mentality vs the CEO's one.)

<comment><USER5> I don't think you can realistically setup an IRC server in an hour, at least not your first time, not with SSL, NickServ, ChanServ, etc. It will probably take more than an hour just to pick an IRC server and find the documentation. Almost all IRC servers were designed to run public IRC networks, each public IRC network has forked and re-forked the original IRCd from 1988. They tend to lack features that are expected of online services these days, e.g., user accounts and access controls. You can usually set a server-wide password, and channel keywords, but that's different than having individual usernames and passwords, with individual access control to channels. So then you need a NickServ and ChanServ, which are separate from the IRC daemon. Then the logging bot, and the web archive of the logging, and access control to the web archive. And a web client so you can easily invite first-timers into a discussion. It's way more than an hours work. Then you are paying $20/month to Linode, and someone has to maintain it with security updates, and backups, and documentation on how to redo all the configuration. That's a lot of time when you could just pay $50/month to Grove. $50/month is one regular coffee a day, it's not much money.

<comment><USER4> I'm not saying that Grove is not a good idea (It is actually!), I'm just a little afraid how the product targets a niche that are used to hack/configure things themselves. And, don't forget that developers enjoy hacking or setting up these kinds of server.

But yeah, I do agree with you that from a CEO point of view, it's not worth to waste _time_ on this as there are already existing solutions.

</comment></comment></comment></comment></comment><comment><USER4> I'm really happy for @leah and that pivot. I've used convore a lot but was also wondering where they'd make money. Grove.io is a sweet spot for me as I'm a big fan of IRC and I believe lots of programmers are. Still, I find it somewhat risky.

Programmers are used to configure and hack their way up.. I'd be afraid to ask them to pay for a service that they could quickly "apt-get" on their vps. (I'm exaggerating a little, but you get the point). I mean, for a really small team, just go on freenode and get a channel. (It's obviously free). And for a bigger company, it's worth spending 1-2 hours for that.

I think a free version for small teams would be great. But then, if you can charge for it, why not? :)

Anyhow, I've already offered my help (I'm mostly a django/python dev) but if you need another spare-time contractor feel free to contact me.

(Just wanted to say that mIRC is where I first learned to code.. and this is where I've learned socket, dialogs, etc. I remember, I coded a web server in mIRC to which I'd connect using a client inside mIRC (in @windows).. and I coded the server bot. It was fun time, I miss it.)

</comment><comment><USER6> We migrated from a self-hosted irc server to Grove and couldn't be happier. The archive and search are a godsend when you can't be bothered to set up loggers and such yourself. Whenever we're troubleshooting server issues, all the context is already there in the web client for other devs to hop right in and catch up. We post to the API from our fab deploy scripts, and when someone's feeling motivated, we'll be setting up Hubot, as outlined on their blog. <https://grove.io/blog/hubot-grove>

EDIT: I should also give mention to the great transparency from the team. Leah emailed me in response to feedback/issues multiple times, and they definitely keep up with Twitter chatter.

<comment><USER7> Surprising - given you already had a self-hosted IRC server, switching to Grove seems like an expensive option for more or less just the addition of logging features?

<comment><USER6> The cost is a non-issue for even the few benefits (and the removal of all responsibility).

Also relevant: we have non irc-savvy devs, so Grove helps with getting them involved too. It's difficult to explain why IRC is so great to anyone that doesn't use it- whereas sending an invite and having them in the channel right away is dead simple.

</comment></comment></comment><comment><USER8> What do tools like Convore or Hipchat or Campfire offer that you can't do as easily with Skype? We've been using Skype at work for communication for years and never really even felt the need to explore alternatives. Is there something I'm missing about these?

<comment> brown9-2 Logged transcripts. APIs and bots.

<comment><USER8> Skype does all those too.

</comment></comment></comment><comment><USER9> So is this a competitor to HipChat and Campfire? Any additional things that it does differently?

<comment><USER10> It is based on IRC, so you can seamlessly use Adium, etc. to use it, in addition to the web client.

<comment><USER11> That's not a distinguishing feature (HipChat works in Adium too)

<comment><USER10> It is, because there are a number of popular IRC clients that don't support XMPP.

</comment></comment></comment></comment><comment><USER12> Interesting the other cofounders moved to create Boilerplate, a company focused on building apps, now to creating clutch.io, a development framework for apps. So combined between the founders a lot of pivoting.

Also interesting the quote about needing over a million users to really create any real profit through ads. Lots of free consumer apps seem to end up with user counts that seem really big but are probably still hard to profit with.

<comment><USER13> yep. Advertising requires 1million+ MOA (monthly active users) to become interesting (let's say $10-$30,000/m) in revenue. So as consumers seldom are willing to pay for a web site, the trick is to get to the 1 million MOA's. And that is very very hard, even with a all star team, a TC article and lots of funding

</comment></comment><comment><USER14> The product look great, and piggy-backing on IRC makes a lot sense. However, I wouldn't pay for this, on the basis that the pricing model makes me feel like they assume users are naive (to put it nicely). Multi-tiered pricing models that work typically offer users incremental value, most often in the form of extra features (that took time to develop), support (that takes time to provide) or hardware/bandwidth resources (that are fixed costs to the company). In this case however, the incremental value is "number of users". Unless we're talking about hosting video (or other bandwidth-intensive media), the difference in resources needed to host 50 users can't warrant a 10x price difference from that of hosting 5 users. This is where they lose me (and probably most devs) to the "apt-get" alternative. IMHO, they should apply a one-price model : 10$ per month, unlimited users. It would better bridge the gap between the DIY option, and the luxury of having someone else do a mostly one-time configuration (and occasional maintenance) for you.

<comment><USER15> As much as I chuckle at their pricing, I find your suggestion of $10/mo for unlimited users just as appalling. For one, I am always hesitant to promise anything "unlimited." Secondly, I'm not sure if they should even try to go after the dev market if there are bigger fish in the sea.

</comment></comment><comment><USER16> How is Grove.io different from 37signals' Campfire product? Is it the IRC?

        Grove.io: "Hosted IRC and so much more."

        Campfire: "Team collaboration with real time chat."

<comment><USER17> For me, it's definitively the IRC. I can use any IRC client of my liking, any bot that can talk to IRC, ... I've grown up with all of that and that somehow makes me like grove more than campfire. But I guess it boils down to personal preference.

</comment></comment><comment><USER18> There's a lot of comments here saying what a great pivot that was. I wouldn't hold my breath on that one until there is more market traction.

It's a very crowded space Grove are entering. Most non tech-savvy small businesses I know use Skype by default. I run a technology business and we use it as well. And the standard fallback is just plain old email. This sounds like a hard place to make money to me. However, I wish them luck.

</comment><comment><USER19> At the bank I was at, they used something called iConnect, built by AOL (can't even find a reference to it online). It was horrible. They were switching to Office Communicator.

I think chat is great, but I wonder if people are looking for more of an all- in-one communication solution...specifically video and audio.

<comment><USER20> skype?

<comment><USER19> The decentralized nature of skype is probably a major security issue for banks. In fact, this hosted IRC might be as well.

Which brings up a good point, maybe at some point they should consider something like Github Enterprise for large enterprise customers.

</comment></comment></comment><comment><USER21> This is a great pivot for Convore. I suspect the most frequently asked question for Grove will be: "Can I use Grove to connect to freenode"? That is what I'm currently using IRCCloud.com for. That, /and/ keeping me logged into those freenode channels when I close my browser window.

<comment><USER22> Grove is essentially a IRC server, not a client. While we provide a web based client you can use whatever you want. Even IRCCloud. As we keep web based archives you don't have to keep connection open all the time if you don't want to (once you connect to channel, there will be a message on latest activity).

<comment><USER23> Still, I agree with hugs. Providing the web frontend as a way to connect to freenode might be a good gateway drug to get people using grove, and then have a simple, 'want to have your own private chat? Click here!' or something along those lines.

</comment></comment></comment><comment><USER24> Just signed up. I am a bit worried for them that there is such an easy and direct way to trnasition off this service. If I really like using Audium or whatver I have a whole month to set up my own ircD. If I really like this I will probably go that route, convince a junior teammate to set up ircD after hours as a learning experience.

</comment><comment><USER25> Ohh, so this is what became of Convore. I remember hearing Leah Culver talk about it in some DjangoCon vidoes, and I've seen grove.io around as well, but didn't make the connection between the two.

Looks solid though -- the business model seems much more logical than Convore.

</comment><comment><USER26> The right chat for companies is not a stand-alone product, be it desktop, mobile or web-based app. I want a browser plugin that beefs up my google mail chat (search, send files, view history in a browser tab, organize shared files etc...). In other words, I want the app to be where I already live: Gmail for businesses. Remember Xoopit?

I haven't used Grove, and I have never used IRC before. So I admit my comment is uneducated.

<comment><USER27> I think there already is one. Its called Smartr inbox.

[https://chrome.google.com/webstore/detail/gakklmehjhhdfjjgnm...](https://chrome.google.com/webstore/detail/gakklmehjhhdfjjgnmpkjoemjmeomnli)

</comment></comment><comment><USER28> It's surprising how often chat services get compared to Yammer which has no IM functionality.

<comment><USER4> Both goals are to improve communication for a team.

</comment></comment><comment><USER29> Any ideas/opinions why XMPP's mult-user chat (MUC) is still not widely used?

</comment><comment><USER30> Super simple and cleanly designed, I really like it.

<comment><USER31> Convore is very much the same in that aspect. I've always thought it was one of the most well designed websites I have ever seen, and constantly look to it for inspiration when approaching my own unique design issues. They do such a great job of keeping things as you said, super simple, and cleanly designed.

Congrats on the Pivot folks, hope things go well for you.

</comment></comment><comment><USER32> Great work Leah & Jori! Grove.io is awesome!

</comment><comment><USER33> I just signed up. Works great on Chrome!

</comment><comment><USER19> Sorry to turn this into reddit, but she's quite pretty. My genuine interest is to know what impact that has for her. Harder to be taken seriously? Easier to to sell to other hackers?

<comment><USER34> As a father of three daughters (2 teens), I wonder and worry about this as well. My girls are wicked smart (no bias or anything) and I have faith they are going to do great things, but I worry about privelege I've had as man working against them.

That aside, we absolutely need more women in computing. I'be been doing my best to encourage my daughters when I can.</comment></comment>


Ask HN: Why does JavaScript sort() order numerical arrays alphabetically? - <AUTHOR> As you may or may not know:

    >>> [100,11].sort()
    Array [ 100, 11 ]
 From the Moz dev docs[0]:
"The default sort order is ascending, built upon converting the elements into strings, then comparing their sequences of UTF-16 code units values."
I find this: 1. surprising: I am not aware of any other languages that do this. 2. inefficient: sort() converts everything into a string first.
I've looked around but could not find any discussions about _why_ this choice was made. Can anyone share any insight on this design decision?
On a more personal note, I have just wasted a considerable amount of time chasing a bug caused by incorrect usage of sort().
[0]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort <comment><USER2> Because that's a fairly reasonable way of handling array items of unknown type. For example: what should `['1', 2]` do? What about `['1e2', 2]`? `['1_000', 2]`? `['0x3', 2]`? `[true, 2]`, etc.

For numerical sort, pass an callback specifying a numerical sort: `array.sort((a, b) => a - b)`</comment>


To Paris for the Talent, to San Francisco for the Energy - <AUTHOR> https://youteam.io/blog/to-paris-for-the-talent-to-san-francisco-for-the-energy/ <comment><USER2> Happy to share our learnings if this can help other teams.

We've experimented a lot - especially during our batch at YCombinator last year. We quickly noticed that most of our former processes were broken and we had to change almost everything, in just a few months.</comment>


Apple Plans To Reintroduce iPad 4 With 16GB Storage Variant - <AUTHOR> http://www.techfess.com/?p=234

<comment><USER2> Definitely better than buying an age-old iPad 2. It ought to be significantly cheaper than the cheapest iPad Air though,otherwise it wouldn't make much sense. Although, if they're priced really close, people might just force themselves to buy the iPad Air (similar to what happened with the iPhone 5c and 5s.)</comment>


An ancient civilization rooted in Hinduism. - <AUTHOR> http://eods.wordpress.com/2009/05/04/hinduism-primer/ how did Gandhi or Tagore helped to reshape the world? Whats the concept of non violence? From where does this originate? A quick guide to a civilization called hinduism <comment><USER2> From a western point of view, the concept of "Hinduism" seems extremely broad. A few hundred years ago, Catholics and Protestants routinely warred against each other, and many present-day Christians still deny that other self- identified Christians are "really" Christian. When hatred between Christians and even Jews started to ebb, conservatives had to invent the bogus "Judeo- Christian" identity to create a new viable "us/them" distinction and revitalize religious xenophobia in the US. When an American such as myself looks at the amazing variety of Hindu beliefs, his first thought is to suspect that Hinduism, too, is a political invention to unite a diverse group of people against the "other." I don't know of any evidence for this theory, though, and the idea of Hinduism as a common tradition seems to be pretty old. (Hinduism is certainly used to foster us/them thinking by the BJP now, but they seem to be capitalizing on the Hindu identity more than creating it.)

</comment><comment><USER3> Yes, Hinduism is one of the most difficult of religions [ _cultures_ , really] to pigeon-hole. The depths of yoga [Sanatan Dharma: Raja yoga] are nothing like the common conceptions of the multi-god-ed worship seen in travelogs. When you get beneath the surface and see the open-mindedness of the roots of Hinduism you may find it most understandable why great such minds in astronomy, physics, computing, etc. have been been birthed in Hindustan culture.

[Disclosure: retired yoga teacher.]

<comment><USER4> I am glad U pointed at the greatness and the depth.

</comment></comment><comment><USER5> I liked the comment on the submitted source about intercaste marriages. It seems that there isn't any unified "Hinduism" until there is social equality and social interaction among the various castes.

<comment><USER6> You mean

       * There is NO H!ndu!sm **till** 85% of all registered marriages in India are inter-caste.
       * Till then the truth is there are only Castes and NO H!ndus in India.

</comment></comment><comment><USER7> why is a documentary on religion even here in HN? downvote me if you want.

<comment><USER8> I'm probably with you on the relevance of this on HN; By the way if you really don't care about people downvoting you, then you won't bother mentioning it :)

</comment></comment><comment><USER6> Anybody can convert to Christianity/Islam but NOT to Hinduism.

<comment><USER9> Yep, I have heard that Hindus can only be born, never converted.

<comment><USER10> In some cases it is supposed to be twice born Hindu. Please refer to Koenraad Elst's writing on the same on Bharatvani.com

</comment></comment></comment><comment><USER10> Very intesreting one. I have always been impressed with hinduism.

<comment><USER11> "I have always been impressed with hinduism."

Care to elaborate? I honestly don't know enough to have an informed opinion.

<comment><USER10> Yes dude. The link blog is owned by me :) I wrote that blog in the first place. And I am not kidding. I have elaborated extensively on that blog why I like Hinduism</comment></comment></comment>


My webapp: Guitar tabs as they should be - <AUTHOR> http://guitaryst.com/

<comment><USER2> This is great, but as another comment below notes, beware the legal troubles that are headed your way. A number of wonderful guitar tab sites (starting with OLGA back in the day) have been taken down.

In fact, it seems that OLGA is still down: <http://www.olga.net/> And they just put up tabs.

<comment><AUTHOR> Yes, I know :( This kept me from doing anything in this direction for a long, long time, but in the end I just wanted to _build something cool_. I don't host any of the tabs so that might make a difference. However if people want to take me offline, I'm just going offline.

<comment><USER3> Your domain is already on a non-US registrar, so all you need to do is move from EC2 to a non-US host like abdicar.com, PRQ, admin.2x4.ru, or any "bullet- proof" host. They will ignore DMCA requests and their ilk.

</comment></comment></comment><comment><USER4> Your website doesnt seem to work under Firefox 3.6.12 (windows 7 64bits) . I can see the page 1second and after I am redirect to a blank page and the page is stuck loading.

Strangely the site works smoothly with Chrome..

<comment><AUTHOR> I'm sorry! This is a bug I just can't seem to fix (and it's not consistent either) or find out why it's happening.

<comment><USER5> If it behaves differently in FireFox and Chrome and it's inconsistent, it's usually an issue with the speed of JavaScript execution and the order of the JavaScript operations.

If it works in FireFox but not Chrome, it usually indicates a problem with the JavaScript executing too quickly. E.g. computing the width of one element and setting it based on the width of another element on the page, before the content of that other element has been fully rendered.

If it works in Chrome but not FireFox, it usually indicates a problem with the JavaScript executing too slowly. E.g. firing off an intensive process, like manipulating 100 elements on the page at once, and then firing off another action that depends on the previous process being completed. If the JavaScript execution is slow, it's possible to fire off the next event while the other is still being processed.

In this case you'll want to either have the previous function fire off an event when it's completed, and bind the next function to that event, or brute force it with a setTimeout.

Wow, that was way longer than I meant it to be. Oh well, hope it helps.

<comment><AUTHOR> FYI, I managed to track this down to the twitter 'hovercards' causing a fit onload. Got rid of them and the problem went away.

</comment></comment></comment></comment><comment><USER6> Very cool as a V1, with a user experience that's loads better than existing alternatives. Couple feature suggestions (that are probably already on your roadmap):

-User and/or editor reviews are a must. Tab quality tends to range from completely wrong to _almost_ right, and without any kind of community input it can be difficult for newbies to tell the difference.

-I don't know how feasible it is, but a web based version of PowerTab (or comparable solutions) would be great. Old-school tabs are nice, but when you can listen to a MIDI-fied version of a portion of a tab, it helps a lot.

<comment><AUTHOR> I have plans for getting much better tabs, but I'm not there yet.

Regarding number two, check out <http://www.songsterr.com>, I don't think I'm ready to compete with them yet :)

</comment></comment><comment><AUTHOR> I wrote this much in the same vein as <http://lystener.com>, as just an easier, better and prettier way than other guitar tab sites. Let me know what you think! :)

Edit: For people wanting more info, I wrote a blog post too: [http://kilianvalkhof.com/2010/css-xhtml/guitar-tabs-as- they-...](http://kilianvalkhof.com/2010/css-xhtml/guitar-tabs-as-they-should- be-guitaryst-com/) It has invites to the hosting platform I use: <http://djangy.com>, a very cool "Heroku for Django"

<comment><USER7> Definitely don't want an invite for this host. The site has been unreachable since the link made it to the font page of HN.

<comment><AUTHOR> I don't think so: <http://downforeveryoneorjustme.com/guitaryst.com> There's about 90 people online right now :)

</comment></comment></comment><comment><USER8> I find the tablature somewhat difficult to read. The color of the text doesn't contrast too well against the background. You might also try to find a typeface but I assume you need something monospaced for this app.

Otherwise this looks really awesome!

</comment><comment><USER9> This is really nice, I was thinking of working on something similar for a web- based music player I'm building. Just curious, is your tab data from one source, or a variety of sources? Or is that confidential? :)

Keep up the good work

<comment><AUTHOR> Feel free to email me! My email is at the bottom of the site or in my profile here :)

</comment></comment><comment><USER10> You need a demo button so I can see how it works without creating an account.

<comment><USER11> Or search for a song.

<comment><AUTHOR> Hover over "last.fm". Next to Last.fm I support Like.fm and Libre.fm, _and_ regular tab search :)

<comment><USER12> Consider putting a down arrow next to "last.fm" to show that it's a dropdown option. I had no idea until I read this comment.

</comment></comment></comment></comment><comment><USER13> At first I didn't notice that you could search for songs. It didn't work for me in Chrome or Opera (didn't bother trying other browsers after that); no music was playing at all. Nice idea though.

</comment><comment><USER14> i couldn't get this to work. i put "test" in for the last.fm name like was suggested here. a song and tab appeared, and nothing else. am i missing audio or something?

when i browse tab sites, i know which ones have the quality tabs. i choose ultimate-guitar and bassmasta as frequently as possible because i know i hate 911tabs, etc. i'm not going to switch to anyone's new web app unless i know they have the best tabs from these other sources.

</comment><comment><USER15> This is awesome. Hope you can get around the legal stuff. I wish I still had a guitar because I'd definitely be all over this.

</comment><comment><USER16> This is really cool. Hope you can deal with the legal issues, because I would use this for sure.

</comment><comment><USER17> FYI - The page has been stuck loading for me for several minutes.

<comment><AUTHOR> The Twitter button is being mega slow, just press stop and the page should load :) I'll look into getting loading those after the rest of the page is done!

<comment><USER18> You should just look into using AddThis, which allows you to load their script async and it'll load itself once the DOM is ready:

[https://www.addthis.com/forum/viewtopic.php?f=4&t=12202](https://www.addthis.com/forum/viewtopic.php?f=4&t=12202)

<comment><USER19> you can do the twitter button async as well [http://thenextweb.com/socialmedia/2010/08/13/the-twitter- but...](http://thenextweb.com/socialmedia/2010/08/13/the-twitter-button-is-it- making-your-site-join-the-fail-whale-shuffle/)

<comment><USER18> Nice find, but I find it kind of ironic that the page took about 10 seconds to finish loading from the other non-async scripts the author has on that page :)</comment></comment></comment></comment></comment>