<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Fullstack Gracie Jiu-Jitsu]]></title><description><![CDATA[My journal blog detailing things I learn in tech, gracie jiu-jitsu, and life]]></description><link>https://fullstackgjj.com/</link><image><url>https://fullstackgjj.com/favicon.png</url><title>Fullstack Gracie Jiu-Jitsu</title><link>https://fullstackgjj.com/</link></image><generator>Ghost 3.7</generator><lastBuildDate>Tue, 21 Apr 2026 11:10:04 GMT</lastBuildDate><atom:link href="https://fullstackgjj.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Building Passion As A Software Engineer]]></title><description><![CDATA[The best software engineers generally love what they do.]]></description><link>https://fullstackgjj.com/building-passion-as-a-software-engineer/</link><guid isPermaLink="false">60260aea7d6d08480e9ba0b9</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Mon, 15 Feb 2021 02:16:51 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/02/meditation-background-2.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://fullstackgjj.com/content/images/2021/02/image.png" class="kg-image" alt="Building Passion As A Software Engineer"></figure><img src="https://fullstackgjj.com/content/images/2021/02/meditation-background-2.jpg" alt="Building Passion As A Software Engineer"><p>This is part one of an eight part series where I dive deeper into the concept of building passion with the intention of <a href="https://fullstackgjj.com/eight-traits-to-work-on/">becoming a better software engineer</a>.</p><p>Passion is a fundamental starting point for motivation. With all things being equal amongst eight traits for success, start with passion. The best software engineers generally love what they do. Software engineers pull from a variety of scientific disciplines and principles to design and build software. The more difficult the design constraints or the more difficult the problem, the more creative the engineer has to be to find a solution. </p><p>Finding passion to be able to love what you do as a software engineer can be very challenging. For me, I drew inspiration from Steve Wozniak while reading his book <em>iWoz: Computer Geek to Cult Icon: How I Invented the Personal Computer, Co-Founded Apple, and Had Fun Doing It. </em>He was the type of engineer who loved improving upon existing things and I found that quality within myself as well. Everytime I successfully improved existing software I get a really unique satisfaction that can't be replicated elsewhere in life. Everyone is very different so it is a good idea to explore many paths or try out different things until you find your calling as a software engineer. </p><p>Some really good advice that I believe in when it comes to building passion is to "follow your heart, not your wallet" and "do it for love, money comes anyways." When a person looks at the monetary value of a particular path, it's common to try to fit oneself into that path whether it be natural or unnatural. Monetary value is good when evaluating what to explore, but most of the time it's not a good idea to force it when it is clearly not meant to be.</p>]]></content:encoded></item><item><title><![CDATA[Eight traits to work on to be the best engineer you can be]]></title><description><![CDATA[That question was "what do I work on if I want to become the best software engineer that I can be?"]]></description><link>https://fullstackgjj.com/eight-traits-to-work-on/</link><guid isPermaLink="false">6026b7127d6d08480e9ba0bf</guid><category><![CDATA[Tech]]></category><category><![CDATA[Life]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Fri, 12 Feb 2021 22:24:32 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/02/meditation-background-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2021/02/meditation-background-1.jpg" alt="Eight traits to work on to be the best engineer you can be"><p>I came across this <a href="https://www.youtube.com/watch?v=Y6bbMQXQ180">TED talk</a> presented by Richard St. John almost fourteen years ago and thought it was interesting. A fairly thorough guide on becoming successful and famous. I did not have the desire to become super famous or rich and thought the concepts he presented would only be applicable towards that end so I did not think to implement his advise. Fourteen years later, some years working as a software engineer, a question pops up in my mind. That question was "what do I work on if I want to become the best software engineer that I can be?" That seems straight forward at first because you can google search the latest tech trends/tricks and pluck any one out of a hat and do some tutorial course or toy project with it. Does that really make someone a better engineer though? If you take some very good engineers in the past like Kent Beck or Steve Wozniak for example, is that what characterized them? I don't think so.</p><p>From that point on I was fascinated with the internal qualities of what it means to be the best you can be. I researched and looked into many self help resources that are currently popular. I was not happy with their quality of content (or lack thereof). Then I remembered that Richard St. John gave a pretty good talk and I could not find any holes or issues with what he was recommending. I bought his book, read through it, and now I aim to present some good advice tailored specifically for software engineers and how I personally am applying them. </p><p>I will be doing an 8 part series going into each trait development more in depth.</p><figure class="kg-card kg-image-card"><img src="https://fullstackgjj.com/content/images/2021/02/8-traits-diagram.jpg" class="kg-image" alt="Eight traits to work on to be the best engineer you can be"></figure><p>Here is an amazon affiliate link to his <a href="https://amzn.to/3tUJlB2">book</a> for anyone interested in reading the material. Any purchase made through that link supports this blog.</p>]]></content:encoded></item><item><title><![CDATA[Animedoro, rough drafting, and chapter a day for productivity]]></title><description><![CDATA[I not only was able to take care of my work, I was able to take care of my physical and health goals as well which I too often neglected in favor of saving time. ]]></description><link>https://fullstackgjj.com/animedoro/</link><guid isPermaLink="false">6021e44c7d6d08480e9ba004</guid><category><![CDATA[Tech]]></category><category><![CDATA[Life]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Tue, 09 Feb 2021 03:13:19 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/02/learning-background.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2021/02/learning-background.jpeg" alt="Animedoro, rough drafting, and chapter a day for productivity"><p>I was browsing YouTube and this video popped up as trending</p><!--kg-card-begin: html--><figure class="kg-card-embed" style="width: 100vw">
    <iframe width="600" height="337" src="https://www.youtube.com/embed/bUjGZJIgse0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</figure><!--kg-card-end: html--><p>I found it really cool and wish I had seen this when I was in college. The basic idea of working for 40-60 minutes and then taking a 20 minute break to watch a relaxing anime (or show) is way more appealing than the Pomodoro technique that I have been exposed to in the past. I have already implemented this productivity style for many weeks and added one modification to suit my life style. That modification was to add working out during those 20 minutes while an anime or show is playing. This is an example of my best and most productive 8 hour workday day:</p><ol><li>Completed current sprint's tasks 2 days ahead of schedule</li><li>100 pushups</li><li>100 squats</li><li>30 vertical rows</li><li>Full Pilates routine</li><li>One chapter of "Effective Engineer"</li></ol><p>I not only was able to take care of my work, I was able to take care of my physical and health goals as well which I too often neglected in favor of saving time. </p><p>There is another idea proposed in the video, which was a concept called rough drafting. To me, that means to incrementally improve on your work, not necessarily rush to get it done. I really enjoyed applying that concept and it has allowed work and coding to not feel as stressful. I feel the best work usually comes out at the most unexpected time of inspiration and trying to force that actually leads to the opposite result.</p><p>Finally, the last concept I want to talk about, is doing at most a chapter a day in any individual educational or self-improvement book. I have so many books to read in my personal library that it becomes daunting to read all them all. I experimented with just stopping after reading a chapter in any particular book before switching to another and I ended up reading a lot more than I ever had since college. If you are interested in reading more, I recommend to give that a try.</p><p>Recently, I got a copy of the book "8 To Be Great" written by Richard St. John. I plan to read through and adapt the 8 successful traits into engineering as a guide to give inspiration to fellow engineers who are brainstorming ways to become the best engineers they can be.</p><figure class="kg-card kg-image-card"><img src="https://fullstackgjj.com/content/images/2021/02/8-to-be-great.jpg" class="kg-image" alt="Animedoro, rough drafting, and chapter a day for productivity"></figure>]]></content:encoded></item><item><title><![CDATA[Updated engineering solutions pitch template]]></title><description><![CDATA[Here is an updated version of my previous mock solutions pitch for Open Fitness Culture]]></description><link>https://fullstackgjj.com/updated-engineering-solutions-pitch-template/</link><guid isPermaLink="false">601ff92e7d6d08480e9b9ead</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Sun, 07 Feb 2021 16:01:50 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/02/design-process.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2021/02/design-process.jpg" alt="Updated engineering solutions pitch template"><p>I recently started reading a book written by one of my college professors back at University at Buffalo called <a href="https://www.manning.com/books/blockchain-in-action">Blockchain in Actions</a>. It's a really well-written book. A surprising takeaway that I have so far is how she proposes her blockchain solution to her sample problem. I've decided to adapt some key concepts and fit them into my way of doing it including using a table to help make viewing easier.</p><!--kg-card-begin: markdown--><p><em><strong>Background definitions(in paragraph form):</strong></em><br>
<em><strong>Use case with problem statement:</strong></em><br>
<em><strong>Issues with how problem is currently tackled | Implications</strong></em><br>
<em><strong>Previous or existing attempts at solution | Pros | Cons</strong></em><br>
<em><strong>Proposed new solution</strong></em><br>
<em><strong>Benefits | Consumer | Business | Overall Community</strong></em></p>
<!--kg-card-end: markdown--><p>Here is an updated version of my previous mock solutions pitch for <a href="https://fullstackgjj.com/formulating-engineering-challenges-and-problem-statements/">Open Fitness Culture</a>.</p><h2 id="open-fitness-culture-">Open Fitness Culture:</h2><p>The fitness industry contains a lot of products or programs that are fads or have paid promoters making exaggerated claims that over promise and under deliver in results. Old trends get recycled as new and beautiful models are used to misrepresent results to consumers. A fitness culture that is open and honest should allow people to see and verify start to end fitness journeys that would more closely match their own. Aspiring fitness enthusiasts should be able to market and monetize their own start to end fitness programs with reproducible results for people to see.</p><hr><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Use case: Open Fitness culture platform</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Problem statement: what kind of platform and technology is required to support this kind of culture of openness to new fitness programs with verification of actual success with relatable start to end journeys?</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Issues with how problem is currently tackled</strong></th>
<th><strong>Implications</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>The problem is not being tackled at all</td>
<td>People have unrealistic expectations of program or on the other end can not be convinced program will work for them</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Previous or existing attempts at solution(2/7/2021)</strong></th>
<th><strong>Pros</strong></th>
<th><strong>Cons</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>None</td>
<td>NA</td>
<td>NA</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th><strong>Proposed new solution</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Live streaming platform specifically intended for before and after results with verified workout footage and journey. Additional features to allow quick filtering by results, timeframe, level of fitness, and body weight/height for consumers to find their own match.</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><!--kg-card-begin: markdown--><p><strong>Benefits:</strong></p>
<table>
<thead>
<tr>
<th><strong>Consumer</strong></th>
<th><strong>Business</strong></th>
<th><strong>Overall Community</strong></th>
</tr>
</thead>
<tbody>
<tr>
<td>Get a potentially infinite number of workout programs with results viewable by people just like them who have tried the programs before them.</td>
<td>Carve out niche market in the health tech industry by being a pioneer.</td>
<td>Expanding what's possible with new emerging ways to use technology</td>
</tr>
<tr>
<td>New trainers who want to make a niche or who have unique programs to offer have a platform to show the proof as to their effectiveness.</td>
<td>Great platform for sponsorship and advertisement.</td>
<td>Good platform for people to make friends and share ideas with each other.</td>
</tr>
<tr>
<td>Maximize the benefits of being held accountable for working out and being examples for future workout people</td>
<td>Ability to branch out to other fields/discipline where consistent practice and reproducible programs would be valuable.</td>
<td></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><hr><p>What I like about this modification is that it makes all the relevant information very compact and easy to navigate and it formulates upfront all the presentation information you would want if making it into a slideshow or doodle presentation.</p>]]></content:encoded></item><item><title><![CDATA[Postman JSON to file directory translations]]></title><description><![CDATA[To make collaboration and API development on Postman better]]></description><link>https://fullstackgjj.com/postman-to-file-directory-converter/</link><guid isPermaLink="false">600482127d6d08480e9b9dc6</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Sun, 17 Jan 2021 22:34:41 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/01/Rust_Logo.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2021/01/Rust_Logo.jpg" alt="Postman JSON to file directory translations"><p><strong>Context</strong>: <a href="https://www.postman.com/">Postman</a> is a widely used tool that is useful for API development. A Postman collection is a defined collection that allows for documenting, sharing, automated monitoring, and express complex workflows for API's and their success/failure. Postman collections are expressive enough that I believe API workflows as libraries can be encapsulated within them and be executed by an interpreter (my other <a href="https://fullstackgjj.com/postman-interpreter-in-rust/">project</a>) in any environment or program.</p><p><strong>Challenge</strong>: The way that Postman currently imports and exports collections is entirely through JSON. This is a problem because when trying to collaborate in a version controlled environment (such as git), the line diffs and changes that are being made will result in merge conflicts or garbage diffs that are hard to collaborators to review and merge together. </p><!--kg-card-begin: markdown--><p><strong>Current Solutions(implications)</strong>:</p>
<ul>
<li>Upgrade to the enterprise tier of Postman product to allow separate accounts to make changes and modification of collections and be able to revert any change using Postman's history feature (does not allow a truly separate workflow for separate changes and merging of everyone's work, changes can happen without a review process)</li>
</ul>
<p><strong>Possible Solutions(pros/cons)</strong>:</p>
<ul>
<li>A program that can take in Postman collection JSON and convert that into a folder directory structure with information regarding the collection. The directory structure can also hold additional metadata to allow conversion back into Postman collection JSON to be loaded into the application or be run by Newman.
<ul>
<li><em>Pros</em>:
<ul>
<li>Allows easier version control diffing and team review process</li>
<li>Allows collections to be easily shared and contributed to by users who don't have an enterprise Postman account</li>
<li>Offloads Postman application's necessity to hold all the information</li>
</ul>
</li>
<li><em>Cons</em>:
<ul>
<li>A lot of work to write a program that can handle that kind of conversion process</li>
<li>If Postman ever decides to change its JSON schema regarding collections, will have to also be updated to accomodate</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>Solution in Progress</strong>: A Rust program that can take in Postman collection JSON and output a directory of folders and YAML files that correspond to the requests in the Postman collection. On the flip side, the program should also be able to take in a metadata file of said output directory and be able to construct an identical Postman collection JSON that can be fed back into Postman.</p>
<p><strong>Business Impact</strong>:</p>
<ul>
<li>Consumer win:
<ul>
<li>Consumers would be able to maintain all the power and expressiveness that Postman encapsulates but also be able to version control the changes to collections</li>
<li>More simultaneous collaboration changes to a Postman collection can happen</li>
</ul>
</li>
<li>Open Source Contributor win:
<ul>
<li>Be able to demonstrate skill with Rust programming language</li>
<li>Potentially be involved in growing trend of unification and simplication of API usage in tech</li>
</ul>
</li>
<li>Everyone win:
<ul>
<li>Enhanced collaboration and easier documentation with API development</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Better .NET monads]]></title><description><![CDATA[My start to make good a good monad library]]></description><link>https://fullstackgjj.com/better-net-monads/</link><guid isPermaLink="false">6001372e7d6d08480e9b9c71</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Fri, 15 Jan 2021 08:05:40 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2021/01/dotNet5Logo.png" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2021/01/dotNet5Logo.png" alt="Better .NET monads"><p>If you have ever ran into a code base or find yourself involved in a workflow that has a lot of code that looks like this</p><!--kg-card-begin: markdown--><pre><code class="language-csharp">var result1 = Action1();
if (!result1.Success) {
  return new Error1();
}

&lt;Action&gt;

var result2 = Action2(result1.value);
if (!result2.Success) {
  return new Error2();
}
</code></pre>
<!--kg-card-end: markdown--><p>Then you may benefit a lot from using the concept of monads to replace that logic in your code. If you don't know what monads are, I recommend checking out this Youtube video:</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/t1e8gqXLbsU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><p>What potential issues can come from the code snippet above and how can monads help? Other than being verbose, the biggest potential issue comes from reliance on runtime error checking. There is no compiler error that would pop up if a person decides to not check if either result1 or result2 were successful. Type systems in programming languages that support them are very powerful. If you are able to delegate more errors into compiler time type checks, your code can have more guarantees and highlights in places that have the potential to go wrong. </p><p>Does there exist a type system that can express code that can encounter an error and force the person using the code to catch all errors in order to pass compiler check? In most functional programming languages and in Rust, there are such type systems, and these type systems implement the concept of monads.</p><p>When you have a workflow or process comprising of multiple methods, if even one method in the process can fail, that means the overall workflow can fail. </p><!--kg-card-begin: markdown--><pre><code class="language-csharp">var workflowResult = Workflow();
Console.WriteLine(workflowResult * workflowResult);

public int Workflow() {
  var something1 = DoSomethingThatAlwaysSucceeds1();
  var something2 = DoSomethingThatRandomlyFails2(something1);
  
  if (something2 == null) {
    return null;
  }
  
  var something3 = DoSomethingThatRandomlyFails3(something2);
  
  if (something3 == null) {
    return null;
  }
  return something1 + something2 + something3;
}
</code></pre>
<!--kg-card-end: markdown--><p>Without monad types existing, there is no compiler error to let the user of <code>Workflow()</code> method know that it can possibly fail. In this instance, the failure is represented as a <code>null</code> return value but there is nothing in the interface of the definition that would give hint that it can return null (documentation might be what the user has to rely on) and be vulnerable to a runtime <code>NullException</code>. </p><p>What would the above example look like if C# had monads like Rust? It would look like this</p><!--kg-card-begin: markdown--><pre><code>var workflowResult = Workflow();
match (workflowResult) {
  Succ(val) =&gt; Console.WriteLine(workflowResult * workflowResult),
  Err(e) =&gt; Console.WriteLine(e)
}

public Result&lt;int, string&gt; Workflow() {
  var something1 = DoSomethingThatAlwaysSucceeds1();
  return DoSomethingThatRandomlyFails2(something1).
         .AndThen(something2 =&gt; DoSomethingThatRandomlyFails3(something2))
}

public Result&lt;int, string&gt; DoSomethingThatRandomlyFails2(int s) {
  if (DateTime.Now.Second == s) {
    return new Err(&quot;method 2 failed&quot;);
  }
  
  return new Succ(5);
}

public Result&lt;int, string&gt; DoSomethingThatRandomlyFails3(int s) {
  if (DateTime.Now.Second == s) {
    return new Err(&quot;method 2 failed&quot;);
  }
  
  return new Succ(10);
}
</code></pre>
<!--kg-card-end: markdown--><p>In the above code snippet, it is abundantly clear that Workflow() method returns something that can either be the result, or the error response and the intention is that if either is not handled, the code will not compile. Looking at the signature of the two methods that randomly fail, it is clear what happens when they succeed, and what to expect when they fail. </p><p>Interestingly, a feature similar to this does exist in a dotnet nuget <a href="https://github.com/louthy/language-ext">package</a> in in the form of <code>Either</code> monad. The syntax of it however, did not seem very clear and that's why I want to create a dotnet monad library that follows more along the lines with what Haskell or Rust has. </p>]]></content:encoded></item><item><title><![CDATA[Postman Interpreter in Rust]]></title><description><![CDATA[API development and publication can be much better than what exists currently]]></description><link>https://fullstackgjj.com/postman-interpreter-in-rust/</link><guid isPermaLink="false">5fe110567d6d08480e9b9b77</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Tue, 22 Dec 2020 00:22:33 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/12/Rust_Logo.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2020/12/Rust_Logo.jpg" alt="Postman Interpreter in Rust"><p><strong>Context</strong>: A lot of advancements have been made in terms of web API development and SDK generation for consumer to use. Documenting and sharing API using OpenAPI (OAI) and creating/generating SDK's using OAI specs has allowed a big step forward for API design and usage. Good API design and documentation is crucial for adaptation.</p><p><strong>Challenge</strong>: Despite there existing more readable options for documenting and sharing API that have OAI specs, demonstrating how an end to end workflow using multiple API calls is still a challenge. Things get even more complicated if one is trying to document or demonstrate a workflow that involve multiple API's.</p><!--kg-card-begin: markdown--><p><strong>Current Solutions</strong>:</p>
<ul>
<li>Rely on written documentation to communicate what E2E workflows are supposed to look like to a consumer (can be a challenge to write good documentation that doesn't leave the consumer still asking questions in addition to keeping them up to date)</li>
</ul>
<p><strong>Possible Solutions(pros/cons)</strong>:</p>
<ul>
<li>Use a popular framework/ecosystem for designing and testing API and write an API workflow that can include calls to multiple different API's in its workflow and write an interpreter in Rust that can utilize that representation of a workflow and be the SDK for consumer use. WebAssembly can be used to export that interpreter to various other programming languages.
<ul>
<li><em>Pros</em>:
<ul>
<li>Great flexibility</li>
<li>Great performance by utilizing Rust</li>
<li>Design API workflow once, export it everywhere</li>
</ul>
</li>
<li><em>Cons</em>:
<ul>
<li>A lot of work to write an interpreter that can handle the vast scope of possible workflows and scenarios of web API's</li>
<li>Would be tied to an ecosystem that can change</li>
</ul>
</li>
</ul>
</li>
<li>(Didn't identify alternative competing solutions from Google research)</li>
</ul>
<p><strong>Solution in Progress</strong>: A Rust interpreter that can take in an exported JSON representation of a Postman collection and be able to perform the actions encapsulated in that collection. Using WebAssembly System Interface, this interpreter can be utilized by various other programming languages while only maintaining one codebase.</p>
<p><strong>Business Impact</strong>:</p>
<ul>
<li>Consumer win:
<ul>
<li>Would only have to maintain one source of truth Postman collection when supporting various language's SDKs</li>
<li>Less coding errors, more time spent on intuitive user interface</li>
</ul>
</li>
<li>Open Source Contributor win:
<ul>
<li>Be able to demonstrate skill with Rust programming language</li>
<li>Potentially be involved in growing trend of unification and simplication of API usage in tech</li>
</ul>
</li>
<li>Everyone win:
<ul>
<li>Greater clarity in API documentation</li>
<li>Enhanced ability to tie different API's together for better designation of responsibilities</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Great video about benefits of Rust]]></title><description><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/Dbytx0ivH7Q?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><p>Found this nice presentation on the problems that Rust solves as a programming language. Check it out.</p>]]></description><link>https://fullstackgjj.com/great-video-about-benefits-of-rust/</link><guid isPermaLink="false">5f84724e7d6d08480e9b9b63</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Wed, 14 Oct 2020 20:08:21 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/10/rust-logo.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-embed-card"><iframe width="480" height="270" src="https://www.youtube.com/embed/Dbytx0ivH7Q?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></figure><img src="https://fullstackgjj.com/content/images/2020/10/rust-logo.jpg" alt="Great video about benefits of Rust"><p>Found this nice presentation on the problems that Rust solves as a programming language. Check it out.</p>]]></content:encoded></item><item><title><![CDATA[PT productivity software suite]]></title><description><![CDATA[As a physical therapist, certain workflows and processes that can be automated are very tedious manual work that exponentially increases with the number of patients]]></description><link>https://fullstackgjj.com/pt-productivity-software-suite/</link><guid isPermaLink="false">5f7a1cf47d6d08480e9b9a9d</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Mon, 05 Oct 2020 00:33:25 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/10/physical-therapy-cartoon.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://fullstackgjj.com/content/images/2020/10/physical-therapy-cartoon.jpg" alt="PT productivity software suite"><p><em><strong>Context</strong></em>: Modern technology has revolutionized productivity for a lot of industries. Healthcare, particularly in the physical therapy realm, still has a lot of improvements needed to empower the professional and not let paperwork and administrative work take time away from doing what's important.</p>
<p><em><strong>Challenge</strong></em>: As a physical therapist, certain workflows and processes that can be automated are very tedious manual work that exponentially increases with the number of patients or the complexity of surrounding circumstance with a patient (insurance disparity, lack of documentation, etc).</p>
<p><em><strong>Current solutions (implications)</strong></em>:</p>
<ul>
<li>Work long hours outside of patient interaction schedule windows (<em>may lead to burnout</em>)</li>
<li>Schedule tedious administrative work to be done within patient interaction schedule or business hours (<em>less chance of burnout, opportunity cost</em>)</li>
</ul>
<p><em><strong>Possible solutions (pros/cons)</strong></em>:</p>
<ul>
<li>All encompassing PT software suite solution built from ground up
<ul>
<li><em>Pro</em>:
<ul>
<li>Most customizable and streamline options can be tailor made</li>
</ul>
</li>
<li><em>Con</em>:
<ul>
<li>Expensive, time consuming to make, not generic enough to help all health professionals</li>
<li>Hard to get approval from upper management on big software shift</li>
</ul>
</li>
</ul>
</li>
<li>Individual programs for incrementally improving each step of a physical therapist's workflow
<ul>
<li><em>Pro</em>:
<ul>
<li>Easier to develop</li>
<li>More chance of individual solutions for a smaller workflow being applicable to more physical therapists</li>
<li>Requires less leap of faith</li>
</ul>
</li>
<li><em>Con</em>:
<ul>
<li>Not a one stop shop solution from the ground up</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><em><strong>Solution chosen (why)</strong></em></p>
<ul>
<li>Individual programs for incrementally improving each step of a physical therapist's workflow (<em>it is the fastest way to get quick workflow enhancement out with maximum impact</em>)</li>
</ul>
<p><em><strong>Business impact</strong></em></p>
<ul>
<li>Consumer win:
<ul>
<li>Less time and work requirement for PT to see increasing number of patients</li>
<li>Reduce possibility of PT burnout</li>
</ul>
</li>
<li>Business win:
<ul>
<li>Able to implement complete end to end workflow of creating technological solution from inception, design, to implementation and support</li>
<li>Add to portfolio for resume</li>
<li>Enhance skills in using new and latest technology stack</li>
</ul>
</li>
<li>Everyone win:
<ul>
<li>Enhance and bring light to possibilities on productivity enhancing technologies for healthcare workers</li>
<li>More efficient processes for patients</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Proactive engineering]]></title><description><![CDATA[As an engineer try to push the boundaries on what's possible and coming up with solutions to problems yet dreamed of]]></description><link>https://fullstackgjj.com/proactive-engineering/</link><guid isPermaLink="false">5ef9ebaf7d6d08480e9b93df</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Sat, 11 Jul 2020 18:19:55 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1560574188-6a6774965120?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<img src="https://images.unsplash.com/photo-1560574188-6a6774965120?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Proactive engineering"><p>What does it mean to be an engineer? What does it mean to be a craftsman?</p><p>Engineering to me is the ability to come up with solutions to problems using a combination of technology, science, math, and many other disciplines. A stronger engineer can come up with a good solution where a lesser engineer couldn't. Craftsmanship to me is the mindset to think long term in terms of a product or craft and always trying to get better and better outcome of a product's life. A stronger craftsman will create products that are way more usable, stable, and effective than products created by a lesser craftsman. The phrase "the desire to do a job well for its own sake" is a good way to describe it.</p><p>I think it's healthy for a software developer to try to improve and embody what it means to be an engineer and a craftsman in their career. Take a proactive approach. As an engineer try to push the boundaries on what's possible and coming up with solutions to problems yet dreamed of. Maybe set aside time, or whenever you find yourself having downtime, to just brainstorm and dream with your users on what's possible and how you can push the boundaries on existing solutions. As a software craftsman try to refine what you have done in the past and see what can be improved upon for the sake of exploring how to make something more usable, stable, and effective. Have the desire to do a job better or increase your ability to do so for its own sake. Don't just be reactive as an engineer, take proactive steps to bring something new to the table.</p><p><br>These important attributes are huge reasons why I don't think companies should overburden their employees with things like performance metrics or time tracking to squeeze every drop of productivity out of their engineers. When an employee experiences those kind of confines, you lose a mindset of creativity and excellence that is probably the most valuable asset in the tech industry. No one ever said "Apple squeezed so much labor efficiently out of their engineers so that's why their phones don't seem to crash" or "Windows phone failed because they missed out on productivity from their engineers."</p>]]></content:encoded></item><item><title><![CDATA[Social media platform dedicated to goals and progress]]></title><description><![CDATA[Why can't any of the currently existing social media platforms such as Facebook, Twitter, Instagram, etc, fulfill my requirements? They simply show too much, do too much, and try to engage too much.]]></description><link>https://fullstackgjj.com/social-media-platform-for-goals/</link><guid isPermaLink="false">5eff6f537d6d08480e9b96e2</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Sat, 04 Jul 2020 03:59:50 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/07/goals.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2020/07/goals.jpg" alt="Social media platform dedicated to goals and progress"><p>Have you ever wanted to improve on something or strive to better yourself but you're not sure in what aspect or way and you search up what other people are doing to get inspiration? Have you ever been curious as to the learning path some people took to get at the skill level or expertise that they currently are at? I've definitely had a lot of moments like these and I'm sure I'm not the only one.</p><p>I was designing a custom solution to conveniently track and record my progress in different goals (I wrote more about my recommended progress philosophy <a href="https://fullstackgjj.com/reasonable-goals-for-learning-and-progress/">here</a>). It was going to be a personal app that would allow me to add weekly focus/tasks under different categories of goals to work on and as the weeks go by that history will be logged for the purpose of giving someone else a path to follow. I then started to wonder "what if you can see your friends doing the same thing?" I felt like that can be very inspiring. </p><p>Imagine a group of friends who are getting into running. If any one of them is curious as to the weekly progress everyone made or what they are up to, or what specific routines they are doing to get better, it can somewhat be a hassle. You might have to do a weekly check up, maybe through texting or some kind of messenger app but it would be nice to just have a clear view of what everyone felt like sharing each week on what they did to progress their goals. </p><p><a href="https://www.strava.com/features">Strava</a> is an app that I've used before where cyclists and runners can highlight routes on a map for others to see and challenge each other. A user can get a birds eye view to see who has ridden which segments on the map, recorded time, fastest speeds, etc. A user is also able to track and record all of the segments they rode and their times for others to view as well. It is a great example of what I'm thinking of except that the social media platform I want to establish isn't solely focused on outdoor running/cycling but can be used to make progress for any goal.</p><p>Why can't any of the currently existing social media platforms such as Facebook, Twitter, Instagram, etc, fulfill my requirements? They simply show too much, do too much, and try to engage too much. I don't want a nonstop feed of random information, no matter how well the algorithm predicted that I would like it. I just want laid out information on how my friends shared their progress on improving themselves. I want to see how renowned experts advanced their knowledge in some way or what specific concepts my jiu-jitsu friends are focusing on. Most social media platforms are designed to waste time but this one that I have in mind is designed to make people get off it once they get on, because they see all the people making progress on their goals and not wasting time on social media. </p><p>This is just the rough draft on the idea I would like to make happen. I will formulate it as an engineering proposal in my next post.</p>]]></content:encoded></item><item><title><![CDATA[Formulating engineering challenges and problem statements]]></title><description><![CDATA[It can be super tempting to only want to dive deeper and deeper in tech, to show off, but sometimes it's good to keep in mind that no one cares about you. They care what you can do for them...]]></description><link>https://fullstackgjj.com/formulating-engineering-challenges-and-problem-statements/</link><guid isPermaLink="false">5efb82d17d6d08480e9b9452</guid><category><![CDATA[Tech]]></category><category><![CDATA[Gracie Jiu-Jitsu]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Wed, 01 Jul 2020 04:16:27 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/07/design-process.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2020/07/design-process.jpg" alt="Formulating engineering challenges and problem statements"><p>One of the most valuable learning experiences I ever had in my life was during my Gracie ICP certification training. I learned that how you frame a question for a lesson made a huge impact on whether your students would ever absorb the material. It made so much sense that I could not help but to adopt it for software engineering and communicating problems and solutions. I would like to share a useful format that I've started to refine since going through the Gracie ICP in the hopes that other engineers can find it useful.</p><!--kg-card-begin: markdown--><p><em><strong>Context</strong></em>:<br>
<em><strong>Challenge</strong></em>:<br>
<em><strong>Current workflow (implication)</strong></em>:<br>
<em><strong>Possible solutions (pros/cons)</strong></em>:<br>
<em><strong>Solution created</strong></em>:<br>
<em><strong>Business impact</strong></em>:</p>
<!--kg-card-end: markdown--><p>This is actually a format that I use when I'm thinking of or presenting a hackathon project or proposing a creative solution to a current problem. A key presentation detail that isn't very obvious is that the language and terminology used to outline everything should be understandable by the lowest common denominator of your audience, which can possibly include the lay person outside of tech. This is to minimize the barrier to entry for the audience to understanding what you are trying to communicate. Here is a fleshed out example.</p><hr><!--kg-card-begin: markdown--><h2 id="openfitnessculture">Open Fitness Culture</h2>
<p><em><strong>Context</strong></em>: The fitness industry contains a lot of products that are fads or have paid promoters making exaggerated claims that over promise and under deliver in results. Old trends get recycled as new and beautiful models are used to  misrepresent results to the population.</p>
<p><em><strong>Challenge</strong></em>: As a consumer, it is exceedingly difficult to determine how effective an exercise program would be for you since you are unable to determine if the testimonials are real. This can be a problem because not only do you not know if the testimonials you see are real, but you may have the wrong impression about what your progress would look like compared to what they actually would be in reality. These issues often times cause people to quit out of frustration and not having the right expectations.</p>
<p><em><strong>Current solutions(implications)</strong></em>:</p>
<ul>
<li>Just tell people to suck it up and believe and achieve (<em>if people quit it's their fault</em>).</li>
</ul>
<p><em><strong>Possible solutions (pros/cons)</strong></em>:</p>
<ul>
<li>Make real people video vlog their everyday journey with the program
<ul>
<li><em>Pro</em>:
<ul>
<li>adds relatibility</li>
<li>good story</li>
<li>definitive proof</li>
</ul>
</li>
<li><em>Con</em>:
<ul>
<li>hard to get people to do</li>
<li>hard to consume</li>
</ul>
</li>
</ul>
</li>
<li>Gather up written testimonials with before and after pics
<ul>
<li><em>Pro</em>:
<ul>
<li>easy to do</li>
<li>easy to read if you can trust the testimonial</li>
</ul>
</li>
<li><em>Con</em>:
<ul>
<li>issue of paid testimonial</li>
<li>no substantial material on expected progress</li>
</ul>
</li>
</ul>
</li>
<li>Make a video live streaming service that is specifically intended to live stream workout programs and people's everyday participation in them. Use those live stream and recordings to be proof of the workouts, before and after transformation between dates to be the expected results, and the workout participant to be the example for other people like him/her.
<ul>
<li><em>Pro</em>:
<ul>
<li>Allows optimal relatability as consumer can look at live or recorded live journey of someone with similar attributes as him/her.</li>
<li>Definitive proof due to the live streaming nature of the workouts and gives a reproducible schedule.</li>
<li>Allows the best set up of expectation of progress since someone with matching attributes is used as an example benchmark for your current rate of progress.</li>
<li>Allows new comers to create workout programs that can be repeated and reproduced with results of various people to either validate or discredit a workout program.</li>
</ul>
</li>
<li><em>Con</em>:
<ul>
<li>Requires significant infrastructure and engineering work.</li>
<li>Might be hard to get people to do</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><em><strong>Solution created</strong></em>: Live streaming platform specifically intended for working out with features of monetizing workout programs through advertisement and paid sponsorships. Features quick filtering by results, timeframe, level of fitness, and body weight/height.</p>
<p><em><strong>Business impact</strong></em>:</p>
<ul>
<li>Consumer win:
<ul>
<li>Get a potentially infinite number of workout programs with results viewable by people just like them who have tried the programs before them.</li>
<li>New trainers who want to make a niche or who have unique programs to offer have a platform to show the proof as to their effectiveness.</li>
<li>Maximize the benefits of being held accountable for working out and being examples for future workout people</li>
</ul>
</li>
<li>Business win:
<ul>
<li>Carve out niche market in the health tech industry by being a pioneer</li>
<li>Great platform for sponsorship and advertisement</li>
<li>Ability to branch out to other fields/discipline where consistent practice and reproducible programs would be valuable</li>
</ul>
</li>
<li>Everyone win:
<ul>
<li>Expanding what's possible with new emerging ways to use technology</li>
<li>Good platform for people to make friends and share ideas with each other</li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><hr><p>From this example you can see, that I used very little tech terminology, not only because it wasn't necessary to imagine what was possible, but because it is not relevant to the people I would be pitching this tech solution to. In fact, I would venture a guess that a lot of your interactions as an engineer could go even better if you refrain from relying on tech specific terminology. </p><p>When I started to train Gracie Jiu-Jitsu and Judo, and after I learned the fundamentals and started to execute them proficiently, I thought the biggest impact I could make to my martial arts career was to dive deeper and deeper into more advanced and situational techniques so that way I can display my prowess and my experience. What I realize now is that it's my communication skills that would make the biggest impact on my martial arts career. Software engineering is not that different. It can be super tempting to only want to dive deeper and deeper in tech, to show off, but sometimes it's good to keep in mind that no one cares about you. They care what you can do for them and your communication skills are your most valuable asset when you want to show what you can do for people.</p>]]></content:encoded></item><item><title><![CDATA[Reasonable goals for learning and progress]]></title><description><![CDATA[The more things a simple guideline can be applicable to, the closer it is to being a unifying theory. Simple guidelines and advice are easier to remember and way easier to teach the next generation.]]></description><link>https://fullstackgjj.com/reasonable-goals-for-learning-and-progress/</link><guid isPermaLink="false">5ef6b5d27d6d08480e9b929c</guid><category><![CDATA[Gracie Jiu-Jitsu]]></category><category><![CDATA[Life]]></category><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Sat, 27 Jun 2020 04:16:32 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/06/learning-background.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2020/06/learning-background.jpeg" alt="Reasonable goals for learning and progress"><p>	I like paradigms or helpful simple guidelines that can be applied to many things in life. The more things a simple guideline can be applicable to, the closer it is to being a unifying theory. Simple guidelines and advice are easier to remember and way easier to teach the next generation. Here is probably my most meaningful and simple advice that I could ever give to my future generations.</p><!--kg-card-begin: markdown--><blockquote>
<p>&quot;Make a meaningful advancement in your self development every week&quot; - Hank Lin</p>
</blockquote>
<!--kg-card-end: markdown--><p>	There are so many things in life that a person can work on. Some people would like to conquer their fears, others want to learn a new skill, however way a person can define his/her goal I highly recommend trying to make progress on that self improvement goal every week. </p><p>	Why do I say every week? Why not say every day, or month, or year? I say every week because that's what has been universally applicable to me personally in so many endeavors in life. I noticed that trying to rush to improve literally everyday gets boring and repetitive, and making progress once a month is just not satisfying. I utilized this principle for many different categories of skills that I acquired. Body weight training, Gracie Jiu-Jitsu, cooking, using vim, and software engineering.</p><p>	Here is a way to learn that I and many people find to be very natural in terms of expanding your skillset or broadening your horizon. I call this the flashcard method. You create a bunch of flashcards for something new you want to try in a particular skillset, and you focus on that new thing for a week. You apply that new skill, technique, or concept whenever you get the chance. The body and mind takes time to improve and adapt/adjust and similar to how most people will not see improvement from their workout until the week after recovery, you might find yourself taking a week to improve on that flashcard you were focusing on. After you spend that week working on that flashcard you shuffle that flashcard into the pile of flashcards you've already worked on and you take another from the new deck. Periodically you should revisit the old pile of previously worked on flashcards and maybe focus on one of the old ones for a week or just quickly review each in rapid fire depending on how comfortable you are with what's in the old pile.</p><p>	Take something that is not an abstract skillset, maybe something involving emotional maturity such as communication skills or relationship health. This flashcard method, once a week progress goal worked tremendously well for me in that regard too and I see myself doing the same for when I have a kid in the future.</p><p>	To some people, improving once a week doesn't sound impressive but I want to help you think through how impressive it actually is. Imagine if a person learning Gracie Jiu-Jitsu, going 2X a week, and making significant improvement after each week no matter what the topic of the week was, that person would be a monster after a year. If a person focused a week using 'hjkl' keys in vim instead of the arrow keys, and then next week focused on utilizing q macros, they would be already ahead of 90% of the population in terms of effective use. If you have a parent who has anger issues and that parent spent a week focused on not being bothered by 1 particular thing, then another week on taming the anger on another thing, etc. After a year that parent will have 52 anger pain points that they made progress on, or 1 primary anger issue reduced by a small amount 52 times. </p><p>	Consistency will always win over monumental effort in the long run</p>]]></content:encoded></item><item><title><![CDATA[Trying out Rust and WebAssembly]]></title><description><![CDATA[<p>Following this <a href="https://rustwasm.github.io/docs/book/introduction.html">guide</a> to get a handle on Rust and how it looks to create WebAssembly that can work on the browser. First thing that went wrong was needing to upgrade NodeJS because npm apparently required a newer version of NodeJS on my Windows machine all of a sudden. So</p>]]></description><link>https://fullstackgjj.com/trying-out-rust-and-webassembly/</link><guid isPermaLink="false">5ef6378a7d6d08480e9b925a</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Fri, 26 Jun 2020 23:25:15 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/06/Rust_Logo-2.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://fullstackgjj.com/content/images/2020/06/Rust_Logo-2.jpg" alt="Trying out Rust and WebAssembly"><p>Following this <a href="https://rustwasm.github.io/docs/book/introduction.html">guide</a> to get a handle on Rust and how it looks to create WebAssembly that can work on the browser. First thing that went wrong was needing to upgrade NodeJS because npm apparently required a newer version of NodeJS on my Windows machine all of a sudden. So after upgrading to Node v12, I then found out that git wasn't recognized in powershell so the command to clone a git repo to initialize an npm project with the command <code>npm init wasm-app www</code> wasn't working. I wish Windows would have the foresight to install git on machines, it's just extra hassle and work that makes me feel Windows development environment isn't aligned with what normal developers would work with.</p><p>Going through the tutorial to make Conway's game of life was really awesome. There does not exist a ton of stuff to make it look great yet but it was just so cool seeing how it all worked together and seeing live changes happen from manipulating Rust code to convert to WebAssembly. I might go through different projects that I've completed before in other frameworks/languages and use this Rust/WebAssembly setup and try it out. I eventually want to move onto the Gameboy emulator that was written in Rust/WebAssembly.</p>]]></content:encoded></item><item><title><![CDATA[Programming Exercises 1 through 6 in Rust]]></title><description><![CDATA[<figure class="kg-card kg-image-card"><img src="https://fullstackgjj.com/content/images/2020/06/image-3.png" class="kg-image"></figure><p>The first 5 exercises focus on command line input and output. I most likely will add more exercises under the category for input and output in the future. This was to get me familiar with coding in Rust.</p><p>I found it interesting that it is so hard to move away</p>]]></description><link>https://fullstackgjj.com/programming-exercises-1/</link><guid isPermaLink="false">5ef18d497d6d08480e9b91d7</guid><category><![CDATA[Tech]]></category><dc:creator><![CDATA[Hank Lin]]></dc:creator><pubDate>Thu, 25 Jun 2020 03:55:13 GMT</pubDate><media:content url="https://fullstackgjj.com/content/images/2020/06/Rust_Logo-1.jpg" medium="image"/><content:encoded><![CDATA[<figure class="kg-card kg-image-card"><img src="https://fullstackgjj.com/content/images/2020/06/image-3.png" class="kg-image" alt="Programming Exercises 1 through 6 in Rust"></figure><img src="https://fullstackgjj.com/content/images/2020/06/Rust_Logo-1.jpg" alt="Programming Exercises 1 through 6 in Rust"><p>The first 5 exercises focus on command line input and output. I most likely will add more exercises under the category for input and output in the future. This was to get me familiar with coding in Rust.</p><p>I found it interesting that it is so hard to move away from Visual Studio in Windows. Even when I am not programming in .Net and programming in Rust I have to download Visual Studio Build Tools. I received this error when trying to compile my <code>saying_hello.rs</code> program without it installed.</p><!--kg-card-begin: markdown--><pre><code>
error: linker `link.exe` not found
  |
  = note: The system cannot find the file specified. (os error 2)

note: the msvc targets depend on the msvc linker but `link.exe` was not found

note: please ensure that VS 2013, VS 2015, VS 2017 or VS 2019 was installed with the Visual C++ option
</code></pre><!--kg-card-end: markdown--><p>Luckily somebody else has encountered the same issue as me <a href="https://www.jaacostan.com/2019/12/rust-error-linker-linkexe-not-found.html">before</a>. Just had to follow the instructions to download the C++ build tools through the Visual Studio Installer. Setting up the environment for Rust development was way way faster in Ubuntu than Windows so far from what I'm seeing.</p><p>I also decided to use IntelliJ as my IDE. I used to be more of a TMUX/NEOVIM guy but since I have to work on multiple machines and OS's it's easier to have the same IDE with the right configuration up. IdeaVim plugin along with Relative Line Number plugins have been working well enough for me. Definitely had to disable IntelliJ's version control setup though as I still prefer to work with Git through git bash.</p><p>As far as coding, it was fairly straightforward definitely a good intro set of problems for someone trying out a new language. Next up is learning to use the language for doing calculations.</p>]]></content:encoded></item></channel></rss>