The declining profitability of Google Adwords - <AUTHOR> http://successfulsoftware.net/2013/05/26/the-declining-profitability-of-google-adwords/ <comment><USER2> I spent $100,000 last year on Google AdWords - it made me some decent money. The costs kept getting higher and higher - I called one of there advertising rep's to give me advice - it cost me around $600 losses in 1 day. Called back, made changes - told them I don't want to take 'risks' like that again. I then tried this 'Enhanced Campaign' feature that I think they're bringing in across all accounts in June - it put me in the negative and I'm now no longer advertising with them.

This part hit the nail on the head: "(suggesting ridiculously high default bids, goading you to bid more to get on page 1, not showing your ad at all if you bid too low – even if no other ads appear etc)."

Every time I'd call they'd say up your 'Cost Per Click'. Every single time.

<comment><USER3> I've been doing SEM for five years and worked with the full range of google reps.

Quite simply, don't ask reps for advice on a product they've never actually used (as in, with real money). You're better off investing in a proven SEM expert in your field.

Also, the answers/responses from Google reps are basically read from a training manual.

<comment><USER4> I've just google'd SEM expert and not hits. Google suggests 'SEO expert'. Could you elaborate about SEM? I'm interested.

<comment><USER3> Happy to elaborate? What would you like to know?

As for finding an SEO/SEM expert, typically best to go by referral. Most SEO/SEM experts that you'll find on google/forums will run you through templated best practices.

Best to work with someone who has been vouched for.

</comment></comment></comment></comment><comment><USER5> Seems like the article is only showing half the story.

Costs are going up which means increased competition. Increased competition will mean your ads are running against more competitors. Reason for fall in click-throughs could be under-optimized ad's losing out to competition's ads.

As for conversions. Looking at the table plan site I feel overwhelmed. If this is where the ad's are taking users I think it is fairly obvious why sales are dropping off.

I don't think Adwords can be blamed for the profitability of a product.

This isn't to say Adwords isn't declining in value for site owners. To make this claim though you would need information from lots of sectors from lots of site owners.

<comment><USER6> I agree; the site for the software looks terribly out of date, which in turn doesn't instill confidence in potential customers.

Updating the site would be his best investment.

<comment><USER7> Updating site wouldn't make a dent. You seen Cragilist recently? or even Google homepage for the last 10 years??

People go to his website for a certain product. They couldn't care less how the site looks. Does crappy look of Apache software website turns you down from getting the newest download? How about PHP site not updated since 1999. Does their crappy site means they don't know their craft?

After checking couple tabs (that are easily accessible) and being convinced he knows his business, there is nothing more to do than either pull the trigger and buy a product/try it, or leave the site. No fancy graphics or frameworks will change users' mind. And they shouldn't. In fact, if that site would be up to date designed website all nice and clear, I would immediately think its a scam or probably software with built in backdoor, etc.

His site is fine. He is selling table planning software (that looks decent), not a web design lessons.

<comment><USER3> Why wouldn't updating the website make a dent again? Landing page optimization is a huge forcus for any online commerce company because updating a website (design, content, flow) does make a dent.

<comment><USER7> okay I am talking about the outlook, not landing page optimization and the stuff under the hood.

sorry but his website talks to me: "hey I seel software to plan tables and i know how it works, but i am not a designer and wont spend money for a coll website". which is fine with me. again, I didnt came there to appreciate his website apperance but to see if his software is good enough for me (had I been in the business that needs his software)

<comment><USER8> You're taking your own opinions and applying them to the entire target market. Just because you feel this way doesn't mean that everyone else does, and it certainly doesn't imply that "updating the site wouldn't make a dent".

</comment></comment></comment></comment></comment></comment><comment><USER9> The OP probably needs to optimize his ads (i.e. tune them) and the conversion funnel. In my five years of working at Google as an AdWords manager (I don't work there anymore), I've seen cost-per-click and bids rise consistently especially for Google search. This has a lot to do with competition and limited real estate. However, Google maintains something called Quality Score which is analogous to page-rank that determines the bid required for an ad to show. Quality Score is based on the keyword - ad text - landing page relevance. With a high Quality Score you can get clicks for a much lower cost. Some experiments put this at about 5% per unit of quality score change (Quality score is on a scale of 1 to 10).

Low quality score is also a reason your ad might not show even if there is no competition – Google assumes that the relevance of the ad is low, and tries not to show irrelevant ads to user, even if it means not showing any ads. Of course this is not fool proof, but that is the idea in general.

Getting a click is only half the story. Actually getting the user to convert and buy your product depends as much on your ad as it does on your site. Is your keyword related to your ad? Does the ad landing page offer what the ad text promised? How easy is it for a user to buy your product or, convert? How many steps does it take to get to your thank you page? Is your sign up process too long? Most people tend to focus too much on bids and ignore optimizing their ads to improve relevance of the keywords to ads and relevance of ads to their site. Doing this can help increase Quality Score which significantly brings down cost per click. It comes as a surprise but small tweaks can make huge differences - and increasing bid or cost per click is not the right answer in most cases.

Plug: I'm one of the founders of Optmyzr (<http://www.optmyzr.com>) and we offer optimization services and automated tools for optimizing AdWords campaigns.

<comment><USER10> Can you give an idea of how much lower the cost per click could be with a very high quality score (ie 5% of Googles suggested cost per click)?

"With a high Quality Score you can get clicks for a much lower cost. Some experiments put this at about 5% per unit of quality score change (Quality score is on a scale of 1 to 10)."

<comment><USER9> As I understand from your question, there are two things here one is average cost-per-click which is how much you actually pay for each click and this is usually lower than how much you bid (max CPC). I've seen avg. CPCs fall by 10 - 50% (depending on the industry) when Quality Score changed from 5 to 7 for keywords. You can actually track Quality Score and overlay it with avg. CPC and other stats to see a correlation for your account. We created a tool for doing this. The second is Google's suggested cost per click which is the recommended first page bid that Google shows next to each keyword. This is a function of your Quality Score and competition. You'll notice that keywords with a low Quality Score have a relatively high required first page bid. Please feel free to email me (geetanjali att optmyzr.com) with any questions!

<comment><USER10> Thanks very much for the detailed answer. That really explains things from Googles perspective. Very nice service you offer. I think that it will serve to save people a lot of money on Adwords.

</comment></comment></comment></comment><comment><USER11> In my previous gig we used to spend single-digit millions/year, and saw all metrics falling down like OP did, and we had a team of 6 experts with tons of experience in AdWords.

Not sure about this vertical, but in other (much more lucrative) ones such as travel, Google is pushing its own solutions at the expense of other websites.

For example, try looking for a hotel in new york and you will see Google Hotel Finder results, Google Map (which feeds from Google Hotel Finder), Google Places for Business, etc. Google Map will even stay fixed meaning that as you scroll down the ads are hidden by it.

There's much less value in positions that used to be profitable, especially 4+ (right-hand side ads).

<comment><USER12> Seeing similar in home-services. Plumbing, electrical, etc.. have steadily risen over the last few years. We have highly optimized ads pointing to highly optimized sites (better than 30% conversion to phone calls). In the end we're rapidly being priced out.

We saw it coming, thankfully, and have been moving to a broader advertising strategy which is working well.

<comment><USER11> Do you mind sharing what's working for you these days? which channels? Do you do offline also? Would make sense given your vertical..

</comment></comment></comment><comment><USER13> There is a very simple reason for this happening - Google needs to keep making more money, so over time they need to raise advertising prices or increase click volume. There isn't going to be a dramatic increase in click volume anytime soon, so for Google to grow at 20%+ a year, they need to raise prices over time, which they do via quality score and social engineering.

I've watched Google do this relentlessly since 2006. They are quite good and the fact that people in here are blaming the advertiser for not managing their account well is proof of how good Google is at social engineering their way to profits with AdWords.

<comment><USER14> Can you explain more what you mean by QS and social engineering being the way Google is raising prices?

My understanding is that AdWords is a an auction system, where your position in the auction is a combination of your Max bid, inventory, and a QS multiple. If Google is manipulating QS, it would just change the ordering of auction winners, rather than overall CPC, right?

My first thought was that prices are rising because 1) more competition on the ads [more companies, higher prices], and 2) as a kw cost/value saturates, more companies were "overpaying" [bidding more than expected ROI], due to any number of causes.

<comment><USER13> AdWords started as a pure auction system where to rank higher it was basically CPC * CTR, which maximized profit in a simple way for Google and it worked well. The problem is that some people are too good at getting high CTR ads, so their CPC's got too low.

What Quality Score does is it adds a layer of indirection to the system where they can tweak some invisible dial so to speak to increase the "quality threshold" for ads. Google will tell you what each keywords QS is, but it's not as explicit as it could/should be as to why.

The point of QS is to enable Google to maximize profit while maintaining a decent user experience, but the problem is, at any point Google can turn the knob of QS and increase their ad rates. If Google needs to make more money, they can drop QS and people will bid higher to rank higher. Or, new advertisers who aren't very good will bid the "recommended" bids of $2 or $3 per click, where in the pre-QS world, those numbers were less than $0.50 in most cases.

They also can use QS to make you redesign your pages to be more what google wants, even if it doesn't increase your conversions or align with your goals. Google totally can and does dictate what kind of pages you can advertise and how you can advertise them.

So it's not just a auction system. It's much more clever than that. It's more like if eBay auctions had a bidder quality rating where you would have to pay more if your bidder quality score was too low.

</comment></comment></comment><comment><USER15> I'm actually quite impressed that people earn money from these advertisements. I have never clicked one of the adverts, unless it was the top result on a Google search for the thing I was actually looking for. It's like a natural instinct to ignore the ads.

With the rise of addons like AdBlock Plus, I think it's inevitable that this Ad-venture (pun intended :P) will decline, and cease to work, until a new medium or method emerges(Social networks, website-product-placement, etc)

<comment><USER16> Watch an average user browse the web and use Google to make a search.

They will click on the top ad result returned if it is vaguely relevant and not bat an eyelid.

Average users do not even know those yellow sections or the right hand section are ads.

The natural instincts of geeks <> The natural instincts of average users

<comment><USER17> Yep. My cofounder did a ton of user testing. One guy, as he was doing a shopping-related search on Google, said, "You want to know the secret of Google? Ignore the left side of the page. The good stuff is the little things over on the right."

</comment></comment></comment><comment><USER18> I don't believe this post tells the entire story. Adwords (advertising in general) is just one part of doing business in general. Other reasons that might explain the trends showcased:

\- Businesses have cycles, maybe the author is experiencing the end of his software's business/product cycle. An 8 year period is considered by many an economic cycle. I certainly don't use the same software today as I did 8 years ago.

\- During the past 8 years the business of software has completely changed: distribution, barriers to entry, platform (desktop/web/mobile), etc.

\- Profitable businesses tend, over time, with no meaningful reinvestment, r&d, etc, produce marginal profits equal to zero.

\- What are the software alternatives to the author's product/service? 8 years ago Encarta was "the" digital encyclopaedia, today it's Wikipedia.

\- Adwords 8 years ago was a nascent ad platform, resulting in low cost due to low competing bids, today it's "the" most popular online ad platform.

These are just a few reasons behind these trends. Any other thoughts?

<comment><USER19> Maybe the shift towards web apps has turned potential users away from desktop apps like the one mentioned.

<comment><USER20> I don't think he said his sales were flagging, just that Adwords was becoming less profitable.

<comment><USER21> He said "conversions" were falling, which means sales: [http://successfulsoftware.files.wordpress.com/2013/05/adword...](http://successfulsoftware.files.wordpress.com/2013/05/adwords- conversions1.png)

But he doesn't say whether conversions-per-incoming-click are declining.

<comment><AUTHOR> CTR and conversation rates have remained pretty constant throughout.

</comment></comment></comment></comment></comment><comment><USER22> First, this has nothing to do with Google's profitability re:Adwords (the title was a bit misleading).

Rather, it seems like an efficient supply-demand market is converging to a price point that renders his ROI to neutral-or-negative. I guess that indicates that the rest of the world is catching up in SEM... and it's time to search for alternative marketing channels. This should come as no surprise -- golden geese don't live forever.

<comment><USER23> Exactly, it could actually show an increasing profitability of Adwords overall but skewed towards products that are best suited to this kind of ad thus pricing others out of the system.

</comment></comment><comment><USER24> I agree that without maintenance an AdWords account will exhibit this kind of decline, but it appears to me as though the OP might not be bidding on exact match search terms which can make it difficult to control your spend and target your audience. If most of your spending is on broad or phrase match keywords then you're far more susceptible to changes due to other people coming into the market place and also have much less ability to optimise your ad text and landing pages to get the best ROI.

In my experience the single biggest improvement you'll ever see to your campaign comes from bidding only on exact match keywords that you've extracted from the search term report with ad text written specifically for those keywords. It's a pretty laborious task but the results can be pretty phenomenal.

</comment><comment><USER25> Costs go up because of competition. Costs go up because Google gives a $ 100 for every new Adwords customer, this inflates the prices. Costs go up because there're more ads, not just on the right side. People are less likely to buy when there's a recession.

</comment><comment><USER26> Please bury articles where people claim facts without providing a single number.

We don't know how many total clicks this involves, did the clickthrough rate drop 1%, 5%, 90%? Was the traffic search, search syndication, content? Where there content text ads, image ads, flash ads? Did he ever add new keywords, ads, geographic markets? Did he ever change the landing page design?

I would be very embarrassed if I wrote that blog post.

<comment><USER17> I'm entirely ok with this. He really doesn't want his competitors knowing the numeric details of his business.

He explained his methods and gave useful graphs.

Yes, the article could have been more useful. But the way to make that happen in the future isn't to bitch endlessly about people not doing enough free work for you. It's to thank them for the good you got out of it, and politely suggest next time that their article could be even more valuable if they did X.

<comment><USER27> However we could still discern a great deal from the data given in the graph.

[http://www.evanmiller.org/how-to-read-an-unlabeled-sales- cha...](http://www.evanmiller.org/how-to-read-an-unlabeled-sales-chart.html)

</comment></comment></comment><comment><USER28> I expect the Adwords ecosystem to auto-regulate itself instead of just deteriorating over time: the more people like you realize they have to pay more for less, the less they'll do so, leading to a decrease in prices until they're acceptable (profitable) again. Supply and demand, like you said.

</comment><comment><USER29> From the linked [http://andrewchen.co/2012/04/05/the-law-of-shitty- clickthrou...](http://andrewchen.co/2012/04/05/the-law-of-shitty- clickthroughs/#)

      When you are marketing with useful information, then CTRs stay high.

</comment><comment><USER30> It is hard to split out the effects that are leading to a tougher Adwords market in general and this particular campaign.

One thing we have noticed about Adwords is that longer campaigns are being ran as essentially residual income with maintenance the more they decline. Thing like bids, keywords, ad text can progressively put you in a worse place than the competition left unchecked. I addition over the years we are getting bombarded with new Adwords features that your competition is likely across.

The other thing I would say is that from first glance your software and site design may be the cause for the decline. People are used to the instant gratification from a web app vs having to download, whereas when you started people wouldn't blink an eye at having to download software. The trend these days is to pair you landing page down to the key point and call to action.

The good thing about all that is that there is probably a lot you can do with landing page A/B testing and possibly on the ads themselves to turn it around.

<comment><USER31> > People are used to the instant gratification from a web app

Which people? The 1% inside the tech bubble?

Outside of the tech bubble people still download stuff. And smart phones like Android and iPhone with their downloadable apps don't really condition people to use web apps.

If you want to make bold statements about the software market take a look at the people outside of your tech savvy peer group.

<comment><USER30> I guess we will have to agree to disagree. Here is a good article on the web app vs downloadable: [http://www.kalzumeus.com/2009/09/05/desktop-aps-versus- web-a...](http://www.kalzumeus.com/2009/09/05/desktop-aps-versus-web-apps/)

I don't have an stats but from watching regular people use computers I absolutely believe that people are much more willing to give something a go if it involves clicking a button on a web page rather then downloads and installers etc.

</comment></comment></comment><comment><USER32> I used to be wonder if anyone really made any sales on those ads because even as less savvy as i was with internet, I could readily identify 'ads by Google' and not click them. Honestly, sometimes I could just look at the website and type the address in a new tab instead of clicking on the ad( because I wasn't going to make a purchase anyway so why make them pay for my visit?)

But then I observed first-hand how people I thought should know better were clicking on these ads _unknowingly_ thinking it was part of natural search results. So here's what I'm thinking; it could be because there as more and more people get online, there's going to be more and more people clicking on ads unknowingly thinking it's part of their natural search results, which will consequently result in increase in CPC .

But what irks me from the post is: > not showing your ad at all if you bid too low – even if no other ads appear If this is true then it's really evil!!

</comment><comment><USER33> I'm wondering if it's got something to do with saturation on the demand side. I'm going to take a (roughly) economic angle...

When AdWords first launched, it wasn't (necessarily) a standard for online advertising, and especially for advertising generally. As more businesses consider it to be part of basic strategy, the cost of your bid goes up to remain profitable.

The previously obtained performance is the anomaly - it's a first-mover advantage on a new technology. You get more bang for your buck because you're making use of an asymmetry in the market-place.

The phenomenon that's occurring here is commoditisation - Adwords is well- known and well-used; it's a standard. The competitive advantage that comes from its use has finished.

</comment><comment><USER34> The title seems misleading to me. I thought Adwords was losing it's profitability to Google.

<comment><USER35> If the OP's premise is extended to all others in his peer group, I read this as the implied "long-run" outcome. Whether that's true or not is another argument...

<comment><USER36> If the problem is that he's getting a worse return as people are outbidding him for the best words/placement, it could be the opposite.

<comment><USER34> agreed

</comment></comment></comment></comment><comment><USER37> Graphs are less useful without scale.

<comment><USER38> It's against Google's ToS to share detailed data, I believe.

<comment><USER21> Really? Cite?

</comment></comment></comment><comment><USER39> This resonates with me pretty well, even though I don't have such long experience. However, my wife has a small website selling vintage items to Japanese customers, so we have some experience with online advertising over the last couple of years.

Apparently, Google isn't as strong in Japan as Yahoo. At least for the demography that reaches my wife's website over the last couple of years. We see this quite clearly on (organic) site visits.

Given this, I would assume that advertising on Google would be cheaper than Yahoo Ads in Japan. However, it's not the case. Google adwords are far more expensive and deliver far worse results for the same campaigns. Maybe competition in this niche is not well informed/stupid and uses Adwords more than Yahoo, which drives the price up, but to me it doesn't make sense. If Yahoo gives better bang for the buck (and it does!), then advertisers would naturally shift there, which would raise the Yahoo price, and reduce Google's. However, that does not seem to be the case. It feels like Google is somehow inflating the prices not completely in line with supply/demand.

</comment><comment><USER40> I've been experiencing exactly the same problem. Used to make thousands of pounds each month from AdWords ads, now just about break even on them.

</comment><comment><USER41> Another aspect of this is Google's inflationary tactics that continue to rack up rates. I had written a post on this: <http://www.vinaysahni.com/how-google- inflates-adwords-bids>

Their inflationary game has still not ended. This week I got a coupon in the mail for $200 AdWords credit if I spend $50.

<comment><USER42> Hey Vinay -- I just wanted to remark that supportfu.com looks great. Even though I'm not in a business where I'd need such a thing, I found your copy compelling enough to imagine myself running such a biz and how to provide the best possible support, and concluded that I'd want something very much like what you offer. Best of luck.

<comment><USER41> Thanks for the kind words :)

</comment></comment></comment><comment><USER43> To some degree the OP is right.

A static campaign, sending traffic to the same landing page, not increasing the bids to account for changes in CPC, will be less successful than before.

Over the last several years, the barrier to entry has dropped but the barrier to success has risen extremely high. It is much more difficult to profit when most of your competitors are using every tool at their disposal to crush yo.

The two things that could easily make/crush his conclusion is average position and quality score. I want to see the average position on search and quality score over time as that will indicate:

1\. If he has not kept bids in line with the market 2\. If his site has continued to be updated with sufficient fresh content to appease the googlebot 3\. If he has continued to improve his ads (CTR is one of the components of quality score!)

Those things will indicate where his efforts have fallen down.

</comment><comment><USER44> So, just for fun, I googled "event table planning". No paid ad for his app appeared.

However, a quick scan through the first page shows he did get at least three freebies: two of the four image results are screen shots from his homepage, and the second search result is his site and includes a to-the-point abstract.

</comment><comment><USER45> Standard economics. As you start penetrating potential audience its going to get saturated after some point until you reach all of the audience. As impressions to get one more click are needed more, google needs to exhaust their inventory more. Apparently CTR is going to degrade, and google will start increasing marginal cost per click. Cost per click is curve is often going to be marginal cost curve, where maximum profitability is at lowest point on the curve. Its not about profitability of google adwords but the profitability of the media you're bidding for. When saturated you can always expand your potential market (audience) by adding more keywords/placements.

</comment><comment><USER46> I wonder if click-per-view count is dropping too. Maybe people slowly learn the patterns of ad placements and subconsciously ignore them, like I feel I started to do back in the banner days before using AdBlock.

</comment><comment><USER47> Well, the online display advertising market is getting harder for everybody, so Google is not having that easier either.

As RTB market (<http://en.wikipedia.org/wiki/Real-time_bidding>) is growing in significance, then it is starting to make sense to diversify the networks that advertisers would use, so just using Adwords is not enough anymore, and in that sense it is time to start checking out OpenX, Appnexus, etc.

</comment><comment><USER48> You can't just display an ad at any price, even if there are no other ads. There are too many spam ads now, but it used to be quite a bit worse. Setting a minimum price sets the bar high enough to make it not worth the cost to spam. It's gotta be a juggling act for Google to keep prices within reach of legitimate advertisers while keeping out the riffraff.

The only other solution is to manually approve all ads before they go live.

<comment><USER49> Hang on a minute. What's the difference between spam and an ad, anyway? It's all spam, surely.

</comment></comment><comment><USER50> Part of this can be explained by the nature of auction-based systems: the more participants there are in an auction, the higher the average price will be at the end of that auction for any given item.

As far as CTR, that could be explained by way too many factors.

</comment><comment><USER51> This is unrelated to the article, but is anyone else experiencing not being able to scroll with a mouse scroll wheel on this page? I'm using Chrome on Win 7 64 bit and the scroll wheel does nothing, though it still works on other pages.

</comment><comment><USER52> For every one of these "declining profitability" stories, there is an equal and opposite story. It's a cyclical story, too.

Either way, Google wins.

</comment><comment><USER53> What are the best alternatives to Google Adwords in terms of paid advertising?

<comment><USER54> there is no best alternative as Google owns more than 80% of overall market. If you want scale you cannot ignore Google - hence the monopoly and inflation of bid rates.

the next best alternative which can bring 1/4th of google adwords traffic are bing adcenter, retargeting companies like adroll, vizury. Facebook & Linked Ads work for specific domains.

</comment></comment><comment><USER55> we are seeing similar trend, looking for a alternative which works and is cost effective

<comment><USER56> Find which sites your buyers are visiting and advertise there directly without Google. your customers are using google.com for a few seconds a day, but reading relevant sites for hours.

1\. Search for your keywords.

2\. Click on top 20 sites within organic (not paid) results

3\. Strike a deal with these sites to advertise.

</comment></comment><comment><USER57> Ozzie c</comment>


String Theory Meets Loop Quantum Gravity (2016) - <AUTHOR> https://www.quantamagazine.org/string-theory-meets-loop-quantum-gravity-20160112 <comment><USER2> Just the other day learned about the parallel propogator and derived an equation for holonomies in GR. It got me pretty excited to find out that this is the initial starting point of loop quantum gravity.

I don't really have much of a point in sharing this other than excitement, but if anyone has research experience with loop quantum gravity I'd certainly like to hear whatever you have to say!

<comment><USER3> Hey, here is some research experience in Quantum Gravity: Don't do it, or if it's to late for that, get out.

The field is oversaturated with good people. Conceptual questions are either well explored or hinge on technical questions far beyond our ability to understand. Yet everyone still puts out two papers a year, and claiming to solve physics questions, rather than mathematics questions is good for funding/positions. Hence there's a lot of bullshit.

This applies to much of HEP, too. We have gone more than 50 years since the Standard Model was written down. More work has gone into HEP/QG Theory since then, than in it's entire history before. Not all of that was wrong/wasted, we did learn about properties of the standard model, and some brilliant mathematical work has been done. But still, this is a terrible field to work in, we're 2-3 academic generations in since the last time a new model that corresponds to reality was found. It's extremely self-referential.

P.S.: If you want to talk more about this stuff, feel free to message me.

</comment></comment><comment><USER4> Not sure about the far reaching implications of this, but it does potentially mean that Sheldon Cooper and Leslie Winkle can finally be friends...!

</comment><comment><USER5> Code this up in Python, sprinkle in some ML, and we can resolve these pesky theoretical discrepancies.</comment>


Signs of Crappy PHP Software - <AUTHOR> http://www.phpfreaks.com/blog/10-signs-of-crappy-php-software

<comment><USER3> I seriously don't understand why people hate any use of globals? I've written a 20k line MRP system that spans over 100 different PHP files. I have a global "$look_ahead = 90; // days". Every once in a while, someone from production planning comes up to me and asks if they can look ahead 45 - 120 days from now on. I simply change that variable and all is good immediately. Every single PHP file uses the global $look_ahead variable.

Sure, I could make a function look_ahead. Or I could pass the look_ahead value everywhere. Or I could have a DB setting look_ahead. But why would I make it any more complicated than I have to? Globals work very well when used as application preferences that rarely change but could.

Also, $company_address is a global. We're moving to a new building. That's a single variable I need to change. It'll change across every single report/printout/auto-generated PDF. And $db is always a global in my code. I've been coding for 10 years and not once have I had any issues because of that.

edit: Why the downvotes? I thought the proper etiquette here was to post a reply. It's not like I said something offensive.

<comment><USER4> You're specifically using it for configuration/preferences though. You should consider changing it to a constant instead as that's what they really are.

The problem is passing state around in global variables. Any code can (and readily does) modify the state which is the problem.

<comment><USER3> $db wouldn't work as a constant.

You're right that look_ahead/company_address would work as a define("CONSTANT") better but honestly, I hate not putting a $ sign in front of a value (constant or variable). I am more prone to missing a $ than redefining a global. I don't remember ever having the problem of redefining a global unintentionally. I can give 20 examples of when I missed a $ symbol and PHP gave me an error/notice. If PHP constants had a symbol akin to $ (say #), I would definitely use them. But I just feel dirty typing "echo LOOK_AHEAD;" in one place and "echo $look_ahead_partial;" in another because I don't want to get in the habit of putting $ in some places and not putting them in others.

<comment><USER5> On the other hand, when someone reads "echo LOOK_AHEAD" they immediately know it's a constant and thus (a) global and (b)(more importantly) defined once and never modified by the code.

With "echo $look_ahead" there's no indication of that, and in the future another dev might add something that modifies $look_ahead's value and break other parts of the code, making for sneaky bug (which incidentally is why non- constant globals are so disliked ;))

</comment></comment></comment></comment><comment><USER6> I'm going to disagree with #9 that says using a core framework is bad. Now, if the core framework isn't a pre-built web framework like CakePHP, Symphony, there's a good chance there is some ... interesting things in there. But honestly having a "core" at least tries to reuse code.

<comment><USER7> Also disagreeing with #9. Plenty of popular frameworks have "core". core provides a clear delineation between extensible parts of a framework and its inner foundation. A well designed framework allows you to extend its functionality and upgrade the core at any time without disruption. Frameworks have core for the same reason objects have private members: interface opaqueness provides change protection.

<comment><USER8> I think that if you're using a well-developed framework, you can safely ignore #9. However, his advice is SPOT-FREAKING-ON for any home-grown stuff.

The last time I ran across a "core" directory, there was all kinds of application-specific code in there, all rolled up in switches and stuff - <USER2> you wanted to develop something using the "core", you had to go through about fifty files and add your own cases for your site. It was awful.

</comment></comment></comment><comment><USER9> Another sign (and that goes for any software): bad commenting and bad naming. If the naming and commenting is good, you most likely have a programmer who cares, which is half of the battle.

<comment><USER10> So true. In fact, I think this argument outweighs any or even all of the author's arguments.

</comment></comment><comment><USER11> I doubt there are many who would argue that Drupal is crappy software. And here's the shocker: it uses globals and most of it is procedural PHP! Let that sink in... Signs alone do not prove guilt. =P

But -- just to be a hypocrite -- my number one sign of crappy software is deeply nested if statements. The more you branch the more loose ends you have to juggle up in the air as your solution is formulating.

Just to be productive, allow me to share a tool that has evaded me for many years: assertions. No really!

      function GoodFunction
         assert(good_state)
         do_one_thing_very_well

Reads better, and leads to better design than:

      function GoodFunction?
        if( oh_right )
          do_one_thing_very_well_slightly_differently
        else
          do_one_thing_very_well

In the first the oh_right condition just doesn't fit in and you start thinking about what caused this logical branch in the first place. In the second we feel little hesitation to add an elseif if need be, further increasing complexity.

To give credit where its due, "Coders at Work" has actually changed my coding style. I highly recommend the book.

</comment><comment><USER9> Another sign: check the mysql queries. If they don't properly escape variables, danger.

<comment><USER12> if they escape variables: danger!

Escaping is not sufficient to prevent SQL Injection Attacks. You must used Parameterized Queries.

<http://bobby-tables.com/>

<comment><USER3> > Escaping is not sufficient to prevent SQL Injection Attacks.

Do you have an example or idea of how a SQL injection could occur despite using [http://php.net/manual/en/function.mysql-real-escape- string.p...](http://php.net/manual/en/function.mysql-real-escape-string.php) ?

</comment></comment></comment><comment><USER13> Also, using data from $_GET, $_POST directly in Views.

</comment><comment><USER14> We are still suffering from the effects of a developer who employed #1 throughout the codebase. We have both Object and Collection, and bypassing his classes results in reduuced memory usage by a factor of 10 and improved performance by a factor of 100. Unforunately he also employed #7 so it's very tricky to bypass that in some places without doing a major rewrite...

</comment><comment><USER15> "8. The software messes with the error level"

I did this one recently, because I needed to use some PEAR modules that produced notices under E_STRICT. I somehow think all of these have similar exceptions.

<comment><USER10> Yes, you often want to do this just to make sure you're overriding the server's defaults.

If you want all your notices logged into an error file as well as the fatal errors, and the server defines the default error level as E_ERROR, then you'll have to override the default error level.

Horrible article.

</comment></comment><comment><USER16> These signs would be present in almost any crappy software, not just PHP.

</comment><comment><USER17> also, the ones that don't use an ORM, instead go at lengths to invent it.

<comment><USER18> What about Wordpress? They don't use an ORM do they?

<comment><USER19> I would posit that Wordpress is the wordwide leader in 'crappy PHP software.'

(And I'm _not_ a PHP hater, my company writes 90% of our stuff in PHP, and WP works great for blogs and brochure sites. But it's nasty underneath that pretty UI.)

<comment><USER18> I guess it depends how you measure good software. Wordpress works. Really well.

<comment><USER20> Wordpress has such a long history of catastrophic security flaws that it's become notorious among people (like me) who don't even use it.

<comment><USER18> I am probably not all the different from you. But I have been running Wordpress on my own server for years and have never had a problem.

</comment></comment></comment></comment></comment></comment><comment><USER21> #1. It is written in PHP.

(sorry, I couldn't resist)</comment>


Ask HN: Would you mentor other people for free? - <AUTHOR> I've asked this myself sometimes already. A lot of knowledgeable developers are using Stackoverflow to give advice and help solving other peoples problems - for free. Giving back your own knowledge and helping students, newcomers or just less experienced developers can be a really good thing. It's a great feeling to know that you've helped someone.
I wonder if people would also be up for voluntary (donations at maximum) mentoring other people - face to face aswell (assuming the person mentored is actually intending to learn and not just trying get help on a project for free from an expert).<p>I know there are sites like codementor, but they are all based on a fixed hourly rate - you can basically only hire a mentor/expert. <comment><USER2> It's always great to build relationships with other people in your field. I would mentor someone for free if I felt they had the drive to learn more, but I wouldn't spend more than 5-10 hours a week if it was completely one-sided.</comment>


Base Rails 5.1 application with pre-configured tools and features - <AUTHOR> https://github.com/brunofacca/zen-rails-base-app <comment><USER2> At Le Wagon, we had the same need for our students, but we took advantage of the built-in Rails Templates features. Super handy!

More details here: [https://github.com/lewagon/rails- templates](https://github.com/lewagon/rails-templates)

<comment><USER3> Is there a reason for defaulting to Rails 5.0.5 rather than 5.1.3?

</comment></comment><comment><USER4> > minimize the time spent writing boilerplate code and performing repetitive > setup tasks.

The problem with this is that everyone likes his configuration be in certain way. So in the end we have 100s of theses kinds of "boilerplate" starting apps.

I personally don't see value in them at all.

<comment><USER5> Perhaps, or perhaps enough developers adopt a given project that it becomes a viable platform. I'm thinking of DropWizard, which is mostly an opinionated collection of libraries and which has a large impact. (Or at least it did... been a while since I've done Java.)

One problem I often find myself facing w/Python is that the ecosystem is so large that it's hard to keep up with the vast numbers of libraries. I have a list of a dozen or so in my head that for a large enough project I'd probably want to use. But personally keeping that list fresh is non-trivial. That, and of course, newer devs in an ecosystem don't have one.

I think these sorts of projects speak to that need.

Now, obviously as you suggest, people have differing needs/preferences, so there's room for competing visions, and in some cases this can become a sort of "now we have N+1 problems" meta-problem. But I don't think the fundamental impetus is misguided.

<comment><USER6> I typically search for "awesome $languagename" to get a list of curated libraries that people use and are stable. It's a decent shortcut to find what's good.

<comment><USER7> I'm sorry to say that the curation of those lists tends to need work.

I know this because I have at least one project on the "awesome Elixir" list that is absolute rubbish :)

</comment></comment></comment></comment><comment><USER8> This looks very nice!

I have something like this for my own projects, and my favorite piece is having detailed tests that I don't have to re-write every time: tests for Devise, tests for Stripe subscriptions, tests for many-to-many users and accounts, etc. I see this project has the same, which I really like.

I don't know why Devise doesn't have a generator to write all those tests for you, just like it will give you some starting views. Of course they won't match your app perfectly, but having the failures is helpful too, and probably it would be less effort to adjust them than to write new ones from scratch.

The idea isn't to "test the library"\---Devise should have its own internal tests too---but to make sure that the features work as expected with your own configuration and customizations.

The other gem where a free battery of tests would really save time is Spree. (Maybe that exists; I don't know yet.)

</comment><comment><USER9> Looks great. There also is [https://github.com/RailsApps/rails- composer](https://github.com/RailsApps/rails-composer) which seems to be a little more modular in what it sets the app up with. It had a Rails 5.1 upgrade Kickstarter a while back, but I'm not sure what came out of that. The project looks a little abandoned.

<comment><USER10> It's not super busy, but I'm not sure if it needs to be. There have been commits on it to handle 5.1: [https://github.com/RailsApps/rails- composer/commit/7088e05e7...](https://github.com/RailsApps/rails- composer/commit/7088e05e7d7eddce49488e0ccec9c60a386420fb) .

I'll be honest, I use it a lot if I want to spin up a new Rails application and go through a quick CLI picking databases/auth approaches/test frameworks.

The only other tool I would consider looking at for this is Thoughtbot's Suspenders but at this moment I have no pain points with rails-composer.

In case I'm not the only one who likes to use it, I've added it to CodeTriage just now in case anyone would like to be involved in supporting this project. [https://www.codetriage.com/railsapps/rails- composer](https://www.codetriage.com/railsapps/rails-composer)

</comment></comment><comment><USER11> Great concept. I've never understood why there weren't pre-configured SaaS- based Rails templates out there. Thank you for your contribution to the community!

</comment><comment><USER12> This looks amazing, thanks for posting

<comment><USER13> Agreed, this is very well put together. One of the better examples of a start application configuration I have seen in awhile.

</comment></comment><comment><USER14> It would be cool if you could have a command line feature where we could select what packages we want to use and also add details about the app. Rails composer is pretty interesting too and it has this feature. [https://github.com/RailsApps/rails- composer](https://github.com/RailsApps/rails-composer)

</comment><comment><USER15> I thought Rails _was_ the boilerplate.

<comment> the-dude It is boilerplates all the way down.

</comment></comment><comment><USER16> Couldn't this be implemented as an Application Template instead? [http://guides.rubyonrails.org/rails_application_templates.ht...](http://guides.rubyonrails.org/rails_application_templates.html)

<comment><AUTHOR> Yes, it could. I might eventually do that, but currently the project has a narrower scope in the sense that it is meant to have a set of preselected defaults.

</comment></comment><comment><USER17> > Base or "skeleton" application for Ruby on Rails 5.1 projects. Built to > minimize the time spent writing boilerplate code and performing repetitive > setup tasks.

Wasn't Rails 1.0 invented to solve this exact problem? A decade later and after 5 versions we are here?

<comment><USER18> Rails out of the box is ready to build a production ready project. These are for when developer preferences diverge from the out of the box rails defaults. I love RSpec and I always set that up when I start a new Rails/Ruby project. If you do consulting work, you definitely make new apps frequently and having your favorite things ready to go is a plus. Thoughtbot has a project called suspenders that includes their preferences for new apps.

</comment></comment><comment><USER19> > Built to minimize the time spent writing boilerplate code and performing > repetitive setup tasks

I never used Rails, but I thought its motto was "conventon over configuration"?

<comment><USER18> Rails is productive out of the box. The author has different preferences for some defaults and some plugins that require config. This is common for a consultancy to have a project like this so their rails apps are consistent around non-default add-ons and preferences.

</comment></comment><comment><USER20> Coming from Django , I was surprised rails 5.1 didn't come with authentication / authorization (or a valid email regexp)

I will definitely use this!

<comment><USER21> Coming to Django, if you want to do auth via email instead of username, you are out of batteries. I say this criticism as a fan of both Django and Rails.

<comment><USER22> It's about 20 loc to implement this in Django...

Edit: problem is that when starting a new project people often miss those 20 loc - as well as not noticing the documented best practices for accessing the user...

<comment><USER20> yeah, but i think by mentioning 'batteries' it means __no__ code is needed, simply a change in a config setting / changing a string to say.. 'username'-> 'email' somewhere.</comment></comment></comment></comment>


Let's stop Daylight Savings in the US - <AUTHOR> https://petitions.whitehouse.gov/petition/end-daylight-saving-starting-2016-lets-end-archaic-practice-serves-more-harm-good/xlTjN8Pb

<comment><AUTHOR> I'm not the originator. Was going to create one but did a search first and found this. I truly believe DST serves limited modern purpose. There are benefits, but they are out-weighed at this point by downfalls. Modern culture has a major impact. DST comes at an expense. I think we've reached a point that we don't need to move our clocks around twice a year anymore.

</comment><comment><USER2> Great idea! Daylight time is perfectly stupid and an archaism as well. It's an example of Big Government holding the hand of the public in an especially pointless activity.

But something tells me that 100,000 signatures will be difficult to reach for an issue that doesn't have either "abortion" or "social security" in its description.

</comment><comment><USER3> can someone link to the research about this please?

<comment><AUTHOR> There seems to be quite a bit. But most credible articles (haven't tried Google Scholars yet) point to there being no clear "winner." The overall consensus is that we should just be DST year round or not have it.

[http://www.history.com/news/8-things-you-may-not-know- about-...](http://www.history.com/news/8-things-you-may-not-know-about- daylight-saving-time)

[http://gothamist.com/2014/03/08/22_reasons_why_daylight_savi...](http://gothamist.com/2014/03/08/22_reasons_why_daylight_saving_time.php)</comment></comment>


Ask HN: Is anyone doing a job board "right"? - <AUTHOR>

From what I can find, everyone has a job board but they are either very expensive to post to or are of a very low quality.<p>Isn't there anywhere to quickly and simply find/post jobs of any kind on the cheap? What if I just had a simple programming task I was willing to pay for. Where could I post it/find someone? <comment><USER2> Based on your question, I would say odesk is the place to go to post/find someone for simple programming tasks. I've heard of people using fiverr.com for this but I've never tried.

On a purely selfish note: I just launched betacave.com which has a unique spin on the recruiting process, but its more geared towards long term hiring. Discussion here: <http://news.ycombinator.com/item?id=4576038>

<comment><USER3> I looked at betacave.com. What is the unique spin that you are offering ?

<comment><USER2> This might help shed light: <http://news.ycombinator.com/item?id=4584945>

Ultimately it comes down to privacy and respect.

</comment></comment></comment><comment><USER3> Depends on how and in what context you define "right". There are numerious job boards out there including aggregators like indeed (who just won big btw ). In terms of being able to quickly find/post jobs of _any kind_ , craigslist does come to mind. The question is: what can you do that craigslist is not doing well in terms of job board ? Or elance, odesk etc. for that matter ?

</comment><comment><USER4> While it is not generally thought of for that purpose, Craigslist is where a lot of people go for the case you described.

<comment><AUTHOR> exactly my point...

if craigslist is the only place for this kind of thing, i think there is a need that needs filling.

</comment></comment><comment><USER5> <http://careers.sh/>

This is a small site I run that links to ~26 dev job boards. Posting on places like Meetup.com might be your best bet.

<http://news.ycombinator.com/submitted?id=whoishiring>

You can also wait until Oct 1st and post in the next WhoIsHiring Freelancers thead.

</comment><comment><USER6> Wouldn't that be the niche of Elance, Guru, Odesk and other freelancing sites?

<comment><AUTHOR> ya for a lot of things but they cost $$ too. i'm talking like any kind of job board. full time, temp, one off tasks. is there anyone doing a good job at aggregating all this?

<comment><USER7> "They cost $$"? So doing this right means being totally free? That doesn't sound like much of a business model.

</comment></comment></comment><comment><USER8> The economics of job boards are essentially ad arbitrage, they buy traffic (job seekers) and resell it (job ads), sites which don't have significant revenue from ads can't afford to buy quality traffic.

</comment><comment><USER9> <http://www.hackerjobs.co.uk>

1\. Free job listings

2\. High quality build with zero recruiter pollution.</comment>


Kweb: A new approach to building rich webapps, in Kotlin - <AUTHOR> http://kweb.io/ <comment><USER2> I've been lucky to observe KWeb since its earliest days and some of the missing context on the website, I think, is that the author takes the position that the way we build webapps is fundamentally wrong.

From his perspective it seems that the "division" between frontend and backend are an implementation detail that accidentally became of defining feature of how we write software for the web. Websockets are a way to correct this by making the delivery channel dumb and universal while focusing application development in a single software architecture.

It reminds me of the principle of brutalist web design ([https://brutalist- web.design/](https://brutalist-web.design/)). Brutalist design, while not completely beautiful, makes me ask, "What were we trying for when we first made HTML? Does the tool really fit those goals anymore?" While I hope that KWeb grows up to be something big, at a minimum it asks a lot of questions about why applications for the web are architected the way they are.

<comment><USER3> The problem with this approach is that the "division" is so fundamental to the performance of web applications that it can't simply be abstracted away. When real applications encounter latency and unreliable connections at scale the abstraction will leak. At that time teams will be forced to dedicate efforts just to overcome the deficiencies in the architecture.

<comment><USER4> I don't think there is any reason, in principle, that Kweb can't be just as efficient as any other web application.

This is because Kweb doesn't entirely abstract away the client/server separation in one important sense. When you attach a callback to something you normally do it like this:

      button.on.click {
        header.text("They clicked!")
      }

This is less efficient than it could be because it is needlessly doing a server round-trip. So for situations where you're only modifying client state you can do:

      button.onImmediate.click {
        header.text("They clicked!")
      }

When the user clicks it will be instant, as the instructions to modify the DOM are "preloaded" to the client on page render.

Does that alleviate your concern? If not, can you elaborate on where you think the bottleneck is likely to emerge?

<comment><USER3> The example you make here is exactly what I'm referring to when I say the "abstraction leaks". From the homepage:

> Kweb ... virtually eliminates the separation between browser and server from > the programmer's perspective.

In my opinion, we can't say the separation has been "eliminated" if I'm constantly having to ask myself "should I handle this event on the server or the client via `onImmediate`?"

What seems more likely to happen, is that inexperienced developers simply won't ask the question at all and months later the customer will ask why their dashboard page is taking 60 seconds to load. The senior engineers will be tasked to fix it only to find out that the page is making dozens or hundreds or thousands of N+1 round trips to the server.

This has been my experience being asked to come in to fix MeteorJS apps. Teams of web developers not understanding that the client/server interface is not free and that poor engineering practices have severe compound effects.

<comment><USER4> I appreciate your feedback.

> In my opinion, we can't say the separation has been "eliminated" if I'm > constantly having to ask myself "should I handle this event on the server or > the client via `onImmediate`?"

Well, I said " _virtually_ eliminated" :)

I think it's an exaggeration to say that the programmer must constantly ask themselves this, it's only relevant when adding an event listener. You'll get along just fine if you never used onImmediate, it just means your webapp may not feel quite as snappy as it could be.

To me this seems like a very small price to pay to avoid having to bifurcate your application across client and server - particularly given that it's not even compulsory, it's an optional optimization.

> What seems more likely to happen, is that inexperienced developers simply > won't ask the question at all and months later the customer will ask why > their dashboard page is taking 60 seconds to load. The senior engineers will > be tasked to fix it only to find out that the page is making dozens or > hundreds or thousands of N+1 round trips to the server.

An unnecessary roundtrip may add 200ms of latency across a typical internet connection to the speed with which the page responds to an event, but I can't think of any circumstances under which this would delay the page render.

Moreover, a website built without onImmediate should work just fine, it just might not quite match the performance of a well-written client-side app.

> This has been my experience being asked to come in to fix MeteorJS apps. > Teams of web developers not understanding that the client/server interface > is not free and that poor engineering practices have severe compound > effects.

There is only so much a framework can do to save programmers from themselves. In this case the risk is that the app may feel a little more sluggish than it otherwise would, a difference that users might not even notice.

It may be possible to automatically identify candidate event handlers which don't appear to be modifying server-side state and provide a nice list to the programmer, but I'd likely only invest time in this if it proved to be a significant issue in practice.

</comment></comment></comment></comment></comment><comment><USER5> I agree on writing environment (client/server) agnostic code, but not in this way. Js code should definitively run on the client and here is why:

\- Instant feedback, no matter how bad is your connection: here if I click on something and there is no internet, I won't see a loading icon. You probably have to hack it. \- I'm not sure how it will scale and if it scales will be way more expensive than just using rest api (sockets are more expensive)

probably more problems.

I'm the creator of this game [http://bitplanets.com](http://bitplanets.com) which has a lot of shared code that runs both on the client and the server side. Some validation is done on the client (so you don't even hit the server if it fails + get instant feedback that your action is successfull or failed) and the same validation is done on the server side as well (so you can't hack it).

Examples:

\- When you send a ship it will show a temporary ship immediately even if the server didn't receive yet the ship. If the client validates most likely it will be a valid ship (unless you hack it, but server side will deny your ship). Then when the server comes back saying that the ship is valid then the ship is not temporary anymore.

If you had a java backend everything would be so much more complicated. This is what I mean by having agnostic code, this validation function doesn't really care if is run on your client or on your server.

<comment><USER4> > here if I click on something and there is no internet, I won't see a loading > icon.

Fortunately, that's not so - Kweb has a neat way to handle it - outlined here: [https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_...](https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_new_approach_to_building_rich_webapps_in/ebdrtet/)

</comment></comment><comment><USER6> Reminds me of the principles behind the original asp.net, all the way back in 2000. At the time there were no websockets, so it was done with constant post- back, but the principle was fundamentally the same: develop like it were a local app, the framework will take care of the rest. Let's just say it didn't get very popular in my neck of the woods. I've since moved on to other things so I don't know what modern asp.net does, but I bet you can still code this way if you really want.

(Not that you should, imho: trying to bypass the fundamental architecture of the web is typically a way to end up in debugging hell.)

<comment><USER7> First, there was ASP, which was a lot like PHP, ColdFusion or Perl/CGI - mixing inline back-end code and HTML/JS/CSS/etc - but of course executing all back-end code on the server.

ASP.NET WebForms came along and is still supported, and tried to make developing web applications similar to developing desktop applications in WinForms. I did that, it worked.. it was clunky at times (but it worked). Of course, mostly this was all server-side with just HTML/JS/CSS interacting.

A long time ago the dominant model became ASP.NET MVC which is a typical server-side MVC architecture.

Recently, Microsoft offered a new "old" paradigm through Razor Pages which are a lot like old ASP was.

If you look at things like React (or the view layer in Angular, etc.), it turns out that the web component / control model used in WebForms (server- side) is quite similar to the client side model used in React. The main difference of course being, one running client-side primarily (React) and the other server-side (WebForms). It gets even more interesting as a comparison when you talk about server-side React view rendering.

<comment><USER6> Yep, I was thinking of the original WebForms.

</comment></comment></comment><comment><USER8> Doesn't blurring the client/server divide induce the programmer to unwittingly introduce more latency?

<comment><USER4> Kweb has a neat solution to this, I outline it in this Reddit comment: [https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_...](https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_new_approach_to_building_rich_webapps_in/ebdrtet/)

</comment></comment><comment><USER9> Too much magic. Debugging this would be a real pain with everything happening over websockets

<comment><USER10> I would expect it to be quite the opposite: it looks like a true hexagonal architecture for the web, with the thinnest of adapter for the client part, which is nearly perfect.

You can debug all your logic on the server.

I'd guess a/the big drawback would be no offline capability. But if you're fine with that (many are), then why not?

<comment><USER4> I'm kweb's creator, I hadn't heard the term "hexagonal architecture", I'll read up on it, thank you for the kind words.

You are correct that, since kwebsites are server-driven, there is no significant offline capability.

But then the requirements of many websites often rule that out anyway, my strong suspicion is that this won't be a dealbreaker for many people.

</comment></comment></comment><comment><USER4> Note: reddit discussion here: [https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_...](https://www.reddit.com/r/programming/comments/a4dtp2/kweb_a_new_approach_to_building_rich_webapps_in/)

</comment><comment><USER11> There's also LiveView coming to Phoenix (Elixir). This might be a new trend in web frameworks.

</comment><comment><USER12> Sounds like a similar approach to Wicket, which remains the best web UI framework (possibly the best framework period) I've ever used.

<comment><USER4> I used Wicket for a major project way back in 2007 and worked with the creator of Wicket for a while - so it's almost certain I got some inspiration there :) Wicket was probably the first time I saw a web framework and thought - "wow, this web stuff can be elegant".

Wicket suffered because it straddled the transition from pure HTML to HTML+AJAX. It could do HTML+AJAX, and their solution was elegant, but it was an afterthought and Wicket wasn't really designed around it.

Kweb was designed from the ground-up for this world and this affords it many advantages.

<comment><USER12> Glad to hear it. How Scala-friendly are the interfaces?

<comment><USER4> Hmm, I'm not sure, but my guess is "not very" as I didn't really design it with usage from other JVM languages in mind.

The reason is it depends on some stuff like coroutines - and since Scala deprecated their delimited continuations plugin way back when, I don't believe Scala has any equivalent feature.

May I ask why you ask?

<comment><USER12> I'm interested to use a framework with this kind of design, but I'm very much committed to Scala (and could never give up HKT at this point).

<comment><USER4> Ah, understood. If you're locked in to Scala then unfortunately Kweb probably won't be a good fit :(

</comment></comment></comment></comment></comment></comment><comment><USER13> Nim + Karax allow creating single-page applications without "magic":

[https://nim-lang.org/araq/karax.html](https://nim-lang.org/araq/karax.html)

Working example: [https://forum.nim-lang.org/](https://forum.nim-lang.org/)

<comment><USER4> Interesting. Just for fun I created a side-by-side with Kweb of one of their simple examples.

Here is kerax:

      var lines: seq[kstring] = @[]

      proc createDom(): VNode =
        result = buildHtml(tdiv):
          button:
            text "Say hello!"
            proc onclick(ev: Event; n: VNode) =
              lines.add "Hello simulated universe"
          for x in lines:
            tdiv:
              text x

      setRenderer createDom

Here is the equivalent in Kweb:

      fun main() {
        Kweb(port = 2734) {
            doc.body.new {
                button().text("Say hello!").on.click {
                    println("Hello simulated universe")
                }
            }
        }
      }

This compiles and works.

<comment><USER14> The first seems to add new DOM nodes with text on every click. The second one doesn't. So they don't seem to be equivalent.

<comment><USER4> Hmm, it seems to be adding things to a list but where is it adding a new DOM node?

<comment><USER14> I would say in

         for x in lines:
            tdiv:
              text x

Whenever the DOM gets rerendered, it iterates over the the lines (or the "model" in general), and creates DOM elements from it. At least it looks very similar to React and Angular code, and they do exactly this.

<comment><USER4> Ah, you're right. Ok, I think I can do that fairly concisely in Kweb also, if I find a bit of time.

</comment></comment></comment></comment></comment></comment><comment><USER15> Is there any documentation, API or otherwise available?

<comment><USER4> Unfortunately that's one area where Kweb is currently immature, however beyond what's on the website there are a number of examples that should help:

[https://github.com/kwebio/core/tree/master/src/main/kotlin/i...](https://github.com/kwebio/core/tree/master/src/main/kotlin/io/kweb/demos)

Also, if you use IntelliJ IDEA then the IDE will do a lot of the work for you in figuring out the API.

</comment></comment><comment><USER16> What about mixing frontend with backend?

That's terrible.

<comment><USER17> Back to PHP3 and coldfusion days

<comment><USER18> There were a lot of things i really liked about coldfusion, like how easy it was to build reports, and how easy it was to get started. cfdump is still one of my favorite debugging tools. Everything else, not so much :)</comment></comment></comment>


Phil Hanes: How I Did It - <AUTHOR> http://www.inc.com/magazine/20080701/how-i-did-it-phil-hanes.html

<comment><USER2> Thanks for that link - fascinating story about a fascinating life. As "clippy" as it was though, I have to wonder how much great conversation was edited out...</comment>


Review Startup - <AUTHOR> https://www.orgzit.com/ <comment><AUTHOR> Is Orgzit your solution for a crowded SaaS market? It's sort of your all-in- one platform to encompass major business processes like Project Management, Task Management, Field Force Management, HRMS, Recruitment tool and expense/reimbursement tracker.

Would love to gather some comments here!

<comment><USER2> 0\. If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

1\. I'm curious about the story behind Orgzit's development. Was it built for inhouse use or a client or speculatively? What technologies does it use?

2\. I'm also interested in Orgzit's current use because that provides some idea about its sustainability. I am always concerned with business products that anchor their pricing to free (and here the paid plans are anchored to free as well).

The reason I get concerned is that the price of the software is not the major cost for a business. The major cost is investing time and effort into building the platform into their process and the risk of "betting" on a the sustainability of a company like Orgzit as a viable business. It's hard to get to $1,000,000 a month revenue using free plans.

Of course if Orgzit already has tens of thousands of paid users, then the low cost of plans is probably not so much of a risk.

Anyway, an interesting project.

Good luck.

<comment><AUTHOR> Hey brudgers,

Thanks for your useful insight. Will put it up on Show HN.

1\. You got it right! Orgzit was built for inhouse use (as a simple field data collection app for engineering services companies that could be used to collect operations data from various infrastructure assets).

But it was evident that SMBs were spending a lot using multiple 3rd party apps to manage projects, assets and finances. And Orgzit realized it's scope was in working with such teams and help them structure Orgzit according to their M.O than the software's.

Currently, we use SQL in combination with NOSQL, Django, Celery, RabbitMQ, Backbone.js

2\. Orgzit is currently used by engineering project companies and entrepreneurs looking to save on time and enhance their team productivity.

Today, the primary mission is to make people realize Orgzit's usefulness in terms of its ability to organize data, collaborate with colleagues, and analyze the information - all from a single window. (all from the purview of setting up a lifestyle business)

Tomorrow, the pricing plan can be modeled to sustain Orgzit's finances as well as make it more suitable for its users.

It will be great if we can give you a short demo and see if it's worth the hours we put into it.

Regards</comment></comment></comment>


What new wearable sensors can reveal from perspiration - <AUTHOR> http://news.berkeley.edu/2016/01/27/wearable-sweat-sensors/ <comment><USER2> The mentioned Nature paper: "Fully-integrated wearable sensor arrays for multiplexed in-situ perspiration analysis", Nature, 529, 509-514, 2016.

[http://nano.eecs.berkeley.edu/publications/Nature_2016_Sweat...](http://nano.eecs.berkeley.edu/publications/Nature_2016_Sweat.pdf)

And there is more related research from Berkeley Javey Research Group on their publications page:

[http://nano.eecs.berkeley.edu/publications/](http://nano.eecs.berkeley.edu/publications/)

</comment><comment><USER3> seems like the most interesting thing here is the sensor itself as the rest of the setup is more or less standard components. I would love to know how the sensors work across different chemicals without losing accuracy over time.

<comment><USER4> That's more or less true for sensor projects. The transducer is the area of research, with an Arduino or other simple backend to allow them to focus on the transducer. This is not necessarily the way a commercial product would be done, but it's great for researchers who want to focus on their area of academic focus.

</comment></comment><comment><USER5> So what kind of pathologies can it detect?

</comment><comment><USER6> Are we using words like "thru" in titles now?

<comment><USER7> Thru's a good old word. But this submission had no need to change the original title, since it isn't misleading or linkbait.

(Submitted title was 'Wearable Sensors That Detect Health Thru Sweat'.)</comment></comment>


The Difference Between Fedora, Redhat, and CentOS - <AUTHOR> https://danielmiessler.com/study/fedora_redhat_centos/ <comment><USER2> This page is really full of errors. Please don't spread it.</comment>


Latin American delivery startup Rappi valued above $1B - <AUTHOR> https://www.axios.com/rappi-latin-american-delivery-valuation-unicorn-0c5d0743-fd41-4071-9270-928db470d6be.html <comment><USER2> I've used Rappi here in Mexico and it's probably one of the worst delivery services I've used. Just seems like they overextended themselves by going in multiple directions without being quite efficient at them. Their website also often shows promotions that suddenly disappear when you try to click on the specific restaurant and you then have to plead your case to the customer support representative. Overall not a very good experience. Their delivery people often make mistakes with items too.

<comment><USER3> Unfortunate but It looks like signs of growth (VC triggered) though! Why do people still use it? Guess there are no alternatives in Mexico?

<comment><USER2> Postmates and Uber Eats are here too. Can't really see why people would use Rappi. You also have a service called Cornershop for groceries so Rappi's competition here doesn't make it appealing.

<comment><USER4> Cornershop is groceries delivery made right. The person who picked your items is the same who delivers it to you, there's no dilution of responsibility. Wrong product? missing items? bread crushed under the milk? They will own up to it and fix it.

Previously we used HEB's own delivery service. One person picks your items, other packs them and yet another delivers it. When something is wrong no one owns up to it.

</comment></comment></comment></comment><comment><USER5> In Colombia, A LOT of the guys who work delivering in rappi are Venezuelan people with no documents, they ride mostly bikes with no helmets or protections at all ! And they are not social covered at all: no health or professional risks, no vacations, etc etc etc ... That's the worst way to do business, taking into consideration we are working hard (on Latin America) on formalizing our employees.

</comment><comment><USER6> The competition is fierce, here in Montevideo (Uruguay) it's unbelievable the amount of delivery startups for a population of less than 2 million...

We have the local PedidosYa (sold to DeliveryHero), U.S. UberEats which is making a heavy bid, Rappi as well, some other local challengers...

I love the services but some are too predatory (PedidosYa takes about 20% of a delivery unless the restaurant has high volume).

<comment><USER7> In the Greater Metropolitan Area of Costa Rica (2.6M people) there's also a lot of options, we've got:

\- UberEats (U.S.)

\- Glovo (Spain)

\- EatsOn (Costa Rica)

\- GoPato (Costa Rica)

\- Hugo (El Salvador; they haven't started yet though)

Other services have shutdown: QueComemos.com (Costa Rica) and Juanlotrae.com (Costa Rica).

Uber in Costa Rica has 783K active users y 22K drivers.

</comment></comment><comment><USER8> Anecdote from this past Tuesday, for what it's worth: At a Starbucks in Buenos Aires, Rappi was set up at the table next to ours, doing interviews to hire delivery people.

A friend who uses these services more than me said he likes Rappi because you can see in real-time where your delivery is.

<comment><USER9> > he likes Rappi because you can see in real-time where your delivery is.

Same with Uber eats.

<comment><USER10> There's no Uber Eats in Buenos Aires yet though, and it would probably be a pretty dangerous endeavor given how violently taxi drivers have been reacting against Uber drivers. Any person on a bicycle or skates with an Uber logo on them would essentially become a moving target for some frenzied taxi driver to run over.

</comment></comment></comment><comment><USER11> I'm always a little suspicious of the reality of unicorns.

The way that the figure is derived is that people paid $X for portion Y of the company, and therefore the company is worth $X/Y. The problem is that in addition to portion Y, in a large deal the investors also get preferred stock, downside protections, and so on. Those extras are worth something, and therefore some of $Y is for THAT rather than a share in the company.

Therefore the company is always worth less than the figure you see reported.

See [https://www.fenwick.com/FenwickDocuments/The-Terms-Behind- Th...](https://www.fenwick.com/FenwickDocuments/The-Terms-Behind-The-Unicorn- Valuations.pdf) for more on this.

<comment><USER12> Reminds me of this comment [https://news.ycombinator.com/item?id=17779751](https://news.ycombinator.com/item?id=17779751) about DoorDash which was false. Given some of the same investors are in Rappi, I would not immediately assume they have funky terms.

<comment><USER13> First of all DoorDash and Rappi are not comparable, as much as they provide the same type of service.

If you're rapidly growing company in South America trying to raise money from American/Asian investors, you're already in disadvantage.

You could totally get competing term-sheets for a company raising money to operate in these markets but nobody is dropping their pants to give money to these companies when they could be easily pouring money into safer markets. These are companies raising unprecedented rounds for markets in which the delivery fees are in their majority under 1 USD. As they keep expanding and growing their business they will have to shave a lot of profitability, while dealing with the unpredictable economic nature of these countries (for example Argentina, one of their markets, is currently going through an economic crisis - their currency is basically worthless, bank rates at 60%, inflation expected to be at 26% this year...not a great time to pay for food delivery)

I'm not saying that these investors are sharks and just being predatory for the sake of being pieces of shits. What I'm saying is that given the market, the opportunity, the risks, the environment and the competitive landscape is very unlikely that they are leaving these deals without severely affecting the common stockholder pool.

These investors have the fiduciary responsibility of getting the most out of their funds and I really don't see why they would give 200MM USD to a company that operates in emergent economies without getting a huge chunk of ownership.

</comment></comment></comment><comment><USER14> Here is a video of one of the founders yelling at their carriers [https://m.youtube.com/watch?v=ooTmdOyKYpQ](https://m.youtube.com/watch?v=ooTmdOyKYpQ)

</comment><comment><USER15> Rappi is such an amazing product. Better and more reliable than seamless and GrubHub, in my experience. I used it in Medellin, Colombia.

<comment><USER16> same here, I used it a lot in Medellin and it was super convenient

</comment></comment><comment><USER17> Congratulations to Rappi, it's crazy dificult to raise money in Latin America. I've seen so many good teams/products/services fade away due to inability to raise capital.

</comment><comment><USER18> I remember when Pathao, a delivery service from my home country was valued at 100M, I thought it was a lot of money. Having spoken to the people who work there, they told me that the margins are slim, so I'm guessing that you basically make money on volume of deliveries.

</comment><comment><USER19> Rappi is so heavily price subsidized that I wonder what will happen with them once they stop burning through VC. For perspective, the average delivery fee in Buenos Aires is < $1, and they guarantee < 35min deliveries or your money back.

</comment><comment><USER20> Is there any other succinct way of describing "privately owned companies valued at over $1B" besides as "unicorns"? The animal type of unicorn is _awesome_ , and I feel actual unicorns ought to be protected from capitalism (and probably from humans in general). Using the word in a business context seriously detracts from how magical unicorns actually are.

<comment><USER21> Narwhal-horse hybrids should be studied for any genetic or structural uniqueness they might express. And their parents should be observed to discover the mechanics of their copulation.</comment></comment>


AnyDSL: A Framework for Rapid Development of Domain-Specific Libraries - <AUTHOR> https://anydsl.github.io/ <comment><USER2>
        A key feature of AnyDSL is that transformations of code from higher level of abstractions to lower levels is not done in a compiler

Look, you can call it a "mumbleencabulator" if you want, it's still quacking an awful lot like a compiler...

<comment><USER3> Yeah, I tend to agree. I tried reading it even more closely, and here's how I'm interpreting it:

* In a normal compiler, you have the front-end which generates intermediate code in a pseudo-assembly language, and you have the back end that compiles that intermediate code into assembly language (or into JVM or CLR or even JavaScript, these days...)

* In AnyDSL, the front end takes the code and compiles it into, well, the same language, only with decreasing levels of abstraction from the hardware.

I don't know if you're familiar with "shader" languages (for OpenGL and DirectX and similar), but they're written in a syntax that looks _very much_ like C. It's not precisely C, but it looks a whole lot _like_ C -- but every statement effectively generates machine code directly, and they get executed in parallel. So if you're writing a pixel shader that makes everything more red, you'd write a statement like (pseudocode):

        output.r += 10;

...and when it drew the texture or polygon to the screen, it would execute your code once for each pixel.

In AnyDSL, it looks like the top level language is very much like a normal (functional) language. That language gets "compiled" into an intermediate abstraction language (like the one using @iterate call), and the final "compilation" step is like the shader language, in that it's letting you define a target-specific implementation, which could include vector functions or pixel shaders or whatever.

If this were C, then the second level would be internal to the compiler and completely opaque, and the final level would be the compiler backend+libraries, which might have calls to implement vector math. If you imagine lifting those backend libraries up into the same compiler, where the libraries are written in a similar language syntax, you can imagine that they can do a lot more to optimize the result, because more of the code gets built at the same time, and a lot of intermediate states can be eliminated at compile time.

But yes, it still feels fundamentally like a compiler. Only a compiler where you can't just link in existing C-based libraries, because then it wouldn't be able to do its magic. So you therefore need to reinvent all the wheels?

<comment><USER4> In most compilers today, the front-end generates an AST, from which an(other) intermediate representation (IR, named Thorin in AnyDSL[1]) is generated. On that IR, the "middle-end" already optimizes a lot and the back-end finally generates whatever output formats the compiler targets (for AnyDSL: LLVM, CUDA/NVVM, OpenCL).

> * In AnyDSL, the front end takes the code and compiles it into, well, the > same language, only with decreasing levels of abstraction from the hardware.

The AnyDSL language (Impala) compiler works exactly like my compiler description above. However, the levels of abstraction you refer to here, are all written in the same "top level" language (a "host" language in DSL literature terms) and are basically just libraries on top of each other. The @ on the iterate call partially evaluates the call (aggressive inlining and specialization) at compile time on the Thorin IR. This feature allows the compiler to remove the layers of abstraction again and bake the code together, like you say.

> But yes, it still feels fundamentally like a compiler. Only a compiler where > you can't just link in existing C-based libraries, because then it wouldn't > be able to do its magic. So you therefore need to reinvent all the wheels?

Yes, it is a compiler - but you don't need to write one for your DSL (unless you really need other syntax). You're correct with regard to external libraries: If you need to remove the abstraction overhead (e.g. function calls) of your external library for performance reasons you'd need to re- implement that in AnyDSL. However, that holds true for any DSL framework and compiler, unless you compile everything to (C) binaries and do partial evaluation at link time. But at that point you've already lost a lot of information that a compiler can usefully exploit to generate better code: more abstract types, higher-order functions, scheduling info, alias info, etc..

[1] See the paper: [http://compilers.cs.uni- saarland.de/papers/lkh15_cgo.pdf](http://compilers.cs.uni- saarland.de/papers/lkh15_cgo.pdf)

<comment><USER3> >However, that holds true for any DSL framework and compiler, unless you compile everything to (C) binaries and do partial evaluation at link time. But at that point you've already lost a lot of information that a compiler can usefully exploit to generate better code: more abstract types, higher-order functions, scheduling info, alias info, etc..

For quite some time, C and C++ linkers have had the ability to look back at the original C/C++ code and literally rebuild the code differently to optimize the program across objects. In the Microsoft compile chain this is called "Global Optimizations". So I don't see AnyDSL's ability to do the same as a completely unique proposition.

The other issue that I see with this is that 98% of code doesn't need to be optimized down to the level that AnyDSL enables. JIT compilers are _really good_ at optimizing the execution path without having to involve programmers at the intermediate and low levels, for example.

In the few cases where you need to target LLVM, CUDA and OpenCL for a particularly performance critical routine, I could see this as being useful, as long as the resulting code can be called from a more standard language. I'd like to see really trivial C bindings (via exported .h files) at a minimum, but C++, Go, Rust, JavaScript, Python, and other modern languages could really hit the performance required of 98% of the code, leaving only the extreme performance code for something like AnyDSL.

But I'd say that front-and-center: "AnyDSL is about creating ultra optimized cross-hardware performance critical code, targeting LLVM, CUDA, and OpenCL code based on the same high level code." All of the talk about theory is just distracting people from the actual "killer app" of AnyDSL.

<comment><USER4> Partial evaluation (whether online/offline) is not implemented in any (current) C/C++/Rust compiler, for very good reasons. "Global Optimizations" may do a significant number of optimizations that partial evaluation may do and some that partial evaluation is unable to do (depending on your abstractions, e.g. code motion).

I totally agree that these kinds of optimizations are unnecessary for most applications, which is why we target and compare against High-Performance Computing algorithms and DSLs. Have a look at the publications and comparisons with OpenCV and similar.

If you want to wrap AnyDSL HPC code with some other language, sure. There is an experimental compiler flag --emit-c-interface right now. :)

However, most of the current HPC DSL frameworks generate some C code from Python/etc by stitching together library calls to BLAS/etc. in some haphazard, mostly untyped way - not ideal.

> But I'd say that front-and-center: "AnyDSL is about creating ultra optimized > cross-hardware performance critical code, targeting LLVM, CUDA, and OpenCL > code based on the same high level code." All of the talk about theory is > just distracting people from the actual "killer app" of AnyDSL.

Thanks, I agree. Presentation could definitely use some work. As it stands, it's mostly a presentation of the published research work and not yet addressed to users.

</comment></comment></comment></comment></comment><comment><USER5> I'm wondering how this compares to Xtext[1], which is another framework for developing domain specific languages. Xtext feels more approachable to me, but maybe that's because there appears to be a lot more documentation and tooling.

For example, the docs on Xtext's grammar language[2] seem very intuitive to me, even though I'm not experienced in compilers or language design. I don't have quite the same intuition when looking over the AnyDSL docs[3]. Maybe the Xtext docs are just more goal-oriented, i.e. "Five simple steps to your first language".

[1] [https://eclipse.org/Xtext/index.html](https://eclipse.org/Xtext/index.html) [2] [https://eclipse.org/Xtext/documentation/301_grammarlanguage....](https://eclipse.org/Xtext/documentation/301_grammarlanguage.html) [3] [https://github.com/AnyDSL/anydsl/wiki/Tutorial](https://github.com/AnyDSL/anydsl/wiki/Tutorial)

<comment><USER4> Xtext and AnyDSL have very different goals. Xtext is mostly about Syntax and IDE-Support, while AnyDSL is about compilation. With Xtext you'll get support for defining the grammar of your language, but you'll write your own compiler for your DSL - the DSL is "deeply-embedded" in the host language Java, that is: represented as a Java datastructure. In AnyDSL, you don't have any support for custom syntax - all your DSLs are basically just "libraries"/types/functions in the host language Impala - a "shallow" embedding. Java examples of shallow embedding are most "fluent interface" libraries, e.g. jOOQ[1].

This has the benefit that you don't need to know about compiler tech to implement your DSL. However, a domain-specific compiler can optimize using domain-specific knowledge and potentially generate faster code. For this reason AnyDSL/Impala provides online partial evaluation with the '@' operator, which aggressively specializes functions and evaluates at compile time. With the right DSL abstractions, this can result in generated code that is as fast as hand-tuned code.

For a more complete view of the relation between partial evaluation and DSL embedding, have a look at the GPCE'15 paper[2].

We totally agree that the website and documentation (there is some in the github wikis) is lacking at the moment and we're working on them. However, AnyDSL is still a young research project.

[1] [http://www.jooq.org/doc/3.9/manual/sql-building/sql- statemen...](http://www.jooq.org/doc/3.9/manual/sql-building/sql- statements/dsl-and-non-dsl/) [2] [http://compilers.cs.uni- saarland.de/papers/gpce15.pdf](http://compilers.cs.uni- saarland.de/papers/gpce15.pdf)

</comment></comment><comment><USER6> I don't know what people are used to these days, but looking at the diagram in the post, if this is what author calls a DSL, then they haven't seen a DSL in their life before. What I see in the image is bog standard use of procedures to abstract code away. Does the word "DSL" these days mean "use functions"?

An actual DSL looks like this:

[https://www.irif.fr/~jch/software/cl-yacc/cl- yacc.html](https://www.irif.fr/~jch/software/cl-yacc/cl-yacc.html)

(scroll down to "define-parser")

It enables domain-specific abstractions in code. It's not about just naming your functions right.

<comment><USER7> They're going to ban "lisp as the real example" comments here before too long. (-;

<comment><USER6> It would be a sad day indeed. There's nothing better than an occasional example from decades ago for one to re-evaluate current hype levels in programming ;).

</comment></comment></comment><comment><USER8> That "Machine Expert" snipped still looks way too much like a programming language. I fail to see the advantage over rolling a DSL with ANTLR which is reasonably intuitive (I'm assuming this is meant for external DSLs) or better yet using a language workbench like Xtext (which also gives you an Eclipse-IDE for your DSL "for free").

I guess the more the merrier but the linked website doesn't really showcase the tool very well (imo). For quick prototyping I'll probably stick with Prolog DCGs :)

<comment><USER4> In AnyDSL, Impala is a host language for shallow-embedded DSLs. No parser generators/grammar required/needed as that is not the point.

From the last paragraph of the overview section: "The DSL developer just reuses Impala's infrastructure (lexer, parser, semantic analysis, and code generator). He does not need to develop his own front-end."

We should probably emphasise that and restructure the introduction text.

</comment></comment><comment><USER9> How does this compare to lisp and lisp-like languages that use macros to create DSLs? Particularly Racket and its #lang mechanism?

</comment><comment><USER10> There's nothing worse than DSLs.

<comment><USER11> amen

</comment></comment><comment><USER12> After quickly scanning the text, I have no idea in what way a "framework for DSL Libraries" is different from, well, a programming language.

It appears that the levels of abstraction are solved a bit cleaner, but also not fundamentally different.

(no expert, though. Maybe someone can translate it)

<comment><USER13> Well, who says a programming language cannot provide a framework for DSL libraries?

I like that iteration constructs, for example, can be implemented simply as higher-order functions.

This way, the compiler already knows how to deal with them and does not require additional definitions regarding parsing or code generation.

</comment></comment><comment><USER14> Or, you can use Ruby ;]</comment>


Self-Publishing Your Own Book is the New Business Card - <AUTHOR> http://www.jamesaltucher.com/?p=4925

<comment><USER2> I so totally don't believe that. The author says he published five books through traditional publishers and had a "weekly column in The Financial Times", so it's basically impossible to say if self-publishing is good for you if you don't already have that background.

Or, consider the proffered scenario: 'Then when you meet someone and they ask for your business card, how cool will it be when you can say, "here, take my book instead."'

Not cool at all. My uncle was like that. He wrote a book and tried to get anyone else to read it. I couldn't get past the first few pages. It's like going around to everyone saying "read my blog - I'm so insightful!"</comment>


Selling Something Other than Ads - <AUTHOR> http://www.noahbrier.com/quickies/2011/04/selling_something_other_than_ads.php <comment><USER3> There are a lot of businesses that could very much benefit from this model. In fact, it's a bit surprising that more don't.

However, a few off the top of my head are Video Game Magazines - <USER2> Power, Official Xbox Magazine, and Playstation Official Magazine seem to all be in part or in whole sponsored or run by the console companies themselves and it makes total sense - you get your users to love the product all the more and promote your product along the way.

Most successful online businesses tend to have a fairly strong content component to them somehow either via user generated content or professionally generated content.

The real kicker is that most people don't want to pay for most content because most content is now a commodity - it is available everywhere for basically free. Worse, paying for content wrapped in ads seems extra pointless.

People WILL pay for content if it has real value in terms of scarcity or convenience or useful knowledge or a high level of entertainment.

Most interestingly is people don't seem to mind content generated around a brand or product if it makes sense to do so.</comment>