<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-11685859</id><updated>2026-03-01T04:53:56.379+05:30</updated><category term="Agile"/><category term="PHP"/><category term="HTTP"/><category term="web"/><category term="REST"/><category term="Lifehack"/><category term="converspace"/><category term="estimation"/><category term="startup"/><category term="AI"/><category term="ChatGPT"/><category term="CoPilot"/><category term="GenAI"/><category term="LLM"/><category term="The-Art-of-Achieving"/><category term="business"/><category term="software development"/><category term="swx"/><category term="Notes To Self"/><category term="indieweb"/><category term="inertia"/><category term="owe.to"/><category term="web application framework"/><category term="activity-web"/><category term="bombay"/><category term="design"/><category term="open-source"/><category term="programming"/><category term="AceSeller"/><category term="Browserland HTTP"/><category term="GTD"/><category term="Leadership"/><category term="Shopify"/><category term="Teams"/><category term="quote"/><category term="security"/><category term="testing"/><category term="Android"/><category term="Business-Model"/><category term="Design Principles"/><category term="Lean Startup"/><category term="Linux"/><category term="Native Apps"/><category term="Presentation"/><category term="Resource-Oriented Programming"/><category term="TDD"/><category term="Talk"/><category term="activity-pingback"/><category term="git"/><category term="iOS"/><category term="minimizing"/><category term="money"/><category term="perfection"/><category term="pricing"/><category term="rewritepad"/><category term="shopify.php"/><category term="webarch"/><category term="API"/><category term="Apple"/><category term="Fliptabify"/><category term="MVP"/><category term="Mumbai"/><category term="Niche-Product-Strategy"/><category term="OOP"/><category term="OboxApps"/><category term="Paleo"/><category term="Paytm"/><category term="ROP"/><category term="Uber"/><category term="Ubuntu"/><category term="Values"/><category term="Wii"/><category term="XP"/><category term="Zen-Programming"/><category term="ace"/><category term="activitypush"/><category term="activityweb"/><category term="book"/><category term="callout labels"/><category term="capoeira"/><category term="cli"/><category term="closure"/><category term="coaching"/><category term="codemirror"/><category term="deployment"/><category term="duplication"/><category term="editor"/><category term="engineering"/><category term="exercise"/><category term="federated-social-web"/><category term="fitness"/><category term="forms"/><category term="fsf"/><category term="github"/><category term="google+"/><category term="gpl"/><category term="habit"/><category term="iphone"/><category term="javascript"/><category term="legacy-code"/><category term="lol"/><category term="machine-tags"/><category term="mentions"/><category term="metadata"/><category term="microformats"/><category term="oss"/><category term="phone"/><category term="poem"/><category term="problem solving"/><category term="procedural programming"/><category term="product development"/><category term="programming paradigms"/><category term="projects"/><category term="retail"/><category term="retest.php"/><category term="rules"/><category term="sf.net"/><category term="ship"/><category term="software craftsmanship"/><category term="software design"/><category term="software maintenance"/><category term="software training"/><category term="spoted"/><category term="stories"/><category term="tagging"/><category term="tags"/><category term="triple-tags"/><category term="twitter"/><category term="unix"/><category term="ux"/><category term="version control"/><category term="video game console"/><category term="web application design"/><category term="webhooks"/><category term="webmention"/><title type='text'>Sandeep Shetty&#39;s Blog</title><subtitle type='html'>Getting from becoming to being...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>177</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11685859.post-8363129147547133010</id><published>2025-07-03T23:08:00.008+05:30</published><updated>2025-07-03T23:36:42.549+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="legacy-code"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><category scheme="http://www.blogger.com/atom/ns#" term="open-source"/><title type='text'>VS Code Commit Message Generation Prompt</title><content type='html'>&lt;p&gt;In a conversation with Jigar Gosar today we were talking about how VS Code does a decent job of generating git commit messages in the Source Control Sidebar and how he was trying to come up with his own prompt to do it directly from the Copilot chat window.&lt;/p&gt;&lt;p&gt;Since VSCode is open-source and&amp;nbsp;&lt;a href=&quot;https://sandeep.shetty.in/2025/06/genai-is-great-for-understanding-legacy.html&quot; target=&quot;_blank&quot;&gt;GenAI is great for understanding open-source code&lt;/a&gt;,&amp;nbsp;I immediately thought of looking for the prompt used by it.&amp;nbsp;I first went to the &lt;a href=&quot;https://github.com/microsoft/vscode&quot;&gt;VS Code repo&lt;/a&gt; and asked Copilot to find the relevant code. Copilot said it couldn&#39;t find anything related to AI-generated commit messages and instead asked me to look at integrations with GitHub Copilot. Since the VS Code Copilot Chat was also &lt;a href=&quot;https://github.com/microsoft/vscode-copilot-chat/&quot;&gt;open-sourced&lt;/a&gt; a &lt;a href=&quot;https://code.visualstudio.com/blogs/2025/06/30/openSourceAIEditorFirstMilestone&quot;&gt;few days ago&lt;/a&gt;, I went to it&#39;s repo and again asked Copilot to search and it quickly pointed me to the right place to look for it.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So here is a snippet of the prompt used to generating the commit message in VS Code:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;You are an AI programming assistant, helping a software developer to come with the best git commit message for their code changes.&lt;br /&gt;You excel in interpreting the purpose behind code changes to craft succinct, clear commit messages that adhere to the repository&#39;s guidelines&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;br /&gt;# First, think step-by-step:&lt;br /&gt;1. Analyze the CODE CHANGES thoroughly to understand what&#39;s been modified.&lt;br /&gt;2. Use the ORIGINAL CODE to understand the context of the CODE CHANGES. Use the line numbers to map the CODE CHANGES to the ORIGINAL CODE.&lt;br /&gt;3. Identify the purpose of the changes to answer the *why* for the commit messages, also considering the optionally provided RECENT USER COMMITS.&lt;br /&gt;4. Review the provided RECENT REPOSITORY COMMITS to identify established commit message conventions. Focus on the format and style, ignoring commit-specific details like refs, tags, and authors.&lt;br /&gt;5. Generate a thoughtful and succinct commit message for the given CODE CHANGES. It MUST follow the the established writing conventions.&lt;br /&gt;6. Remove any meta information like issue references, tags, or author names from the commit message. The developer will add them.&lt;br /&gt;7. Now only show your message, wrapped with a single markdown ```text codeblock! Do not provide any explanations or details&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;Further:&lt;/p&gt;&lt;p&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;Now generate a commit messages that describe the CODE CHANGES.&lt;br /&gt;DO NOT COPY commits from RECENT COMMITS, but it as reference for the commit style.&lt;br /&gt;ONLY return a single markdown code block, NO OTHER PROSE!&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;You can find this in the following file:&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;a href=&quot;https://github.com/microsoft/vscode-copilot-chat/blob/main/src/extension/prompts/node/git/gitCommitMessagePrompt.tsx&quot;&gt;src/extension/prompts/node/git/gitCommitMessagePrompt.tsx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A quick scan of the code also &lt;a href=&quot;https://github.com/microsoft/vscode-copilot-chat/blob/d10eb10e0b005572f0b7c4e2cf83ebc8231f3787/src/extension/prompts/node/git/gitCommitMessagePrompt.tsx#L71&quot;&gt;shows that you can provide your own custom instructions for generating the commit message&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;GenAI can make a big difference in understanding and working with legacy code and contributing to open-source.&lt;/b&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/8363129147547133010/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/8363129147547133010' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/8363129147547133010'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/8363129147547133010'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/07/vscode-commit-message-generation-prompt.html' title='VS Code Commit Message Generation Prompt'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-1241437442462231472</id><published>2025-06-23T02:52:00.133+05:30</published><updated>2025-07-03T21:19:21.097+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>The GenAI Software Development Spectrum</title><content type='html'>&lt;div&gt;In my usage and conversations with other &quot;builders&quot;, here is the spectrum of GenAI usage I&#39;ve come across. &amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;L1. Ask/Consult&lt;/b&gt;&amp;nbsp;- &lt;i&gt;AI as a Knowledge Resource&lt;/i&gt;&lt;/h2&gt;&lt;div&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;Use AI as a replacement for reading manuals or documentation, and using Google or Stack Overflow&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Manual/Documentation Lookup&lt;/li&gt;&lt;li&gt;Explain/Understand Code&lt;/li&gt;&lt;li&gt;Ask about Best Practices and Options&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;L2. Augment&lt;/b&gt; - &lt;i&gt;AI as a&amp;nbsp;Pair Programmer&lt;/i&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Work together with the AI in small iterative increments where you bounce off ideas and take turns where you do some of the work and the AI does some of the work.&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Auto Complete&lt;/li&gt;&lt;li&gt;Debugging&lt;/li&gt;&lt;li&gt;Refactoring&lt;/li&gt;&lt;li&gt;Code Quality Review&lt;/li&gt;&lt;li&gt;Optimisation and Performance Review&lt;/li&gt;&lt;li&gt;Security Review&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;L3. Delegate&lt;/b&gt; - &lt;i&gt;AI as a Junior Programmer&lt;/i&gt;&lt;/h2&gt;&lt;div&gt;After some planning and discussion with the AI, give it tasks and have it write the code that you review before accepting the pull request.&amp;nbsp;&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Specs, Requirements, Plan with Tasks&lt;/li&gt;&lt;li&gt;Assign Tasks to AI to writes code&lt;/li&gt;&lt;li&gt;Review pull request for the code written by AI&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;&lt;b&gt;L4. Outsource&lt;/b&gt; - &lt;i&gt;AI as an Outsourced Freelancer or Agency&lt;/i&gt;&lt;/h2&gt;&lt;div&gt;You only care about the outward functionality of the software and you outsource the engineering/development to the AI.&lt;/div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Come up with the Spec and Requirements&lt;/li&gt;&lt;li&gt;Tell the AI to come with a plan and tasks&lt;/li&gt;&lt;li&gt;Ask the AI to &quot;build&quot; the software.&lt;/li&gt;&lt;li&gt;Test the functionality of the software as a user&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Questions for the Reader&lt;/h2&gt;&lt;div&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;How do you use GenAI?&lt;/li&gt;&lt;li&gt;Do you have a different model for thinking about this?&lt;/li&gt;&lt;li&gt;Have you come across other ways of GenAI usage in software development?&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/1241437442462231472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/1241437442462231472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1241437442462231472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1241437442462231472'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/the-genai-software-development-spectrum.html' title='The GenAI Software Development Spectrum'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-4079815671075325510</id><published>2025-06-21T01:11:00.005+05:30</published><updated>2025-07-03T23:15:01.426+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>GenAI is great for Understanding Legacy Code and Open Source Contribution</title><content type='html'>&lt;p&gt;While GenAI can be a high speed legacy code water hose, that can be used to create tons of legacy code &lt;b&gt;instantly&lt;/b&gt;, it&#39;s also a great tool for understanding legacy codebases and orienting yourself. &amp;nbsp;It can also be used to build ephemeral test scaffolding to get a safety net before making changes to the legacy code.&amp;nbsp;&lt;/p&gt;&lt;p&gt;This, IMO, is not just great for managing legacy code, it&#39;s also great for open source software. You can use GenAI to quickly understand the codebase &quot;just enough&quot; to make the contributions you want to make.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/4079815671075325510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/4079815671075325510' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4079815671075325510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4079815671075325510'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/genai-is-great-for-understanding-legacy.html' title='GenAI is great for Understanding Legacy Code and Open Source Contribution'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-665927728768438632</id><published>2025-06-20T03:10:00.011+05:30</published><updated>2025-07-03T01:59:46.555+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>The GenAI Product Management Traps</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;Feature Factory / Kitchen Sink&lt;/h2&gt;&lt;div&gt;GenAI greatly reduces the barrier to directly and quickly build features which makes it very easy to act as a feature factory and build a kitchen sink of a product. One that is not true to a design or have an opinionated view.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;When implementation is cheap, it&#39;s easy to end up in a mess.&lt;/li&gt;&lt;li&gt;When you try to make everyone happy, you end up not making anyone happy.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Big Design Upfront / Waterfall Software Development&lt;/h2&gt;&lt;div&gt;In an attempt to prevent GenAI from making mistakes there is a focus on front loading effort in the specs and requirements.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;We need to iterate and have to discover what we are building&lt;/li&gt;&lt;li&gt;Action precedes clarity&lt;/li&gt;&lt;li&gt;Account for emergence&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All these issues boil down to the question of &lt;b&gt;Are We Building the Right Product?&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/665927728768438632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/665927728768438632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/665927728768438632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/665927728768438632'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/the-genai-product-management-traps.html' title='The GenAI Product Management Traps'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-3737400553253893980</id><published>2025-06-18T01:29:00.005+05:30</published><updated>2025-07-03T01:41:44.142+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>GenAI Multi-Pass</title><content type='html'>&lt;p&gt;Given the non-deterministic nature of GenAI and a near future where software development might not involve opening an IDE to write software, one way to catch issues might be to take a multi-pass approach where each pass is specialised for a specific purpose, so as to not overload the LLM with too many things to take care of at one time. Some of these multi-passes could be:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Coding Pass&lt;/li&gt;&lt;li&gt;Code Quality Pass&lt;/li&gt;&lt;li&gt;Security Pass&lt;/li&gt;&lt;li&gt;Performance Pass&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Each of these passes could result in improvements tasks and this could be an iterative process till a certain threshold is met.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/3737400553253893980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/3737400553253893980' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3737400553253893980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3737400553253893980'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/genai-multi-pass.html' title='GenAI Multi-Pass'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-662420145356796311</id><published>2025-06-17T03:09:00.007+05:30</published><updated>2025-07-03T01:10:37.869+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>The Excitement and Frustration of using GenAI for Software Developement</title><content type='html'>&lt;h2 style=&quot;text-align: left;&quot;&gt;Exciting&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The possibilities that GenAI enables makes software development truly exciting again.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Addictive&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;It&#39;s so easy to convert ideas to working software, it can be very addictive and you can quickly loose any sense of time.&amp;nbsp;&lt;/li&gt;&lt;li&gt;It keeps you from wasting time, being unproductive or procrastinating&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Frustrating&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The non-deterministic nature of GenAI can make it very frustrating.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot;&gt;Time Sink&lt;/h2&gt;&lt;div&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;It&#39;s very easy to get sucked into long conversations, and issues specific to GenAI, than spending time actually building.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/662420145356796311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/662420145356796311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/662420145356796311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/662420145356796311'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/the-excitement-and-frustration-of-using.html' title='The Excitement and Frustration of using GenAI for Software Developement'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-1651352036776022852</id><published>2025-06-15T00:54:00.010+05:30</published><updated>2025-07-03T01:00:09.635+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="ChatGPT"/><category scheme="http://www.blogger.com/atom/ns#" term="CoPilot"/><category scheme="http://www.blogger.com/atom/ns#" term="GenAI"/><category scheme="http://www.blogger.com/atom/ns#" term="LLM"/><title type='text'>My Criteria for when to use Vibe Coding</title><content type='html'>&lt;p&gt;&amp;nbsp;Here is my personal criteria for when it&#39;s appropriate to Vibe Code&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;ol style=&quot;text-align: left;&quot;&gt;&lt;li&gt;Internal Use / Personal Software&lt;/li&gt;&lt;li&gt;One-off throwaway tools/scripts/code&lt;/li&gt;&lt;li&gt;Experiments&lt;/li&gt;&lt;li&gt;Prototypes&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/1651352036776022852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/1651352036776022852' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1651352036776022852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1651352036776022852'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2025/06/my-criteria-for-when-to-use-vibe-coding.html' title='My Criteria for when to use Vibe Coding'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-1481180595617907922</id><published>2020-12-13T08:14:00.001+05:30</published><updated>2020-12-13T08:14:46.935+05:30</updated><title type='text'>The Hyderabadi Biryani Problem</title><content type='html'>&lt;p&gt;&amp;nbsp;&lt;span class=&quot;d2edcug0 hpfvmrgz qv66sw1b c1et5uql rrkovp55 a8c37x1j keod5gw0 nxhoafnm aigsh9s9 d3f4x2em fe6kdd0r mau55g9w c8b282yb iv3no6db jq4qci2q a3bd9o3v knj5qynh oo9gr5id hzawbc8m&quot; dir=&quot;auto&quot;&gt;Everyone
 says Hyderabadi Biryani is amazing but if you say you didn&#39;t like the 
Hyderabadi Biryani you tried, they will ask you which restaurant you 
tried it at and then the inevitable answer will be &quot;Oh, that one isn&#39;t 
good, you should try it at XYZ Biryani House&quot; and so on till infinity. 
There is ALWAYS a restaurant where the biryani is better than the one 
you didn&#39;t like.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD53zhyphenhyphenEvSxqbVPKNPWBMAXK7JmFG08IFKy9svD-zpUNTJ3Tenu9lwEODvvghnlVZlq_4kzst4DNjL2VMRlshTZh_cY1OgAXBS5fogCZMgOIm_VvZIGWarjb-dchZTU8apDxk_/s2048/Hyderabadi_Chicken_Biryani.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1365&quot; data-original-width=&quot;2048&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD53zhyphenhyphenEvSxqbVPKNPWBMAXK7JmFG08IFKy9svD-zpUNTJ3Tenu9lwEODvvghnlVZlq_4kzst4DNjL2VMRlshTZh_cY1OgAXBS5fogCZMgOIm_VvZIGWarjb-dchZTU8apDxk_/s320/Hyderabadi_Chicken_Biryani.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/1481180595617907922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/1481180595617907922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1481180595617907922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1481180595617907922'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2020/12/the-hyderabadi-biryani-problem.html' title='The Hyderabadi Biryani Problem'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD53zhyphenhyphenEvSxqbVPKNPWBMAXK7JmFG08IFKy9svD-zpUNTJ3Tenu9lwEODvvghnlVZlq_4kzst4DNjL2VMRlshTZh_cY1OgAXBS5fogCZMgOIm_VvZIGWarjb-dchZTU8apDxk_/s72-c/Hyderabadi_Chicken_Biryani.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-4659305078689906776</id><published>2020-10-03T08:42:00.015+05:30</published><updated>2020-10-05T20:39:05.524+05:30</updated><title type='text'>Stumbled upon another security hole at a well know Indian company&#39;s website that is leaking their customer&#39;s sensitive personal information</title><content type='html'>&lt;p&gt;&amp;nbsp;I&#39;ve stumbled upon another security hole at a well know &lt;span data-offset-key=&quot;c8nrl-0-0&quot;&gt;&lt;span data-text=&quot;true&quot;&gt;Indian company&#39;s website &lt;/span&gt;&lt;/span&gt;that is leaking their customer&#39;s sensitive information.&lt;/p&gt;&lt;p&gt;Just like the &lt;a href=&quot;https://sandeep.shetty.in/2013/12/security-breach-at-myntra.com.html&quot; target=&quot;_blank&quot;&gt;Myntra security hole&lt;/a&gt; that I found a long time ago (which resulted in them setting up their &lt;a href=&quot;https://www.myntra.com/security/whitehat&quot; target=&quot;_blank&quot;&gt;Responsible Disclosure Policy&lt;/a&gt;), this hole too is just something I stumbled upon while using their website regularly. I didn&#39;t have to do anything special that a regular user wouldn&#39;t do and there is no &quot;hack&quot; involved. It simply seems to be a case of bad implementation or a bug that anyone with a decent technical background can easily recognize and take advantage of.&lt;/p&gt;&lt;p&gt;My Myntra report was in Dec 2013 and in the 7 years since, nothing much has changed with Indian companies taking security seriously or even setting up a basic responsible disclosure policy 😔.&lt;/p&gt;&lt;p&gt;For now I&#39;ve sent an email to security@ their website address which thankfully didn&#39;t bounce and I&#39;ve also messaged them on a few of their social accounts. Will wait for them to respond and give them time to fix it before publishing more details.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update (Oct 5, 2020)&lt;/b&gt;: emails to security@ their website bounced after 24 hrs 😔&lt;/p&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpwywhV7joEX_OBKratyXul3D3OUtuCfnH9qFe26TGRxjeafw5GVl3APB91sISyZhvfRVSRJ40dEDYdWS4dLaInHXap69pOj_M9Olr4UI_FbrSaHM70dGrjO4bOEEd48ZYFHu/s1280/key-hole-2274790_1280.png&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1280&quot; data-original-width=&quot;1280&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpwywhV7joEX_OBKratyXul3D3OUtuCfnH9qFe26TGRxjeafw5GVl3APB91sISyZhvfRVSRJ40dEDYdWS4dLaInHXap69pOj_M9Olr4UI_FbrSaHM70dGrjO4bOEEd48ZYFHu/w320-h320/key-hole-2274790_1280.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Pic source: https://www.needpix.com/photo/download/929205/key-hole-eye-by-looking-spy-spying-on-watch-burglary-burglar-privacy-policy&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span class=&quot;py34i1dx&quot; style=&quot;font-size: xx-small;&quot;&gt;&lt;span data-offset-key=&quot;feupi-7-0&quot;&gt;&lt;span data-text=&quot;true&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/4659305078689906776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/4659305078689906776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4659305078689906776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4659305078689906776'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2020/10/stumbled-upon-another-security-hole-at.html' title='Stumbled upon another security hole at a well know Indian company&#39;s website that is leaking their customer&#39;s sensitive personal information'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPpwywhV7joEX_OBKratyXul3D3OUtuCfnH9qFe26TGRxjeafw5GVl3APB91sISyZhvfRVSRJ40dEDYdWS4dLaInHXap69pOj_M9Olr4UI_FbrSaHM70dGrjO4bOEEd48ZYFHu/s72-w320-h320-c/key-hole-2274790_1280.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-193965254939479150</id><published>2019-09-24T03:58:00.002+05:30</published><updated>2019-09-24T11:36:19.456+05:30</updated><title type='text'>Skinners are my new favorite minimalist footwear</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
8 years (March 2011) and 5 pairs (2 Classics, 1 Sprint, 1 KSO and 1 KSO EVO) of &lt;a href=&quot;https://us.vibram.com/shop/fivefingers/&quot; target=&quot;_blank&quot;&gt;Vibram Five Fingers (VFF)&lt;/a&gt;, 5 years (August 2014) and 4 pairs (1 Sensori Venture, 1 Amuri Venture, 1 Amuri Cloud, 1 Amuri Z-Trek) of &lt;a href=&quot;https://xeroshoes.com/&quot; target=&quot;_blank&quot;&gt;Xero Shoes&lt;/a&gt;, and 2 years and 2 pairs for &lt;a href=&quot;https://skinners.cc/&quot; target=&quot;_blank&quot;&gt;Skinners&lt;/a&gt; later, Skinners are my new favorite minimalist footwear. Here&#39;s why.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4nSFtR34RQv4bavkW4Pxg-GQyyKdImHLmbgqBomcvY32Sg4948wIs1cewzboeWuiOwPjQA8xodRyrQhRTkVowf_OeKha5KwEEhRQ3YXfFb6sNNvxI90_PbE1oPQbothdG3eFG/s1600/IMG_20190922_103823347.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4nSFtR34RQv4bavkW4Pxg-GQyyKdImHLmbgqBomcvY32Sg4948wIs1cewzboeWuiOwPjQA8xodRyrQhRTkVowf_OeKha5KwEEhRQ3YXfFb6sNNvxI90_PbE1oPQbothdG3eFG/s320/IMG_20190922_103823347.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Skinners on a trek passing through streams, slippery and sharp rocks, pebbles, gravel and the works.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Even though I got my first pair of Skinners back in July 2017 (I was one of the original backers of their &lt;a href=&quot;https://www.kickstarter.com/projects/skinners/skinners-revolutionary-ultraportable-footwear-with/&quot; target=&quot;_blank&quot;&gt;Kickstarter&lt;/a&gt; back in June 2017) I didn&#39;t use them much primarily because, as a long time VFF user, my toes felt very constrained in them (like in a regular shoe). I ended up using it as a backup shoe (in case the VFFs and Xeros give up on me, which they have) for my travels because it&#39;s super compact and easy to pack. So they were stored away ready to be used in case of emergencies, which basically meant I didn&#39;t use them much.&lt;br /&gt;
&lt;br /&gt;
A couple of months ago, when the nylon lace on my Xero Venture tore during a trek, I had to use my Skinners and really loved it. The trek was during the rains, with slippery and sharp rocks, pebbles, gravel and the works, and I really loved how Skinners felt. Having tried that same trek earlier, completely barefoot (only for a short distance and ended up with bruises on my feet), I really appreciated the minimal yet right amount of protection the Skinners provided. I was hooked.&lt;br /&gt;
&lt;br /&gt;
I needed the same feel as Skinners and started looking around again to see if I could find alternatives that wouldn&#39;t constrain my toes and stumbled upon suggestions to try Skinners one-size bigger than your normal shoe size (especially if you have wide feet, which mine are and have become even more wider after I gave up on regular footwear). So I decided to give it a shot and ordered another pair of Skinners, this time, one-size bigger than my normal shoe size.&lt;br /&gt;
&lt;br /&gt;
Having used them through most of the monsoon season here in Mumbai and for a variety of purposes including trekking, I can now say Skinner are my new favorite minimalist footwear.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;While the reasons why you would like one over the other will be different for everyone, here are my reasons for why I prefer them over VFFs and Xeros&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Skinners have the most minimalist sole of the lot offering more connection and feedback from the ground.&lt;/li&gt;
&lt;li&gt;I prefer minimalist footwear that cover my feet because it keeps my feet clean which is important to me because otherwise they get dry and crack when exposed to dust and the elements. Both VFFs and Skinners satisfy this criteria. When it comes to small puddles, I think Skinners do a better job as the water-resistant sole wraps around till the top and offers more protection (I used to get water seeping in on the VFFs where the sole meets the upper).&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaYEn4_9sz9mrImFo8zaTQEhckLQFnuTaf2Nf3Jdb3NTE4XpczJ_ESJ_nRnrFhJPqsQrUPjFIq2G9sON5OTcxEB-isltuserCZ4pWs0cjMtrtbUV9n3IAt_Cdcb3x4E0hFFd6c/s320/IMG_20190905_182447%257E2.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; width=&quot;240&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The wrap around water-resistant sole is perfect for small puddles.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Wraparound footwear also feels more minimal to me in the sense that I can use my feet naturally without having multiple elements of&amp;nbsp; the footwear get in the way like they do with the Xeros (had a few close calls while driving because the soles would get in the way and get stuck sometimes on pedal or mat).&lt;/li&gt;
&lt;li&gt;Except for my first few pair of Vibram Five Fingers (Classic, Sprint and the orignal KSO) each of which lasted me over 4 years, my experience with the newer VFFs (especially the KSO EVO) hasn&#39;t been very good when it comes to durability. I&#39;ve had a similar experience with Xeros. Since Skinners don&#39;t have glues or seams it looks like they&#39;ll last 
longer as there are no parts that can fall apart. The sole can still get 
worn out and the upper can possibly tear but I&#39;ll have to see how they hold up.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqx4iJm3gGcymI0kYAT8kihzEkUQIYk-tc_lv5t4YArZ7XwRKZZcYwrAwdgNTw86lyDaNv8N56KEwyCBZ34yeG1aYgTP1UxgYYyZLegoD0rA-VsGGxkJKbrUeQmc9oQIJdELsT/s1600/xero.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqx4iJm3gGcymI0kYAT8kihzEkUQIYk-tc_lv5t4YArZ7XwRKZZcYwrAwdgNTw86lyDaNv8N56KEwyCBZ34yeG1aYgTP1UxgYYyZLegoD0rA-VsGGxkJKbrUeQmc9oQIJdELsT/s320/xero.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;The hole that the lace goes through, torn on my first Xero.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Skinner are super compact and easy to carry along while traveling as a second shoe for emergencies, multi-sport (to slip into after bouldering or skateboarding) or the gym.&lt;/li&gt;
&lt;li&gt;Skinners are the easiest to get into and out of. &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;b&gt;A note about repairability&lt;/b&gt;: This is important to me because I would rather pay a premium for a pair that lasts me a long time than pay less and have to change my shoes very often resulting in more waste at the landfill. The one thing the Xeros have going for them is that you can easily repair them at least when it comes to the laces. With the VFFs I couldn&#39;t find anyone in Mumbai to glue the soles properly when they come off and have lost 3 of them to bad repair work 
(glue that made them very stiff and painful to wear). Hopefully the 
glue-less and seamless design of Skinners means they might last longer.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikFlKGUfNDVTcJ__xOwkBhJBVPJkLFOu3khCD6qASvzrPW8QBqNAuQaA3DmTMQCb3pZRzMlZAax4o74fRLP6B8pP8JRKk72vSa97uX7GuhfWT4mUmFth55ia7vRggWtWAjvBOn/s320/IMG_20190624_152950.jpg&quot; style=&quot;margin-left: auto; margin-right: auto;&quot; width=&quot;240&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Replacing the torn lace with a paracord I picked up from Amazon.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0Rr41utAB-laolITIyl1ibnQNfNp0AOAmQgkKibh0spLpNhXwU5wn1wy4In-kju0UBIiUOQO-7qSvSFTu61b7K4aJvygzWBDn-Jqv-5jdmpBwY1hjYm3rd1FXnAP-KrcOIeXR/s1600/IMG_20190624_160556.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1600&quot; data-original-width=&quot;1200&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0Rr41utAB-laolITIyl1ibnQNfNp0AOAmQgkKibh0spLpNhXwU5wn1wy4In-kju0UBIiUOQO-7qSvSFTu61b7K4aJvygzWBDn-Jqv-5jdmpBwY1hjYm3rd1FXnAP-KrcOIeXR/s320/IMG_20190624_160556.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Good as new!&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
I recently also got the &lt;a href=&quot;https://www.vivobarefoot.com/us/primusbio&quot; target=&quot;_blank&quot;&gt;Vivobarefoot Primus Lite II BIO&lt;/a&gt; to try out (so your can look forward to a review of those) but I don&#39;t see myself wearing them for a while till I wear out the Skinners.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;A word of caution&lt;/b&gt;: I wouldn&#39;t recommend Skinners as your daily-everything shoe if you&#39;re just starting out transitioning to minimalist shoes and would suggest easing into them slowly.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/193965254939479150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/193965254939479150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/193965254939479150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/193965254939479150'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2019/09/skinners-are-my-new-favorite-minimalist.html' title='Skinners are my new favorite minimalist footwear'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4nSFtR34RQv4bavkW4Pxg-GQyyKdImHLmbgqBomcvY32Sg4948wIs1cewzboeWuiOwPjQA8xodRyrQhRTkVowf_OeKha5KwEEhRQ3YXfFb6sNNvxI90_PbE1oPQbothdG3eFG/s72-c/IMG_20190922_103823347.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-204399131677992310</id><published>2016-11-25T18:00:00.001+05:30</published><updated>2016-11-25T18:05:39.770+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="Native Apps"/><category scheme="http://www.blogger.com/atom/ns#" term="Paytm"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="Uber"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>Native apps can&#39;t be trusted</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
The one thing the web has gotten right to some extent (thanks to the beauty of REST/HTTP) at least compared to desktop and native apps, is how it can uniformly show users if they are using a secure connection to a trusted source. The browser does this by clearly and consistently giving various hints (see Fig 1 and Fig 2 below):&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh479T872KRBJTmRwAM-rtzSJxrcZA0xRvO31AeW82G7zPMp1a_ISS4PMpgF2IwKIoydhUT1hpXsOvLffneNymvC7KiV6S0pKgFz8kVdYDcKpdmStJKkQgnoNiyRLIWC9wk0npp/s1600/Screenshot+from+2016-11-25+15-01-45.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;43&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh479T872KRBJTmRwAM-rtzSJxrcZA0xRvO31AeW82G7zPMp1a_ISS4PMpgF2IwKIoydhUT1hpXsOvLffneNymvC7KiV6S0pKgFz8kVdYDcKpdmStJKkQgnoNiyRLIWC9wk0npp/s320/Screenshot+from+2016-11-25+15-01-45.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig 1. Firefox indicating that you are securely connected to GitHub.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj51tfR5VHx6PjPCixY9j0oUKYKPjGCvUNUfiqFb0KLxwC6HQyXEx_Mqm2DxI0jA7rA56CZj_R6s2mEZs7nHLzvnwhVuA61xPXdNt32qBDccuTsXf9xDsKiDupenLy6O32N8haU/s1600/Screenshot+from+2016-11-25+15-04-18.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;32&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj51tfR5VHx6PjPCixY9j0oUKYKPjGCvUNUfiqFb0KLxwC6HQyXEx_Mqm2DxI0jA7rA56CZj_R6s2mEZs7nHLzvnwhVuA61xPXdNt32qBDccuTsXf9xDsKiDupenLy6O32N8haU/s320/Screenshot+from+2016-11-25+15-04-18.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig 2. Chrome indicating that you are securely connected to GitHub.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
There is no reliable, trustworthy and consistent way for non-technical users to do this on desktop and native apps.&lt;br /&gt;
&lt;br /&gt;
This is how you add funds to your Paytm wallet from within the Uber app (see Fig 3 below):&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhumdVsb_U6jufYy1tLca6wITsHBg3KCWZL4EfzAswpSw7x9tTW36LMMI42Cl5HJ4vL-1N1Xl7DmDlPzmUHR-QFfvckGApH5whfDcgZ4qG55G7iX7k5EHEOhq1cq_qufknFeO4C/s1600/Screenshot_20161125-152206-merged.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhumdVsb_U6jufYy1tLca6wITsHBg3KCWZL4EfzAswpSw7x9tTW36LMMI42Cl5HJ4vL-1N1Xl7DmDlPzmUHR-QFfvckGApH5whfDcgZ4qG55G7iX7k5EHEOhq1cq_qufknFeO4C/s320/Screenshot_20161125-152206-merged.png&quot; width=&quot;110&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Fig 3. Page to add funds to your Paytm wallet from within the Uber app.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
Notice the following in Fig 3:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Since I opened this from within the Uber app and this &quot;page&quot; is running &quot;inside&quot; the Uber app, I have no way to verify if what I&#39;m seeing is in fact a page severed by Paytm or a spoofed page that Uber is presenting to me.&lt;/li&gt;
&lt;li&gt;Even if I were to trust Uber here, there is no way for me to tell if this is happening over a secure connection.&lt;/li&gt;
&lt;li&gt;Say I&#39;m willing to accept that this is in fact a page served securely by Paytm, I have no way to know if Uber has injected their own code to intercept everything I enter on that page.&lt;/li&gt;
&lt;li&gt;And now the really ridiculous bits (circled in red in Fig 3 above): The text that reads &quot;Your payment details are secured via 128 Bit encryption by Verisign&quot; and the various logos that are displayed at the bottom of the page are something I have to take at face value. These are also app-specific and not consistent.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Also, note that I (as a non-technical end-user) have no way of knowing if all communication the Uber app is doing with it&#39;s servers is over a secure channel. I just have to &quot;trust&quot; that they are doing the right thing. Of course, as a technical user I could intercept the traffic on my phone and see how it&#39;s been sent, but that is exactly the point: You have to jump through a lot of hoops to &quot;verify&quot; what is happening. &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The current state of affairs for security on native apps is absolutely ridiculous and it&#39;s crazy that we all put up with it.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Full Disclosure: I work at &lt;a href=&quot;http://zeta.in/&quot;&gt;Zeta&lt;/a&gt;&amp;nbsp;(at the time of writing this blog post), but the views expressed here are my own and not of my employer.&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/204399131677992310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/204399131677992310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/204399131677992310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/204399131677992310'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2016/11/native-apps-cant-be-trusted.html' title='Native apps can&#39;t be trusted'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh479T872KRBJTmRwAM-rtzSJxrcZA0xRvO31AeW82G7zPMp1a_ISS4PMpgF2IwKIoydhUT1hpXsOvLffneNymvC7KiV6S0pKgFz8kVdYDcKpdmStJKkQgnoNiyRLIWC9wk0npp/s72-c/Screenshot+from+2016-11-25+15-01-45.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-5466166465231844428</id><published>2016-11-25T04:24:00.001+05:30</published><updated>2018-04-12T18:25:01.790+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><category scheme="http://www.blogger.com/atom/ns#" term="HTTP"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><category scheme="http://www.blogger.com/atom/ns#" term="Native Apps"/><category scheme="http://www.blogger.com/atom/ns#" term="REST"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>What native apps get wrong over web apps</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot;&gt;
&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;They need to be installed. This in itself is a big drawback.&lt;/li&gt;
&lt;li&gt;They need to be separately developed for each target platform. Unlike the desktop app days where Windows was almost ubiquitous, with mobile you have to support 2 platforms.&lt;/li&gt;
&lt;li&gt;They can get outdated if users don&#39;t upgrade. We are doomed to repeat the same mistakes we made with desktop apps.&lt;/li&gt;
&lt;li&gt;Deployment is blocked on a black box not in your control (aka the app store approval process). Kiss continuous deployment goodbye.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sandeep.shetty.in/2016/11/native-apps-cant-be-trusted.html&quot;&gt;They have no trustworthy way to indicate to users that secure channels are being used to communicate secure information (unlike the address bar in web apps that clearly shows if the connection is secure and to the right place). If you think about it, there is a beauty to REST/HTTP that makes this possible.&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Each app needs to reinvent the wheel and ship infra that could have been shared, e.g., local data store, caching, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/5466166465231844428/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/5466166465231844428' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5466166465231844428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5466166465231844428'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2016/11/what-native-apps-get-wrong-over-web.html' title='What native apps get wrong over web apps'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-4869482326646072124</id><published>2013-12-07T07:24:00.000+05:30</published><updated>2014-12-22T00:52:13.197+05:30</updated><title type='text'>Security breach at Myntra.com exposes customer&#39;s personal information, order history and more</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Update (added on 3 Dec 2013): Based on my feedback Myntra.com has now setup security@myntra.com for reporting security issues and a &lt;a href=&quot;http://www.myntra.com/security/whitehat&quot;&gt;Responsible Disclosure Policy page&lt;/a&gt;. Kudos to them for taking the first step towards a better responsible disclosure process and setting an example for other Indian companies.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Last week a bug on &lt;a href=&quot;http://myntra.com/&quot;&gt;Myntra.com&lt;/a&gt; let anyone with an account take over random customer accounts and highlighted the lack of responsible disclosure processes among Indian companies.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;On 28th November (2013), Myntra.com held a 3-hour (8-11pm) invite only &lt;a href=&quot;http://www.elabs11.com/functions/message_view.html?mid=2120561&amp;amp;mlid=196497&amp;amp;siteid=2010001582&amp;amp;uid=e2e7184cc2&quot;&gt;Winter Sale event&lt;/a&gt; where a few select customers got an additional 31% off on all orders above a certain amount.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;I was one of those customers and decide to login to my Myntra account to see the coupon, except I had forgotten my Myntra account password. So I went ahead and put in my email address and clicked on the forgot password link. As expected I got an email with instructions, to click on a link to set a new password. What happened next was very scary.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwd5RCSsolc08k30H45k0-AWqes9pzFCewp-PpbV0CoCJvvfCDVB0-DoYSRj0TWpdrHB_5l9CWFgr6YlaxCDP2hfoVNEI8RgOptBbOLfKmfXv3MmEFo19psuTsPsIPD60JZvAW/s1600/myntra-new-password-form-cust1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwd5RCSsolc08k30H45k0-AWqes9pzFCewp-PpbV0CoCJvvfCDVB0-DoYSRj0TWpdrHB_5l9CWFgr6YlaxCDP2hfoVNEI8RgOptBbOLfKmfXv3MmEFo19psuTsPsIPD60JZvAW/s320/myntra-new-password-form-cust1.png&quot; height=&quot;195&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;I clicked on the link and landed on the page on Myntra.com to set a new password but &lt;b&gt;instead of my email address I saw someone else&#39;s email address pre-filled in the form&lt;/b&gt;. Curious to see what would happen, I went ahead and put in a new password and lo and behold, Myntra.com had let me take over another customer&#39;s account.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc006yt7YgGyBOWulKlf5v5L_WjgPNED-sqcOTQnp4l7Yg3AWTUJ46_-CC4kVN65ybPl382O8ws5hSiK5wZHJgzRpDrYpbtMwCfDHltMA-1o1PlpL-YwiAzjZjgVBtz9DiWPax/s1600/myntra-account-details-cust1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc006yt7YgGyBOWulKlf5v5L_WjgPNED-sqcOTQnp4l7Yg3AWTUJ46_-CC4kVN65ybPl382O8ws5hSiK5wZHJgzRpDrYpbtMwCfDHltMA-1o1PlpL-YwiAzjZjgVBtz9DiWPax/s320/myntra-account-details-cust1.png&quot; height=&quot;186&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;To see if this was repeatable, I went through the forgot password flow again and just like before it had another random customer&#39;s email address pre-filled in the form and let me take over that customer&#39;s account.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8fnf71MWzheXfreLwUMREaSQA3biu-omtAxRUwvlu82tk3yM6qdNWzafHjBME1-EfjrLp0lUB6hluno5VQaXngHFr2Z9Ug_Zq2PhULnFXa0CFghnqo2jW6ed7A5oKnCvL0R6F/s1600/myntra-account-details-cust2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8fnf71MWzheXfreLwUMREaSQA3biu-omtAxRUwvlu82tk3yM6qdNWzafHjBME1-EfjrLp0lUB6hluno5VQaXngHFr2Z9Ug_Zq2PhULnFXa0CFghnqo2jW6ed7A5oKnCvL0R6F/s320/myntra-account-details-cust2.png&quot; height=&quot;138&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;HOLY SHIT. Myntra.com just let me take over two customer accounts. No fancy hacks, just a scary little bug that presented other Myntra customer accounts to me on a platter.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;So the first thing I did was see if I could find anything on Myntra.com about responsible disclosure or a security contact but found nothing. So I sent an email to security@myntra.com and it promptly bounced with the message &quot;&lt;i&gt;The email account that you tried to reach is over quota&lt;/i&gt;&quot;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Next I&amp;nbsp;&lt;a href=&quot;https://twitter.com/sandeepshetty/status/406075754309373952&quot;&gt;got in touch with them on Twitter&lt;/a&gt; and 13 hours later someone got in touch with me, 16 hours later I was speaking to a Tech Lead from Myntra.com and 9 days later I have confirmation from them that they have fixed the bug and put measures into place to ensure this doesn&#39;t happen again.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;Note (added on 8 Dec 2013): The bug was fixed on the same day I reported it and the 9 days mentioned above includes time they took to monitor the fix and the Tech Lead at Myntra.com and me having issues around coordinating the final confirmation phone call.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;I don&#39;t know how long this bug was live and how many customers accounts were affected but &lt;b&gt;if your account was one of the affected ones, it means someone had COMPLETE access to your account, your personal details like your address and phone number, your order history, your myntra credit points, your saved payment details, your wishlist and your shopping cart&lt;/b&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Apart from the privacy concerns, the biggest threat that you need to protect yourself from, with a security breach like this is that it opens you up to &lt;a href=&quot;http://en.wikipedia.org/wiki/Social_engineering_(security)&quot;&gt;Social Engineering Attacks&lt;/a&gt; where anyone with this privileged information can pretend to be from Myntra.com and use it for malicious purposes.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;While a lot of people reading this will focus on Myntra, I think it&#39;s important to focus on what this incident can teach us about the lack of &lt;a href=&quot;http://en.wikipedia.org/wiki/Responsible_disclosure&quot;&gt;Responsible Disclosure&lt;/a&gt; processes among Indian companies.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;If you run an online service (and especially an ecommerce one) you MUST have a responsible disclosure process in place. The Open Web Application Security Project (OWASP) has a &lt;a href=&quot;https://www.owasp.org/index.php/Manage_security_issue_disclosure_process&quot;&gt;good primer on managing your security issue disclosure process&lt;/a&gt;. At a very basic level you should atleast have a &lt;i&gt;security@&lt;/i&gt; email address configured. Having a dedicated page for responsible disclosure on your website is an added bonus.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Here are some examples of good responsible disclosure pages to get you started:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://about.pinterest.com/terms/responsible-disclosure/&quot; style=&quot;font-family: inherit;&quot;&gt;https://about.pinterest.com/terms/responsible-disclosure/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://37signals.com/security-response&quot; style=&quot;font-family: inherit;&quot;&gt;https://37signals.com/security-response&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.amazon.com/gp/help/customer/display.html?nodeId=201182150&quot; style=&quot;font-family: inherit;&quot;&gt;http://www.amazon.com/gp/help/customer/display.html?nodeId=201182150&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.engineyard.com/legal/responsible-disclosure-policy&quot; style=&quot;font-family: inherit;&quot;&gt;https://www.engineyard.com/legal/responsible-disclosure-policy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/about/appsecurity/&quot; style=&quot;font-family: inherit;&quot;&gt;http://www.google.com/about/appsecurity/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ifixit.com/Info/Responsible_Disclosure&quot; style=&quot;font-family: inherit;&quot;&gt;http://www.ifixit.com/Info/Responsible_Disclosure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.spotify.com/int/about-us/contact/report-security-issues/&quot; style=&quot;font-family: inherit;&quot;&gt;https://www.spotify.com/int/about-us/contact/report-security-issues/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gittip.com/security.txt&quot; style=&quot;font-family: inherit;&quot;&gt;https://www.gittip.com/security.txt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;Lastly, I think it&#39;s important for companies to be transparent and honest about security/data breaches. Hiding details about breaches from your customers makes them vulnerable to all kinds of attacks. &lt;a href=&quot;http://www.informationisbeautiful.net/visualizations/worlds-biggest-data-breaches-hacks/&quot;&gt;Security/Data breaches happen all the time&lt;/a&gt;. The only way customers can protect themselves is by being informed.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/4869482326646072124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/4869482326646072124' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4869482326646072124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4869482326646072124'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/12/security-breach-at-myntra.com.html' title='Security breach at Myntra.com exposes customer&#39;s personal information, order history and more'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwd5RCSsolc08k30H45k0-AWqes9pzFCewp-PpbV0CoCJvvfCDVB0-DoYSRj0TWpdrHB_5l9CWFgr6YlaxCDP2hfoVNEI8RgOptBbOLfKmfXv3MmEFo19psuTsPsIPD60JZvAW/s72-c/myntra-new-password-form-cust1.png" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-3851428254862126576</id><published>2013-06-11T00:22:00.004+05:30</published><updated>2013-06-22T17:11:34.144+05:30</updated><title type='text'>Indieweb Mention Test</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;&quot;&gt;
This is a non-specific mention of &lt;a href=&quot;http://www.sandeep.io/39&quot;&gt;http://www.sandeep.io/39&lt;/a&gt;.
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/3851428254862126576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/3851428254862126576' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3851428254862126576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3851428254862126576'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/indieweb-mention-test.html' title='Indieweb Mention Test'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-7254690955556521829</id><published>2013-06-11T00:17:00.002+05:30</published><updated>2013-06-11T00:20:46.205+05:30</updated><title type='text'>Indieweb Repost Test</title><content type='html'>&lt;div class=&quot;h-entry&quot;&gt;
    Check out &lt;a class=&quot;u-repost&quot; href=&quot;http://www.sandeep.io/39&quot;&gt;http://www.sandeep.io/39&lt;/a&gt;.
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/7254690955556521829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/7254690955556521829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7254690955556521829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7254690955556521829'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/indieweb-repost-test.html' title='Indieweb Repost Test'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-8544887207994396630</id><published>2013-06-10T06:34:00.002+05:30</published><updated>2013-06-11T00:20:35.635+05:30</updated><title type='text'>Indieweb Like Test</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div class=&quot;h-entry&quot;&gt;
I like &lt;a class=&quot;u-like&quot; href=&quot;http://www.sandeep.io/39&quot;&gt;http://www.sandeep.io/39&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/8544887207994396630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/8544887207994396630' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/8544887207994396630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/8544887207994396630'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/indieweb-like-test.html' title='Indieweb Like Test'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-5034596442895224999</id><published>2013-06-09T01:25:00.001+05:30</published><updated>2013-06-13T16:29:16.154+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="converspace"/><category scheme="http://www.blogger.com/atom/ns#" term="indieweb"/><category scheme="http://www.blogger.com/atom/ns#" term="microformats"/><category scheme="http://www.blogger.com/atom/ns#" term="webmention"/><title type='text'>Really Simple Social Blogging</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A proposal to implement a decentralized Tumblr/Facebook/Twitter like social blogging platform using simple things like &lt;a href=&quot;http://webmention.org/&quot;&gt;WebMention&lt;/a&gt; and &lt;a href=&quot;http://microformats.org/wiki/microformats-2&quot;&gt;Microformats&lt;/a&gt;. This is based on some &lt;a href=&quot;http://indiewebcamp.com/plaintext#Machine_tags_based_repost&quot;&gt;experiments&lt;/a&gt; I&#39;m doing with &lt;a href=&quot;https://github.com/converspace/converspace&quot;&gt;Converspace&lt;/a&gt;&amp;nbsp;on &lt;a href=&quot;http://sandeep.io/&quot;&gt;sandeep.io&lt;/a&gt;&amp;nbsp;and was inspired by&amp;nbsp;&lt;a href=&quot;http://tantek.com/2013/113/b1/first-federated-indieweb-comment-thread&quot;&gt;The First Federated #Indieweb Comment Thread&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Based on usage, it looks like I primarily do 4 things on &lt;a href=&quot;http://sandeep.io/&quot;&gt;sandeep.io&lt;/a&gt;:&lt;/div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Post&lt;/b&gt;&amp;nbsp;original content. This could be text (both short and long form), links, photos, videos, quotes, etc. (&lt;a href=&quot;http://www.sandeep.io/19&quot;&gt;http://www.sandeep.io/19&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Repost&lt;/b&gt;&amp;nbsp;content from others I find interesting. (&lt;a href=&quot;http://www.sandeep.io/36&quot;&gt;http://www.sandeep.io/36&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Comment&lt;/b&gt;&amp;nbsp;on content from others. (&lt;a href=&quot;http://www.sandeep.io/32&quot;&gt;http://www.sandeep.io/32&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Like&lt;/b&gt;&amp;nbsp;content from others. (&lt;a href=&quot;http://www.sandeep.io/33&quot;&gt;http://www.sandeep.io/33&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Turns out this is also broadly what you do on Tumblr, Twitter and Facebook:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Tumblr&lt;/b&gt;: blog, reblog, comment and like.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Twitter&lt;/b&gt;: tweet, retweet, reply and favorite.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Facebook&lt;/b&gt;: update status, share, comment and like.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
So I set out to see how this could be done in a decentralized way across the &lt;a href=&quot;http://indiewebcamp.com/&quot;&gt;#indieweb&lt;/a&gt;. A couple of experiments later, I think I have a simple solution for achieving this, using nothing more than simple things like&amp;nbsp;&lt;a href=&quot;http://webmention.org/&quot;&gt;WebMention&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://microformats.org/wiki/microformats-2&quot;&gt;Microformats&lt;/a&gt;.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
The &quot;&lt;b&gt;social&lt;/b&gt;&quot; part of this is letting others know that you have done one of those 4 things listed above and especially the person whose content you&#39;ve reposted, liked or commented on.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
This is where&amp;nbsp;&lt;a href=&quot;http://webmention.org/&quot;&gt;WebMention&lt;/a&gt;&amp;nbsp;comes. It&#39;s a simple way to let any URL on the web know that &amp;nbsp;you&#39;ve linked to it on your site. The problem however is communicating the context in which the URL was mentioned:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Was it just mentioned in passing along with other content?&lt;/li&gt;
&lt;li&gt;Was it&#39;s content reposted?&lt;/li&gt;
&lt;li&gt;Was it liked?&lt;/li&gt;
&lt;li&gt;Was it linked to by someone commenting on it?&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
Taking a cue from the the experimental &lt;a href=&quot;http://microformats.org/wiki/rel-in-reply-to#u-in-reply-to&quot;&gt;u-in-reply-to&lt;/a&gt;&amp;nbsp;microformat, I&#39;m using the following&amp;nbsp;experimental&amp;nbsp;classnames for links within h-entry:&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;u-mention&lt;/b&gt;&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;I&#39;m actually not using this because if a link within an h-entry does not have any of the classes below it is assumed to be a simple mention.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;u-repost&amp;nbsp;&lt;/b&gt;(&lt;a href=&quot;http://pin13.net/mf2/?url=http://www.sandeep.io/36&quot;&gt;http://pin13.net/mf2/?url=http://www.sandeep.io/36&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;u-in-reply-to&amp;nbsp;&lt;/b&gt;(&lt;a href=&quot;http://pin13.net/mf2/?url=http://www.sandeep.io/32&quot;&gt;http://pin13.net/mf2/?url=http://www.sandeep.io/32&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;u-like&lt;/b&gt;&amp;nbsp;(&lt;a href=&quot;http://pin13.net/mf2/?url=http://www.sandeep.io/33&quot;&gt;http://pin13.net/mf2/?url=http://www.sandeep.io/33&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
A target URL that receives a WebMention can&amp;nbsp;retrieve&amp;nbsp;the source URLs HTML content and look for the above Microformat classnames to figure out the context in which it was mentioned along with an h-card/p-author entry to figure out the person involved.&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
The target can then show:&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Total number of likes&lt;/b&gt; along with the&amp;nbsp;details of the people that&amp;nbsp;liked it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Total number of reposts&lt;/b&gt; along with the&amp;nbsp;details of the&amp;nbsp;people that reposted it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Total number of mentions&lt;/b&gt;&amp;nbsp;along with the URLs of the sites that mentioned it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Comments&lt;/b&gt; along with the details of the people that commented on it.&lt;/li&gt;
&lt;/ul&gt;
See this in action here:&lt;a href=&quot;http://www.sandeep.io/39&quot;&gt; Indieweb Federated &quot;Likes&quot;&lt;/a&gt;.&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;
An important part that is missing from the above is letting other people easily follow you and get updates when you post something on your site. A microformats based feed reader should solve that. Following someone also gives you the opportunity to send a WebMention to the profile URL of the person you followed which in turn allows that person to show a &lt;b&gt;Follower count&lt;/b&gt; (using &lt;b&gt;u-follow&lt;/b&gt; maybe) along with the details of the followers. I&#39;ve yet to explore this but will be posting more details when I get to it and &lt;a href=&quot;http://indiewebcamp.com/dogfood&quot;&gt;dogfood&lt;/a&gt; it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;b&gt;Wishlist&lt;/b&gt;: A microformats search engine that crawls the web looking for microformats, especially h-card so I can &lt;i&gt;search for people just like I can on silo social networks&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Here are some additional experimental classnames I&#39;m considering but not yet using:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;u-quote&lt;/b&gt;&amp;nbsp;to be used when you quote text from a URL verbatim.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;u-follow&lt;/b&gt;&amp;nbsp;to be used when you follow/subscribe to a URL (usually a person)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;h4&gt;
Todo&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;A way to undo WebMentions (e.g., unlike) by deleting the source URL and sending a WebMention for which the target would receive a 404 in turn deleting the original WebMention.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;I&#39;m also hoping to extend WebMention to allow for private access to URLs to only the people that were sent a WebMention.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Updates&lt;/h4&gt;
&lt;div&gt;
08 June, 2013&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Added h-card search wishlist.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
09 June, 2013&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Added attribution to the &lt;a href=&quot;https://twitter.com/eschnou&quot;&gt;@eschnou&lt;/a&gt;&#39;s &lt;a href=&quot;http://eschnou.com/entry/testing-indieweb-federation-with-waterpigscouk-aaronpareckicom-and--62-24908.html&quot;&gt;indieweb comment thread&lt;/a&gt; that was the first instance I know of that&amp;nbsp;combined something like WebMention (Pingback) and Microformats to figure out context. It went beyond the simple &lt;a href=&quot;https://github.com/converspace/webmention/commit/c5254d0c38f1eb61f705537b55cc6ca8e40b9eb1#L0R47&quot;&gt;rel=&quot;in-reply-to&quot; suggestion&lt;/a&gt; made in WebMention and read h-cards.&lt;/li&gt;
&lt;li&gt;Added note about sending WebMentions to user profile URLs. (rememberd to add this thanks to this &lt;a href=&quot;https://twitter.com/benwerd/status/343609497903824896&quot;&gt;tweet&lt;/a&gt; by&amp;nbsp;&lt;a href=&quot;https://twitter.com/benwerd&quot;&gt;@benwerd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Added note about private access.&amp;nbsp;(rememberd to add this thanks to this&amp;nbsp;&lt;a href=&quot;https://twitter.com/benwerd/status/343610422861127680&quot;&gt;tweet&lt;/a&gt;&amp;nbsp;by&amp;nbsp;&lt;a href=&quot;https://twitter.com/benwerd&quot;&gt;@benwerd&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Added list of other experimental classnames I&#39;m considering.&lt;/li&gt;
&lt;/ul&gt;
10 June 2013&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Created the Todo section and added note about undoing WebMentions.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
See Also&lt;/h4&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sandeep.io/45&quot;&gt;Share vs Repost and Link vs. Mention&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sandeep.io/50&quot;&gt;RSSB microformats to Activity Streams&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/5034596442895224999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/5034596442895224999' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5034596442895224999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5034596442895224999'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/really-simple-social-blogging.html' title='Really Simple Social Blogging'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-3096774285200676341</id><published>2013-06-07T05:17:00.002+05:30</published><updated>2013-06-07T15:41:12.771+05:30</updated><title type='text'>Extracting machine tags (aka triple tags) from a string</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Here&#39;s some working code to extract machine tags (aka triple tags) from a string. Possibly one of the ugliest regular expressions I&#39;ve ever written.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;script src=&quot;https://gist.github.com/sandeepshetty/5725818.js&quot;&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
References&lt;/h4&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Spec:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/groups/api/discuss/72157594497877875&quot;&gt;http://www.flickr.com/groups/api/discuss/72157594497877875&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.aaronland.info/talks/mw10_machinetags/#62&quot;&gt;http://www.aaronland.info/talks/mw10_machinetags/#62&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tagaholic.me/2009/03/26/what-are-machine-tags.html&quot;&gt;http://tagaholic.me/2009/03/26/what-are-machine-tags.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Regexes I found elsewhere:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ibolmo/habwatch/blob/bcba1a11b7073c2c864296ab89787af7b7fc0e00/lib/util/flickr/Flickr/Photo.class.php&quot;&gt;https://github.com/ibolmo/habwatch/blob/bcba1a11b7073c2c864296ab89787af7b7fc0e00/lib/util/flickr/Flickr/Photo.class.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/cldwalker/has_machine_tags/blob/48ed628c04def3539387c6cdfd7145a004a4b8fc/lib/has_machine_tags/tag_methods.rb&quot;&gt;https://github.com/cldwalker/has_machine_tags/blob/48ed628c04def3539387c6cdfd7145a004a4b8fc/lib/has_machine_tags/tag_methods.rb&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Regex syntax I used:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/en/regexp.reference.subpatterns.php&quot;&gt;http://php.net/manual/en/regexp.reference.subpatterns.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/en/regexp.reference.back-references.php&quot;&gt;http://php.net/manual/en/regexp.reference.back-references.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/en/regexp.reference.assertions.php&quot;&gt;http://php.net/manual/en/regexp.reference.assertions.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://php.net/manual/en/regexp.reference.conditional.php&quot;&gt;http://php.net/manual/en/regexp.reference.conditional.php&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;unrolling-the-loop technique for quoted string with escaping:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://ad.hominem.org/log/2005/05/quoted_strings.php&quot;&gt;http://ad.hominem.org/log/2005/05/quoted_strings.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/5695240/php-regex-to-ignore-escaped-quotes-within-quotes/5696141#5696141&quot;&gt;http://stackoverflow.com/questions/5695240/php-regex-to-ignore-escaped-quotes-within-quotes/5696141#5696141&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/249791/regex-for-quoted-string-with-escaping-quotes/249832#249832&quot;&gt;http://stackoverflow.com/questions/249791/regex-for-quoted-string-with-escaping-quotes/249832#249832&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Negative lookahead as an alternative to using backreferences within character classes.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.perlmonks.org/?node_id=747135&quot;&gt;http://www.perlmonks.org/?node_id=747135&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/6050427/regex-problem-with-backreference-in-pattern-with-preg-match-all&quot;&gt;http://stackoverflow.com/questions/6050427/regex-problem-with-backreference-in-pattern-with-preg-match-all&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/3096774285200676341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/3096774285200676341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3096774285200676341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3096774285200676341'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/extracting-machine-triple-tags-from-a-string.html' title='Extracting machine tags (aka triple tags) from a string'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-7375018634772764520</id><published>2013-06-06T14:53:00.002+05:30</published><updated>2013-06-06T22:41:00.572+05:30</updated><title type='text'>Does polling scale better than push?</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
For the sake of simplicity, given 10000 subscribers, 1 publisher and assuming resource required for serving 1 pull request is roughly equal to resource required for sending 1 push:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A hub that is pulled from every minute has to serve&amp;nbsp;&lt;i&gt;number of&amp;nbsp;subscribers&amp;nbsp;x 1440&lt;/i&gt;&amp;nbsp;requests per day, i.e.,&amp;nbsp;&lt;i&gt;10000 subscribers x 1440&lt;/i&gt;&amp;nbsp;requests per day&amp;nbsp;&lt;b&gt;irrespective of the number of updates&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;A hub that pushes has to send (&lt;i&gt;number of subscribers x&amp;nbsp;&lt;i&gt;number&lt;/i&gt;&amp;nbsp;of updates) per publisher&lt;/i&gt;&amp;nbsp;pushes per day&amp;nbsp;&amp;nbsp; i.e.,&amp;nbsp;&lt;i&gt;10000 subscribers x&amp;nbsp;&lt;i&gt;number&lt;/i&gt;&amp;nbsp;of updates x 1 publisher&lt;/i&gt;&amp;nbsp;pushes per day, i.e.,&amp;nbsp;&lt;i&gt;10000 subscribers x&amp;nbsp;&lt;i&gt;number&lt;/i&gt;&amp;nbsp;of updates&lt;/i&gt;&amp;nbsp;pushes per day.&lt;/li&gt;
&lt;li&gt;So that&#39;s&amp;nbsp;&lt;i&gt;10000 x 1440&lt;/i&gt;&amp;nbsp;for pull and&amp;nbsp;&lt;i&gt;10000 x&amp;nbsp;&lt;i&gt;number&lt;/i&gt;&amp;nbsp;of updates&lt;/i&gt;&amp;nbsp;for push.&lt;/li&gt;
&lt;li&gt;Therefore, if&amp;nbsp;&lt;i&gt;number&lt;/i&gt;&amp;nbsp;of updates per day is greater than 1440, a hub that pushes will require more resources than ones that is pulled from.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;More importantly, a hub that is pulled from&amp;nbsp;&lt;b&gt;will not require additional resources if the number of updates per day increases&lt;/b&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Would love to hear what you think (in the comments) especially if you think this might not be the case.&lt;br /&gt;
&lt;br /&gt;
&lt;h4 style=&quot;text-align: left;&quot;&gt;
Notes&lt;/h4&gt;
&lt;div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;This assumes that &amp;gt;= 1 min latency is ok for your specific use-case.&lt;/li&gt;
&lt;li&gt;Resource required for serving 1 pull request might not be equal to resource required for sending 1 push. Here are my notes for why, I would love to hear yours:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Given constant number of subscribers and publishers, a pull based system will experience a uniform load throughout while a push based system will experience load in bursts.&lt;/li&gt;
&lt;li&gt;Push potentially uses less bandwidth though Pull can take advantage of caching.&lt;/li&gt;
&lt;li&gt;Push has the overhead of subscribers not being available, keeping track of such subscribers and retrying several times.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Proof by induction doesn&#39;t work because with push not every subscriber is subscribed to every publisher.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
See &lt;a href=&quot;http://sandeep.shetty.in/2013/06/pushhubpullsub.html&quot;&gt;PushHubPullSub&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
This was inspired by my notes on&amp;nbsp;&lt;a href=&quot;http://indiewebcamp.com/push-vs-pull&quot;&gt;Push vs Pull&lt;/a&gt;&amp;nbsp;on the&amp;nbsp;&lt;a href=&quot;http://indiewebcamp.com/&quot;&gt;IndieWebCamp wiki&lt;/a&gt;.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/7375018634772764520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/7375018634772764520' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7375018634772764520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7375018634772764520'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/does-polling-scale-better-than-push.html' title='Does polling scale better than push?'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-7148771274165065619</id><published>2013-06-06T04:25:00.003+05:30</published><updated>2013-06-06T14:57:42.756+05:30</updated><title type='text'>PushHubPullSub</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;i&gt;publishers Push updates to a Hub and updates are Pulled by Subscribers from the hub.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
PuSH (PubSubHubbub) is a good way to solve the publishers and hubs problems (offloading work and polling lots of sites respectively). The idea with PushHubPullSub is to simplify subscribers by having them poll the hub.&lt;br /&gt;
&lt;br /&gt;
See&amp;nbsp;&lt;a href=&quot;http://sandeep.shetty.in/2013/06/does-polling-scale-better-than-push.html&quot;&gt;Does polling scale better than push&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update&lt;/b&gt;: Moved the &lt;i&gt;Does polling scale better than push&lt;/i&gt;&amp;nbsp;section to a blog post of it&#39;s own.&lt;br /&gt;
&lt;br /&gt;
This was inspired by my notes on&amp;nbsp;&lt;a href=&quot;http://indiewebcamp.com/push-vs-pull&quot;&gt;Push vs Pull&lt;/a&gt;&amp;nbsp;on the&amp;nbsp;&lt;a href=&quot;http://indiewebcamp.com/&quot;&gt;IndieWebCamp wiki&lt;/a&gt;.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/7148771274165065619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/7148771274165065619' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7148771274165065619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/7148771274165065619'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/06/pushhubpullsub.html' title='PushHubPullSub'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-4231472100841439441</id><published>2013-05-31T12:15:00.000+05:30</published><updated>2013-05-31T12:38:28.581+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="converspace"/><category scheme="http://www.blogger.com/atom/ns#" term="indieweb"/><title type='text'>RecentChanges, a simple alternative to ActivityStreams</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;For updates watch:&amp;nbsp;&lt;a href=&quot;https://github.com/converspace/recentchanges&quot;&gt;https://github.com/converspace/recentchanges&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Some thoughts on representing updates to a&amp;nbsp;site inspired by wiki style RecentChanges:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Every resource (URL) has a RecentChanges endpoint.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The RecentChanges endpoint at each level of the (URL)&amp;nbsp;hierarchy&amp;nbsp;aggregates all RecentChanges under it.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The&amp;nbsp;RecentChanges endpoint of the&amp;nbsp;site aggregates site-wide&amp;nbsp;RecentChanges.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;RecentChanges only requires/uses 4 verbs:&amp;nbsp;Post, Respond, Update, Delete. (open to renaming these but the idea is that 4 verbs are enough)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Examples:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Sandeep Shetty posted Foobar. (new post)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Sandeep Shetty updated Foobar. (edited an existing post)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;AnonymousOnPurpose&amp;nbsp;responded to Foobar. (commented on a post - could even be a response to a specific comment)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Sandeep Shetty deleted Foobar. (deleted a post)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/4231472100841439441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/4231472100841439441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4231472100841439441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/4231472100841439441'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/05/recentchanges-alternative-to.html' title='RecentChanges, a simple alternative to ActivityStreams'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-3115061154703496377</id><published>2013-05-06T05:45:00.000+05:30</published><updated>2013-06-07T22:44:16.241+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="converspace"/><category scheme="http://www.blogger.com/atom/ns#" term="machine-tags"/><category scheme="http://www.blogger.com/atom/ns#" term="metadata"/><category scheme="http://www.blogger.com/atom/ns#" term="tagging"/><category scheme="http://www.blogger.com/atom/ns#" term="tags"/><category scheme="http://www.blogger.com/atom/ns#" term="triple-tags"/><category scheme="http://www.blogger.com/atom/ns#" term="twitter"/><title type='text'>Thinking About Metadata</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Some of my thoughts on tagging and metadata in &lt;a href=&quot;https://github.com/converspace/converspace&quot;&gt;Converspace&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Syntax over Interface&lt;/b&gt;: I prefer (from a user experience perspective) how tagging (and other meta-data like mentions, etc.) evolved on Twitter to be just syntax and became part of the content (without being obtrusive) with no special interface elements dedicated to them. This allows for the same interface to serve people that don&#39;t need them, and the ones that do. Invisible to the users that don&#39;t need it but yet, always there for people that need it.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Visible Metadata&lt;/b&gt;: My preference for tags&amp;nbsp;being part of the content has the advantage of them being always visible (moves/hangs with the content). However, it also has the disadvantage of not being able to&amp;nbsp;cleanly&amp;nbsp;do things like &lt;i&gt;private tags&lt;/i&gt;&amp;nbsp;(like how &lt;a href=&quot;https://pinboard.in/&quot;&gt;Pinboard&lt;/a&gt;&amp;nbsp;does with &lt;a href=&quot;https://pinboard.in/tour/#privacy&quot;&gt;tags that start with a period&lt;/a&gt;. e.g., &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;.secret_tag&lt;/span&gt;). One obvious advantage of private tags is that you can do stuff like what &lt;a href=&quot;https://www.facebook.com/selectivetwitter/info&quot;&gt;Selective Tweets&lt;/a&gt;&amp;nbsp;does with the #fb tag, but without having a visible public tag: like this IFTTT receipe&amp;nbsp;that &lt;a href=&quot;https://ifttt.com/recipes/14872&quot;&gt;crossposts Pinboard bookmarks to Twitter that have the &lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;.twitter&lt;/span&gt; private tag&lt;/a&gt;. &lt;strike&gt;For the specific use case of publishing workflows, I&#39;m considering using (something I&#39;m calling) local&amp;nbsp;&lt;i&gt;action tags&lt;/i&gt; (tags that start with &amp;amp;, e.g.,&amp;nbsp;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;&amp;amp;action_tag)&lt;/span&gt;&amp;nbsp;that are&amp;nbsp;ephemeral&amp;nbsp;and&amp;nbsp;consumed by the publishing workflow and not saved as part of the content. Action tags obviously cannot be&amp;nbsp;interspersed&amp;nbsp;with the content and will have to be added at the end. Still need to figure out how this will work when the publishing workflow is also adding machine tags at the end.&lt;/strike&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Update (after sleeping over it)&lt;/b&gt;: Won&#39;t be implementing actions tags (as described above) because of it&#39;s limited scope (especially when it comes to allowing third-parties to participate in the publishing workflow) &lt;strike&gt;and I&#39;m on the fence about&amp;nbsp;&lt;a href=&quot;http://tagaholic.me/2009/03/26/what-are-machine-tags.html&quot;&gt;Machine/Triple tags&lt;/a&gt;&lt;/strike&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update (May 07, 2013)&lt;/b&gt;:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Auto-tagging&lt;/b&gt;: Allow for the publishing workflow to automatically add tags (including&amp;nbsp;&lt;a href=&quot;http://tagaholic.me/2009/03/26/what-are-machine-tags.html&quot;&gt;Machine/Triple tags&lt;/a&gt;). This is hard when you&amp;nbsp;don&#39;t have a separate tags property and&amp;nbsp;only have one blob of text (content). For example, it might not make sense to add tags at the end of single-line post when it is missing an ending&amp;nbsp;punctuation mark. To allow for auto-tagging, I came up with a syntax for&amp;nbsp;&lt;i&gt;trailing tags&lt;/i&gt;. &lt;i&gt;Trailing tags&amp;nbsp;are preceded by a blank line, starts with two spaces, followed by space-separated tags, followed by the end-of-string&lt;/i&gt;. e.g., &quot;&lt;span style=&quot;font-family: Courier New, Courier, monospace;&quot;&gt;\n\n &amp;nbsp;#additional_tag1 #additional_tag2&quot;&lt;/span&gt;. Trailing tags&amp;nbsp;can be added at the end of content if they do not exist or tags can be appended to existing ones. I chose this syntax for the following reasons:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;When viewing the Markdown, trailing tags appear slightly indented, which visually separates them from the rest of the content.&lt;/li&gt;
&lt;li&gt;AFAIK, it doesn&#39;t conflict with existing Markdown&amp;nbsp;syntax. This makes it invisible when rendered&amp;nbsp;by processors that don&#39;t support it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;b&gt;Update (June 05, 2013)&lt;/b&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;Machine tags are invisible metadata&lt;/b&gt;: Machines tags provide context for &quot;machines&quot; and should be syndicated but not displayed.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;See also&lt;/b&gt;:&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://microsyntax.pbworks.com/w/page/20869409/Sightings&quot;&gt;http://microsyntax.pbworks.com/w/page/20869409/Sightings&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.flickr.com/groups/api/discuss/72157594497877875/&quot;&gt;Flickr: Discussing Machine tags in Flickr API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pigsonthewing.wordpress.com/2008/07/04/triple-tags-on-twitter/&quot;&gt;http://pigsonthewing.wordpress.com/2008/07/04/triple-tags-on-twitter/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://microformats.org/wiki/microblogging-nanoformats&quot;&gt;http://microformats.org/wiki/microblogging-nanoformats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pigsonthewing.org.uk/suggested-method-of-publishing-microformats-in-twitter-posts/&quot;&gt;http://www.pigsonthewing.org.uk/suggested-method-of-publishing-microformats-in-twitter-posts/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://microformats.org/wiki/picoformats&quot;&gt;http://microformats.org/wiki/picoformats&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://twitterdata.org/&quot;&gt;http://twitterdata.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.wolfspelz.de/2009/09/twitter-microtagging-personal-tags.html&quot;&gt;http://blog.wolfspelz.de/2009/09/twitter-microtagging-personal-tags.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://microsyntax.pbworks.com/w/page/20869401/Publishing&quot;&gt;http://microsyntax.pbworks.com/w/page/20869401/Publishing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/3115061154703496377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/3115061154703496377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3115061154703496377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3115061154703496377'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/05/thinking-about-metadata.html' title='Thinking About Metadata'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-1524054021575042613</id><published>2013-04-29T05:24:00.002+05:30</published><updated>2013-04-30T13:03:22.739+05:30</updated><title type='text'>Webmention action</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
Exicted to see all the action around &lt;a href=&quot;http://webmention.org/&quot;&gt;webmention&lt;/a&gt;, a modern alternative to the pingback protocol I drafted.&lt;br /&gt;
&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;a href=&quot;http://tantek.com/2013/113/b1/first-federated-indieweb-comment-thread&quot;&gt;http://tantek.com/2013/113/b1/first-federated-indieweb-comment-thread&lt;/a&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://aaronparecki.com/articles/2013/03/31/1/a-response-to-replies-i-received-on-my-post-an-open-challenge-to-app-net&quot;&gt;http://aaronparecki.com/articles/2013/03/31/1/a-response-to-replies-i-received-on-my-post-an-open-challenge-to-app-net&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Client library for sending webmention and pingback notifications:&amp;nbsp;&lt;a href=&quot;https://github.com/aaronpk/mention-client&quot;&gt;https://github.com/aaronpk/mention-client&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pingback.me/&quot;&gt;pingback.me&lt;/a&gt;, a service to convert Pingbacks to WebMentions&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://indiewebcamp.com/comment&quot;&gt;http://indiewebcamp.com/comment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://indiewebcamp.com/webmention&quot;&gt;http://indiewebcamp.com/webmention&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lists.w3.org/Archives/Public/public-rww/2013Apr/0078.html&quot;&gt;http://lists.w3.org/Archives/Public/public-rww/2013Apr/0078.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/1524054021575042613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/1524054021575042613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1524054021575042613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/1524054021575042613'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/04/webmention-action.html' title='Webmention action'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-3756599342149463478</id><published>2013-04-07T02:55:00.000+05:30</published><updated>2013-04-07T02:55:35.440+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Paleo"/><title type='text'>Grains vs Milk</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;br /&gt;
&lt;blockquote class=&quot;tr_bq&quot;&gt;
&quot;It&#39;s also important to consider the big picture when judging the suitability of various foods. It helps to tell stories about the food we eat, to think about narratives. Grains aren&#39;t just little morsels of protein, carbs, and fiber bred for our enjoyment. They are baby plant eggs. Those macronutrients are there to sustain the seed&#39;s growth and those micronutrients are there to protect it. They are the plant&#39;s lifeline to immortality. They are literally shaped by the hand of evolution to survive and ravage the digestive tract of the poor sap that swallows them and discourage further consumption. Grain is only food because we deemed it so. Dairy? Dairy is objectively, absolutely food. Its fat, protein, and carbs are there to be consumed, albeit by young cows, sheep, and goats. It&#39;s meant to spur growth, to pack on muscle and fat and weight. And yeah, eating dairy protein causes an insulin spike, but that can be useful if you know what you&#39;re doing.&quot; -- &lt;a href=&quot;http://www.marksdailyapple.com/dairy-insulin/&quot;&gt;http://www.marksdailyapple.com/dairy-insulin/&lt;/a&gt;&lt;/blockquote&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/3756599342149463478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/3756599342149463478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3756599342149463478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/3756599342149463478'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/04/grains-vs-milk.html' title='Grains vs Milk'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11685859.post-5332976246669675745</id><published>2013-03-10T05:10:00.000+05:30</published><updated>2013-04-18T09:56:03.273+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="habit"/><category scheme="http://www.blogger.com/atom/ns#" term="Lifehack"/><category scheme="http://www.blogger.com/atom/ns#" term="The-Art-of-Achieving"/><title type='text'>Habit Domino, the simplest habit-forming/habit-tracking android app that could possibly work</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
What started out as an audacious idea inspired by a &lt;a href=&quot;http://sandeep.shetty.in/2013/01/finishing.html&quot;&gt;death in the family&lt;/a&gt;, to build a game-like habit-forming/habit-tracking android&amp;nbsp;app (codenamed &lt;b&gt;World of Doers&lt;/b&gt;), got &lt;a href=&quot;http://sandeep.shetty.in/2013/03/just-enough.html&quot;&gt;refined&lt;/a&gt; into &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.simpthings.habitdomino&quot;&gt;the simplest habit-forming/habit-tracking app that could possibly work&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
The basic premise of &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.simpthings.habitdomino&quot;&gt;Habit Domino&lt;/a&gt; is that once you&#39;ve committed to forming a habit, the simple act of recording the routine and visiting the app once a day, has a sort of domino effect, driven by awareness and emotion, that gets you to complete the routine consistently till it turns into a habit.&lt;br /&gt;
&lt;br /&gt;
No Graphs. No Reminders. Just commit to forming the habit and visit the app once a day.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://sandeep.shetty.in/feeds/5332976246669675745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/11685859/5332976246669675745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5332976246669675745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11685859/posts/default/5332976246669675745'/><link rel='alternate' type='text/html' href='http://sandeep.shetty.in/2013/03/habit-domino-simplest-habit-forming-app.html' title='Habit Domino, the simplest habit-forming/habit-tracking android app that could possibly work'/><author><name>Sandeep Shetty</name><uri>http://www.blogger.com/profile/05858379451002808518</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>