<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Salman's Blog</title><link>https://salmanfs.ca/</link><description>Recent content on Salman's Blog</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 04 May 2026 06:50:17 +0000</lastBuildDate><atom:link href="https://salmanfs.ca/index.xml" rel="self" type="application/rss+xml"/><item><title>Knapsack Problem</title><link>https://salmanfs.ca/posts/knapsack-problem/</link><pubDate>Mon, 04 May 2026 06:50:17 +0000</pubDate><guid>https://salmanfs.ca/posts/knapsack-problem/</guid><description>&lt;p&gt;0/1 Knapsack Problem: Given weights and profits of n items, maximize the profit without exceeding knapsack capacity. Each item can only be chosen at most once.&lt;/p&gt;
&lt;h2 id="problem-statment"&gt;Problem statment&lt;/h2&gt;
&lt;p&gt;You are given a list of items, each with a weight and a profit, along with a backpack with a specified maximum capacity. Your goal is to calculate the maximum profit you can achieve without exceeding the backpack&amp;rsquo;s capacity. You must select items such that the total weight of the items is less than or equal to the backpack&amp;rsquo;s capacity. You can select at most one of each item.&lt;/p&gt;</description></item><item><title>Longest Increasing Subsequence</title><link>https://salmanfs.ca/posts/longest-increasing-subsequence/</link><pubDate>Sat, 20 Dec 2025 06:50:17 +0000</pubDate><guid>https://salmanfs.ca/posts/longest-increasing-subsequence/</guid><description>&lt;h2 id="problem-statement"&gt;Problem statement&lt;/h2&gt;
&lt;p&gt;Given a list of strings, return the length of the longest [lexicographically] increasing subsequence (LIS).
A &lt;strong&gt;subsequence&lt;/strong&gt; is a a sequence derived from the original by deleting zero or more elements without changing the relative order of the remaining items.&lt;/p&gt;
&lt;p&gt;Example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input: &lt;code&gt;[&amp;quot;A1&amp;quot;, &amp;quot;B2&amp;quot;, &amp;quot;B1&amp;quot;, &amp;quot;C3&amp;quot;, &amp;quot;C2&amp;quot;]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Output: &lt;code&gt;3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Explanation: The longest subsequence in which each subsequent element is strictly greater (lexicographically) then the element before it is of length 3, e.g. &lt;code&gt;[&amp;quot;A1&amp;quot;, &amp;quot;B2&amp;quot;, &amp;quot;C3&amp;quot;]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="solution"&gt;Solution&lt;/h2&gt;
&lt;p&gt;The first method is brute-force. The idea is that we generate all possible subsequences and return the legnth of the largest one.&lt;/p&gt;</description></item><item><title>How to Setup Mutual TLS in MuleSoft</title><link>https://salmanfs.ca/posts/how-to-setup-mutual-tls-mulesoft/</link><pubDate>Wed, 07 Jun 2023 22:49:00 +0000</pubDate><guid>https://salmanfs.ca/posts/how-to-setup-mutual-tls-mulesoft/</guid><description>&lt;p&gt;Mutual TLS (mTLS), or 2-way SSL, is a server-to-server communication protocol where both client and server authenticate each other.
In this context, client simply means the party requesting a resource and server is the party serving the client&amp;rsquo;s request.&lt;/p&gt;
&lt;p&gt;2-way SSL differs from 1-way SSL in which only the client authenticates the server. In 1-way SSL, the client is only required to maintain the server&amp;rsquo;s public key in its truststore and the server only needs to maintain its own private key in its keystore.&lt;/p&gt;</description></item><item><title>Year in Review: MuleSoft Dev</title><link>https://salmanfs.ca/posts/year-in-review-mulesoft-dev/</link><pubDate>Mon, 21 Mar 2022 05:58:33 +0000</pubDate><guid>https://salmanfs.ca/posts/year-in-review-mulesoft-dev/</guid><description>&lt;p&gt;I&amp;rsquo;ve been working with a MuleSoft consultancy for the last year. This position was my first software engineering role since graduation. This month I was promoted to Lead Engineer. This was based on my performance review that took place last month. As such, I thought I&amp;rsquo;d share some notes from the performance review.&lt;/p&gt;
&lt;p&gt;2021 was a busy year. I began working with my current company in late April. I was new to MuleSoft so began training immediately. I passed the MuleSoft Certified Developer (MCD) test on my first try after 2 months of studying.&lt;/p&gt;</description></item><item><title>Developing a Flask App &amp; Deploying on AWS</title><link>https://salmanfs.ca/posts/developing-a-flask-app-deploying-on-aws/</link><pubDate>Sun, 12 Sep 2021 06:13:58 +0000</pubDate><guid>https://salmanfs.ca/posts/developing-a-flask-app-deploying-on-aws/</guid><description>&lt;p&gt;&lt;a href="https://flask.palletsprojects.com/en/2.0.x/"&gt;Flask&lt;/a&gt; is a lightweight Python web framework.
It&amp;rsquo;s lightweight nature makes it a great candidate for creating APIs.
In this tutorial, I&amp;rsquo;m going to cover how to make a simple RESTful API service with Flask and host it on AWS.&lt;/p&gt;
&lt;p&gt;First, we&amp;rsquo;ll make a basic Flask app and use &lt;a href="https://docs.aws.amazon.com/elastic-beanstalk/index.html"&gt;AWS Elastic Beanstalk&lt;/a&gt; to deploy it.
Then, we&amp;rsquo;ll use &lt;a href="https://github.com/zappa/Zappa"&gt;Zappa&lt;/a&gt; to deploy a serverless app to &lt;a href="https://docs.aws.amazon.com/lambda/index.html"&gt;AWS Lambda&lt;/a&gt;. For more information on serverless architectures and how Zappa works, check out the &lt;a href="https://github.com/zappa/Zappa#about"&gt;About&lt;/a&gt; section on their GitHub page.&lt;/p&gt;</description></item><item><title>Quick Reference: Setting up HTTPS in Mule 4</title><link>https://salmanfs.ca/posts/quick-ref-setting-up-https-mule-4/</link><pubDate>Tue, 01 Jun 2021 17:19:00 +0000</pubDate><guid>https://salmanfs.ca/posts/quick-ref-setting-up-https-mule-4/</guid><description>&lt;p&gt;Inputs required:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;keystore file name&lt;/li&gt;
&lt;li&gt;alias&lt;/li&gt;
&lt;li&gt;keypass/password&lt;/li&gt;
&lt;li&gt;encryption key&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Need to generate keystore:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;keytool -genkeypair -dname &lt;span style="color:#e6db74"&gt;&amp;#34;CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown&amp;#34;&lt;/span&gt; -keyalg RSA -sigalg SHA256withRSA -keysize &lt;span style="color:#ae81ff"&gt;2048&lt;/span&gt; -validity &lt;span style="color:#ae81ff"&gt;9999&lt;/span&gt; -keystore &amp;lt;keystore_file_name &lt;span style="color:#f92672"&gt;(&lt;/span&gt;*.jks&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&amp;gt; -alias &amp;lt;alias&amp;gt; -keypass &amp;lt;keypass/password&amp;gt; -storepass &amp;lt;keypass/password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;keypass/password is sensitive information
needs to be stored in encrypted format in config/properties file&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;java -cp secure-properties-tool.jar com.mulesoft.tools.SecurePropertiesTool string encrypt AES CBC &amp;lt;encryption_key &lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;16&lt;/span&gt; chars&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&amp;gt; &amp;lt;keypass/password&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;output string should be placed in config file inside: &lt;code&gt;&amp;quot;![...]&amp;quot;&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Get Started with Programming</title><link>https://salmanfs.ca/posts/get-started-with-programming/</link><pubDate>Wed, 04 Nov 2020 19:28:38 +0000</pubDate><guid>https://salmanfs.ca/posts/get-started-with-programming/</guid><description>&lt;p&gt;A few friends have asked me about how they can start learning programming. So I&amp;rsquo;ve put together some resources that I hope will be useful to someone trying to self-study programming.&lt;/p&gt;
&lt;h2 id="development-environment"&gt;Development Environment&lt;/h2&gt;
&lt;p&gt;Many programmers prefer to use Linux since it is much easier to manage packages, libraries and other essential components. If you&amp;rsquo;re coding on Windows 10 and want to use a Linux environment, you can use &lt;a href="https://docs.microsoft.com/en-us/windows/wsl/about"&gt;WSL&lt;/a&gt;. WSL is the easiest way to run Linux on Windows. Setup WSL with a popular Linux distro like Ubuntu and that should make it a lot easier to follow along with most programming tutorials.&lt;/p&gt;</description></item><item><title>The Fear of Automation</title><link>https://salmanfs.ca/posts/the-fear-of-automation/</link><pubDate>Sat, 05 Sep 2020 06:44:17 +0000</pubDate><guid>https://salmanfs.ca/posts/the-fear-of-automation/</guid><description>&lt;p&gt;&amp;ldquo;AI is taking our jobs!&amp;rdquo; - It seems to be a growing fear around the world. However, it is not a new idea.&lt;/p&gt;
&lt;p&gt;In A World Without Work by Daniel Susskind [1], the author explores the notion that automation will leave us in a world without work. He talks about times in the past when these fears were raised (notably during the Industrial Revolution) and contrasts the projected outcomes with reality. Some jobs were lost; others created.&lt;/p&gt;</description></item><item><title>UX is Important</title><link>https://salmanfs.ca/posts/ux-is-important/</link><pubDate>Tue, 04 Aug 2020 19:22:47 +0000</pubDate><guid>https://salmanfs.ca/posts/ux-is-important/</guid><description>&lt;p&gt;Until recently, I was quite ignorant of the importance of UI/UX in software development. For those unaware, UI/UX stands for user interface and user experience. This falls under the broader research discipline of Human-Computer Interaction (HCI) which deals with how humans interact with computers and how to improve that experience. UI/UX, and HCI more broadly, seeks to make technology more simple, useful and accessible for users. There is vast scope for research in this field, and consequently, plenty of related work in the software industry.&lt;/p&gt;</description></item><item><title>Haskell is Awesome!</title><link>https://salmanfs.ca/posts/haskell-is-awesome/</link><pubDate>Mon, 27 Jul 2020 23:31:28 +0000</pubDate><guid>https://salmanfs.ca/posts/haskell-is-awesome/</guid><description>&lt;p&gt;I learned Haskell this semester. Haskell is a purely functional language. It offers programmers a different paradigm or approach to programming. It&amp;rsquo;s a different perspective about what code should look like.&lt;/p&gt;
&lt;h3 id="declarative-programming"&gt;Declarative Programming&lt;/h3&gt;
&lt;p&gt;Functional languages are a subset of declarative languages. These contrast with imperative languages. The idea behind imperative is to dictate to a computer how to perform the tasks that you want completed. In the declarative mindset, simply ask for the result that you want without explaining precisely how to achieve it.&lt;/p&gt;</description></item><item><title>Tips for CS Students</title><link>https://salmanfs.ca/posts/tips-for-compsci-students/</link><pubDate>Sun, 01 Mar 2020 23:25:11 +0000</pubDate><guid>https://salmanfs.ca/posts/tips-for-compsci-students/</guid><description>&lt;p&gt;I was asked at work to write some tips for computer science students, specifically with respect to working on assignments. Here they are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start working on programming assignments early. It is often difficult to estimate the time it may take to debug potential errors.&lt;/li&gt;
&lt;li&gt;Practice running code taught in lectures and labs on your own. Tweak the sample code and try to understand how the behavior changes.&lt;/li&gt;
&lt;li&gt;If a task seems complicated and you are unsure how to tackle it, consider using version control (e.g. git) while you try out possible solutions so that you can easily try different approaches without losing your previous attempts. This will get you practice with a useful tool, keep your editor clean and let you try out new approaches without losing previous work.&lt;/li&gt;
&lt;li&gt;If you get stuck on a problem, take a break - go for a walk, eat a snack, take a nap - and come back to it later and give it a fresh start.&lt;/li&gt;
&lt;li&gt;Practice and improve your programming skills by working on side projects outside of coursework. Create a webapp or project or anything that interests you. Practice using best practices in writing your code, write useful comments and docs, use version control and write tests. Include an open source license and make these repositories public on GitHub so that you have a portfolio of projects to show future employers.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>RPM Packaging for JMC</title><link>https://salmanfs.ca/posts/rpm-packaging-for-jmc/</link><pubDate>Thu, 02 Jan 2020 07:47:28 +0000</pubDate><guid>https://salmanfs.ca/posts/rpm-packaging-for-jmc/</guid><description>&lt;p&gt;When JDK Mission Control (JMC) was open-sourced, one of the main tasks for our team at Red Hat was to make it widely available to our developer community.
This meant packaging the application for Fedora.&lt;/p&gt;
&lt;p&gt;Fedora is a distribution of Linux sponsored by Red Hat.
It is the bleeding edge of free software and the upstream source of Red Hat&amp;rsquo;s flagship Enterprise Linux distribution, RHEL.&lt;/p&gt;
&lt;p&gt;I was tasked with packaging an RPM for JMC.
This allowed me to take a deep dive into Maven, Eclipse RCP and RPM build tools.&lt;/p&gt;</description></item><item><title>Nomad Rover</title><link>https://salmanfs.ca/posts/nomad-rover/</link><pubDate>Thu, 02 Jan 2020 07:43:53 +0000</pubDate><guid>https://salmanfs.ca/posts/nomad-rover/</guid><description>&lt;p&gt;This was a hackathon project for Mission Hacks 2018.
The theme was to create something that can be used by a hypothetical group of colonizers to
establish a settlement on &amp;ldquo;New Earth&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.facebook.com/CanadaRandstad/photos/basw.Abp4IYTQgbTVj4z-ZS730yyL22qmTNd6Ss709NIUUDmibtzaRZ1uk4-rDTvvvpJEpZLYBvIXnf08nw0r_61EbAjiNyFAf_2luc0jfdH3mlYwbJ_oKFLi5HgrDaBNAj6q_TCLfOoFyGOQ4tVItGWGRvJL.1866101276734794/1866101276734794/?type=1&amp;amp;theater"&gt;Our team&lt;/a&gt; decided to tackle the issue of exploring the new landscape.
We envisioned a fleet of autonomous drones and rovers that would traverse the new planet and identify known elements
while also taking various measurements and creating a map.
The team name &amp;ldquo;Nomad&amp;rdquo; came from the idea that we were going to wander about the &lt;em&gt;New Earth&lt;/em&gt; like nomads.&lt;/p&gt;</description></item><item><title>JDK Mission Control</title><link>https://salmanfs.ca/posts/jdk-mission-control/</link><pubDate>Thu, 02 Jan 2020 07:42:10 +0000</pubDate><guid>https://salmanfs.ca/posts/jdk-mission-control/</guid><description>&lt;p&gt;This was the project my team was working on during my coop at Red Hat in Toronto.
Formerly Java Mission Control, the tool was a proprietary offering in Oracle&amp;rsquo;s Java subscription.
It was open-sourced by Oracle in early 2018 (just before the start of my internship) as JDK Mission Control (JMC).
It is now a project under the OpenJDK umbrella.&lt;/p&gt;
&lt;p&gt;There was previously a similar open-source tool developed by the OpenJDK team at Red Hat called Thermostat.
Red Hat decided to focus their efforts on improving JMC rather than working on Thermostat since JMC was already the de facto industry standard.&lt;/p&gt;</description></item><item><title>Adaptive Corrosion Protection System</title><link>https://salmanfs.ca/posts/adaptive-corrosion-protection-system/</link><pubDate>Thu, 02 Jan 2020 06:50:17 +0000</pubDate><guid>https://salmanfs.ca/posts/adaptive-corrosion-protection-system/</guid><description>&lt;p&gt;I worked on this project as a Research Assistant at the
&lt;a href="https://ciber.fas.sfu.ca/"&gt;Centre for Integrative Bio-Engineering Research (CIBER)&lt;/a&gt;,
a lab in SFU&amp;rsquo;s Faculty of Applied Sciences headed by Prof. Bozena Kaminska.
The goal of the project was to develop a corrosion protection system using cathodic protection.
It would measure soil conditions, calculate protection current and corrosion rate and supply protection voltage.&lt;/p&gt;
&lt;p&gt;We forked an open-source project, &lt;a href="http://microfluidics.utoronto.ca/gitlab/dstat/dstat-interface"&gt;DStat&lt;/a&gt;,
that some researchers at University of Toronto had been developing.
I worked on the GUI that would interface with the hardware module over serial USB.&lt;/p&gt;</description></item><item><title>Coop @ Red Hat (and IBM?)</title><link>https://salmanfs.ca/posts/coop-red-hat-and-ibm/</link><pubDate>Wed, 17 Jul 2019 21:18:57 +0000</pubDate><guid>https://salmanfs.ca/posts/coop-red-hat-and-ibm/</guid><description>&lt;p&gt;I will be completing the fourth and final semester of my coop at Red Hat as a Software Engineering Intern at the end of summer. It has been an exciting opportunity to learn and develop my skills as a software developer in a real-world environment.&lt;/p&gt;
&lt;p&gt;Over these 16 months, I was given the chance to work on a wide variety of challenges. I began with little to no knowledge about programming in Java. The OpenJDK team, which I joined in my second week, was about to begin working on a tool for JVM performance monitoring. The tool, JDK Mission Control (JMC), was open sourced by Oracle in early 2018 so my team was still wrapping up their old project.&lt;/p&gt;</description></item><item><title>Maven HelloWorld - Create, Compile and Execute a Java Maven Project</title><link>https://salmanfs.ca/posts/maven-helloworld-create-compile-and-execute-a-java-maven-project/</link><pubDate>Sat, 01 Sep 2018 02:49:43 +0000</pubDate><guid>https://salmanfs.ca/posts/maven-helloworld-create-compile-and-execute-a-java-maven-project/</guid><description>&lt;h3 id="create"&gt;Create&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn archetype:generate
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will start an interactive process for generating the new project. There will be prompts for the groupId, artifactId, and version (among other things).&lt;/p&gt;
&lt;p&gt;To skip the interactive method, use the following syntax instead:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn archetype:generate -DgroupId&lt;span style="color:#f92672"&gt;=&lt;/span&gt;ca.salmanfs.javaPractice -DartifactId&lt;span style="color:#f92672"&gt;=&lt;/span&gt;HelloWorld -DinteractiveMode&lt;span style="color:#f92672"&gt;=&lt;/span&gt;false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="compile"&gt;Compile&lt;/h3&gt;
&lt;p&gt;Maven built us a basic Java file that prints &amp;ldquo;Hello World!&amp;rdquo;
We can compile that now:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;mvn compile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will execute the Maven build lifecycle phases of &amp;lsquo;validate&amp;rsquo; and &amp;lsquo;compile&amp;rsquo;.
This is what Maven is doing for us:&lt;/p&gt;</description></item><item><title>Why Learn Assembly?</title><link>https://salmanfs.ca/posts/why-learn-assembly/</link><pubDate>Wed, 18 Oct 2017 21:06:40 +0000</pubDate><guid>https://salmanfs.ca/posts/why-learn-assembly/</guid><description>&lt;p&gt;Assembly language? Who the heck wants to code in assembly language??&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ll say this much: it&amp;rsquo;s not for the faint of heart.&lt;/p&gt;
&lt;p&gt;Some people have similar thoughts of futility regarding C but the truth is that it&amp;rsquo;s still very important.&lt;/p&gt;
&lt;p&gt;&lt;img alt="C for Systems Programming" loading="lazy" src="https://salmanfs.ca/images/rsz-c-systems-programming.png"&gt;&lt;/p&gt;
&lt;p&gt;Assembly is very relevant in systems programming. It&amp;rsquo;s as low level as a sane man can program. If you have ever programmed in machine code, you deserve a gold trophy! (I&amp;rsquo;m not even going to qualify that statement by saying the code should&amp;rsquo;ve been useful as long as you understood what you wrote.)&lt;/p&gt;</description></item><item><title>TA: Day 0</title><link>https://salmanfs.ca/posts/ta-day-0/</link><pubDate>Thu, 07 Sep 2017 21:03:38 +0000</pubDate><guid>https://salmanfs.ca/posts/ta-day-0/</guid><description>&lt;p&gt;This semester I was offered a teaching assistant position for CMPT 295 Introduction to Computer Systems. When I got the news, I was really excited because when I was applying for the position it felt like a completely useless attempt (like many others). But I still went through with it, mostly because it was a no-BS application (read: no cover letter required).&lt;/p&gt;
&lt;p&gt;I first got the idea to apply for TA positions from Karol (a sessional instructor I had last year for a software engineering course).&lt;/p&gt;</description></item><item><title>Shogi</title><link>https://salmanfs.ca/posts/shogi/</link><pubDate>Sun, 01 Jan 2017 03:20:50 +0000</pubDate><guid>https://salmanfs.ca/posts/shogi/</guid><description>&lt;p&gt;I was the team leader for a term project in a software engineering course. Our team of 5 developers designed, developed and tested a program to play Shogi, a Japanese variant of chess. We used Julia for programming , GTK+ library for the graphical user interface, SQLite3 for the database and Fossil for version control. Users had the option to play the game in multiplayer mode with another user on the same computer, over email or over the local area network. Players could play the game using the CLI (colorful ASCII art) or the GUI. The program included 4 game modes (minishogi, standard shogi, chu shogi and tenjiku shogi) and 5 difficulty levels (normal, hard, suicidal, protracted death and random). The different game modes meant different pieces and a unique set of permissible movements for each. The difficulty levels were for how challenging the AI would play against the user. We also setup a one-click installation procedure (Linux and Windows compatible) for the game to ease installation headaches for users (download dependencies, create a launcher icon, etc.).&lt;/p&gt;</description></item><item><title>About</title><link>https://salmanfs.ca/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://salmanfs.ca/about/</guid><description>&lt;p&gt;I’m a Senior Software Engineer specializing in backend systems, API integration, and enterprise data pipelines.&lt;/p&gt;
&lt;p&gt;This is my place for writing about software, design, and the occasional stray thought. No posting schedule, no newsletter funnel. Just things I wanted to write down.&lt;/p&gt;
&lt;p&gt;Open to Senior/Lead Software Engineer or Integration Architect opportunities. Feel free to reach out!&lt;/p&gt;</description></item></channel></rss>