<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shuhaid Lambe</title>
    <description>The latest articles on DEV Community by Shuhaid Lambe (@shuhaid).</description>
    <link>https://dev.to/shuhaid</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F12417%2F6eef8381-6a37-46a3-beab-1fce51d6fbf3.JPG</url>
      <title>DEV Community: Shuhaid Lambe</title>
      <link>https://dev.to/shuhaid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shuhaid"/>
    <language>en</language>
    <item>
      <title>Git cherry pick command explained</title>
      <dc:creator>Shuhaid Lambe</dc:creator>
      <pubDate>Thu, 09 Jul 2020 10:12:24 +0000</pubDate>
      <link>https://dev.to/swipez/git-cherry-pick-command-explained-3fc3</link>
      <guid>https://dev.to/swipez/git-cherry-pick-command-explained-3fc3</guid>
      <description>&lt;p&gt;The &lt;em&gt;cherry-pick&lt;/em&gt; command allows you to integrate individual commits from any branch into your current branch.&lt;/p&gt;

&lt;p&gt;To set some context, here is a quick overview of our git branching structure.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;master - This is the main branch i.e. our live/production servers point here&lt;/li&gt;
&lt;li&gt;develop - This is the branch where code gets pushed to, for integration testing on our test environments i.e. our testing servers point here&lt;/li&gt;
&lt;li&gt;release-x.x.x - These branches are cut for any long running releases or features we are working on as a team. The release branch when ready is merged to the develop branch to be tested in the integrated test environment. Post which the release branch is merged with master when it's ready to be pushed live&lt;/li&gt;
&lt;li&gt;hotfix-x.x.x - Arrgh! That nasty little bug sneaked through to live 😑. Create a hotfix branch from master, quash the bug in this hotfix branch. Then merge hotfix branch to develop and master branches to push your hotfix in to your test and live environments.&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Cherry pick command
&lt;/h1&gt;

&lt;p&gt;Consider the scenario you have cut a release branch to work on a feature. In the midst of that you need to make a small change to your live environment. Or even worse you have a bug that has sneaked through to your live environment and &lt;strong&gt;needs&lt;/strong&gt; to be fixed asap! It does not make sense to wait and bundle it with your release branch as that is still 2 weeks from completion. In this scenario you will create a hotfix branch from your master branch. Make your changes in the hotfix branch and merge it back to the develop and master branch once you are done.&lt;/p&gt;

&lt;p&gt;You might not be ready to merge your release branch with the develop or master branch yet as it might have breaking changes that you do not want to integrate yet. But you only need the hotfix commit in your release branch and that's when the cherry-pick command comes in handy.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout release-x.x.x
git cherry-pick 47rul5
# 47rul5 is the reference for the hotfix commit
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Check out links in the further reading section below, to get more in depth understanding on using the &lt;code&gt;git cherry-pick&lt;/code&gt; command. It is a useful tool to have in your git commands arsenal.&lt;/p&gt;

&lt;h1&gt;
  
  
  Further reading
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Detailed explanation of the cherry pick command - &lt;a href="https://www.devroom.io/2010/06/10/cherry-picking-specific-commits-from-another-branch/"&gt;https://www.devroom.io/2010/06/10/cherry-picking-specific-commits-from-another-branch/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Super read for a git branching strategy - &lt;a href="https://nvie.com/posts/a-successful-git-branching-model/"&gt;https://nvie.com/posts/a-successful-git-branching-model/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@tq_photos?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;T. Q.&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/cherry?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Create video walkthroughs of your product for free</title>
      <dc:creator>Shuhaid Lambe</dc:creator>
      <pubDate>Wed, 30 May 2018 08:15:29 +0000</pubDate>
      <link>https://dev.to/shuhaid/create-video-walkthroughs-of-your-product-for-free-21o4</link>
      <guid>https://dev.to/shuhaid/create-video-walkthroughs-of-your-product-for-free-21o4</guid>
      <description>&lt;p&gt;Recently we started writing our product's user manual and just when we were nearing completion our users started asking for video walkthroughs of the product.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/l3q2K5jinAlChoCLS/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/l3q2K5jinAlChoCLS/giphy.gif" alt="What!!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Needless to say, we started questioning ourselves whether we should have done the videos first. The outcome of that discussion is a topic for another day. Fow now, here's how we went about putting our product walkthrough videos together.&lt;/p&gt;

&lt;h1&gt;
  
  
  Requirements/Constraints
&lt;/h1&gt;

&lt;p&gt;Before we started creating our walkthroughs we posed ourselves the following requirements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Audio + Video - Keep text and annotations within the video to a minimum. We wanted the voice over to guide the user through the features. Use a text to speech service which will keep the voice over consistent across all our videos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ease of creation - Anyone from our (small) team should be able to create/edit these videos.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Maintainability - As we keep adding features to our product or change a functionality. We should be able to change the audio &amp;amp; video content with ease.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Budgetary constraints - We did not have funds allocated to create video walkthroughs. And thus, needed to create this at little or no cost.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Solution
&lt;/h1&gt;

&lt;p&gt;After a couple of days of searching for tools required to create our walkthroughs, we settled on the following tools. It would be great to hear from you if there are (better) alternate tools available to perform the same function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Audio
&lt;/h3&gt;

&lt;p&gt;Keeping in mind the requirements, we wanted to make sure the audio files are easy to recreate in case of product updates. To create our audio content we settled on &lt;a href="https://aws.amazon.com/polly/" rel="noopener noreferrer"&gt;Amazon Polly&lt;/a&gt;. Amazon Polly is a service that turns text into lifelike speech.&lt;/p&gt;

&lt;p&gt;Here is why we went with Amazon Polly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We were able to create our audio content in Speech Synthesis Markup Language (&lt;a href="https://www.w3.org/TR/speech-synthesis11/" rel="noopener noreferrer"&gt;SSML&lt;/a&gt;). Among other things, SSML makes it easy to add a pause in the audio to allow the screen to load or an action to be performed. It also makes the content easy to create / edit and add it to our source control. Our SSML files are now now part of our code documentation.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under the free tier we got 5 million characters per month. This was more than we needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It has plenty of language and accent options. We went with the "Indian English" option as our target base at the moment is primarily Indian.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using Amazon Polly we created .mp3 audio files for our voice over. Each audio file was kept under 2 minutes. This was done to make it easy to edit a particular section without impacting the full voice over.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video recording
&lt;/h3&gt;

&lt;p&gt;Next we needed a screen capture tool which highlights the mouse pointer. For this, we used &lt;a href="http://camstudio.org/" rel="noopener noreferrer"&gt;CamStudio&lt;/a&gt;. CamStudio is an open source desktop screen recorder. We would listen to the created audio and record our screen using CamStudio. This helped in keeping the video in sync with the voice over as far as possible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Video editor
&lt;/h3&gt;

&lt;p&gt;To put this audio and video together we used &lt;a href="https://www.openshot.org/" rel="noopener noreferrer"&gt;OpenShot&lt;/a&gt;. OpenShot is an open source video editing software. Using OpenShot we were able to merge the recorded video and audio and create the final product.&lt;/p&gt;

&lt;p&gt;Both the tools mentioned above have a lot of help content available online and are fairly easy to use.&lt;/p&gt;

&lt;p&gt;Here is what our output looks like&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=Ke0Zc8Iwsqs" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ytimg.com%2Fvi%2FKe0Zc8Iwsqs%2Fhqdefault.jpg%3Fsqp%3D-oaymwEZCPYBEIoBSFXyq4qpAwsIARUAAIhCGAFwAQ%3D%3D%26rs%3DAOn4CLAuc7sSgZNgimetCK7g0opMvNWZ6A" alt="Online Invoicing Walkthrough"&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It would be great to hear your feedback on this process and if you have used other tools which can make this easier.&lt;/p&gt;

&lt;h6&gt;
  
  
  Photo by &lt;a href="https://unsplash.com/photos/3rcT6_NjjbU?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Seth Doyle&lt;/a&gt; on &lt;a href="https://unsplash.com/search/photos/film?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;
&lt;/h6&gt;

</description>
      <category>productwalkthroughs</category>
      <category>screenrecording</category>
      <category>amazonpolly</category>
    </item>
    <item>
      <title>How to document requirements and not put people to sleep</title>
      <dc:creator>Shuhaid Lambe</dc:creator>
      <pubDate>Sun, 05 Nov 2017 12:19:05 +0000</pubDate>
      <link>https://dev.to/shuhaid/how-to-document-requirements-and-not-put-people-to-sleep-dg3</link>
      <guid>https://dev.to/shuhaid/how-to-document-requirements-and-not-put-people-to-sleep-dg3</guid>
      <description>&lt;p&gt;A project requirement document whether functional or technical is a snooze fest for any techie to read through. The start of a project is the most important phase. Well thought through requirements play a large role in the project's success. But this probably remains, the most critical yet boring phase of a software development cycle.&lt;/p&gt;

&lt;p&gt;On the other hand, imagine the requirement writers state of mind. Someone who has painstakingly tried to document every scenario that they could possibly imagine. Knowing fully well, there is a good chance something is going to get missed when the implementation hits the road.&lt;/p&gt;

&lt;p&gt;Throw in some other challenges:&lt;/p&gt;


&lt;li&gt;You are dealing with developments teams spread across geographies. Places where English is not their first language. A lot could get lost in translation in such scenarios, through no fault of anyone.&lt;/li&gt;


&lt;li&gt;You have a set of requirement documents which have captured everything needed on day 1. How do you keep this current when changes start coming in thick and fast?&lt;/li&gt;


&lt;li&gt;You would like your development teams to have a holistic view of the project even though their focus areas are limited to a set of components from the entire project.&lt;/li&gt;

&lt;p&gt;Personally, I have come to believe that using a &lt;a href="https://en.wikipedia.org/wiki/Mind_map" rel="noopener noreferrer"&gt;Mind Map&lt;/a&gt; to capture a systems requirements is the best way to alleviate these challenges.&lt;/p&gt;

&lt;h3&gt;
  
  
  Read someones mind or open your mind to someone
&lt;/h3&gt;

&lt;p&gt;Check out this mind map describing Tennis to a novice &lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F1%2F1a%2FTennis-mindmap.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2F1%2F1a%2FTennis-mindmap.png" alt="Tennis mind map from wikipedia"&gt;&lt;/a&gt;&lt;em&gt;Courtesy &lt;a href="https://en.wikipedia.org/wiki/Mind_map" rel="noopener noreferrer"&gt;wikipedia&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This map covers the type of shots in the game, scoring mechanism, playing surfaces, key tournaments and key principles. Along with this it covers trivia like the fastest serve and other bits of information. Enough to upgrade someone from a novice to an amateur level understanding of the sport.&lt;/p&gt;

&lt;p&gt;The same level of information if covered in a document would be verbose and could loose a high percentage of readers mid-way. Writing information in form of a mind map increases the chances of your readers going through everything you have documented. Moreover, this format also increases the chances of the concept being understood.&lt;/p&gt;

&lt;p&gt;Here's how you can start using it for your project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To start mind mapping, try &lt;a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page" rel="noopener noreferrer"&gt;FreeMind&lt;/a&gt; it's free and makes it simple to create and distribute map files.&lt;/li&gt;
&lt;li&gt;After you have downloaded and installed FreeMind try documenting a  project or module you are working on.&lt;/li&gt;
&lt;li&gt;Put the name of your project or the module you are documenting in the first (root) node. From the Format menu option click on Automatic layout. This will ensure your map looks pretty right from the outset. You can edit these layout options as you go along.&lt;/li&gt;
&lt;li&gt;Identify your key stake holders and put that as your first set of nodes after your root node. For example for a ticketing system Customer &amp;amp; Customer service team could be the the first set of nodes.&lt;/li&gt;
&lt;li&gt;Next up, identify the key use cases for each of these stakeholders. For ex. A customer would need ability to raise a ticket and check status of their tickets. You can add subsequent nodes to these nodes and detail out the fields and rules associated with the node you are working on.&lt;/li&gt;
&lt;li&gt;If you need to add an explanation or a note to a particular node, click on the node and navigate to the View menu option and click Note Window.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The beauty here is each node comes with a context as it lies in a certain position within the hierarchy. If while reading your user loses context, they just need to back up within the hierarchy to find context. Making mind maps easy to walk through while explaining a concept or project functionality.&lt;/p&gt;

&lt;p&gt;Detailed mind maps can be quite large and can cover every aspect of your project in detail. If you haven't it tried before, its certainly worth a shot. Here are some more usages of mind maps. &lt;a href="https://www.smartdraw.com/mind-map/10-uses-for-mind-maps.htm" rel="noopener noreferrer"&gt;Check it out.&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mindmap</category>
      <category>freemind</category>
      <category>documentation</category>
    </item>
    <item>
      <title>Hi, I'm Shuhaid Lambe</title>
      <dc:creator>Shuhaid Lambe</dc:creator>
      <pubDate>Tue, 21 Mar 2017 13:09:38 +0000</pubDate>
      <link>https://dev.to/shuhaid/hi-im-shuhaid-lambe</link>
      <guid>https://dev.to/shuhaid/hi-im-shuhaid-lambe</guid>
      <description>&lt;p&gt;I have been coding for 16 years.&lt;/p&gt;

&lt;p&gt;You can find me on Twitter as &lt;a href="https://twitter.com/shuhaidlambe" rel="noopener noreferrer"&gt;@shuhaidlambe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I live in Pune, India.&lt;/p&gt;

&lt;p&gt;I work for startup Swipez which I co-founded with by college buddy Vivek Iyer&lt;/p&gt;

&lt;p&gt;I mostly program in these languages: PHP, Perl, Java&lt;/p&gt;

&lt;p&gt;I am currently learning more about SaaS sales.&lt;/p&gt;

&lt;p&gt;Nice to meet you.&lt;/p&gt;

</description>
      <category>introduction</category>
    </item>
  </channel>
</rss>
