<?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 Gorka Cesium on Medium]]></title>
        <description><![CDATA[Stories by Gorka Cesium on Medium]]></description>
        <link>https://medium.com/@Cuadraman?source=rss-21864c780d05------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*mGb6yTHh0ApdwsXklNaFCQ.png</url>
            <title>Stories by Gorka Cesium on Medium</title>
            <link>https://medium.com/@Cuadraman?source=rss-21864c780d05------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Fri, 15 May 2026 16:11:17 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@Cuadraman/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[Why we should stop eating seed oils]]></title>
            <link>https://medium.com/@Cuadraman/why-we-should-stop-eating-seed-oils-355a6eaebea?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/355a6eaebea</guid>
            <category><![CDATA[nutrition]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sun, 30 Jul 2023 18:34:26 GMT</pubDate>
            <atom:updated>2024-02-23T17:33:50.913Z</atom:updated>
            <content:encoded><![CDATA[<p>Most Seed oils and high starch diet cause inflammation. Inflammation causes disease and worsen allergies.</p><p>Seed oils also contain toxins that generate more toxins. They get stored as body fat that is hard to be used for energy by the body. That makes you hungry because you need more energy so you eat more.</p><p>Toxic chemicals in seed oils Can cause heart attacks, strokes, growth defects, and birth defects.</p><p>Inflammation worsens allergies.</p><p>Junk food relies on starches and seed oils. Low nutrient foods make you fat because they are empty calories and even though you eat a lot your body is still hungry because it needs more nutrients.</p><p>Solution: eat more traditional fats like butter, olive oil, meat fats, avocado. Eat free-range dairy and meat. Minimize processed foods and lower starchy foods like potatoes, pasta, rice. Eat more veggies. Get 30 minutes of direct sunlight and supplement for vitamin D.</p><p>Disclaimer: all of this is my summary of what i read in a book and I’m no expert</p><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=355a6eaebea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Medium is a nice place to write]]></title>
            <link>https://medium.com/@Cuadraman/medium-is-a-nice-place-to-write-b0a696779a71?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/b0a696779a71</guid>
            <category><![CDATA[writing]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sat, 01 Jul 2023 21:00:28 GMT</pubDate>
            <atom:updated>2024-02-23T17:34:04.276Z</atom:updated>
            <content:encoded><![CDATA[<p>I have to say that after many years, I realized that Medium is the place in cyberspace where I prefer for writing. Is it the typography? Or the focus?</p><p>I’ve tried custom blogs, LinkedIn posts, Substack, Twitter threads, dev.to and a few others. But now I come back here.</p><blockquote>Although</blockquote><p>I don’t like to read here because it feels like most blog posts optimize for revenue. I won’t mirror that. I want to write for the joy of writing.</p><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b0a696779a71" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Extracting logic from XLS to a web app]]></title>
            <link>https://medium.com/@Cuadraman/extracting-logic-from-xls-to-a-web-app-3539daf11bdc?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/3539daf11bdc</guid>
            <category><![CDATA[excel]]></category>
            <category><![CDATA[rescript]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Mon, 26 Sep 2022 20:58:46 GMT</pubDate>
            <atom:updated>2024-02-23T17:34:25.386Z</atom:updated>
            <content:encoded><![CDATA[<h3>How to extract logic from an Excel file and implement it into a web application in Javascript/Rescript</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/760/0*TgIT6tdem-te_z5w.png" /></figure><p>In <a href="https://www.linkedin.com/company/brezza-screens-systems/"><strong>Brezza Screens Systems</strong></a> we use custom software to generate quote estimates of our window screens (mosquiteros). This has enabled us to serve much more customers with increased quality standards and reliability.</p><p>Previously, when a customer would ask how much does a Window Screen costs, we would use Excel to quote an estimate. That process was slow and required slow thinking, meaning that it required high level of focus to avoid making any mistake. Even though Excel is a powerful app, it is very easy to accidentally mess up a formula. Additionally, there is a potential risk when copying an existing Excel sheet to reuse it for another customer.</p><p>Thanks for reading Gorka’s thoughts! Subscribe for free to receive new posts and support my work.</p><h3>Case: Esperto Window Screen</h3><p>In this case there is a group of formulas to calculate the amount and length of threads that we should consider in our model Esperto Window Screen</p><h4><a href="https://www.brezzascreens.mx/productos/esperto">Esperto Window Net</a></h4><h3>Example of XLS formula to calculate strings</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PGCU1IE45pdyvhNu.png" /></figure><h4>These are the formulas for the length each of the 5 threads.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IrSFlB4Om7I8AvnQ.png" /></figure><h4>Example of how to understand a messy spreadsheet formula</h4><h4>In this case the formula is hard to read because it has a lot of conditionals and it is all in one line.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*sde17qM5Qlyammtc.png" /></figure><p>Formatting the formula allows an easier understanding. I use VSCode for that. I also replace the cell numbers with variable names. In this case I replaced `I4` for `height`.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*uYeQYPz16u-1besG.png" /></figure><p>Then I flatten the structure so it is easier to read.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/974/0*ufydtBwsTTMiQdo-.png" /></figure><p>Now it is easier to see how many threads should there be for each threshold of height size. Finally I rewrite this formula in <a href="https://www.rescript-lang.org/">Rescript</a> and I plug it into our quote estimator app to have that logic in our pricing calculations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/900/0*YfEIE5o2qXPg7tQW.png" /></figure><p>This way we have the logic in an app that can display only the details that the user needs to make a quote. The calculation logic is protected from any human error from the user by moving it into Rescript code and writing unit tests that will run automatically during development and before publishing a new version of the app. This makes our quotes quicker and more reliable.</p><h4>Get more ideas to improve your self-worth.</h4><p>I send out a newsletter with simple, practical tips for building web apps with web technologies.</p><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3539daf11bdc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I approach HTML Divitis]]></title>
            <link>https://medium.com/@Cuadraman/how-i-approach-html-divitis-53368c5c0b1a?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/53368c5c0b1a</guid>
            <category><![CDATA[jsx]]></category>
            <category><![CDATA[html]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sat, 19 Sep 2020 20:29:04 GMT</pubDate>
            <atom:updated>2024-02-23T17:34:51.449Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1005/1*Pw-uigT02E3no-yLOmLrRg.png" /></figure><h3></h3><p>My 80/20 on HTML:* * *</p><p>My most used HTML tag is &lt;div&gt;, which I think stands for the division. I use it because it flows full width, and its block layout is more straightforward for me to think of. So, I end up with a bunch of nested divs that can make it painful to read.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/350/1*loLD7Jzyq92x343K6Df5dg.png" /></figure><h4>My new approach</h4><p>I recently started overusing semantic HTML tags that behave precisely like divs on the layout, but for the e-readers they are not the same. Anyways, I find that it increases the readability of my HTML/JSX.</p><p>Instead of nesting divs, I try to avoid them. Since I work in components, I use other tags until I really need to use div.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/350/1*28uUFMNJ5_aPgmBt-nNYUw.png" /></figure><p>So I will start the component with a &lt;main&gt; and nest &lt;section&gt; tags. Further nesting will follow with &lt;article&gt; tags or any other that make sense. I also use &lt;header&gt;, &lt;footer&gt;, and any other that fits the current component. Anyways, that’s what I’m looking at when I develop components. I don’t look at an HTML document as a whole. I think that semantic HTML tags were initially meant for e-readers and maybe web crawlers, but it is also a great tool to increase developer experience.</p><p>I’m not too concerned about the drawbacks. I think that the ease of readability for spotting, which is the closing tag, makes me more efficient than to have a bunch of divs and make mistakes by adding other tags in the wrong place</p><p>I hope that helps;</p><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=53368c5c0b1a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ReScript reusing functions that take records]]></title>
            <link>https://medium.com/@Cuadraman/rescript-reusing-functions-that-take-records-d4fcbd3e304b?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/d4fcbd3e304b</guid>
            <category><![CDATA[rescript]]></category>
            <category><![CDATA[tutorial]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Fri, 18 Sep 2020 17:24:04 GMT</pubDate>
            <atom:updated>2024-02-23T17:36:03.785Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MVkopHLrUO5lQz0c_MKeVA.png" /></figure><p>In the <a href="https://rescript-lang.org/docs/manual/v8.0.0/record#tips--tricks">tips and tricks from ReScript Docs</a>, they explain why the following won’t work.</p><pre>type person = {age: int, name: string}; </pre><pre>type monster = {age: int, hasTentacles: bool};  </pre><pre>let getAge = (entity) =&gt; entity.age;</pre><pre>let kraken = {age: 9999, hasTentacles: true}; </pre><pre>let me = {age: 5, name: &quot;Baby ReScript&quot;};  </pre><pre>getAge(kraken); </pre><pre>getAge(me); // type error!</pre><h4>The Problem</h4><p>🤯 <br>I recently ran to a similar issue, trying to reuse a calculation function with records with some same field names. Taking the same example, let us say I would like to call a function to calculate the age in dog years <a href="https://pets.webmd.com/dogs/how-to-calculate-your-dogs-age">(1 year for Fido equals 7 years)</a> for person and monster.</p><pre>let getAgeInDogYears = (entity) =&gt; entity.age * 7;</pre><pre>getAgeInDogYears(kraken); <br>getAgeInDogYears(me); // type error!</pre><h4>The Trick</h4><p>💡 The trick to reuse the function is to use accessors.</p><pre>let getAgeInDogYears = (entity, accessor) =&gt; accessor(entity) * 7;</pre><pre>getAgeInDogYears(kraken, entity =&gt; entity.age) // works<br>getAgeInDogYears(me, entity =&gt; entity.age) // works!<br></pre><h3>Trick for Arrays</h3><p>💻 I write many utility functions that parse or reduce arrays. In this case, the accessor strategy also works.</p><h4>Array example</h4><p>Check the following example:</p><pre>type piggyBank = {<br>  money: float,<br>  name: string,<br>};<br>type wallet = {<br>  money: float,<br>  material: string,<br>};</pre><pre>let getMoneySum = storages =&gt;<br>  storages-&gt;Belt.Array.reduce(0., (sum, storage) =&gt; sum +. storage.money);</pre><pre>let piggyBanks = [|<br>  {money: 10.20, name: &quot;Johnnys&quot;},<br>  {money: 120.50, name: &quot;Adrians&quot;},<br>|];</pre><pre>let wallets = [|<br>  {money: 100.10, material: &quot;leather&quot;},<br>  {money: 33.00, material: &quot;plastic&quot;},<br>|];</pre><pre>getMoneySum(wallets);<br>getMoneySum(piggyBanks); // type error!</pre><p>Piggy banks are being rejected by the function even though they have the money field, which is all that matters for calculating the money sum.</p><h4>Array Trick</h4><p>Using an accessor, we can make the type checking flexible enough to reuse this utility function.</p><pre>type piggyBank = {<br>  money: float,<br>  name: string,<br>};<br>type wallet = {<br>  money: float,<br>  material: string,<br>};</pre><pre>let getMoneySum = (~storages: array(&#39;a), ~accessor: &#39;a =&gt; float) =&gt; {<br>  storages-&gt;Belt.Array.reduce(0., (sum, storage) =&gt;<br>    sum +. accessor(storage)<br>  );<br>};</pre><pre>let piggyBanks = [|<br>  {money: 10.20, name: &quot;Johnnys&quot;},<br>  {money: 120.50, name: &quot;Adrians&quot;},<br>|];</pre><pre>let wallets = [|<br>  {money: 100.10, material: &quot;leather&quot;},<br>  {money: 33.00, material: &quot;plastic&quot;},<br>|];</pre><pre>getMoneySum(~accessor=store =&gt; store.money, ~storages=piggyBanks);<br>getMoneySum(~accessor=store =&gt; store.money, ~storages=wallets);</pre><p><a href="https://rescript-lang.org/try?ext=re&amp;code=C4TwDgpgBGCWDm8QCECGA7A1lAvFA3gFBRQC2A9uhCAFxQBmANuasADTFTqqkR0DOwAE6x08DgF8A3IVCQoAd1SNGEYLgKcKVWg2asOJUqwgjlA4aPGFphQqvXw1AWUrUAygFdSGgBQA-QXIhVCd+OlQhEJBfAHJUAEo2KH9UAGM0iH5+YLp43AA+PRZgBMLNEiCQsIBaAuQIRmAAOgBBKNQQZqEIABNPTN8ABmbk335vZKrQiDKcAs5K7ygAamaodMzs4PHgYJmEzgSZW3s1GAQkNCx+DQBtAB9OfG1qOgBGEYAmIeTuXjoACIAFLkAAW6HQIH4gIkhgIr107x+zQArL8uDw+FBAa1emZ0DC4YQHgBdGRndRKFRqW54R7PREfIYjT7JYzAUywcw41SsMGmWHwl5uXQAZjFzRZ7JMZkYQLAjFQglgaSFJPJdicwFcOi8pACmyyOSEOCq0HmUHNzURyUCe2qWRwcEQKAwmH4x0I2t1Hm8hoyxuCZodFqK1ttKWmYRw1IcnpkQA">See the solution in the playground</a>.</p><p>I hope that helps!</p><p><a href="https://x.com/GorkaCesium">https://x.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d4fcbd3e304b" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How I went from Coding Bootcamp graduate to Senior Software Engineer in 4 years]]></title>
            <link>https://blog.devgenius.io/how-i-went-from-coding-bootcamp-graduate-to-senior-software-engineer-in-4-years-200d1b7ef628?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/200d1b7ef628</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[silicon-valley]]></category>
            <category><![CDATA[career-advice]]></category>
            <category><![CDATA[true-story]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sat, 15 Aug 2020 22:43:19 GMT</pubDate>
            <atom:updated>2021-05-19T14:12:17.728Z</atom:updated>
            <content:encoded><![CDATA[<p>I got frustrated with spreadsheets. They are dynamic and convenient, but it’s a mess to work with, unreliable to share, hard to scale. I wanted to be able to build my ideas. Spreadsheets only lived on my computer.</p><p>I enrolled in a Bootcamp, which back then was around $500 per month for months of intense learning how to code. I was hungry for knowledge. My participations were a bit too eager. I bet that my eagerness annoyed my classmates. I had a big desire to “conquer the world” of coding. Hung out with the most committed nerds in the classroom and would help each other out.</p><p>It was the year when iPhone 4S came out. I had no clue about where to start. Software development was very intimidating to me. The Bootcamp introduced me to C, C++, C#, SQL, and JS. Since it seemed so pricey to go into C#, I ended up going for Javascript, HTML, CSS, which I learned from online guided tutorials like CodeSchool, CodeAcademy, and lynda.com. Now there are many more online learning resources. If I were starting again, I would probably start with Freecodecamp.</p><p>I went to meetups, hackathons, talks, and tried to ask people about recommendations. Suddenly, Jorge Zavala offered to pay for the Startup Weekend ticket if I would fly to San Jose, California. That was an eye-opening experience. At the event, I found out about other tech-stacks like ruby on rails, and python, which were much more straightforward than the Microsoft stack. I felt relieved. That made me rethink my strategy for my new career.</p><p>The enthusiasm was through the roof. My team was composed of employees from big tech and some super experienced programmers. I witnessed how angel investors approach programmers and offered $20,000 to evolve their MVP.</p><p>I came back home with high goals. I wanted to learn. I kept studying online and started building websites and designing web apps as a freelancer. It took me a month to earn my first income, just $100. As I learned more, my output increased. Progressively, I started making more money for the same amount of time. I found out that being a freelancer consisted of part-time hunting for new projects. Getting customers to pay me was also a big-time consumer.</p><p>To focus on the technical skills, I got a full-time job where I could code prototypes and websites and use low-code tools to build mobile apps. It was a break to have some steady income. Six months in, a friend invited me to Mountain View to see what it was like to be in 500 Startups. So I quit my job and went there. There I met more programmers, mentors, investors, startups. I heard many success stories. It was incredible. I saw that there was a significant demand for software engineering in the Bay Area. By then, I could build simple web apps client-side.</p><p>My job hunt started applying for jobs and learning all that I could about interview questions. People that I met in tech meetups would give me some advice on how to get a job. I also reached out to the network on LinkedIn. Many recruiters started calling me and trying to position me in their client’s companies. Most of it was great advice. After two months and 30+ interviews, I landed a job at a startup in San Jose.</p><p>I had a team leader who was very welcoming, patient, and self-thaught computer genius. That is when I started to learn faster than ever before. My learnings were more focused on what mattered, thanks to the mentorship of my team lead and the short feedback loop on code reviews and one-on-one meetings. By summer, he left for a company that was growing exponentially. A few months later, he asked me to join him. That’s how I arrived in Orange County.</p><p>There I got hired as a Software Engineer with a 2X pay increase. I could now afford a whole apartment and even save a good chunk of my income. That startup was a lot of fun. I worked intensely, learning from Eric Elliot, Funfunfunctions, the React community, meetups, books, online courses, blog posts, and twitter. Day after day, I voraciously learned and worked. Even a few all-nighters were part of the mix. It was intense. I also had side-projects for learning.</p><p>After another year of crazy hard work, I got promoted to Senior Software Engineer. I could not believe it! So soon? I got a raise and more stock options. My recipe was to keep giving value, write blog posts, and run experiments with new tech. All this awarded me credibility and value. My employers compensated for my effort with benefits.</p><p>Later I moved on to another company where I kept growing significantly. But that is another story.</p><p>You can<strong> </strong><a href="https://twitter.com/Cuadraman"><strong>follow me there</strong></a> as I continue to discover new insights.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=200d1b7ef628" width="1" height="1" alt=""><hr><p><a href="https://blog.devgenius.io/how-i-went-from-coding-bootcamp-graduate-to-senior-software-engineer-in-4-years-200d1b7ef628">How I went from Coding Bootcamp graduate to Senior Software Engineer in 4 years</a> was originally published in <a href="https://blog.devgenius.io">Dev Genius</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Why to stop writting negavite code]]></title>
            <link>https://medium.com/@Cuadraman/why-to-stop-writting-negavite-code-af5ffb17195?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/af5ffb17195</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[productivity]]></category>
            <category><![CDATA[positive]]></category>
            <category><![CDATA[language]]></category>
            <category><![CDATA[negative]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Fri, 23 Nov 2018 00:36:05 GMT</pubDate>
            <atom:updated>2024-02-23T17:36:45.946Z</atom:updated>
            <content:encoded><![CDATA[<h3>Why to stop writing negative code</h3><blockquote>Previous research has suggested that including negative words, such as “not,” in the middle of a sentence can throw off our brains and make it more difficult to understand.</blockquote><p><a href="https://www.psychologicalscience.org/news/releases/true-or-false-how-our-brain-processes-negative-statements.html">True or False? How Our Brain Processes Negative Statements</a></p><p>As a software programmer, I have noticed that omitting negative operators in the code translates into a more productive code base. In my code reviews, I have encouraged my teams to write in a positive way so it’s easier to understand and work with. This might go against the natural tendency of writing, but it pays off especially as the codebase grows. There are a lot of benefits to writing positive code. In this article, I explain why we should try to avoid negative code as much as possible.</p><h3>The human mind struggles to understand negative words in statements.</h3><p>Negative words require more thought process. We can think of thoughts as arrows that have a direction. Negations will flip the logic of the thought.</p><blockquote>Do NOT feed the animals</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*0PfTb6FkqGyhT5zdUam4jw.gif" /><figcaption>Thought directions flipped when reading “Do NOT feed the animals.”</figcaption></figure><p>A famous sign in zoos or parks can be <strong><em>“Do </em></strong><em>not</em><strong><em> feed the animals.”</em> </strong>Many signs have to emphasize the word “not” to help people remember that part of the statement. Have you noticed that they rarely use the compound verb + negation <em>“Don’t”</em> like <em>“</em><strong><em>Don’t </em></strong><em>feed the animals”</em>? By separating the negative part it is easier to emphasize. Anyways the mind has to flip the thought.</p><p>An easier way to understand could be</p><blockquote>Avoid feeding animals</blockquote><h3>Stop sign is a great example</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*23x0JSsLLoaYRptWSsNFLg.jpeg" /><figcaption>courtesy of <a href="https://www.maxpixel.net/Shield-Attention-Road-Sign-Traffic-Sign-Stop-634941">https://www.maxpixel.net/Shield-Attention-Road-Sign-Traffic-Sign-Stop-634941</a></figcaption></figure><p>Stop communicates a simple straightforward idea. Stop. What if this sign would be rewritten to “Do not Go”? It kind of dismisses the negative part.</p><h4>Good</h4><blockquote>“Stop”</blockquote><h4>Bad</h4><blockquote>“Do not <strong>Go</strong>”</blockquote><h3>Positive statements are easier to understand</h3><p>Straighten out the logic in a statement so it’s easier to read. Avoid the negations as much as possible since that flips the logic. The human mind has to work more to understand a flip in the logic.</p><p>A positive thought is:</p><ul><li>easier to read</li><li>easier to peer review</li><li>pushes the writer to improve reader’s experience</li></ul><p>For example, compare the following two statements:</p><h4>Good</h4><blockquote>“If I get the money I will pay you”. (OK)</blockquote><h4>Bad</h4><blockquote>“If I don’t get the money I will not pay you” (so… are you paying me or not??)</blockquote><p>The first statement is simpler to grasp. Simplicity consumes less thinking power. The benefit is quicker communication and fewer misunderstandings.</p><h3>Negative code is tricky to understand</h3><p>Programming languages have logic operators just like mathematics. Many of the most popular programming languages use == for equality and != for negations. In math would be <strong>=</strong> and <strong>≠.</strong></p><p>In the following code example, we want to write an algorithm. The program will look into a groceries store. The instruction is to buy bananas if they are in stock. Otherwise look in another store.</p><h4>Good</h4><pre>if (bananasQuantityAvailable == 0) {<br>  goToAnotherStore()<br>} else {<br>  buy(bananas)<br>}</pre><h4>Bad</h4><pre>if (bananasQuantityAvailable != 0) {<br>  buy(bananas)<br>} else {<br>  goToAnotherStore()<br>}</pre><p>An example with ternary expressions</p><h4>Good</h4><pre>var itemState = itemsCount == 0 ? &quot;Empty&quot; : &quot;Available&quot;</pre><h4>Bad</h4><pre>var itemState = itemsCount != 0 ? &quot;Available&quot; : &quot;Empty&quot;</pre><h3>Easier to mess up when negative code adds up</h3><p>You might think that it’s quicker to just drop in a negative operator while writing code. That soon becomes a habit and suddenly you start writing negative operators everywhere. That can add up to become a very confusing mess.</p><p>Let’s say we want to write a program that will recognize a Tesla car.</p><p>For this example, I’ll use the logic operators &amp;&amp; for <strong>AND</strong> and || for <strong>OR</strong>.</p><p><strong>Good</strong></p><pre>if (isCar &amp;&amp; isElectric &amp;&amp; isFast &amp;&amp; isAwesome) {<br>  isTesla = true<br>else {<br>  isTesla = false<br>}</pre><p>Translates to:</p><blockquote>It is a Tesla if it is an electric car that is fast and awesome.</blockquote><h4>Bad</h4><pre>if (!isCar || !isElectric || !isFast || !isAwesome) {<br>  isTesla = false<br>else {<br>  isTesla = true<br>}</pre><p>Translates to:</p><blockquote>It is not a Tesla if it is not an electric car, and it’s not fast and it’s not awesome.</blockquote><h3>Our language might be the one to blame</h3><p>Lera Bododitsky presented in her <a href="https://www.ted.com/talks/lera_boroditsky_how_language_shapes_the_way_we_think">TedTalk</a> that languages shape the way we think.</p><p>One of her examples is about how people will describe bridges. Both Spanish and German relate nouns to genders. In Spanish, a bridge would be masculine “el puente”. The German language also assigns genders to nouns, making “die Brücke” feminine. Hence, Spanish speakers often will refer to bridges with masculine stereotypical adjectives such as “strong” and “long”, while Germans might describe bridges with feminine stereotypes like “beautiful” and “elegant”.</p><p>Negative words are part of most languages. The phrases also have them baked in. “If we have them, why <strong>not</strong> use them?”. We are used to adding negations in our sentences as we are used to including them in our thoughts. Then it seems obvious that we will use negative operators in our code.</p><h3>When to use negative operators?</h3><p>There are cases when it makes more sense to use a negative operator. Such a case would be when the negation will still be easy to read, only needs to deal with the negative case, and it will take less code to express.</p><h3>Closing thoughts</h3><p>Every time I straighten up a logic statement I witness the power of positive code. Simplifying the codebase is a great dev experience that all the team can benefit from. It’s easier to review and maintain. On the other hand, let’s not take this principle as dogma. Negations are a tool that we can use whenever they make sense.</p><p>Thanks for reading and let me know if you have any comments about this principle.</p><p><a href="https://x.com/GorkaCesium">https://x.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=af5ffb17195" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[High Quality Work]]></title>
            <link>https://medium.com/@Cuadraman/high-quality-work-a0c7ca8929df?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/a0c7ca8929df</guid>
            <category><![CDATA[professional-development]]></category>
            <category><![CDATA[craftsmanship]]></category>
            <category><![CDATA[advice]]></category>
            <category><![CDATA[income-opportunities]]></category>
            <category><![CDATA[systems-thinking]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sat, 13 Oct 2018 18:15:13 GMT</pubDate>
            <atom:updated>2024-02-23T17:33:27.467Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>The following are some principles that I use to guide myself through the professional journey of mastering my craft.</blockquote><h4>Do your job with the <strong>highest quality</strong> that you can deliver</h4><p>As you start learning a profession, you might have to accept a lower pay while you gain experience and build your reputation.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*e0tCbc7syk8V-2b-v2gI1Q.png" /><figcaption>rookie striving for excellence</figcaption></figure><p>Eventually, you will get more demand for your good quality services, which will help you increase your income.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cWH0dLPBsbYrzTiei1G3BA.png" /><figcaption>experienced and delivers high quality</figcaption></figure><h4>Keep delivering the best quality even if your pay is not that high</h4><p>If you lower your quality, you risk getting used to deliver sloppy work and you might get stuck in that mindset. Being sloppy will prevent you from earning more.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*BZVi55DSnrTbDyNX-5zKrg.png" /><figcaption>experienced but delivers poor quality</figcaption></figure><h4>Adjust your prices with the demand</h4><p>If your high quality work is in great demand but you undersell yourself, that won’t be sustainable. You would have to work much more than other people in your salary band to earn the same. It will <strong>burn you out</strong> in the long run.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_eB28c4DJqz-pZQkJ-kDzw.png" /></figure><h4>Conclusion</h4><blockquote>Strive for excellence and be mindful of how much you are worth.</blockquote><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><p><a href="https://bit.ly/2Aac3nT">Play with the dynamic system</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a0c7ca8929df" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[My Advice to aspiring Software Developers]]></title>
            <link>https://medium.com/series/my-advice-to-aspiring-software-developers-b73407fdb71e?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/b73407fdb71e</guid>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Sat, 12 Aug 2017 22:35:06 GMT</pubDate>
            <atom:updated>2020-08-30T14:48:56.940Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>In my late 20’s I decided to become a Software Developer.</blockquote><p>I was frustrated with Excel Spreadsheet’s limitations. I wished I could build unique software apps that could communicate with databases and interact with users. Learning how to write code would free me from depending on someone else to build my ideas.</p><blockquote>Changing career seemed risky at that time.</blockquote><p>My friends were already established in their jobs or businesses. While I was starting all over again. The only option was to go <strong>all</strong> in. That’s what many college students lack. That’s how I could achieve so much in a short amount of time. What makes this possible is the person’s grit. Not the bootcamp.</p><blockquote>The less you know, the more you think you know.</blockquote><p>It’s common that software bootcamp graduates oversell themselves. They claim that after an intensive 4 month training they are mid-level engineers. The reality is that by then they just became “aware” of how software works. Generally they will spread too thin. Studying a broad range of topics from HTML/CSS, web apps, mobile apps, server-side, databases and even Machine Learning.</p><blockquote>Software programming seems to be purely logical.</blockquote><p>Software programming languages were written by people. A language is built of keywords, commands, interactions and patterns that were all made-up by humans. They are different from the Laws of Nature. Programming languages have human flaws.</p><p>As a programmer, it takes time to memorize all those keyword meanings, command functions, and the interactions between each other. Then you have to find out how to work around the flaws that are embedded in the system.</p><p>Grab what I just mentioned and multiply it by all the libraries and frameworks that you are adding to your tech stack. It takes time to master all of that.</p><blockquote>After you spread too thin, it’s time to dig in.</blockquote><p>It’s good to have a bird-eye overview of all the technologies. Now pick your favorite topic and work hard to reach the next level.</p><p>Once you level up your HTML and CSS, make sure to bring your JQuery up to par. You feel comfortable with JQuery? Upgrade your vanilla JavaScript. Feel confident? Try ReactJS.</p><blockquote>Two steps forward, one step backwards.</blockquote><p>Programming technologies are moving fast-forward. It’s hard to keep up with the latest and greatest libraries, frameworks, patterns, tools, and all other sorts of innovations.</p><p>Learn a new hyped topic like <em>“async await”</em>. Then go back to the fundamentals by learning how DOM event bubbling works. By balancing trends and fundamentals you will achieve rock solid progress.</p><blockquote>If you only focus on the hype topics, your knowledge will be as unstable as a house of cards.</blockquote><blockquote>“Skate to where the puck is going, not where it has been.” — Wayne Gretsky</blockquote><p>Make an educated guess on what to specialize in. Go to meet-ups. Listen to talks. Follow rockstar developers on Twitter and Medium. Ask senior developers about trending technologies. Ask recruiters about which tech stack are companies hiring for.</p><p>Avoid jobs with legacy code bases. You will get stuck in that job since nobody else will be using that tech in a few years. For example, would you take a job that requires you to work on BackboneJS or would you pick the one with ReactJS? The latter is a better option since many companies are adopting it.</p><blockquote>Is it a safe bet?</blockquote><p>OSS (Open Source Software) projects like languages, tools, libraries and frameworks are more likely to stick in the long run if they are sponsored by a big company like Google and Facebook.</p><p>Foundations and crowdfunding are other ways to incentivize OSS.</p><p>NodeJS is an example of a project sponsored by the <a href="https://www.linuxfoundation.org/projects">Linux Foundation</a>.</p><p>In case of crowdfunding, an important project is <a href="https://webpack.github.io/">webpack</a>, backed up by <a href="https://opencollective.com/">Open Collective</a>.</p><p>Many unsponsored OSS projects become stale because of lack of incentives from the developers.</p><blockquote>My bet</blockquote><ul><li>Javascript</li><li>React + Redux</li><li>GraphQL</li><li>App Security</li><li>decentralized apps (blockchain)</li><li>Quality Assurance automation</li></ul><blockquote>Get a mentor</blockquote><p>Try to get a mentor to help you when you get stuck and to get guidance…</p><p>I’ve heard <a href="https://www.thinkful.com/"><strong>https://www.thinkful.com/</strong></a> has good mentoring…</p><p>and <a href="https://freecodecamp.org/"><strong>https://freecodecamp.org/</strong></a> has a big community…</p><p>and of course, <a href="https://nodeschool.io/">nodeschool</a> and all the JS <a href="https://www.meetup.com/">meetups</a>.</p><blockquote>Get a job as a developer even if you work for peanuts</blockquote><p>Whatever you do, only get a job as a developer. In a few years it will pay off. The odds are that you will have a hockey-stick growth in your compensation.</p><p>Otherwise you run the risk of getting stuck in another career path.</p><blockquote>Mastering code requires full-time dedication.</blockquote><h3>Junior vs Senior</h3><blockquote>How do you know someone is of senior-level?</blockquote><p>A senior developer is…</p><p>Someone who understands the fundamentals of javascript as well as the frameworks and libraries.</p><h4>Clean Code</h4><p>In the way of structuring code, senior devs write simpler code, easier to read and maintain.</p><p>Juniors try to write too clever code.. and that gets very hard to maintain.</p><h4>When to optimize</h4><p>Seniors have the experience to know when it’s worth to optimize some piece of code.. and when to just leave it as it is.</p><h4>Troubleshooting</h4><p>As senior would normally get unstuck by himself.</p><p>A junior would get stuck for hours or even days in some issue. He will brute force answers from StackOverflow or similar websites to see if they fix his problem.</p><p>That is normally due to lack of knowledge on the fundamentals of how software and frameworks work.</p><h4>Thinking like a machine</h4><p>A senior dev can write a lot of code before running it because he can mirror in his mind how the code will work.</p><p>I hope this was helpful!</p><p>Follow me in Twitter https://twitter.com/cuadraman, where I continue to post my learnings and other valuable content.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=b73407fdb71e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Never forget… to compress on NodeJS]]></title>
            <link>https://codeburst.io/never-forget-to-compress-on-nodejs-11a19db74e60?source=rss-21864c780d05------2</link>
            <guid isPermaLink="false">https://medium.com/p/11a19db74e60</guid>
            <category><![CDATA[javascript]]></category>
            <category><![CDATA[tech]]></category>
            <category><![CDATA[nodejs]]></category>
            <category><![CDATA[expressjs]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Gorka Cesium]]></dc:creator>
            <pubDate>Thu, 13 Jul 2017 15:07:10 GMT</pubDate>
            <atom:updated>2024-02-23T17:35:17.699Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/678/1*x7n3x7FAjYUJQppS6WbQYw.png" /></figure><p>After using expressJS for a while, I noticed that the HTTP responses from my nodeJS server weren’t compressed. Then I found out about a compressing method called gzip. This method is supported by browsers and speeds up HTTP connections.</p><p>To add compression to your node app you can use the npm package <a href="https://github.com/expressjs/compression">compression</a>. This package used to come baked into expressJS. Now you have to installed it separately. Set it up like expressJS middleware. For more details view the <a href="https://github.com/expressjs/compression#expressconnect">docs</a>.</p><pre>// install it like expressJS middleware<br>app.use(compression())</pre><p>Another way is to handle compression on the proxy level. NGINX is an example of web proxies.</p><p>Compression can significantly reduce the bytes transfered through the wire. Keep in mind that some clients are limited on the size of applications that they can handle. Maybe you are successful to compress your web app, but when the Android browser decompresses it, it can’t handle the size. Be mindful of the target clients.</p><p><a href="https://twitter.com/GorkaCesium">https://twitter.com/GorkaCesium</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=11a19db74e60" width="1" height="1" alt=""><hr><p><a href="https://codeburst.io/never-forget-to-compress-on-nodejs-11a19db74e60">Never forget… to compress on NodeJS</a> was originally published in <a href="https://codeburst.io">codeburst</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>