<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Jonathan Yeong on Medium]]></title>
        <description><![CDATA[Stories by Jonathan Yeong on Medium]]></description>
        <link>https://medium.com/@JonoYeong?source=rss-351665c8016f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*O5DyaEW26ea7sjjU9owttg.jpeg</url>
            <title>Stories by Jonathan Yeong on Medium</title>
            <link>https://medium.com/@JonoYeong?source=rss-351665c8016f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 31 May 2026 20:34:46 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@JonoYeong/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Things that I don’t know at the end of 2018]]></title>
            <link>https://medium.com/@JonoYeong/things-that-i-dont-know-at-the-end-of-2018-1459cb69e983?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/1459cb69e983</guid>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[motivation]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[year-in-review]]></category>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Wed, 09 Jan 2019 23:15:07 GMT</pubDate>
            <atom:updated>2019-01-09T23:15:07.872Z</atom:updated>
            <content:encoded><![CDATA[<p>It’s 2019 and there’s still a shit ton of things that I don’t know about coming out of 2018. I wanted to write these down somewhere so I can refer to it throughout the year. It’s daunting realizing how much I don’t know. But I enjoy recognizing my knowledge gaps. By working hard I can finish 2019 knowing a little bit more. Here’s a list of the things that I still don’t know about:</p><ul><li><strong>Cryptocurrency</strong> — Everyone talks about it and I kind of get how it works. But I have no idea how it’s built or how to mine it.</li><li><strong>Machine Learning/AI</strong> — I know some basic theory but I’ve never successfully built a program that has *learnt* anything. This area seems to be an ongoing trend so it’s probably worthwhile for me to build a project that uses Machine Learning.</li><li><strong>Website design</strong> — I still have no idea how to do this. I don’t know how to use the tools and I don’t know how to make something look good. I can tell a good website when I see one. But how do I translate into my own site?</li><li><strong>Functional Programming language</strong> — Does Javascript count as one? I have no idea. What is a functional programming language? Why does everyone tell me I should learn one? I want to get better at learning languages so why not start with a functional one.</li><li><strong>Containers</strong> — Kubernetes, Docker, are they even related? I have no idea how any of these work. Why are containers good? What can they contain?</li><li><strong>Native App development</strong> — There’s only so much I can learn in a year. But I do want to learn about app development at some point.</li><li><strong>GraphQL</strong> — I’ve seen this used by Github and other companies. But I have no idea how this works. I think it’s a replacement for a REST API. But how do I implement it? And why is it good?</li><li><strong>Javascript front end framework</strong> — There are so many frameworks out there. And I know nothing about any of them. I’ve heard good things about Vue, but honestly, I don’t know what problem they’re trying to solve.</li><li><strong>Fancy AWS stuff</strong> — I’ve heard people talk about Athena and Glue. But I have no idea what they are or what they achieve. The AWS ecosystem is huge, I’d want to learn more about it.</li></ul><p>This is scratching the surface of the things I don’t know about. There’s probably plenty more. But as I continue on in 2019 I want to spend time researching some of these topics. And hopefully by the end of the year I’ll know a little bit more.</p><p>—</p><p><em>I’d love to hear what’s on your list of things to learn about in 2019. Let me know in the comments below!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1459cb69e983" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Freelance advice for past me]]></title>
            <link>https://medium.com/@JonoYeong/freelance-advice-for-past-me-c767f1483fba?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/c767f1483fba</guid>
            <category><![CDATA[reflections]]></category>
            <category><![CDATA[freelancing]]></category>
            <category><![CDATA[freelancers]]></category>
            <category><![CDATA[developer]]></category>
            <category><![CDATA[advice]]></category>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Wed, 12 Jul 2017 20:56:34 GMT</pubDate>
            <atom:updated>2017-07-12T20:56:34.484Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*U8RD8lCnkkhqf2rUZOC1vg.jpeg" /><figcaption><a href="https://unsplash.com/new?photo=cckf4TsHAuw">https://unsplash.com/new?photo=cckf4TsHAuw</a></figcaption></figure><p>When I first made the choice to become a freelancer and I had no idea where to begin. I reached out to my old manager who was the sales lead/product manager at my old company. We covered a range of topics starting with how to get leads. To copyrighting a business logo. To dealing with taxes. After the conversation, I had a grasp on what I needed to do. I’ve been a freelancer for 7 months now and I’ve realized that there were some topics he didn’t cover. Here’s the advice I would give past me.</p><h3>Setup a standardised project pipeline.</h3><p>Standardise the way you start every client project. This starts with documentation. Use Trello or a free CRM and keep it up to date. Use these tools to keep track of quotes, requests, and questions. Also spend some money on software, like Xero, that can send and track invoices. At some point, you’ll start approaching every client project the same way. You might have a standardised set of questions. Or a standard timeline for getting a project started.</p><h3>Spend time researching — Longer than you think.</h3><p>Time estimation is one of the hardest parts about freelancing. I‘ve always struggle with estimating the length of a project. By spending time researching you can make a much better estimate. I recently realized the value of research when working with another freelancer.</p><p>He would break down a project into smaller features. For each feature, he would add a checklist of tasks to complete. He also added any information about potential database models. This included any proposed columns and also any relationships with other models. Finally, he estimated the time per feature and any potential time sinks. This became his roadmap for the project. It also uncovered any potential questions that he could bring up with the client.</p><h3>Value pricing.</h3><p>I’ve never implemented value pricing. I would feel like a fraud if I spouted advice about how to do this. From what I’ve read, value pricing seems to be the path that every freelancer should take. You can earn more than hourly pricing. And you can do this without working yourself to the ground.</p><p>I won’t go too in-depth with this concept. Instead I suggest you subscribe to Jonathan Stark’s <a href="https://expensiveproblem.com/list">free email list</a> about value pricing. It’s a six part email newsletter explaining the what and how of value pricing.</p><h3>Get better at client communication.</h3><p>I find communication hard to master. Should you answer an email immediately with the client? Are they going to care about small, incremental updates? Should you wait until you have a large update which could take weeks or months?</p><p>In my experience, over communicating is better than not communicating enough. Most of the time this comes in the form of emails. Sometimes through calls or video chats. Use technology to make communication easier. Start a slack channel and invite them to use it. Let them know what hours you’re available for questions. Set boundaries so they don’t interrupt you during deep work. It’s hard to build trust with a client when you’re working remotely. Constant and meaningful communication helps alleviates this.</p><p>David Copeland recently gave a talk at Rails Conf 2017. He tackles the idea of being an effective remote developer. If you’re looking to improve in this area, I recommend watching the video below.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FzW7_AteiM4o%3Ffeature%3Doembed&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DzW7_AteiM4o&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FzW7_AteiM4o%2Fhqdefault.jpg&amp;key=d04bfffea46d4aeda930ec88cc64b87c&amp;type=text%2Fhtml&amp;schema=youtube" width="854" height="480" frameborder="0" scrolling="no"><a href="https://medium.com/media/3f56688fe5963675f5837d9b61de32f7/href">https://medium.com/media/3f56688fe5963675f5837d9b61de32f7/href</a></iframe><p>What advice would you give to a budding freelancer? Let me know in the comments!</p><p><em>If you enjoyed this post hit that ❤ button!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c767f1483fba" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Setting up RSpec and Factory girl]]></title>
            <link>https://medium.com/@JonoYeong/setting-up-rspec-and-factory-girl-8cf287801099?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/8cf287801099</guid>
            <category><![CDATA[setup]]></category>
            <category><![CDATA[ruby]]></category>
            <category><![CDATA[ruby-on-rails]]></category>
            <category><![CDATA[rspec]]></category>
            <category><![CDATA[testing]]></category>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Wed, 04 Jan 2017 22:54:47 GMT</pubDate>
            <atom:updated>2017-01-04T22:54:47.048Z</atom:updated>
            <content:encoded><![CDATA[<p>Not another RSpec tutorial! I know, there’s plenty of well written tutorials out there. But, thankfully, this is only a cheat sheet. The article below outlines the steps to get RSpec and Factory girl set up in your Rails app. If you want a TL;DR, follow the code snippets and skip all the text.</p><p>First of all we need to add <a href="https://github.com/rspec/rspec-rails">rspec-rails</a> and <a href="https://github.com/thoughtbot/factory_girl_rails">factory_girl_rails</a> to the Gemfile.</p><pre>group :development, :test do<br>  gem &#39;rspec-rails&#39;, &#39;~&gt; 3.5&#39;<br>  gem &#39;factory_girl_rails&#39;<br>end</pre><p>Next run:</p><pre>$ bundle install<br>$ rails generate rspec:install</pre><p>This will generate a spec/ folder inside your application. You can remove the test/ folder if it exists.</p><p>Next create the file spec/support/factory_girl.rb and paste in:</p><pre># spec/support/factory_girl.rb<br>RSpec.configure do |config|<br>  config.include FactoryGirl::Syntax::Methods<br>end</pre><p>This makes method calls less verbose. For example instead ofFactoryGirl.build you can now use build.</p><p>Next, uncomment the following line in spec/rails_helper.rb to autoload files in the support/ directory.</p><pre>Dir[Rails.root.join(&#39;spec/support/**/*.rb&#39;)].each { |f| require f }</pre><p>Everything is now setup. The next step is to generate a test and create a factory. Then we need to make sure everything passes.</p><h3>Generating a test and running it</h3><p>An RSpec test will be generated whenever you generate a model or controller. RSpec also offers generators to generate a test only. For example here’s how to generate a test for the model, Widget.</p><pre>rails generate rspec:model widget</pre><p>Check the <a href="https://www.relishapp.com/rspec/rspec-rails/docs/generators">RSpec documentation on generators</a> to learn more.</p><p><em>Fun fact: with Factory Girl installed, a factory will also be generated when you generate a test.</em></p><p>Here are the files created when running the above RSpec generator. This should also generate a Factory Girl file spec/factories/widgets.rb.</p><pre># spec/models/widget_spec.rb</pre><pre>require &#39;rails_helper&#39;</pre><pre>RSpec.describe Widget, type: :model do<br>  pending &quot;add some examples to (or delete) #{__FILE__}&quot;<br>end</pre><pre># spec/factories/widgets.rb</pre><pre>FactoryGirl.define do<br>  factory :widget do<br>    <br>  end<br>end</pre><p>To run the test:</p><pre>bundle exec rspec spec</pre><p>✅ RSpec + Factory Girl installation</p><p><em>I would love to hear your thoughts on how you set up your testing environment. Is this how you would setup RSpec and Factory Girl? Also, I’m trying to get better at technical tutorials so if you have any thoughts let me know!</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8cf287801099" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The one thing I want to achieve in 2017]]></title>
            <link>https://medium.com/@JonoYeong/the-one-thing-i-want-to-achieve-in-2017-f0196f09835e?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/f0196f09835e</guid>
            <category><![CDATA[new-years-resolutions]]></category>
            <category><![CDATA[goals]]></category>
            <category><![CDATA[chicago]]></category>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[living-abroad]]></category>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Tue, 03 Jan 2017 21:44:13 GMT</pubDate>
            <atom:updated>2017-01-03T21:44:13.065Z</atom:updated>
            <content:encoded><![CDATA[<p>I’ve become a bit disillusioned with New Year’s resolutions. My past goals have been too generic and a little too impersonal. In the beginning I start out strong. But after a few weeks my motivation fizzles out. I would continually ask myself, “why am I doing this?” and there was no good answer.</p><p>This year I’ve found one thing that I (really, really) want to achieve:</p><blockquote>I want to move to Chicago, IL.</blockquote><p>I want to do this for love, to have new experiences, and to become a better developer. This post holds me accountable for my future actions. I want to share my failures and triumphs with you.</p><p>Of course, I’m a bit hesitant (scared) to change. It’s much easier living in your comfort zone than challenging yourself. But 2017, a year of challenges, feels like the right year to start afresh.</p><p><strong>What’s the one thing you want to achieve this year?</strong></p><p>P.S HAPPY NEW YEAR! 🎉🎉🎉</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f0196f09835e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Ghost theme from scratch: Part 1]]></title>
            <link>https://medium.com/@JonoYeong/building-a-ghost-theme-from-scratch-part-1-7b20c074c7f7?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/7b20c074c7f7</guid>
            <category><![CDATA[ghosts]]></category>
            <category><![CDATA[themes]]></category>
            <category><![CDATA[getting-started]]></category>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Tue, 19 Jan 2016 10:26:51 GMT</pubDate>
            <atom:updated>2016-01-19T10:26:51.907Z</atom:updated>
            <content:encoded><![CDATA[<p>The <a href="http://themes.ghost.org/docs/about">Ghost documentation</a> is good enough to help you start building your blog theme. After a short time spent reading (actually copy and pasting). You’ll be able to see your posts and view a single post. The next step is to add styling and the nice things.</p><p>I used these links specifically to help setup my Ghost theme.</p><ul><li><a href="http://themes.ghost.org/docs/getting-started">Getting Started</a> — basic introduction into setting up your theme.</li><li><a href="http://themes.ghost.org/docs/structure">Structure</a> — tells you the files you need and a suggestion on how you structure your theme.</li><li><a href="http://themes.ghost.org/docs/index-context#section-example-code">index.hbs file example code</a> — Code to get a list of posts to show on your home page.</li><li><a href="http://themes.ghost.org/docs/post-context#section-example-code">post.hbs file example code</a> — Code to display a single post.</li></ul><p><strong>What do I put in the package.json?</strong></p><p>Package.json is a file that just contains some information about your theme. I wasn’t really sure what needed to be in the package.json file. It wasn’t specified anywhere in the docs. In the end I just copied the code from the default Casper ghost theme:</p><pre>{<br>   &quot;name&quot;: &quot;Casper&quot;,<br>   &quot;version&quot;: &quot;1.2.7&quot;<br>}</pre><p><em>Footnote:</em></p><p><em>After reading through the </em><a href="https://docs.npmjs.com/files/package.json"><em>npm documentation</em></a><em> for package.json, I’m starting to realise that every package.json file will probably have the same format.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7b20c074c7f7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[What I learnt from writing better commit messages]]></title>
            <link>https://medium.com/@JonoYeong/what-i-learnt-from-writing-better-commit-messages-c5b500731dbb?source=rss-351665c8016f------2</link>
            <guid isPermaLink="false">https://medium.com/p/c5b500731dbb</guid>
            <dc:creator><![CDATA[Jonathan Yeong]]></dc:creator>
            <pubDate>Thu, 18 Sep 2014 10:58:57 GMT</pubDate>
            <atom:updated>2014-09-18T10:58:57.229Z</atom:updated>
            <content:encoded><![CDATA[<p>About 2 weeks ago I had to revisit an old project that I hadn’t touched for a while. I wanted to see the history of the project and what I was up to. Boy, was I in for a shock. After opening git log I was met with a bunch of one line commit messages. I thought I was being informative enough but lines like “Changed some files. Fixed previous bug” indicated otherwise.</p><p>I knew I needed to write better commit messages so I read <em>probably</em> the <a href="http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html">ultimate article</a> by Tim Pope which is age old and has probably been read/referenced by a lot of people. So begun my journey to writing better commit messages.</p><p>I’m now about day ten into this habit forming exercise and I’ve learnt a couple of things:</p><blockquote>- More detailed commit messages make you think about the code you write. It makes you think about the files you are changing and the effects that your change will make to the program.</blockquote><blockquote>- I’m terrible at working out whether I should write detailed messages or short succinct ones. Should I list all the changes when you can see the files that I changed with the commit? I just don’t know. I guess that skill might come in the future (hopefully).</blockquote><blockquote>- Writing a good commit message is hard. But writing one helps me see the overall goal of the project and how my commit is working towards that goal.</blockquote><p>If you’re still writing one line commit messages for major commits. Stop it. Seriously.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=c5b500731dbb" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>