Challenges you're going to face when building a chatbot - <AUTHOR> https://blog.infermedica.com/three-challenges-youre-going-to-face-when-building-a-chatbot/ <comment><USER3> The 3 problems listed are (in my experience) not the most important ones you need to know about when you're making a bot. I'm not sure how this got to +100 points here on HN so quickly, since there are plenty of more informative bot articles that would better serve the HN audience.

The article describes:

1 (scalable architecture) : but the common solutions to this problem are not unique to chatbots

2 (a conversational agent must converse) : actually, that's a design decision for each individual bot, there are alternative ways of thinking about it.

3 (users will get frustrated) : this is actually a not a tech/AI problem, but a UI (user expectation) problem, see below.

The actual top 3 problems chatbot makers face are (in order):

#1 Discovery (!!!) : people don't know where/how to find bots and Facebook does not have their shit together in this regard (almost a year after launching their bot platform, there are still crucial errors. Result: most bots that could make a difference in the real world never get any traction, or enough users to train or iterate.

#2 Onboarding / setting expectations : the majority of (non-test or -product hunt) users of your bot are having their first chatbot experience with yours. Guiding them in the correct way is your #1 design priority. Result: a dissapointed general public.

#3 Inflated expectations : Mainly a problem for those who try to sell chatbots in B2B. Its' almost the opposite problem to #2. Most people and media conflate AI with chatbots. But the recent advances in machine learning (which are the reason for the current attention the term "AI" has been getting) are not (yet) applicable to chatbots in general. Add to this expectations of a Jarvis, Siri, etc. but then "for x". Result: dissapointed clients and an even quicker deflation of the hype.

And this is not even going into monetization!

All in all, I'm just frustrated that everyone involved in bots seem to assume that we already know how bots should work. I work in bots and I have yet to see one really impact user's lives. I wish for more humility and experimentation. At least we're all sharing what we're learning, so there's that.

<comment><USER4> PM on Messenger Platform here. Great feedback!

For discovery, FB Messenger actually has more channels for bot discovery than any other platform, including:

\- m.me links with referral tracking

\- Messenger Codes

\- Several plugins that allow easy opt-in via developer's website, including the ability to by default opt-in users on any form/flow on your website into your bot experience on Messenger.

\- Customer matching (use phone numbers to send updates to customers and acquire them as a bot user)

\- Messenger destination ads

\- Sharing features that many have used to achieve incredible viral reach.

The power that developers have to promote their own bots using these existing channels is largely undertapped. I would encourage developers to see what they're building as a business first, and a bot second. The bot is just a facet/channel into what you offer (even if it is a primary one). If you don't have a reason to offer a product or service or publish content, you probably don't have a reason to have a bot.

Admittedly, we could do better at setting user expectations for bots and in distinguishing them in search results and in the FB main app, and maybe pushing them in more places.

Re: inflated expectations. Totally right. The "AI Agent"/NLP use case is just one possibility for a bot, yet it's the sexiest one that the media seems to like. It's the tip of the iceberg -- there are a ton of more mundane but incredibly useful bots that are succeeding on the platform.

If any bot developer has questions about this, or wants to brainstorm ways to get users, I am happy to help or bounce ideas!

<comment><USER5> Note that none of what you mentioned is about _discovery_ , but pushing the other way around.

<comment><USER4> These are all ways to reach users in places they already are so that they can discover your bot. People who already have a reason to encounter you are much more likely to use your bot once they discover you have one.

Here's what I mean:

\- Processing orders through your site? Add the checkbox plugin. Users discover the bot when they go about their business on your site.

\- Got a retail store, print ad, or want to post fliers around town? Messenger Codes. Users can discover your bot by seeing it in real life in those places.

\- Reach a targeted audience on FB? Destination ads. Users discover via news feed.

\- Got tons of users signing up for your app or site with SMS and want to expose a bot version to them, to take advantage of a better notification channel and social features? Customer matching.

\- Publishing content? Put the "Send to messenger" plugin on your site. And use the share CTAs to let people spread the bot to their friends. The users discover your bot because their friend thinks what you're doing is awesome.

At this stage, "How do I get my bot discovered?" is akin to "How do I get my website discovered?".

The answer, as it is for every startup, is "Make something people want" (and put it in places people in that audience are likely to be!) If users have zero reason to come into contact with what you're doing otherwise, why would it being in the form of a bot make any difference?

That being said, we definitely want to familiarize more users with the concept and get them to try more bots! It's clear even those who are doing their darnedest to get their bot out there are running into this as an obstacle.

Yet still, the sum impact developers could have by solving a real problem in users' lives (i.e. not "I wish I had more bots to try out!"), and wielding these tools to make people with that problem come across your bot is going to be way more substantial than anything we can do on the platform level.

There plenty of real world problems whose solutions may be best expressed as bots rather than yet another app to download or website login to remember. And they come with awesome discovery opportunities built-in:

\- Bot for dentists that sends appointment reminders and makes it a few taps for patients to book appointments (instead of calling and having to deal with the receptionist). Discovered via phone number matching. (Paging kalzumeus!)

\- Bot for restaurants that makes it easy to order take-out and has special offers and loyalty points. Discovered via codes or me.me URLs printed on the receipt, and/or website.

\- Bot for schools that make it easy for teachers to communicate with students/parents at scale, as well as collect money for field trips/supplies. Discovered via phone matching or URL sent out to students/parents, or by searching for the name of the school.

\- Bot for night clubs that lets them send out their performance schedule and sell tickets all in the same place. Discovered via the nightclub's website + QR codes physically placed in the club. Or by searching for that nightclub. Or by your friends forwarding the fliers from the bot and asking "What are you doing Friday?". (Stuff forwarded from bots in Messenger automatically have a huge button linking the recipient to the bot to check it out!)

\- Bot for newspapers to send out content to subscribers in a high engagement way. Discovered via website and via printed codes/URLs on the newspaper itself.

\- Bot for public transit agencies to let riders look up schedule/fare info and get notifications for their routes and notification of anything that might affect their trip. Discovered via poster by the bus stop, on the bus, and on the agency's website.

\- Bot for landlords to collect rent, sent invoices, and recieve maintenance requests without the user having to download some dumb app. (After moving back to SF, saw that mine has something called "Rent Cafe" I'm supposed to download. Puh-leese.). Discovered via the move-in packet and/or link in emails. I'd probably pay my rent on time if I had this.

I think you're getting the point. The total number of people who go to nightclubs, dentists, read newspapers, ride busses, and live in apartments, is many many times the number who go "Oh, I wonder what bots are out this week!"

These examples are not to say that "bots for bots sake" won't succeed and that you should only be solving boring small business problems. But these sort of problems felt by the long tail are things bots are particularly great at! They're real problems worth money, have natural built-in discovery opportunities that wouldn't work for apps/sites.

I hope this makes sense and gets people thinking!

<comment><USER6> Hi Dan, great list of things that should be bots here. (also, I'm a fan of your post about your experience in wechat while in guangzhou)

Funny that you made the comparison of bots to websites, I wrote a post making the same comparison (in other aspects). Won't link here (don't want to self- promo), you can check my post history on HN if interested.

Anyway, I wanted to point out that while you're absolutely correct that there are tons of channels of Discovery outside of Messenger, I've found that by far the most effective method for accelerated growth of a bot was being featured on the "Bots" section on the Messenger app. In my experience launching several side projects bots, the only scenario where I've gained any meaningful amount of users at all is when I was listed there for a short time in a region.

This leads me to think that a lot of users browse around the Messenger app itself, looking for things to do, or bots to message.

Yes, in most of your use cases on this list, the bots tie to some outside service (physical or digital), and it wouldn't make sense to feature those bots on Messenger itself. But there are also bots that are primarily useful as a bot only, not tied to other services. (Icon8 is a great example, it's a very cool filter app that works by itself as a bot. Which is why it seems to be featured forever :) But that's exactly what I mean.)

In one of my previous write-ups I pointed out that, while unlikely for FB to implement, if there is some sort of newsfeed-like page on the Messenger mobile app where users can explore what other bots that their friends are using, it could expose bots to users a lot more quickly. Not saying exactly that would be a good design (it probably is a poorly designed feature if done that way), but something along those lines is what we would think is something that the platform itself could do to help.

<comment><USER4> I would be curious to see the bots you've made.

Lots of side-projects don't get traction -- whether they're apps, sites, or bots.

Would love to see what you've tried and learned along the way.

<comment><USER6> Sure, here's a list of bots that I've either made solely or with some friends, chronologically from newest to oldest:

[https://m.me/memechicken](https://m.me/memechicken) (dev myself with design help)

[https://m.me/mobmessenger](https://m.me/mobmessenger) (with friends)

[https://m.me/playcoffeebreakgames](https://m.me/playcoffeebreakgames) (myself)

[https://m.me/localcatchclub](https://m.me/localcatchclub) (with friends)

As far as learnings go, by far the most significant thing was on the UX side -- to not leave a user hanging. At the end of almost every response, include a quick reply button or a button (in a template) -- even if it just says "back to main menu" or something. As soon as the conversation hits a "dead end", the likelihood of a user dropping off skyrockets.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Slightly off-topic, but do you people also feel an enormous increase in chat boxes at the bottom right of the screen, in particular at SAAS companies?

For me this is really off-putting, in particular as they suggest that you are talking with a human (photo and pseudo-friendly greetings), although they just want to catch your e-mail address, and the first interaction is clearly with a bot.

I am not sure where this is going, maybe I am a minority, but for me this "interactions" are really off-putting.

<comment><USER8> Those are powered by about 5 main startups - a lot of them are actually people on the other end too, or they are during work hours.

<comment><USER9> Can you talk more to humans being behind the boxes? How do they have the human-power to do such a thing?

<comment><USER10> Similarly to how they staff support phone numbers, with teams of people trained in domain-specific knowledge (of the product, account management, etc.). Sometimes these teams are in-house, sometimes they are contracted to a third-party (i.e. how most call centers are).

If you don't think they could handle the volume, that's not really an issue in practice. Chat scales better than phone calls (agents can handle multiple chats concurrently), and just as with phone systems, the chat systems support wait queues. If the queue is long, then you will usually be presented with a contact form or the chat button will just be hidden from view in the first place.

Some of these systems do use bots for initial triage, and the "pro-active" ones that look like an agent is asking if they can help are almost always fake (you only get connected to a real agent if you actually reply).

</comment></comment></comment></comment><comment><USER11> The new wave of chatbots gives me a fuzzy feeling, because I began programming ~2000 by writing chat-bots for IRC in mIRC script.

They didn't have NLP, but some easy commands and they didn't need to scale much, because I always had below 1000 users at the same time. News bots, filesharing bots, social network/user stat bots, game bots, etc.

Funny that I accomplished to write a news bot that got its data from some news site via sockets by copy-paste and edit some code I found online. I didn't even know what arrays were, let alone half ot the code I copied. But somehow I got the target host changed and the needed data parsed out of the HTML.

<comment><USER12> Ditto, that was my entry to 'programming' \- to begin with it consisted of copying a bunch Runescape stats scripts from Hawkee and running on my desktop. As it progressed I included some persistence for some feature, implemented by creating a bunch of global variables with the user's nick as the first part of it. I think I felt that storing to file was overcomplicating things, bearing in mind that I was pretty young at the time.

I do recall coming across some scaling issues, which I resolved by spinning up another instance of mIRC and running it with the name <botname>2\. That seemed to work pretty well. 'v2' came next, wholly consisting of changing all of the scripts' colours to be homogeneous.

</comment></comment><comment><USER13> While spell-checking is slow, it is not necessarily as slow as 200ms per word. But it is necessary to have one or else people will struggle with your chatbot.

We have created a chatbot that handles mispellings and dialects just fine for the banking and insurance industry in scandinavia. You can try him here: [https://james-demo-test.boost.ai](https://james-demo-test.boost.ai) (You need google translate as it only understands norwegian, with some support for danish and swedish synonyms. Support for english and other languages are under development)

For fast spell checking, I recommend reading this [http://theyougen.blogspot.no/2010/02/faster-spelling- correct...](http://theyougen.blogspot.no/2010/02/faster-spelling- corrector.html) which uses a bloom filter. We use [https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_di...](https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance) and we use a slightly modified slow python implementation [https://www.guyrutenberg.com/2008/12/15/damerau- levenshtein-...](https://www.guyrutenberg.com/2008/12/15/damerau-levenshtein- distance-in-python/)

Performance is not a high priority for us, we can easily scale by adding cpu cores. A good precise answer is a lot more important and its where we spend most of our time improving our chatbot.

<comment> semi-extrinsic Native Norwegian speaker here. I've tried about ten different questions off the top of my head, and it's very much "God dag mann - økseskaft."

E.g. I asked "What is the interest rate on mortgages?" and it gave me basically what I asked for, with an example of total cost over 25 years. Then I asked "How much would that be every month?" and it gave me a link to applying for "avdragsfrihet", but with a text recommending against doing so. Apparently dividing by 300 is beyond its faculties.

Or I asked "How do I invest in index funds?" and it replied "I don't understand, try calling us".

Basically, I couldn't get an answer to any of my questions that I hadn't gotten if I'd just googled the exact same phrase. And it doesn't appear to understand follow-up questions at all.

I'm curious, do you have a question I can try that will give me something google won't answer given the same query?

<comment><USER13> Thank you for feedbank.

1\. We are currently working on supporting queries with amounts, the first kind will be a "loan-calculator" that tell you how much you can loan for a new house or a new car. We did try syntaxnet for this earlier, but it failed big time with dialects, so we are creating our own variant.

2\. We have nothing on index funds yet, our customers so far does neither have that kind of a thing, though it should at least have been a synonym for funds. This will be corrected.

This bot is a customer service kind of chat bot. It's not something to have a conversation with, but more like a bot that can understand questions and help you. The business value here is not to be better than human, but be as close as possible for the most common support queries. Trying to pass the Turing test is unrealistic... We are trying to automate support issues for the most common questions like, I have lost my credit card, I need a new card and I cannot login.

Compared to a regular search engine, ours will have a much better understanding of what your intention is. Google also tries to predict your intention when you search. However Google is not a replacement for customer support for most banks, telecoms, logistics, energy and insurance companies.

<comment> semi-extrinsic > Trying to pass the Turing test is unrealistic

I agree.

But beating an equivalent Google query should be the goal IMO. Otherwise what's the point? Unfortunately, I don't think business specific chatbots are able to; Google just gets many orders of magnitude more users (even when narrowed down to Norwegian Bank X), so their "dumber" algorithms work just as well.

So I reiterate my question: can you give me one example query where this chatbot outperforms Google search?

The same goes for site-specific search engines, especially MSFTs Bing (neé Fast) that universities etc. seem to love spending money on; I've always found it to be worse than plain Google search with a "site:univ.edu" suffix. So you can definitely sell this tech to non-tech-savvy companies/institutions and make money, but users won't like it.

</comment></comment></comment></comment><comment><USER14> The biggest challenge you're going to face is that the state of the art in NLP is not sufficient for chatbots to conduct a prolonged conversation that is either useful or interesting. This will lead to disappointment on the part of your users, who have probably been exposed to the hype or expected a human. The more modest approach of mapping a Web UX to a sequential chat leaves users at best indifferent, and at worst annoyed.

</comment><comment><USER15> A literal challenge (i.e. competition) you may choose to face, is of course the Loebner prize. Held in Bletchley Park due to its history with Alan Turing.

If your chatbot can be more convincing than three other finalist chatbots over four half hour dual-conversations (a human judge conversing simultaneously with one chatbot and one confederate human, but is not told which is which) then you stand to win a solid bronze medal and $4000 ($1500, $1000 and $500 to the runners-up).

A silver medal and $25,000 goes to any chatbot which fools half the judges.

To get $100,000 and a solid gold silver medal, you'll need to make a chatbot that is indistinguisable from a human over video chat, now that's a proper challenge!

<comment><USER16> > you'll need to make a chatbot that is indistinguisable from a human over > video chat

This may sound cynical, but if you could arrange a tableau, looking like someone is paralyzed in a hospital environment, speaking like Stephen Hawking, then you don't need any serious advances in robotics (IIRC uncanny valley still hasn't been crossed) to fool humans. But I imagine the rules won't allow that.

<comment><USER15> This is a good point, and arguably a weakness in the Turing test, the headline grabbing Eugene Goostman chatbot's limited success was from a similar "social engineering" style technique, of tying slowly, changing the subject, telling its own stories and claiming to be a distracted teenager with poor English.

In response to the comment by Coincoin, each judge gets to pick "Human, Computer, Not Sure" for both participants, so they're at liberty to respond "Human, Human". It's true that the "real" human might make someone more likely to declare the "fake tableau" a chatbot, but the perceived disability might also make them less likely to risk declaring them a computer.

</comment></comment></comment><comment><USER17> This is an excellent article, including a section where they compare ordering a pizza via a chatbot and a simple wizard based interface: [http://dangrover.com/blog/2016/04/20/bots-wont-replace- apps....](http://dangrover.com/blog/2016/04/20/bots-wont-replace-apps.html)

The wizard was by far the better experience.

</comment><comment><USER18> Off topic but ...

Any time I hear about a health related app, I have to reread "The Anorexic Startup" [0]. It's cautionary and it pokes (gentle) fun at our industry. If you're in the mood for a bit of humor today, it's a fun read.

[0] [http://theanorexicstartup.com/](http://theanorexicstartup.com/)

<comment><USER19> The first paragraph reminded me so much of jwz's diary from his Netscape days, which is one of the most important documents I've read on startups (and it taight me the brilliant term "impedance mismatch" for how it feels to hang out with drunk people when you aren't, which I last used in casual conversation yesterday)

[https://www.jwz.org/gruntle/nscpdorm.html](https://www.jwz.org/gruntle/nscpdorm.html)

<comment><USER20> The immediate redirection as a result of the HN referral on this page is frustratingly childish

<comment><USER21> Makes you wonder if his advice is really worth reading. :/

<comment><USER22> "you have to live in a tall building to see which are the other tall buildings" \-- a wise man once said

this is one of those "if you have to ask, you won't understand" situations. jwz is a genius, as insightful as you find him unciteful, and with a lot of relevant experience to support his worldviews. He's not for everybody, but true genius frequently goes unrecognized.

</comment></comment></comment></comment></comment><comment><USER23> I'm surprised that they didn't mention monetization / profitability. Even basic Google / Bing API usage will start to add up on any moderately popular chatbot with some kind of search functionality. Without the ability to serve ads, it's pretty difficult to even break even.

<comment><USER24> That's a very good point indeed. In that particular case the diagnostic chatbot is a proof-of-concept to grab attention to the diagnosis+NLP API offered by Infermedica, and also serve as an example app.

<comment><USER25> This is 100% correct. The chatbot is currently a proof-of-concept and our first take on a conversational symptom checker. Our core business is the Infermedica API and patient prescreening tools based on the diagnostic engine.

<comment><USER17> Wouldn't a more graphical implementation of the symptom checker, possibly with a tree the user can follow in a wizard style be more effective than a simple texted based chat?

<comment><USER25> Could be. But you need a chatbot to compare the performance. :)

</comment></comment></comment></comment></comment><comment><USER26> _" Our first finding was that requirements 2 and 3 are satisfied by a feature called Message Groups. What came as a surprise...ActiveMQ and RabbitMQ, do not support this feature"_

A quick search seems to indicate that ActiveMQ does support message groups: [http://activemq.apache.org/message- groups.html](http://activemq.apache.org/message-groups.html)

<comment><USER24> Actually this is right, so the information in the article is somewhat incorrect. Thanks for spotting this! There is however an issue with the ActiveMQ implementation: once a user is assigned to a consumer, it is hard to make ActiveMQ rebalance it. At least by default the load-balancing does not take place until a consumer is dead. In case of a chat bot, some users may be returning, while others may quickly go away, leading to drastic imbalances. Apollo does the balancing perfectly out-of-the-box.

</comment></comment><comment><USER27> > To put it bluntly, a huge proportion of messages will not be understood at > all and there is little we can do about it. What we can do is anticipate > user frustration and alleviate the situation by offering a little help and > managing expectations.

I get the impression that a lot of people have found this to be the case with chatbots these days.

Chatbots can be great for certain situations - when an app needs to initiate the interaction, for example. However, any UI that routinely causes users significant frustration seems pretty problematic. It has to let you do something so awesome and special that you're willing to put up with all that frustration - e.g. a buggy screen sharing app is often still better than no screen sharing app. Is there a compelling enough benefit for chat UIs? Maybe if all you have is text messaging and can't install apps or browse the web?

I'm inclined to think that not trying to be too smart and instead just going with more of a command line interface rather than an "intelligent" agent might be better for users. Have people developing chatbots found that to be the case?

<comment><USER28> I don't really understand the motivation behind chat UIs. Dan Grover says it better than I could here: [http://dangrover.com/blog/2016/04/20/bots-wont- replace-apps....](http://dangrover.com/blog/2016/04/20/bots-wont-replace- apps.html)

</comment></comment><comment><USER29> I suffer from general anxiety. I listed some of the common symptoms of such (chest pain, feeling anxious). I was given a "weak evidence" report of myocardial infarction, and there was no mention of anxiety.

I assume most people new to the symptoms do not know what myocardial infarction is (heart attack). And that if you are experiencing one or new symptoms you should consult with a doctor (call family doctor or visit ER, etc.)

I had no trouble communicating my symptoms and the questions made sense, but despite this the information shown in the end was not helpful in some obvious ways. This seems like a substantial usability problem that is not addressed in your article.

</comment><comment><USER30> Since everyone is talking about chatbots, I thought this might be a good thread to ask for some feedback:

I am considering creating a chatbot platform for developers to create, host and sell bots (as a side project which may turn into a main project if it goes well),

I was wondering if it's something devs/people are interested in? (to those who don't code, there'd obviously be an easy GUI way to build basic bots - <USER2> wit.ai)

<comment><USER31> It depends on what you mean by a "chatbot platform".

If it's a way of developing a single "chatbot" and having it work across multiple "platforms" (think slack, hipchat, irc, facebook, standalone, etc... maybe even including voice-specific platforms like Amazon echo and Google Home). I would LOVE that. However it's going to most likely suffer from the same issues as other "platform-independent systems" which is that you'll be developing to the lowest common denominator.

If it's just a way to make a chatbot via a GUI, I'm personally not interested at all.

<comment><USER30> The idea is just as you mentioned - a platform where you'd basically create a bot (by that i mean, your code will be given a context, and your response would be forwarded to the chatting service - be it slack, irc, etc.)

Furthermore, with an base SDK, you'd not build for a specific service, you'd build it for MY service and it'd handle every other service out there (insert XKCD joke about different platforms here)

Also as for GUI, it's not a requirement - it's for those who are not programmers but want to a chatbot for their Echo or Home etc. (an IFTTT of sorts if you will).

Also it'd have extra stuff that devs won't have to worry about (like hosting or charging users, promoting etc.) - all of which would be handled by my platform).

<comment><USER32> Checkout AI .API. This sounds like!E what you might be looking for.

</comment></comment></comment></comment><comment><USER33> Overview of chatbots in 2016: \- Almost every messaging platform announced support for bots. \- Almost every major tech company announced their own machine learning and NLP products. \- 30,000+ people starting building bots. \- 100,000+ bots built across different platforms. \- Lots of hype, not a lot of useful bots.

<comment><USER34> Good overview, similar to the year in review conclusions here: [https://www.oreilly.com/ideas/2016-bots-year-in- review](https://www.oreilly.com/ideas/2016-bots-year-in-review)

</comment></comment><comment><USER35> Chatbots are a great place to experiment. I made one for a hosted web chatroom that essentially ran on markov chains of varying accuracy to the source (choose something that had the same previous one/two/three words, etc).

It would listen to the chats in the room for training data, and optionally could parse and ingest a webpage (blog, wikipedia entry, email, etc). You could then ask it a question, which would make it generate a sentence based on a random word it picked out of the question. The goal was to make something entertaining for the chatroom, and it mostly succeeded with often hilarious results :)

Something fun was giving it "personalities" based on input data, for example giving it the timecube website, or read in a person's emails to copy their style.

</comment><comment><USER36> I must mention ChatScript ([https://github.com/bwilcox-1234/ChatScript](https://github.com/bwilcox-1234/ChatScript)). ChatScript is a programming language that allows you to create bot conversations in text files. You divide your conversations into topics and typically have one file per topic. The system makes good use of Wordnet, and allows rules based on POS tags and Wordnet concepts. Checkout [https://github.com/bwilcox-1234/ChatScript/blob/master/WIKI/...](https://github.com/bwilcox-1234/ChatScript/blob/master/WIKI/OVERVIEWS- AND-TUTORIALS/What-is-ChatScript.md).

</comment><comment><USER37> One of the bigger challenges I've seen is driving usage. We've got the MVP up and running, and it's possible to improve the experience, but getting more people to message in (FB Messenger) has been a hurdle.

Anyone have tips or experience with that?

<comment><USER38> Have you tried the recently announced Newsfeed Ads for Messenger to drive traffic to your bot?

[https://developers.facebook.com/blog/post/2016/09/12/new- mes...](https://developers.facebook.com/blog/post/2016/09/12/new-messenger- features-payments-ads-enhanced-mobile-websites/)

<comment><USER37> Yes, I actually wrote this post on that subject. [http://bit.ly/2hngmmr](http://bit.ly/2hngmmr) I've seen so so results so far. It's clear that Facebook is working on finding ways to increase people messaging in. 1\. I think there will be new best practices on top of new targeting for this destination.

2\. I'm genuinely interested to hear other success stories and learnings. Are people finding that Messaging apps are 'build it and they will come' or are there new techniques for driving usage?

<comment><USER38> Great post, I bookmarked it (and your website as well). I'm also looking for more success stories / use cases.

I'm personally not very convinced about automated conversational interfaces, but Messenger does provide a great opportunity (1bn users) and platform (ios/android/web) to create and grow new kinds of applications with very little effort, if only we can figure out how to get people using it :)

<comment><USER37> Be convince about automated conversational interfaces! They are not the miracle that AI would be, but they exist and 3-4x the results of webforms.... Once the conversation starts. Here is another case study I wrote about from the election. [http://bit.ly/2fPwwSz](http://bit.ly/2fPwwSz)

The top comment on this post is the same topic, worth checking out. Thanks for the bookmark.

</comment></comment></comment></comment></comment><comment><USER39> Or you could just use

> Claudia Bot Builder helps developers create and deploy chat-bots for various > platforms in minutes to AWS Lambda. It simplifies the messaging workflows, > automatically sets up the correct web hooks, and guides you through > configuration steps, so that you can focus on important business problems > and not have to worry about infrastructure code.

[https://github.com/claudiajs/claudia-bot- builder](https://github.com/claudiajs/claudia-bot-builder)

</comment><comment><USER40> > If users just wanted to tap and swipe, they wouldn't be using a messenger; > they'd go to your fancy responsive website

The point of a chat bot is to perform things without leaving a chat. I'm not going to _go to_ chat bot to do something I could do with a better UI than a NLP bot.

If a chatbot would ever say "would you like to chat to me or go to a nice website where you can tap and swipe to describe what you mean" \- then that's all that chatbot would ever have to say.

</comment><comment><USER41> Is there actually a case where a chatbot is an appropriate solution for commercial or government enterprise at all?

3) users hate them

Maybe that should be (1) and no need to proceed further.

</comment><comment><USER42> I sometimes wonder if Infocom had held it together what they would be doing in the chatbot era. Seems like they had some ideas that might have helped.

</comment><comment><USER43> I think a symptom checker bot has much to offer (though the devil is in the details). How is information extracted from a curated knowledgebase? In any case, a system with such probabilistic machinery could add a lot to our healthcare system since it would not make human errors such as base rate neglect. Furthermore, would existing doctors approve of machine responses?

<comment><USER24> I am the author of the article and also the designer of the NLP system. If you're asking about how the mentions of the medical concepts (as defined in the curated knowledge base) are extracted from user messages then here is a short explanation.

The bot uses an entity recognition engine for this. The engine is available via API [1]. The engine itself uses dictionary phrases from the knowledge base and a custom matching strategy that operates on dependency graphs, which allows to abstract from some surface details (e.g., understand that "pain in my left leg" is "pain in leg"). It also contains a modified version of the DepNeg algorithm [2] to detect negated mentions ("I don't have headache", "no history of chest pain").

[1] [https://developer.infermedica.com/docs/nlp](https://developer.infermedica.com/docs/nlp) [2] [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3392064/](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3392064/)

</comment></comment><comment><USER44> You can also give yourself a nice head start by remixing one of GoMix's bots: [https://gomix.com/community/handy-bots](https://gomix.com/community/handy- bots)

(I have no affiliation, but I'm a fan of Fog Creek and super excited by this product.)

</comment><comment><USER45> I went through the Alexa Skills tutorial and I'm looking into making another bot. I agree with the article that designing the natural language interface is the hardest part and they touch thisbut from a messaging viewpoint. It looks like most APIs attack this using some event driven system.

<comment><USER32> Try AI.API. It is a chat bot framework

</comment></comment><comment><USER46> Has anyone used IBM Watson Converstations? I would be interested in understanding how it compares with the others on market and whether I should invest in learning it versus the other options?

</comment><comment><USER47> Speaking about chat bots. There are the usual simple bots based on keywords and simple fixed coded branches.

But for more advanced bots, that uses NLP (eg Stanford's CoreNLP). What's the next step? What do you do with input sentence, each word labeled as noun, adverb, person, company, etc ? I imagine a list of sentence structure templates and calc the probability. This step is only very briefly and vaguely mentioned in literature (books, papers).

Can you recommend some blogs, sample code, tutorials that explain that step, how resonate based on NLP lib? And where machine learning comes in, to improve the trained data?

<comment><USER48> Check out [https://github.com/rabidgremlin/Mutters](https://github.com/rabidgremlin/Mutters)

It uses ML to figure out the "intent" of what the user has said (using a document classifier) and named entity recognition (NER) to extract data from the text (date, location etc).

That is actually the easy part. The harder part is the conversation scripting and state handling. Mutters uses the Ink narration engine (originally designed for dialogue heavy games) for this.

It works pretty well. IMHO :)

<comment><USER49> Other services and projects:

There are hosted services like API.ai, wit.ai and Microsoft LUIS. Init.ai has NLP built into their bot building platform. Rasa NLU is an open source NLP project that is very interesting.

<comment><USER24> I'm curious if some of those platforms allow to write custom code for processing of the raw message. Either to embed the code directly on their server or to expose a custom webhook. For instance, if I were to write such a diagnostic chatbot as described in the article but would prefer to use a service such as those to take care of the integrations with various platforms, message queueing, tracking basic stats etc.

</comment></comment></comment></comment><comment><USER50> What chat platforms other than Microsoft's Bot Framework is there? I built a chatbot with C# on BF and frankly it hasn't been a smooth experience, but to be fair, they were changing things so fast.

I almost expect AWS to release their own "Bot Framework" soon.

<comment><USER51> Quite a few depending on what level of control/functionality you are looking for.

Some are more developer/write your own code focussed, other more graphically focused.

In alphabetical order and not exhaustive.

API.AI (now Google) Chatfuel (YC) Converse.AI (disclaimer, $currentstartup) Flowxo Gupshup.io IBM Watson Engagement Advisor/Watson Meya.ai Microsoft Bot builder Motion.ai Wit.ai (Facebook)

AWS also has a suite of tools that between them you could use, check out Lex, Polly & Steps

All of these do one or more of the following:

NLP User management Messaging Platform Integrations Conversation State & Context Management Workflow Human Escalation Backend integrations (Helpdesk, CRM etc) Analytics

Pick your poison based on what you need :)

<comment><USER52> Don't forget init.ai, Botkit, Chatfuel, Chatflow, Last Mile...

</comment></comment></comment><comment><USER53> Ive tryied to train a chat-support bot with data- the biggest challenge was ironically - the read the documentation, one answer- one link answers. You can expand all the answers , but the web is incomplete, readable text and direct pointers are rare- so you end up with whole wikkipages in your answers.

Using NN, you migrate your problems into filter tooling and data refining.

</comment><comment><USER32> Spent some time reading the AI.API documentation and looked pretty interesting as a chat bot framework. Anyone else tried it?</comment>


The Comprehensive Guide to Getting Started in VR - <AUTHOR> https://medium.com/@KristianBouw/the-comprehensive-guide-to-getting-started-in-virtual-reality-c6a6419cf8cf <comment><AUTHOR> OP here - this was a personal collection I had been keeping up to date and decided to make it public given the number of people that have asked me how to get started with VR.

There's a lot going on in the space so if I missed an important resource, would be happy to know.</comment>


Enchance your vlc player with new skins - <AUTHOR> http://www.unixmen.com/linux-tutorials/341-enchance-your-vlc-player-with-new-skins

<comment><USER2> I had VLC player on my iPhone, lost it upgrading to OS3. Put it back on yesterday and it no longer does shoutcast radio.

Themes have nothing to do with that, but on the subject of themes they are no more an enhancement than wax crayon is on a fridge door.</comment>


An Introduction to Static Site Generators - <AUTHOR> http://www.mickgardner.com/2012/12/an-introduction-to-static-site.html

<comment><USER2> Previous discussion: <https://news.ycombinator.com/item?id=2489040>

The posting date says December 2012, but as you can see there, this article is over a year old. It looks like the author has migrated to Blogger and somehow ended up giving all the articles a December 13, 2012 timestamp.

<comment><USER3> ya agree on that, remember reading the same article, probably not on blogger though

</comment></comment><comment><USER4> The bizarre thing about static site generators is they are nothing new. Online API docs have done this for years (Java, Python, etc.)</comment>


Ask HN: is there any way to switch off the iOS "slowdown when old" code? - <AUTHOR> Recent news says iOS slows down devices with old batteries - clearly to force hardware upgrades.<p>Is there any way a user can turn this off? <comment><USER2> I think part of it is software upgrades, many of which are optimized for newer hardware, or not optimized for out of production hardware. So when new features are added/enhanced older systems may see a slowdown, another factor is newer hardware runs faster so some new updates may not care about optimizing as it runs fine on the newer system anyways.

Have used Apple products for a while, they don't really like spending a lot of undue effort on stuff they don't sell anymore.

Still running iOS 8 on an iPhone 5s, works great, I hear newer iOSs are not as efficient on this phone, so will stick with 8 on it.

</comment><comment><USER3> [citation needed] Can you point to an analysis or news article that shows it's to force customers to upgrade?

<comment><AUTHOR> No it is my opinion but a reasonable conclusion to come to.

\--> Battery wear is a measure of device age, or a good proxy for that in most cases. --> Apple wants people to keep upgrading their hardware --> primary reason to upgrade is old, slow device --> Apple ensures devices get slow as they get older.

If it was really Apple acting in the users interests, then it would be a user option, not a secret setting in the code.

<comment><USER3> "Apple ensures devices get slow as they get older" Do you have a statistic for that or is that anecdotal?

I'm perfectly happy with my 5 year old iphone. I notice the Facebook/Skype/Slack app get larger and larger over time. [https://sensortower.com/blog/ios-app-size- growth](https://sensortower.com/blog/ios-app-size-growth) Primary reason to upgrade for me is lack of security updates, Apple stopped supporting the iphone 5 (any 32bit CPU device) for example.</comment></comment></comment>


Can A Free Online Education Land You A Job? The Era Of Online Education Dawns - <AUTHOR> http://singularityhub.com/2012/02/13/can-a-free-online-education-land-you-a-job-the-era-of-online-education-dawns/

<comment><AUTHOR> This article touches on something that I believe the education system in America has lost sight on - "self learning." In most schools and universities, learning is now synonymous with memorizing, and students simply attempt to dish back selected information they were spoon-fed. School should be a resource, not THE source, for information.

Just my $0.02, but then again I'm 100% self-taught and never liked school ;)</comment>


Guardian story written by a bot - <AUTHOR> https://www.theguardian.com/australia-news/2019/feb/01/political-donations-plunge-to-167m-down-from-average-25m-a-year <comment><USER2> Background: [https://www.theguardian.com/commentisfree/2019/feb/01/why-i-...](https://www.theguardian.com/commentisfree/2019/feb/01/why- i-created-a-robot-to-write-news-stories)</comment>


Spiped + SSH = Secure Proxy - <AUTHOR> http://newlyancient.com/2014/04/09/spiped-ssh-secure-proxy <comment><USER2> I know Colin likes to keep commenting that the simplicity of spiped makes it inherently more secure than more complex alternatives. I haven't evaluated the code, nor done a study to see if the number of lines of code always correlates to number of security holes, or if the complexity of the operations compared to the number of lines is related to the number of security holes, and what the bounds of that are. But I just took a brief look at one file and saw this:

      /* Generate a 32-byte connection nonce. */
      if (crypto_entropy_read(H->nonce_local, 32))
               goto err1;

      /* Send our nonce. */
      if ((H->write_cookie = network_write(s, H->nonce_local, 32, 32,
           callback_nonce_write, H)) == NULL)
               goto err1;

      /* Read the other party's nonce. */
      if ((H->read_cookie = network_read(s, H->nonce_remote, 32, 32,
           callback_nonce_read, H)) == NULL)
               goto err2;

The gotos themselves aren't harmful (even though I don't get why people still use gotos). What strikes me as really funny about this code is its over- simplicity is what caused a huge crypto bug to be missed in Apple's iOS 7 recently. Take a look at the above code and then this security hole[1], and tell me if you can't spot a potential problem.

[1] [http://www.wired.com/2014/02/gotofail/](http://www.wired.com/2014/02/gotofail/)

</comment><comment><USER3> > As an American living in a Middle Eastern monarchy, multiple government > agencies are likely monitoring my internet traffic

Ironically, living in the democracy of the United States would have yielded a similar situation (except remove "likely").

</comment><comment><USER4> Are there any advantages over something like sshuttle? [0]

Doing sshuttle --dns 0/0 seems more convinient especially since a regular sshd on my box is all I need, no additional software. And it instantly tunnels _all_ my traffic, no need to configure socks proxies. It also avoids TCP-over- TCP which it seems like you're doing?

[0] [https://github.com/apenwarr/sshuttle](https://github.com/apenwarr/sshuttle)

<comment><USER5> Probably the most convenient tunnelling tool I've ever used.

When paranoia strikes me really hard I run Tails liveCD in VirtualBox, it automagically routes everything through TOR and virtually nothing goes to hdd, except probably swapping to disk.

</comment></comment><comment><USER6> > In System Preferences, configure your network to connect to a SOCKS proxy at > localhost:8089. Now all your internet activity is securely routed through > your server.

That's a big surprise. _all your internet activity_?!?! Even when I use curl/wget/IRC/netcat? Skype, xmpp, git, email client? As I understand SOCKS proxy will be used by web-browser only, am I wrong?

</comment><comment><USER7> Just a heads up: he seems to be running ssh as root [0]. My mom always told me not to run ssh as root, but maybe things change with Docker since it's running in a virtualized OS.

[0] [https://github.com/morgante/spiped- docker/blob/master/Docker...](https://github.com/morgante/spiped- docker/blob/master/Dockerfile)

</comment><comment><USER8> From the link to the OpenSSL vulnerability;

      Unfortunately, there's nothing users can do to protect themselves

Um, how about a VPN, or ssh with dynamic forwarding?

I would do something like;

ssh -C -D 8080 -fN firstname.lastname@example.com

Then it's as simple as setting your web connected applications to use the localhost proxy on port 8080.

<comment><USER9> > Um, how about a VPN, or ssh with dynamic forwarding?

That's exactly what the goal of this is. Except it avoids using SSH over the public network, since spiped is more reliable and also (I think) more trustworthy. One takeaway for me from the heartbleed bug is to place less trust in large, general-purpose C libraries. Compared to SSH, spiped is a comparatively much smaller codebase, maintained by the excellent cperciva.

</comment></comment><comment><USER9> Looks like my server is having some issues. The post is also on GitHub.

[https://github.com/morgante/spiped- docker/blob/master/readme...](https://github.com/morgante/spiped- docker/blob/master/readme.md)

</comment><comment><USER10> I don't understand what advantage this has over just doing: ssh -D8080 email@example.com

Also does spiped natively act as a socks proxy? I was under the impression all it did was handle an encrypted stream of data from one socket to another.

<comment><USER9> > I don't understand what advantage this has over just doing: ssh -D8080 > firstname.lastname@example.com

I used to do precisely that, but I think spiped has two major advantages:

1\. It is more resilient on a flaky connection.

2\. I trust the security of its codebase more than SSH, both due to its smaller footprint and cperciva's reputation.

</comment></comment><comment><USER11> Why use the -f switch:

      -f Use fast/weak handshaking: This reduces the CPU time spent in the
         initial connection setup, at the expense of losing perfect forward
         secrecy.

<comment><USER8> Maybe I'm missing something here...

On my FreeBSD and Linux systems, the ssh -f parameter sends the process to the background, and the -N prevents remote command execution.

<comment><USER12> He's talking about the -f option to spiped.</comment></comment></comment>


Show HN: New ux testing app that comes with a free plan - <AUTHOR> https://userstand.com/ <comment><AUTHOR> Hi HN!

As a long time lurker, I'm quite happy to have something valuable to post today.

I'm reaching out to you to share an imperfect UX research app that I've built :)

It doesn't have all the bells and whistles the existing solutions have. The video quality of the recordings is just okay at this stage. And being an mvp, it's still rough around the edges.

So what's the point you may be wondering?

Here is the kicker: it has most of the stuff that the other solutions offer but does 2 new things that could save you a big chunk of time.

1\. It allows you to recruit participants automatically and continuously among your users and your mailing list.

2\. It also allows you to synthesize your findings much faster with a Trello- style visual board for organizing your notes.

There is even a free plan so you don't have to pay anything to start saving time :)

It would be great to have your opinion on it.</comment>


New library to help building spam filters in haskell (parallel DNSRBL lookup) - <AUTHOR> http://blog.holdenkarau.com/2008/07/dnsrbl-module-for-haskell-released.html

<comment><AUTHOR> Its my first haskell module, so any comments on how to improve it would be greatly appreciated :)</comment>


Microsoft's Plan B for Search - <AUTHOR> http://www.businessweek.com/technology/content/jun2008/tc20080630_349921.htm <comment><USER2> >> Adopting semantic search technology would require the big guys, in essence, to start from the beginning—rescanning every Web page according to the technology's fundamentally different method of analyzing and classifying Web pages.

They make it sounds as if Google indexed the internet once and hasn't done anything since. Don't they "rescan" the interwebs every day?

<comment><AUTHOR> There was one post on HN that was testing the crawl time of the Google spider, it was 10 or 20 minutes, I believe?

<comment><USER3> [http://www.google.com/search?q=%22testing+the+crawl+time+of+...](http://www.google.com/search?q=%22testing+the+crawl+time+of+the+Google+spider%22)

19 minutes in.

<comment><USER2> Wow.

</comment></comment></comment></comment><comment><USER4> Chuckle… There Is No Plan B! :)

 _with apologies to Instiki_</comment>


YouTube's mobile app will soon better display all video formats, add messaging - <AUTHOR> https://techcrunch.com/2017/06/23/youtubes-mobile-app-will-soon-better-display-all-video-formats-add-messaging <comment><USER2> I want two features from the YouTube Android application: Firstly, the ability to increase the video playback speed, similar to one available on my desktop browser. Secondly, remove the annoying incidence of comment reply opening my soft keyboard every time I try to read a comment thread.

</comment><comment><USER3> OMFG, they are seriously launching yet another messaging service :/.</comment>


Object oriented programming with ANSI-C (1993) - <AUTHOR> https://ritdml.rit.edu/bitstream/handle/1850/8544/ASchreinerBook1993.pdf?sequence=1 <comment><USER2> When people tell me that they love C, I don't get it.

C is so tiny that if you're going to write anything non-trivial you either have to re-implement various common data-structures yourself, or find appropriate libraries. No built-in string type, no vectors, no nothing. Also, the lack of generics makes for really ugly code, filled with void pointers and casts whenever you attempt to write type agnostic data structures such as lists, queues, etc.

It also seems that whenever I have to write in C, I end up writing code that painfully wants to be object-oriented, or implementing features that are already part of C++.

So why would you willfully pick to use C when C++ is around? Heck, even if some sick reason you don't want to use explicitly use objects, at least you can enjoy some of the other benefits of C++ (e.g. its standard library).

<comment><USER3> And yet your operating system and over half of your userland is in C. Must be doing something right.

<comment><USER4> Only if you are speaking about UNIX distributions, excluding Mac OS X.

<comment><USER5> The Windows and OSX kernels are written in C. Not sure where you got your info.

<comment><USER4> Somehow the HN crash removed my comment.

The MacOS X drivers are written in C++.

Windows kernel code is being made C++ compliant given that C is a legacy language from Microsoft's point of view. Many new APIs since Windows XP are being made available only as COM objects.

As of Windows 8, the DDK officially supports C++ and many of the samples have been updated accordingly.

<comment><USER5> Yeah, the comments refuting what you said were as well.

OSX kernel is C. Drivers being written in C++ is irrelevant.

Windows kernel is C, the fact that they are making it compilable by a C++ compiler is irrelevant.

So what's your point exactly? Let us not forget you said that nothing outside *NIX was C, and you are wrong.

<comment><USER4> > OSX kernel is C. Drivers being written in C++ is irrelevant.

A kernel without drivers is useless.

> Windows kernel is C, the fact that they are making it compilable by a C++ > compiler is irrelevant.

It is not irrelevant. Code compiled by a C++ compiler is C++, regardless how C fans try to bend it. Having this discussion since 1993.

Besides many new APIs since Windows XP are COM only as well.

C is legacy according to Microsoft, unless they change their mind about it. Even the latest C99 additions to their compiler were done as a requirement for C++11/14 compliance, not because they changed their mind.

> So what's your point exactly? Let us not forget you said that nothing > outside *NIX was C, and you are wrong.

L4, Genode, OS/400, BeOS, Symbian are also done in C++.

What other OS, non UNIX based with the same maturity as the list above, can you point out being done in C?

UNIX based systems are the only ones that will be fully done in C due to their symbiotic relationship and the way their developers consider a sacrilege to use something else.

<comment><USER5> > A kernel without drivers is useless.

So... that means that the kernel is not written in C then? I'm confused.

> It is not irrelevant. Code compiled by a C++ compiler is C++, regardless how > C fans try to bend it. Having this discussion since 1993.

Except they don't compile it with a C++ compiler, it simply _can be_ compiled with one.

However, what would you call this, C or C++?

      #include <stdio.h>

      int main(int argc, char **argv)
      {
        char line[256];
        fgets(line, sizeof(line), stdin)
        puts(line);
        return 0;
      }

> What other OS, non UNIX based with the same maturity as the list above, can > you point out being done in C?

Windows. Already did that. This discussion is now feeling circular.

<comment><USER4> > So... that means that the kernel is not written in C then? I'm confused.

It depends how important you consider the kernel, written in C, requires the drivers, written in C++, to perform any useful task.

> Except they don't compile it with a C++ compiler, it simply can be compiled > with one.

Right now maybe not. Just wait when MSVC++ no longer does C.

> However, what would you call this, C or C++?

Actually,

It is C code according to ANSI C.

It is C++ code according to ANSI C++.

It is Objective-C code according to Objective-C language specification.

<comment><USER5> So... I guess I am confused. Here is how this has gone:

You: The only widely used, mature OS which is written in C is *NIX.

Me: No. The Windows and OSX kernels are written in C.

You: Yes, but OSX drivers are C++ and Windows is moving toward being able to be compiled by a C++ compiler.

Me: Right... but they are still written in C.

You: Yes, but that doesn't matter, you're wrong.

Me: ?

The discussion was centered around these kernels being written in C. They are, you have even conceded to that, yet you continue to argue (what point I don't even know) because OSX drivers are in C++ and Windows may some day in the theoretical future be compiled by a C++ compiler? I don't get it.

<comment><USER4> So you don't get that a kernel without drivers cannot even boot. Drivers that are an _integral_ part of the kernel, thus making an C/C++ hybrid, not pure C.

As for Windows, given the ongoing transition, and some of the chapters of Windows Internals book series, how can you prove that everything is still compiled with the C compiler and not C++ one?

You are right, it is silly to keep this discussion.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> Zed Shaw's Learn C The Hard way has an exercise that builds a simple prototype based OO system using C[1].

[1]: [http://c.learncodethehardway.org/book/ex19.html](http://c.learncodethehardway.org/book/ex19.html)

</comment><comment><USER7> Relative noob here, I'm learning programming in general and I picked C to start with. My university courses are pretty shitty so I have to do it by myself. OOP is pretty repulsive to me. I don't know why. Too many abstraction that I can't see clearly.

Would any of you recommend me to try and get the hang of OOP using C or should I just pick up Java or C++ ?

(sorry if this is a inappropriate comment on this post)

<comment><USER8> You could try Objective-C. It's proper OOP with messages, and you can write normal C style stuff. None of C++ stupidity (like cout<<"Hello World", yuck).

<comment><USER4> Except Objective-C is Apple's toy.

GNUStep does not count, as it is ages behind Cocoa.

</comment></comment></comment><comment><USER9> I had to make an application framework something like this with ANSI C in the 90s. Make a structure (or two) full of function pointers as an "interface", pass it (them) as the first parameter to all the relevant functions as "this"/"self". (wait, that kinda looks like what "Go" does - hmmmm)

Of course, some in the company tried to pad their resumes with actual (gahd- awwwful) C++. Lovely jewels like this:

        if ( output_format == A) {
            a.write_pg_header();
        } else {
            b.write_pg_header();
        }

Guess they never heard of a virtual method. Then there's the fun of all the memory leaks from copy constructors and other silly C++ pitfalls.

Simulated OOP in C is an interesting exercise. I suppose if I had not learned an OOP language other than C++ first, I would have thought C++ is just how (hard) it's supposed to be :-)

<comment><USER9> Also did an OOP emulation a few years earlier than this using Clipper 5, of all things. No structs, but you could make constants for array indices, and assign a closure/block to each array element, using the array as a virtual method table.

</comment></comment><comment><USER10> I ran into this a while back. Worth knowing about I think. I'd like to see a compare-and-contrast with "Writing Bug-free C Code." ([http://www.duckware.com/bugfreec/index.html](http://www.duckware.com/bugfreec/index.html))

<comment><USER11> I have read Object oriented programming with ANSI-C and implemented my own class system in C with inheritance and polymorphism.

Taking a look at Writing Bug-free C Code the chapter about class is really just an example how to use structs with pointers that don't expose the underlying implementation.

If you want to learn oop read the Oop with Ansi-C, where classes similar to c++ with certain limitations are possible. The book explains everything in detail with including source code[[http://www.cs.rit.edu/~ats/books/ooc-14.01.03.tar.gz](http://www.cs.rit.edu/~ats/books/ooc-14.01.03.tar.gz)].

<comment><USER12> This seems to be the horrible Schreiner book. IIRC, he tries to do OO in C by using a special pre-processor. Sorry, this approach has never been relevant.

<comment><USER9> Sarcasm? The original "C with Classes" was a preprocessor, I believe.

<comment><USER13> And then it was found to be inadequate for real work and turned into a separate language.

<comment><USER14> It was used to bootstrap it. Sounds like real work to me.

</comment></comment></comment></comment></comment></comment><comment><USER15> For page 33:

" struct Circle { const struct Point _; int rad; }; We let the derived structure start with a copy of the base structure that we are extending. Information hiding demands that we should never reach into the base structure directly; therefore, __we use an almost invisible underscore as its name __and we declare it to be constto ward off careless assignments. "

This looks so manual that reminds me "C with classes". It is a very pedagogic read though.

</comment><comment><USER16> Nice book, but please change the title to note this is a 221-page PDF!

</comment><comment><USER17> Historical interest: Amiga BOOPSI. Not saying it was perfect, but it certainly existed.

[http://en.wikipedia.org/wiki/BOOPSI](http://en.wikipedia.org/wiki/BOOPSI) [http://en.wikibooks.org/wiki/Aros/Developer/Docs/Libraries/I...](http://en.wikibooks.org/wiki/Aros/Developer/Docs/Libraries/Intuition/BOOPSI)

</comment><comment><USER18> Big C/C++ fan here, although I'm sure writing software for PC in C is extremely painful. Personally for PC soft I'm using C++ (Qt) but I actually really had to learn some 'higher level' language for this particular job. However, my main area of interest are microcontrollers and there is NO other option than learning C (C++ compilers costs too much for a hobby projects).

</comment><comment><USER19> I was kind of expecting this to be a link to Zhivago's article on OOP with C

[http://www.codersger.de/mags/cscene/CS1/CS1-02.html](http://www.codersger.de/mags/cscene/CS1/CS1-02.html)</comment>


Beware Bitcasa Cloud Service - <AUTHOR>

Upon purchasing a Google Nexus 7, I signed up for a few cloud services that were offering free GBs. One such service was Bitcasa (Bitcasa.com). I installed Bitcasa on my N7, and then on my laptop and desktop in order to sync data. A couple weeks after signing up, I checked my online account only to discover that my entire laptop's hard drive had been "mirrored" within the cloud service. I tried to delete the data but there was no delete option. What concerned me was the fact that a) I never allowed/optioned Bitcasa's "mirrored" service, and b) that I now had lost ownership of my very own data.
I immediately deleted Bitcasa from all devices less another device become "mirrored" (or should I say "mired") within their cloud service.
I checked online in the support community and found this was a huge problem among many users. Supposedly all you have to do is remove the mirrored option (which I never set up) on the drive that is being mirrored and this will remove the mirrored content in the cloud. Doesn't work. Then there is an issue with two different versions of Bitcasa being used: a legacy version and a current version. It's a big mess that Bitcasa has not addressed. Here is a link to one of the ongoing issues; it may not be accessible without a Bitcasa login account: http://support.bitcasa.com/entries/23086582
I submitted a help ticket, but to date there has been no action whatsoever. <comment><USER2> Where's the "mirror" option? I'm not seeing it anywhere in preferences.

For what it's worth I'm very intrigued by Bitcasa's Infinite Drive and really think that's the future of cloud storage. Though I've emailed them weeks ago without a response as well.

<http://i.imgur.com/s67x3Dq.png>

<http://i.imgur.com/F1TPvJR.png>

<comment><USER3> Right click on a folder in the Finder. There should be a couple of options for mirroring (ongoing) or copying the folder (one time) to Bitcasa.

<http://cl.ly/image/2T1n1R0X0B0Y>

<comment><USER2> Thanks BTW. I wasn't mirroring anything but good to have checked.

</comment></comment></comment><comment><AUTHOR> As a follow-up comment to my own post: I have given Bitcasa Support permission to nuke all of my data, but have received no response. This seems to be an ongoing issue that they are not addressing, at least not publicly, but users of their service need to be aware of this potential issue.

<comment><USER4> Yeah, their support is a black hole. Their Linux client linked from their site just gives a 403 when you try to download it. I've sent a support request through their ticketing system and gotten no response for over a week. (I also tried email and Twitter to no avail.)

I'm definitely staying away from them and recommending the same to my less tech-savvy friends.</comment></comment>


It took me 4 months to develop this cryptocurrency education website.:) - <AUTHOR> https://mycrypto.tools/ <comment><AUTHOR> If you are interested in the technology stack, please read the medium post about it.

[https://medium.com/@tunatore/how-mycrypto-tools-uses-aws- lam...](https://medium.com/@tunatore/how-mycrypto-tools-uses-aws-lambda- serverless-architecture-b5603df10443)

I hope this helps others/community.</comment>


Android based, beautiful smart watch. - <AUTHOR> http://live.imwatch.it/

<comment><USER2> "Beautiful" is subjective.

At 10mm thick, this is basically the "smartwatch" equivalent of James Bond's chunky LED watch from Live and Let Die (1973). And it only works through your existing smart phone, so its a 300 euro toy that saves you having to get your phone from out of your pocket.</comment>


The Museum of RetroTechnology - <AUTHOR> http://www.douglas-self.com/MUSEUM/museum.htm <comment><USER2> I remember when microphones were physically dangerous. It mentions carbon microphones with the main supply voltage going through them: [http://www.douglas- self.com/MUSEUM/COMMS/mechamp/mechamp.htm...](http://www.douglas- self.com/MUSEUM/COMMS/mechamp/mechamp.htm#tann). But even into the 80s, microphones plugged into portable vacuum tube amps sometimes ended up with the plate voltage (200+ volts) on them and shocked people when they touched them. Stage performers usually brushed a mic quickly with a finger before putting their lips close to it, to make sure it wasn't electrically hot.

I wonder if it resulted in people being more careful what they said near a microphone too.

<comment><USER3> Oh, mics are still dangerous. I play a lot of restaurants where you get odd hums... one way to "deal" with that is to remove the safety ground on your guitar amp.. of course, there is then a possibility that there is a difference in potential between yourself as grounded through the amp and yourself as grounded through a microphone... you don't need a carbon element or a tube amp to get badly shocked that way. I and a lot of my dirtbag musician friends still will touch a mic before using it.

<comment><USER4> Have you tried using an isolation transformer?

[http://www.shure.com/americas/support/find-an- answer/transfo...](http://www.shure.com/americas/support/find-an- answer/transformers-when-to-use-and-how-does-it-work)

</comment></comment></comment><comment><USER5> Douglas Self is the author of some really excellent books on audio electronics. Especially "Small Signal Audio Design" ([https://www.amazon.com/Small-Signal-Audio-Design- Douglas/dp/...](https://www.amazon.com/Small-Signal-Audio-Design- Douglas/dp/0415709733/)).

</comment><comment><USER6> I remember pneumatic tubes. Only a few years ago, Costco was still using them to deliver checks/cash to their tills. I cannot say exactly when, but well into the 2000s.

<comment><USER7> I was amazed / impressed to read that some of the pneumatic tube systems in cities were operating for over 100 years. That's a long time for any given technology.

</comment></comment><comment><USER8> The "Combat Cutlery" was absolutely worth the click.

From now on I will be a little disappointed with every spoon I use, that is not also a firearm.

<comment><USER9> Visit the Prison Museum in Huntsville, Texas.

You'll be amazed by the deadly and complicated things that can be built with little material but a lot of time.

</comment></comment><comment><USER10> I appreciated the bit about pneumatic tubes. For whatever reason, I have been itching lately to find technical details on modern packet-switched pneumatic tube networks [1]. They're still used in hospitals apparently.

[1] [https://youtu.be/W39qQE5jqWk?t=55s](https://youtu.be/W39qQE5jqWk?t=55s)

</comment><comment><USER11> thanks for this, I learned something I never heard of before: compressed air power grid [http://www.douglas- self.com/MUSEUM/POWER/airnetwork/airnetwo...](http://www.douglas- self.com/MUSEUM/POWER/airnetwork/airnetwork.htm)

old times weren't so low-tech, this feels like steampunk^2

</comment><comment><USER12> I'm really digging how the top entry is the Shakespeare Mangle, a cipher machine for conspiracy theory gibberish.</comment>


OS X keychain passwords can be read by root - <AUTHOR> https://github.com/juuso/keychaindump

<comment><USER2> Interesting. This reminds me of a bug from a couple years ago. Apple used to leave a big unencrypted swap file on disk, so you would open up single user mode and search for string related to login and there would usually be a cache of logins and passwords in the clear. Apple fixed this bug by removing the swap file, among other things. But it turns out that there are ways to enable a dev representing virtual memory with some kernel hacking, that does something similar as the swap.

This vulnerability is fairly similar in that it involves scouring memory, is somewhat more sophisticated since it requires some decryption, but is less powerful since it relies on memory being intact, whereas the most common, illicit way to gain root access is by single user mode, which usually obliterates much memory. But it would be interesting to test--to preserve memory it would be best to set boot flags for single user and then restart as opposed to rebooting (presumably this would cut power to memory for a shorter period of time, thereby better preserving its contents).</comment>


Ask HN: Which Real time webapp would you like? - <AUTHOR>

I want to create a simple web application that multple people would use.
No complex thingy, just something that would be decent,usefull and "fast" to create.
What would you use/want?
I'm thinking like a todo list, something like a simple Google Keep alternative. But feel free to make suggestions <comment><USER2> Time tracking that doesn't suck. [http://www.timelyapp.com/](http://www.timelyapp.com/) is pretty solid looking, but I want something I can self-host and/or integrate with my own backoffice systems.

<comment><AUTHOR> Whats the protocol you use in your own backoffice system? Does it support an import method (csv, xml, ..) or an API to sync with?

</comment></comment><comment><AUTHOR> So, anything you guys want?

<comment><USER3> I'm working on a new personal productivity system and the app would be relatively easily to build.

If you're interested, you can contact me (email is in my profile).

<comment><AUTHOR> I was personally thinking about a kanban board, but let's have a look shall we :)

Mailing you right now</comment></comment></comment>


FuckJerry Reportedly Had Final Cut on Netflix's Fyre Festival Documentary - <AUTHOR> https://www.thecut.com/2019/02/fuckjerry-ceo-netflix-fyre-festival-documentary.html <comment><USER2> This is another reason the Hulu doc is more honest.

The biggest advantage of the Hulu version is the very telling interview with McFarland (the founder) himself.</comment>