<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>🖋 Yeray Cabello 🏴‍☠️</title><link>https://jycabello.github.io/</link><description>Recent content on 🖋 Yeray Cabello 🏴‍☠️</description><generator>Hugo</generator><language>en</language><lastBuildDate>Tue, 21 Dec 2021 14:00:00 +0100</lastBuildDate><atom:link href="https://jycabello.github.io/index.xml" rel="self" type="application/rss+xml"/><item><title>Contract negotiation and versioning</title><link>https://jycabello.github.io/contract-negotiation-versioning/</link><pubDate>Tue, 21 Dec 2021 14:00:00 +0100</pubDate><guid>https://jycabello.github.io/contract-negotiation-versioning/</guid><description>&lt;p&gt;Changing the input or output of an API endpoint that is consumed by your front end, changing a field in a database that is coupled to a field in a model in our application. Sometimes, you see yourself making changes in two different systems and it&amp;rsquo;s really tempting to coordinate the release of both systems to keep them in sync.&lt;/p&gt;</description></item><item><title>Hyerarchichal test data generators</title><link>https://jycabello.github.io/hyerarchical-test-data-generation/</link><pubDate>Mon, 20 Dec 2021 14:00:00 +0100</pubDate><guid>https://jycabello.github.io/hyerarchical-test-data-generation/</guid><description>&lt;p&gt;So, you got some massive legacy service methods were mocking your data store is unfeasible or some situation where, for efficiency reasons, it&amp;rsquo;s convenient that your logic is executed in the data store. And you got to write some automated checks to make sure that some of the assumptions you will make on your code are valid. For that, you need real records in a real database.&lt;/p&gt;</description></item><item><title>Doing non-breaking migrations in Entity Framework Core</title><link>https://jycabello.github.io/efcore_non_breaking_migrations/</link><pubDate>Wed, 16 Dec 2020 11:00:00 +0100</pubDate><guid>https://jycabello.github.io/efcore_non_breaking_migrations/</guid><description>&lt;p&gt;So, you&amp;rsquo;re using an Object Relational Mapper of any kind and you have to, let&amp;rsquo;s say, remove a field from one of your models. This is a breaking change, as your contract with the database is going to break. If you have a small project that you can just take down for every release, that&amp;rsquo;s not a big deal, but:&lt;/p&gt;</description></item><item><title>Many-to-many relationships in Entity Framework Core 5 and 3</title><link>https://jycabello.github.io/efcore_many_to_many_relations/</link><pubDate>Wed, 16 Dec 2020 11:00:00 +0100</pubDate><guid>https://jycabello.github.io/efcore_many_to_many_relations/</guid><description>&lt;p&gt;Scenario is quite simple, you got two tables and you have to stablish a relation between both. Be it fruit baskets and basket makers. One maker can make many baskets and they can also collaborate, having a basket be made by different people.&lt;/p&gt;</description></item><item><title>Flat map tuple - functional patterns</title><link>https://jycabello.github.io/flat-map-tuple/</link><pubDate>Wed, 04 Nov 2020 11:31:13 +0100</pubDate><guid>https://jycabello.github.io/flat-map-tuple/</guid><description>&lt;p&gt;One of the fantastic things about functional programming is that you &lt;strong&gt;have to&lt;/strong&gt; abstract away the path that took you to the data, mostly with data structures. So when you are processing the &lt;code&gt;some&lt;/code&gt; state of an &lt;code&gt;Option&lt;/code&gt;, you know that the object is there. When processing the &lt;code&gt;right&lt;/code&gt; of an &lt;code&gt;Either&lt;/code&gt;, you know you have an object that has dodged every error or alternative path. You don&amp;rsquo;t get his benefit for free, as the data structure forces you to handle all of its states, you might see yourself needing three objects, all of them contained in their own instance of such a structure.&lt;/p&gt;</description></item><item><title>Plunder with thunder</title><link>https://jycabello.github.io/plunder-with-thunder/</link><pubDate>Thu, 26 Dec 2019 16:12:13 +0100</pubDate><guid>https://jycabello.github.io/plunder-with-thunder/</guid><description>&lt;p&gt;I work in an industry where knowledge is, most of the time, valued over diplomas and certifications, so it has been relatively
easy to thrive without a degree.
That does not mean that I haven&amp;rsquo;t received my fair share of &amp;ldquo;you have to be an actual engineer&amp;rdquo; and &amp;ldquo;I don&amp;rsquo;t think you are qualified to do that&amp;rdquo;.
I did have the option to finish my computer science studies, but as I was already working in the industry I found myself with less and less time
to study and had to make a decision. I ended up quitting my studies to&amp;hellip; have time to learn.&lt;/p&gt;</description></item><item><title>Pushing to a repository in github actions</title><link>https://jycabello.github.io/pushing-to-a-github-repo-in-github-actions/</link><pubDate>Wed, 11 Dec 2019 20:12:13 +0100</pubDate><guid>https://jycabello.github.io/pushing-to-a-github-repo-in-github-actions/</guid><description>&lt;p&gt;The very first article of this blog is about the blog itself, specifically about its release pipeline. So, to get in sync with the problem at hand, let&amp;rsquo;s take a
trip around the nature of the blog.&lt;/p&gt;</description></item><item><title>About</title><link>https://jycabello.github.io/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jycabello.github.io/about/</guid><description>&lt;p&gt;I&amp;rsquo;m a software developer born in Spain and living in the Netherlands since 2015. Husband to an Amazon and father to four Spartans, two boys and two girls that came out in two twin batches.&lt;/p&gt;</description></item><item><title>Learning resources</title><link>https://jycabello.github.io/learning-resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jycabello.github.io/learning-resources/</guid><description>&lt;h6 id="learning-resources"&gt;Learning resources&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/JYCabello/DeFuncto"&gt;DeFuncto&lt;/a&gt; My little monster&lt;/li&gt;
&lt;li&gt;&lt;a href="https://mikhail.io/2018/07/monads-explained-in-csharp-again/"&gt;Monads explained in C# (again)&lt;/a&gt; This was my first FP tutorial&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fsharpforfunandprofit.com/"&gt;F# For fun and profit&lt;/a&gt; The best way I can think of to learn FP without noticing it&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=ZhuHCtR3xq8"&gt;Functional Programming - Don&amp;rsquo;t fear the monad&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=EcoIjf3RABI"&gt;Introduction to TDD&lt;/a&gt; (She claims that productivity eventually goes up, that&amp;rsquo;s only true if you have software with a high defect ratio)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=XHnuMjah6ps"&gt;Outside in TDD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://katalyst.codurance.com/"&gt;Katas from Corudance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Reading lists</title><link>https://jycabello.github.io/reading-lists/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jycabello.github.io/reading-lists/</guid><description>&lt;h6 id="metacognition"&gt;Metacognition&lt;/h6&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/dp/B08PY44J1P"&gt;Rationality: What It Is, Why It Seems Scarce, Why It Matters&lt;/a&gt; Steven Pinker took me on a journey on accepting that certain apparently irrational behaviours aren&amp;rsquo;t, and provided me with plenty of tools to reason about the way I reason.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/dp/B004J35LHQ"&gt;The secrets of consulting: a guide to giving and getting advice successfully&lt;/a&gt; While this is technically a book about consulting skills, I can&amp;rsquo;t overstate how much of an insight into the way we accept new information this work has given me.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>