<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Akshay Kulkarni on Medium]]></title>
        <description><![CDATA[Stories by Akshay Kulkarni on Medium]]></description>
        <link>https://medium.com/@akshaykulkarni?source=rss-e9ca4f68c727------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/2*tXWqhlOx3DK3vXem3XOHCA.jpeg</url>
            <title>Stories by Akshay Kulkarni on Medium</title>
            <link>https://medium.com/@akshaykulkarni?source=rss-e9ca4f68c727------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 21:32:57 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@akshaykulkarni/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Zero Trust Was Built for People. AI Agents Break It.]]></title>
            <link>https://medium.com/@akshaykulkarni/zero-trust-was-built-for-people-ai-agents-break-it-4e87a2f459bc?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/4e87a2f459bc</guid>
            <category><![CDATA[responsible-ai]]></category>
            <category><![CDATA[ai-governance]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sun, 14 Jun 2026 12:35:51 GMT</pubDate>
            <atom:updated>2026-06-14T12:35:51.998Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6cAt2xmxwzX4yYmR1BX95w.jpeg" /></figure><p>We spent a decade convincing enterprises to stop trusting the network. Now we’re handing production access to a new kind of user that breaks the assumptions we built that trust model on — and most security teams haven’t noticed yet.</p><h3>The thing zero trust actually replaced</h3><p>For years, enterprise security ran on the castle-and-moat model. Authenticate once at the VPN, and once you were <em>inside</em> the network, you were trusted to reach almost everything. The perimeter was the trust boundary. The problem only became obvious after it failed often enough: one breached laptop or one stolen VPN credential, and the attacker was inside the trusted zone, free to move laterally to anything the network could see.</p><p>Zero trust threw out network location as a signal. The slogan — “never trust, always verify” — gets quoted to death, but the substance is five principles:</p><p><strong>No implicit trust from location.</strong> Sitting on the corporate network earns you nothing. Every request is treated as if it came from the open internet.</p><p><strong>Verify per request, not per session.</strong> Trust isn’t a gate you pass once at login. Every access to every resource is re-evaluated.</p><p><strong>Least privilege, just-in-time.</strong> You get the minimum access needed, for the narrowest scope, ideally only when you need it — not a standing grant that outlives its purpose.</p><p><strong>Dynamic, context-aware policy.</strong> The decision uses live signals: identity and MFA, device posture (is the laptop patched, encrypted, managed?), location, time, a behavioral risk score. The same person is waved through from a managed laptop and challenged from an unknown one.</p><p><strong>Assume breach.</strong> Design as though the attacker is already inside. Segment the network so a compromise stays contained, encrypt everything, log every request so you can trace it.</p><p>The part that matters most is the architecture underneath. Zero trust is enforced by a split between a <strong>Policy Enforcement Point</strong> and a <strong>Policy Decision Point</strong>. The enforcement point sits directly in the data path — every request physically passes through it. For each request it asks the decision point a single question: <em>given this identity, this device, this resource, this context — allow?</em> It lets the request through only on a yes. The enforcement point is the choke point; the decision point is the brain. Conditional Access in Entra and Okta’s policy engine are decision points you’ve probably used today without thinking about it.</p><p>Hold onto that picture, because it’s about to get a new kind of user.</p><h3>Now the user is an AI agent</h3><p>Here’s the shift almost no one has internalized: <strong>an AI agent’s tool call is the new access request, and the gateway it calls through is the new enforcement point.</strong></p><p>The good news is that most of zero trust ports over cleanly. An agent needs a strong, verifiable identity — none of this “a service account called the API” blur where no one can tell which agent, which owner, or which user was behind an action. Per-request verification becomes a gate that re-checks <em>every single tool call</em>, fresh, instead of trusting a one-time provisioning event. Least privilege becomes default-deny tool access. Assume-breach becomes containing blast radius per credential.</p><p>So far, so familiar. The trouble is that an AI agent quietly breaks four assumptions the human model leans on — and those four breaks are the entire reason agent security is a new problem and not a config change.</p><h3>1. Identity is compound, not singular</h3><p>A human is one principal. An agent acts with <em>two</em> identities at once: its own, and the human whose authority it’s borrowing. Human zero trust verifies one subject. Agent zero trust has to verify the <em>pair</em> — who is the agent, and whose permissions is it actually using right now — and re-establish that at every hop when one agent hands off to another. Carry the entry-point authorization blindly through the chain and permissions accumulate: the sum of what a workflow can do ends up exceeding what any single principal was ever authorized for. OAuth’s on-behalf-of patterns were never designed for recursive, multi-agent delegation.</p><h3>2. The unit of risk is an autonomous, prompt-driven state change</h3><p>A human clicking “open file” has bounded, self-evident intent. An agent’s call is non-deterministic — driven by a prompt — and chainable. It can read from your CRM and <em>then</em> email those contacts. Human zero trust almost never has to evaluate “intent,” because the human <em>is</em> the intent. For agents, intent is the whole game. Each action can be individually permitted while the <em>sequence</em> is exactly what you’d never allow. “What can this identity do?” stops being a sufficient question. You have to govern what it’s doing, in context, as it does it.</p><h3>3. There’s no device, and the request rate is machine-speed</h3><p>Human zero trust leans hard on device posture — is this a managed, patched, encrypted laptop? An agent has no laptop. The posture-equivalents are different signals entirely: which credential is being used, what scope the token carries, whether the call came from a live human interaction or a background routine, and where the prompt came from. And where a person makes a handful of access decisions a day, an agent makes thousands of tool calls. The gate has to be cheap and fresh enough to run on every one of them, not sampled, not cached into irrelevance.</p><h3>4. “Just-in-time” has to become “just-for-scope”</h3><p>Humans trigger access reviews when they change roles. Standing grants get re-certified. Agents have no equivalent lifecycle — they accumulate scope incrementally, each expansion feeling reasonable, with no natural moment that forces a review. Scope creep isn’t an edge case for agents; it’s the default outcome. The fix adapts the least-privilege principle: instead of provisioning access and deprovisioning it later, you issue a short-lived token scoped to <em>this</em> capability for <em>this</em> conversation, and it simply expires. No standing grant to forget about. No deprovisioning job to fail silently.</p><h3>The reframing</h3><p>If you want one sentence to carry the whole idea:</p><blockquote><strong><em>Human zero trust:</em></strong><em> never trust the network; verify the identity per request; least privilege; assume breach.</em></blockquote><blockquote><strong><em>Agent zero trust:</em></strong><em> all of that — </em>plus<em> verify the </em><strong><em>compound</em></strong><em> identity (the agent and whoever it’s acting for), evaluate </em><strong><em>intent</em></strong><em> and not just permission, gate </em><strong><em>every tool call</em></strong><em> at machine speed, and scope credentials </em><strong><em>just for the task</em></strong><em> rather than as standing grants.</em></blockquote><p>The reason the difference matters: the thing you’re authorizing is no longer a person clicking a button. It’s an autonomous, prompt-driven state change in a real system — a record created, a permission granted, an account suspended — that happened because a model decided to make it.</p><h3>Where this lands</h3><p>The uncomfortable implication is that listing your agents in a registry buys you nothing. Inventory is not governance. An enterprise will not trust an AI workforce because it can see a list of agents; it will trust it when every action one of those agents takes is identity-bound, intent-aware, policy-checked at the moment of the call, and traceable afterward in plain language.</p><p>That’s a runtime problem, not a configuration problem. The enforcement point can’t live in a spreadsheet or a quarterly access review — it has to sit in the path of every tool call, asking the same question zero trust always asked, for a user that finally makes the question hard again: <em>is this principal authorized to do this, right now, for this purpose?</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*W6uM0WbdNwnFQb6mugghIA.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_9gs1wfyK2epLdTcZByltw.jpeg" /></figure><p>We answered that question for people. Now we get to answer it again — for the agents acting on their behalf.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4e87a2f459bc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using Game Theory to Improve Meetings]]></title>
            <link>https://medium.com/@akshaykulkarni/using-game-theory-to-improve-meetings-e2365cce5e49?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/e2365cce5e49</guid>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[game-theory]]></category>
            <category><![CDATA[meetings]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Wed, 29 Apr 2020 12:34:28 GMT</pubDate>
            <atom:updated>2020-05-08T11:19:42.506Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/332/0*hUNfEnRLhfTdoftX.jpeg" /></figure><p>Recently I was reading about “The Law of Triviality” on a blog. Simply put the law states that given an audience and a set of topics to discuss, most time is always spent on the least important topic.</p><p>This law is also commonly known as “bike-shedding” because that is the example Parkinson used to demonstrate this law. Cyril Northcote Parkinson who was a British naval historian, coined this theory in the late 1950s. Surprisingly, this seems to hold true even in today’s corporate setting. It is intuitive to see why this is the case, i.e. people like to discuss things they are most comfortable with. However, I wanted to explore if this could be explained in a more scientific way and that’s when I turned to Game Theory.</p><p>For readers who might be unaware, Game Theory is the study of how rational people behave in a given situation. A rational person is anyone who tries to behave in a way that they believe to be the best means to achieve their given ends. In simple terms for any person, there is a utility value associated with every action they can take and they would like to make a choice that can get them a good utility given all circumstances.</p><p>To run this experiment, we will consider the three topics to be discussed that Parkinson used to illustrate the law</p><ul><li>A proposal for a £10 million nuclear power plant</li><li>A proposal for a £350 bike shed</li><li>A proposal for a £21 coffee budget</li></ul><p>Also, for the sake of simplicity let’s assume there are three people who are going to be a part of this meeting</p><ul><li>Shubham — A nuclear scientist</li><li>Nikunj — Office administrator</li><li>Akshay — A college intern for the PR department</li></ul><p>We can make an assumption that the utility that a person gets from the meeting is directly proportional to how much they can contribute to the discussion and what value they get from the outcome.</p><p>So, based on their job roles and experiences we can define the following table which denotes the utility that each of them would get when discussing a certain topic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/1*SCpyb0GMnkav-c80xqg-dg.png" /></figure><p>The above table should be read as follows:</p><ol><li>When Nuclear Plant is discussed</li></ol><blockquote>Shubham will get the highest utility of 5 as she is a nuclear scientist who understands the topic best and can contribute.</blockquote><blockquote>Nikunj who is an office administrator can contribute a little but not as much as Shubham and he only gets a utility of 2.</blockquote><blockquote>Akshay who is an intern for the PR department can hardly contribute and only gets a utility of 1.</blockquote><p>2. When the Bike Shed is discussed</p><blockquote>Shubham can contribute fairly well to the topic but doesn’t care about it as much, so she only gets a utility of 2.</blockquote><blockquote>Nikunj cares a lot about this and can contribute the most gets a utility of 5.</blockquote><blockquote>Even in this case Akshay really doesn’t have much to contribute so he continues to get a utility of 1.</blockquote><p>3. When the Coffee Plan is discussed</p><blockquote>Shubham can contribute and cares about this but not as much as the nuclear plant so she gets a utility of 3.</blockquote><blockquote>Nikunj also can contribute to this topic and he also fairly cares about it but not as much as the bike shed so he gets a utililty of 3.</blockquote><blockquote>Akshay can both contribute and cares about this topic so he gets a utility of 4.</blockquote><p>I know that the above example is a little contrived and the actual utility values are subjective. But we can make an educated guess that the utility values would be along with the same scales, if not with similar values.</p><p>The topics, however, are more nuanced in real life but this example with widely varying topics really helps to drive the point home, so I ask you to indulge with me a little.</p><p>By observing the above game table we can see that a “Nash Equilibrium” exists for this game. A “Nash Equilibrium” is a strategy or set of strategies that ensure the best outcome for the entire system.</p><p>From the table, we can see that the best strategy here is to discuss “coffee plan” as that ensures that you get the best utility for everyone involved in the meeting. This scientifically proves what we initially hypothesized.</p><p>It proves that in meetings we often end up discussing something everyone can contribute and get value out of and in most cases this ends up being something trivial.</p><h3>How do we fix it?</h3><p>Now that we have a scientific way of denoting the “game” of meetings, we can clearly conclude that to have more meaningful meetings we need to make sure all or most participants have a high utility from discussing the important things.</p><p>We can distill that down into steps as follows:</p><ol><li>Decide what important topic needs to be discussed.</li><li>Invite people who can contribute in a meaningful way to the topic.</li><li>Invite people who set to gain/lose from the outcome of the discussion.</li></ol><p>This way you can avoid falling trap to the “Law of Triviality” and have productive meetings with productive outcomes.</p><p><em>Originally published at </em><a href="https://akshaykulkarni.info/using-game-theory-to-improve-meetings/"><em>https://akshaykulkarni.info</em></a><em> on April 29, 2020.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e2365cce5e49" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to get a Referral for your Dream Job]]></title>
            <link>https://medium.com/@akshaykulkarni/how-to-get-a-referral-for-your-dream-job-2f53b1bcb824?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/2f53b1bcb824</guid>
            <category><![CDATA[jobs]]></category>
            <category><![CDATA[career-development]]></category>
            <category><![CDATA[career-advice]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sun, 26 Apr 2020 10:53:00 GMT</pubDate>
            <atom:updated>2020-04-26T10:53:00.981Z</atom:updated>
            <content:encoded><![CDATA[<p>Tl;dr Try to build a genuine relationship with people in these roles or companies rather than try to get a transactional favor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/507/1*r64cYeTdzwyuHtSN56T5bg.png" /></figure><p>Two out of three jobs that I have had, I got them through a referral. My first job right out of college was at Microsoft which I had gotten through on-campus career placement. In some way, even that is a job referral of sorts, my college referred me to my employer.</p><p>I got my next two jobs through direct referrals from people within the company who I had built a network with.</p><p>I want to share a few insights I have had with my own limited but massively successful experience in getting job referrals. I frequently get messages on LinkedIn from people trying to get a referral, and I see them make some very common mistakes that make it really hard for me to help them.</p><p>I will try to cover both a good strategy for getting referrals easily and a few common mistakes you can avoid making while asking someone for a referral.</p><h3>Build a genuine relationship</h3><p>My first and most important tip would be to build a genuine relationship with people at your dream company or in your dream job roles. Building a genuine relationship helps make the relationship non-transactional.</p><p>It is a lot easier for a person to refer someone they know in some capacity than referring a total stranger from the internet. In fact, if you are able to build a genuine relationship and a good impression, people might reach out to you asking if you would like to work with them.</p><h3>Demonstrate the required skillset</h3><p>The next tip is to try to demonstrate that you have the skill set required for the job role you are gunning for. By doing this well, you get people excited about working with you and this increases your chances of getting a referral.</p><p>At the end of the day, we all want to work with smart individuals who we can learn and grow with. If you can easily convince someone of your capabilities, this will go a long way in fetching you a referral.</p><p>The best way to demonstrate a skillset is by either having an online portfolio or by writing about the subject and engaging with other people in the space.</p><h3>Work like you have the job</h3><p>This last tip is a little more nuanced than the other ones but can actually be very effective if done correctly.</p><p>Don’t wait for someone to give you the job title or an offer letter, do the job as if you already have it. The idea is to show that not only do you have the required skill set but you are actually passionate about the job itself. This signals that you are in this not for the money or the status but just for the love of it.</p><p>For example, if you are an engineer trying to move into product management, don’t wait for someone to officially give you the title. Work with product managers in your company if possible and help them out. If there are no product managers in your company, figure out what a PM does day to day and try to do it.</p><p>This helps you both build the skillset and if you do it well it will help you easily transition into that role officially as well.</p><p>Another example lets say you are not really changing roles but want to move to a different company in the same role. Try to answer for yourself why you would want to work at that company. If the answer is money or status, you should be asking deeper questions to yourself. But if the answer is that you would actually enjoy working on some projects there, then great. Just picture yourself actually having the job and try to write about your ideas and how you could contribute to it.</p><p>It’s important to do this in a constructive positive way and not out of spite or in a way where you are negatively criticizing the company. Remember, people working there have more data than you do so there decisions are more informed.</p><p>A good case study for doing something like this is Jason Yuan who got rejected by the Apple Music design team for an internship but he loved the project so much, he went ahead and did it anyway. He later ended up getting the job. You can read more about it <a href="https://medium.com/startup-grind/i-got-rejected-by-apple-music-so-i-redesigned-it-b7e2e4dc64bf">here</a>.</p><p>I hope that these tips help you get into your dream role at your dream company and would like to hear your feedback or opinions on this.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2f53b1bcb824" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Increase your Chances of Getting Lucky]]></title>
            <link>https://medium.com/hackernoon/how-to-increase-your-chances-of-getting-lucky-434a1c749c99?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/434a1c749c99</guid>
            <category><![CDATA[luck]]></category>
            <category><![CDATA[life-lessons]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[lifehacks]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Mon, 25 Mar 2019 19:04:06 GMT</pubDate>
            <atom:updated>2019-03-25T19:04:06.265Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*s6JjND5cpOElwWQiJAegpA.jpeg" /></figure><p>Growing up, I hated the term luck. I absolutely resented the idea that luck played a major part in success.</p><p>For me luck represented an uncontrollable random factor. I wasn’t willing to accept that something out of your control, something completely random played a role in your success.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tpiYrKfrO86ev1oPKaYnYw.jpeg" /></figure><blockquote>As Einstein famously said “God does not play dice with the universe”.</blockquote><p>Unfortunately, as I grew up I had to start accepting that luck in fact plays a huge role in determining your success. I had to slowly and sadly start accepting that maybe I was wrong, maybe Einstein was wrong too.</p><blockquote>It was probable that success was in fact influenced by a random factor.</blockquote><p>But all of this changed when I recently read an article by <a href="https://medium.com/u/fa65e64cf273">Marc Andreessen</a> called: “<a href="http://pmarchive.com/luck_and_the_entrepreneur.html">Luck and the Entrepreneur, Part 1: The four kinds of luck</a>”.</p><p>Initially, it caught my attention but if I have to be honest, I didn’t completely grasp the significance of what Andreessen was talking about. But when I later heard a podcast by <a href="https://medium.com/u/67f5049293c7">Naval Ravikant</a> where he talks about “How to get rich” and makes references to Andreessen’s article it all started making sense.</p><p>This probably says a lot about my motivations. However, I am not really ashamed to admit that becoming rich is a huge motivation for me. For some weird reason there is a social stigma around aiming to become rich. I do want to help other people and the society but I believe that becoming rich will afford me the leverage and freedom to do so.</p><p>But getting back to the article, Andreessen talks about four kinds of luck and only one of which is completely random. The four types being</p><ul><li><strong>Blind Luck — </strong>This type of luck is completely random and accidental. This is what most people associate being lucky with.</li><li><strong>Motion — </strong>This is the type of luck that you make for yourself by stirring the pot. One way to think about it is, ‘If you take enough shots, you will hit one of them’.</li><li><strong>Recognizing Good Fortune — </strong>This is the type of luck where you have develop a keen sense and understanding of a field. So you can pick up signals that others can’t and get lucky. Louis Pasteur characterized it for all time when he said,<em> ‘</em><strong>Chance favors the prepared mind</strong><em>.’</em></li><li><strong>Directed Motion — </strong>This is the most complicated type of luck. This happens when you have established yourself in a field as an expert and instead of you finding luck, <strong>luck finds you</strong>.</li></ul><p>So what does this mean for us. Well for starters, even though luck plays a factor in success, it is not completely random. It is something that can be hacked. You can set yourself up to get lucky.</p><p>I have come up with a simple 4 point framework to increase your chances of getting lucky. It has worked fairly well for me so far.</p><ol><li><strong>Pick a field</strong> <strong>and stick to it</strong></li></ol><blockquote>Pick a field that you are excited about and think is going to grow in the future. The first condition is more important than others. You need to be excited about the field or you won’t stick with it. Having an intuition about the future is a skill you can learn over time and is subject of a different article. By picking a field and sticking to it, you increase your chances for the second type of luck.</blockquote><p>2. <strong>Find the best people, companies or projects in the field</strong></p><blockquote>A lot of luck comes from being in the right place and having leverage and the means to act on it. Working with smart people in the field affords you this opportunity. It will help you both understand the field and build your expertise in it. This increases your chances for the third and fourth type of luck.</blockquote><p>3. <strong>Strive to establish yourself as an expert</strong></p><blockquote>Use the resources and people around you to try to become an expert in the field. Also try to communicate and share your ideas with the world. It’s no point in becoming an expert if no one else can testify to that. This opens yourself up for the fourth kind of luck.</blockquote><p>4. <strong>Keep your eyes and nose open to exciting opportunities</strong></p><blockquote>If you stick to a field and become an expert in it, lots of new opportunities will open up for you. But it is still up to you to recognize these opportunities and act on it. This step is more about making the best of the luck afforded to you.</blockquote><p>I apply this framework rigorously and it has so far worked beautifully. I would love to know if it works for you or any other comments you might have. Comment below or hit me up on <a href="https://twitter.com/someone_like_ak">twitter</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=434a1c749c99" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/how-to-increase-your-chances-of-getting-lucky-434a1c749c99">How to Increase your Chances of Getting Lucky</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why I don’t haggle]]></title>
            <link>https://medium.com/@akshaykulkarni/why-i-dont-haggle-53b5fb8ee476?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/53b5fb8ee476</guid>
            <category><![CDATA[philosophy]]></category>
            <category><![CDATA[empathy]]></category>
            <category><![CDATA[spirituality]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sun, 18 Nov 2018 08:07:22 GMT</pubDate>
            <atom:updated>2018-11-18T08:07:22.262Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uhIFSefDRrOU3keaAvsL1Q.jpeg" /></figure><h4>tl;dr Because of Guilt</h4><p>Last week I had a long altercation with a friend leading to some interesting insights into my own belief system. She was annoyed because I paid extra for a cab ride rather than paying what the fair price by a meter would have been.</p><p>It is common where I live for the cab drivers to quote their own price rather than use the meter onboard the vehicle. Most people just haggle the price down to a lower value than what was quoted but still higher than the meter price.</p><p>My friend was very annoyed with me because I refused to partake in this tradition of a 5 minute argument to get the price down by 10 bucks. At first she tried to explain how I was being cheated by cab drivers and when that didn’t work concluded that I don’t haggle because I am uncomfortable or even incapable of having an argument or a haggle debate.</p><p>I didn’t care much about her explanations but when my competency for a task was questioned, my ego rushed in and I knew I had to defend myself. I hate being told that I am not good at or can’t do something (more on that in a different article maybe). And in this particular case I knew that she was wrong.</p><p>Not only am I comfortable in fact I love having arguments and debates. Most of my close friends would agree with this begrudgingly but you can’t beat me in an argument. She however didn’t know this as we weren’t very close.</p><p>I still had to defend myself so I started introspecting my own actions and why I don’t haggle. After a lot of introspection I realised that the reason I don’t haggle with cab drivers, street vendors or anyone else is for the same reason.</p><blockquote>The reason is Guilt. I feel guilty because I was lucky to be where I am and they probably weren’t.</blockquote><p>My friend was trying to explain it to me as to how it is not fair to pay extra money and how I was being unfairly taken advantage of. She was right about one thing and that was that the whole ordeal was unfair. But I believe that there is something more unfair at play if you can just look at it differently.</p><p>It is unfair that I had access to good education and opportunities while the cab driver probably didn’t. It’s unfair that the vendor you haggle with was born to an alcoholic dad and an illiterate mom in a poor household where they couldn’t support his or her education.</p><blockquote>When you put the unfairness of circumstances of birth versus unfairly being charged more money, the former triumphs as the greater injustice.</blockquote><p>Also that extra ten bucks probably means more to the vendors than it does to you. The marginal value for you (who has more money) of the ten bucks is lesser than what it is for a poorer person. That’s very simple economics. It’s called the <a href="https://www.investopedia.com/terms/l/lawofdiminishingutility.asp">law of diminishing marginal utility.</a></p><p>Maybe I am right about how I think about this or maybe I am wrong. But empathy is a beautiful thing and if only more people even partially practiced it the world would be a better place for everyone.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=53b5fb8ee476" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why the World Needs Chatbots]]></title>
            <link>https://medium.com/chat-bots/why-the-world-needs-chatbots-ae0c4abc33d5?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/ae0c4abc33d5</guid>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[bots]]></category>
            <category><![CDATA[conversational-ui]]></category>
            <category><![CDATA[chatbots]]></category>
            <category><![CDATA[marketing]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sun, 15 Apr 2018 19:21:52 GMT</pubDate>
            <atom:updated>2018-04-16T02:00:15.098Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e8v1xC0NTgoduh_ei9F7Pw.png" /></figure><p>When Facebook announced the Messenger platform for building chatbots a couple years ago, there was a lot of excitement in the market. Everybody was of the belief that bots are the next biggest thing in technology. In fact it wasn’t very hard to find an article with the title along the lines of “How chatbots will replace mobile and web applications” published everyday.</p><p>New tools ranging from code libraries, drag and drop tools, GUI based bot builders, mockup tools and analytics platforms were being launched within weeks of each other. Some of these tools were able to achieve amazing success like Chatfuel and ManyChat in the GUI bot builder category, Dashbot and Botanalytics in the analytics platform category and Microsoft Bot Framework and Botkit in the coding library category.</p><p>For all the hype that the launch of these tools and platforms generated there seems to be a growing belief that chatbots have not lived up to their initial promise. This is primarily because the promise was maybe wrong. Part of the promise was to have human level conversations and the reality is currently we do not have the level of Artificial Intelligence required to achieve completely human like interactions. The other more misleading promise was that bots will replace mobile and web apps. As I mentioned earlier almost every second person working in the chatbot space was pushing bots to be the replacement for apps. This led to developers trying to re-implement mobile applications as chatbots. And in most cases the bots were a poor re-implementation of the apps functionality. Nothing more, almost always less. The few bots that have tasted success are the ones that have completely reimagined their solution through a conversational perspective.</p><p>All of these factors have led to doubts beginning to creep about chatbots as a market opportunity. Many people have started to question whether the whole chatbots thing is a hype bubble that is eventually going to burst and some actually believe that the burst has already happened. The recent embargo by Facebook on building new chatbots also hasn’t helped much to alleviate these fears.</p><p>However, I still believe that the world needs chatbots and the reasons are pretty simple. Actually at the heart of it there is only core reason which is conversations are a more natural way to interact than UI. A lot of people disagree with this saying pointing and clicking at things is more natural to humans as this is what we did as babies. But this is true only if you are pointing at colourful pictures, not trying to figure out which button or link to click in a 3 level menu. I actually believe that communicating through voice is more natural and the only reason babies point at things is because they have limited conversational ability.</p><p>Using an UI might feel very natural to most of the readers of this article but that is mostly because in most of you have been exposed to technology for a very long time now. If you really feel UIs are more intuitive try asking old aged people who aren’t as used to technology to use an application. GUIs are very hard to use for someone who hasn’t been exposed to technology and there are many such people, especially in developing markets. In markets like India a huge majority of the population is just getting connected to the internet and starting to use smartphones. From personal experience of talking to such people I can tell that its very hard for them to understand and use GUIs because they are not used to them. The one thing they are used to is normal human like conversations. This provides a huge opportunity to developers like us to solve problems for this new generation of users with chatbots that are able to converse with these users in their regional languages.</p><p>Chatbots can also help solve problems in areas which haven’t kept up with technological progress as much such as education, healthcare, banking etc. Chatbots help remove the technology apprehension that the people in these sector might have and also provide a way to provide new and more intuitive solutions to problems in these areas.</p><p>To conclude I believe that currently we are just going through the disillusionment phase of the Gartner cycle and chatbots as a market will take of in the next couple of years.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/969/1*IiiDRb9TtchvZH_g9D5W8Q.png" /></figure><p>If you are a developer and want to learn about building chatbots for these next generation of users and new solutions for the industries lacking behind in progress do check out my book on <a href="https://www.manning.com/books/building-chatbots-with-microsoft-bot-framework-and-nodejs">Building Chatbots with Microsoft Bot Framework and Node.js</a>.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2F58521e%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2F58521e%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/c90883b0516ddbe5c59960c12a04bc64/href">https://medium.com/media/c90883b0516ddbe5c59960c12a04bc64/href</a></iframe><figure><img alt="" src="https://cdn-images-1.medium.com/max/705/1*mToBIVQSczojw0mSn2h5Sw.gif" /><figcaption>👏👏Clap below to recommend this article to others👏👏</figcaption></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ae0c4abc33d5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chat-bots/why-the-world-needs-chatbots-ae0c4abc33d5">Why the World Needs Chatbots</a> was originally published in <a href="https://medium.com/chat-bots">Chatbots Magazine</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why Chatbots will not kill Apps or Webistes]]></title>
            <link>https://medium.com/@akshaykulkarni/why-chatbots-will-not-kill-apps-or-webistes-e3b7bc7a9f43?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3b7bc7a9f43</guid>
            <category><![CDATA[bots]]></category>
            <category><![CDATA[messaging]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sat, 07 Jan 2017 13:29:15 GMT</pubDate>
            <atom:updated>2017-01-07T14:10:47.725Z</atom:updated>
            <content:encoded><![CDATA[<p>In the last few months you might have read this multiple times, ‘Why Chatbots are going to kill apps/websites in 2016/17’ or ‘Why Chatbots are the new apps’ or something along the similar lines. This hype plus an explosion of bot builder platforms which let you build bots without writing any code have led to a surplus of annoying and stupid bots.</p><p>Its time to debunk the hype and get back to reality and customer experience basics. But don’t get me wrong I am not against chatbots or conversational interfaces. On quite the contrary I am a huge believer in conversation as a platform and my startup <a href="https://ozz.ai/">Ozz</a> aims to provide services to help make your bots/conversational apps smarter. I believe that conversational platforms are going to be huge in the coming years. This post however is not about my startup so let’s get to the real issue.</p><p>Why not bots?</p><p>The aim of any company/service/software should be to be ease a customer pain point not to glorify some technology. Or in other words your customers don’t really care if your service is a AI bot or a bot with cards or an app or a website. What they really care about is, is there problem solved.</p><p>And in some cases bots are not the right solution, let me try to give you some examples. I will name a popular app but the reasoning should apply to any app in the category</p><p>1) Uber (Cab booking in general)</p><p>I use uber on a regular basis and even though a bot for uber might seem pretty straightforward, I just send a message</p><blockquote><em>Book me a cab</em></blockquote><p>give my location and bam I have a cab. However there is a very important feature of uber I won’t have anymore to see if there are cabs around before booking and track the cab on the map once it’s booked. This might not seem very important to you, but it is to me and to a lot of other people or uber wouldn’t have invested in it.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/0*HgRhmkv5YHbjlTqd.jpg" /></figure><p>So how would I do this in a bot? Keep asking “Where is the cab?” or have it reported automatically every 5 mins. Both get very annoying very quickly.</p><p>2) Instagram/Facebook/Twitter (Any app with a feed)</p><p>How would you represent a ordered feed, keep sending me messages. Twitter/Facebook used to send and sometimes still send SMS notifications for birthdays, comments etc and its super annoying. Imagine getting a message anytime something is added to your feed.</p><p>3)Book My Show/Make My Trip (Movie/Flight Booking)</p><p>For some reason this category seems to be pretty famous and I might be wrong about this but the user experience on the app is way better than what it would be on a bot.</p><p>Let me show it actually</p><p>Booking movies</p><p>Step 1 ) Click on movies</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/506/0*RIjBmGqbBJBINBQ6." /></figure><p>Step 2) Choose movie from list</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/506/0*pjJKd6lSKD8278gr." /></figure><p>Notice how easily I can switch the dates to find show availability.</p><p>Step 3) Select seats</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/408/0*XiNY2yzOkGUQxCuo.jpg" /></figure><p>And thats it. That’s 3 clicks. The bot alternative would be back and forth messaging, multiple times if you want to check tickets for different dates. It is a no brainer as which of the two provides a better experience. ( I didn’t include any bot screenshots as I don’t want to insult or hurt any developer’s sentiments)</p><p><em>PS: I do not have any affiliation with Book My Show</em></p><p>4) Games</p><p>How do you make a bot for temple run? A HTML 5 webview based game in messenger doesn’t count as a chatbot, sorry!</p><p>The Counter Argument</p><p>If you bring up these points there are a common set of counter arguments you will get. They are</p><p>1) People don’t download apps anymore. <br> 2) The UI of chatbots will evolve to provide more features.</p><p>So I will try to provide my arguments against both these points</p><p>1) People don’t download apps</p><p>I would argue that is not entirely true, most of published research around it seems to only take into account the download numbers of top apps. But by being top apps that are widely adopted, there is going to be a slowdown/saturation at some point. This in no way is indicative of the entire app market as whole.</p><p>Also as smartphones keep getting better every year, memory and CPU are no longer a restriction.</p><p>The bottomline is if you are solving a real problem in a good enough way people will download your app. In fact apps have an advantage over bots as they are more discoverable than bots but that might change.</p><p>The challenge is to get users to click on download. But that is a call to action challenge which is pretty much platform independent.</p><p>There are cases where a bot is better than app but I will get to that later in the post.</p><p>2) The UI will evolve</p><p>I am sure the UI will evolve to provide more GUI options like lists, carousels, dropdowns, maps etc. But the more GUI you get into a bot the less it is a conversational bot and more it is an app. This very well might be the future. But you can’t call these things chatbots just because they live inside messenger/telegram.</p><blockquote><em>A better name would be messenger app/ telegram app</em></blockquote><p>This might be the future messenger apps living in the messenger store. But apps not bots.</p><p>When are chatbots the better option?</p><p>That’s too much negativity in one post, so lets talk about some positives, use cases where bots actually make sense.</p><p>1) One time use problems</p><p>If there are problems that aren’t very frequent but big enough users might be better served by having a bot instead of apps. Some examples are</p><ul><li>Scanning QR code</li><li>Getting Wifi info at public places</li><li>Booking appointment with Doctor/Lawyer ( If you need them regularly you probably have a personal connection and don’t use an app)</li></ul><p>2) Customer Support</p><p>This is the most obvious case, but the NLP technology might not be ready for a fully automated service and a hybrid (human + AI) would be an ideal solution.</p><p>3) Human Replacement</p><p>In general the best bots are the ones which replace an actual human based role. So instead of conversing with a human you do so with a bot. Customer support is a subset of this. But in general anything like scheduling assistant, personal assistant etc.</p><p>4) Complex UI</p><p>I believe that this is the biggest opportunity for chatbots. Applications where the GUI is super complicated and you have to train people to use it.</p><p>A very good example I like to give for this is Photoshop. I have been wanting to learn to use photoshop I still don’t. But imagine if I could just upload an image and tell photoshop through voice or text the changes I want and it does it. That would be super cool wouldn’t it!</p><p>The hype is damaging the field and leading to people doubting the entire field. I hope in 2017 people start focussing on problems and solve real customer pain points and if the best way to solve it happens to be through a bot (there are lot of these, trust me), then by building a bot. It’s going to be an exciting year, nevertheless.</p><p><em>Originally published at </em><a href="http://blog.ozz.ai/why-chatbots-will-not-kill-apps-or-webistes/"><em>blog.ozz.ai</em></a><em> on January 7, 2017.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e3b7bc7a9f43" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why I quit my job at Microsoft to start a Startup]]></title>
            <link>https://medium.com/hackernoon/why-i-quit-my-job-at-microsoft-to-start-a-startup-9b4d82545726?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/9b4d82545726</guid>
            <category><![CDATA[startup]]></category>
            <category><![CDATA[entrepreneurship]]></category>
            <category><![CDATA[microsoft]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Fri, 23 Dec 2016 10:35:12 GMT</pubDate>
            <atom:updated>2019-05-15T07:10:22.230Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*GQaxYkX_WJxbim2yCTqmsA.jpeg" /></figure><p>Today was my last day at Microsoft. I decided to quit my job after 1.5 years of an amazing learning experience. In all my time here I don’t think there has ever been a time where I regretted joining Microsoft. Sure there were moments where I wasn’t happy with the way things were shaping up but that’s part of the journey.</p><p>Overall I think Microsoft is one of the best things that has ever happened to me. Making the decision to leave wasn’t an easy one and was made after a lot of contemplation and thought put into it.</p><p>I apologize beforehand but this is going to be a long post. For people who need a quick summary, this is it</p><blockquote>I know startup is what I want to do and there is no better time than now</blockquote><h3><strong>So Why did I Quit?</strong></h3><p>I don’t really remember why but by the end of my third year in college, I knew that I wanted to one day start my own company. Maybe it was the joy of making something and see other people use it and have full control over the process or maybe it was me just following the Fad.</p><p>I had started working on my own <a href="https://hackernoon.com/tagged/startup">startup</a> Intigrent, where we were basically trying to make an online course platform with a few new features. We wanted the online courses to be more personalized. Maybe it was a good idea, maybe it was a terrible idea. I will never know because 9 months into the startup me and my co-founder had a fight and we decided to part ways. I graduated college and joined <a href="https://hackernoon.com/tagged/microsoft">Microsoft</a> after this.</p><p>I continued working on the idea on weekends and brought in a new co-founder. She was my best friend at the time. We made a pivot in the idea because we felt making content would be a huge challenge. So instead we decided to focus on leveraging existing online content and making personalized curriculum for school kids. But 5 months into the startup, she and I had a personal falling out which was also a death blow to the professional relationship.However I still believe that this is a very good idea but maybe I am not the right person to build it.</p><p>So by now I had experienced both losing personal relationship due to professional fight and losing professional relationship due to personal fight. The personal fight however had a big impact on me and maybe in some ways I am still trying to cope with it. But post these 2 experiences I thought maybe startups weren’t my thing and I should just get back to regular work and try to build a strong career at Microsoft.</p><p>And I tried, I tried really hard to put all my focus on my work at Microsoft. But I would always get excited when I heard a new startup idea or came up with one myself.</p><blockquote>After-all the heart wants what it wants</blockquote><p>I was just starting to explore what chatbots meant during this time by building a few useless fun bots like pokedex and a personal resume bot. But as I explored more about this field I realized that 98% of the chatbots out there suck and this was an AI problem and not how easy it to build a bots problem. So I came up with the idea of <a href="http://ozz.ai/">http://ozz.ai</a> which helps people make smarter chatbots.</p><p>I was pretty convinced that this is what I wanted to work on and made the decision to quit. It was a hard decision to quit my comfortable, well paying job but I only had to answer one question, whats the downside?</p><p>I think most people think of risk the wrong way. There is no risk in quitting a job, the risk is in staying back. Think of it this way. You are 23, have no family to take care of, can survive on fast food and have a long career ahead of you. This exact combination happens once in your life, just once. You will have 100s of opportunities to work for a big company but you are 23 only once.</p><p>Having realized that, the decision was pretty much made and I was lucky that my parents understood my point of view and supported me in this.</p><h3><strong>Why not work on it part-time?</strong></h3><p>By far this is one of the most common questions I get. “Why don’t you work on this in your free time?”, “Why don’t you work on this during weekends?”</p><p>I believe that this a fundamentally wrong approach. Startups are hard, I know from my two failed experiences that there are so many things that can go wrong and most of them at some point will. You need a lot of focus and will to get over these and keep moving on. I think startups are one of those things where you are either all in or you are not. There is no middle ground.</p><p>Reid Hoffman, founder of LinkedIn, famously said starting a startup is like “throwing yourself off a cliff and assembling an airplane on the way down.” To start a startup while having a day job is like throwing yourself off a cliff but with a parachute on. When things get hard you are going to deploy the parachute.</p><p>The only way to maximize your odds of actually building the airplane is to have no parachute, no backups and nothing to go back to.</p><h3><strong>What’s next?</strong></h3><p>I am not sure if ozz will work out or not but the one thing I am sure of is, I won’t have regrets. And the failure wouldn’t have been for lack of trying.</p><figure><a href="http://bit.ly/HackernoonFB"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0hqOaABQ7XGPT-OYNgiUBg.png" /></a></figure><figure><a href="https://goo.gl/k7XYbx"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Vgw1jkA6hgnvwzTsfMlnpg.png" /></a></figure><figure><a href="https://goo.gl/4ofytp"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*gKBpq1ruUi0FVK2UM_I4tQ.png" /></a></figure><blockquote><a href="http://bit.ly/Hackernoon">Hacker Noon</a> is how hackers start their afternoons. We’re a part of the <a href="http://bit.ly/atAMIatAMI">@AMI</a> family. We are now <a href="http://bit.ly/hackernoonsubmission">accepting submissions</a> and happy to <a href="/service/mailto:partners@amipublications.com">discuss advertising &amp; sponsorship</a> opportunities.</blockquote><blockquote>If you enjoyed this story, we recommend reading our <a href="http://bit.ly/hackernoonlatestt">latest tech stories</a> and <a href="https://hackernoon.com/trending">trending tech stories</a>. Until next time, don’t take the realities of the world for granted!</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*35tCjoPcvq6LbB3I6Wegqw.jpeg" /></figure><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fupscri.be%2Fdde502%3Fas_embed%3Dtrue&amp;dntp=1&amp;url=https%3A%2F%2Fupscri.be%2Fhackernoon%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=upscri" width="800" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/3c851dac986ab6dbb2d1aaa91205a8eb/href">https://medium.com/media/3c851dac986ab6dbb2d1aaa91205a8eb/href</a></iframe><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9b4d82545726" width="1" height="1" alt=""><hr><p><a href="https://medium.com/hackernoon/why-i-quit-my-job-at-microsoft-to-start-a-startup-9b4d82545726">Why I quit my job at Microsoft to start a Startup</a> was originally published in <a href="https://medium.com/hackernoon">HackerNoon.com</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using Dialogflow with microsoft bot framework]]></title>
            <link>https://medium.com/chat-bots/using-api-ai-with-microsoft-bot-framework-577a5d9fb66f?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/577a5d9fb66f</guid>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[bots]]></category>
            <category><![CDATA[microsoft-bot-framework]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Tue, 06 Dec 2016 08:13:00 GMT</pubDate>
            <atom:updated>2018-03-28T16:42:36.922Z</atom:updated>
            <content:encoded><![CDATA[<p>Note: If you want a more in depth tutorial on Bot Framework you can get my book on it at <a href="https://www.manning.com/books/building-chatbots-with-microsoft-bot-framework-and-nodejs">https://www.manning.com/books/building-chatbots-with-microsoft-bot-framework-and-nodejs</a></p><p>Unless you have been living in a cave with no internet access, you must have heard about how <strong>chatbots</strong> are the next biggest thing and how they will completely replace apps. The jury is still out on whether that’s true.</p><p>But we can’t ignore the fact that all major companies have been betting on this new field. Facebook, Microsoft, Google, Amazon are all in on the craze.</p><p>Microsoft’s offering ‘Microsoft Bot Framework’ is the most interesting offering according to me <em>(disclaimer: I used to work at Microsoft)</em>. It lets you easily build bots for multiple platforms like</p><ul><li>Facebook Messenger</li><li>Slack</li><li>Telegram</li><li>Kik</li><li>SMS (twilio)</li><li>Email</li><li>Skype</li><li>Skype Teams</li></ul><p>You can write code either in node.js or C#. The best thing however about the framework is how easy it makes to maintain and store data through multiple databags like SessionData, UserData and ConversationData.</p><p>Natural Language Processing is a very critical piece for building amazing chatbots. Microsoft Bot Framework lets you easily do this by providing built-in support for luis.ai (part of microsoft cognitive services offering for language processing). However not everyone might want to use LUIS as it requires you to have an azure subscription (starting dec 31).</p><p>So I coded up a small npm module <a href="https://www.npmjs.com/package/api-ai-recognizer">api-ai-recognizer</a> to use Dialogflow (previously api.ai) instead of LUIS with microsoft bot framework. In this tutorial I will show you how you can build a simple weather bot using api.ai and Microsoft Bot Framework.</p><h4>Tutorial</h4><p>I apologize for the long intro but I felt it was important to set context. So let’s get started with building the bot.</p><p>We will be using node.js for building the bot and then deploy it to Microsoft Bot Framework Service. You can then deploy it to a channel of your choice.</p><p>Btw, if you are the sort of person who would prefer skipping right to the end, here’s the github link to the code: <a href="https://github.com/GanadiniAkshay/weatherBot/tree/master/api.ai">full code link</a></p><p>Step 1: Set up Environment</p><p>Make sure you have node.js and npm installed.</p><p>The first thing we have to do is create a directory so lets go ahead and create a directory called weather-bot. Now cd into the directory.</p><pre>mkdir weather-bot cd weather-bot</pre><p>Now lets initialize npm so we can download the required packages. Run the following command and accept all the defualt options.</p><pre>npm init</pre><p>Verify that npm has been initialized by checking if a file called package.json has been created. Once you have verified that lets install the required packages.</p><p>To start off we only need two packages</p><p>1) botbuilder — For using microsoft bot builder <br> 2) api-ai-recognizer — For using api.ai for NLP</p><p>Let’s go ahead and install both packages by running the following command</p><pre>npm install --save botbuilder api-ai-recognizer</pre><p>Step 2: Create a basic echo bot</p><p>So in this step we will create a very basic bot that will just echo what we say. It’s pretty dumb but it’s a start and in the next steps we will build on top of it.</p><p>Once the npm packages have installed, create a file called index.js in the root directory and paste in the following code</p><pre>var builder = require(&#39;botbuilder&#39;); var connector = new builder.ConsoleConnector().listen(); var bot = new builder.UniversalBot(connector); bot.dialog(&#39;/&#39;,function(session){ session.send(&quot;You said %s&quot;, session.message.text); });</pre><p><strong>Note</strong> : For this simple case we are using ConsoleConnector as it lets us test the bot from our console directly.</p><p>You can test the bot by starting the node server and directly chatting on the console.</p><pre>node index.js hi You said hi hello You said hello</pre><p>Step 3: Create the natural language understanding model</p><p>In this step we will be building a natural language processing model on api.ai so that our bot will be able to understand human language queries like</p><blockquote><em>what’s the weather in new york tomorrow?</em></blockquote><p>The first thing is to head to <a href="https://dialogflow.com/">Dialogflow</a> and create an account.</p><p>Next create an agent called weather-bot by filling in the required details</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*mbgS_hvOTpX2pDQa.png" /></figure><p>The next step is to create an intent. An intent is basically a way to figure out what the intended action is for a given natural language text.</p><p>So let’s create a intent called whatIsWeather to classify all queries where a user wants to find out the weather. (It’s not neccessary to name your intents without spaces. It’s just a convention I like to follow.)</p><p>Give the following example utterances</p><ul><li>What is the weather?</li><li>what’s weather like now?</li><li>how is the climate?</li><li>how’s the weather?</li></ul><p>In a real application you would provide more examples but for the purposes of this demo these should do good.</p><p>You can give it a response if you want but we won’t really be using it in this demo.</p><p>Once you have created the intent you can save it and check if it’s working by using the try it now chat section on the right side of the website. You should be able to see that the intent gets recognized.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*vj_KYX3q3dcWJFmD.png" /></figure><p>Step 3: Connect api.ai with Microsoft Bot Framework</p><p>This is the step where the magic happens. But before we connect api.ai to our code we need to grab the client token. To do this just click on the agent dropdown and select view all agents.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/685/0*_f34AdrwMLlyy1n9.png" /></figure><p>Select the weather-bot agent from the list of agents and you should be able to find your client access token there</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/784/0*lNWNxa5Vns7NtFRS.png" /></figure><p>Now change index.js as the following code to make the connection</p><pre>var builder = require(&#39;botbuilder&#39;); var apiairecognizer = require(&#39;api-ai-recognizer&#39;); var connector = new builder.ConsoleConnector().listen(); var bot = new builder.UniversalBot(connector); var recognizer = new apiairecognizer(&lt;api.ai token&gt;); var intents = new builder.IntentDialog({ recognizers: [recognizer] }); bot.dialog(&#39;/&#39;,function(session){ session.send(&quot;You said %s&quot;,session.message.text); });</pre><p><strong>Note:</strong> <em>Don’t forget to put in your client token</em></p><p>This code basically creates an intent recognizer which will try to recognize any incoming text based on our api.ai model.</p><p>Now lets use it. Replace your previous bot.dialog code with the one below</p><pre>bot.dialog(&#39;/&#39;,intents); intents.onDefault(function(session){ session.send(&quot;Sorry...can you please rephrase?&quot;); });</pre><p>Basically what we are doing above is pass all the messages to the api.ai intent recognizer and then setting up a default handler. This is where you put your infamous “Sorry..I couldn’t understand” type of messages.</p><p>Once having added this code, try to run it. It should give the default response to anything you say, because we only specified the default case.</p><p>Let’s add the handler to recognize the whatIsWeather intent we created earlier.</p><pre>bot.dialog(&#39;/&#39;,intents); intents.matches(&#39;whatIsWeather&#39;,function(session){ session.send(&quot;It&#39;s 27 degrees celsius&quot;); }); intents.onDefault(function(session){ session.send(&quot;Sorry...can you please rephrase?&quot;); });</pre><p>We have hardcoded the response right now but we will hook it up to an API later.</p><p>If we run the app now, it should be able to recognize the statements which are similar to the ones we trained the intent with before.</p><pre>node index.js whats the weather It&#39;s 27 degrees celsius Hi Sorry...can you please rephrase?</pre><p>Even though the bot just says 27 degrees all the time we have made some progress. We have a functional bot.</p><p>Before we make it more accurate by getting some real weather data, lets add a few interesting things.</p><p>What I have observed from making a few fun bots is users expect your bot to be good at smalltalk at the least good at handling greetings like hello, good morning and other such stuff.</p><p>We could train our api.ai models to understand this but there is a easier way, thanks to the good people at api.ai. They have pre-built training for a few domains.</p><p>You can turn on/off domains by clicking on the domains tab in the left menu. For this demo we will be turning on the smalltalk domain.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*nT-pre6QV5nzVN7q.png" /></figure><p>Once you have turned the smalltalk domain on we need to plug in some code to make sure our bot handles this. To handle all smalltalk greetings, we will add a new handler to recognise the intent smalltalk.greetings.</p><pre>intents.matches(&#39;smalltalk.greetings&#39;,function(session){ session.send(&#39;This is smalltalk&#39;); });</pre><p>Here we are basically logging out the fact that we understand that the phrase user sent is smalltalk of type greetings. Not super useful to the user, but good for us for debugging. Save the file and run the code.</p><pre>node index.js hi this is smalltalk good morning this is smalltalk bye this is smalltalk</pre><p>This is super cool. Even though we have not trained our bot to understand any of these phrases manually, it understands them, thanks to Domains.</p><p>One more great thing about domains in api.ai is it not only helps your bot understand smalltalk phrases but it also has preconfigured replies (you can edit/customize it though). Let’s use these in our bot. These are called fulfillments. Plugin the following code to use fulfillments.</p><pre>intents.matches(&#39;smalltalk.greetings&#39;,function(session, args){ var fulfillment = builder.EntityRecognizer.findEntity(args.entities, &#39;fulfillment&#39;); if (fulfillment){ var speech = fulfillment.entity; session.send(speech); }else{ session.send(&#39;Sorry...not sure how to respond to that&#39;); } });</pre><p>Please note the additional args argument passed to the callback function in the handler. Don’t worry about all the entity stuff in the code. I will explain that in a while.</p><p>Now save the code and restart the app to test it.</p><pre>node index.js hi Hey. good morning Top of the morning to you!</pre><p>The exact replies might be different for you because the replies are selected randomly from a list of possible replies. But the reply should be something sensible.</p><p>Step 4: Get Weather Data from API</p><p>In this step we will be getting the real weather data from the <a href="https://www.apixu.com/">APIXU</a> current weather api.</p><p>The API will require one parameter, the city name whose current weather data we will need.</p><p>We will get these parameter out of the user’s query and if he doesn’t provide it, we will explicitly ask the user to provide a city name.</p><p>These parameters in NLP terms are called entities and we will have to train our api.ai models to understand and extract these entities. So lets do that.</p><p>Click on entities in the left menu and select create new entity and create a new entity called cities and put in some example city names.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yDLQqxmGEJfGUcyG.png" /></figure><p>In a real world scenario you would be using pre-built entities which have already been trained with a lot of examples. But we will make do with this for the purposes of this bot. Don’t forget to click on the save button once you are done adding examples.</p><p>Now lets train api.ai to understand the cities entity. Go back to intents and click on whatIsWeather intent. Let’s add a few examples which have city name in the sentence.</p><p>Something like</p><blockquote><em>What’s the weather in paris?</em></blockquote><p>The entity should be auto detected. Make sure its your entity and not a prebuilt entities. Prebuilt entity names have the format sys.name. Add a few examples and then save the intent.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iIXCpbVNtHOoDrG0.png" /></figure><p>Now lets add some code to pull out the entity information from the phrase. It will be very similar to the fulfillments code.</p><pre>intents.matches(&#39;whatIsWeather&#39;,function(session,args){ var city = builder.EntityRecognizer.findEntity(args.entities,&#39;cities&#39;); if (city){ var city_name = city.entity; session.send(&quot;It&#39;s 27 degrees celsius in &quot; + city_name); }else{ session.send(&quot;It&#39;s 27 degrees celsius&quot;); } });</pre><p>Now if you save and restart the app, it should be able to get the city info.</p><pre>node index.js what is the weather in paris It&#39;s 27 degress celsius in Paris</pre><p>We however have to still handle the case where city is not given. We can do this by issuing a prompt to user asking him for a city name. Here’s the code to do that</p><pre>intents.matches(&#39;whatIsWeather&#39;,[ function(session,args){ var city = builder.EntityRecognizer.findEntity(args.entities,&#39;cities&#39;); if (city){ var city_name = city.entity; session.send(&quot;It&#39;s 27 degrees celsius in &quot; + city_name); }else{ builder.Prompts.text(session, &#39;Which city do you want the weather for?&#39;); } }, function(session,results){ session.send(&quot;It&#39;s 27 degrees celsius in &quot; + results.response); } ]);</pre><p>Okay there is a lot going on in there. So let me break it down. Microsoft bot framework lets you chain functions for handlers by passing in an array of functions. You can use this to run functions one after other collecting data and using it in the next function. You use prompts to ask for data. You can read more about this in the <a href="https://docs.botframework.com/en-us/node/builder/guides/core-concepts/#navtitle">official documentation</a>.</p><p>Now you can save the app and restart and it should prompt for city if you don’t provide it.</p><pre>node index.js what is the weather? Which city do you want the weather for? orlando It&#39;s 27 degrees celsius in orlando</pre><p>Now that we have this working, lets hook it up to the api and get real weather data.</p><p>So firstly create an account for yourself on <a href="https://www.apixu.com/">APIXU</a>. Once you do that you will get a API Access Key and you can play around the API by clicking on getting started. Put in a few city names and get a feel of how it works.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*XXL7W2SDNVUmRD6f.png" /></figure><p>Keep your api access key handy we will be needing it to make the api calls. We will be using the request module on npm to make the calls, so lets start by installing it.</p><pre>npm install --save request</pre><p>Once we have request installed lets require it by adding in the following lines at the top of index.js</p><pre>var request = require(&#39;request&#39;);</pre><p>Now that we have access to request module lets put in code to get weather data from API</p><pre>intents.matches(&#39;whatIsWeather&#39;,[ function(session,args){ var city = builder.EntityRecognizer.findEntity(args.entities,&#39;cities&#39;); if (city){ var city_name = city.entity; var url = &quot;http://api.apixu.com/v1/current.json?key=&lt;Your API Key&gt;&amp;q=&quot; + city_name; request(url,function(error,response,body){ body = JSON.parse(body); temp = body.current.temp_c; session.send(&quot;It&#39;s &quot; + temp + &quot; degrees celsius in &quot; + city_name); }); }else{ builder.Prompts.text(session, &#39;Which city do you want the weather for?&#39;); } }, function(session,results){ var city_name = results.response; var url = &quot;http://api.apixu.com/v1/current.json?key=&lt;Your API key&gt;&amp;q=&quot; + city_name; request(url,function(error,response,body){ body = JSON.parse(body); temp = body.current.temp_c; session.send(&quot;It&#39;s &quot; + temp + &quot; degrees celsius in &quot; + city_name); }); } ]);</pre><p><strong>NOTE: Don’t forget to put in your API key</strong></p><p>Once you save and restart your app, it should be working as expected.</p><pre>node index.js whats the weather in paris It&#39;s 4 degrees celsius in Paris whats the weather Which city do you want the weather for? Beijing It&#39;s -4 degrees celsius in Beijing</pre><p>Step 5: Deploy your Bot</p><p>In this final step we will be deploying our bot and then you can use Microsoft Bot Connector to connect it to channels of your choice.</p><p>We will be using heroku for hosting as it is pretty straightforward and has a free tier.</p><p>First lets set up version control</p><pre>git init</pre><p>Before adding and committing the files lets add a .gitignore to ignore node_modules folder as we don’t want to version control or deploy this.</p><p>Add a file called .gitignore in the root folder and paste in the following</p><pre>node_modules/</pre><p>Now lets add and commit the files</p><pre>git add . git commit -m &quot;basic bot setup done&quot;</pre><p>Download and install heroku on your system following instructions from <a href="https://devcenter.heroku.com/articles/heroku-cli">here</a>.</p><p>While it installs add a new file called Procfile to root folder. This file will tell heroku what command to run to start your web. Paste in the following into the file.</p><pre>web: node index.js</pre><p>Before we deploy there are a few code changes we need to make in index.js</p><p>We need to install a few npm modules to get this done. So run the following command.</p><pre>npm install --save restify</pre><p>Once the install is done, replace the following code</p><pre>var builder = require(&#39;botbuilder&#39;); var apiairecognizer = require(&#39;api-ai-recognizer&#39;); var request = require(&#39;request&#39;); var connector = new builder.ConsoleConnector().listen();</pre><p>with</p><pre>var builder = require(&#39;botbuilder&#39;); var restify = require(&#39;restify&#39;); var apiairecognizer = require(&#39;api-ai-recognizer&#39;); var request = require(&#39;request&#39;); //========================================================= // Bot Setup //========================================================= // Setup Restify Server var server = restify.createServer(); server.listen(process.env.port || process.env.PORT || 3978, function () { console.log(&#39;%s listening to %s&#39;, server.name, server.url); }); // Create chat bot var connector = new builder.ChatConnector({ appId: &lt;MICROSOFT_APP_ID&gt;, appPassword: &lt;MICROSOFT_APP_PASSWORD&gt; });</pre><p>You can get your Microsoft APP ID and APP Password by registering your bot on the <a href="https://dev.botframework.com/bots/new">Microsoft Bot Framework Service</a></p><p><em>For now leave the Messaging endpoint field empty. We will get back to it.</em></p><p>Once you put in the Microsoft App ID and password into the code, run the following commands to deploy to heroku.</p><pre>heroku create git push heroku master heroku open</pre><p>The last command must open the heroku url where your bot is hosted. Copy it and go back to your bot registration on Microsoft Bot Framework site.</p><p>Paste in the url in the messaging endpoint. <strong>Add /api/messages to the end of the url</strong>.</p><p>Messaging Endpoint : <a href="http://.herokuapp.com/api/messages">http://.herokuapp.com/api/messages</a></p><p>Save the configuration and your done. Now you can deploy it to channels of your choice by following the excellent documentation on the site.</p><p>Congrats on building a fully functional weather bot.</p><p><em>Originally published at </em><a href="http://blog.ozz.ai/using-api-ai-with-microsoft-bot-framework/">http://blog.ozz.ai/using-api-ai-with-microsoft-bot-framework/</a><em> on December 6, 2016.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=577a5d9fb66f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/chat-bots/using-api-ai-with-microsoft-bot-framework-577a5d9fb66f">Using Dialogflow with microsoft bot framework</a> was originally published in <a href="https://medium.com/chat-bots">Chatbots Magazine</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why anti-feminists could be the strongest feminists]]></title>
            <link>https://medium.com/@akshaykulkarni/why-anti-feminists-could-be-the-strongest-feminists-acc98e6b9bc7?source=rss-e9ca4f68c727------2</link>
            <guid isPermaLink="false">https://medium.com/p/acc98e6b9bc7</guid>
            <category><![CDATA[feminism]]></category>
            <category><![CDATA[women]]></category>
            <category><![CDATA[gender-equality]]></category>
            <dc:creator><![CDATA[Akshay Kulkarni]]></dc:creator>
            <pubDate>Sun, 18 Sep 2016 08:00:19 GMT</pubDate>
            <atom:updated>2016-09-18T08:00:19.161Z</atom:updated>
            <content:encoded><![CDATA[<p>I completely believe that the anti-feminists from around the world have the potential to become the strongest feminists around. I will try my best to explain why in this article.</p><p>Before we start going into the reasons let’s define the terms as there seems to be a huge misunderstanding around them. Wikipedia defines feminism as</p><blockquote>Feminism is a range of political movements, ideologies, and social movements that share a common goal: to define, establish, and achieve political, economic, personal, and social rights for women that are equal to those of men.This includes seeking to establish equal opportunities for women in education and employment.</blockquote><p>The keyword in the above definition is EQUAL. Also for some reason there seems to be a taboo around the word feminists. But I don’t see any reason behind it. I am a feminist and I am proud of it. To be honest I feel sad that I have to point it out that I am a feminist, everyone should be. It should be the natural state of things.</p><p>Next let me define what I mean by anti-feminists. I do not refer to people who do not believe that women deserve equal rights. I am referring to the people who have misunderstood the meaning of feminism to mean female dominance or female superiority.</p><p>I see complaints against feminism everyday on the social media and some of them are plain stupid.</p><p>The general theme of all complaints is however the same.</p><blockquote>A girl/woman tried to take or took advantage of the fact that she is a girl/woman and the whole feminist movement to get some unfair advantage</blockquote><p>People get really emotional over this even calling for a total stop on the feminist movement and criticising feminism.</p><p>But let’s analyse the argument. It basically says a person from one gender got an undue advantage based on their gender and nothing else. And this pisses them off because it happened to them once or maybe twice. But if they could understand that women have been going through this for generations they will probably understand the magnitude of being pissed off the women deserve to be.</p><p>If one such incident in your life could piss you off so much imagine how it would feel to have it everyday of your life for generations together.</p><p>And once they get this perspective and understand the pain they could be the strongest proponents because they have experienced undue advantage to a gender albeit in a fraction of what the women actually face, but they get the pain nevertheless. They will be the strongest feminists as this is the exact thing that feminism is trying to fight, undue advantage based on gender.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=acc98e6b9bc7" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>