Why Most Published Research Findings Are False (2005) - <AUTHOR> https://fermatslibrary.com/s/why-most-published-research-findings-are-false <comment><USER2> The problem I can see right now with scientific community is that, no one pays you to re-implement the same idea just to confirm that it is correct. Every professor wants shiny new innovation from her Ph.D student. No one wants you to experiment the currently published ideas.

I'm about to finish my master thesis. I implemented a couple of ideas collected from multiple papers in my thesis, and I can say all of those absolutely stunning results were just intelligently crafted experiments that are not applicable elsewhere.

Basically, my whole thesis is just to show that some paper was wrong and the idea is not applicable in another experiment.

<comment><USER3> I often have my PhD students re-implement ideas to gain skills and to verify a method works. It is possible to publish these efforts, but it isn't easy. It typically involves comparing multiple methods on datasets they haven't been tested on before to see how well the results generalize beyond the original paper. It is hard to publish in prestigious venues with this approach, but we have had some success. Replication and comarison makes for a good MS or early PhD project, but later PhD students have to showcase an ability to create new algorithms. In my lab, we try very hard to not cherry pick and to do good work that generalizes.

<comment><USER4> From your profile, you are working in Deep Learning. In other fields it's much more difficult to be sure that the replication is accurate.

Do you have the correct variety of rats? Are they receiving the same kind of food? Does they get the same illumination during the day? ... Theoretically al the details should be clear from the published paper, but most of the times the paper is full of "underspecified"[0] parts.

Also, in many fields even if the paper is only about calculations in a computer, the programs are not published (or are a mess (or an unpublished mess)) and the data are not published (or are a mess (or an unpublished mess)). So it's more difficult to even make a direct copy of the results of the paper.

Also, there is a lot of informal replication, essentially what you do but without the final publication step. Just replicate somewhat similar to the original paper, but then publish a version with some extension or tweak.

[0] aka "missing"

</comment></comment></comment><comment><USER5> It's worth noting that this is talking about research that involves sampling groups of people, or other similar sampling approaches. It is not talking about mathematical results which you can often find in computer science, physics, and elsewhere. Not is it necessarily true all of the physical sciences.

It also shouldn't be read as "science is broken and wrong so therefore my opinion should be considered equally." There is definitely a problem with accuracy in many scientific fields that needs to be addressed, but the baby doesn't need to be thrown out with the bath water.

<comment><USER6> It's not even talking about biology research, or even most medically related research.

While it was a great point to make at the time, far too much has been made of it. Yes, don't p-hack, but it's also better to publish data than to withold it just because there wasn't a positive result. We need better publication mechanisms for data that doesn't have any significant findings.

<comment><USER7> Err, this 100% applies to biology research, where there is absolutely a problem of small sample sizes, small effects, etc. Our studies (my field is cancer) are routinely vastly underpowered because of the high variability of the datasets we are studying, the low availability of samples, and the large number of variables we collect on these sample.

Also, to a good approximation, everybody p-hacks. Furthermore, the habit of publishing "noteworthy" results (true in every journal, especially true for large impact factor journals) is essentially p-hacking across the entire field. This is a huge problem.

<comment><USER6> How many of your papers consist of a single statistical test, without validation experiments? Because that's the setup that's described in order for "most published research findings are false."

In reality, I've never seen a biology paper without several lab techniques and orthogonal verifications, with p-values on some but not all of those experiments.

</comment></comment></comment></comment><comment><USER8> This is why one has to read papers in context. You can't just read a paper: you have to then go off and read some reviews that cover the surrounding science. Then read some other papers on the topic of interest. Pay attention to dates on papers, as opinions change with time. Note the disagreements.

Reading the scientific literature is reading the moment to moment output of a noisy search algorithm. Any given publication is near meaningless on its own.

This business of reading the context for a specific item of research isn't that hard. If as a layperson you feel up to having an opinion on a specific paper, then you are certainly equipped to do more reading in the field.

Start with review papers, which tend to be a gentler uphill slope, and then fit other papers into what you see there. Take note of the disagreements between reviews, the different emphasis placed on different aspects of the topic. In most scientific fields review papers are usually pretty good at explicitly covering the unknowns and debates of interest. The subtexts and unwritten stuff, such as funding-driven conflicts of research strategy, take longer to figure out. But one has to start somewhere.

[https://www.fightaging.org/archives/2009/05/how-to-read- the-...](https://www.fightaging.org/archives/2009/05/how-to-read-the-output- of-the-scientific-method/)

"The scientific community doesn't produce an output of nice, neat tablets of truth, pronouncements come down from the mountain. It produces theories that are then backed by varying weights of evidence: a theory with a lot of support stands until deposed by new results. But it's not that neat in practice either. The array of theories presently in the making is a vastly complex and shifting edifice of debate, contradictory research results, and opinion. You might compare the output of the scientific community in this sense with the output of a financial market: a staggeringly varied torrent of data that is confusing and overwhelming to the layperson, but which - when considered in aggregate - more clearly shows the way to someone who has learned to read the ticker tape."

<comment><USER9> An interesting perspective, but it doesn't really dissolve the big problems - that the "noise" in the output of this "search algorithm" is _absurdly high_ , and that single papers often drive real-world decisionmaking.

</comment></comment><comment><USER10> Super important paper, the implications of which have been corroborated repeatedly within the most prestigious publications in psychology, social sciences/economics and cancer biology. If you'd like to read more about such issues and actually work on doing something about it, you may want to check out the Reddit community ([https://www.reddit.com/r/metaresearch/](https://www.reddit.com/r/metaresearch/)) and a recent initiative at Stanford ([http://reproduciblescience.stanford.edu/](http://reproduciblescience.stanford.edu/)).

</comment><comment><USER11> The problem have a name: business.

If research is public, well founded by government, and universities are public entity research is accurate and effective, otherwise it's only a matter of making money quickly and moving on.

</comment><comment><USER12> This only adds credence to the fact that social survey is not a science. Most of it is glorified door to door salespeople work. It's not even research.

We have to draw a clear line soon to prevent good-intentioned people from being lumped into shitty science.

</comment><comment><USER13> Maybe not in mathematics

<comment><USER14> >Anecdotal evidence suggests that as many as a third of all papers published in mathematical journals contain mistakes - not just minor errors, but incorrect theorems and proofs…

[http://www.gwern.net/The-Existential-Risk-of-Mathematical- Er...](http://www.gwern.net/The-Existential-Risk-of-Mathematical-Error)

</comment></comment><comment><USER15> Please add a [2005] tag.

<comment><USER16> Done. Thanks!

<comment><USER17> It's a reprint of an article in PlosMed, where the context is obvious in the original but not here, so the title might need changing too.</comment></comment></comment>


How the Coronavirus Is Helping China Win the Trade War - <AUTHOR> https://www.ccn.com/how-the-coronavirus-is-helping-china-win-the-trade-war/ <comment><USER2> On the contrary, the Chinese government has removed many of the tariffs because their economy is tanking as a result of the recent travel restrictions.</comment>


Visualizing AWS Storage with Real-Time Latency Spectrograms - <AUTHOR> http://sysdigcloud.com/aws-storage-latency-sysdig-spectrogram/

<comment><USER2> > Every few seconds one of the writes takes forever [~5s]. You can notice the > long periods of inactivity, and after that a green dot at the right of the > chart: that's our slow call. What is likely happening is: the local cache > saturates and when that happens the application has to wait until the local > data is pushed to the remote volume. Boy, you sure don't want one of your > critical code paths to hit one of these slow calls.

I'm surprised that there's no asynchronous way that the FS cache will flush itself i.e. when it reaches 50% capacity, and rate-limit incoming requests if it's too full. The idea that an FS cache is so dumb that it can't do _anything_ while it's flushing its entire self is a bit scary - I'd expect that circular buffers and granular locking mechanisms could be used to great effect here. Is this kernel code? Userspace code? Is there research into this? Fundamental tradeoffs that I'm missing?

<comment><USER3> It would be interesting to see the client/benchmarking program. It almost sounds like it could be single-threaded ... which would mean the delay is an artifact of the benchmark only having one op outstanding, rather than something inherent in the storage layer.

<comment><USER2> Even with one client thread, though, shouldn't there be a background OS thread maintaining the FS cache and flushing parts of it? I don't think it should block the client just because it decided it was too full.

</comment></comment></comment><comment><USER4> That's clever and well executed. Wrong palette though :P

Red implies problems, green implies "normality", but here this association is misplaced. Perhaps a typical "fire" palette would be better - from dark brown to red to orange to yellow and, ultimately, to white for the extremes.

<comment><AUTHOR> OP here. Unfortunately the ansi palette is pretty limited so I didn't have a lot of flexibility in the color choice. That said, this can definitely be improved. I can work on it if people find it useful.

In the meantime, it's very easy to tune the colors your own: just modify this line [https://github.com/draios/sysdig/blob/master/userspace/sysdi...](https://github.com/draios/sysdig/blob/master/userspace/sysdig/chisels/spectrogram.lua#L40) in your local version of the script, using this as a reference [http://misc.flogisoft.com/_media/bash/colors_format/256_colo...](http://misc.flogisoft.com/_media/bash/colors_format/256_colors_fg.png).

<comment><USER5> > Unfortunately the ansi palette is pretty limited so I didn't have a lot of > flexibility in the color choice.

I believe the issue raised isnt the palette range itself, but rather that it is the reverse of what it is typically expected. The current red area "should" be green indicating there are many calls in the fast region while the current trailing green blocks "should" be red indicating problem issues

This color of green=good and red=bad I believe stems from Triage tags: [http://en.wikipedia.org/wiki/Triage_tag](http://en.wikipedia.org/wiki/Triage_tag)

Sometimes white is used below green as 'dismiss/not an issue'

<comment><USER6> Here, "good" is on the left and "bad" is on the right. The color is orthogonal (it gives the number of operations with latencies in a given bucket). For example, a red square on the right side of the output would have definitely been "bad".

</comment></comment></comment></comment><comment><USER7> Neat! This is definitely a step forward -- and thanks for the shout-out to our (that is, Sun's and Joyent's) prior work here. Tempted to also incorporate this into agghist and aggpack, the new DTrace actions I added for this kind of functionality.[1] Anyway, good stuff -- it's always good to see new visualizations of system behavior!

[1] [http://dtrace.org/blogs/bmc/2013/11/10/agghist-aggzoom- and-a...](http://dtrace.org/blogs/bmc/2013/11/10/agghist-aggzoom-and-aggpack/)

</comment><comment><USER8> It would be interesting to run these tests on different instance sizes, specifically for data on the instance store. The larger the instance, the fewer neighbors you have to worry spending those precious IOPS.

As for SSD vs Magnetic EBS, I can't say that I'm surprised. I'd assume that EBS implements some sort of cache in between you and your actual disk on the other side of the network so that the writes can return even faster. Try doing this again with reads and I'd bet you'd get some interesting results.

Edit: Also, did you pre-warm your EBS volumes? [http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs- prewa...](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-prewarm.html)

<comment><AUTHOR> Yes, I did pre-warm the volumes before using them.

And yes, there are several interesting workloads that I didn't test, including read only and read+write. It's potential material for another blog post.

</comment></comment><comment><USER9> Nice job on the graphics for the post. Thanks for taking the time to animate and annotate well.

</comment><comment><USER10> In the world of IOPS provisioned iops application demanding faster and faster iops this tool is handy for devops guy to find the truth of iops being used and how its performing, selecting if there is need to upgrade the storage ..

</comment><comment><USER11> Calling this visualization a heatmap would be more appropriate than a spectrogram.

</comment><comment><USER12> I really want to lop off the 'ns' and '10 sec' divisions of all the charts and expand the resolution...

</comment><comment><USER13> Well done!

</comment><comment><USER14> cool project</comment>


Half of all app store revenue goes to just 25 developers - <AUTHOR> http://www.theregister.co.uk/2012/12/04/top_25_app_devs_earn_half_of_revenue/ <comment><USER2> I've said this before. Almost all iOS developers (who are not full-time employees) I know make their money by building free apps for Fortune 500 Corporations, smaller companies, and other organizations. The consumer never knows, the developers handle everything from walking the company through the App Store initial registration to initial submission to updates.

It is all about ego. There is immense peer pressure on executives to have an app on iOS (and sometimes Android).

<comment><USER3> I ended up on a project like that. My first foray into "professional" software development, about 18 months ago:

I was an intern in college getting a CS degree, just finished my senior year. I had an summer internship lined up with a small company but they folded at the last minute so I had to scramble for something to fill my summer. I wound up as an intern at a financial firm. Fairly large but not one you've probably heard of.

I was told that I'd be on the mobile development team. They knew I didn't have experience but I said I was eager to learn.

Turns out, there was no team. _I_ was the team. The CIO had decided that they needed an iPhone app, despite being an entirely B2B company with virtually no consumer brand awareness, and he'd already sold the corner office crowd on the idea.

Problem is, no one in IT wanted to build it. The CIO had no clue what he actually wanted, they were understaffed as it was and no one had the time.

Enter me.

In my first meeting with the CIO, he pulled out his iPhone, went to m.msn.com and said "I want this but for $COMPANY." I went back and laughed in my cube for a while. I think he just liked the news article carousel MSN had.

My boss had talked him down to a mobile website which I began throwing together in jQuery Mobile. A few loan calculators and some contact info. I had a few ideas for something more aggressive but I got shot down as they needed me on other projects anyways. They had me spending a few hours a week on mobile dev just to keep the CIO happy.

My internship ended right as the CIO was bringing in a big consulting firm to replace everyone. And that's the story of how I decided not to work at a megacorp.

<comment><USER4> Don't let that experience sour you too much about working for a megacorp. It sounds you got quite a crap deal.

The worst project you can be on is one:

1\. With no clear goals, he has no idea what he wants.

2\. No support team; basically, like you said, you're the team, and even worse, you're "green".

It sounds like you got one of those "pie in the sky" projects; there's no clear benefit that the CIO can get from this, and if you succeed, he looks awesome; if you fail, he doesn't care, it's one of those "throwaway" projects.

In a megacorp, you have to get into a project which is directly involved in their day to day business, directly contributing to revenue, to get more recognition, resources, and $$$. Get into such a project, or make yours give some visible benefit to the company.

In your example, I'd have tried to pivot it to be a reporting tool; I find that senior management in banking generally have a poor visibility in their business monitoring, current transaction levels etc; this can give clear and visible benefit to the company.

Once you can show the benefits to your Boss and the CEO, the extra help and resources will follow.

<comment><USER5> I agree. You got handed a pretty sweet opportunity to learn and to shine. The CIO had a goal: he wanted to impress the other executives with an iPhone application. You even had a hint: he liked a news carousel. IMO choosing to build a mobile website instead was a mistake. I would have chosen a "RAD"-style app builder and produced a first version with visual appeal. You'd make him look good, achieve a first win, and become known as "the mobile guy", on the route to become Mobile Development Technical Lead.

</comment></comment></comment></comment><comment><USER6> How much non app store shrinkwrap software revenue goes to the top developers? I would imagine a far bigger proportion than 50%. Just consider Microsoft, Adobe, EA, Activision, and how much is left for everyone else? (B2B is probably the same but it's harder to figure out.)

For example, Adobe (usually considered number 2 in shrink wrap desktop software) has roughly $10B in annual revenue, Autodesk is barely a fifth of that. Microsoft is $70B, a good deal of that is just MS Office. Activision is maybe $5B, EA less than $4B. Pixelmator — one of the standout success stories of indie Mac development — probably has under $5M. If there are 100 indie devs as successful as Pixelmator I'd be surprised — MS Office alone is 7000x bigger.

If anything the iOS App Store sounds far more democratic

An article like this is worthless without context and it offers nothing new.

</comment><comment><USER7> This will hurt Apple in the long run.

Soon app innovation will stifle because only a very few companies are making money. Indie/mid size developers will stop working on innovative apps and start working for bigger risk aversing boring companies.

Biggest reason imho is that these top 25 are one big self fulfilling prophecy: A top 25 position guaranties big download numbers. And to get there you need either a collection of apps already out there for cross promotion or buy lots of ads and installs.

Switching to a metric that indicates quality much like engagement measured by # sessions or # minutes use/month will make quality apps stand out much more.

<comment><USER8> >Soon app innovation will stifle because only a very few companies are making money. Indie/mid size developers will stop working on innovative apps and start working for bigger risk aversing boring companies.

I doubt it. The real problem with the app store is 99% of what's there is either crap nobody could want or a me-too version of one of the big sellers. People developing that kind of stuff don't deserve sales, and if they drop out of the business, well, no harm done.

<comment><USER9> The biggest problem is when the 1% of good apps get overlooked, or have 90%+ piracy rates.

</comment></comment></comment><comment><USER10> Over the long run, Apple may not want small developers playing a prominent role in the App store.

There's more risk to the brand compared to Electronic Arts, and Apple could probably charge for Fortune 500 companies to place their apps in the store.

Stripping out the small developers would remove a lot of scams and address discovery issues.

700,000 apps isn't consistent with the way Apple's other stores operate. Nor is it consistent with their brand strategy of high quality via curation.

<comment><USER11> Without small developers, there would never have been Angry Birds, Tiny Wings, Temple Run, and countless other (when released) indie games. Ditto for apps.

I think what you mean to suggest is that Apple should raise the bar for app approva. Given the accumulation of thousands of crufty, poorly-designed apps, I would totally agree with this.

<comment><USER10> My point is now that they have Angry Birds, etc. they may not really need small developers. Back in the late 1980's and through the mid 1990's there were lots of independent computer shops building PC's in the U.S. The industry changed and those shops are largely gone.

What the report indicates is that the gold rush is ending. Yes there's still mining, but it's increasingly being done by Rio Tinto with giant trucks, not someone squatting in a stream with a pan.

</comment></comment></comment><comment><USER12> _"Of the $120m in total revenue generated from paid app downloads and in-app purchases in the US during the first 20 days of November 2012, fully half was split between just 25 developers."_

That's actually pretty diverse when you compare it to other markets: there are 6 big publishers [1], 6 big media conglomerates [2], and only 3 big record labels [3].

I also wonder how the pie was divided when software was only sold in boxes. I believe that Electronic Arts and Disney have been doing well far before the App Store came along.

[1] <http://www.criticalpages.com/2012/the-big-six/#more-1252>

[2] [http://en.wikipedia.org/wiki/Media_conglomerate#Notable_exam...](http://en.wikipedia.org/wiki/Media_conglomerate#Notable_examples_.28the_big_six.29)

[3] <http://en.wikipedia.org/wiki/Record_label#Major_labels>

<comment><USER13> Those aren't fair comparisons though, the stores themselves are more akin to your examples than the developers selling through them.

But it's actually worse, if you're a musician you can sell your music through a label or you can sell it on your own. If you are a mobile developer you can sell through one of the app stores or you can pound sand.

<comment><USER12> _"the stores themselves are more akin to your examples than the developers selling through them."_

How so? Game publishers sell their products through iTunes – book/magazine publishers, movie studios, and record labels do too. The game publisher invests and curates, Apple acts as distributor and retailer – that's the same as how other media work.

 _"If you are a mobile developer you can sell through one of the app stores or you can pound sand."_

Or the third option: you can work for one of the successful software publishers. We now know there are at least 25.

Writers don't have to pretend to be publishers. Recording artists don't have to run a record label. Mobile developers don't have to be software publishers or distributors.

<comment><USER13> That's like saying you can get a big 3 record contract or become a studio musician. As long as you're playing music right? My point is just that comparing the disparity in the app stores to the disparity in other media verticals is not a good one.

</comment></comment></comment></comment><comment><USER14> There's a strong power law with app revenue on iOS . The new updates in the iOS App Store continues to favor the top producers.

Among iOS games the bottom 80% of apps make around 3% of the revenue. [1]

This blog post has more information from game developers: [http://www.streamingcolour.com/blog/2011/09/28/results- ios-g...](http://www.streamingcolour.com/blog/2011/09/28/results-ios-game- revenue-survey/)

Here's a graph of self-reported revenue among iOS Game Devs: [http://www.streamingcolour.com/blog/wp- content/uploads/2011/...](http://www.streamingcolour.com/blog/wp- content/uploads/2011/09/03_AllLifetimeRev.gif)

[1] : [http://www.streamingcolour.com/blog/wp- content/uploads/2011/...](http://www.streamingcolour.com/blog/wp- content/uploads/2011/09/05_RevDistribution.gif)

</comment><comment><USER15> This is really just a result of app store architecture. Being on a top grossing or top download list simply perpetuates an increase in your download numbers and consequently your placement on the ranking.

<comment><USER16> I can't speak for Android, but I don't think the top 25 lists are too prominent on iOS. The Top Grossing List shows very few apps from Top Paid and Top Free, so the three top lists don't seem to promote each other a lot.

I usually shop on Apple's curated landing page precisely because it is full of indie(-ish) content. Not sure what Apple could do better there, short of killing the Top lists altogether.

</comment></comment><comment><USER17> I wonder if Steve Jobs came to regret the famously ambivalent attitude Apple had to gaming on the Mac?

There's a great scene in the (generally great) BBC dramatization of Sinclair vs Acorn in the 80s, where Acorn are disappointed that all the games are being made for the Spectrum, meanwhile Sinclair is annoyed that his amazing machine is being reduced to a games console.

The greatest achievement of the iPhone (despite it's many amazing feats) appears to have been producing a socially acceptable Gameboy, just as Sony managed to associate the Playstation brand with nightclubbing and other grown- up pursuits in the early 90s to great success.

<comment><USER18> The Playstation really used to be associated with nightclubbing? Jeez, how'd they pull that one off..

<comment><USER19> Wipeout was one of the launch titles in the UK and featured techno/dance music on the soundtrack

<comment><USER17> Some details from the Wikipedia page for Wipeout:

 _Wipeout was developed and published by Psygnosis, designed in part by The Designers Republic. Aimed at a fashionable, club-going, music-buying audience, The Designers Republic created art for the game's packaging, in-game branding, and other promotional materials. Music tracks were licensed from non- mainstream electronica acts to create an original soundtrack album to promote the game.[3]

Wipeout was first released alongside the PlayStation in Europe in September 1995. It was the first non-Japanese game for the console. Two months later in November 1995, it was released in the U.S. The game went to number one in the all format charts, with over 1.5 million units of the franchise having been sold to date throughout Europe and North America.

Launch activities for the game included installation of PlayStation consoles running Wipeout in popular night clubs, the release of an accompanying soundtrack music CD, and the sale of a range of Wipeout clubwear._

</comment></comment></comment></comment><comment><USER20> Well, this might not be that accurate. There are several app/companies that generate revenue outside of iTunes run transactions. Apple's in-app purchase rules only apply to digital content and services; they do not apply to physical goods and servicse. So, Kayak, Expedia, Hotels tonight, Viator, Amazon's store app, etc are all quite popular and earn money from their iOS apps that wouldn't be recorded or "taxed" by apple.

<comment><USER21> Yes, the Register headline does not match the content

Headline: "Half of all app store revenue goes to just 25 developers"

In article: "total revenue generated from paid app downloads and in-app purchases in the US"

Looking at my Google Play developer console, at daily device installs across categories for all apps in the store, non-US downloads account for 75%-82% of all downloads, depending on the category. So just watching the US gives one a false picture (especially for the Japanese-Korean market, which are quite large and have their own big players).

Also, only paid apps and in-app purchases are counted. Pay apps are not as popular a monetization scheme with Android as it is (was?) with iOS. In-app and freemium apps are a little more popular. Tapjoy has an increasingly popular monetization scheme for some of the top games on Android ( [http://www.appbrain.com/stats/libraries/details/tapjoy/tapjo...](http://www.appbrain.com/stats/libraries/details/tapjoy/tapjoy) ) which wouldn't even be counted by this survey.

This 2012 Cambridge study ( [http://techcrunch.com/2012/03/06/in-mobile-apps- free-aint-fr...](http://techcrunch.com/2012/03/06/in-mobile-apps-free-aint- free-but-cambridge-university-has-a-plan-to-fix-it) ) says 58% of Android apps support themselves with ads. So this survey doesn't account for that. All of my current Android revenue comes from ads, for what that's worth.

</comment></comment><comment><USER22> Yet another zipfian distribution in computer science. Hoocuddanowed

</comment><comment><USER23> As an indie dev, I'm way more worried by this development: [http://www.usatoday.com/story/tech/personal/2012/12/05/new-a...](http://www.usatoday.com/story/tech/personal/2012/12/05/new- amazon-kids-service/1747421/)

If everyone moves to this subscription model, the indies won't even be invited to the party.

<comment><USER24> this is just for renting content. While there is the possibility for games, I'd find it unsettling that an app is installed on my phone one day and they uninstall a bunch of apps if I cancel my subscription.

<comment><USER23> The article mentions that apps are included also.

</comment></comment></comment><comment><USER25> So, really, just like all the other long-tail internet market segments?

</comment><comment><USER26> I'm not a mobile app dev, but I could have sworn that I'd heard until recently that no one made money from this stuff. Obviously this article implies that many people are like that, but it also seems to imply that there is a transition area -- a middle tail if you will -- in which independent devs can make money without becoming Zynga or Rovio.

<comment><USER27> There certainly is. I know from how well our iOS apps chart based on their sales numbers that there must be a huge long tail making nearly zero. 10 paid downloads a day is enough to break the top 1000 in many categories, so that leaves 20-70,000 apps in those categories that sell less than that.

There's a lot of doom and gloom about the big guys pushing out the indie developers, but I believe that there will always be a middle to the market where a small studio or single indie developer can grind out a living on niche apps that aren't big enough for the big guys but are big enough to be worth pursuing. The hard part is finding the right size niches.

</comment></comment><comment><USER28> Well, isn't it the same with desktop software? I bet the big desktop-software developers (Apple, Microsoft, Adobe etc) get about half the revenue of that market as well.

That doesn't mean there isn't room for smaller companies/products, as is clearly evident looking at my own applications folder (Flux, Transmission, Switch, Appcleaner etc).

</comment><comment><USER29> I think the assumption is "there's no one making hundreds of thousands but these people", but I'm willing to be there's plenty of people making a living from apps on the app store. Maybe not as good as they could make taking a corporate wage, but probably more satisfying.

</comment><comment><USER30> Dig into these details a bit deeper, and you'll see the average revenue of these 25 developers (by my math) is $4.38m/year. But of course, the developers don't get the full $4.38m, apple get's a 30% cut, leaving the developers with $3 million in revenue.

How many of these top 25 developers can operate on $3 million per year?

Of course, their is likely another significant difference between the #1 developer and #25, so I wouldn't be surprised to see #25 developer making < $1m while #1 makes $15m+.

All of this is of course assuming that the first 20 days of November are consistent with sales for the rest of the year.

<comment><USER12> Hmm. That's not how my math works out.

$60 million divided by 20, times 365, divided by 25 equals $43.8 million.

Times 0.7, that results in $30.66 million in revenue per one of the 25 developers (average).

<comment><USER30> Oh you're right, sorry about that. Funny how a factor of 10 makes things so much better... Or worse.

</comment></comment></comment><comment><USER31> Seems like a misleading title to me. "Disney, Electronic Arts, Gameloft, Glu, Kabam, Rovio, Storm8, and Zynga," employ many developers; certainly more than 25.

</comment><comment><USER32> Like monkeys trapped in a little room, we killed ourselves until there was just 25 smart monkeys left. Kudos to us in markeiting and pricing strategy.

In this process we also programmed people to relate software to free content. Good luck trying to revert this damage.

We should all quit coding and go to business school. Rule or be ruled.

<comment><USER33> Developers are a commodity (700k+ apps) so the prices go down. Unsurprising and good for the consumer.

Are you proposing devs stop competing and fix prices in order to keep our jobs? (I am a developer)

<comment><USER32> Just because developers have been treated as a commodity it doesn't mean we are. Sure I don't feel so. Do you? Anyway, we have to change this as it is not right. We put a lot of effort to make good software, and cutting each others throats in a mindless price war isn't going to pay anyone's bills.

What you find unsurprising and good for consumers is extremely bad for developers. The AppStore Price Wars Attack of the Clones was catalyzed by basic naïveté towards widely known business practices. Worst, we could've fixed it by reading some business books before committing to such low price tiers. But, unfortunately the damage is done.

It is inconsistent with our intellects that we developers behave like mindless monkeys. Also, unacceptable is the fact that any guy selling bananas at any given farmers market understands more about pricing, and the facts of microeconomics, than most of us. This should've been fixed in the universities, but even so there's time for that.

I'm not proposing price fixing as that's immoral, and against law. What I'm stading for instead is for us as a community to start behaving more intelligently regarding business matters. Also, I crave for us developers to value more the sweat and tears we put into our craft.

Programs aren't just code, instead they're the materialization of our ideas through hard work. I think that worthy more than a buck.

I am a developer too.

<comment><USER33> How I feel has little to do with how markets work.

Putting a lot of effort into something means nothing. I can spend days digging a hole with a lot of effort and then someone with a digger does it in one hour. The only metric that matters is what buyers are willing to pay.

I'm curious what you have in mind when saying "more intelligently regarding business matter"?

As an aside: I always find it slightly offensive when someone speaks for me by using "we", "us" or "our". I may or may not share your opinions but I'd rather speak for myself.

<comment><USER32> Too bad you felt offended by my use of pronouns since I evidently wasn't speaking about you. Just because you're a developer doesn't mean you're the representation of an entire group.

Perhaps you never heard about Behavioral Economics [1], and that's why you quickly dismissed your feelings from this subject. Nonetheless people's feelings play an important part on how the markets are played.

I understand you're curious to learn about my views on business, but first you need to understand more about emotions, without it you're a dead duck. Sorry as I can't give you a link or recommend a book to help you out here. But you can always go out and interact with real people, be openharted, and try to learn from them.

[1] <http://en.wikipedia.org/wiki/Behavioral_economics>

</comment></comment></comment></comment></comment><comment><USER34> What do you expect when customers expect apps < $5?

The only way to make a living is to get tons of purchases, which isn't easy.</comment>


Boeing planes were missing safety features that would have cost airlines extra - <AUTHOR> https://www.theverge.com/2019/3/21/18275928/boeing-plane-crashes-missing-safety-features-add-ons-extra-charge <comment><USER2> Prior to now, this doesn't seem like it would have been much of a fix. Pilots would still have had to understand what is happening when this light went off: that there is a system (MCAS) that is taking faulty input from the AoA and pushing down the trim. And to fix it they need to cut the Stab Trim Runaway switches and manually trim the aircraft. If this light had been available in the two crashes would pilots have really understood what to do? Or would it have just been more confusion? You might assume the faulty sensor was inputting into autopilot, but you'd see autopilot is off, and you didn't have any idea there was this MCAS system enabled instead.

EDIT: now after the fact it's a fine addition because every single 737 pilot in the world is going to be acutely aware of this possible scenario now and to cut the Stab Trim Runaway switches.</comment>


One Size Fits No-One - <AUTHOR> https://riskfirst.org/One-Size-Fits-No-One <comment><USER2> Main take-away seems to be to tailor the method to the risks you face.

I'm not sure how this helps, since you now need a method for identifying and prioritising risks. Hmm</comment>


Theoretical Computer Science – An Introduction [pdf] - <AUTHOR> http://www-cc.cs.uni-saarland.de/media/lectures/W1415/L-Grundz%C3%BCgederTheoretischenInformatik/ti_FfSJlCM.pdf <comment><USER2> God. I did all this years ago, even wrote a masters thesis on formal verification. And I can actually not remember a single time when this was actually useful, other than perhaps really obnoxious interviews. Don't get me wrong, it's interesting, and if you get through this and understand the matter it will make you a better computer scientist. But it's really not very applicable at all.

It's the computer science analog to latin for modern day languages... Perhaps less than.

<comment><USER3> I think a better analogy would be

modern languages : software development (applications)

linguistics : theoretical computer science (theory)

Latin : Turing machines (classic models)

If all you are interested in is applications, you can mostly ignore the theory, but sometimes theoretical considerations help you think more abstractly about your application to gain more insights.

The classic models are mostly only relevant to theorists who can use them as objects of study, if they so choose.

<comment><USER4> I think it's closer to think of it in terms of

Software Engineering = Mechanical Engineering

Computer Science = Science/Physics

A lot of the mess we have in software development comes from thinking that you can build massive bridges without understanding of physics. Or by imitating other massive bridges without understanding why they are the way they are. Yes, you will work 99% of the time on other things that physics, like building materials and design and use cases, but it can get really really nasty without the foundation.

<comment><USER5> I disagree. I think many of the problems in software development as practiced today originate from thinking that the theory is all that is necessary.

To take your analogy, my view is that in practice it is considered that we should hire physicists or mathematicians to design and engineer bridges. "Engineering" is almost sneered at as being somehow inferior or a trivially learned skill.

<comment><USER6> > I disagree. I think many of the problems in software development as > practiced today originate from thinking that the theory is all that is > necessary.

This is such horseshit. Computer Science gives you the intuition needed to guide you to making more correct decisions you make in building your software rather than wrong. When you have these practitioners hitting the scene all of a sudden who just simply learn xyz latest framework/tool/fad and then are faced with a new and interesting complex challenge (for example, computers all of a sudden now have multiple cores! surprise!), they do not have the background to adapt and spend much time cutting their teeth, creating many bugs in their wake.

If you think that having the theory makes you write worse software, I feel bad for you because your computer science education must have been shit and you probably wasted your money. In that sense I understand the bitterness that a lot of people have.

<comment><USER5> I write "engineering is more than theory" and you conclude "he means theory is useless."

Here's my view, as a person who has formal education in engineering, physics, and mathematics: there are an awful lot of CS grads looking for nails to apply their textbook theory hammers to without understanding that simply knowing theory is not enough. I think you need to reconsider _why_ the bitterness exists.

<comment><USER3> They: _you will work 99% of the time on other things [...] but it can get really really nasty without the foundation._

You: _I disagree._

Do you see how someone could make the mistake of thinking you meant "theory is useless"?

FWIW, I agree with you both.

<comment><USER5> I wasn't clear: I was referring specifically to the analogy drawn between engineering/physics and this industry. The analogy is an ideal that I don't think reflects the practice. In practice this industry focuses on theory, and sometimes quite intricate theory, as the absolute most important knowledge to have almost to the exclusion of other things.

The bitter and vitriolic comment I responded to is a reflection of this.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> Can't get the document to load. The webserver is probably down due to HN's hug of death.

Anyone has a copy mirrored somewhere ?

<comment><USER8> archive.org has a copy: [https://web.archive.org/web/20170707011101/http://www- cc.cs....](https://web.archive.org/web/20170707011101/http://www-cc.cs.uni- saarland.de/media/lectures/W1415/L-Grundz%C3%BCgederTheoretischenInformatik/ti_FfSJlCM.pdf)

</comment></comment><comment><USER9> This document stretches a little over 200 pages and it would be helpful if it included a table of contents so we can get a feel for what it's all about.

<comment><USER10> it's a theory of computation/formal languages textbook. thw canonical reference is sipser's intro to theory of computation but i like hopcroft, ullman's intro automata, languages, computation much more.</comment></comment>


No, I won't be your business co-founder - <AUTHOR> http://arnoldhur.tumblr.com/post/22794390635/no-i-wont-be-your-business-co-founder Just a bit of fun for a Friday afternoon <comment><USER2> Came expecting insightful analysis of the state of startup business cofounders in the tech scene in 2012, got snark.

(Especially if business cofounders being approached by techies have their "list of things that annoy them", for example)

</comment><comment><USER3> Same, expected some good counter arguments to the article mentioned in the post. Instead, it reinforced my every stereotype about business people.</comment>


USB Typewriter: A groundbreaking advancement in the field of obsolescence. - <AUTHOR> http://www.usbtypewriter.com

<comment><USER3> To those interested in how it works, I followed a few links, and found their instructions for their kit: <http://www.instructables.com/id/USB- Typewriter/?ALLSTEPS>

</comment><comment><USER4> I'm trying to figure out how they implemented backspace on the paper.

<comment><USER5> On an actual typewriter, backspace just moves the head one character backwards. It doesn't inherently erase anything

But if you _do_ want to actually erase text, there still is a way - <USER2> typewriters had multiple ink ribbons. In addition to black, you might have red for indicating deficits in accounting, or for erasing text you'd have a white ribbon.

So "erasing" on a typewriter is basically just typing the same text over the top again, this time in white so it doesn't show against the paper.

<comment><USER6> Didn't work on your carbon copies, though. In my high school typing class, accuracy was preternaturally stressed.

<comment><USER7> Yup, in the working world it was not unusual for secretarial professionals to be expected to turn out a perfect page every time or redo it until it was perfect.

<comment><USER8> When I was younger, I once worked with a professional secretary. She could touch-type accurately like a speed demon, and she could take shorthand. This was in the days before corporate email, so everything was done using interoffice memos, and she was worth her weight in gold.

I wish I learned shorthand (such as teeline) while I still had the time/energy to learn it. I'm sure technology like Siri will put an end to that.

</comment></comment></comment></comment></comment><comment><USER9> It is probably quite rare already, and getting more so, but if you had to work with an older content creator that felt most comfortable using their trusted mechanical typewriter, this might actually be useful.

<comment><USER10> My impression (based on long acquaintance with a whole bunch of them) is that most "older content creators" either write long-hand then copy-type on a word processor, or adopted word processing as their primary input mechanism with shrieks of glee in the 1980s. The ones who still insist on using a manual typewriter are eccentrics, or jerking your chain.

Manual typewriters were pigs. They take a lot of effort to operate and produce very uneven impressions on the page. Because it's a mechanical lever system, they have a very long key depression -- typically 2-3 centimetres. Ever trapped your pinkie under the (sharp) rim of an adjacent key? If you're not a _very_ precise typist it happens every few minutes on a manual typewriter. Because of the effort involved in hammering the keys, and the fun of trying to clear the frequent key jams you experience if you type too fast -- the type arms need to have time between keystrokes in which to fall away from the platen; if you type too fast you end up jamming them together -- it's very difficult to attain the same typing speed on a manual typewriter as on an electric model of any kind (except for the early, insanely slow, daisy wheel machines) and you end up with sore, inky fingers.

NB: Your go-to reference for the history of typewriters is "Century of the Typewriter" by Wilfred A. Beeching: [http://www.amazon.com/Century-Typewriter- Pb-Wilfred-Beeching...](http://www.amazon.com/Century-Typewriter-Pb-Wilfred- Beeching/dp/0951679007/)

</comment></comment><comment><USER11> If you want the typewriter "feel" without the typewriter, try a Model M: <http://pckeyboards.stores.yahoo.net/en104bl.html>

<comment><USER10> A Model M feels nothing like a manual typewriter. Trust me on this. (I own a Model M, and wrote my first million words on a manual typewriter, until the keys began snapping from metal fatigue.)

Having said that, the Model M _does_ feel similar to the classic IBM Selectric golf-ball typewriter, which was actually a whole lot more user-friendly than any manual device (although it guzzled electricity, hummed loudly, and took a hand-cart to move around).

<comment><USER7> The one thing the M doesn't convey of the total Selectric experience was the immediate and alarming belief that, after every keystroke, the typewriter had launched itself an inch forward (no mean trick considering how heavy they are!). They _usually_ didn't do this, but I've never had that 'did I just stick my finger into a bear trap?' feeling with anything else, even other electric typewriters.

The observer, of middle 20th century American desks, might think that the solid oak frame and general bombproofedness is at attempt to convey solidity in the person behind the desk, a psychological trick. They may be that, but they are also built the way they are because people typed on them with these things, and lightly built IKEA desks could very easily shake themselves to bits. I recall a story involving a typewriter lift in the side of one of these desks, of US Navy vintage, whose massive spring was calibrated for some ridiculously heavy typewriter--possibly a Selectric. When the typewriter itself was on the platform, it rose smoothly and gradually to a working height. When the platform was unloaded or loaded with, as I recall, a CD collection, the right word for what happens next unless you are extremely careful is "catapult" or possibly "major concussion and several months worth of dental work".

No keyboard has ever even loosely approximated this unless it was also connected to a typewriter (the TTYs and whatnot). Which, on balance, is probably a good thing.

</comment></comment></comment><comment><USER12> All those models look fantastic, don't know if I would go for something like that but still what a great project.

</comment><comment><USER13> Pretty cool but for ergonomics, nothing tops this: <http://i.imgur.com/wk1c8.jpg></comment>


New artificial intelligence beats tactical experts in combat simulation - <AUTHOR> http://magazine.uc.edu/editors_picks/recent_features/alpha.html <comment><USER2> I can't believe after all the money and time Elon Musk, Stephen Hawking, and Bill Gates spent trying to keep AI out of weapons, these idiots are going to make it happen. I'm not saying ALPHA is going to turn or anything, but it is a gateway to things a hell of a lot worse.</comment>


Ask HN: Games like Uplink? - <AUTHOR>

Does anyone know of any games similar to Uplink (created by Introversion software) ?<p>I enjoy them a lot and they help motivate me to program <comment><USER2> [http://telehack.com/telehack.html](http://telehack.com/telehack.html) is a late 80's version of the internet you can hack your way through. It was a lot better before they added the ascii captchas to stop botting.

[http://www.darksigns.com/](http://www.darksigns.com/) is supposed to be a clone of Uplink. I haven't played it, so I can't tell you if it's any good or not.

There's also Digital: A love story, and Analog(ue?): A hate story, but they're point and click adventure games dressed up to look like hacking games.</comment>


Computer Software (1984) - <AUTHOR> https://fermatslibrary.com/s/computer-software <comment><USER2> Looking at this reminds me of reading Scientific American when I was a child. The articles were in-depth, scholarly, and often difficult, even when simplified for general consumption. I know Scientific American changed its format to survive, but I miss this rigorous style.

</comment><comment><USER3> I've just bought this Scientific American issue a week ago in an used book store for around 2$. Mainly because of Wirth and Kay and to read some early Wolfram. Strange coincidence to see this here now.

</comment><comment><USER4> If you are interested in reading the original paper without the annotations, as I was, you can find it on Alan's Viewpoints Research Institute site here [0].

[0] [http://www.vpri.org/pdf/tr1984001_comp_soft.pdf](http://www.vpri.org/pdf/tr1984001_comp_soft.pdf)

<comment><USER5> Er, can't you just ignore the annotations? They are in a different part of the screen and don't modify the original paper. Not affiliated with this website but wondering why you felt the need to seek the original paper from a different place when it's clearly right there...

<comment><USER6> Not the parent but when you click it slides out a sidebar to show the discussions, covering the content. The annotations also take up a lot of space making the text smaller.

On the plus side they (Fermat's Library) converted it to text, where the PDF versions are all image scans.

<comment><USER7> I'm new to Fermat's Library, but I'm perplexed by what they've done. They appear to have OCR'ed the paper, and it appears that you can select a region of text, but if you copy that region and paste it, it consists entirely of garbage characters. Similarly, they've somehow broken CMD+f.

<comment><USER5> Looking at the HTML source, it appears they've used pdf2htmlEX: [https://github.com/coolwanglu/pdf2htmlEX](https://github.com/coolwanglu/pdf2htmlEX) / [http://coolwanglu.github.io/pdf2htmlEX/](http://coolwanglu.github.io/pdf2htmlEX/) \-- the first demo there (which is also from a scan) also seems to have the same property you mentioned.

</comment></comment></comment></comment></comment><comment><USER8> > "What [the computer field] needs first is a William of Occam, who said > "Entities should not be multiplied unnecessarily." The idea that it is worth > while to put considerable effort into eliminating complexity and > establishing the simple had a lot to do with the rise of modern science and > mathematics, particularly from the standpoint of creating new aesthetics...

The tricky thing is he argues for "sophistication" here[0], which on the surface seems antithetical.

Picking (and committing-to) a (correct) abstraction can be tricky. Also, these "axioms" are often made true by useless qualifiers like "unnecessary" complexity, or even "complexity". If it's _required_ , it's not "complexity", but a necessary implementation detail. Pick in good faith, keep a loose grip, have fun.

[0] [https://www.youtube.com/watch?v=NdSD07U5uBs?t=345](https://www.youtube.com/watch?v=NdSD07U5uBs?t=345)

</comment><comment><USER9> Alan Kay's YC Startup School lectures "How to Invent the Future" really influenced me, wonderful humanitarian wisdom: [https://www.startupschool.org/videos/11](https://www.startupschool.org/videos/11)

It was also a privilege conversing with him via email about them and otherwise, here are a few interesting quotes from him: "By all means, please take a look at my colleague Bret Victor's ideas -- he is one of the two or three strongest thinkers to emerge since Engelbart." \+ "Minsky's "Society of Mind" (and the later "The Emotion Machine") are still very good evokers of what needs to be done. (It is generally more complex that most people would like to think and do)."

<comment><USER10> Do we have a transcript of "How to Invent the Future" available?

I prefer to read.

<comment><USER11> Click "Lecture Transcript" below the video.

</comment></comment></comment><comment><USER12> I found it somewhat humorous that at every level above Fortran in the diagram of language abstraction level there was an entry for Lisp.

<comment><USER13> Well, Lisp is _the_ language family where you get to choose the level of abstraction you need.

</comment></comment><comment><USER14> I love the care taken in writing artfully and entertainingly.

</comment><comment><USER15> That graphic on inheritance programming - is that why it's called a web "browser?" (This graphic is a great explanation of object oriented programming!)

</comment><comment><USER16> Nice how in the diagram only LISP appears under HLL, VHLL and UHLL.</comment>


Ubuntu solves terrorism - <AUTHOR> http://ok-cool.com/posts/read/227-ubuntu-solves-terroism/

<comment><USER2> Great that you got your mom squared away and all, but no.</comment>


The skill-building recession - <AUTHOR> http://www.economist.com/blogs/freeexchange/2009/11/the_skillbuilding_recession.cfm

<comment><USER2> A good follow up question would be: Will the US economy be able to absorb these skilled laborers upon graduation?

</comment><comment><USER3> Well, the recession may be an indirect reason why i'm going for a PhD instead of "working for real".

<comment><USER4> It's the reason I'm working full time whilst studying for a M.Sc. in Software Engineering full time. Just because the world is in a recession it does not give any person the excuse of not learning new skills or not applying their current skills to interesting problems.</comment></comment>


Gmail's next overhaul is radical and will make it look more like Google Plus - <AUTHOR> http://www.theguardian.com/technology/2014/may/12/gmail-redesign-overhaul-radical-google-plus-now

<comment><USER2> The primary thing I noticed when I first saw this pointed out is AndroidPolice's articles on the [Google+ redesign]([http://www.androidpolice.com/2014/04/16/significant- google-a...](http://www.androidpolice.com/2014/04/16/significant-google-app- redesign-allegedly-slips-out-in-series-of-screenshots/)) and the [Gmail Redesign]([http://www.androidpolice.com/2014/04/02/purported-shots- of-u...](http://www.androidpolice.com/2014/04/02/purported-shots-of-upcoming- gmail-features-show-a-new-ui-pinned-and-snoozed-messages-and-more/)) which are both supposedly part of "Project Hera."

Either way, the headline makes me a little sad since this looks nothing at all like current Google+ and I'm really kind of hoping this redesign doesn't hit, as I don't personally like it.

Regardless, it will be incredibly interesting to see where Google goes from here, and whether or not this purported interface change is real. Google IO is just around the corner and it __is __focusing on design.

May Google have mercy upon us all.

</comment><comment><USER3> I like Gmail for their IMAP service. I haven't touched the interface in months, and only then to access the configuration. I don't understand why people even use webmail to be honest. Either you're dealing with a company manipulating the interface to push some other product, or they're desperately trying to reimplement something that has been done in multiple IMAP/POP3 clients for years.

</comment><comment><USER4> source, with 4 pictures : [http://www.geek.com/apps/google-is-testing-new-web- based-gma...](http://www.geek.com/apps/google-is-testing-new-web-based-gmail- features-1593555/)</comment>


House Fails to Extend Patriot Act Spy Powers  - <AUTHOR> http://www.wired.com/threatlevel/2011/02/patriot-act-notextended/

<comment><USER2> There's not much to celebrate here, unfortunately. The bill was brought to vote using an accelerated procedure that requires a 2/3 vote. When it goes through the regular process that only requires a simple majority, it will pass easily if the vote is remotely similar (277-148).

<comment><USER3> This is just the first skirmish in a battle that will go on for at least 10 days and may go on for months. That said, there's a lot to celebrate -- it changes the dynamics of the debate in the Senate, and increases the chance that Leahy's bill (S.193) introducing new safeguards as part of the reauthorization may make it to the floor.

So, stay tuned!

Disclaimer: I'm one of the organizers with Get FISA Right, a grassroots civil liberties organization working to reform or repeal the PATRIOT Act.

<comment><USER4> Kudos to you sir! FISA needs to be tweaked.

<comment><USER3> Thanks! And yes it does. We're working on it ... we'll have an update later today or tomorrow about the next step at <http://getfisaright.wordpress.com/>

</comment></comment></comment></comment><comment><USER5> Though encouraging, this is most likely bad news. I remember when the auto bailout was rejected. I was happy! And then two weeks later they passed one with ten times the pork.

I bet it gets worse, not better. They'll update it to reflect the current state of the internet and its widespread adoption while still keeping all the authoritarian provisions, if not in name.

<comment><USER3> Indeed, S.289 (Feinstein's bill) is even worse than HR 514. Here's a summary: <https://www.popvox.com/orgs/getfisaright>

</comment></comment><comment><USER6> Content aside, the words chosen to construct the article's title is intruiging.

The same piece of news is currently on the HN front page twice [1][2], framed in two very different ways:

Wired: House Fails to Extend Patriot Act Spy Powers

BBC: House rejects extension of 'Patriot Act' powers

[1] Here [2] <http://news.ycombinator.com/item?id=2196126>

<comment><USER7> Seriously, the headline should be "House Succeeds at Discontinuing Patriot Act Spy Powers"

</comment></comment><comment><USER8> Government needs the flexibility to exercise the pending three acts in order to protect citizens. However, it would be nice to know they are being held accountable.

In other words... which ever division gets this almighty power to tap phones, businesses, etc. needs to be transparent to a "non-affiliated" (a loose term to describe two government agencies, I know) almighty power. Something like the relationship between the fed reserve and the treasury.

Also, the authors should re-word the act and say these powers only apply to suspected terrorist groups... just to give us a little piece of mind.

<comment><USER9> Whenever 'flexibility' and 'government' are put together, the result is power and corruption. Due process and habeas corpus are not just inconveniences against the ability to fight so-called 'enemies', but fundamental rights belonging to all. Removing individual liberties is not protecting, but endangering citizens.

</comment></comment><comment><USER10> Perhaps I misread the article, but it seems the Patriot Act is still firmly in place - with only three sections expiring: Section 215, 206 and 6001.

'Section 215' seems questionably undoable - in the days of deep packet inspection and tower specific RSSI/locational based queries. It's sorta impossible to not infringe upon privacy concerns...

Section 215: 'which permits the government to secure wiretapping orders without disclosing the identities of its targets'

<comment><USER11> The point is whether the government can use that information for broad-base surveillance. Whether the technology is there to gather the data is orthogonal to question of whether it should be legal to do so.

</comment></comment><comment><USER12> So this means no more patriot act? Isn't that a good thing? The tone of the article makes it sound like a bad thing?

<comment><USER13> It doesn't really mean the end of anything it just means congress will look at alternative proposals. With both the Republican leadership and the Obama administration supporting it the passage of something similar is practically a lock.

Hopefully it will just be a little less odious.

<comment><USER14> Or more likely the same powers will just go to the agencies without any actual act to oversee them.

</comment></comment></comment><comment><USER15> It was shocking to see republicans switching votes in the final minutes, I was surprised no one could mention on CSPAN if the remaining 10 congresspeople were gone...

<comment><USER13> This has never really been a partisan issue. This is a bill proposed by the Republican leadership at the behest of the Obama administration (who wanted to see an extension through the next election).

But so-called Republicans like Rand and Ron Paul hold beliefs that are even further from the Patriot Act than liberal ideals are (in that libertarians believe is as little government as possible while liberals believe in a larger government).

<comment><USER16> "(in that libertarians believe is as little government as possible while liberals believe in a larger government)."

Oh please, liberals don't want larger government in everything, just fiscal issues. They are as socially liberal as the libertarians in congress like Ron Paul.

<comment><USER17> >They are as socially liberal as the libertarians in congress like Ron Paul.

I think you have been misinformed.

[http://nymag.com/daily/intel/2010/11/sorry_four_loko_chuck_s...](http://nymag.com/daily/intel/2010/11/sorry_four_loko_chuck_schumer.html)

</comment></comment></comment></comment><comment><USER12> Come to think of it, why was an expiration put into the original bill to begin with? It's not anyone would have been able to stop them if they passed a permanent law to begin with.

<comment><USER18> To make it slightly more palatable (at them time) to those on the fence. If anybody did raise an objection it was quickly brought up how this was 'just' a temporary measure. It is going to be a long time before the patriot act goes away for good.

<comment><USER12> Was anyone on the fence? I thought I remember hearing that no one even read it.

<comment><USER19> then you're listening to simplistic explanations of politics.

the climate was such that the desire for Congress to do _something_ necessitated compromise for speed of decision. "No one actually read it" reflects the reality that the bill was _going_ to pass. the accommodations made for people who _would_ have been on the fence were made to speed the process.

</comment></comment></comment></comment><comment><USER20> I don't think this is really a failure.

</comment><comment><USER21> Somehow I suspect they'll try again.

</comment><comment><USER22> It really is a shame that we cannot count on an automatic veto from Obama. This is an area where I really would hope for some change.

<comment><USER3> Obama supporting Feinstein's S.289, which is even worse than the House bill that just went down. On this issue, his policies haven't changed at all from the Bush Administration. As you say, disappointing. Back in 2006 he was on our side on this issue. Sigh.

<comment><USER23> I think I might be ok with vastly expanded police powers if I was the one who decides how and when to use them.

<comment><USER24> Then you're missing the point. That's the same view our leaders have.

</comment></comment></comment></comment><comment><USER25> This might be good news..

Remember their promise that US Patriot Act would be reviewed and debated before being renewed..the accelerated procedure did not allow for that but the regular process does in fact allow debate and review and reading the full act.</comment>


Guy Steele: Growing a Language (video 53:30) - <AUTHOR> http://video.google.com/videoplay?docid=-8860158196198824415# Guy Steele's keynote at the 1998 ACM OOPSLA conference on "Growing a Language" discusses the importance of and issues associated with designing a programming language that can be grown by its users.<p>Link to PDF http://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf <comment><USER2> "This is the nub of what I want to say. A language design can no longer be a thing. It must be a pattern -- a pattern for growth -- a pattern for growing the pattern for defining the patterns that programmers can use for their real work and their main goal."

One of the most incredible CS things I've ever taken in.

<comment><USER3> That's at time stamp ~13:18

I'm 100% in agreement, this applies not only to languages, but up and down the technology stack. We need to use datastores that support schema evolution, data objects that assume and open world and not a closed world.

</comment></comment><comment><AUTHOR> Link to PDF <http://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf>

</comment><comment><USER4> Classic. If you care even the slightest bit about programming languages you need to watch this.

</comment><comment><USER5> Guy Steele and Dick Gabriel gave a talk at HOPL a few years back. Another great talk. It lacked the insight of this one, but purely a joy... CS poetry. Unfortunately, I haven't been able to find the talk online anywhere.

<comment><USER6> Was it this one, perhaps? Or something similar?

[http://blog.jaoo.dk/2008/11/21/art-and-code-obscure-or- beaut...](http://blog.jaoo.dk/2008/11/21/art-and-code-obscure-or-beautiful- code/)

<comment><USER7> This changed my life forever, if only because I got to see Guy Steele shout "More cowbell!" and dance around a handful of sigils.

</comment></comment></comment><comment><USER8> reaction; the action caused by an action

While I was writing a reaction, I thought I should use only words with one syllable, and words defined in his talk.

information; facts learned. realize; be aware of

Other than the great information he gave, writing this reaction taught me how hard it is to write in this style, let alone talk for a hour. I also realized how much long words I use.

<comment><USER9> Action/writing/only/syllable/alone have multiple syllables, your post would not compile. Makes what he did very impressive.

<comment><USER10> Guy L. Steele is a person who talked in the site linked at the top of this page.

'Writing' and 'syllable' had their senses defined by Guy L. Steele in his talk, as did 'senses' and 'defined' and 'speaker'.

As I now think on this, I note that the post in which you note errors could change 'action' to 'act', change 'let alone' to 'much less', and change 'only words' to 'no words but those'. The definition for 'realize' is in need of a new definition, since 'aware' is not yet a word with a definition.

In truth, trying this mode of speech is bracing, and fun.

</comment></comment></comment><comment><USER11> If you don't understand: wait till the 10 minute mark to get what he's trying to do with you.

Truly, truly amazing.

<comment><USER12> This is one of those videos where watching the transcript just doesn't cut it. You really have to hear it to get the full effect of the awkwardness.

</comment></comment><comment><USER13> Is anybody else seeing strange, deterministic glitches where some of the video seems to have been snipped out?

</comment><comment><USER14> "If you give a person a fish, he can eat for a day. If you teach a person to fish, he can eat his whole life long. If you give a person tools, he can make a fishing pole—and lots of other tools! He can build a machine to crank out fishing poles." That's the essence of programming.

<comment><USER15> If the river runs dry, or gets polluted, knowing how to fish won't help you. What you really need is to learn how to learn: then you can learn how to hunt when fishing doesn't work any more, or to farm when the game animals are all gone. You might even be able to learn how to program.

</comment></comment><comment><USER16> The famouse Statemant: "A Language needs to be designed to grow" is great. Gilad Braha (maker of the Newspeak) top this statmend by saying: "Languages need to be designed to take stuff away". Witch is pretty cool but much, much harder to do.

</comment><comment><USER17> It would be fun use hebrew this way, in a talk about dynamic languages including tuples.

I don't know enough to take it on though, just thinking of that numerology scene from Pi.

</comment><comment><USER18> Well worth the effort to watch. It really does make you step back and think about how we define the landscape we work in.</comment>


List Comprehensions in Eight Lines of Clojure - <AUTHOR> https://www.hackerschool.com/blog/13-list-comprehensions-in-eight-lines-of-clojure

<comment><USER2> We don't address this in the post, but adding :while conditions is quite a fun challenge.

This is the best I could come up with (in Emacs Lisp): <https://gist.github.com/4356261> . It's rather hacky :D

Darius Bacon (abecedarius) came up with a beautiful alternative formulation that handles :while conditions seamlessly. Here's my port of his idea into Emacs Lisp: <https://gist.github.com/4380866>

I'd be very happy to see other versions :)

<comment><USER3> "We don't address this in the post, but adding :while conditions is quite a fun challenge."

Eurgh, I hate the common Clojure habit (you see it in for, doseq, etc. loops, and in domonad, which is annoying in other ways) of abusing binding vectors to add in extra stuff that doesn't, in itself, have anything to do with binding names to values.

If you use a very slightly modified version of the macro defined at [1] (modified to use algo.monads), you can do list comprehensions like this:

         > (monads/with-monad
                 monads/sequence-m
                 (mdo x <- [1 2 3]
                      y <- [3 4 5]
                      let added = (+ x y)
                      (monads/m-result [x y added])))
         ([1 3 4] [1 4 5] [1 5 6] [2 3 5] [2 4 6] [2 5 7] [3 3 6] [3 4 7] [3 5 8])

The "let added = (+ x y)" is an unnecessary flourish: it would have worked just as well to wrap what followed in (let [added (+ x y)] ...). Likewise (as against domonad), you can just use regular old if; no need for :if.

1: [https://bitbucket.org/kenko/macroparser/src/7a492ef941db38db...](https://bitbucket.org/kenko/macroparser/src/7a492ef941db38db75951b414082347727ff1e40/src/macroparser/examples.clj?at=default#cl-180)

<comment><USER4> _abusing binding vectors to add in extra stuff that doesn't, in itself, have anything to do with binding names to values_

I'm not familiar with the Clojure examples you mention, but it's interesting that Common Lisp provides directives like &rest for similar purposes.

<comment><USER3> Sure, and Clojure has '&' in function argument lists for rest arguments.

Here's a Clojure example:

user=> (for [x [0 1 2 3 4 5] :let [y (* x 3)] :when (even? y) z [1 2] [y z]) ([0 1] [0 2] [6 1] [6 2] [12 1] [12 2])

The binding vector for 'for' takes alternating name/value pairs, except it also allows these special keywords whose semantics affect the environment of the subsequent bindings, and whether the bindings are even evaluated, as well as the environment of the body expression (and whether _it's_ evaluated). This strikes me as kind of ugly. The same can be done like this, using that mdo macro:

        > (monads/with-monad monads/sequence-m
                         (mdo x <- [0 1 2 3 4 5]
                              (let [y (* x 3)]
                                 (when (even? y)
                                  (mdo z <- [1 2]
                                       (monads/m-result y))))))

with identical results, or, as above, like this:

        > (monads/with-monad monads/sequence-m
                             (mdo x <- [0 1 2 3 4 5]
                                       let y = (* x 3)
                                       (when (even? y)
                                        (mdo z <- [1 2]
                                             (monads/m-result [y z])))))

Of course, if you think of a macro like "for" of consisting of a binding vector followed by an expression (or a sequence wrapped in an explicit do), there's no other place for the whens and lets that you want to use to control evaluation of (the environments of) the various bindings than the binding vector itself.

If I'm not mistaken, Common Lisp's loop macro (e.g.) isn't like this---that is, it establishes its own little mini language, instead of mimicking forms found elsewhere in the language (the way Clojure's for loop control constructs are all stuffed into a "binding vector" similar to what might be found in a defn). Now it's true that something like "let y = (* x 3)" is not very Lispy at all. But neither, I think, is having something like ":when (even? y)", a sequence of two elements in a flat vector, actually govern bindings and execution of things that follow it but which it doesn't enclose.

<comment><USER4> OK, I get you. The inline :WHEN in that FOR form makes me go "what?" as well. The syntax feels halfsie to me; it abandons regularity but doesn't want to go full mini-language a la LOOP, so it ends up in a syntactic no man's land. It doesn't feel very composable to me, either — does it scale to more complex expressions? I'm biased, though. The following seems far better to me; slightly lower-level, but clearer and more composable:

      (loop for x in '(0 1 2 3 4 5) for y = (* x 3) when (evenp y) append
        (loop for z in '(1 2) collect (list y z)))

      => ((0 1) (0 2) (6 1) (6 2) (12 1) (12 2))

The reason why LOOP has keywords for all its loopy things is that the set "stuff you often want to do while iterating" is too varied to be supported by an entirely regular syntax. Of course it can all be done with the utilities of the underlying Lisp (which is all that LOOP expands to), but often not as concisely and especially not as idiomatically. I like crossing out of universal Lisp into Loopland to do those little plumbing jobs. Because LOOP is so limited and specific, I know why such a construct is there and can grok very quickly what I'm looking at and what it evaluates to. Having such forms stand out from the backdrop of the far more powerful language the main program is written in is a major clarity win. (Good god, I sound like someone arguing against Lisp syntax altogether!)

For the same reasons (concision, idiom, and clarity), forgive me but I don't like the monads/with-monad versions you've given. "monads/with-monad monads/sequence-m" is much too verbose — I want an operation this simple to be lightweight. It doesn't feel idiomatic to me for looping and pairing things, though that may just be my ignorance. And it feels like some powerful and general infrastructure is being invoked to do something whose triviality I would rather see the code bring out. Looping is the canonical example, I think, of something that one does so often and has such repetitive-yet- assorted patterns that a little language is perfect for the job. But I'm biased, as I said.

By the way, I've been puzzling over that FOR form trying to make out how it ends up producing a Cartesian product out of '(0 1 2 3 4 5) and '(1 2). In CL, if you make the bindings parallel like that, as in (loop for x in foo for y in bar...), it means "take an x from foo and a y from bar and keep going as long as they're both producing new values". So to get a Cartesian product, I had to make an explicit nested loop in my translation above. Both idioms are useful, but I use the parallel one quite a bit more than the nested one. Does FOR handle both?

p.s. You're missing a square bracket after [1 2]. I was puzzling even more before I realized that :)

<comment><USER3> "p.s. You're missing a square bracket after [1 2]. I was puzzling even more before I realized that :)"

Whoops!

"Both idioms are useful, but I use the parallel one quite a bit more than the nested one. Does FOR handle both?"

Not directly---to get a parallel product, you would use something like:

        (map vector '(0 1 2 3 4 5) '(1 2))

</comment></comment></comment></comment></comment></comment><comment><USER5> > Here's a question, though: If your language did not support list > comprehensions, what would it take to add them? For a language like Ruby, > you may have to dig into the language implementation itself.

No, not really:

[http://stackoverflow.com/questions/310426/list- comprehension...](http://stackoverflow.com/questions/310426/list- comprehension-in-ruby)

<comment><USER6> The point of a list comprehension is often that it can work with multiple lists. This can't do that, can it?

<comment><USER7> That can't, but with <https://gist.github.com/605891> you can, using syntax like:

        [(1..6),(4..6),(7..9)].comprehension { |a, b, c| a + b + c if a % 2 == 0 }

And if you go to extremes like <https://gist.github.com/3356675> you can use Haskell-like syntax:

        [a + b | a <- ['n','p'..'t'], b <- %w[a i u e o]]

Ruby's blocks and method_missing are very powerful.

<comment><USER8> That second example is awesome! And it demonstrates that I don't know nearly enough about Ruby. :) Thanks for contributing it.

<comment><USER7> You're welcome!

Just to be clear, I am not the original author. I was impressed with it myself. :)

</comment></comment></comment></comment></comment><comment><USER9> Gosh, if you had an extensible reader, you could do so much more... Oh wait, why don't we try it: [http://lisp-univ-etc.blogspot.com/2013/01/real-list- comprehe...](http://lisp-univ-etc.blogspot.com/2013/01/real-list- comprehensions-in-lisp.html) ;)

<comment><USER2> Haha, this is really fun :)

I'm looking forward to exploring your blog.

</comment></comment><comment><USER10> Someone's very happy to have authored Clojure's for special form.

<comment><USER8> Clojure's `for` is ~80 lines of code, and isn't particularly accessible. My goal here wasn't to reinvent the wheel, but to give an example of a not- totally-trivial macro that does something neat. :)

(Clojure is simply my lisp of choice. This could be just as easily implemented in elisp, which does not have this built in.)

[edit] For those interested, here's an elisp version: <https://gist.github.com/4430934>

<comment><USER10> I can appreciate the fun of doing things like implementing a list comprehension and the excitement of both applying macros in a useful way and being able to tell other people about it. I found the tone of the linked article to sound self impressed to a point I personally found distasteful, and after reviewing it again I don't see any mention of Clojure's built in for special form, and thusly reacted in a snarky manner.

But everyone should get an opportunity to see what you can do with things like macros, how useful list comprehensions are in general, and how a homoiconic language can make the simple things slightly less intuitive but the hard things vastly more tractable. I certainly have no business in detracting from your enjoyment of Clojure, so please don't allow me to.

Instead of being snarky may I offer some constructive criticism:

1) You don't mention the Clojure `for` special form, which is a built in list comprehension. 2) There's a significant amount baked into Clojure's `for` special form. How does it compare to your macro? After reviewing the macro again I think you'll find there's some differing behaviors over when members of seqs are realized and bound between your implementation and that in clojure.core. 3) I think reflecting on what the real power here is: that you are able to dictate the hows and whys of evaluation at what time, and discussing that matter, can make more salient the power of LISPs.

Please do continue to enjoy what you are building and what you learn, and don't let the jaded musings of crotchety old men like me get in your way!

<comment><USER8> I really appreciate the thoughtful response and constructive criticism! I think that much of it is valid.

All of this actually fell out of a desire to better understand Clojure's `for`, which is a piece of code I would have run away from not too long ago. (Earlier versions of this post made significant mention of `for` and its implementation; that it was totally stricken from the final version was, I think, an unfortunate product of editing.)

I'll certainly think more on your second and third points.

<comment><USER11> It's a nice post/example. Obviously useful, not _that_ trivial, or at least something you might not have thought of doing if you're just beginning to grok macros, but simple enough so that you can do a pretty detailed explanation of it without going on forever.

Mentioning that there is a `for` form might be nice, just so it's clear that you don't have to do (something like) this in order to do list comprehension in Clojure. Kind of disagree with aredington's 2nd and 3rd points though. Those might be fine things to write some stuff about, but I don't know that _that_ post really needs them.

Like, I don't think every post on macro stuff must deal with "macros and evaluation". It's an interesting topic and all, but as it is I like that the post is more like, here's a macro and look how we can use it to turn code like this into code like that. Without getting into every topic that that touches on.

</comment></comment></comment></comment></comment><comment><USER12> I nice and somewhat related paper is "Simple and Efficient Compilation of List Comprehension in Common Lisp" by Mario Latendresse:

[http://www.iro.umontreal.ca/~latendre/publications/listCompF...](http://www.iro.umontreal.ca/~latendre/publications/listCompFinal.pdf)

</comment><comment><USER13> Given that clojure is a dialect of lisp (the list processing language), it seems that list comprehensions should not be a remarkable achievement. Am i missing something?

<comment><USER14> yes and no. Yes, because the example is a novel language feature in other languages that would be very difficult to implement. No, because these sorts of things are easy only when code is data, like lists, which is a design property of lisps, but not really captured within 'list processing'. I think perhaps there could exist a language that says it's good at lists and data without the macro system that makes this possible.

</comment></comment><comment><USER15> This is very telling example of how differently Java people think.

First of all - ''this'' is NOT list comprehensions. Lisp has list comprehension, the sub-set of features that makes macros possible. Quote, back-quote, comma and grouping with parenthesis are parts of Lisp syntax to do it.

This is a meaningless generalization from a lisp programmer's perspective, just another macro.

Look at it carefully. This is the how confusion looks like. Thinking in terms of classes and methods prompts them to create artificial, unnecessary complications.

This is not hacking, this is exactly opposite.)

<comment><USER16> I don't think you understand what was claimed in the article. 'List comprehension' is the name of a specific syntactic construct. List comprehensions describe straightforward transformations of other lists in convenient notation. <http://en.wikipedia.org/wiki/List_comprehension>

They're syntactic sugar for map and filter. Consider this python code:

        [x**2 for x in range(100) if x % 2 == 1]

This is a list comprehension. It's equivalent (in 2.x) to the Python

        map(lambda x: x**2, filter(lambda x: x%2 == 1, range(100)))

(or in Clojure,

        (map #(* % %) (filter #(= 1 (mod % 2)) (range 100)))

(seems like cheating to use the odd? function))

...so, equivalent to map and filter, just with better syntax.

Caveat: in 3.x, python's map and filter return generators, so the equivalent comprehension would be a generator comprehension instead--just the same thing as above but wrapped in parens and not square brackets--which would also return a generator.

<comment><USER15> You forget monads. Much brighter people already done this in comments above.)</comment></comment></comment>


Ask HN: Rules Engines for enforcing business rules - <AUTHOR> Have any of you had any experience using any Rules Engine libraries? I'm working on a game and I'm trying to separate rule logic from application logic to let me easily test variations of game rules.
The game is built in Rails, but I'd like to hear about experience with any language.
Things I'm interested in: -How the rules logically fit into the rest of the application (especially with MVC apps) -How the rules are stored (ie, in db table, yaml file, ruby file, etc) -Schema -Anything else!
Thanks! <comment><USER2> I've used Drools: <http://www.jboss.org/drools/>

It's a deductive rules engine for Java, so you give it some objects with state and apply a set of first-order(ish) logic rules to them, in an if-then kind of form. You can give rules different precedence levels to create a sort of cascading effect.

Rules are stored in plain text, but they're read in and compiled into memory for efficient execution. Defining your own DSL spec is a breeze. Your rules are executed in the rest of the application with a few simple method calls. It integrates with Java in a really slick way, so you can work with POJOs and your rules operate on them.

It's a pretty cool DSL creator, actually. I used it in a research project by integrating it with the Eclipse JDT and creating a DSL for source code manipulation. Then I hooked it up to a little inference algorithm we created, and the result was a plug-in which could take a before and after piece of code, analyze the difference between the two (specifically in the case of adding annotations to legacy code), and generate a set of Drools rules that could automatically migrate similar legacy classes. See page 5 of our paper for an example of how our DSL rule base looked: <http://people.cs.vt.edu/~tilevich/papers/rosemari-oopsla.pdf>

</comment><comment><USER3> I was just involved in a port of a Rules Engine for a top US bank. The engine was written in Smalltalk. To make a very long story short, most of the rule components had a 1-to-1 translation to a Smalltalk code block (or collection of blocks), which was then compiled and executed. This would be a great way to implement a Rules engine in Ruby. Define a very simple language, all of whose components have a 1-to-1 mapping to a small subset of Ruby. Generate the Ruby code and compile it. If your subset is kept simple, you can easily use a compiler-compiler or just hand code a top-down parser. With a strict subset of Ruby, you could also make everything a method and get the s-expression for each method instead of parsing it yourself, but this makes it less straightforward to restrict your subset of Ruby to exactly what you want. (You may want such restrictions if you have non-programmers maintaing the rules.)

The framework I was working with also had components where arbitrary Smalltalk code could be used. In retrospect, this is a bad idea.

All of the rule components were stored as strings with bits of metadata using an Object Relational framework.

Also note that the entire Rules repository only amounted to about 5MB of compressed data. I suspect this isn't unusually small. Rules can be cached locally with the system only checking for updates.

(EDIT: DO NOT naively think you can use a bunch of regexps instead of a parser of some kind. You can make this work, but it's a hack. If you don't know enough about automata and languages to know why this wouldn't work, you probably don't know enough to be certain about the results of such a hack.)

</comment><comment><AUTHOR> Hey thanks for all your answers to far! Here's what I've been working with (sorry if this only makes sense to Rails folks--ask me about a certain section, and I'll try to clarify to non-Rails people as best I can): -A ruby gem called rools -sample rule:

      rule 'foo' do
        parameter SomeObject
        condition { some_object.attribute == 'something_else' }
        consequence { some_object.change_state! }
      end

-inside of the application_controller, I run a before_filter with this code:

      rules = Rools:RuleSet.new 'path/to/file/that/has/rules.rb'
      so = SomeObject.find(:first)
      rules.assert so

<comment><USER2> That's pretty much how Drools works as well. :)

I'm going to guess that the rools gem was inspired by Drools, since the Drools project is much older.

<comment><AUTHOR> And the name: Drools - D = rools

</comment></comment></comment><comment><USER4> Use Prolog.

<comment><AUTHOR> I have to stick with Ruby for this one. Thanks though!

<comment><USER4> Maybe <http://github.com/preston/ruby-prolog> then?

Edit: or <http://eigenclass.org/hiki.rb?tiny+prolog+in+ruby> (not sure if they're the same..)</comment></comment></comment>


FedEx Tech Manager - <AUTHOR> http://www.fedex.com/techmanager

<comment><USER2> Sweet, so now you don't even have to mail your PC for FedEx to destroy it.</comment>