<?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: Hafiz Jaafar</title>
    <description>The latest articles on DEV Community by Hafiz Jaafar (@mhjaafar).</description>
    <link>https://dev.to/mhjaafar</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%2F441956%2F42140633-9b9a-41a9-b49f-8b3705269962.jpeg</url>
      <title>DEV Community: Hafiz Jaafar</title>
      <link>https://dev.to/mhjaafar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mhjaafar"/>
    <language>en</language>
    <item>
      <title>Jasypt CLI tools for encryption and decryption</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Fri, 09 Aug 2024 15:39:46 +0000</pubDate>
      <link>https://dev.to/mhjaafar/jasypt-cli-tools-for-encryption-and-decryption-2898</link>
      <guid>https://dev.to/mhjaafar/jasypt-cli-tools-for-encryption-and-decryption-2898</guid>
      <description>&lt;p&gt;Recently I have started to use the Jasypt CLI tools. Before that, I have always had to use the tedious way with the Maven plugin just to do a simple encryption and decryption for any deployment update. This article is meant to complement the guides from the page &lt;a href="http://www.jasypt.org/cli.html" rel="noopener noreferrer"&gt;Jasypt: Java simplified encryption&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.tochapter-1"&gt;Requirements&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.tochapter-2"&gt;Steps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Requirements &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Java JRE&lt;/li&gt;
&lt;li&gt;Terminal, in this example is the Git Bash on Windows.&lt;/li&gt;
&lt;li&gt;Downloading the distribution zip file of Jasypt - from the link in the file README in the &lt;a href="https://github.com/jasypt/jasypt" rel="noopener noreferrer"&gt;Jasypt's GitHub repo&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Steps &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check the path to the default $JAVA_HOME
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$JAVA_HOME&lt;/span&gt;
 C:&lt;span class="se"&gt;\U&lt;/span&gt;sers&lt;span class="se"&gt;\y&lt;/span&gt;our.username&lt;span class="se"&gt;\.&lt;/span&gt;jdks&lt;span class="se"&gt;\c&lt;/span&gt;orretto-17.0.12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Edit your aliases.sh for Git Bash. See this &lt;a href="https://dev.to/mhjaafar/git-bash-on-windows-adding-a-permanent-alias-198g"&gt;article on how to add permanent aliases in Git Bash&lt;/a&gt;.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nv"&gt;jasypt_algorithm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;PBEWithMD5AndDES
 &lt;span class="nv"&gt;jasypt_path&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;path-to-your-unzipped-jasypt&lt;span class="o"&gt;}&lt;/span&gt;/jasypt-1.9.3/bin
 &lt;span class="nv"&gt;jasypt_password&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;your choice of master password&lt;span class="o"&gt;}&lt;/span&gt;

 &lt;span class="nb"&gt;alias &lt;/span&gt;encrypt-jasypt&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$jasypt_path/encrypt.sh password=$jasypt_password algorithm=$jasypt_algorithm'&lt;/span&gt;
 &lt;span class="nb"&gt;alias &lt;/span&gt;encrypt-jasypt&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$jasypt_path/decrypt.sh password=$jasypt_password algorithm=$jasypt_algorithm'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Start a new session of Git Bash&lt;/li&gt;
&lt;li&gt;Test the encryption
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; &lt;span class="nv"&gt;$ &lt;/span&gt;encrypt-jasypt &lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"foo.b4r"&lt;/span&gt;
 &lt;span class="nt"&gt;----ENVIRONMENT-----------------&lt;/span&gt;

Runtime: Amazon.com Inc. OpenJDK 64-Bit Server VM 17.0.12+7-LTS
&lt;span class="nt"&gt;----ARGUMENTS-------------------&lt;/span&gt;
input: foo.b4r
password: &lt;span class="k"&gt;*****&lt;/span&gt;
algorithm: PBEWithMD5AndDES
&lt;span class="nt"&gt;----OUTPUT----------------------&lt;/span&gt;
pJ3SUb+U4Xh98+uF0f2uYA&lt;span class="o"&gt;==&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Test the decryption
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;decrypt-jasypt &lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"pJ3SUb+U4Xh98+uF0f2uYA=="&lt;/span&gt;

&lt;span class="nt"&gt;----ENVIRONMENT-----------------&lt;/span&gt;
Runtime: Amazon.com Inc. OpenJDK 64-Bit Server VM 17.0.12+7-LTS
&lt;span class="nt"&gt;----ARGUMENTS-------------------&lt;/span&gt;
input: pJ3SUb+U4Xh98+uF0f2uYA&lt;span class="o"&gt;==&lt;/span&gt;
password: &lt;span class="k"&gt;****&lt;/span&gt;
algorithm: PBEWithMD5AndDES
&lt;span class="nt"&gt;----OUTPUT----------------------&lt;/span&gt;
foo.b4r
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>encryption</category>
      <category>secrets</category>
      <category>cipher</category>
    </item>
    <item>
      <title>Keeping up with Spring Boot</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Sun, 02 Jun 2024 15:51:45 +0000</pubDate>
      <link>https://dev.to/mhjaafar/keeping-up-with-spring-boot-b96</link>
      <guid>https://dev.to/mhjaafar/keeping-up-with-spring-boot-b96</guid>
      <description>&lt;p&gt;Just like my previous post '&lt;a href="https://dev.to/mhjaafar/gitops-problems-5ea0"&gt;GitOps problems&lt;/a&gt;', this time I want to summarize the interesting points of an article I have read recently from the &lt;em&gt;Javamagazin&lt;/em&gt; (3rd issue of 2024).&lt;/p&gt;

&lt;p&gt;Credits to author Michael Simons, who wrote 7 pages about Spring Boot 3 in that magazine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28tap9ps6g3p0qe3z5so.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F28tap9ps6g3p0qe3z5so.jpg" alt="Image description" width="800" height="822"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Spring Framework 6 + Java 17 =&amp;gt; Spring Boot 3&lt;/li&gt;
&lt;li&gt;Maven and Gradle for version and dependencies management&lt;/li&gt;
&lt;li&gt;Testcontainers and @ServiceConnection&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Spring Framework 6 + Java 17 =&amp;gt; Spring Boot 3 &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Spring Boot is a framework to implement not only microservices, but also small services and monolithic applications.&lt;/p&gt;

&lt;p&gt;Spring Boot is not only the framework for such applications out there. There are also Quarkus and Micronaut, which boast reduction of startup time and resources.&lt;/p&gt;

&lt;p&gt;Spring Boot 3, from Spring Framework 6, makes the minimalist Java 17 a mandatory.&lt;/p&gt;

&lt;p&gt;One will also come across Jakarta EE, which replaces Java EE (EE stands for Enterprise Edition, in contrast to SE - Standard Edition).&lt;/p&gt;

&lt;h3&gt;
  
  
  Maven and Gradle for version and dependencies management &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Since Spring Boot 3, we can declare a dependency without specifying the version. But, it is also suggested that we use properties section to specify a version.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;properties&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;foo.bar.version&amp;gt;&lt;/span&gt;1.0.0&lt;span class="nt"&gt;&amp;lt;/foo.bar.version&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/properties&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;dependencies&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;group&amp;gt;&lt;/span&gt;com.foo.bar&lt;span class="nt"&gt;&amp;lt;/group&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;artifactId&amp;gt;&lt;/span&gt;foo.bar&lt;span class="nt"&gt;&amp;lt;/artifactId&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;version&amp;gt;&lt;/span&gt;${foo.bar.version}&lt;span class="nt"&gt;&amp;lt;/version&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/dependency&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/dependencies&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gradle is an alternative to Maven. It supports Java, Kotlin, C/C++, Javascript, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testcontainers and @ServiceConnection &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Testcontainers provides lightweight and one-way instances for everything that can be containerized: databases, message brokers, web browsers, etc.&lt;/p&gt;

&lt;p&gt;We can specify Testcontainers as a dependency in test scope.&lt;br&gt;
A new annotation @ServiceConnection is used to mark a method as a source of a Testcontainer.&lt;/p&gt;

&lt;p&gt;Testcontainer should be useful, especially if we cannot connect to external sources, e.g. a database or message broker that is deployed on a cloud somewhere and only accessible via VPN.&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>microservices</category>
      <category>java</category>
    </item>
    <item>
      <title>GitOps problems</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Sun, 19 May 2024 15:07:36 +0000</pubDate>
      <link>https://dev.to/mhjaafar/gitops-problems-5ea0</link>
      <guid>https://dev.to/mhjaafar/gitops-problems-5ea0</guid>
      <description>&lt;p&gt;This is what I've learned from reading the article '&lt;em&gt;Reverte doch einfach!&lt;/em&gt;' (author: Lars Kölpin-Freese) in the magazine &lt;em&gt;Javamagazin&lt;/em&gt; (in German language, 3rd issue of 2024).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69bo2ng8phynnz1q7ywe.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F69bo2ng8phynnz1q7ywe.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Abstract&lt;/li&gt;
&lt;li&gt;Upward migration&lt;/li&gt;
&lt;li&gt;Stateless apps&lt;/li&gt;
&lt;li&gt;Traveling back with git revert&lt;/li&gt;
&lt;li&gt;Down migration at infrastructure level&lt;/li&gt;
&lt;li&gt;Summary&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Abstract &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;In GitOps, text files are used to administer IT infrastructure. This article raised the question of using 'git revert' if any rollback is necessary.&lt;br&gt;
A simple rollback per versioning of the infrastructure with git should be feasible for stateless apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mazh5bdu71g2ei5bwrr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mazh5bdu71g2ei5bwrr.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Upward migration &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;For upward migration, especially involving databases, scripts are used for traceability. The available tools are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Liquibase&lt;/li&gt;
&lt;li&gt;Flyway&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stateless apps &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;There are three types of applications/apps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;stateless apps&lt;/li&gt;
&lt;li&gt;stateless apps with stateful dependencies&lt;/li&gt;
&lt;li&gt;stateful apps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A stateless app has all its data in its deployment, i.e. there is no dynamic data.&lt;br&gt;
The advantage here is such an app is scalable and can be rolled back as it went.&lt;br&gt;
But in practice, software update can only go up and rollback is practically impossible.&lt;br&gt;
A big part of stateless apps has stateful dependencies, e.g. database correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  Time travel with git revert &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;There are two possibilities for down migration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;app level&lt;/li&gt;
&lt;li&gt;platform level&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For down migration, scripts are also employed as the tools which have destructive effects, e.g. drop column.&lt;/p&gt;

&lt;h3&gt;
  
  
  Down migration at infrastructure level &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Downgrade of applications can also be done at infrastructure level. The objective here is to enable data inventories without having developers to implement anything.&lt;br&gt;
To achieve this, a backup system must be implemented first. There should be a separate system (of a software) to do the backup, especially the database into a storage.&lt;br&gt;
Then with git revert, a rollback of a new version can take place. A disadvantage of this is that new data will be loss.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary &lt;a&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;What I've learned from this article is the need to create a backup system, orchestrated with scripts, before rolling out a new version. To my understanding, the deployment time will be increased, but still that would be open for discussions among developers and SREs.&lt;/p&gt;

</description>
      <category>gitops</category>
      <category>git</category>
      <category>devops</category>
      <category>cicd</category>
    </item>
    <item>
      <title>Coding offline vs. on the grid</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Thu, 14 Oct 2021 16:36:59 +0000</pubDate>
      <link>https://dev.to/mhjaafar/coding-offline-vs-on-the-grid-3mjj</link>
      <guid>https://dev.to/mhjaafar/coding-offline-vs-on-the-grid-3mjj</guid>
      <description>&lt;p&gt;These are the programming languages in my journey, chronologically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C&lt;/li&gt;
&lt;li&gt;Assembly&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;C++, again&lt;/li&gt;
&lt;li&gt;C#&lt;/li&gt;
&lt;li&gt;Python, again&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;C#, again&lt;/li&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;now: full-stack with Java, Spring Boot, and Angular&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Retrospective
&lt;/h1&gt;

&lt;p&gt;Now looking back, among those languages, I think: working with C++ and Python for my computer vision and robotics projects were the most enjoyable. Why: I could be satisfied with just my laptop, anywhere, especially in 30-plus-minute train rides, without Internet.&lt;/p&gt;

&lt;h1&gt;
  
  
  The present
&lt;/h1&gt;

&lt;p&gt;Back to the present: I deal with web and middleware applications. The resources that I need are relatively huge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IntelliJ IDEA (jokingly said that it can turn our machine to a heater for the cold winter days),&lt;/li&gt;
&lt;li&gt;Internet connection,&lt;/li&gt;
&lt;li&gt;one or two other running applications (usually on other servers),&lt;/li&gt;
&lt;li&gt;Postman,&lt;/li&gt;
&lt;li&gt;databases,&lt;/li&gt;
&lt;li&gt;browser (let's bear in mind on how gluttonous Chrome is with RAM), &lt;/li&gt;
&lt;li&gt;and once a while: Docker.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The struggle
&lt;/h2&gt;

&lt;p&gt;Sure, I can host those locally. But I'll be frank, even with 32 GB of RAM and a high performance multicore processor, I prefer not to host other instances and databases on my own machine. It's like forcing a fully loaded truck to go uphill. Sure, the truck is up for it, but think of the gas! LOL. And I'm being cautious of my electricity bill, since most of us work from home since COVID-19. Shouldn't our employers compensate us for using our own Internet and electricity?&lt;/p&gt;

&lt;p&gt;For one particular bug fix ticket, I did have to host a containerized database on my machine. Verdict: not bad. 7/10 I'd do that again.&lt;/p&gt;

&lt;p&gt;I wrote this with the thought of missing the old days working offline with C++ and Python, especially these two are the main ingredients of my side projects.&lt;/p&gt;

&lt;p&gt;My side projects are now dormant, because in my free time, I prefer to attend to other leisure activities (manga, walking, coffee shops, movies, and SLEEPING) - which are good actually for my health.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Now that I've seen what I can do with Jenkins, AWS, Docker, etc, I am sure that I will always need to work online. The thought of working offline (without Internet) is unfathomable.&lt;/p&gt;

</description>
      <category>internet</category>
      <category>homeoffice</category>
      <category>workfromhome</category>
    </item>
    <item>
      <title>CI/CD: continually delivering better codes</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Sun, 07 Mar 2021 09:11:29 +0000</pubDate>
      <link>https://dev.to/mhjaafar/ci-cd-continually-delivering-better-codes-1mi8</link>
      <guid>https://dev.to/mhjaafar/ci-cd-continually-delivering-better-codes-1mi8</guid>
      <description>&lt;p&gt;At the time of writing this post, I am still not done reading this special edition of 'Entwickler Magazin', featuring my favorite topic: CI/CD (continuous integration / continuous deployment).&lt;/p&gt;

&lt;p&gt;These are the points from that magazine that I noted for myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  DevOps models:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;One-team model: the Ops team is a subset, a part of Dev team&lt;/li&gt;
&lt;li&gt;Collaboration model: DevOps is achieved in the collaboration betwen Dev team and Ops Team.&lt;/li&gt;
&lt;li&gt;IAAS-model: infrastructure as a service.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  CI/CD:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;Harness&lt;/li&gt;
&lt;li&gt;GitLab&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Atlassian Bamboo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CI tools: are to enable code components run together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;CD tools: are for automated tests and deployment.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Requirements for CD in an enterprise:
&lt;/h2&gt;

&lt;p&gt;Abstract: CI != CD&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Continuous integration: automated tests and analysis.&lt;/li&gt;
&lt;li&gt;Continuous delivery: delivery pipelines

&lt;ul&gt;
&lt;li&gt;scripted&lt;/li&gt;
&lt;li&gt;versioned&lt;/li&gt;
&lt;li&gt;reproducable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Feature toggles&lt;/li&gt;
&lt;li&gt;Zero downtime&lt;/li&gt;
&lt;li&gt;Blue Green Deployment:

&lt;ul&gt;
&lt;li&gt;2 complete Production environments&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Canary Development&lt;/li&gt;
&lt;li&gt;Secrets management, e.g. Vault:

&lt;ul&gt;
&lt;li&gt;query via API - no clear/plain text leaves the vault.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Security and compliance - especially for containerized microservices:

&lt;ul&gt;
&lt;li&gt;container security&lt;/li&gt;
&lt;li&gt;interservice communication&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;// To be continued.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>integration</category>
      <category>deployment</category>
      <category>devops</category>
    </item>
    <item>
      <title>Ideas for Next Iteration</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Sat, 06 Mar 2021 01:27:17 +0000</pubDate>
      <link>https://dev.to/mhjaafar/ideas-for-next-iteration-4kl9</link>
      <guid>https://dev.to/mhjaafar/ideas-for-next-iteration-4kl9</guid>
      <description>&lt;p&gt;Coffee, cake, music, and a tech magazine.&lt;/p&gt;

&lt;p&gt;Last October 2020, I wrote down these ideas after reading a special edition magazine called 'Frontend Spezial' of the series 'Der Softwerker', by the company codecentric AG.&lt;/p&gt;

&lt;p&gt;These improvement ideas are related to the projects assigned to me at my work.&lt;/p&gt;

&lt;p&gt;In the 4 sticky notes as seen in the picture above:&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Display a progress bar.&lt;/li&gt;
&lt;li&gt;Do analysis: measure the time elapsed between each request and response.&lt;/li&gt;
&lt;li&gt;Test using different mobile devices: cellphones and tablets.&lt;/li&gt;
&lt;li&gt;Use a common design instead of dependending on a common module.&lt;/li&gt;
&lt;li&gt;Cypress: a JavaScript End-to-End testing framework.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Backend:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Separate the component into two new components: one to handle the work loads from the inside of the organization, and another for the outside.&lt;/li&gt;
&lt;li&gt;Containerization: either on-premises or on the cloud. To read about the pros &amp;amp; cons:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://containerjournal.com/features/premise-containers-vs-public-cloud-container-services/"&gt;On-Premises Containers vs. Public Cloud Container Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/blog/physical-virtual-container-deployment/"&gt;To Use Physical Or To Use Virtual: That is the container deployment question&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>java</category>
      <category>aws</category>
      <category>docker</category>
      <category>fullstack</category>
    </item>
    <item>
      <title>Tech stack for DIY robotics project</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Wed, 18 Nov 2020 22:19:57 +0000</pubDate>
      <link>https://dev.to/mhjaafar/tech-stack-for-diy-robotics-project-28dk</link>
      <guid>https://dev.to/mhjaafar/tech-stack-for-diy-robotics-project-28dk</guid>
      <description>&lt;h1&gt;
  
  
  Physical materials
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Arduino starter kit:

&lt;ul&gt;
&lt;li&gt;Arduino board&lt;/li&gt;
&lt;li&gt;Breadboard&lt;/li&gt;
&lt;li&gt;Jumper wires&lt;/li&gt;
&lt;li&gt;USB cable&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Servo motor(s)&lt;/li&gt;
&lt;li&gt;Optional:

&lt;ul&gt;
&lt;li&gt;Popsicle sticks&lt;/li&gt;
&lt;li&gt;LEGO pieces&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PC&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Software and frameworks
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;OS:

&lt;ul&gt;
&lt;li&gt;Ubuntu (Linux), or&lt;/li&gt;
&lt;li&gt;Debian (Linux), or&lt;/li&gt;
&lt;li&gt;Windows (experimental)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ROS (Robot Operating System)&lt;/li&gt;
&lt;li&gt;Qt library&lt;/li&gt;
&lt;li&gt;Essential IDE:

&lt;ul&gt;
&lt;li&gt;Eclipse: extended with the plugin PyDev&lt;/li&gt;
&lt;li&gt;PyCharm&lt;/li&gt;
&lt;li&gt;Qt Creator - in Qt installation&lt;/li&gt;
&lt;li&gt;Qt Designer - in Qt installation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Arduino library&lt;/li&gt;
&lt;li&gt;Programming languages

&lt;ul&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;C++&lt;/li&gt;
&lt;li&gt;C&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;PyQt: Qt library wrapped in Python&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Optionals
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Redmine: a web application for project management (open source and free)&lt;/li&gt;
&lt;li&gt;GitLab or GitHub&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>robotics</category>
      <category>diy</category>
      <category>arduino</category>
      <category>ros</category>
    </item>
    <item>
      <title>My typical routines at job as a full time software developer</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Sat, 24 Oct 2020 00:28:53 +0000</pubDate>
      <link>https://dev.to/mhjaafar/my-typical-routines-at-job-as-a-full-time-software-developer-52kj</link>
      <guid>https://dev.to/mhjaafar/my-typical-routines-at-job-as-a-full-time-software-developer-52kj</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---LeyjCeR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ghz245x7bkhe7ggmy4f4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---LeyjCeR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ghz245x7bkhe7ggmy4f4.jpg" alt="Fuel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Early morning
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Scrum daily stand-up meeting&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strive to talk less than 2 minutes.&lt;/li&gt;
&lt;li&gt;Situation reports for yesterday - what I have achieved, be it reviews, story implementation, bugs fixes, etc.&lt;/li&gt;
&lt;li&gt;Briefly announcing my targets for today: which JIRA tickets or 2nd level support issues that I might need to solve.&lt;/li&gt;
&lt;li&gt;Occasionally: asking present colleagues 1 or 2 questions on certain matters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Coffee&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1 cup of double cappuccino with 1 piece of stavia tablet.&lt;/li&gt;
&lt;li&gt;Brought back to my work desk.&lt;/li&gt;
&lt;li&gt;Read my tickets on JIRA for the current sprint.&lt;/li&gt;
&lt;li&gt;Wrote the today's TODO's on one Post-It, no more, no less. Stick it to the bottom panel of my main monitor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Firing up the machine&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IDE&lt;/li&gt;
&lt;li&gt;database client application&lt;/li&gt;
&lt;li&gt;remote SSH client&lt;/li&gt;
&lt;li&gt;bash terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Before lunch
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Actual works&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding, or&lt;/li&gt;
&lt;li&gt;Part 1 of 2nd level support issues: by analyzing log entries of related processes on remote servers or database entries, before executing appropriate measures.&lt;/li&gt;
&lt;li&gt;Part 2 of 2nd level support issues: preparing brief reports, then write e-mail to concerned parties.&lt;/li&gt;
&lt;li&gt;DevOps - attending problematic CI/CD processes on Jenkins.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  After lunch
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Continuing actual works&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coffee (see above), then&lt;/li&gt;
&lt;li&gt;Back to coding, or&lt;/li&gt;
&lt;li&gt;Do a coding review, or&lt;/li&gt;
&lt;li&gt;Writing documentation on Confluence (it's like a Wikipedia): release notes, updating module's descriptions, or&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;DevOps - assisting the deployments in different environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Late afternoon
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Cooling down&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answering emails, if necessary.&lt;/li&gt;
&lt;li&gt;Casual reading on the Internet: tutorials, news, articles,&lt;/li&gt;
&lt;li&gt;Editing or writing articles in Confluence, e.g., Today I Learned&lt;/li&gt;
&lt;li&gt;Summing up the works of the day: writing the talking points for tomorrow's daily stand-up meeting,&lt;/li&gt;
&lt;li&gt;Turn off the computer, pack up, and go home.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>job</category>
      <category>java</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>If repetitive, then script it.</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Wed, 05 Aug 2020 01:55:45 +0000</pubDate>
      <link>https://dev.to/mhjaafar/if-repetitive-then-script-it-18pd</link>
      <guid>https://dev.to/mhjaafar/if-repetitive-then-script-it-18pd</guid>
      <description>&lt;h1&gt;
  
  
  Abstract
&lt;/h1&gt;

&lt;p&gt;Let's assume that on &lt;strong&gt;Windows&lt;/strong&gt;, you put your development projects under a main or common directory, e.g., '&lt;em&gt;development&lt;/em&gt;', and all of these projects are local Git repositories. &lt;/p&gt;

&lt;h1&gt;
  
  
  The repetitive problem: &lt;em&gt;めんどくさい mendokusai&lt;/em&gt; - a hassle
&lt;/h1&gt;

&lt;p&gt;It gets tedious, if you have to navigate into every directory and execute 'git remote update'.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc MINGW64 /d/developments
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;
foo-bar-backend/
foo-bar-db/
foo-bar-frontend/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Solution: a helper script
&lt;/h1&gt;

&lt;p&gt;Using Git Bash on Windows, I recommend an executable bash-like helper script to navigate through all these projects and be done with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write a helper script
&lt;/h2&gt;

&lt;p&gt;Say, this script is named &lt;em&gt;git_remote_update.bash&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash.exe&lt;/span&gt;

&lt;span class="nb"&gt;echo
echo&lt;/span&gt; &lt;span class="s2"&gt;"Going into every directory here."&lt;/span&gt;
&lt;span class="nb"&gt;echo

&lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;x &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;do
    if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;then
        if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/.git &lt;span class="o"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;then
            &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"======================"&lt;/span&gt;
            &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Calling git remote update ..."&lt;/span&gt;
            git remote update
            &lt;span class="nb"&gt;echo
            echo&lt;/span&gt; &lt;span class="s2"&gt;"Calling git status ..."&lt;/span&gt;
            git status
            &lt;span class="nb"&gt;echo
            cd&lt;/span&gt; ../
        &lt;span class="k"&gt;fi
    fi
done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Set the file permission
&lt;/h2&gt;

&lt;p&gt;Place this helper script in a dedicated directory, e.g., &lt;em&gt;helperScriptsWindows&lt;/em&gt;, and change its permission so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc MINGW64 /d/helperScriptsWindows
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;chmod &lt;/span&gt;755 git_remote_update.bash
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-la&lt;/span&gt;
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 you 197609 434 Mar 17  2018 git_remote_v.bash&lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Include the directory into Path
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the Windows &lt;em&gt;Control Panel&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Navigate to &lt;em&gt;System and Security&lt;/em&gt; =&amp;gt; &lt;em&gt;System&lt;/em&gt; =&amp;gt; &lt;em&gt;Advanced system settings&lt;/em&gt; =&amp;gt; &lt;em&gt;Environment Variables&lt;/em&gt; =&amp;gt; &lt;em&gt;System variables&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;em&gt;Path&lt;/em&gt; =&amp;gt; &lt;em&gt;New&lt;/em&gt;. Add the &lt;strong&gt;absolute&lt;/strong&gt; path to the directory &lt;em&gt;helperScriptsWindows&lt;/em&gt;. Done.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Check the PATH
&lt;/h2&gt;

&lt;p&gt;You should be able to see the absolute path to the directory of your helper scripts is included:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc MINGW64 ~
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Helper script usage
&lt;/h2&gt;

&lt;p&gt;The script &lt;em&gt;git_remote_update.bash&lt;/em&gt; should be already 'registered', and with few typing efforts, it's callable in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc MINGW64 /d/developments
&lt;span class="nv"&gt;$ &lt;/span&gt;git_remote_update.bash

Going into every directory here.

foo-bar-backend
&lt;span class="o"&gt;======================&lt;/span&gt;
Calling git remote update ...
Fetching origin

Calling git status ...
On branch master
Your branch is up-to-date with &lt;span class="s1"&gt;'origin/master'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
nothing to commit, working tree clean

foo-bar-db
&lt;span class="o"&gt;======================&lt;/span&gt;
Calling git remote update ...
Fetching origin

Calling git status ...
On branch master
Your branch is up-to-date with &lt;span class="s1"&gt;'origin/master'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
nothing to commit, working tree clean

foo-bar-frontend
&lt;span class="o"&gt;======================&lt;/span&gt;
Calling git remote update ...
Fetching origin

Calling git status ...
On branch master
Your branch is up-to-date with &lt;span class="s1"&gt;'origin/master'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
nothing to commit, working tree clean
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Have fun.&lt;/p&gt;

</description>
      <category>git</category>
      <category>bash</category>
      <category>todayilearned</category>
    </item>
    <item>
      <title>Using Dropbox or Google Drive for Git repositories</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Thu, 30 Jul 2020 22:46:57 +0000</pubDate>
      <link>https://dev.to/mhjaafar/using-dropbox-or-google-drive-for-git-repositories-2ffo</link>
      <guid>https://dev.to/mhjaafar/using-dropbox-or-google-drive-for-git-repositories-2ffo</guid>
      <description>&lt;p&gt;When Git projects are considered too private to be pushed to GitHub or GitLab and you don't mind about missing the features there, then you could utilize your Dropbox or Google Drive as a Git repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Following is an example with Dropbox on Ubuntu-Mate:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Dedicate a directory in Dropbox for Git:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;Dropbox
you@your-pc:~/Dropbox&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Initialize your repository, at best with the same name with your project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc:~/Dropbox&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;git
you@your-pc:~/Dropbox/git&lt;span class="nv"&gt;$ &lt;/span&gt;git init &lt;span class="nt"&gt;--bare&lt;/span&gt; your-project.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;If your project is not yet initialized as a Git project:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your-project
you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;git init &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Connect your project with the Git repository in Dropbox:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;git remote add origin ~/Dropbox/git/your-project.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Commit your project for the first time and push to the repo. Start your Dropbox. You're done.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"First commit."&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"From Dropbox."&lt;/span&gt;
you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin master
you@your-pc:~/your-project&lt;span class="nv"&gt;$ &lt;/span&gt;caja-dropbox start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>git</category>
      <category>dropbox</category>
    </item>
    <item>
      <title>Git Bash on Windows: adding a permanent alias</title>
      <dc:creator>Hafiz Jaafar</dc:creator>
      <pubDate>Tue, 28 Jul 2020 23:43:03 +0000</pubDate>
      <link>https://dev.to/mhjaafar/git-bash-on-windows-adding-a-permanent-alias-198g</link>
      <guid>https://dev.to/mhjaafar/git-bash-on-windows-adding-a-permanent-alias-198g</guid>
      <description>&lt;p&gt;If you are using Git Bash on Windows and you're used to Linux bash commands, chances are that you'd like to add aliases that help making your jobs easier.&lt;/p&gt;

&lt;p&gt;These two are my favorite aliases:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;cll&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'clear; ls -lah'&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;countFiles&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ls -1 | wc -l'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to add an alias permanently for the Git Bash
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To add an alias permanently, you'd need to edit the file&lt;br&gt;
/C/Program Files/Git/etc/profile.d/aliases.sh .&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Run your text editor as an administrator and open that file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add your alias and save the file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open the Git Bash. Execute 'alias', and you're done. Have fun.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;alias
alias &lt;/span&gt;&lt;span class="nv"&gt;cll&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'clear; ls -lah'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;countFiles&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ls -1 | wc -l'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ll&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ls -lah'&lt;/span&gt;
&lt;span class="nb"&gt;alias ls&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'ls -F --color=auto --show-control-chars'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>bash</category>
      <category>git</category>
    </item>
  </channel>
</rss>
