<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mariusz</title>
    <description>The latest articles on DEV Community by Mariusz (@klimcio).</description>
    <link>https://dev.to/klimcio</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F339560%2Fdd5c6f31-cd70-4dcf-937b-88dc21109296.jpg</url>
      <title>DEV Community: Mariusz</title>
      <link>https://dev.to/klimcio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/klimcio"/>
    <language>en</language>
    <item>
      <title>My new POV on Story Points — a lesson in task estimation</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Mon, 19 Sep 2022 19:19:26 +0000</pubDate>
      <link>https://dev.to/klimcio/my-new-pov-on-story-points-a-lesson-in-task-estimation-ha4</link>
      <guid>https://dev.to/klimcio/my-new-pov-on-story-points-a-lesson-in-task-estimation-ha4</guid>
      <description>&lt;p&gt;I want to share a story with you.&lt;/p&gt;

&lt;p&gt;For almost two years, I had the chance to be a Scrum Master next to being a developer. I already had a PSM I certificate from way back, I worked in multiple teams that already tried scrum and implemented some sort of interpretation of it. But before my current project, I did not get a chance of actually be a Scrum Master.&lt;/p&gt;

&lt;p&gt;I learned a lot thanks to that role. E.g. How not to fall asleep during meetings. You simply have to facilitate them ;-)&lt;/p&gt;

&lt;p&gt;But what I want to share with you today is an observation in estimating work and delivering results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DISCLAIMER!&lt;/strong&gt; I am only a Scrum Padawan, true mastery will probably come someday (or never, whatever), so for people who know a lot about scrum, this may sound like Paulo Coehlo’s level of wisdom. Apologies if it does!&lt;/p&gt;

&lt;p&gt;I want to share a story with you. For a year or two I got a chance to be a Scrum Master next to being a game developer. I already had a PSM I certificate, I worked in multiple teams that already tried scrum and implemented some sort of interpretation of it.&lt;/p&gt;

&lt;p&gt;I’ve got many good experiences thanks to that role. I learned how not to fall asleep meetings. You simply have to facilitate them;-) But what I want to share with you today is an observation in estimating&lt;/p&gt;

&lt;p&gt;Scrum Teams often use Story Points to answer the question of how com­plex a task is. The theory always states to NOT calculate story points into hours of work (or assume that 3 SP is like a whole day, which many teams I saw do anyway).&lt;/p&gt;

&lt;p&gt;The temptation is big, that’s why sometimes they don’t use numbers (e.g. from a Fibonacci-like scale of 1, 2, 3, 5, 8, 12, etc.) but t-shirt sizes or something like that.&lt;/p&gt;

&lt;p&gt;I always considered it very abstract, not only to explain it but also to use it.&lt;/p&gt;

&lt;p&gt;My team used to underdeliver when it comes to how much story points we had done by the end of a two-week-long Sprint, we did not look good when compared to other teams.&lt;/p&gt;

&lt;p&gt;But one recent Sprint was different, we delivered twice as much, and that without a full squad!&lt;/p&gt;

&lt;p&gt;In order to explain why we managed (in my opinion, of course) I need to make a digression.&lt;/p&gt;

&lt;p&gt;Each month we made a deployment, and our deployments were very complex. The entire system consists of multiple services and web applications. It’s so complex, that we made an entire checklist in Excel that had almost 100 tasks to be done prior/during/after the deployment.&lt;/p&gt;

&lt;p&gt;This time we did one thing differently — we turned excel rows with tasks into tasks in our Sprint. Instead of having two to-do lists, we merged them into one. These weren’t big tasks — 1 story point usually, sometimes even a 0.5.&lt;/p&gt;

&lt;p&gt;When we saw the planned Sprint we were afraid we would not deliver the entire Sprint, again.&lt;/p&gt;

&lt;p&gt;Flash Forward, wooosh — we delivered the entire Sprint if not more. The only thing we did not have was those big confetti-raining balls on the ceiling Ace Attorney style ;-)&lt;/p&gt;

&lt;p&gt;Why we succeeded this time? My money is on the fact that a large number of tasks we had were estima­ted for 1 story point.&lt;/p&gt;

&lt;p&gt;It reminded me that one should not convert stary points into hours.&lt;/p&gt;

&lt;p&gt;But it also made me think differently about story points.&lt;/p&gt;

&lt;p&gt;Sure, Story Points are about complexity, but I realized one has to look back and reinterpret the estimation. In the end, the number tells us two more things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;how much you don’t know about the task?&lt;/li&gt;
&lt;li&gt;what is the amount of risk linked to this task?
The first point seems obvious, doesn’t it? In fact the higher the number is the less it is an estimation, and more of an alert.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I heard about teams that will only start working on tasks once they broke them down into small ones (1 or 2 points tasks).&lt;/p&gt;

&lt;p&gt;Some estimation tools I saw limit the number of estimation numbers to 5 (meaning: 1, 2, 3, 5), assuming that larger tasks are not ready to start working on.&lt;/p&gt;

&lt;p&gt;Whether you’re planning a work project or a side project it is important to front-load your unknowns.&lt;/p&gt;

&lt;p&gt;Write down the tasks before you start them and try to break them down into smaller tasks.&lt;/p&gt;

&lt;p&gt;Each time you analyze a task think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;what is to be done here?&lt;/li&gt;
&lt;li&gt;have you done similar tasks before?&lt;/li&gt;
&lt;li&gt;if not — do you know how to do it?&lt;/li&gt;
&lt;li&gt;what can slow you down?&lt;/li&gt;
&lt;li&gt;what do you have to learn to finish the tasks?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The simpler your task list becomes, the more achievable it is.&lt;/p&gt;




&lt;p&gt;I write weekly on becoming a game developer and related (off)topics on my newsletter &lt;a href="https://www.getrevue.co/profile/MariuszKlimek"&gt;Wannabe Indie Gamedev&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>scrum</category>
      <category>storypoints</category>
      <category>estimation</category>
    </item>
    <item>
      <title>An interview with ΔV: Rings of Saturn dev - Mariusz Chwalba</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Thu, 19 May 2022 18:20:19 +0000</pubDate>
      <link>https://dev.to/klimcio/an-interview-with-dv-rings-of-saturn-dev-mariusz-chwalba-55k</link>
      <guid>https://dev.to/klimcio/an-interview-with-dv-rings-of-saturn-dev-mariusz-chwalba-55k</guid>
      <description>&lt;p&gt;Mariusz Chwalba, creator of ΔV: Rings of Saturn on starting as a game creator, rituals, and decisions in gamedev.&lt;/p&gt;

&lt;h2&gt;
  
  
  Have you always wanted to make video games or was this a relatively new direction for you?
&lt;/h2&gt;

&lt;p&gt;I always wanted to create games, that’s why I picked up programming. My first program was actually a game - but that’s normal if you start programming as a kid.&lt;/p&gt;

&lt;p&gt;I overslept the first occasion - when games were made by small teams for the Atari or the Amiga. As with the second occasion - when mobile games were made on the same scale. Today we have a very good situation - independent one-man studios publish games, which sell pretty well. And that’s when I grabbed onto.&lt;/p&gt;

&lt;p&gt;I like making games, and in an independent studio there’s this incredible directness - there’s me, there are gamers, and no one in between. I don’t have to explain myself to management, publishers, or anyone else - I answer only to the players. And that suits me very well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Were you experienced in making games when starting working on dV?
&lt;/h2&gt;

&lt;p&gt;In Gamedev - no, that’s my first serious project.&lt;/p&gt;

&lt;p&gt;I had a lot of experience in business programming, though.&lt;/p&gt;

&lt;h2&gt;
  
  
  What technologies do you work with usually?
&lt;/h2&gt;

&lt;p&gt;Oh, a lot: docker, VMWare, NodeJS, Golang, Java, PHP, MySQL, couchbase, ElasticSearch, angular, electron, Cordova, git - to mention only the ones I used lately. Overall, I do full-stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  So programming isn’t new to you. How long are you a programmer? Both as a hobby and professionally?
&lt;/h2&gt;

&lt;p&gt;As a hobby - 36 years, professionaly - 23.&lt;/p&gt;

&lt;p&gt;I can say with a clear conscience - I’m not new to programming :)&lt;/p&gt;

&lt;h2&gt;
  
  
  How old were you when you started working on dV?
&lt;/h2&gt;

&lt;p&gt;A little over 40.&lt;/p&gt;

&lt;h2&gt;
  
  
  If I remember your tweets correctly, you made dV in Godot. Which language did you pick?
&lt;/h2&gt;

&lt;p&gt;Yes, in Godot. The entirety was written in GDScript.&lt;/p&gt;

&lt;h2&gt;
  
  
  What made you pick Godot?
&lt;/h2&gt;

&lt;p&gt;In the beginning, I wanted to write my own engine and started to look after proper libraries to use. But it turned out that Godot had most of the things I needed, and I liked its scene model very much. &lt;/p&gt;

&lt;h2&gt;
  
  
  Did you dive straight into making the game, or have you done some time doing tutorials first?
&lt;/h2&gt;

&lt;p&gt;Not with tutorials, but I twice wanted to make an RPG. Because I like RPGs. But the scope was way too large at the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  You wrote about your game: “A game where you pay the physics of spaceflight proper respect, but it’s still a game, and not just a spacecraft simulator”, were there games that you enjoyed although did not approach the gameplay same way as you did?
&lt;/h2&gt;

&lt;p&gt;I think you asked too wide. Skyrim did not have such an approach and I enjoyed it. I don’t think that’s what you meant :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Indeed :) I was thinking about space games, specifically.
&lt;/h2&gt;

&lt;p&gt;When it comes to games where you fly spaceships, the last game that pulled me in was Elite 2: Frontier. Yes, in those days. I was hoping that Elite: Dangerous will go in that direction, but I was disappointed. &lt;/p&gt;

&lt;p&gt;The X Series does not stick to the scale and its entire “space” is in reality very small.&lt;/p&gt;

&lt;p&gt;CoaDE [Children of a Dead Earth] is nice when looking at its realism, but that’s rather a spaceship simulator than a game.&lt;br&gt;
How large is your team?&lt;/p&gt;

&lt;h2&gt;
  
  
  That’s a very complicated question. Depending on the criteria of “working on a project” the answer would be 1, 4, or tens of people :)
&lt;/h2&gt;

&lt;p&gt;I work full-time, with 3 additional people from time to time and we share profits, and there are also several dozens of gamers, who add things like discovering bugs, sharing ideas, or translating to different languages as part of playing with the game.&lt;/p&gt;

&lt;p&gt;Oh yeah, and there were 4 trainees at some point too. &lt;/p&gt;

&lt;h2&gt;
  
  
  In what phase did you start to delegate work? And what kind of tasks did you delegate?
&lt;/h2&gt;

&lt;p&gt;The team assembled over time, mostly from players.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modders of your game adding new graphics? Programmers implementing new features?
&lt;/h2&gt;

&lt;p&gt;Coding and graphics I did mostly on my own - I had trainees (also out of gamers) to do that, but they were rather learning, they did not do much of actual resources for the game. &lt;/p&gt;

&lt;p&gt;Out of gamers, I manage to recruit the composer of the entire soundtrack, the writer responsible for the story and dialogues, and a person who does marketing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the biggest challenge for beginners in your opinion?
&lt;/h2&gt;

&lt;p&gt;I don’t think I’m the best person to talk about challenges, although I did not make games before dV, I had a lot of experience with software - so I can tell what I observed are problems among my gamedev colleagues. &lt;/p&gt;

&lt;h2&gt;
  
  
  What did you observe?
&lt;/h2&gt;

&lt;p&gt;Most often - problems with discipline. Leaving bug fixing for later. The tendency to add new ideas to the project results in feature creep with old bugs, which you don’t know how to fix, because they were discovered long ago and can be seen in submodules, which models are way outside the current mental space of the programmer. &lt;/p&gt;

&lt;h2&gt;
  
  
  Should a gamedev wannabe go straight into making his first game, or would it be better to do some small projects first? Should he learn the engine on a “need-to-know basis” to reach his goal or would it be better to actually learn it first?
&lt;/h2&gt;

&lt;p&gt;There is no contradiction here - he should go all in making his first game, but he should make it small.&lt;/p&gt;

&lt;h2&gt;
  
  
  What was dV’s MVP like?
&lt;/h2&gt;

&lt;p&gt;Hehe, Delta is still in MVP, I just successfully raise the “minimum” bar :) Its earliest state would be from the moment it was published in Early Access.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you find time to work on your game? Evenings? Weekends? Or something else?
&lt;/h2&gt;

&lt;p&gt;I spend a few hours every day (planned, except for Fridays) - creating a habit of working on a project is very important to see it through till the end, and that means doing something every day. On average, I work on the game for 2-3 hours daily, at various times of the day.&lt;/p&gt;

&lt;p&gt;What is unchanging are the mornings - every morning, I drink coffee and check all the statistics, I record the progress, and I read the entire feedback for the previous day and night. A tradition of mine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are there game genres/types that should not be tackled by beginners?
&lt;/h2&gt;

&lt;p&gt;The classic answer is MMORPG :)&lt;/p&gt;

&lt;p&gt;Basically - a beginning game developer should pick something, he thinks he can do in a week. Then in a year or two, there’s a chance it might actually be published.&lt;/p&gt;

&lt;p&gt;People often do not realize how much additional work there is when making an application - a game in particular - outside of the basic functionalities.&lt;/p&gt;

&lt;h2&gt;
  
  
  So the last 10% is the last 90%? But 50 weeks for a game whose prototype took one week?
&lt;/h2&gt;

&lt;p&gt;You can make a prototype in two days on a game jam, but then you have to make a menu, handle resolutions, controllers, keyboard mapping, and settings - a lot of things you don’t think about when starting a project. And there’s scope creep guaranteed. I don’t know a project it did not appear.&lt;/p&gt;

&lt;p&gt;Out of experience - when I started working on dV I was thinking it was “something to be completed in a week, so I’ll finish it in two months.” That was in 2018.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you have any game ideas you will make after dV?
&lt;/h2&gt;

&lt;p&gt;Yes, three at least :)&lt;/p&gt;

&lt;h2&gt;
  
  
  Will you return to In Dead Company?
&lt;/h2&gt;

&lt;p&gt;Perhaps, but not as my next project. It was an ambitious idea, which I can enhance with additional experience and even more ideas to add - but I gathered a community around dV, and they will be most probably more interested in science-fiction games.&lt;/p&gt;

&lt;h2&gt;
  
  
  Could you tell us what were the main features of In Dead Company?
&lt;/h2&gt;

&lt;p&gt;First of all, it was an RPG with many characters and procedurally-generated stories. And that demanded a few times the work dV has.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do you have any advice for creators who have problems delivering on their own timelines?
&lt;/h2&gt;

&lt;p&gt;You are asking a person who’s doing his two-month project for four years?&lt;/p&gt;

&lt;p&gt;My advice is the same as answering the question “What to do when my cat is scratching the furniture?”. Get used to it :)&lt;br&gt;
dV works, because thanks to its format, I can add new content which does not interfere with its gameplay. So it works. It wouldn’t be so easy with other formats.&lt;/p&gt;

&lt;p&gt;The game &lt;strong&gt;ΔV: Rings of Saturn&lt;/strong&gt; can be found &lt;a href="https://store.steampowered.com/app/846030/V_Rings_of_Saturn/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This interview appeared in my newsletter &lt;a href="https://www.getrevue.co/profile/MariuszKlimek"&gt;Wannabe Indie Gamedev&lt;/a&gt; first. Subsribe :-)&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>godotengine</category>
    </item>
    <item>
      <title>Pet Project Done - Kindle Clipping Converter</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Wed, 02 Mar 2022 12:21:42 +0000</pubDate>
      <link>https://dev.to/klimcio/pet-project-done-kindle-clipping-converter-3a1h</link>
      <guid>https://dev.to/klimcio/pet-project-done-kindle-clipping-converter-3a1h</guid>
      <description>&lt;p&gt;After &lt;strong&gt;10 years&lt;/strong&gt; of using a Kindle Reader and not knowing what to do with several bookmarks, notes and highlights, I decided to make a my own &lt;a href="https://github.com/klimcio/KindleClippingConverter"&gt;Kindle Clipping Converter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This idea had many versions.&lt;/p&gt;

&lt;p&gt;At first, I wanted to fill a database. But it was a bit discouraging. I would have to pay for the database hosting, and so on. I prefer to spend less money than I need ;-)&lt;/p&gt;

&lt;p&gt;Then I wanted to convert it into into a &lt;strong&gt;JSON&lt;/strong&gt; file for some sort of Kindle Management App I’ll build some day. But I realised I was keeping some notes somewhere, not in one place.&lt;/p&gt;

&lt;p&gt;But then I started using Obsidian, which led me to the current iteration of the idea - creating one markdown file per highlight. Well, basically, because it has a somewhat primitive way of merging highlights with corresponding notes.&lt;/p&gt;

&lt;p&gt;It was also my first project which I tried to do in a &lt;strong&gt;functional programming&lt;/strong&gt; approach.&lt;/p&gt;

&lt;p&gt;It’s also my first pet project listed on my roadmap which is actually done. I might return to it, to make it more usable. But it definitely is more functional!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Wannabe Indie Gamedev - my new newsletter!</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Tue, 01 Mar 2022 21:36:22 +0000</pubDate>
      <link>https://dev.to/klimcio/wannabe-indie-gamedev-my-new-newsletter-38o8</link>
      <guid>https://dev.to/klimcio/wannabe-indie-gamedev-my-new-newsletter-38o8</guid>
      <description>&lt;h2&gt;
  
  
  I decided to start a newsletter!
&lt;/h2&gt;

&lt;p&gt;I set up a Revue account and started &lt;del&gt;blogging&lt;/del&gt; emailing about becoming a game developer. Not that I have any experience in that matter (as of 2021-11-12), but I’m going to document it. Or die trying.&lt;/p&gt;

&lt;p&gt;I decided too write about learning about tools and productivity also, as I treat those two as Act 1 and Act 2 of a Game Developer Career (not that I have any expierience in saying so), but if creating games is Act 3, then as you probably know - &lt;strong&gt;if you’re act 3 sucks, the problem lies in act 1 and 2&lt;/strong&gt; ;-)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.getrevue.co/profile/MariuszKlimek"&gt;You can sign up here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See ya in your inbox! ;-)&lt;/p&gt;

</description>
      <category>gamedev</category>
    </item>
    <item>
      <title>Is Godot Git-friendly?</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Tue, 01 Mar 2022 21:15:39 +0000</pubDate>
      <link>https://dev.to/klimcio/is-godot-git-friendly-4ig7</link>
      <guid>https://dev.to/klimcio/is-godot-git-friendly-4ig7</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This post was initially an issue in my newsletter &lt;a href="https://www.getrevue.co/profile/MariuszKlimek"&gt;Wannabe Indie Gamedev&lt;/a&gt; in which I try to document my way of learning, creating and publishing video games. I'm a .NET Developer, and try to aim my articles at PRO crastinators, wannabes, dreamers and depressed developers like myself ;-) But if you find this article good, &lt;strong&gt;please subscribe&lt;/strong&gt; :-)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you’re familiar with Git (or version control systems) you can skip this part.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you need a version control system
&lt;/h2&gt;

&lt;p&gt;If not, let me convince you that you actually need one, even if you are working solo.&lt;/p&gt;

&lt;p&gt;They say there are multiple phases of maintaining your work.&lt;br&gt;
&lt;strong&gt;Phase 1&lt;/strong&gt; is not maintaining your work at all.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Phase 2&lt;/strong&gt; you get to the conclusion that you need to do some changes that you might want to reject at some point (if you consider them a waste of time), so you make a copy to have a backup.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Phase 3&lt;/strong&gt; you stop trusting your hardware and decide to copy everything to your cloud storage.&lt;/p&gt;

&lt;p&gt;In &lt;strong&gt;Phase 4&lt;/strong&gt; you are fed up with how time-consuming managing this is and start thinking about how other people are handling this. You learn some buzz­words, try to implement them to what is already there, get it to make it work with your multiple folders on Google Drive ;-) I’m joking, of course, this is the absurd route for not using version control systems.&lt;/p&gt;

&lt;p&gt;And yet, some people still think it’s overkill, even if they hear that it’s a basic tool for software teams. And although it’s crucial for people working on one project, as is keeping your work in the cloud, version control has a benefit I want to focus on and that is the ability to re-track your progress.&lt;/p&gt;

&lt;p&gt;It sounds trivial, I know. But let me tell you a story. &lt;/p&gt;

&lt;p&gt;A year or two ago I tried to learn Game Maker 2. It’s simple, nice to use too, a basic tool I wanted to start with. It also has a lot of tutorials. The problem is, I tried to use Git to document every step of my learning process.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an empty project. Commit.&lt;/li&gt;
&lt;li&gt;Add an element. Commit.&lt;/li&gt;
&lt;li&gt;Prepare an executable. Commit.&lt;/li&gt;
&lt;li&gt;Run game. Commit (if there are my changes made in the process)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This way I could easily take notes for future tutorials, for example. Or just to remind me what I was doing before. When you work on your projects and sometimes have too long breaks you might want to start with a solid recap of what you have already done. The problem with most generators is that they don’t care much about readability. Perhaps I expected too much from an application that aims for making game development easier for non-programmers? Perhaps I did. But it didn’t help me out much and it discouraged me from learning.&lt;/p&gt;
&lt;h2&gt;
  
  
  So how Git-friendly is Godot?
&lt;/h2&gt;

&lt;p&gt;Very friendly.&lt;/p&gt;

&lt;p&gt;My first look at the .gitignore file showed me the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Godot-specific ignores
.import/
export.cfg
export_presets.cfg
# Mono-specific ignores
.mono/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quite promising, given the fact that I won’t be using Mono.&lt;br&gt;
But let’s not stop here.&lt;/p&gt;

&lt;p&gt;The project is pretty much text-based, as if it was prepared to modify every file by hand, and not by the editor. The project.godot file, the configuration file of the game is written in a win.ini format. Making it not only easy to read but also not hard to modify.&lt;/p&gt;

&lt;p&gt;The tscn files, which are the scene files (more on that on other occasions) also text with communicative names and syntax.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;All that is leading me to the conclusion that picking up the Godot engine is a very promising start.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>godotengine</category>
      <category>git</category>
    </item>
    <item>
      <title>File Order in F# - the most annoying thing for a beginner?</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Thu, 04 Jun 2020 08:23:56 +0000</pubDate>
      <link>https://dev.to/klimcio/file-order-in-f-the-most-annoying-thing-for-a-beginner-38dc</link>
      <guid>https://dev.to/klimcio/file-order-in-f-the-most-annoying-thing-for-a-beginner-38dc</guid>
      <description>&lt;p&gt;Back to learning F#. Recently, I learned something that is most probably the most annoying thing so far. It looks very discouraging seeing tutorials where people are reordering files in Visual Studio just to make everything compile.&lt;/p&gt;

&lt;p&gt;I had to see it with my own eyes :-)&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;VSCode&lt;/strong&gt; and &lt;strong&gt;.NET Core 3.1&lt;/strong&gt; I created a small project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet new console -lang F# -o "05 Modules"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I added a new file I called &lt;code&gt;Printer.fs&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;module Printer

let printString string =
    printfn "%s" string
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, I modified &lt;code&gt;Program.fs&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;open Printer

[&amp;lt;EntryPoint&amp;gt;]
let main argv =
    printString "1"
    0 // return an integer exit code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then I run using &lt;code&gt;dotnet run&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The first thing I learned when adding a new file is that you must declare modules for F# files. The error message says, something more:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error FS0222: Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which means that &lt;code&gt;Program.fs&lt;/code&gt; does not need a module. Or does it?&lt;/p&gt;

&lt;p&gt;When I added the new file into &lt;code&gt;fsproj&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;"Microsoft.NET.Sdk"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;OutputType&amp;gt;&lt;/span&gt;Exe&lt;span class="nt"&gt;&amp;lt;/OutputType&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;netcoreapp3.1&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;RootNamespace&amp;gt;&lt;/span&gt;_05_Modules&lt;span class="nt"&gt;&amp;lt;/RootNamespace&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;ItemGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Compile&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;"Program.fs"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Compile&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;"Printer.fs"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And I must confess, I added the last file &lt;code&gt;Printer.fs&lt;/code&gt; manually. At the end, where else? ;-)&lt;/p&gt;

&lt;p&gt;Depending on what is going on in the project, I got two different errors. At first I got:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error FS0222: Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first I tried to add &lt;code&gt;module Program&lt;/code&gt; inside &lt;code&gt;Program.fs&lt;/code&gt;, I thought it has given me new errors, therefore progress (see the end of the post, as this was not a solution):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error FS0039: The namespace or module 'Printer' is not defined. Maybe you want one of the following:↔   Printf↔   PrintfModule

error FS0039: The value or constructor 'printArray' is not defined. Maybe you want one of the following:↔   printf↔   Printf↔   printfn↔   PrintfFormat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What else can be missing? The file is mentioned in fsproj, it has a module, it is referenced by &lt;code&gt;Program.fs&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Well, here's the annoying frustrating part: file order. &lt;/p&gt;

&lt;p&gt;When I switched the file order in &lt;code&gt;fsproj&lt;/code&gt; to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;  &lt;span class="nt"&gt;&amp;lt;ItemGroup&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Compile&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;"Printer.fs"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;Compile&lt;/span&gt; &lt;span class="na"&gt;Include=&lt;/span&gt;&lt;span class="s"&gt;"Program.fs"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It compiled and run.&lt;/p&gt;

&lt;p&gt;Yes, that is a language feature :-)&lt;/p&gt;

&lt;p&gt;PS. After making that program compile I removed &lt;code&gt;module Program&lt;/code&gt; from &lt;code&gt;Program.fs&lt;/code&gt; and it still worked. As the error message said: Program does not need to be in a module.&lt;/p&gt;

&lt;p&gt;This blog post was first published on &lt;a href="https://mariuszklimek.github.io/devblog/fsharp/file-order-in-fsharp/"&gt;my blog&lt;/a&gt;&lt;/p&gt;

</description>
      <category>functional</category>
      <category>fsharp</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Simple and helpful tips for F# Beginners</title>
      <dc:creator>Mariusz</dc:creator>
      <pubDate>Thu, 21 May 2020 21:26:40 +0000</pubDate>
      <link>https://dev.to/klimcio/simple-and-helpful-tips-for-f-beginners-fao</link>
      <guid>https://dev.to/klimcio/simple-and-helpful-tips-for-f-beginners-fao</guid>
      <description>&lt;p&gt;I wanted to learn functional programming, and since I'm a .NET guy, so I started learning F#.&lt;/p&gt;

&lt;p&gt;It's funny to start learning something that different after years of programming in C#. The syntax itself seems so unintuitive, although design choices make sense. &lt;/p&gt;

&lt;p&gt;And since I'm doing this in .NET Core 3.1 it's a bit different from many tutorials I managed to get. Like, no fsc (F# compiler) available in the commandline, and so on.&lt;/p&gt;

&lt;p&gt;Therefore I decided to share my steps in the form of tips. If someone has problems with learning F# perhaps they can learned on my mistakes and save some time. By no means this post is to be considered different than a simple developer diary from learning something everyone else already does ;-)&lt;/p&gt;

&lt;h2&gt;
  
  
  My HelloWorld application
&lt;/h2&gt;

&lt;p&gt;Using &lt;strong&gt;VS Code&lt;/strong&gt; and the &lt;strong&gt;command line&lt;/strong&gt; I created a project. First I executed this in the command line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet new console -lang F# -o SimpleExample
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I added some code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight fsharp"&gt;&lt;code&gt;&lt;span class="k"&gt;open&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;

&lt;span class="p"&gt;[&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EntryPoint&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;]&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;squared&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;List&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;// return an integer exit code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And run it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dotnet run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll never guess... I never saw an output ;-)&lt;/p&gt;

&lt;h2&gt;
  
  
  Printfn cheatsheet
&lt;/h2&gt;

&lt;p&gt;Since running this code with &lt;code&gt;dotnet run&lt;/code&gt; did not view any results (I am using VSCode) I had to write a printfn to see what is happening:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight fsharp"&gt;&lt;code&gt;&lt;span class="k"&gt;open&lt;/span&gt; &lt;span class="nc"&gt;System&lt;/span&gt;

&lt;span class="p"&gt;[&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;EntryPoint&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;]&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="p"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;
    &lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="n"&gt;squared&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;List&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt; &lt;span class="n"&gt;square&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;printfn&lt;/span&gt; &lt;span class="s2"&gt;"%s"&lt;/span&gt; &lt;span class="n"&gt;squared&lt;/span&gt;
    &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="c1"&gt;// return an integer exit code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But this resulted in an error.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This expression was expected to have type 'string' but here has type 'int list'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;%s&lt;/code&gt; is ofcourse the simplest form of transforming value into message you can find in any tutorials. But, unlike C#, values are not converted to string by default. F# likes to brag that thanks to it's powerful type inference system you almost never have to specify the type of an object. Well, you learn the &lt;strong&gt;almost never&lt;/strong&gt; quite fast to be honest ;-)&lt;/p&gt;

&lt;p&gt;In this case you just had the use this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight fsharp"&gt;&lt;code&gt;&lt;span class="n"&gt;printfn&lt;/span&gt; &lt;span class="s2"&gt;"%A"&lt;/span&gt; &lt;span class="n"&gt;squared&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This basically converts the entire array into strings - showing it's values like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[1; 4; 9; 25; 49]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But sometimes you might have different values to view in the output window. So I prepared a small cheatsheet of types I found and how to represent them:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Format&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;%s&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%i&lt;/td&gt;
&lt;td&gt;integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%u&lt;/td&gt;
&lt;td&gt;unsigned integer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%f&lt;/td&gt;
&lt;td&gt;float&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%b&lt;/td&gt;
&lt;td&gt;boolean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%O&lt;/td&gt;
&lt;td&gt;other objects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%o&lt;/td&gt;
&lt;td&gt;octal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%x&lt;/td&gt;
&lt;td&gt;lowercase hex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%X&lt;/td&gt;
&lt;td&gt;uppercase hex&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;%A&lt;/td&gt;
&lt;td&gt;native F# types&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;What are native F# types? Non-primitive types. Like: arrays, tuples, records and union types. Probably much more - to be learned.&lt;/p&gt;

&lt;h2&gt;
  
  
  Spaces at the end matter.
&lt;/h2&gt;

&lt;p&gt;Having the correct code resulted in a new error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;error FS0597: Successive arguments should be separated by spaces or tupled, and arguments involving function or method applications should be parenthesized
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pointing to the beginning of the word "squared".&lt;br&gt;
Guess what... There was a single space after squared. Removing it fixed the bug. WHITESPACES MATTER, PEOPLE! ;-)&lt;/p&gt;

&lt;p&gt;Now, let's get back to learning!&lt;/p&gt;

</description>
      <category>functional</category>
      <category>fsharp</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
