{"2026/07":[{"title":"The ChangeLog – June 2026","url":"https://www.davideaversa.it/blog/changelog-june-2026/","date":"2026-07-01","summary":"June 2026 has been a mix of events and emotions. I went to Greece for work, I hurt my back, and we booked our wedding location and date. But I also read the new Dungeon Crawler Carl book, a historical novel set in Syracuse, watched a romcom from 1966, a Pixar movie I didn\u0026rsquo;t know existed and enjoyed yet another Canadian progressive rock duo.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/06":[{"title":"The ChangeLog – May 2026","url":"https://www.davideaversa.it/blog/changelog-may-2026/","date":"2026-06-01","summary":"Yes, I am getting married. A symbolic representation of how I am breaking a decade of stagnation. Moreover, in this issue, the new chapter of \u003cem\u003eOn the Calculation of Volume\u003c/em\u003e, the review of \u003cem\u003eAdaptation\u003c/em\u003e. and \u003cem\u003eClifford\u003c/em\u003e and, finally, I talk about the new album forom Genesis Owusu.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/05":[{"title":"A D\u0026D Encounter Calculator in Elixir","url":"https://www.davideaversa.it/blog/dnd-encounter-calculator-elixir/","date":"2026-05-03","summary":"I am sharing a little \u003cem\u003eDungeons \u0026amp; Dragons\u003c/em\u003e encounter calculator I wrote in Elixir as an exercise. In the last two months I did two things: D\u0026amp;D and Elixir. It was only a matter of time before they had a little child.","tags":["elixir","dungeons and dragons","ttrpg"]},{"title":"The ChangeLog – April 2026","url":"https://www.davideaversa.it/blog/changelog-april-2026/","date":"2026-05-01","summary":"April wasn\u0026rsquo;t really a month of change, but it was one in which I put something in motion. In the meantime, I read \u003cem\u003eAnathem\u003c/em\u003e and two other books, watched a 1945 movie, explored \u003cem\u003enerdcore\u003c/em\u003e hip-hop, and lost my mind on \u003cem\u003eVampire Crawlers\u003c/em\u003e.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/04":[{"title":"The ChangeLog – March 2026","url":"https://www.davideaversa.it/blog/changelog-march-2026/","date":"2026-04-01","summary":"In a surprisinglly cold March, I read a lot not completing any book (next month!) and finally reached the final stretch of my James Bond watch-a-thon but, most importantly, I got lost in the best Pokémon game of all time: Pokopia.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/03":[{"title":"The Changelog – February 2026","url":"https://www.davideaversa.it/blog/changelog-february-2026/","date":"2026-03-01","summary":"February is the shortest month, and I always need to write it at the last moment. It is hard to write about what I did up to the 27th when the month has only one more day. So I am always short on time, and I never learn my lesson. I didn’t learn it even this time. Still, in the end, I have still something to show off.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/02":[{"title":"The Changelog – January 2026","url":"https://www.davideaversa.it/blog/changelog-january-2026/","date":"2026-02-01","summary":"The year started with a bang. I read an Einstein biography, watched a great, century-old movie, and got caught by Polish progressive rock once again. But, most importantly, I have a cat now.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2026/01":[{"title":"The Hyperdigestion of Modern Media","url":"https://www.davideaversa.it/blog/the-hyperdigestion-of-modern-media/","date":"2026-01-09","summary":"I am increasingly bothered by the fact that any piece of media that comes out is already old in less than 24 hours. Everybody feels the urge to have a strong take, to dissect it and analyze it. In doing so, we lose the ability to let a piece of media filter through our minds and become part of us.","tags":["media","opinion","social media","society"]},{"title":"The Changelog – December 2025","url":"https://www.davideaversa.it/blog/changelog-december-2025/","date":"2026-01-03","summary":"This monthly edition is shorter than usual, as I spent most of my time revising my second novel-length story, doing this year\u0026rsquo;s \u003ca href=\"https://adventofcode.com\"\u003eAdvent of Code\u003c/a\u003e, and living the Christmas atmosphere.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/12":[{"title":"The Changelog – November 2025","url":"https://www.davideaversa.it/blog/changelog-november-2025/","date":"2025-12-01","summary":"October was very similar to November, with the same issues but also the same good things. I am focusing a lot on Music an RPGs as a coping mechanism. This month, I finished the last two books from the Dungeon Crawler Carl series, watched Del Toro\u0026rsquo;s Frankenstein and another bunch of James Bond movies. And an important news: after 2 years, I finally started Baldur\u0026rsquo;s Gate 3.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/11":[{"title":"The Changelog – October 2025","url":"https://www.davideaversa.it/blog/changelog-october-2025/","date":"2025-11-01","summary":"October felt like it lasted a week. Still, it was a nice, cozy month. In this article we\u0026rsquo;ll talk about the fifth chapter of the Dungeon Crawler Carl series, two non-gory horror movies, another AOR album, and my experience with \u003cem\u003eGhost of Yotei\u003c/em\u003e","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/10":[{"title":"The Changelog – September 2025","url":"https://www.davideaversa.it/blog/changelog-september-2025/","date":"2025-10-01","summary":"September was a great month. I finally have a desk, and I finally changed something in my daily routine. I read another two books of the Dungeon Crawler Carl series and finished the Three-Body Problem trilogy. I watched High and Low and The Phantom of the Opera, and I will share my connection I Love My Computer by Ninajirachi. Finally, my two cents about Silksong.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/09":[{"title":"The Changelog – August 2025","url":"https://www.davideaversa.it/blog/changelog-august-2025/","date":"2025-09-01","summary":"August was a month of recharging. I spent a week in the mountains and reconnected with myself. In this month\u0026rsquo;s issue: my first taste of \u003cem\u003elitRPG\u003c/em\u003e, a Japanese movie about food, multiple Ulysses, and two progressive rock Ukrainian albums.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/08":[{"title":"Review your week like a chess game","url":"https://www.davideaversa.it/blog/review-your-week-like-in-chess/","date":"2025-08-24","summary":"For the last year, I\u0026rsquo;ve been using a chess-inspired system to review time periods in my life. It is a stupidly simple system, but effective (in my expirience). So, I thought I could share it with you.","tags":["workflow"]},{"title":"The Changelog – July 2025","url":"https://www.davideaversa.it/blog/changelog-july-2025/","date":"2025-08-01","summary":"It has been a month of contrasts; of light and shadows. In the midst of all that, I read three books, listened to the new Messa\u0026rsquo;s album and, of course, I watched KPop Demon Hunters like everybody else.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/07":[{"title":"The Changelog – June 2025","url":"https://www.davideaversa.it/blog/changelog-june-2025/","date":"2025-07-01","summary":"In this scorching hot June, I started to be myself again and I am again finally able to feel enthusiasm for projects and ideas. And for this reason, I read and watched more things. So let\u0026rsquo;s explore last month\u0026rsquo;s books, movie, and my favorite Japanese web radio.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/06":[{"title":"The Changelog – May 2025","url":"https://www.davideaversa.it/blog/changelog-may-2025/","date":"2025-06-02","summary":"I dont\u0026rsquo;t feel like talking much. So let\u0026rsquo;s just talke about two books abotut the Roman Empire, a movie about Bob Dylan, and how I am catching up with the Mission: Impossible franchise. And Expedition 33.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/05":[{"title":"The Changelog – April 2025","url":"https://www.davideaversa.it/blog/changelog-april-2025/","date":"2025-05-01","summary":"This month has been harsh. I spent most of it in my head, unable to control a wave of anxiety and catastrophic thoughts. Yet, I tried my best. I read Nexus, watched Conclave just in time for the real one and found another obsucre gem in Netflix back catalog.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/04":[{"title":"The Changelog – March 2025","url":"https://www.davideaversa.it/blog/changelog-march-2025/","date":"2025-04-01","summary":"March was a month of contrasts, but, overall, I am happy with it. I wrote two articles, finally watched Flow, and read \u003cem\u003eThe Notebook\u003c/em\u003e, listen to the new \u003cem\u003eclippings\u003c/em\u003e album. And now I am ready for the new season!","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/03":[{"title":"It Is Okay to “Vibecode”","url":"https://www.davideaversa.it/blog/it-is-okay-vibecode/","date":"2025-03-25","summary":"Critiques to vibecoding are often an example of right-Gaussian thinking. If you want to be a developer, you should avoid it. But if not, why should you not take advantage of new tools? Just be aware of the limitations. Here I try to explain why vibecoding is not a cardinal sin.","tags":["llm","opinion"]},{"title":"MovingAI-Rust 2.1.0: Now panic-free!","url":"https://www.davideaversa.it/blog/movingai-rust-2.1.0/","date":"2025-03-12","summary":"I released version 2.1.0 of my MovingAI benchmark parser for Rust. The main change is that I removed all panics from the library because idiomatic Rust code should not panic if it can return a \u003ccode\u003eResult\u003c/code\u003e object.","tags":["movingai","pathfinding","rust"]},{"title":"How to install MediaWiki on Docker","url":"https://www.davideaversa.it/blog/how-to-install-mediawiki/","date":"2025-03-06","summary":"A quick 10-steps guide to have a MediaWiki instance running locally in 10 minutes with Docker. Because why not? Why should I not the most powerful wiki software to power my local home wiki?","tags":["mediawiki","docker","wiki","knowledge managment","how-to"]},{"title":"The Changelog – February 2025","url":"https://www.davideaversa.it/blog/changelog-february-2025/","date":"2025-03-01","summary":"February was a pleasant month, but perhaps not a very memorable one. I read The Two Towers and Red Team Blues, watched Silo and Mythic Quest, and played Hades 2. I also listened to the new albums by Oklou, Benjamin Booker, and MIKE.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/02":[{"title":"The Changelog – January 2025","url":"https://www.davideaversa.it/blog/changelog-january-2025/","date":"2025-02-01","summary":"January was a fine month, but I need to shake things up. I read a book about Socrates and another Star Trek novel. I watched the entire Fast and Furious franchise. I listened to embarassing AOR and played Hades 2. And, finally, the Switch 2 was announced.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2025/01":[{"title":"The Books I Read in 2024","url":"https://www.davideaversa.it/blog/books-read-2024/","date":"2025-01-12","summary":"Another year of reading is now in the past! As the tradition wants, I am going to collect here every single comments I wrote on every book I read during 2024. All 32 of them. Enjoy!","tags":["books"]},{"title":"The Changelog – December 2024","url":"https://www.davideaversa.it/blog/changelog-december-2024/","date":"2025-01-01","summary":"Happy New Year! Let\u0026rsquo;s wrap up 2024 with a look back at the last month of a solid year. In the last stretch of the year, I reached 196 watched movies, 32 books, and I fell back into my Steam Deck. I also wrote about the anime movie \u003cem\u003eLook Back\u003c/em\u003e, the Christmas movie \u003cem\u003eKlaus\u003c/em\u003e, and the end of \u003cem\u003eStar Trek: Lower Decks\u003c/em\u003e Season 5.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/12":[{"title":"My Default Apps for 2024","url":"https://www.davideaversa.it/blog/default-apps-2024/","date":"2024-12-16","summary":"Let\u0026rsquo;s revisit last year\u0026rsquo;s article on the apps I used in 2023 and see what I changed in 2024.","tags":["software"]},{"title":"Testing Bluesky-Powered Comments","url":"https://www.davideaversa.it/blog/bluesky-comments/","date":"2024-12-12","summary":"After seeing many similar experiments, I am testing a way to show and comment on this blog\u0026rsquo;s articles using Bluesky network. In the best case, it will make the comment section more lively. In the worst case, I would had learned something new.","tags":["blog","social networks","bluesky","internet"]},{"title":"Notes on this Bluesky Moment","url":"https://www.davideaversa.it/blog/bluesky-notes/","date":"2024-12-03","summary":"In the last couple of months, Bluesky, one of the many post-Twitter attempts to reshape the landscape of social networks, is living its best moment. Powered by Twitter\u0026rsquo;s blunders and by the continuous alienation provided by his power-hungry owner, Bluesky doubled its user base from around 10 millions users to the current 24 millions. It is time to annotate some of my thoughts.","tags":["opinion","social networks","bluesky","mastodon","enshittification","decentralization","internet","activitypub"]},{"title":"The Changelog – November 2024","url":"https://www.davideaversa.it/blog/changelog-november-2024/","date":"2024-12-01","summary":"It was a more stable month, where I focused on NaNoWriMo and on training my writing muscle once again. I read a lot less, but I still had some good movies and series to recommend.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/11":[{"title":"The Changelog – October 2024","url":"https://www.davideaversa.it/blog/changelog-october-2024/","date":"2024-11-01","summary":"Another month with some wild ups and downs. I spent 5 days in Veneto, and they were wonderful days. I stumbled my way through the rest of the month. I finished the \u003cem\u003eStar Trek: Vanguard\u003c/em\u003e series, watched a lot of Japanese spooky movies, and played a bit of \u003cem\u003eThe Legend of Zelda: Echoes of Wisdom\u003c/em\u003e. And because I am fond of soundtracks, and I spent a lot of time listening to Bear McCreary\u0026rsquo;s compositions.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/10":[{"title":"The Changelog – September 2024","url":"https://www.davideaversa.it/blog/changelog-september-2024/","date":"2024-10-01","summary":"September was a month of ups and downs. At least, I read a lot of books. I watched Laura, The Post, and a lot of other movies. I listened to prograssive music and I played Castlevania Dominus Collection and Shogun Showdown.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/09":[{"title":"The Changelog – August 2024","url":"https://www.davideaversa.it/blog/changelog-august-2024/","date":"2024-09-01","summary":"Finally, I was able to travel again! I spent four days in Edinburgh, and recharged for the \u0026ldquo;New Year\u0026rdquo;. But I also read two books, some wonderful Buñuel movies, and listened to all the amazing new music we got in August. It was a good month! So let\u0026rsquo;s check it out.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/08":[{"title":"How I use Calibre to manage my physical library","url":"https://www.davideaversa.it/blog/how-calibre-manage-physical-library/","date":"2024-08-13","summary":"I love Calibre and I love to curate my digital library. But what about my physical books? How do I fill their gaps in my Calibre database? Luckily, there is a very easy way to track them using Calibre as well.","tags":["Calibre","books","organization","TOML"]},{"title":"The Changelog – July 2024","url":"https://www.davideaversa.it/blog/changelog-july-2024/","date":"2024-08-01","summary":"July was a very annoying month. I was tired, my arm was hurting, and the weather was unbearable. Still, surprisingly, something happened. Three boks, 18 movies, and two games.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/07":[{"title":"Why do we feel retro-computing nostalgia?","url":"https://www.davideaversa.it/blog/why-do-we-feel-retro-computing-nostalgia/","date":"2024-07-07","summary":"Why do we feel attraction for the past? Why do we look at the \u0026lsquo;old web\u0026rsquo; with dreaming eyes? Why do we see old protocols and feel the lure of the past? Why do we feel nostalgia for old technology? In this article, I explore my reasons behind the retro-computing nostalgia.","tags":["opinion","retro-computing"]},{"title":"The Changelog – June 2024","url":"https://www.davideaversa.it/blog/changelog-june-2024/","date":"2024-07-01","summary":"In the last issue, I lamented May’s lack of passion and my inability to connect with anything in particular. In June, instead, I caught up with everything. I got very invested in many things. I loved tons of movies, and I lost myself (and spent too much money) in a lot of different music genres.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/06":[{"title":"One surprising thing about LLMs nobody is talking about","url":"https://www.davideaversa.it/blog/one-surprising-thing-about-llms-nobody-is-talking-about/","date":"2024-06-23","summary":"Large Language Models (LLMs) maybe be controversial, somehow, but I am still amazed by their mathematical properties. In this article, I will reflect on my favorite one.","tags":["artificial intelligence","llm"]},{"title":"The Changelog – May 2024","url":"https://www.davideaversa.it/blog/changelog-may-2024/","date":"2024-06-01","summary":"May was better than expected. Even if I had to deal with a week of flu. I read two books, watched 36 movies, binged the entire Marvel Cinematic Universe, and listened to a lot of music. I also started playing Tunic.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/05":[{"title":"The Changelog – April 2024","url":"https://www.davideaversa.it/blog/changelog-april-2024/","date":"2024-05-01","summary":"Let\u0026rsquo;s see the three books I read in April 2024, the ending of Fallot and Shogun, a beautiful Japanese movie, and a never-ending album with 32 tracks. All that in a slowly declining mood. Hurray!","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/04":[{"title":"This website will always be open. For bots, too.","url":"https://www.davideaversa.it/blog/this-website-will-always-be-open/","date":"2024-04-21","summary":"In period where everybody seems to care about the use of our content, I decided to take a stance: I will always make my content available to everybody, human and non-human alike. Because copyright is a already a problem as it is.","tags":["artificial intelligence","copyright"]},{"title":"The Changelog – March 2024","url":"https://www.davideaversa.it/blog/changelog-march-2024/","date":"2024-04-01","summary":"March flew by in a blink. For good reasons: I had some interesting work projects I focused on, and I spent the rest of the time reading, watching movies, and making music. While there were things I wanted to write (I have three rough blog posts drafts), it was a nice pace.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/03":[{"title":"The Changelog – February 2024","url":"https://www.davideaversa.it/blog/changelog-february-2024/","date":"2024-03-01","summary":"Let\u0026rsquo;s explore the events from last month! I\u0026rsquo;ll discuss why I moved my website back to my hosting server, how I watched more movies than I did in the last three years combined, the three books I read, DJ Rozwell\u0026rsquo;s roguelike album, and more.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/02":[{"title":"The Changelog – January 2024","url":"https://www.davideaversa.it/blog/changelog-january-2024/","date":"2024-02-01","summary":"This has been a month of ups and downs. I started the year with a flu comeback, and I ended it with a lot of interesting things. I started my movie bucket list, I read the grandfather of all noirs novels, and I completed Hogwarts Legacy. Just to name a few things.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2024/01":[{"title":"The Books I Read in 2023","url":"https://www.davideaversa.it/blog/books-read-2023/","date":"2024-01-14","summary":"After another 12 months, I am back with the traditional summary list of the books I read in the previous solar year. So here are my 35 books that I read in 2023.","tags":["books"]},{"title":"The Changelog – December 2023","url":"https://www.davideaversa.it/blog/changelog-december-2023/","date":"2024-01-02","summary":"This issue will be another reduced and unconventional one. In fact, as I write this, I am still recovering from a winter flu. It seems to be a 2023 tradition that every time I take a week off from work, I am struck by some pathogen. This year, I swear\u0026hellip;","tags":["changelog","music","books","tv series","videogame","movies"]}],"2023/12":[{"title":"My Default Apps for 2023","url":"https://www.davideaversa.it/blog/default-apps-2023/","date":"2023-12-04","summary":"Jumping on the bandwagon of the default apps for 2023 blog trend. What a time to be alive.","tags":["software"]},{"title":"The Changelog – November 2023","url":"https://www.davideaversa.it/blog/changelog-november-2023/","date":"2023-12-01","summary":"After the obnoxious events of last October, I had no hope for November. If you recall, I was exhausted, psychologically drained, and quite certain that I would have started digging. Instead, the thing that happens every time I stop caring happened: I start doing things without overthinking them, I put myself in unpredictable situations, and – as a consequence – things changes.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2023/11":[{"title":"The Changelog – October 2023","url":"https://www.davideaversa.it/blog/changelog-october-2023/","date":"2023-11-01","summary":"October was supposed to be \u003cem\u003e”The Month.”\u003c/em\u003e After a complicated summer and an awful September, I had my October well planned. It was meant to be filled with things I wanted to do, fun events, enjoyable travels, and inspiring experiences that could have helped me reverse the spiraling downward momentum of the last few months. Instead, everything went down the toilet.","tags":["changelog","music","books","tv series","videogame","movies"]}],"2023/10":[{"title":"The Changelog – September 2023","url":"https://www.davideaversa.it/blog/changelog-september-2023/","date":"2023-10-01","summary":"\u003cp\u003eIn early September, I found myself in an emotional slump. For the first time since late 2019, I was overcome by crippling anxiety and disheartenment. It\u0026rsquo;s not that I hadn\u0026rsquo;t experienced anxiety since 2019, but I had never reached this level of intensity (which isn\u0026rsquo;t a bad accomplishment considering I had to navigate a global pandemic).\u003c/p\u003e\n\u003cp\u003eFortunately, I have some experience with these situations, so I was able to regain control in a week instead of the three months it used to take.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame","movies"]}],"2023/09":[{"title":"Remove custom tags from SingleFile output","url":"https://www.davideaversa.it/blog/remove-custom-tags-from-singlefile-output/","date":"2023-09-10","summary":"I often use SingleFile to archive the page I like. One day, I\u0026rsquo;ve found out that Readwise was injecting 2Mb of JavaScript in each page. That is a lot of wasted space. Luckily, there is a (not simple) way to filter out custom tags from archived pages.","tags":["SingleFile","Readwise","HTML"]},{"title":"The Changelog – August 2023","url":"https://www.davideaversa.it/blog/changelog-august-2023/","date":"2023-09-03","summary":"\u003cp\u003eI know, I am late, but I have a good excuse: I was on a short holiday break in my nearby town of Terracina. I had also planned to publish this article on one of those lazy afternoons. However, when I arrived, I noticed that the mobile connection was practically non-existent (I hadn\u0026rsquo;t seen 1kbps since the early 2000s), so I gave up.\u003c/p\u003e\n\u003cp\u003eNo real damage, I suppose. I guess nobody lost any sleep over it. 😅\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame","movies"]}],"2023/08":[{"title":"How to use ElevenLabs text-to-speech in Unity","url":"https://www.davideaversa.it/blog/elevenlabs-text-to-speech-unity-script/","date":"2023-08-27","summary":"ElevenLabs offers the best text-to-speech API on the market, and it is my go-to service when I want to have very good results. I had to add text-to-speech to Unity\u0026rsquo;s demos a lot of times in the last months, and I decided to share the basic script I use to do it.","tags":["text-to-speech","ai","unity","elevenlabs"]},{"title":"De-Bootstrapping my Blog - Part 2 - Going Mobile","url":"https://www.davideaversa.it/blog/debootstrapping-part-2/","date":"2023-08-22","summary":"I am writing a series of posts about the development of a new blog theme. In the second part, I describe how I conquered my fears, and implemented a responsive layout and a hamburger menu in pure CSS.","tags":["blog","css","bootstrap","web-design"]},{"title":"Why I don't do Time Tracking","url":"https://www.davideaversa.it/blog/why-no-time-tracking/","date":"2023-08-08","summary":"Time tracking is a popular productivity technique. Many people swear by it as the most effective intentionality tool. However, it never worked for me. It made things worse. Here, I explain the three reasons why it failed me.","tags":["productivity","time tracking"]},{"title":"The Changelog – July 2023","url":"https://www.davideaversa.it/blog/changelog-july-2023/","date":"2023-08-01","summary":"\u003cp\u003e\u003cstrong\u003eNotwithstanding the Sud-European heatwave, I survived.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eThis is already a good result for July, \u003cem\u003eper se\u003c/em\u003e. Hailstorms and high-speed winds scourged Northern Italy, while forest fires tormented Southern Italy. I, in the middle, only had to endure 45°C. If you look at this in perspective, it is not so bad.\u003c/p\u003e\n\u003cp\u003eHowever, surviving was not enough. While the world slowed down, burdened by the sluggish progression of an overheated July, I felt more in tune with myself.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame","movies","retrogaming"]}],"2023/07":[{"title":"I still not trust Arc","url":"https://www.davideaversa.it/blog/still-not-trust-arc/","date":"2023-07-26","summary":"Now that Arc is available without an invitation, many people will try it for the first time. Unfortunately, while I think it is a good browser, I still don’t trust it.","tags":["browser","software"]},{"title":"De-Bootstrapping my Blog - Part 1","url":"https://www.davideaversa.it/blog/debootstrapping-part-1/","date":"2023-07-09","summary":"I am writing a series of posts about the development of a new blog theme. In this first post, I talk about the history of web design (in my experience) and the new best thing in town: CSS Grid.","tags":["blog","css","bootstrap","web-design"]},{"title":"The Changelog – June 2023","url":"https://www.davideaversa.it/blog/changelog-june-2023/","date":"2023-07-03","summary":"\u003cp\u003eJune was fine. I wish I could express more positive sentiments, but that’s how I feel. It was, however, a big step forward compared to May. Not because I resolved anything (on the contrary, my frustrations grew stronger) but rather because I put a certain emotional scar tissue around my problems so that they interfere less with my intentions.\u003c/p\u003e\n\u003cp\u003eJune was also the month in which I was supposed to get the new car I ordered back in January. But no. No luck. I must continue with my old garbage-car for a bit (if she doesn\u0026rsquo;t fail me first).\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/06":[{"title":"The Changelog – May 2023","url":"https://www.davideaversa.it/blog/changelog-may-2023/","date":"2023-06-01","summary":"\u003cp\u003eIn the previous issue of the Changelog, I mentioned that May is my apathy month: a time when my motivation plummets, my mood darkens, and I become more introverted than usual.\u003c/p\u003e\n\u003cp\u003eUnfortunately, I was right. Over the past 30 days, I have felt myself slowly sliding to the bottom of my emotional pit. Moreover, my \u0026ldquo;preventive care trip\u0026rdquo; to Ferrara got canceled \u003ca href=\"https://en.wikipedia.org/wiki/2023_Emilia-Romagna_floods\"\u003edue to the extensive and destructive floods in the region\u003c/a\u003e, so I had no other option but to accept the sliding.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/05":[{"title":"Polymorphic Class Serialization in Spring and MongoDB","url":"https://www.davideaversa.it/blog/polymorphic-class-serialization-spring-mongodb/","date":"2023-05-16","summary":"I was recently faced with the perplexing problem of making Spring and MongoDB serialize/deserialize a polymorphic class. Initially, it seemed like a simple task, but it proved to be more complicated than anticipated. Allow me to share my solution.","tags":["spring","kotlin","mongodb"]},{"title":"In Memory of Lotus Organizer","url":"https://www.davideaversa.it/blog/in-memory-lotus-organizer/","date":"2023-05-08","summary":"I stumbled upon an old screenshot of my favorite piece of software as a kid: Lotus Organizer. Therefore, I decided to share some old memories.","tags":["lotus organizer","software"]},{"title":"The Changelog – April 2023","url":"https://www.davideaversa.it/blog/changelog-april-2023/","date":"2023-05-01","summary":"\u003cp\u003eThey say that to err is human, but to persist is diabolical. If that\u0026rsquo;s the case, then I must be the devil himself.\u003c/p\u003e\n\u003cp\u003eApril has been grossly underwhelming; I had little motivation, energy, and found myself in a persistent state of low-level anxiety.\u003c/p\u003e\n\u003cp\u003eUnfortunately, this has dramatically impacted my ability to mentally organize my things. For example, I usually follow a seasonal schedule where I reevaluate the previous three months at the end of each quarter to see what worked and what didn\u0026rsquo;t, and plan for the next quarter. It\u0026rsquo;s kinda like having a \u0026ldquo;new year\u0026rdquo; every 12 weeks.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/04":[{"title":"The Changelog – March 2023","url":"https://www.davideaversa.it/blog/changelog-march-2023/","date":"2023-04-02","summary":"\u003cp\u003eThis damn month. It went fast. It went weird. It went backward but also kinda forward. So it went technically sideways, in the Cambridge Dictionary sense of \u0026ldquo;something went wrong or didn’t go as planned,\u0026rdquo; but also in the more precise feeling that I don\u0026rsquo;t know if I made any progress on anything or not.\u003c/p\u003e\n\u003cp\u003eWith a quick statistical exploration of my diary, \u0026ldquo;kitchen\u0026rdquo; was the third most used word, followed only by \u0026ldquo;things\u0026rdquo; and \u0026ldquo;do.\u0026rdquo; I don\u0026rsquo;t need GPT-4. Even this stupidly simple stat nails the two main issues this month: finding it very hard to do anything and fighting with my damn kitchen.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/03":[{"title":"The Changelog – February 2023","url":"https://www.davideaversa.it/blog/changelog-february-2023/","date":"2023-03-03","summary":"\u003cp\u003eThere is a little trick I find helpful to get unstuck. Take the one thing you would like to do. Take the smallest related activity that you would consider a goal. Divide that effort by ten.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eI wanted to actively come back to fiction writing for a long time\u003c/strong\u003e, but I never managed to get myself to do anything in that regard. So this month, I followed my own advice and asked myself to write for 30 minutes three days a week. It is really nothing. But it worked, and I wrote the first 2000 words of fiction in a long time. Not much, but still 2000 more words than in the previous 13 months. And even if I continue with this laughable average, I will still have a complete novel in 1 year. Not bad for \u0026ldquo;getting unstuck.\u0026rdquo;\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/02":[{"title":"Mastodon Revisited","url":"https://www.davideaversa.it/blog/mastodon-revisited/","date":"2023-02-15","summary":"A couple of years ago, I wrote critically about Mastodon. Now, with Twitter pluging into a disgusting \u003cem\u003eshittification\u003c/em\u003e, I was exiled on Mastodon. Let\u0026rsquo;s see where and how my opinion on the Don changed in the last month.","tags":["mastodon","activitypub"]},{"title":"The Changelog – January 2023","url":"https://www.davideaversa.it/blog/changelog-january-2023/","date":"2023-02-01","summary":"\u003cp\u003eThe first month of the year is always a month of change. However, the mistake is to make it a month of \u003cem\u003edrastic change\u003c/em\u003e. First, for once, the months start with the New Year\u0026rsquo;s Eve celebrations hangover, so we are already set up for failure. Second, drastic changes are doomed to failure anyway, so we should not put all our hopes on the line with bold new years resolutions.\u003c/p\u003e\n\u003cp\u003eIs this a good reason to give up? Absolutely not. But if we want to build a tower, we must prepare the terrain first. This is what January is for: not for tracking down goals but for preparing ourselves to veer the boat in the right direction.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2023/01":[{"title":"The books I read in 2022","url":"https://www.davideaversa.it/blog/books-read-2022/","date":"2023-01-12","summary":"\u003cp\u003eI believe nothing describes a person better than looking at the books they read. If that list is empty, you already know that you should reconsider that human interaction (unless, of course, there are good, valid reasons). But if that list is not empty, we can also know what kind of person they are.\u003c/p\u003e\n\u003cp\u003eSo what this list tells about me?\u003c/p\u003e\n\u003cp\u003eFor one, it says that I am a bit disappointed. I ended the year with only 28 books: three less than 2021, even if there are more short books. So, I should look back and see what didn\u0026rsquo;t work out. For instance, I started too many books in parallel. Another thing is that this tragically eventful year has deeply distracted me. Finally, I only read 7 fiction books (last year, they were 17). 2 of these 7 were really boring bricks that slowed me down \u003cstrong\u003ea lot.\u003c/strong\u003e The lesson is that I should learn how to drop a book that is draining the life out of me.\u003c/p\u003e","tags":["books"]},{"title":"The Changelog – December 2022","url":"https://www.davideaversa.it/blog/changelog-december-2022/","date":"2023-01-01","summary":"\u003cp\u003eOh, December. You beautiful cozy lazy month. It is the month in which I delude that I can make 10000 different things, but, instead, I spend all my time reading and being with my family. Not a bad thing to do, don\u0026rsquo;t you agree?\u003c/p\u003e\n\u003cp\u003eDecember is also when winter begins. People see winter as a gloomy season, but I see it as the season of rest. If you look around, winter is when Nature goes to rest. Some animals go into hibernation, plants look dead, and sprouts and seeds lie sleeping under the snow. Winter is when Nature takes it slow.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame","board games"]}],"2022/12":[{"title":"The Changelog – November 2022","url":"https://www.davideaversa.it/blog/changelog-november-2022/","date":"2022-12-01","summary":"\u003cp\u003eThis November has been weird. If I had to describe it, my first instinct would be to say that it felt like slipped time. After all, my emotional status has been all over the place, with moments of genuine excitement and moments of dread.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eNovember is usually a bad month.\u003c/strong\u003e It is always full of bad memories and events. Even this year, November hit again early in the month: once again, I had to attend a November funeral. So I was ready to accept another black month in which the best I could do was to collect the pieces.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame","board games","steam deck"]}],"2022/11":[{"title":"Utility-based AI for Games","url":"https://www.davideaversa.it/blog/utility-based-ai/","date":"2022-11-25","summary":"\u003cp\u003e\u003cstrong\u003eFinite-State Machines (FSM)\u003c/strong\u003e are the bread-and-butter of game AI due to their simplicity (both in implementation and theory) and effectiveness. As such, FSMs are the topic of many tutorials and guides. Unfortunately, most of them focus on the \u003cem\u003eStates\u003c/em\u003e part of FSM. After all, they are called Finite-\u003cstrong\u003eState Machines\u003c/strong\u003e, so you expect that states are the critical part.\u003c/p\u003e\n\u003cp\u003eWell, no. The critical part is the other: \u003cstrong\u003etransitions\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eTransitions can make or break your AI independently of how carefully crafted the states are. In other words, \u003cstrong\u003eintelligence is in change\u003c/strong\u003e, and the element of \u003cem\u003echange\u003c/em\u003e in an FSM is represented by transitions.\u003c/p\u003e","tags":["finite state machine","ai","ai for games","utility-based ai"]},{"title":"The Changelog – October 2022","url":"https://www.davideaversa.it/blog/changelog-october-2022/","date":"2022-11-01","summary":"\u003cp\u003eIt was an October that didn\u0026rsquo;t look like October: the maximum temperatures never went under 25 °C; it was almost always sunny, and everything looked more like spring than autumn.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eThis threw me off a bit.\u003c/strong\u003e At the moment I am writing, it is Halloween, yet I do not really feel it. Well, I didn\u0026rsquo;t feel the October vibes for the other part of the month, either. So I will probably call this month \u003cem\u003eSeptember 2.0\u003c/em\u003e, hope for a more traditional November (or not; I am okay with mild temperatures this year), and move on.\u003c/p\u003e","tags":["changelog","music","books","tv series","videogame"]}],"2022/10":[{"title":"“Matteo squashed a lizard and Davide cried”","url":"https://www.davideaversa.it/blog/matteo-squashed-lizard-davide-cried/","date":"2022-10-05","summary":"\u003cp\u003eIn one of my earliest memories, on a warm sunny morning, I am in my school backyard with my teachers and schoolmates. Something catch my attention. On a sidewalk, I see a small, motionless lizard. Maybe it is injured, or perhaps it is already dead (it is in the nature of childhood memories to be uncertain). What I know is that I bend over it in awe: “There is a lizard!” I say to my friends with the typical enthusiasm for the small things of a six-year-old.\u003c/p\u003e","tags":["philosophy","life"]},{"title":"The Changelog – September 2022","url":"https://www.davideaversa.it/blog/changelog-september-2022/","date":"2022-10-01","summary":"\u003cp\u003eSeptember is the best month. It is the \u0026ldquo;back to school\u0026rdquo; month. The time when you sprint into a new season of life. Only that, this time, \u003cstrong\u003eI think I forgot about that\u003c/strong\u003e. I still have a task I put on my to-do list on September 1st. It is about my regular planning and organization for the new season. I usually need to do that in the first week of September. But it is still there at the time of writing (September 28th).\u003c/p\u003e","tags":["changelog","music","books","tv series"]}],"2022/09":[{"title":"The Changelog – August 2022","url":"https://www.davideaversa.it/blog/changelog-august-2022/","date":"2022-09-01","summary":"\u003cp\u003eAugust was my summer vacation month. Therefore I had more time on my hand, some of which had been utterly wasted. In general, though, I think I had a good month of new activities, a weekend in Tuscany, friendly human interactions, and a good chunk of consumed media (I put a big dent in my extra-large-neverending watch/read/playlist).\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ve also finally updated this blog with an extensive article. The funny thing is that it was not any of my \u0026ldquo;currently in draft\u0026rdquo; articles. Instead, I tried to intervene in a bit of drama between the artist community, the recent progress of Computational Creativity, and the state of the art in \u0026ldquo;AI-Generated Images.\u0026rdquo; So if you don\u0026rsquo;t know what I am talking about, but if you like AI, are an artist, or simply want a freakout-free guide to \u0026ldquo;AI Artists,\u0026rdquo; \u003ca href=\"https://www.davideaversa.it/blog/freakout-free-guide-generative-ai/\"\u003eyou are the perfect audience for my article\u003c/a\u003e.\u003c/p\u003e","tags":["changelog","music","books","tv series"]}],"2022/08":[{"title":"The Freakout-Free Guide to Generative AI","url":"https://www.davideaversa.it/blog/freakout-free-guide-generative-ai/","date":"2022-08-24","summary":"I saw a bit of a heated debate around generative AI and AI art. So this is my \u0026ldquo;guide\u0026rdquo; for the general public, where I try to answer some common questions. What is generative AI? How does it work? What are its problems? What are their advantages? Do we all die because of it? (no).","tags":["artificial intelligence","computational creativity","generative ai","art"]},{"title":"The Changelog – July 2022","url":"https://www.davideaversa.it/blog/changelog-july-2022/","date":"2022-08-01","summary":"\u003cp\u003eEvery time a new month begins, I start looking for something different to do. Something that would create a memorable milestone in the journey of life. Unfortunately, when I reach the end of the month, I realize that I often fail at this simple goal. It is not easy to break the routine and create something memorable every 30 days.\u003c/p\u003e\n\u003cp\u003eBut July was not one of those months. In fact, when it started, I was sitting at a beach bar in \u003cstrong\u003eAttica\u003c/strong\u003e, \u003cstrong\u003eGreece\u003c/strong\u003e, looking at the moon reflecting on the nigh sea after the \u003cstrong\u003efirst day of the company retreat\u003c/strong\u003e (to be precise, the first retreat after the pandemic pause).\u003c/p\u003e","tags":["changelog","music","books"]}],"2022/06":[{"title":"The Changelog – June 2022","url":"https://www.davideaversa.it/blog/changelog-june-2022/","date":"2022-06-28","summary":"\u003cp\u003eThis issue came a bit earlier. In fact, tomorrow I\u0026rsquo;ll be traveling to Athens for work (and fun, I hope), and I\u0026rsquo;ll be back on July 3rd. So I think it is better to release earlier than late and leave the traveling part for next month.\u003c/p\u003e\n\u003cp\u003eBut let\u0026rsquo;s come back to the chase: June. June started as May ended: in an emotional disaster. Fortunately, though, things got better along the way. If it weren\u0026rsquo;t for my usual travel-induced anxiety, I\u0026rsquo;d be in a very good spot.\u003c/p\u003e","tags":["changelog"]},{"title":"The Changelog – May 2022","url":"https://www.davideaversa.it/blog/changelog-may-2022/","date":"2022-06-01","summary":"\u003cp\u003e\u003cem\u003eWhy am I starting again with the monthly changelogs?\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eI constantly have the burning desire to have a place to write something completely free. My blog is mostly about technology, and my Medium publication is about political philosophy, but what about everything else? In the last two years, my interests shifted, and while I am definitively still working in tech fields, and I will still write about it, I missed having a small place where to explore different things that are not big enough to be worth an entire article or, even worse, a separate blog.\u003c/p\u003e","tags":["changelog"]}],"2022/04":[{"title":"Unity Artificial Intelligence Programming – Fifth Edition","url":"https://www.davideaversa.it/blog/unity-artificial-intelligence-programming-5/","date":"2022-04-20","summary":"\u003cp\u003eHey, everyone. As you know, I am not particularly present recently (I need to find out how to handle this blog while my interests spread out on non-technical stuff, but this is something for another time).\u003c/p\u003e\n\u003cp\u003eHowever, I am back with an announcement: I have recently published the fifth edition of \u003ca href=\"https://www.packtpub.com/product/unity-artificial-intelligence-programming-fifth-edition/9781803238531\"\u003eUnity Artificial Intelligence Programming\u003c/a\u003e.\u003c/p\u003e\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u003cfigure \u003e\n  \n  \u003cdiv class=\"img-wrapper\"\u003e \n\n\n  \u003cimg\n        src=\"header\"\n        \n        \n        \n         style=\"max-width: 100%;\" /\u003e\n    \u003c/div\u003e\n  \n  \n  \n\u003c/figure\u003e\n\n\u003cp\u003eNot only have I updated the book for Unity 2022, but the book is also a \u003cstrong\u003emassive\u003c/strong\u003e improvement over the last edition in terms of code quality and consistency (and I really need to thank Kazimieras Mikelis for the extensive and detailed review). Moreover, I added a chapter on Procedural Content Generation because it is my main interest, of course.\u003c/p\u003e","tags":["personal","books","unity"]}],"2022/02":[{"title":"Julia Revisited","url":"https://www.davideaversa.it/blog/julia-revisited-2022/","date":"2022-02-17","summary":"\u003cp\u003eYears ago, I wrote that Julia failed to reach any reasonable expectation. At the time, development was struggling, and the language had many problems trying to achieve any meaningful momentum.\u003c/p\u003e\n\u003cp\u003eFortunately, time proved me wrong. And I am delighted I was. I am not sure what happened (as I said, I stopped following it), but the language had significant acceleration, and it finally got enough adoption and interest that it finally popped up a lot under my radar.\u003c/p\u003e","tags":["programming language","julia","advent-of-code"]}],"2022/01":[{"title":"The books I read in 2021","url":"https://www.davideaversa.it/blog/books-read-2021/","date":"2022-01-29","summary":"\u003cp\u003eLast year was an excellent year for reading. I\u0026rsquo;ve read \u003cstrong\u003e31 books\u003c/strong\u003e, totaling almost \u003cstrong\u003e10,000 pages\u003c/strong\u003e: \u003cstrong\u003e17 fiction books\u003c/strong\u003e (way more than last year), \u003cstrong\u003e13 non-fiction\u003c/strong\u003e (as a surprise, because I usually read non-fiction faster), and \u003cstrong\u003eone graphic novel\u003c/strong\u003e. Some books were unbelievable literary mistakes. Others were absolute gems that I\u0026rsquo;ll keep in my mind and heart (it is wise for the Chinese to have a single word for both: 心).\u003c/p\u003e","tags":["books"]}],"2021/08":[{"title":"Machine Consciousness is Inevitable","url":"https://www.davideaversa.it/blog/machine-consciousness-is-inevitable/","date":"2021-08-31","summary":"Can a robot become self-conscious? It looks like an interesting question, but it is not: machine consciousness is just inevitable. The true interesting questions are hidden in the details of how such consciousness will emerge and how it will look like.","tags":["artificial intelligence","philosophy","robot"]},{"title":"The Problem with Mastodon and the Fediverse","url":"https://www.davideaversa.it/blog/problem-mastodon-fediverse/","date":"2021-08-22","summary":"I tried to jump on the Mastodon train several times; however, I was never really convinced by it. To be honest, I was never really interested in any open-source clone of popular commercial social networks. And like me, 99% of the non-technical people I know. Why? A quick answer for a bloody hot August.","tags":["mastodon","internet","fediverse","opensource"]}],"2021/07":[{"title":"Use Obsidian's Plugin Responsibly","url":"https://www.davideaversa.it/blog/use-obsidian-plugin-responsibly/","date":"2021-07-25","summary":"This is just a reminder for an undesirable side effect of some Obsidian\u0026rsquo;s Plugin: they make your notes \u003cem\u003eObsidian-dependent\u003c/em\u003e. Here I will describe what is the problem and how can you easily avoid it to keep your note really \u003cem\u003efutureproof\u003c/em\u003e.","tags":["workflow","obsidian","notes"]}],"2021/05":[{"title":"Exploring the Small Web","url":"https://www.davideaversa.it/blog/exploring-the-small-web/","date":"2021-05-30","summary":"I stumbled into the Small Web. A minimal barebone version of the web. It\u0026rsquo;s a place that remember me of a long gone web. It is the Small Web powered by the Gopher and Gemini protocols. Let\u0026rsquo;s see what it is and why I decided to create there a small intimate island.","tags":["gemini","internet"]},{"title":"A simple Event System in TypeScript","url":"https://www.davideaversa.it/blog/simple-event-system-typescript/","date":"2021-05-17","summary":"Events are an intuitive way to model the execution flows of applications when several modules, each one with complex lifecycles, need to synchronize with each other. In this article, I go over a very simple and minimal Event System for Typescript so that you can use it too, or understand the basic principles of existing event system packages.","tags":["typescript","events"]},{"title":"How VSCode's RestClient saved me from Postman","url":"https://www.davideaversa.it/blog/vscode-restclient-saved-me-from-postman/","date":"2021-05-11","summary":"I do not think Postman is bad (in the general sense), but it is the piece of software I hate the most that I need to use on a daily basis. Well, not anymore! I\u0026rsquo;ve recently found the perfect Visual Studio Code extension for managing APIs: RestClient.","tags":["vscode"]}],"2021/04":[{"title":"Will Zig be the \"sweet spot\" I am looking for?","url":"https://www.davideaversa.it/blog/will-zig-sweet-spot-looking-for/","date":"2021-04-15","summary":"Let’s continue our exploration of novel kinda-low-level languages. After a quick exploration of Crystal, it is time to look at another language that is constantly popping up on my sources: \u003ca href=\"https://ziglang.org/\"\u003eZig\u003c/a\u003e. It will be my new love? It will be the perfect tool I was looking for? It is the beginning of a new programming langue star? Let’s find out that together.","tags":["zig","languages"]},{"title":"Will Crystal be the \"sweet spot\" I am looking for?","url":"https://www.davideaversa.it/blog/will-crystal-sweet-spot-looking-for/","date":"2021-04-01","summary":"The Crystal programming language recently reached version 1.0. As a modern compiled language, it caught my attention. It is time to spend some time playing with it to have a better idea of its potentialities. Will this \u0026ldquo;Compiled Ruby\u0026rdquo; be the sweet spot between Python and Rust I am looking for?","tags":["crystal","languages"]}],"2021/03":[{"title":"The Grammar of Game Design","url":"https://www.davideaversa.it/blog/grammar-game-design/","date":"2021-03-19","summary":"Game Design \u003cstrong\u003eis\u003c/strong\u003e a kind of language. It has basic elements, it has rules, and we use it to express specific sensations. Therefore, as a language, it has a proper grammar with its \u003cem\u003ealphabet\u003c/em\u003e, its \u003cem\u003emorphology\u003c/em\u003e, and its \u003cem\u003esyntax\u003c/em\u003e and \u003cem\u003esemantic\u003c/em\u003e. In this article I’ll briefly try to exapand this thought.","tags":["videogames","game design"]}],"2021/02":[{"title":"The link between n-Bounded Compositions and the extended Fibonacci Sequence","url":"https://www.davideaversa.it/blog/link-bounded-compositions-extended-fibonacci-sequence/","date":"2021-02-06","summary":"During last year Advent of Code, I ended up discovering a beautiful relation between bounded integer compositions and the generalized Fibonacci sequence. Probably it is an already known relation, but the fact that it popped up in a totally unrelated problem is a remarkable example on how number theory properties may pop up in the most unexpected places.","tags":["math","number theory"]}],"2020/11":[{"title":"Hades: a case study in storytelling for roguelike games","url":"https://www.davideaversa.it/blog/hades-case-study-storytelling-roguelike-games/","date":"2020-11-23","summary":"I know, I know: everybody loves Hades, the Super Giant\u0026rsquo;s latest jewel. These days, it is impossible to read any online game magazine without reading articles about it. This game has been on everybody\u0026rsquo;s mouth since its official release on September 17th.\u003c/br\u003e\u003c/br\u003eAnd for good reasons.\u003c/br\u003e\u003c/br\u003eHades managed to raise the bar of the roguelike genre just when the genere started to become stale and boring. There are many reasons for this success but, in my opinion, Hades\u0026rsquo; greatest accomplishment is that it was able to provide a glaring example of a roguelike with a solid storytelling.","tags":["videogames","writing","roguelike","opinion"]},{"title":"Property-Based Testing in Typescript with Fast-Check","url":"https://www.davideaversa.it/blog/property-based-testing-typescript-fast-check/","date":"2020-11-06","summary":"\u003cstrong\u003eProperty-based testing\u003c/strong\u003e is probably the thing I missed the most from my time working with Haskel. It is such an elegant way of testing functionalities that it is hard to not use it. As you can imagine, I look for a Property-based testing framework in any language I have under my hands. Usually, unsuccessfully. However, in recent years I am working a lot with Typescript and, luckily, Typescript has a good property-based testing library: \u003cstrong\u003efast-check\u003c/strong\u003e.","tags":["typescript","property-based-testing","javascript"]}],"2020/10":[{"title":"How to debug a Node.js application remotely in VSCode","url":"https://www.davideaversa.it/blog/how-to-remote-debug-nodejs-vscode/","date":"2020-10-20","summary":"Debugging a remote Node.js application in VSCode is an elementary procedure. Here it is a small \u003cem\u003e\u0026ldquo;how to\u0026rdquo;\u003c/em\u003e in case you are struggling with it. A quick answer because you want a solution, not the story of my life.","tags":["node.js","vscode","debug"]},{"title":"The Trolley Cart Problem is not an AI problem","url":"https://www.davideaversa.it/blog/trolley-cart-problem-is-not-ai/","date":"2020-10-14","summary":"Every time there is a discussion on the future of AI-powered Autonomous Vehicles, somebody put the \u003cstrong\u003eTrolley Cart Problem\u003c/strong\u003e (TCP) on the table. And every time this happens, I am annoyed. However, recently, I saw some mutual followers studying AI and Computer Science talking about how TCP is a fundamental problem for the future of AI and autonomous vehicles. So I think it is time to speak it loud: \u003cstrong\u003e‌the Trolley Cart Problem is not an AI problem!\u003c/strong\u003e Let\u0026rsquo;s see why.","tags":["artificial intelligence","philosophy","ethic"]}],"2020/09":[{"title":"Five Tabletop Games for Creating Stuff","url":"https://www.davideaversa.it/blog/five-tabletop-games-creating-stuff/","date":"2020-09-22","summary":"We already know that \u003cem\u003eProcedural Content Generation\u003c/em\u003e (\u003cem\u003ePCG\u003c/em\u003e) is a masterful tool for building games. But \u003cstrong\u003ecan PGC become a game by itself?\u003c/strong\u003e This seems a silly question at first. After all, what is the purpose of generating something if we do not use it afterward?\u003c/br\u003e\u003c/br\u003eHowever, if you think that a bit more, you know that there is something else. If you are interested in PCG, you know that most enjoyment comes from the creation itself.\u003c/br\u003e\u003c/br\u003eTherefore, the question is easy: of course, that PCG can be a game! And to prove that, I am going to show you \u003cstrong\u003efive of the most beautiful examples of that I played in recent years.\u003c/strong\u003e","tags":["boardgames","pcg","maps"]},{"title":"And so you want to choose a Fantasy Console","url":"https://www.davideaversa.it/blog/how-choose-fantasy-console/","date":"2020-09-08","summary":"Making a game on a Fantasy Console is one of the best activity for any game development enthusiast. This small, curated, nostalgic “emulators” for consoles that never existed can bring you back to a simpler time when hardware was less capable and developer needed to make every bit of memory and every pixel count. \u003cbr\u003e\u003cbr\u003e There is always a reason to play with a Fantasy Console. If you are an experienced developer, Fantasy Consoles represents a good challenge. If you are a new developer, Fantasy Consoles allows you to focus on the game and on the basics of game development without being side-tracked by all the bells and whistles of modern game engines. \u003cbr\u003e\u003cbr\u003e \u003cstrong\u003eSo, how can we chose the right one?\u003c/strong\u003e","tags":["pico8","tic80","pixelvision8","fantasty console"]}],"2020/07":[{"title":"How to document a Kotlin/Spring application with Springdoc and OpenAI","url":"https://www.davideaversa.it/blog/document-kotlin-spring-application-springdoc-openapi/","date":"2020-07-22","summary":"Here we go again with a new article derived from my work notes. As you already know, I am rewriting a backend application in Kotlin and — in the process — I am improving all the horrors of legacy code I can find. In this article, we will look at one critical aspect of software development (especially for REST applications): the documentation.","tags":["kotlin","java","spring","openapi"]}],"2020/06":[{"title":"The Great Convergence of AAA Games","url":"https://www.davideaversa.it/blog/convergence-aaa-games/","date":"2020-06-29","summary":"Let\u0026rsquo;s be honest: nowadays, almost every AAA game looks the same. They are all action games with RGP elements and a crafting system and some kind of open world. It is almost like playing the same game over and over again. The latest God of War (2018) is a good example of this year-long trend in the gaming industry that I called \u003cstrong\u003eThe Convergence.\u003c/strong\u003e Let\u0026rsquo;s talk a bit about this.","tags":["videogames","design","opinion"]},{"title":"How to convert a Java/Spring project to Kotlin","url":"https://www.davideaversa.it/blog/converting-java-spring-kotlin/","date":"2020-06-18","summary":"In the last week I converted a medium-sized legacy Java/Spring codebase to Kotlin. In this article I\u0026rsquo;ll discuss the pro and the challenges I faced during this transition.","tags":["kotlin","java","spring"]}],"2020/05":[{"title":"My First Deno Experiment","url":"https://www.davideaversa.it/blog/my-first-deno-experiment/","date":"2020-05-23","summary":"This is another not-requested opinion on \u003cstrong\u003eDeno\u003c/strong\u003e! But what can I do? When I read \u0026ldquo;node replacement,\u0026rdquo; \u0026ldquo;TypeScript,\u0026rdquo; and \u0026ldquo;Rust,\u0026rdquo; I lose any inhibition. Therefore, I ported to Deno an old \u003ccode\u003enpm\u003c/code\u003e package and wrote a brief report on my experience. \u003cstrong\u003eWhat I liked? What I disliked? Will Deno be succesful in the overcrowded world of programming platforms?\u003c/strong\u003e These are my answers.","tags":["deno","Node.js","typescript","rust"]},{"title":"Overwhelmed by your workflow? Reset it.","url":"https://www.davideaversa.it/blog/overwhelmed-by-your-workflow-reset-it/","date":"2020-05-18","summary":"Productivity and organization workflows can quickly become addictive. If you like apps and all that comes with them, your workflows can snowball out of control. I run into this problem every couple of years, and until I become aware of that, I feel very frustrated. I feel like I am moving around a lot of stuff and spending many hours of my awake time producing nothing more than heat and entropy. \u003cstrong\u003eLuckily the solution is easy: do a total reset.\u003c/strong\u003e","tags":["task manager","productivity"]},{"title":"Swift announces official Windows support — maybe too late","url":"https://www.davideaversa.it/blog/swift-announces-official-windows-support/","date":"2020-05-12","summary":"Swift is a pretty language that hits a sweet, sweet spot: it is a compiled language built around LLV, it is modern, it took advantage of decades of programming language design efforts, and it is esthetically pleasing. \u003cstrong\u003eIt is the kind of language that could have taken a lot of market shares.\u003c/strong\u003e Unfortunately, official Windows support will come only with version 5.3. It may be already too late to wash away the \u0026ldquo;iOS Language\u0026rdquo; stigma.","tags":["swift","news","opinion"]},{"title":"How to Export your Kindle Highlights","url":"https://www.davideaversa.it/blog/export-kindle-highlights/","date":"2020-05-02","summary":"This is a quick article to share a very surprising and beautiful thing I discovered today: \u003cstrong\u003eit is possible to request a PDF with all your Kindle\u0026rsquo;s highlights directly from the Kindle interface\u003c/strong\u003e. How it is possible nobody told me this before!!??","tags":["kindle","how-to","notes"]}],"2020/03":[{"title":"Overview of Three Techniques for Procedural Storytelling","url":"https://www.davideaversa.it/blog/overview-procedural-storytelling/","date":"2020-03-16","summary":"Inspired by a recent paper I read this week, I decided to explain the three major “classic solutions” to the generative storytelling problem: Simulation, Planning, and Context-Free Grammars. Let\u0026rsquo;s what they are and what to choose.","tags":["artificial intelligence","procedural content generation","procedural storytelling"]},{"title":"My favorite Visual Studio Code extensions","url":"https://www.davideaversa.it/blog/visual-studio-code-favorite-extensions/","date":"2020-03-02","summary":"\u003cp\u003eVisual Studio Code is my editor of choice. I started with it because of the top-notch TypeScript integration, and then I stuck with it for all the rest (all but for big projects in languages with outstanding IDE support, such as Kotlin).\u003c/p\u003e\n\u003cp\u003eDuring the years, my extension page grew bigger and bigger; new extensions get installed, old extensions get removed. You know, the usual stuff. But during all these years, a bunch of extensions has always remained the same. They are my favorite VSCode extensions, and I am going to list them here.\u003c/p\u003e","tags":["visual studio code"]}],"2020/02":[{"title":"What makes a story a good story","url":"https://www.davideaversa.it/blog/what-makes-story-good/","date":"2020-02-24","summary":"At the beginning of January, I put my hands on a dirty cheap \u003cem\u003ePlay Station 4\u003c/em\u003e because, in the new house, I have no space for a gaming PC. Since then, I decided to make up for a bunch of games I missed in the last years starting from these two: \u003cstrong\u003eHorizon Zero Dawn\u003c/strong\u003e \u003cem\u003e(Guerrilla Games, 2017)\u003c/em\u003e and \u003cstrong\u003eThe Last of Us\u003c/strong\u003e \u003cem\u003e(Naughty Dog, 2013)\u003c/em\u003e. I approached them with diametrically opposed expectations, and in both cases, my expectations were very wrong. So I started asking myself why I was wrong and what I look for in games and narrative media.","tags":["videogames","writing","design","opinion"]}],"2020/01":[{"title":"Marginalia: Rebooting AI by Gary Marcus and Ernest Davis","url":"https://www.davideaversa.it/blog/marginalia-rebooting-ai/","date":"2020-01-25","summary":"\u003cp\u003eWith this new year, let’s try a new format. Marginalia will be a series in which I’ll share notes and comments on interesting books I read. The name is directly inspired by the old word indicating the small notes on the margins of books.\u003c/p\u003e\n\u003cp\u003eIt will be a chance to discuss my readings without the need to write a full-fledged article. I hope it will be interesting as a review of the book or as a discussion starter. So, let\u0026rsquo;s start.\u003c/p\u003e","tags":["artificial intelligence","deep learning","machine learning","books"]}],"2019/12":[{"title":"Unity Game Optimization is now available!","url":"https://www.davideaversa.it/blog/unity-game-optimization-is-out/","date":"2019-12-14","summary":"\u003cp\u003eThe new edition of \u003ca href=\"https://subscription.packtpub.com/book/game_development/9781838556518\"\u003eUnity Game Optimization\u003c/a\u003e is finally out! I already announced that in my December monthly update, but I think it is worth to spend a bit more words on it.\u003c/p\u003e","tags":["personal","books","unity"]},{"title":"December 2019 Update","url":"https://www.davideaversa.it/blog/december-2019-update/","date":"2019-12-05","summary":"\u003cp\u003eThis update is in huge delay. I am sorry, but this November, especially the last couple of weeks have been hectic and expensive. Now that I have a bit of time, I should really write this before I need to start planning the January update. 😃\u003c/p\u003e","tags":["personal","diary"]}],"2019/11":[{"title":"November 2019 Update","url":"https://www.davideaversa.it/blog/november-2019-update/","date":"2019-11-01","summary":"\u003cp\u003eWhat a horrible October; I feel I am psychologically destroyed, and I am all over the places. Fortunately, I have good news too. 👻\u003c/p\u003e","tags":["personal","diary"]}],"2019/10":[{"title":"Apple Arcade made my mobile gaming fun again","url":"https://www.davideaversa.it/blog/apple-arcane-mobile-game-fun-again/","date":"2019-10-22","summary":"\u003cp\u003eIt is about a month that I am trying \u003ca href=\"https://www.apple.com/it/apple-arcade/\"\u003eApple Arcade\u003c/a\u003e on my iPad. During this month, I realized that it made my iPad a totally legitimate gaming platform. I had zero games on my phone and my iPad; now, I have four, and two of them were meaningful experiences. In short: I had fun on a mobile platform after years.\u003c/p\u003e","tags":["apple","apple arcade","gamedev","opinion"]},{"title":"The Subscription Model Fatigue","url":"https://www.davideaversa.it/blog/subscription-model-fatigue/","date":"2019-10-15","summary":"\u003cp\u003eUnlike many, I am usually fine with the subscription model: I understand why it is useful for the developers and I think that, if priced correctly, it is not bad for the users for the vast majority of use cases. However, I often ask myself if the model will be sustainable when the big majority of the apps will be subscription-based.\u003c/p\u003e","tags":["software","subscription","opinion"]},{"title":"October 2019 Update","url":"https://www.davideaversa.it/blog/october-2019-update/","date":"2019-10-03","summary":"\u003cp\u003eSeptember has been sweet and kind to me; but also harsh and challenging. Nevertheless, it is October and under pumpkins 🎃 and ghosts 👻, I am still here for a monthly update.\u003c/p\u003e\n\u003c!-- more --\u003e\n\u003ch2 id=\"about-life\"\u003eAbout Life\u003c/h2\u003e\n\u003cp\u003eSeptember has been fun. I traveled to \u003cstrong\u003ePadua\u003c/strong\u003e for the \u003cstrong\u003eCICAP Fest\u003c/strong\u003e (a series of conferences organized by the main Italian Skeptical association), I went to a couple of nice restaurants, I completed some personal goal and I ate some Banana Pancake. 🥞\u003c/p\u003e","tags":["personal","diary"]}],"2019/09":[{"title":"September 2019 Update","url":"https://www.davideaversa.it/blog/september-2019-update/","date":"2019-09-01","summary":"\u003cp\u003eSeptember is the true “new year”. Summer vacations are usually over, and we are ready to start a new powerful working season. So why I feel more tired than before?\u003c/p\u003e","tags":["personal","diary"]}],"2019/08":[{"title":"Ranking Systems 02 - The Elo Rating System","url":"https://www.davideaversa.it/blog/ranking-system-2-elo-rating-system/","date":"2019-08-22","summary":"\u003cp\u003eAs we have said before, skill and ranking are never measured directly; instead, they are inferred from the observed performance of a player in previous matches. The idea of building an estimator based on pairwise wins and losses is quite old, but the \u003cstrong\u003eElo System\u003c/strong\u003e represents the most simple and popular implementation.\u003c/p\u003e","tags":["ranking system","elo"]},{"title":"Go is still fighting over generics. In 2019.","url":"https://www.davideaversa.it/blog/go-is-still-fighting-over-generics/","date":"2019-08-14","summary":"\u003cp\u003eI dislike Go. I dislike it \u003cstrong\u003ea lot\u003c/strong\u003e. Nevertheless, I usually do not bash on it because I am deeply convinced that people should use whatever they want and they like. Many people I respect use Go. I mean, this blog run on Hugo, that is written in Go! How could I be one of “those guys” who always bitch about what other people enjoy?\u003c/p\u003e\n\u003cp\u003eHowever, sometimes, I fall into watching discussions in the go community, and they are \u003cstrong\u003eso absurd\u003c/strong\u003e I cannot shut up. \u003c/p\u003e","tags":["go","generics","opinion"]},{"title":"August 2019 Update","url":"https://www.davideaversa.it/blog/august-2019-update/","date":"2019-08-01","summary":"\u003cp\u003eLast month, slowing down with socials and news became mandatory. I “won” Camp NaNoWriMo and but I still have the last third of the story to write. Heatwaves are everywhere.\u003c/p\u003e\n\u003cp\u003eTo hot to think and words order fine screen in! Let’s just look at this month update before I catch fire!\u003c/p\u003e","tags":["personal","diary"]}],"2019/07":[{"title":"Why I love Narration Through Discovery","url":"https://www.davideaversa.it/blog/why-love-narration-through-discovery/","date":"2019-07-25","summary":"\u003cp\u003eYesterday I was reflecting about an interesting fact: in the list of “my favorite games of all times,” the top 10 is packed with games that share all a common element. The games are:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDark Souls\u003c/li\u003e\n\u003cli\u003eDark Souls II\u003c/li\u003e\n\u003cli\u003eWell… every game of the \u003cem\u003esoulborne\u003c/em\u003e genre.\u003c/li\u003e\n\u003cli\u003eHollow Knight\u003c/li\u003e\n\u003cli\u003eThe Legend of Zelda: Breath of the Wild\u003c/li\u003e\n\u003cli\u003eAnd more.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCan you guess what they all have in common?\u003c/p\u003e\n\u003c!-- more --\u003e\n\u003cp\u003eSure, they all have a \u003cem\u003edecadent\u003c/em\u003e setting (the world is falling or is recovering after a cataclysm), but there is a way more common design element: \u003cstrong\u003enarration through discovery\u003c/strong\u003e.\u003c/p\u003e","tags":["writing","videogames","narrative","Hollow Knight","Dark Souls"]},{"title":"July 2019 Update","url":"https://www.davideaversa.it/blog/july-2019-update/","date":"2019-07-01","summary":"\u003cp\u003eThis update will be quite straightforward: July will be the month of digital retreat. Summer is not for staying still. Summer is for side projects; summer is for recharging; summer is for everything but the mindless routines of the other seasons.\u003c/p\u003e","tags":["personal","diary"]}],"2019/06":[{"title":"The Winter of Virtual Assistants","url":"https://www.davideaversa.it/blog/winter-virtual-assistants/","date":"2019-06-27","summary":"\u003cp\u003eSeven years and eight months have passed since the release of the first really popular commercial \u003cstrong\u003evirtual assistant\u003c/strong\u003e (VA).  Yet, seven years later, virtual assistants can do only marginally better.\u003c/p\u003e\n\u003cp\u003eSure, they understand better, they speak better, they have learned some new trick; but in the end, \u003cstrong\u003ethey are still a funny but useless experience\u003c/strong\u003e. After the first fun moments of experimentation when you start talking to them – that is, where you keep asking them silly jokes or dumb questions – they quickly came back to be pretty dumb object. I am pretty sure that the vast majority of user use a VA just for timers, weather and – occasionally – asking for the event on our calendar.\u003c/p\u003e","tags":["virtual assistants","alexa","siri","google assistant"]},{"title":"On Rogozhin's Universal Turing Machines","url":"https://www.davideaversa.it/blog/rogozhin-universal-turing-machines/","date":"2019-06-17","summary":"\u003cp\u003eEvery now and then, we see some headline about Turing Completeness of \u003cem\u003esomething\u003c/em\u003e. For example, \u003ca href=\"https://www.youtube.com/watch?v=7sNge0Ywz-M\"\u003eMinecraft\u003c/a\u003e or \u003ca href=\"https://docs.google.com/document/d/1b7NN-ZGpBMggiVSkSpW499MdCNCpwccL-RA9HKLZ5NU/edit\"\u003eDwarf Fortress\u003c/a\u003e, or even \u003ca href=\"http://web.mat.bham.ac.uk/R.W.Kaye/minesw/infmsw.pdf\"\u003eMinesweeper\u003c/a\u003e are famous examples of accidentally Turing complete systems.\u003c/p\u003e\n\u003cp\u003eIf you know what a Turing machine is (and you should) you will have an intuitive idea of the claim: you know that \u003cem\u003eX can compute any computable function\u003c/em\u003e. Sure; but if you stop thinking about that for a bit, it is not so intuitive \u003cstrong\u003ehow\u003c/strong\u003e we can prove that. If we think long enough, we can start understanding how X can simulate a Turing machine, but \u003cstrong\u003ehow can we be sure that we can encode a Universal Turing Machine\u003c/strong\u003e and \u003cstrong\u003ewhat is the program of a UTM and how we can prove that it is, in fact, universal?\u003c/strong\u003e\u003c/p\u003e","tags":["turing machine","computation theory","turing"]},{"title":"June 2019 Update","url":"https://www.davideaversa.it/blog/june-2019-update/","date":"2019-06-01","summary":"\u003cp\u003eMay is over. Here in Italy, it rained \u003cstrong\u003eevery day\u003c/strong\u003e. Everybody is still waiting for spring, and I am still waiting for… something. Now that summer is at the door, it is time for thinking about summer projects.\u003c/p\u003e","tags":["personal","diary"]}],"2019/05":[{"title":"Kotlin Development in VS Code","url":"https://www.davideaversa.it/blog/kotlin-development-in-vscode/","date":"2019-05-29","summary":"\u003cdiv style=\"background-color: yellow; padding: 10px; border: 1px solid #ccc;\"\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e This article has not been updated in the last 2 years. The information may be outdated.\n\u003c/div\u003e\n\n\n\u003cp\u003eKotlin is a really sweet language. It is the perfect thing in between a \u003cem\u003e“super-powerful and but difficult language”\u003c/em\u003e like Rust or Modern C++, and a \u003cem\u003e“super-easy but that seems to be designed in the 80s”\u003c/em\u003e like Go. With the upcoming release on Kotlin Native, then, you can even ditch the JVM!\u003c/p\u003e\n\u003cp\u003eHowever, while \u003cstrong\u003eIntelliJ\u003c/strong\u003e is a great IDE, often I do not like to rely on big IDEs — especially when VSCode works perfectly well for 90% of my use cases. Therefore, it is time to see if and how I can use Kotlin in VS Code (and see what is missing).\u003c/p\u003e","tags":["kotlin","vscode","editor"]},{"title":"Ranking Systems 01 - What is Skill","url":"https://www.davideaversa.it/blog/ranking-system-1-what-is-skill/","date":"2019-05-17","summary":"\u003cp\u003eA \u003cstrong\u003eRanking Systems\u003c/strong\u003e is a core element of every competitive game. Every game in which a player plays against another player need to have some way to rank them and compare the relative skill of each other. It happens for video games, but also sport (e.g., the \u003ca href=\"https://www.fifa.com/fifa-world-ranking/ranking-table/men/\"\u003eFIFA ranking\u003c/a\u003e for football) or other games (e.g., \u003ca href=\"https://ratings.fide.com\"\u003eFIDE Chess Ranking\u003c/a\u003e). Comparing stuff is in the human nature.\u003c/p\u003e","tags":["ranking system"]},{"title":"May 2019 Update","url":"https://www.davideaversa.it/blog/may-2019-update/","date":"2019-05-01","summary":"\u003cp\u003eApril has been strange. It has been a month of festivities, rain, and food: a lot of it. But it has also been a month that felt very fast and yet swamped. I did a lot in April, and however it felt so dumb.\u003c/p\u003e","tags":["personal","diary"]}],"2019/04":[{"title":"Five game design flaws of Quidditch and how to fix them","url":"https://www.davideaversa.it/blog/five-game-design-flaws-quidditch/","date":"2019-04-20","summary":"\u003cp\u003eI am re-reading Harry Potter for the \u003cem\u003en-th\u003c/em\u003e time. Even it Rowling if trying hard to make me hate it, Harry Potter \u003cem\u003eheptology\u003c/em\u003e still have a special place in my hearth. However, there is something I have \u003cem\u003ealways\u003c/em\u003e hated: Quidditch. It never made sense to me and I always found reading the Quidditch parts very boring. It looks like a game invented by someone who does not know a lot about sports and games.\u003c/p\u003e\n\u003cp\u003eReading those parts for the n-th times made me realize that Quidditch may be a good way to showcase common rookie mistakes done by people approaching game-design for the first time (and it also provide meaning for my struggle). So, that’s what we will do today!\u003c/p\u003e","tags":["gamedesign"]},{"title":"Boardgames may be good for your mental health","url":"https://www.davideaversa.it/blog/boardgames-may-be-good-for-your-mental-health/","date":"2019-04-11","summary":"\u003cp\u003eAs developers — especially game developers — we are naturally attracted to digital games: after all, video games are what we do; right? We are immersed in that world, we thrive for it, we learn from it, we discuss it. Because of that, we tend to forget physical games; in particular boardgames. However, boardgames may be much more than a simple alternative to multiplayer video game; they may be the best defense against mental health problems.\u003c/p\u003e","tags":["personal","mental health","developer"]},{"title":"April 2019 Update","url":"https://www.davideaversa.it/blog/april-2019-update/","date":"2019-04-02","summary":"\u003cp\u003eLuck is not on my side. I went to Milan for business, I\u0026rsquo;ve got the flu and stayed in the hotel room for the entire week. Is this a glorious waste of time and money? Probably. However, \u003ca href=\"https://www.goodreads.com/book/show/100158.The_Luck_Factor\"\u003eluck is a matter of attitude.\u003c/a\u003e So I have to think to this event as an important opportunity for reflection. (Yeah, I know\u0026hellip;)\u003c/p\u003e","tags":["personal","diary"]}],"2019/03":[{"title":"Game Design: Gathering Quests Sucks","url":"https://www.davideaversa.it/blog/gathering-quests-sucks/","date":"2019-03-13","summary":"\u003cp\u003eSome years ago I was playing one of those big AAA games, an epic RPG saga, a staple of single player games. While I was leading my army against the forces of evil, in one of the first outposts I meet a guy with a quest. What an epic quest it will ever be? What dangerous task requires the intervention of an epic hero?\u003c/p\u003e\n\u003cp\u003e\u0026ldquo;Collect 10 herbs.”\u003c/p\u003e","tags":["gamedesign","quests"]},{"title":"March 2019 Update","url":"https://www.davideaversa.it/blog/march-2019-update/","date":"2019-03-08","summary":"\u003cp\u003eThis month I am a bit late; I have good reasons! A lot of things happened in between the end of February and the begin of March. So, it is better not to lose more time.\u003c/p\u003e","tags":["personal","diary"]}],"2019/02":[{"title":"The time I forgot how to relax","url":"https://www.davideaversa.it/blog/time-forgot-how-relax/","date":"2019-02-18","summary":"\u003cp\u003e\u003cstrong\u003eIt was the summer of 2018.\u003c/strong\u003e I was a bit burnt out by a mix of anxiety, work and a bloody hot week. So, I decided to go to my parent\u0026rsquo;s mountain house. The plan was straightforward: go there, disconnect from the world, write fiction, read books, do long walks in nature. I wanted to do the things I used to do a long time ago when life was breezy :D.\u003c/p\u003e\n\u003cp\u003eHowever, after just one day, I found myself doing the same things I usually do at home: checking news, looking for interesting, reading opinions, checking Twitter and so on. It was then that: \u003cstrong\u003eI did not know how to relax anymore. I did not know how to be creative anymore.\u003c/strong\u003e\u003c/p\u003e","tags":["personal","time management","society","social media"]}],"2019/01":[{"title":"February 2019 Update","url":"https://www.davideaversa.it/blog/february-2019-update/","date":"2019-01-31","summary":"\u003cp\u003eHere we are again on this monthly update in which I talk about everything and nothing — a small summary of what I am doing, arranging and brewing, both on tech than in life.\u003c/p\u003e","tags":["personal","diary"]},{"title":"Small introduction to Random Walking","url":"https://www.davideaversa.it/blog/intro-random-walking/","date":"2019-01-17","summary":"\u003cp\u003e\u003cstrong\u003eRandom Walking\u003c/strong\u003e is a handy technique to have in your gamdev toolbelt and - despite the name - it is most useful for everything \u003cem\u003ebut\u003c/em\u003e actual walking. With random walking, we define the output of a process that can be described sequence of random steps. The main difference with a random sequence is that each new value will be statistically near the previous one. Imagine a gold price chart and assume that the current cost is 10€ for 1g of gold. We cannot guess what will be the price in one hour but we can be sure that it will be around 10€ per gram, maybe 9.5€, maybe 10.5€. What is certain, is that a sudden drop to 1€ per gram would be deeply unlikely.\u003c/p\u003e\n\u003cp\u003eIn this article, we will talk briefly about random walking and its ability to simulate many real-world processes such as resources prices, temperature, floating objects position over time, and much more.\u003c/p\u003e","tags":["random walking","game design"]}],"2018/04":[{"title":"Quick Look at F# in Unity","url":"https://www.davideaversa.it/blog/quick-look-at-f-in-unity/","date":"2018-04-26","summary":"\u003cp\u003eI am a functional-oriented developer. I have a bit of expertise in game development, especially in Unity 3D. It comes naturally that I am interested in the obvious link between the two: \u003cstrong\u003eF#\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eF# is a functional language of the ML family born in the Microsoft Research and now developed by the \u003ca href=\"http://fsharp.org/\"\u003eF# Software Foundation\u003c/a\u003e. Of course, F# run on the .NET framework, the same as C#, the language used by Unity3D. It is clear, then, that we could use F# in Unity. And, in fact, we can with moderate easiness.\u003c/p\u003e\n\u003cp\u003eShould we? How easy is that? answering these questions is the goal of this article.\u003c/p\u003e","tags":["fsharp","unity"]},{"title":"My take on the reproducibility of academic papers","url":"https://www.davideaversa.it/blog/on-reproducibility-academic-papers/","date":"2018-04-22","summary":"\u003cp\u003eIn these days I am reviewing CIG papers. At the moment, I am not active in academia, but I enjoy being around in the community. Even if only with this “simple” tasks.\u003c/p\u003e\n\u003cp\u003eThis, however, makes me think about the state of scientific work in academia. At least in the computer science field. Something bothered me during my Ph.D. and I am sure it is related to that. (\u003cem\u003eNote: I am talking about what I know, that is, the computer science and AI community)\u003c/em\u003e In general, researchers are evaluated on the number of publications. The number of publications is a proxy variable for measuring “quality”. Unfortunately, researchers know that and started to game the system. They try to publish more and to do that they need to lower the “quality” of their work. Because the medium used to communicate your work is a plain PFD file, the obvious way to cut work is to cut the implementation part.\u003c/p\u003e","tags":["computer science","jupyter","papers"]},{"title":"[Link] Go: the Good, the Bad and the Ugly","url":"https://www.davideaversa.it/blog/link-go-the-good-the-bad-and-the-ugly/","date":"2018-04-13","summary":"\u003cp\u003eMy opinion is that talking \u003cstrong\u003eabout\u003c/strong\u003e languages is usually a very unproductive use of time. If these discussions are just cat fights, then it is even worse. Unless you are a language designer, you are writing a language or study a language, you should just use a language and nobody should care.\u003c/p\u003e\n\u003cp\u003eBut good articles on language pro and cons are always nice. They may be helpful to choose the right tool for the problem. For this reason I link a good article on Go. And that\u0026rsquo;s the last time I\u0026rsquo;ll talk about Go.\u003c/p\u003e","tags":null}],"2018/03":[{"title":"Game Design: Taxonomy of Fishing Mini-games","url":"https://www.davideaversa.it/blog/game-design-taxonomy-fishing-mini-games/","date":"2018-03-24","summary":"\u003cp\u003eFishing is probably the most common mini-game in gaming history. Before I started working on this article,  I never realized how many games include a fishing as mini-game. The list is huge. Fishing is everywhere. It seems that it is not possible to have a game without the possibility for character to have a relaxing time fishing in a pond.\u003c/p\u003e\n\u003cp\u003eEverybody loves fishing! At least in games. We can imagine a deep reason for that. There must be something that attract designers, gamers and human in general to the ancient art of fishing. However, for the time being, we are not interested in this question. Instead, we want to explore the huge design space of “fishing games”.\u003c/p\u003e\n\u003cp\u003eIn fact, the action of fishing has been dissected for decades by game designer. It is fascinating to see how many implementations exist for the same real-life action. So, it is time to see what they produced, what are the possibilities and how we can do something new in this domain.\u003c/p\u003e","tags":["fable","fishing","gamedesign","shovel knight","stardew valley","zelda"]}],"2018/02":[{"title":"The State of Game Development in Rust","url":"https://www.davideaversa.it/blog/state-game-development-rust/","date":"2018-02-26","summary":"\u003cp\u003eGame Development is one of the fields in which Rust can gain a lot of traction. As a modern compiled language with performances comparable to C++, Rust can finally free us from the tyranny of C++ bloated feature set, hard-to-link dependencies, and header/implementation file double-madness (I am obviously exaggerating, btw).\u003c/p\u003e\n\u003cp\u003eHowever, if this freedom arrive, it will be a very slow process. To make it slower, the feature of memory safety in videogames is not a huge priority compared to the ability to quickly prototype. The borrow-checker and the strict compiler are an obstacle in this regard. On the other hand, memory safety also means easier multi-threading. And this is sweet!\u003c/p\u003e\n\u003cp\u003eFortunately, the annoyances of borrow-checker will get less in the way while people becomes more confident with the language, and while tooling gets better and better. I am confident we may see Rust \u003cspan id=\"result_box\" class=\"short_text\" lang=\"en\"\u003e\u003cspan class=\"\"\u003ecarve out its space in this domain.\u003c/span\u003e\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003eBut this is the future. What about now?\u003c/p\u003e","tags":["amethist","gamedev","ggez","piston","rust"]},{"title":"MovingAI pathfinding benchmark parser in Rust","url":"https://www.davideaversa.it/blog/movingai-pathfinding-benchmark-parser-rust/","date":"2018-02-16","summary":"\u003cp\u003eYou know I worked a lot with pathfinding. In academia, the \u003ca href=\"https://movingai.com/benchmarks/\"\u003eMovingAI benchmark\u003c/a\u003e created by the \u003ca href=\"http://www.movingai.com/\"\u003eMovingAI Lab\u003c/a\u003e of the University of Denver is a must for benchmarking pathfinding algorithms. It includes synthetic maps and maps from commercial videogames.\u003c/p\u003e\n\u003cp\u003eParsing the benchmark data, the maps, creating the map data structure and more, is one of the most boring thing I needed to do for testing my algorithms. For this reason, I think a common library for working with the maps specifications it is a must.\u003c/p\u003e","tags":["movingai","pathfinding","rust"]},{"title":"Choosing between Behavior Tree and GOAP (Planning)","url":"https://www.davideaversa.it/blog/choosing-behavior-tree-goap-planning/","date":"2018-02-13","summary":"\u003cp\u003eI would like to expand \u003ca href=\"https://www.reddit.com/r/gamedesign/comments/7wopez/im_looking_for_resources_on_goap_ai_system_design/\"\u003ethe answer I gave on /r/gamedesign\u003c/a\u003e some days ago. The main point of the question was: how can I decide if it \u0026ldquo;better\u0026rdquo; to implement the decision-making layer of our game AI with Behavior Trees (BTs) or with more \u003cem\u003eadvanced\u003c/em\u003e plan-based techniques such as \u003ca href=\"https://web.archive.org/web/20230603190318/http://alumni.media.mit.edu/~jorkin/goap.html\"\u003eGoal Oriented Action Planning (GOAP)\u003c/a\u003e or \u003ca href=\"http://www.cs.umd.edu/projects/shop/\"\u003eSimple Hierarchical Ordered Planner (SHOP)\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"first-consideration-this-is-not-a-technical-problem\"\u003eFirst consideration: this is not a technical problem\u003c/h2\u003e\n\u003cp\u003eThe first thing to know is that writing game AI is not a race for the best technology. Instead, it is just about choosing the right tool for serving the gameplay as well as possible. So, there is no urgency to select the most advanced algorithm. You need to choose the simplest one that is good enough for your game. Remember \u003cem\u003ePac-Man\u003c/em\u003e. \u003cstrong\u003eThe AI of Pac-Man is still utterly challenging, and yet it is exceptionally straightforward.\u003c/strong\u003e\u003c/p\u003e","tags":["behavior trees","game design","goap","planning"]},{"title":"GameDesign Math: RPG Level-based Progression","url":"https://www.davideaversa.it/blog/gamedesign-math-rpg-level-based-progression/","date":"2018-02-03","summary":"\u003cp\u003eLevel-based progression is an extremely popular way of providing the player with the feeling of “getting stronger.” The system is born with \u003ca href=\"https://en.wikipedia.org/wiki/Role-playing_game\"\u003eRole-Playing Games\u003c/a\u003e (RPG), but it is nowadays embedded in \u003cstrong\u003epractically every game\u003c/strong\u003e; some more, some less. Even if it is entirely possible to provide progression feeling without levels and experience points, level-based progression is natural, direct, and linear, and it fits well in many (too many?) game genres.\u003c/p\u003e\n\u003cp\u003eHowever, not every experience-level progression is the same, and it is essential to design designing a fun system. Many games do that without much thinking: they just slap experience points and level, and that’s it. The general idea is that the more is your level, the more experience you need to advance to the next one. This is true, but it is just a small part of the design. In fact, you \u003cem\u003emust\u003c/em\u003e keep in mind the effect of any gameplay element on the player, and you must be sure that what you do produces the emotion you want to convey.\u003c/p\u003e","tags":["game design","role-play games"]}],"2018/01":[{"title":"Small rant about \"blockchain\" overuse","url":"https://www.davideaversa.it/blog/small-rant-blockchain-overuse/","date":"2018-01-26","summary":"\u003cp\u003eA lot of startups are using \u0026ldquo;blockchain\u0026rdquo; as a replacement hyped word for \u0026ldquo;distributed database\u0026rdquo;. Well, a blockchain is the most inefficient and slow \u0026ldquo;distributed database\u0026rdquo; ever created. Blockchain strength is not in being a database! Stop doing that!\u003c/p\u003e\n\u003cp\u003eThe blockchain power is in avoiding divergent transactions, and guarantee a not falsifiable and immutable history. That is, no node in the system can alter the past of the chain. That\u0026rsquo;s it. They are huge and specific problems.\u003c/p\u003e","tags":["blockchain"]},{"title":"How to add a logo in Rust documentation","url":"https://www.davideaversa.it/blog/how-to-add-a-logo-in-rust-documentation/","date":"2018-01-25","summary":"\u003cdiv style=\"background-color: yellow; padding: 10px; border: 1px solid #ccc;\"\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e This article has not been updated in the last 2 years. The information may be outdated.\n\u003c/div\u003e\n\n\n\u003cp\u003eOne of the feature I like the most on Rust is automatic documentation. Documentation is a pillar in language ergonomic, and I love that Rust spend so much time into making documentation and documenting code a much pleasant experience.\u003c/p\u003e\n\u003cp\u003eRust autogenerated documentation (with \u003ccode\u003ecargo doc\u003c/code\u003e) looks good, every crate on \u003ca href=\"https://crates.io\"\u003ecrates.io\u003c/a\u003e get its documentation published on \u003ca href=\"https://docs.rs/\"\u003edocs.rs\u003c/a\u003e, and, most important, \u003cstrong\u003eevery code example in the code is compiled and run as a \u0026ldquo;unit test\u0026rdquo; making sure that all the examples are up-to date!\u003c/strong\u003e\u003c/p\u003e","tags":["documentation","how-to","rust"]},{"title":"Questions about Deep Learning and the nature of knowledge","url":"https://www.davideaversa.it/blog/questions-about-deep-learning-and-the-nature-of-knowledge/","date":"2018-01-21","summary":"\u003cp\u003eIf there is something that can be assumed as a fact in the AI and Machine Learning domain is that the last years had been dominated by \u003ca href=\"https://en.wikipedia.org/wiki/Deep_learning\"\u003eDeep Learning\u003c/a\u003e and other Neural Network based techniques. When I say dominated, I mean that it looks like the only way to achieve something in Machine Learning and it is absorbing the great part of AI enthusiasts’ energy and attention.\u003c/p\u003e\n\u003cp\u003eThis is indubitably a good thing. Having a strong AI technique that can solve so many hard challenges is a huge step forward for humanity. However, how everything in life, Deep Learning, despite being highly successful in some application, carries with it several limitations to that, in other applications, makes the use of Deep Learning unfeasible or even dangerous.\u003c/p\u003e","tags":["deep learning","knowledge","machine learning"]}],"2017/12":[{"title":"The Most Promising Programming Languages for 2018","url":"https://www.davideaversa.it/blog/the-most-promising-programming-languages-for-2018/","date":"2017-12-31","summary":"\u003cp\u003eThis is the time of the year in which I propose 5 emerging/new languages that you should keep an eye on the next year. I’ve done it \u003ca href=\"/2016/12/promising-programming-languages-2017/\"\u003elast year\u003c/a\u003e, and the \u003ca href=\"/2015/12/the-most-promising-languages-of-2016/\"\u003eyear before\u003c/a\u003e, and \u003ca href=\"/2015/01/the-most-promising-languages-of-2015-part-1/\"\u003ethe year before that\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eThis year, however, I am not in the mood of doing it. There are several reasons why. \u003cstrong\u003eThe first one is that this year there have not been a lot of movement on the new programming languages.\u003c/strong\u003e I am sure there are a lot, but no one got enough attention to make into a list. Therefore, I am concerned that I will just starting to repeat myself talking about the same stuff.\u003c/p\u003e","tags":["progamming language"]},{"title":"Preserving a Cryptography book from 1897","url":"https://www.davideaversa.it/blog/preserving-cryptography-book-1897/","date":"2017-12-10","summary":"\u003cp\u003eSome time ago I found on my grandma\u0026rsquo;s house an old Italian book on cryptography from 1897. Why a 120 years old book on cryptography was on my grandma house, is a mystery. I\u0026rsquo;d like to think that some grand-grand-parent was a late 19th century hacker. Anyway.\u003c/p\u003e\n\u003cp\u003eThe book title is \u003cstrong\u003e\u0026ldquo;Crittografia ossia l\u0026rsquo;arte di cifrare e decifrare le corrispondenze segrete\u0026rdquo;\u003c/strong\u003e of \u003cstrong\u003eCount Luigi Gioppi of Turkheim\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eWell, I don\u0026rsquo;t know if this book is hard to find. In any way, I decided to take a photo of every page to share and preserve this book. The book is very old and some page is ruined, sorry if the quality of the photo is not optimal. I\u0026rsquo;ve done my best for not destroying the book in the process. :) I will release the photo one chapter at the time. Keep this page in the bookmark.\u003c/p\u003e","tags":["books","cryptography"]},{"title":"NaNoWriMo 2017 in Stats","url":"https://www.davideaversa.it/blog/nanowrimo-2017-in-stats/","date":"2017-12-07","summary":"\u003cp\u003eThis year I joined and won the \u003ca href=\"https://nanowrimo.org\"\u003eNaNoWriMo\u003c/a\u003e challenge: write 50000 words for a novel in 30 days. I did it. Now the nerd side need to splat on this page all the accumulated stats.\u003c/p\u003e\n\u003ch2 id=\"the-novel\"\u003eThe Novel\u003c/h2\u003e\n\u003cp\u003eI think it is the proper way to do it: I need to talk about the novel. The novel is, of course, in Italian and it is unfinished. With 52k  words I reached barely the beginning of the third act, more or less. Many things need to be rewritten, characters disappeared in thin air as soon as I discovered that I don\u0026rsquo;t need them\u0026hellip; stuff like that. The usual way to do a first draft.\u003c/p\u003e","tags":["writing"]}],"2017/11":[{"title":"Procedural Calendar Generation \u0026 Lunar Phases","url":"https://www.davideaversa.it/blog/procedural-calendar-generation-lunar-phases/","date":"2017-11-30","summary":"\u003cp\u003eHere we are again! This is Part 3 of a small series on how to randomly generate a physically  accurate calendar starting from planet\u0026rsquo;s orbital parameters. You can find the \u003ca href=\"https://www.davideaversa.it/2017/03/random-calendar-generation-planet-orbital-parameters/\"\u003egeneral motivation here\u003c/a\u003e, \u003ca href=\"https://www.davideaversa.it/2017/09/computing-planetary-orbits-two-celestial-objects/\"\u003epart one here\u003c/a\u003e and \u003ca href=\"https://www.davideaversa.it/2017/11/seasons-generation-from-orbital-parameters/\"\u003epart two here\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSaid that, here we go with the next part: \u003cstrong\u003elunar phases\u003c/strong\u003e.\u003c/p\u003e\n\u003ch2 id=\"why-lunar-phases\"\u003eWhy lunar phases\u003c/h2\u003e\n\u003cp\u003eLunar phases are incredibly important in a calendar. So important, that many of the early humanity calendars are, in fact, \u003ca href=\"https://en.wikipedia.org/wiki/Lunar_calendar\"\u003elunar calendars or lunisolar calendars\u003c/a\u003e. Of course, this is true if and only if the planet is lucky enough to have a big moon like us.\u003c/p\u003e","tags":["calendar","moon phases","procedural content generation"]},{"title":"Seasons Generation from Orbital Parameters","url":"https://www.davideaversa.it/blog/seasons-generation-from-orbital-parameters/","date":"2017-11-14","summary":"\u003cp\u003eWelcome back to part 3 of the Procedural Calendar Generation series. In the \u003ca href=\"https://www.davideaversa.it/2017/09/computing-planetary-orbits-two-celestial-objects/\"\u003efirst part\u003c/a\u003e we looked on how to compute celestial body position in a simple two-body system. The \u003ca href=\"https://www.davideaversa.it/2017/09/crash-course-on-basic-ellipse-geometry/\"\u003esecond part\u003c/a\u003e, instead is crash course on ellipse geometry.\u003c/p\u003e\n\u003cp\u003eIn this part, instead, we will tackle a fascinating consequence of the cosmic dance of our planet around its sun: seasons. Seasons are a strange beast because their behavior depends on a huge amount of factors. We are used to our four seasons with mild springs and autumns, hot summers and cold winters. But these four season are just the consequence of our planet ecosystem, atmosphere, the peculiar \u003cstrong\u003eaxial tilt\u003c/strong\u003e, if the orbit is particularly eccentric, distance from the sun in different period of the year can be a strong modifier too! In multi-star system, we can have more than 4 seasons, in planets with strange mechanics we can not have seasons at all (or better, the \u0026ldquo;season\u0026rdquo; depends on where are you on the planet).\u003c/p\u003e","tags":["calendar","procedural content generation","seasons"]}],"2017/10":[{"title":"Not every classification error is the same","url":"https://www.davideaversa.it/blog/not-every-classification-error-is-the-same/","date":"2017-10-18","summary":"\u003cp\u003eIn this article, I would like to talk about a common mistake new people approaching Machine Learning and classification algorithm often do. In particular, when we evaluate (and thus train) a classification algorithm, people tend to consider every misclassification equally important and equally bad. We are so deep into our mathematical version of the world that we forget about the consequences of classification errors in the real world.\u003c/p\u003e\n\u003cp\u003eBut let\u0026rsquo;s start from the beginning. Imagine a simple binary classifier. It takes some input \\( x \\) and return a Boolean value telling use if \\( x \\) belongs to a certain class \\( C \\) or not. When we pass through the algorithm a number of elements, we can identify only 4 possible outcomes:\u003c/p\u003e","tags":["f-score","machine learning"]},{"title":"Cuphead is not \"hard\"","url":"https://www.davideaversa.it/blog/cuphead-not-hard/","date":"2017-10-16","summary":"\u003cp\u003eDuring the last few weeks, I\u0026rsquo;ve seen over and over people saying that \u003ca href=\"https://en.wikipedia.org/wiki/Cuphead\"\u003eCuphead\u003c/a\u003e is hard. That it is \u003cem\u003ebrutal\u003c/em\u003e. That is the \u003cem\u003e\u0026ldquo;dark souls of the side shooter\u0026rdquo;\u003c/em\u003e. For this reason, before this trend goes too far, it is time to make things clear: \u003cstrong\u003eCuphead is not hard.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eCan a game that can easily beaten in a couple of hours be hard? No. It is challenging\u0026quot;, yes. It requires multiple tries, for sure. But it is not hard and definitely not \u0026ldquo;brutal\u0026rdquo;. There are several reasons why Cuphead can be considered a very forgiving game.\u003c/p\u003e","tags":["cuphead","gamedesign"]},{"title":"A Dwarf Fortress calendar in PureScript + Halogen","url":"https://www.davideaversa.it/blog/dwarf-fortress-calendar-purescript-halogen/","date":"2017-10-02","summary":"\u003cp\u003eMy last week project involves \u003ca href=\"http://www.purescript.org/\"\u003ePureScript\u003c/a\u003e and \u003ca href=\"https://github.com/slamdata/purescript-halogen\"\u003eHalogen\u003c/a\u003e and the \u003ca href=\"http://www.bay12games.com/dwarves/\"\u003eDwarf Fortress\u003c/a\u003e calendar. I wanted to give a first-hand experience with some pure functional language for web front-end and, after discarding Elm, I ended with PureScript. I will not go on a comparison between PureScript and the rest of the world. If you want a comparison among the other candidates, \u003ca href=\"http://mutanatum.com/posts/2017-01-12-Browser-FP-Head-to-Head.html\"\u003eyou can look at this very detailed article\u003c/a\u003e. (There is ClojureScript too, \u003ca href=\"/2017/03/new-clojure-front/\"\u003eif Clojure will ever came back from the graveyard\u003c/a\u003e).\u003c/p\u003e","tags":["dwarf fortress","halogen","javascript","purescript"]}],"2017/09":[{"title":"Crash course on basic ellipse geometry","url":"https://www.davideaversa.it/blog/crash-course-on-basic-ellipse-geometry/","date":"2017-09-18","summary":"\u003cp\u003eBecause I started a small series about astronomical algorithms and the magic of math in space, I think we need to cover an important prerequisite. In the series, I will talk a lot about ellipses (duh), I will move from the \u003cstrong\u003esemi-axis majors\u003c/strong\u003e, to the \u003cstrong\u003eperiapsis\u003c/strong\u003e, to \u003cstrong\u003eeccentricity\u003c/strong\u003e, to ellipse\u0026rsquo;s \u003cstrong\u003ecenter\u003c/strong\u003e and ellipse\u0026rsquo;s \u003cstrong\u003efoci\u003c/strong\u003e. I am concerned that things can get more complicated than expected if the readers does not know many of the geometric properties of the ellipse. For this reason, I put here this \u003cem\u003evade mecum\u003c/em\u003e on the ellipse geometry. A summary with all the basic points and lengths. A place that I can link everywhere I need to refresh a definition.\u003c/p\u003e","tags":["ellipse"]},{"title":"WordPress abandoning React: a Facebook horror story","url":"https://www.davideaversa.it/blog/wordpress-abandoning-react-a-facebook-horror-story/","date":"2017-09-15","summary":"\u003cp\u003eToday, during my daily web crawling, I found \u003ca href=\"https://ma.tt/2017/09/on-react-and-wordpress/\"\u003ethis article\u003c/a\u003e by Matt Mullenweg. I will not dwell in details, you can read the full story in the linked post. But I try to give you the core of the announcement: \u003cstrong\u003eWordPress just decided to abandon \u003ca href=\"https://facebook.github.io/react/\"\u003eReact\u003c/a\u003e\u003c/strong\u003e. This is a big news, with many implications and a few lessons to learn. Let\u0026rsquo;s go by steps.\u003c/p\u003e\n\u003ch2 id=\"the-context\"\u003eThe Context\u003c/h2\u003e\n\u003cp\u003eYou are probably asking yourselves: why? A perfect summary is explained \u003ca href=\"https://www.reddit.com/r/programming/comments/706stt/wordpress_abandoning_react_due_to_facebook_patent/dn18ezy/\"\u003e\u003cem\u003eu/A-Grey-World\u003c/em\u003e comment on Reddit\u003c/a\u003e:\u003c/p\u003e","tags":["facebook","opinion","react","vue.js","wordpress"]},{"title":"Computing planetary orbits between two celestial objects","url":"https://www.davideaversa.it/blog/computing-planetary-orbits-two-celestial-objects/","date":"2017-09-11","summary":"\u003cp\u003eAs you probably know, I am working (slowly) on an \u003ca href=\"/2017/03/random-calendar-generation-planet-orbital-parameters/\"\u003eastronomically accurate calendar generator.\u003c/a\u003e All the orbital calculations involved are quite challenging, and I am discovering \u003cstrong\u003ea lot\u003c/strong\u003e. It is a lot of fun (except for the all the times I need to do some trigonometric magic to make some formula work). Anyway, during this process, I am reshaping and producing many many formulas. I am sure that in six months I will forget all the motivations behind them. For this reason, I want to try to save some of them here. In this way, I will have a good place where to look back at my notes and, moreover, I can be useful to other people trying to do some low-accuracy orbital calculations. I want to start from the beginning: \u003cstrong\u003eorbital period and orbital trajectory.\u003c/strong\u003e\u003c/p\u003e","tags":["astronomy","calendar","astromechanics"]},{"title":"How hidden variables in statistical models affect social inequality","url":"https://www.davideaversa.it/blog/how-hidden-variables-in-statistical-models-affect-social-inequality/","date":"2017-09-09","summary":"\u003cp\u003eUse of machine learning is becoming ubiquitous and, even with a fancy name, it remains a tool in the statistical modeler belt. Every day, we leak billions of data from ourselves to companies ready to use it for their affair. Modeling through data get more common every day and mathematical model are the rulers of our life: they decide where we can work, if we can get a loan, how many years of jails we deserve, and more.\u003c/p\u003e","tags":["machine learning","statistics"]}],"2017/08":[{"title":"Playerunknown's Battlegrounds did everything wrong. And doing so, it won.","url":"https://www.davideaversa.it/blog/playerunknowns-battlegrounds-did-everything-wrong-and-doing-so-it-won/","date":"2017-08-26","summary":"\u003cp\u003eThis small article is born from a discussion I had with \u003ca href=\"https://twitter.com/quadrazza\"\u003ea friend of mine\u003c/a\u003e this week. He was writing a review on \u003ca href=\"https://en.wikipedia.org/wiki/PlayerUnknown%27s_Battlegrounds\"\u003ePlayersunknown’s Battlegrounds\u003c/a\u003e (from now on, \u003cem\u003ePUBG\u003c/em\u003e) and he ended up talking about the evolution of the genre and its triumph over every other competitor. The article was good but it did not enter in detail about, what I think, it is a greatly important and interesting question: \u003cstrong\u003eWhy PUBG? Why not any of the other dozens of \u003cem\u003ebattle royal\u003c/em\u003e games we were plagued in the last years?\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003ePUBG is clearly a winner in this competition. It sold more than \u003ca href=\"http://www.gamasutra.com/view/news/304167/Playerunknowns_Battlegrounds_surpasses_8M_sales.php\"\u003e8 million copies on Steam only\u003c/a\u003e, and I can see the trend going with the future release on consoles. The problem, in my opinion, is that, on paper, there is nothing in PUBG implementation that seems \u0026ldquo;right\u0026rdquo;. Nevertheless, it won.\u003c/p\u003e\n\u003cp\u003eMachiavelli once said that success is 50% luck. That’s definitely true for PUBG. But the other 50% must be researched in the PUBG qualities. Analyzing them, despite the massive “errors”, it is very important for any game designer.\u003c/p\u003e","tags":["DayZ","game design","playerunkown's battlegorund","pubg","the culling"]},{"title":"Against Addiction and Gambling-like Mechanic in Free to Play Games","url":"https://www.davideaversa.it/blog/against-addiction-and-gambling-like-mechanic-in-free-to-play-games/","date":"2017-08-18","summary":"\u003cp\u003eI want to take the cue from \u003ca href=\"https://www.reddit.com/r/Games/comments/6sthby/i_feel_microtransaction_isnt_the_right_term_to/\"\u003ea last week massive Reddit thread on micro-transaction in Free2Play (F2P) games\u003c/a\u003e to give my opinion of the topic. I think it is important. \u003cstrong\u003eWe need to increase awareness that predatory practices in F2P games are incredibly close to gambling and share with it the same self-destructive and harmful addictive behavior.\u003c/strong\u003e This is wrong in so many way: it is dangerous for the victims, it is dangerous for the game itself, and it is dangerous for the entire F2P model.\u003c/p\u003e","tags":["addiction","free to play","gambling"]},{"title":"Artificial Anxiety and the problem \"Mental Issues\" in AI","url":"https://www.davideaversa.it/blog/artificial-anxiety-and-the-problem-mental-issues-in-ai/","date":"2017-08-03","summary":"\u003cp\u003eAnxiety is a human mind bug. This may seem a strange claim, but I cannot find a better explanation for anxiety disorders. In fact, we can see pathological anxiety as the undesired consequence of our ability to think about the future. Being scared about a life-threatening event in the near future is a valuable ability: it helps us to survive, avoid danger and, in short, make our species survive. That is one of the reason our species has been so successful in nature\u003ca href=\"#_ftn1\"\u003e\\[1\\]\u003c/a\u003e.\u003c/p\u003e","tags":["artificial intelligence","psycology"]}],"2017/07":[{"title":"Looking at the path so far...","url":"https://www.davideaversa.it/blog/looking-path-far/","date":"2017-07-24","summary":"\u003cp\u003eNow that I finally completed my PhD studies, I started rethinking about my path up here. This is a path I started a long time ago. For some reason, this was the path I traced for myself since my childhood. When I was 10 (or earlier, I don\u0026rsquo;t really know for sure) I answered for the first time the question: \u0026ldquo;what do you want to do as a grown up?\u0026rdquo;. And the answer was \u0026ldquo;I\u0026rsquo;ll make games\u0026rdquo; (\u0026ldquo;I\u0026rsquo;ll make Mario\u0026rsquo;s game\u0026rdquo;, to be very precise).\u003c/p\u003e","tags":["diary","personal"]},{"title":"Minimized Cave Generation with Cellular Automata","url":"https://www.davideaversa.it/blog/minimized-cave-generation-cellular-automata/","date":"2017-07-04","summary":"\u003cp\u003eYesterday I wrote a \u003ca href=\"https://en.wikipedia.org/wiki/Cellular_automaton\"\u003ecellular automaton\u003c/a\u003e based procedural caves generator algorithm that fits in a business card. The algorithm itself is not new. \u003ca href=\"/2014/11/random-maps-with-cellular-automata/\"\u003eI already did it in C++, Rust, Javascript and many more languages.\u003c/a\u003e It is my personal approach to \u0026ldquo;Hello World\u0026rdquo;: when I want to try a new language, write a PCG algorithm in it.\u003c/p\u003e","tags":["c++","obfuscation","procedural content generation"]}],"2017/06":[{"title":"Improve Inventory-Aware Pathfinding with Map Preprocessing","url":"https://www.davideaversa.it/blog/improve-inventory-aware-pathfinding-map-preprocessing/","date":"2017-06-13","summary":"\u003cp\u003e\u003cem\u003eThis article has been originally published on \u003ca href=\"http://www.gamasutra.com/blogs/DavideAversa/20170612/299814/Improve_InventoryAware_Pathfinding_with_Map_Preprocessing.php\"\u003eGamasutra\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"http://www.gamasutra.com/blogs/DavideAversa/20160422/271073/Introduction_to_InventoryAware_Pathfinding.php\"\u003eIn the last article\u003c/a\u003e we introduced a basic approach for \u003cstrong\u003eInventory-Aware Pathfinding\u003c/strong\u003e (\u003cstrong\u003eIAP\u003c/strong\u003e), a pathfinding algorithm capable of interacting with obstacles and not just avoiding them. If you have not read it, I encourage you to go back and read it to understand the basic challenges and the main ideas behind the proposed solution.\u003c/p\u003e\n\u003cp\u003eFor instance, we can have a pathfinding algorithm that can solve small plans and “puzzles” involving reasoning like “before passing this door, I need to get that key”. This is definitely planning territory. However, if we focus on a small subset of the problem, we may squeeze the algorithm into the pathfinding search itself.\u003c/p\u003e","tags":["gamasutra","iap","pathfinding","planning"]}],"2017/05":[{"title":"Typescript Unit Test for Web Applications","url":"https://www.davideaversa.it/blog/typescript-unit-test-web-applications/","date":"2017-05-26","summary":"\u003cp\u003eYou know, I quite enjoy \u003ca href=\"https://www.typescriptlang.org/\"\u003eTypeScript\u003c/a\u003e. It is not my favorite language ever, I am more a functional type of guy, but it is the best way to bring order into the JavaScript mess without too many hassles. Moreover, it is the language in which I prototyped my \u003ca href=\"/2017/03/random-calendar-generation-planet-orbital-parameters/\"\u003eAstronomical Calendar Generator\u003c/a\u003e. Now that I\u0026rsquo;m working on extending it, I want to keep using TypeScript and stop falling in my usual decision paralysis. Anyway\u0026hellip; First thing I needed to do is how to unit test a TypeScript source base. It is easy, but not intuitive. So let\u0026rsquo;s see how to do it.\u003c/p\u003e","tags":["mocha","typescript","unit test"]},{"title":"I needed to trust my gut feelings: Kotlin and Android","url":"https://www.davideaversa.it/blog/i-needed-trust-gut-feelings-kotlin-android/","date":"2017-05-19","summary":"\u003cp\u003eIn \u003ca href=\"/2016/12/promising-programming-languages-2017/\"\u003ethis year top-5 promising languages list\u003c/a\u003e, I put \u003ca href=\"https://kotlinlang.org/\"\u003eKotlin\u003c/a\u003e in fifth place among  the languages that you should definitely check in 2017. \u003ca href=\"https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/\"\u003eThis week Google I\\O announced that Kotlin is now an officially supported language for Android Development\u003c/a\u003e. I like to be right in my forecast. However, I need to be honest. Back then, I didn\u0026rsquo;t know well why I put it there. I just had some kind of ethereal intuition.\u003c/p\u003e\n\u003cp\u003eIn the article I wrote:\u003c/p\u003e","tags":["android","kotlin"]},{"title":"How to build rusqlite on Windows","url":"https://www.davideaversa.it/blog/build-rusqlite-windows/","date":"2017-05-02","summary":"\u003cdiv style=\"background-color: yellow; padding: 10px; border: 1px solid #ccc;\"\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e This article has not been updated in the last 2 years. The information may be outdated.\n\u003c/div\u003e\n\n\n\u003cp\u003eYesterday I spent way more time than needed for compiling this dependency on Windows. The problem is that the error was not informative enough and hard to google, and, mostly, that there is no standardized way to look for installed libraries in Windows. Just to be clear, there is no reliable way to use \u003ccode\u003epkg-config\u003c/code\u003e on Windows as in Unix-like systems.\u003c/p\u003e","tags":["rust","how-to"]}],"2017/04":[{"title":"I am killing comments. I will not kill discussion.","url":"https://www.davideaversa.it/blog/i-killing-comments-i-will-not-kill-discussion/","date":"2017-04-25","summary":"\u003cp\u003e\u003cstrong\u003eI am removing comments from this blog.\u003c/strong\u003e There are several reasons for this decision. First, it is hard to find value in comments anymore. In 3 years I think I have collected something like 10 comments. Most of my interaction with readers and other people happens on Twitter, in the Facebook comments or in the Reddit threads. Second, the existing main solutions for comments are unappealing.\u003c/p\u003e\n\u003cp\u003eThe default WordPress comment system is very spam prone and hard to manage. On the other hand, \u003ca href=\"https://disqus.com/\"\u003eDisqus\u003c/a\u003e looks like a more technologically advanced solution. Unfortunately, in practice, it is a resource hog, it forces you to have your experience shared among different domains, and, in other words, a giant tracking system. I do not want to force my readers to load a third-party potentially tracking  system every time. Even because it make hard to me to enforce a serious privacy policy for this place.\u003c/p\u003e","tags":["blog","disqus"]},{"title":"Randomness in PCG is about the result, not the parameters","url":"https://www.davideaversa.it/blog/randomness-pcg-is-about-result/","date":"2017-04-21","summary":"\u003cp\u003eI feel the urge of stating the obvious: \u003cstrong\u003erandomness in Procedural Generation refers to the perceived randomness of the outcome; not the randomness of the input parameters.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eIn some sense this is \u0026ldquo;obvious\u0026rdquo; but, at the same time, is one of the most common mistake I see when developers tackle procedural content generation in their games. It is an understandable mistake, though. There are two assumptions we subconsciously make when we approach randomness: 1) we think that uniformly random  parameters produce uniformly random outputs (that\u0026rsquo;s blatantly false), and 2) we think that uniformly random outputs yield to uniformly random perception in the human (even more false).\u003c/p\u003e","tags":["pcg","procedural content generation"]}],"2017/03":[{"title":"Random calendar generation from planet orbital parameters","url":"https://www.davideaversa.it/blog/random-calendar-generation-planet-orbital-parameters/","date":"2017-03-27","summary":"\u003cp\u003eIn this article I want to show you a small proof of concept where we generate from scratch an alien calendar. The difference from other random calendar generators that just put random days and random month is that, in this tool, we can specify as input the orbital parameters of the planet and satellite and generate \u003cstrong\u003ea calendar that makes sense\u003c/strong\u003e.  How could be the calendar for that planet orbiting a super-massive star? How could be the calendar for Mars or Venus? Every time I try to sketch a Sci-Fi world, I want to try thinking to a calendar that make sense for that particular planet. Because the calculations are long and boring, I built for myself this little tool. However, before going to the tool, I want to provide a small introduction to the problem.\u003c/p\u003e","tags":["calendar","procedural content generation"]},{"title":"Any news from Clojure front?","url":"https://www.davideaversa.it/blog/new-clojure-front/","date":"2017-03-20","summary":"\u003cp\u003eSome days ago, I was cleaning my Code folder from old snippets and test projects when I found an old Clojure package I did to test some Clojure feature. I remember that I kept the project sleeping in my Code folder because I thought that it would come in handy when Clojure 1.9 would be released. However, I left that project stub back in February 2016, \u003cstrong\u003emore than a year ago\u003c/strong\u003e. That raise the question: \u003cstrong\u003ewhere is Clojure 1.9?\u003c/strong\u003e\u003c/p\u003e","tags":["clojure","elixir","go","kotlin"]}],"2016/12":[{"title":"Most Promising Programming Languages of 2017","url":"https://www.davideaversa.it/blog/promising-programming-languages-2017/","date":"2016-12-28","summary":"\u003cp\u003eAnother year, another 5 promising programming languages you should keep an eye on in 2017. As usual, I’d like to write the warning I put here every year: \u003cstrong\u003ein this list, you will not find programming languages for hiring purposes, but for very long-time investments and for pure programming fetish.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eSo, now that you know what I am talking about, here we go with the top 5 for 2017.\u003c/p\u003e\n\u003ch1 id=\"top-5-promising-programming-languages-for-2017\"\u003eTop 5 Promising Programming Languages for 2017\u003c/h1\u003e\n\u003ch2 id=\"rust\"\u003eRust\u003c/h2\u003e\n\u003cp\u003e\u003cimg src=\"/wp-content/uploads/2016/12/rust-logo-512x512-300x300.png\" alt=\"\"\u003e\u003c/p\u003e","tags":["crystal","elixir","kotlin","nim","programming language","rust"]},{"title":"PCG without a Computer: Combinatorial Literature","url":"https://www.davideaversa.it/blog/pcg-without-computer-combinatorial-literature/","date":"2016-12-20","summary":"\u003cp\u003eFor us computer scientists and game developers, \u003cem\u003eProcedural Content Generation\u003c/em\u003e is directly connected with computers and algorithms. It seems such a modern thing!\u003c/p\u003e\n\u003cp\u003eIn reality, the exploration of the “combinatorial nature of art and human thoughts” is a much older concept. Probably, the most interesting and early writing on “PCG” is the doctoral dissertation of Gottfried Leibniz, \u003cem\u003eDe Arte Combinatoria\u003c/em\u003e (On the Combinatorial Art) (1666) in which he exposed the main idea that “all truth are nothing but combinations of a relatively small number of simple concepts.”\u003c/p\u003e","tags":["combinatorial literature","procedural content generation"]}],"2016/11":[{"title":"How to manage a Videogames Bibliography in LaTeX","url":"https://www.davideaversa.it/blog/manage-videogames-bibliography-latex/","date":"2016-11-17","summary":"\u003cp\u003eThere is a common question in academia for people working on videogames: \u0026ldquo;Is there a consensus on how to cite videogames in academic papers?\u0026rdquo;. Obviously not, there is no consensus and probably never will. However, I will try to show you a solution to this problem that I enjoyed a lot in the last months. It is clear, it is customizable and it is the most formal way I\u0026rsquo;ve found to do that.\u003c/p\u003e","tags":["latex","videogames"]}],"2016/10":[{"title":"THREE.js Shader Loading from External File","url":"https://www.davideaversa.it/blog/three-js-shader-loading-external-file/","date":"2016-10-29","summary":"\u003cp\u003eAs usual, trying to nicely separate into different files the various application parts in \u003cstrong\u003eJavaScript\u003c/strong\u003e is a titanic challenge. This time, I wanted to separate the \u0026ldquo;.frag\u0026rdquo; and \u0026ldquo;.vert\u0026rdquo; shader programs into different files that I can load at runtime (instead of putting them into the HTML like a savage).\u003c/p\u003e\n\u003cp\u003eFor some reason, there is no easy out-of-the-box way to do that. On the internet, there is a small library, but it depends on JQuery and I think it is insane to load \u003cem\u003eJQuery\u003c/em\u003e on top of \u003ca href=\"https://threejs.org/\"\u003eTHREE.js\u003c/a\u003e just to load a couple of files. Therefore, I wrote a function to do that using the THREE.js integrated generic loader function.\u003c/p\u003e","tags":["javascript","shader","three.js"]},{"title":"Announcement: Procjam's Seed #1","url":"https://www.davideaversa.it/blog/announcement-procjams-seed-1/","date":"2016-10-24","summary":"\u003cp\u003eThis is just a small announcement. Some days ago the first issue of \u003ca href=\"http://www.procjam.com/seeds/\"\u003e\u003cstrong\u003eSeed\u003c/strong\u003e\u003c/a\u003e, the official \u003ca href=\"http://www.procjam.com/\"\u003eProcJam\u003c/a\u003e magazine, has been released. If you are interested in procedural generation you really should give it a shot. It is colorful 106 pages long magazine, full of experiences, ideas and interesting contents on PCG.\u003c/p\u003e\n\u003cp\u003eMoreover, there is also an article of mine on the  \u003cem\u003e\u003cstrong\u003eOu\u003c/strong\u003evroir de \u003cstrong\u003eli\u003c/strong\u003ettérature \u003cstrong\u003epo\u003c/strong\u003etentielle\u003c/em\u003e (Oulipo), a mid \u0026lsquo;900 literary movement that it is really connected with the PCG. If you want to read about people developing PCG stories in the pre-information era, take a look.\u003c/p\u003e","tags":["procedural content generation","procjam","seed"]},{"title":"How to build a Telegram SpyBot","url":"https://www.davideaversa.it/blog/how-to-build-a-telegram-spybot/","date":"2016-10-10","summary":"\u003cp\u003eInternet/Tech literate people continuously talk about privacy. The majority of people, however, do not care. This is hard to digest for the first group of people, but it is the truth and we should start considering this fact to make things better in the future.\u003c/p\u003e\n\u003cp\u003eWhy I\u0026rsquo;m talking about this? Because, in the last weeks, I\u0026rsquo;ve found an \u003cem\u003eextremely easy\u003c/em\u003e way to spy any Telegram group. It is not a dark market secret (in fact it is perfectly documented in the \u003ca href=\"https://core.telegram.org/bots#privacy-mode\" target=\"_blank\"\u003eTelegram Bot API\u003c/a\u003e), but works perfectly because \u003cstrong\u003enobody cares\u003c/strong\u003e. While every internet and privacy activist is talking about how Google, Facebook and Yahoo are spying on our email, \u003cstrong\u003etelegram bots that are actually logging all the messages in all the groups in plain text\u003c/strong\u003e. They are bot, by unknown programmers, without ToS, without anything, reading all your messages and potentially storing them who knows where.\u003c/p\u003e\n\u003cp\u003eSo, I will explain to you how to build a Telegram SpyBot. Hopefully you can use it to teach some privacy lesson to your friends.\u003c/p\u003e","tags":["bot","privacy","telegram"]},{"title":"Procedural Generation in the Post No Man's Sky Era","url":"https://www.davideaversa.it/blog/procedural-generation-post-no-mans-sky-era/","date":"2016-10-04","summary":"\u003cp\u003eI think the time is ready to talk about \u003cstrong\u003eProcedural Contents Generation\u003c/strong\u003e (\u003cstrong\u003ePCG\u003c/strong\u003e) in the post \u003cstrong\u003eNo Man\u0026rsquo;s Sky\u003c/strong\u003e era. I\u0026rsquo;m talking about \u0026ldquo;era\u0026rdquo; for a good reason: \u003cstrong\u003eNo Man\u0026rsquo;s Sky huge failure\u003c/strong\u003e will definitely mark an era in the history of PCG, and not for a good reason. Players\u0026rsquo; perception on PCG has been severely hurt by how badly \u003cem\u003eNMS\u003c/em\u003e delivered its contents. Probably, this will be the end of PCG as a marketing buzz-word.\u003c/p\u003e","tags":["no man's sky","procedural content generation"]}],"2016/09":[{"title":"Python for Practical Statistics","url":"https://www.davideaversa.it/blog/python-for-practical-statistics/","date":"2016-09-25","summary":"\u003cdiv style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\t\t\t\u003ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\" loading=\"eager\" referrerpolicy=\"strict-origin-when-cross-origin\" src=\"https://www.youtube.com/embed/Iq9DzN6mvYA?autoplay=0\u0026amp;controls=1\u0026amp;end=0\u0026amp;loop=0\u0026amp;mute=0\u0026amp;start=0\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" title=\"YouTube video\"\u003e\u003c/iframe\u003e\n\t\t\u003c/div\u003e\n\n\u003cp\u003eThese days were a bit busy. I want to break the silence with an interesting link to a video. This is an interesting and fun to watch talk coming from the last \u003ca href=\"https://us.pycon.org/2016/\"\u003ePyCon\u003c/a\u003e. It talks about \u0026ldquo;practical statistics\u0026rdquo;, that is, how you can try to produce (or validate) a model when you can not compute the analytic model of a phenomenon. Many of the technique he describes can be used to any language, so it is suitable even if you do not program in Python. Anyway, look that, it is worth it. Moreover, this is just an excuse to suggest you to look around all the other videos from PyCon. They are well made and there are some interesting talk that should be watched.\u003c/p\u003e","tags":["procjam","python","statistics"]}],"2016/08":[{"title":"On Designing Games for Infinite Players","url":"https://www.davideaversa.it/blog/designing-games-for-infinite-players/","date":"2016-08-25","summary":"\u003cp\u003eWhen you design a game, one of the most important aspect to take into account is the \u003cstrong\u003enumber of players\u003c/strong\u003e. Games can be designed for a single player, two players, four players or thousands of player (like in \u003ca href=\"https://en.wikipedia.org/wiki/Massively_multiplayer_online_game\"\u003eMMOs\u003c/a\u003e) and this decision has a huge impact in the technical and design requirements.\u003c/p\u003e\n\u003cp\u003eBut it is not just choosing a number. The “number of players” parameter cannot be arbitrarily moved at will. The more we increase the value, the more the designing task becomes harder and harder. Look around you. We have thousands of single-player games, we can find a huge amount of games for 2 to 4 players, we have party games that can go to 10 players or team sport games such as rugby and football that can be played up to 20 or 30 players, but after this amount of players, how many good games there are?\u003c/p\u003e","tags":["gamedesign","players"]},{"title":"On the procedural generation of a proto-language","url":"https://www.davideaversa.it/blog/on-the-procedural-generation-of-a-proto-language/","date":"2016-08-12","summary":"\u003cp\u003eAs you probably know, last week I was at the \u003ca href=\"http://digra-fdg2016.org/\"\u003eDiGRA-FDG\u003c/a\u003e conference in Dundee, Scotland. The conference ended last week, but I have the urge to add something to a really interesting presentation I\u0026rsquo;ve attended during the first day at the workshop on Procedural Contents Generation.\u003c/p\u003e\n\u003cp\u003eBefore FDG, I was reading a small book on how the Chinese language has evolved during the centuries. It is extremely interesting. Especially if we look at the clear and wonderful evolution from pictures on paleolithic wood artifacts to the modern Mandarin Language. This triggered in me the idea to explore the literature on teleological algorithms for the procedural generation of languages (\u003ca href=\"http://cowboyprogramming.com/2007/01/02/teleological-vs-ontogenetic/\"\u003eif you don\u0026rsquo;t know\u003c/a\u003e, the \u003cem\u003eteleological algorithms\u003c/em\u003e in PCG are the ones that try to generate a \u0026ldquo;thing\u0026rdquo; by simulating the physical and evolutionary processes through which the \u0026ldquo;thing\u0026rdquo; is generated in the Real World™).\u003c/p\u003e","tags":["language","procedural content generation"]}],"2016/07":[{"title":"Back from Nucl.ai 2016: A small report","url":"https://www.davideaversa.it/blog/back-from-nucl-ai-2016-a-small-report/","date":"2016-07-24","summary":"\u003cp\u003eI\u0026rsquo;m back! During the last week, I had a beautiful experience as a volunteer at the \u003ca href=\"https://web.archive.org/web/20180217005609/https://nucl.ai/\"\u003eNucl.ai 2016\u003c/a\u003e conference, one of the nicest Game AI related conferences in Europe.\u003c/p\u003e\n\u003cp\u003eI like this conference. It has a very informal atmosphere and both speakers and attendees are incredibly friendly and very willing in giving advice. You can go there like a complete no-one (for instance, like me) and you can speak and have a beer with Lead AI programmer in Triple-A games, in top notch industries like Google, Blizzard or Epic as if they are your friends.\u003c/p\u003e","tags":["conference","diary","nucl.ai"]},{"title":"My view on Elixir and Clojure","url":"https://www.davideaversa.it/blog/language-showdown-elixir-clojure/","date":"2016-07-08","summary":"\u003cp\u003e\u003ca href=\"http://elixir-lang.org/\"\u003eElixir\u003c/a\u003e and \u003ca href=\"http://clojure.org/\"\u003eClojure\u003c/a\u003e are two uprising and fun functional languages. As you know, I talked about both of them in the article on \u003ca href=\"/2015/12/the-most-promising-languages-of-2016/\"\u003ethe most promising languages of 2016\u003c/a\u003e, and, in fact, they are the only real functional languages I mentioned in there.\u003c/p\u003e\n\u003cp\u003eAt the time, I didn\u0026rsquo;t really explore these two languages in deep, and in fact, I think I was a bit too hard on Clojure. During this half year, I had the opportunity to go deeper in Clojure and my opinion on the languages increased accordingly. Moreover, Clojure 1.8 came out just a month later with some nice improvements and the upcoming Clojure 1.9 (with the introduction of the \u003ca href=\"http://clojure.org/news/2016/05/23/introducing-clojure-spec\"\u003e`clojure.spec`\u003c/a\u003e) seems to push the bar even further. So, yeah, I was wrong on a big point: Clojure is advancing quite fast.\u003c/p\u003e","tags":["clojure","elixir"]}],"2016/06":[{"title":"TypeScript Binary Heap","url":"https://www.davideaversa.it/blog/typescript-binary-heap/","date":"2016-06-21","summary":"\u003cp\u003eYesterday I converted a \u003cstrong\u003eBinary Heap\u003c/strong\u003e data structure in \u003cstrong\u003eTypeScript\u003c/strong\u003e. The original code is \u003ca href=\"http://eloquentjavascript.net/1st_edition/appendix2.html\"\u003ehere\u003c/a\u003e, in the \u003cem\u003eEloquent JavaScript\u003c/em\u003e online book by \u003cem\u003eMarijn Haverbeke.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIn short, a \u003ca href=\"https://en.wikipedia.org/wiki/Binary_heap\"\u003eBinary Heap\u003c/a\u003e is a common data structure for a \u003cstrong\u003epriority queue\u003c/strong\u003e. We want to put inside the queue many values (or an object) and you want to extract the smallest value (or the object with the smallest score) in the most efficient way.\u003c/p\u003e\n\u003cp\u003eThis JS implementation the Eloquent Javascript book is pretty common, so I decided \u0026ldquo;to typify it\u0026rdquo;.  The result is in the following Gist:\u003c/p\u003e","tags":["javascript","typescript"]},{"title":"Quick Dev Tips: Pixel-Perfect Scaling of a Phaser game","url":"https://www.davideaversa.it/blog/quick-dev-tips-pixel-perfect-scaling-phaser-game/","date":"2016-06-19","summary":"\u003cp\u003eAs you may know, I am in the middle of developing a demo for some \u003ca href=\"http://www.gamasutra.com/blogs/DavideAversa/20160422/271073/Introduction_to_InventoryAware_Pathfinding.php\"\u003eSmart Pathfinding\u003c/a\u003e, and I\u0026rsquo;m using \u003ca href=\"/2016/06/basic-bootstrap-phaser-io-typescript-game-development/\"\u003ePhaser and TypeScript\u003c/a\u003e for it. Unfortunately, as soon as I started coding a couple of days ago, I quickly found a problem. How can I do pixel-perfect scaling of the game?\u003c/p\u003e\n\u003cp\u003eThe tileset I\u0026rsquo;m using is very small (16x16 pixels tiles) and I needed to scale them at least 3 times to make them visible on a big screen. However, searching for \u0026ldquo;phaser.io\u0026rdquo; and \u0026ldquo;scaling\u0026rdquo; returns a lot of not useful results.\u003c/p\u003e","tags":["javascript","phaser.io","tips","typescript"]},{"title":"Basic Bootstrap for Phaser.io and Typescript Game Development","url":"https://www.davideaversa.it/blog/basic-bootstrap-phaser-io-typescript-game-development/","date":"2016-06-11","summary":"\u003cp\u003eIn the last period, I\u0026rsquo;m really enjoying \u003ca href=\"https://www.typescriptlang.org/\"\u003eTypeScript\u003c/a\u003e. It is typed, can be used in a functional way without effort, it like a C# for the Web, in short, I love it. For this reason, I started converting some old \u003ca href=\"http://phaser.io/\"\u003ePhaser.io\u003c/a\u003e demo in TypeScript, for fun.\u003c/p\u003e\n\u003cp\u003eSo, why I\u0026rsquo;m writing here? To solve two main problems. First, the TypeScript guide in the Phaser.io web page is really outdated. Second, there are a lot of \u0026ldquo;template\u0026rdquo; project fo Phaser.io you can download. These templates are really \u003cem\u003estate-of-the-art\u003c/em\u003e level: they use \u003cem\u003eGulp\u003c/em\u003e, \u003cem\u003eGrunt\u003c/em\u003e, \u003cem\u003eNPM\u003c/em\u003e and another million of tools.\u003c/p\u003e","tags":["phaser.io","typescript"]}],"2016/05":[{"title":"Game Design Essentials: Single Button Controls","url":"https://www.davideaversa.it/blog/game-design-essentials-single-button-controls/","date":"2016-05-26","summary":"\u003cp\u003eI hope you agree with me: \u003cstrong\u003econtrols are the true essence of every game\u003c/strong\u003e. Sometimes, controls schemes are enough to define the game itself: once you decide the game controls mechanics, the rest of the game will follow. So I thought to start exploring controls schemes in a more formal way, searching for a way to analyze games from the user interaction point of view only.\u003c/p\u003e\n\u003cp\u003eWe will start from the simplest control scheme possible: \u003cstrong\u003ea game with a single button\u003c/strong\u003e. These kind of games are recently more common than ever: they are easy to implement, easy to play and very suitable for smartphones (touch screens can be seen as single giant buttons). In other words, they are the perfect candidate for a funny mobile game.\u003c/p\u003e","tags":["controls","game design"]},{"title":"How to generate passphrases with an RPG Dice Set","url":"https://www.davideaversa.it/blog/generate-passphrase-rpg-dice-set/","date":"2016-05-11","summary":"\u003cp\u003eTimes ago, I was reading something on numerical systems and password generators and I find myself discovering \u003ca href=\"http://world.std.com/~reinhold/diceware.html\"\u003eDiceware\u003c/a\u003e, a system for generating a \u003cstrong\u003epassphrase\u003c/strong\u003e using several \u003cstrong\u003e6-side dice\u003c/strong\u003e. I think it was funny, so I looked for some dice in my house to try the system. Unfortunately, I have just one d6. Diceware requires five throws just for a single word and a good passphrase requires 3 or 4 words, plus some modifiers here and there. In total, I should throw that single die 20 times to get a good passphrase.\u003c/p\u003e","tags":["dice","passphrases"]}],"2016/04":[{"title":"You need to decide your decisions","url":"https://www.davideaversa.it/blog/need-decide-decisions/","date":"2016-04-09","summary":"\u003cp\u003eIf there is something that I learned from my daily struggle with procrastination, is that every day \u003cstrong\u003eyou just have a limited amount of decisions\u003c/strong\u003e. Every day, you can only do 5, 8, maybe 10 meaningfully decisions. After that you will start doing mistakes, get tired and, in general, doing wrong.\u003c/p\u003e\n\u003cp\u003eWhat can be surprising of this, is that \u003cstrong\u003edoesn\u0026rsquo;t matter how important the decision is\u003c/strong\u003e. Look at a traditional day: you wake up and you need to decide what to eat for breakfast, what clothes to wear, if it is better to go to work using the car or public transportation. You have literally just waked up and you have already depleted the big part of you \u003cem\u003edecision pool\u003c/em\u003e for the day. And none of that decision is meaningful for your work, your career, your family, your affections.\u003c/p\u003e","tags":["productivity","opinion"]},{"title":"Inventory-Aware Pathfinding - Part 1","url":"https://www.davideaversa.it/blog/inventory-aware-pathfinding/","date":"2016-04-04","summary":"\u003cp\u003eEverybody know what \u003ca href=\"https://en.wikipedia.org/wiki/Pathfinding\"\u003epathfinding\u003c/a\u003e is. I don\u0026rsquo;t think I have to explain to a game developers audience why pathfinding is so important in games. If something in your game is moving not in a straight line, then you are using some kind of pathfinding.\u003c/p\u003e\n\u003cp\u003eWhat is less evident is that pathfinding is the only place in which \u0026ldquo;searching\u0026rdquo; is generally accepted. Except for \u003ca href=\"https://web.archive.org/web/20230603190318/http://alumni.media.mit.edu/~jorkin/goap.html\"\u003eGOAP\u003c/a\u003e and other planning-based techniques, the big part of the NPC\u0026rsquo;s \u003cstrong\u003edecision-making techniques are reactive-based\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eThis is not a bad thing. Reactive techniques are an amazing design tool. However, this raises a question. \u003cstrong\u003eWhy is this?\u003c/strong\u003e Mainly because of computational limits - full-fledged planning still requires an impractical amount of time - but also because of design unpredictability. The output of planning decision-making techniques is hard to control and the final behavior of the agent could be counterintuitive for the designers and, at the end, for the players.\u003c/p\u003e\n\u003cp\u003eWhy can pathfinding play a role in this? Because it is possible to embed in it a \u003cstrong\u003eminimal, specialized, subset of planning\u003c/strong\u003e, especially if these planning instances require spatial reasoning. A common example is solving a pathfinding problem in which areas of the map are blocked by doors that can be open by switches or keys sparse around on the map. How can we solve this kind of problems?\u003c/p\u003e","tags":["inventory-aware pathfinding","pathfinding","research"]}],"2016/03":[{"title":"The Primes Ancestor Tree","url":"https://www.davideaversa.it/blog/common-ancestor-primes-tree/","date":"2016-03-19","summary":"\u003cp\u003eThis will be just a small theoretical article on the \u003cstrong\u003ePrimes Ancestor Tree\u003c/strong\u003e. We will explore the possibility to label a generic tree in such way that it will be possible to verify if a node is an ancestor of another node (or to find the common ancestor of two nodes) just by applying integer arithmetic.\u003c/p\u003e\n\u003cp\u003eIn fact, sometimes ago I was trying to implement some fancy algorithm that, given two nodes from the open list of a search algorithm, finds their common ancestor. While I was doing this I asked myself if it was possible to use prime numbers in order to provide a labeling system that encodes the \u0026ldquo;descendant\u0026rdquo; relation of the nodes.\u003c/p\u003e\n\u003cp\u003eI think that I have found a theoretical system. Even if it can not be used in real-world applications, I had fun playing with it looking for the properties of the resulting labeled tree. So, I thought it could be interesting to share.\u003c/p\u003e","tags":["primes","trees"]},{"title":"How to use Rust in Python (Part 3)","url":"https://www.davideaversa.it/blog/use-rust-python-part-3/","date":"2016-03-02","summary":"\u003cdiv style=\"background-color: yellow; padding: 10px; border: 1px solid #ccc;\"\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e This article has not been updated in the last 2 years. The information may be outdated.\n\u003c/div\u003e\n\n\n\u003cp\u003e\u003cem\u003eYou can follow the links to read the \u003ca href=\"/2016/02/use-rust-python-part-1/\"\u003efirst part\u003c/a\u003e and the \u003ca href=\"/2016/02/use-rust-python-part-2/\"\u003esecond part\u003c/a\u003e of this series.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eIn the previous part we have seen how to pass not trivial data to Rust functions such as a Python list. It is still not enough, though. In many cases we need to pass complex data structure back and forth from a Rust library. We may need to pass quaternions, 3D points, trees, a list of \u0026ldquo;books\u0026rdquo;\u0026hellip; In short: anything.\u003c/p\u003e\n\u003cp\u003eLearning how to pass custom aggregated data types to Rust libraries (and back to Python) will be the focus of this part!\u003c/p\u003e","tags":["python","rust","how-to"]}],"2016/02":[{"title":"How to use Rust in Python (Part 2)","url":"https://www.davideaversa.it/blog/use-rust-python-part-2/","date":"2016-02-25","summary":"\u003cp\u003e\u003cstrong\u003eYou can find the first part of this article \u003ca href=\"/2016/02/use-rust-python-part-1/\"\u003eHERE\u003c/a\u003e\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eIn the previous part we have seen how to run simple Rust functions with integer arguments. This is not enough, of course. We need to go further by passing Python lists to Rust functions.\u003c/p\u003e\n\u003cp\u003eThe problem is that it is not possible to pass directly a Python list to a C interface. Python lists (we can call them \u003cem\u003ePlists\u003c/em\u003e) are complicated beasts, you can easily see that they are objects full of methods, and attributes and\u0026hellip; Stuff.\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"background-color:#f7f7f7;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#6639ba\"\u003edir\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e([])\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#1f2328\"\u003e[\u003c/span\u003e\u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__add__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__class__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__contains__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__delattr__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__delitem__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__dir__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__doc__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__eq__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__format__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__ge__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__getattribute__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__getitem__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__gt__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__hash__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__iadd__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__imul__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__init__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__iter__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__le__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__len__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__lt__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__mul__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__ne__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__new__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__reduce__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__reduce_ex__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__repr__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__reversed__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__rmul__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__setattr__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__setitem__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__sizeof__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__str__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;__subclasshook__\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;append\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;clear\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;copy\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;count\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;extend\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;index\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;insert\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;pop\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;remove\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;reverse\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e,\u003c/span\u003e \u003cspan style=\"color:#0a3069\"\u003e\u0026#39;sort\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#1f2328\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003eWe need first to convert this in something edible from a Rust library. But first things first.\u003c/p\u003e","tags":["python","rust"]},{"title":"How to use Rust in Python (Part 1)","url":"https://www.davideaversa.it/blog/use-rust-python-part-1/","date":"2016-02-20","summary":"\u003cdiv style=\"background-color: yellow; padding: 10px; border: 1px solid #ccc;\"\u003e\n    \u003cstrong\u003eNote:\u003c/strong\u003e This article has not been updated in the last 2 years. The information may be outdated.\n\u003c/div\u003e\n\n\n\u003cp\u003eRust is an amazing language. It is one of the best potential alternatives to C and has been elected two times in a row as \u003ca href=\"/2015/12/the-most-promising-languages-of-2016/\"\u003ethe most promising language of the year\u003c/a\u003e (by me, :P). However, because its strict compile-time memory correctness enforcement and because it is a low-level language, it is not the fastest way to build a prototype. But don\u0026rsquo;t worry! Rust is the perfect language for embedding fast-binary libraries in Python! In this way we can get the best of both worlds!\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWriting Rust code that can be executed in Python is stupidly easy.\u003c/strong\u003e Obviously, you have to well design the interface between the two languages, but this will improve your Python code in two ways: 1) You can execute CPU-intensive algorithms at binary speed and 2) use \u003cstrong\u003ereal threads\u003c/strong\u003e instead of the Python \u0026ldquo;simulated\u0026rdquo; ones (and because Rust is designed to be memory safe, writing thread safe routines is much easier). Let\u0026rsquo;s see!\u003c/p\u003e","tags":["python","rust","how-to"]},{"title":"Convert images to MovingAI maps","url":"https://www.davideaversa.it/blog/convert-images-to-movingai-maps/","date":"2016-02-12","summary":"\u003cp\u003eThe \u003ca href=\"http://www.movingai.com/benchmarks/\"\u003eMovingAI Benchmark Database\u003c/a\u003e is \u003cstrong\u003eone of the most famous collections of maps for benchmark on pathfinding algorithms\u003c/strong\u003e. I use it a lot during my work, it is useful to test an algorithm over a lot of real-world game maps. The consequence is that I developed a lot of tools to work with the map format of the MovingAI database.\u003c/p\u003e\n\u003cp\u003eThe last of these tools is a straightforward \u003cstrong\u003ePython script to convert images into maps in the MovingAI format\u003c/strong\u003e. It is useful when you want to quickly develop some test maps.\u003c/p\u003e","tags":["benchmark","movingai","python"]},{"title":"Research Code vs. Commercial Code","url":"https://www.davideaversa.it/blog/research-code-vs-commercial-code/","date":"2016-02-09","summary":"\u003cp\u003eSince the beginning of my working life, I was torn between my researcher and software developer self. As a software development enthusiast, during my experience as a Ph.D. student, I suffered a lot looking at software implemented by researchers (many times my code is in the set too). Working with research code is usually an \u003cstrong\u003ehorrible experience\u003c/strong\u003e. Researchers do so many \u003cstrong\u003etrivial software development mistakes\u003c/strong\u003e that I\u0026rsquo;d like to cry. The result is: a lot of duplicated work reimplementing already existent modules and a lot of time spent in integration, debugging and understanding each other code.\u003c/p\u003e\n\u003cp\u003eOn the other hand, it is almost impossible that a researcher will learn the basics of software development in some book because 1) nobody cares (and they really should!) and 2) books on this topic are mostly focused on commercial software development. This is a problem because, even if best practices overlap for the 80%, research code and commercial code are driven by completely different priorities.\u003c/p\u003e\n\u003cp\u003eSo, because I am just a lonely man in the middle of this valley, nor a good research code writer nor a good commercial code writer, I can share my neutral opinion. Maybe, I will convince you, fellow researcher, that may be worth to spend some time improving your coding practices.\u003c/p\u003e","tags":["software architecture","software development"]},{"title":"Postmortem: Writer's Block - 1GAM January","url":"https://www.davideaversa.it/blog/postmortem-writers-block-1gam-january/","date":"2016-02-05","summary":"\u003cp\u003eThe first month of the year is gone and I\u0026rsquo;ve made a game! The January 2016 entry of \u003ca href=\"%C2%A0http://www.onegameamonth.com/\"\u003e1GAM\u003c/a\u003e, namely \u003cstrong\u003e\u0026ldquo;Writer\u0026rsquo;s Block\u0026rdquo;\u003c/strong\u003e, is now completed (kind of)!\u003c/p\u003e\n\u003cp\u003eJanuary 2016 has been a great start for this year! During the last months of last year I started a personal journey to fight my inner demons. I don\u0026rsquo;t want to bore you with some self-improvement/productivity bullshit -it is not the place for that- so I will not. You just have to know that after 6 months of trying and failing this January is the month in which all the good habits really start to stick.\u003c/p\u003e\n\u003cp\u003eThe \u0026ldquo;One Game A Month\u0026rdquo; challenge was the perfect way to test myself and doing one of the activities I love most. As usual, we will start from the beginning.\u003c/p\u003e","tags":["1gam","postmortem","writing"]}],"2016/01":[{"title":"Fast (Approximated) Moving Average Computation","url":"https://www.davideaversa.it/blog/fast-approximated-moving-average-computation/","date":"2016-01-20","summary":"\u003cp\u003eComputing the \u003ca href=\"https://en.wikipedia.org/wiki/Moving_average\"\u003eMoving Average\u003c/a\u003e of a sequence is a common task in games (and other applications). The motivation is simple: if something happened too far in the past, probably it does not matter anymore.\u003c/p\u003e\n\u003cp\u003eOne of the main problems with the standard average is that it \u0026ldquo;slows\u0026rdquo; over time. This can be a serious problem. Suppose that you are designing a game in which your player have to quickly press a button to keep a value (e.g., player speed) above a certain \u003cem\u003eaverage\u003c/em\u003e. If you use the global average, after a certain amount of time, your player can stop pressing the button and still keep the average above the threshold.\u003c/p\u003e\n\u003cp\u003eThe demonstration of this is quite intuitive. If you have an average \u003ccode\u003ea(t)\u003c/code\u003e at frame \u003ccode\u003et\u003c/code\u003e and the player will not press anything in the current frame, the average at frame \u003ccode\u003et+1\u003c/code\u003e will be\u003c/p\u003e\n$$ latex a(t+1) = a(t) \\frac{t}{t+1} $$\u003cp\u003eThis factor depends on the elapsed time and becomes \u003cem\u003e\u0026ldquo;almost 1\u0026rdquo;\u003c/em\u003e very quickly. You don\u0026rsquo;t want that. You want to keep your player on the narrow land between \u0026ldquo;boredom\u0026rdquo; and \u0026ldquo;frustration\u0026rdquo;. You cannot give to your player the possibility to win without doing nothing for 30 seconds.\u003c/p\u003e\n\u003cp\u003eThe solution to this problem is simple. Use a Moving Average. The player will have to push the button faster than the threshold, but the average is computed only using the data from the last 5 second (or any other time window you want).\u003c/p\u003e","tags":["tips","algorithms"]}],"2015/12":[{"title":"YoshiX: Experiments made easy","url":"https://www.davideaversa.it/blog/yoshix-experiments-made-easy/","date":"2015-12-30","summary":"\u003cp\u003eSome months ago, I was frustrated by the monotony of the task of writing, running and collecting data from experiments. I was bored of facing always the same challenges, writing always the same code and facing always the same problems. In addition, every experiment ran on different platforms, and they quickly become difficult to replicate (and this should be the very point of every experiment).\u003c/p\u003e\n\u003cp\u003eThus, I decided to write my personal framework for running experiments in Python: \u003ca href=\"%C2%A0https://github.com/THeK3nger/yoshix\"\u003eYoshiX\u003c/a\u003e. The idea behind YoshiX, inspired by classical Unit Testing libraries, is quite simple. You write your test in a separate file, then you run \u003ccode\u003eyoshix\u003c/code\u003e and it automatically finds every experiment in a specific folder, runs them, and collects the output in the format of choice.\u003c/p\u003e\n\u003cp\u003eIt is a simple tool; I still have not spent a lot of time in it. But I think it has some interesting developments. Let\u0026rsquo;s look into some details.\u003c/p\u003e","tags":["python","yoshix"]},{"title":"The most promising languages of 2016","url":"https://www.davideaversa.it/blog/the-most-promising-languages-of-2016/","date":"2015-12-28","summary":"\u003cp\u003eIt is time to update one othe most popular article in this blog. It is time to talk about the most promising languages of 2016! But first, let me repeat the small notice I did the last year. The languages I am listing below \u003cstrong\u003eare not\u003c/strong\u003e the most used languages, or the languages that you have to learn in order to find a great job as a developer. There are many more established languages that fill this role. Languages such as C++, Java, C#, Python and JavaScript are way more solid and safe if you are looking for a job or to start a developer career.\u003c/p\u003e\n\u003cp\u003eInstead, I am trying to list emerging languages that may become more important at the end of 2016. This list is for you if: 1) you are passionate about programming languages 2) you want to learn something new because you are bored with your current language 3) you want to bet on a language hoping that it will become mainstream (and thus, you will be one of the early experts in that language, and this implies nice job opportunity). Or you can read this list because you are simply interested on where the language research and development is going in the real world (academic research is a totally different story).\u003c/p\u003e","tags":["elixir","nim","programming language","rust","swift","typescript"]},{"title":"Turn-based Battle Systems - Chapter 2 - Analytical Analysis","url":"https://www.davideaversa.it/blog/turn-based-battle-systems-chapter-2-analytical-analysis/","date":"2015-12-22","summary":"\u003cp\u003eHello everybody! It is time to continue with our series on Pokemon-like battle systems. In this chapter I will be more general: now we have our beautiful damage formula and a draft of our characters sheet, it is time to quickly check if the game the formula is balanced. There are a lot of questions that we want to answer as quick as possible. How much HP the enemy must have? What is a good value for the attack power? Is the damage formula fair enough? The critical strike is too much? The randomness is too much? \u003cem\u003eIs it fun?\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eExcept for the last question, we can try to answer them just looking at the damage formula. Obviously we can not answer all the questions now, but if there is some evident mistake, we will be able to catch it as soon as possible. There are several ways to analyse the tuning and balancing problem for a damage formula (and thus for a large part of the combat system): \u003cstrong\u003eanalytically\u003c/strong\u003e, with \u003cstrong\u003eGoogle Sheet/Excel\u003c/strong\u003e, and with a quick \u003cstrong\u003esoftware prototype\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eIn this article we will start from the first step: the analytical analysis.\u003c/p\u003e","tags":["gamedesign","pokemon","turn based combat system"]},{"title":"The Challenge of Infinite Space","url":"https://www.davideaversa.it/blog/the-challenge-of-infinite-space/","date":"2015-12-19","summary":"\u003ch2 id=\"aka-why-elite-dangerous-star-citizen-and-no-mans-sky-could-be-doomed-to-fail\"\u003eA.K.A. why Elite: Dangerous, Star Citizen and No Man’s Sky could be doomed to fail\u003c/h2\u003e\n\u003cp\u003eSince the beginning of the videogame era, developers aim to reach a perfect simulation of the world. “So realistic!” is probably one of the most abused comment to a videogame ever. The videogame industry tried to reach realistic graphic, realistic sounds, realistic landscapes and realistic \u003cstrong\u003eNon-Player Characters\u003c/strong\u003e. However, reaching the perfect realism is a never-ending quest. As soon as we reach something, desire drives us to seek more.\u003c/p\u003e\n\u003cp\u003eNow that we have extraordinary graphic capabilities and stunning landscapes, some developers are going to raise the bar to a much bigger task: simulating the universe (or at least, the galaxy). We are not in the first (game) generation who is trying to achieve that (the original \u003ca href=\"https://en.wikipedia.org/wiki/Elite_(video_game)\"\u003eElite\u003c/a\u003e is a very old game indeed), but we are for sure in the first generation who can reach this goal; at least to some extent.\u003c/p\u003e\n\u003cp\u003eWe have the technical capabilities for doing amazing things: we can generate and simulate hundreds of billions of star systems, we can allow the player to travel to every one of them, explore and land on every square unit of the planet surface, every asteroid, every satellite. Software/games such \u003cstrong\u003e\u003ca href=\"https://spaceengine.org/\"\u003eSpace Engine\u003c/a\u003e\u003c/strong\u003e can clearly show us what a lonely developer can do in its spare time. Imagine what a game developers team can do on their full time job! It is not a surprise that several studios spotted the niche in the market and tried to use this power for a real game. After all, it is not “simulation of experience” one of the meaning of “game”?\u003c/p\u003e","tags":["elite: dangerous","gamedesign","no man's sky","pcg","star citizen"]},{"title":"How to design a Pokémon-like Combat System","url":"https://www.davideaversa.it/blog/how-to-design-a-pokemon-like-combat-system-chapter-1/","date":"2015-12-07","summary":"\u003cp\u003eThe \u003cstrong\u003eCombat System\u003c/strong\u003e is one of the main gameplay element in a game. Of course there are a lot of games without \u0026ldquo;combat\u0026rdquo;: puzzles, simulation games, driving games and so on. However (and you know this in the depths of your soul) that your game \u003cstrong\u003emust have\u003c/strong\u003e an amazing combat system because we \u003cstrong\u003eLOVE\u003c/strong\u003e beating the crap out of our enemies! Other games mechanics are good, but a good fight can be \u003cstrong\u003eAMAZING\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003eThere are several ways to implement a combat system but, at the end of the day, we can divide the heterogeneous world of combat systems into two big clusters: \u003cstrong\u003ereal time combat systems\u003c/strong\u003e and \u003cstrong\u003eturn-based combat systems\u003c/strong\u003e. The first are exciting but they rapidly becomes hard to implement. We will need to do a lot of animations, tuning collision boxes and tons of graphical stuff. If you are a poor programmer like me, you cannot do that (\u003cem\u003esad face :\u0026lt;\u003c/em\u003e).\u003c/p\u003e\n\u003cp\u003eWith turn-based combat system, instead, you can do the most complex things you can image! You can take into account hundreds of variables and statistics, create complex strategic combinations, evocations, magic, everything. You can use dice, cards, tokens, \u003cstrong\u003eeverything\u003c/strong\u003e in order to emulate an epic combat between a dragon and drunk dwarf with a wooden leg. Because turn based combat systems are an explicit abstraction of a real combat, the player can absorb without complaining a bigger level abstraction. The same cannot be said for a real-time combat system in which just an ugly animation can be labeled as \u0026ldquo;ugly designed and sluggish combat\u0026rdquo; and provide frustration to the player.\u003c/p\u003e\n\u003cp\u003eSo we are going to implement a turn-based combat system! But how? Well, this obviously depends on which type of turn-based combat system you want to do. For now, we will try to do a replica of the first turn-based game I’ve ever played: the \u003cstrong\u003ePokemon Combat System\u003c/strong\u003e!\u003c/p\u003e\n\u003cp\u003eThis is a nice combat system to replicate as a tutorial because is not too complex (especially in Gen. 1 or 2), but contains several tricky points that we need to handle! We will explore the design and the implementation of this combat system in details. We will see how to design the combat system, how to do a first balancing and test on paper, and every implementation step! So let’s start!\u003c/p\u003e","tags":["gamedesign","pokemon","turn based combat system"]}],"2015/10":[{"title":"Let me introduce your worst rival: yourself","url":"https://www.davideaversa.it/blog/let-me-introduce-your-worst-rival-yourself/","date":"2015-10-25","summary":"\u003cp\u003eHere it is a new article on Medium on a simple game to beat (or to measure) your procrastination level! :)\u003c/p\u003e\n\u003cscript async src=\"https://static.medium.com/embed.js\"\u003e\u003c/script\u003e\u003ca class=\"m-story\" data-collapsed=\"true\" data-width=\"100%\" href=\"https://medium.com/@thek3nger/let-me-introduce-your-worst-rival-yourself-a945bb365baf\"\u003eLet me introduce your worst rival: yourself\u003c/a\u003e","tags":["procrastination","self-improvement"]},{"title":"When cheating with a robot is really cheating?","url":"https://www.davideaversa.it/blog/when-cheating-with-a-robot-is-really-cheating/","date":"2015-10-07","summary":"\u003cp\u003eHi guys. I wrote a small \u003cem\u003ereflection\u003c/em\u003e on the future of Artificial Intelligence. The question is always the same: when would we consider a robot as a \u0026ldquo;living beings\u0026rdquo; with self-awareness, emotions and all the human equipment? My point is that we could stop asking ourselves this question because soon or later sex-robots will provide us the answer. Anyway, this is the article I wrote on Medium. Take a look. :)\u003c/p\u003e","tags":["artificial intelligence","future","sex"]}],"2015/09":[{"title":"A Month of Writing: August 2015","url":"https://www.davideaversa.it/blog/a-month-of-writing-august-15/","date":"2015-09-15","summary":"\u003cp\u003eA month ago I started questioning my ability to stay focused on thing I like. Kill the \u003cstrong\u003eprocrastination monkey\u003c/strong\u003e is the first thing to achieve any goal in life and I felt that I was losing that battle. Last year was not easy, mostly because I started feeling incapable to achieve anything useful in work. This, in turn, feeds the procrastination monkey, causing more frustration and so on. An evil infinite explosive mental and motivational cycle that drown you, slowly, silently. I had to break the cycle!\u003c/p\u003e\n\u003cp\u003eBut where I could start? I decided to stress myself on an old obsession of mine: writing. As you know I have stories in mind and I have a deep need to tell these stories. There are many ways to express these stories (music or gamedev are the most important one for me!) but writing it is much less complex: it is just you, the story and a piece of paper. There is no technology involved, no extra abilities such as visual arts, no constraints, no distractions. I did not want to feed \u003cem\u003ep-monkey\u003c/em\u003e with a lot of fake-problems to justify myself for not doing anything every day. So, I took a piece of paper and I wrote on it: \u003cem\u003eI\u0026rsquo;ll write One Million Word of fiction\u003c/em\u003e. It is important to have some kind of metric to measure your progress and the number of words written is a perfect metric! Every night, at the end of the day, I can update the counter, see the target approaching and feel good about myself.\u003c/p\u003e\n\u003cp\u003eA month is passed and I want to share this small step with you.\u003c/p\u003e","tags":["self-improvement","writing"]}],"2015/08":[{"title":"Boost Hierarchical Pathfinding with Extended Graphs","url":"https://www.davideaversa.it/blog/boost-hierarchical-pathfinding-with-extended-graphs/","date":"2015-08-28","summary":"\u003cp\u003eAs you may already know if you \u003ca href=\"https://twitter.com/thek3nger\"\u003efollow me on Twitter\u003c/a\u003e (why not?), I often work with pathfinding. This thing started as a small \u003cem\u003eside quest\u003c/em\u003e during my Ph.D. and then grew up to become the \u003cstrong\u003emain topic of my future Ph.D. thesis\u003c/strong\u003e. I\u0026rsquo;m still quite sure that this is not what I chose back in the day but, well, now that I\u0026rsquo;m on the dancefloor I have to keep dancing.\u003c/p\u003e\n\u003cp\u003eReturning to the subject, my work is totally focused on pathfinding with \u003cstrong\u003ecognitive capabilities\u003c/strong\u003e. This means that I try to embed pathfinding into a more high-level reasoning pattern or, if you prefer, to push high level elements - such as reasoning with keys and equipment - down into the pathfinding level. As a consequence I use hierarchical abstraction of the map space \u003cstrong\u003ea lot\u003c/strong\u003e and for \u0026ldquo;a lot\u0026rdquo; I mean that in the last year and half I\u0026rsquo;ve implemented \u003cstrong\u003eHierarchical Pathfinding\u003c/strong\u003e (HPA*) at least 4-5 times in different context and languages.\u003c/p\u003e","tags":["graphs","hpa","pathfinding","search algorithms"]}],"2015/06":[{"title":"Bacon Game Jam 09: Back in Business","url":"https://www.davideaversa.it/blog/bacon-game-jam-09-back-in-business/","date":"2015-06-19","summary":"\u003cp\u003eHi everyone! I\u0026rsquo;m here to tell you the story of my last game jam: the \u003cstrong\u003eBacon Game Jam 09\u003c/strong\u003e. It was a long time since my last game jam (and my game-dev stuff in general). I was a bit distracted by other part of my life and, in general, I wasn\u0026rsquo;t in the best mood. Because of this, I\u0026rsquo;m very happy to partecipate to  this jam, also if the final result is not completely satisfying.\u003c/p\u003e\n\u003cp\u003eAnyway, let\u0026rsquo;s start!\u003c/p\u003e","tags":["bacongamejam","bacongamejam09","gamejam","postmortem"]},{"title":"Procedural Contents Generation in Modern Videogames","url":"https://www.davideaversa.it/blog/procedural-contents-generation-in-modern-videogames/","date":"2015-06-12","summary":"\u003cp\u003e\u003cstrong\u003e8th September 2016 Update: I uploaded these slides on SlideShare. \u003ca href=\"http://www.slideshare.net/DavideAversa/insight#summary/65824533/%3Frange%3D1m\"\u003eYou can see them here\u003c/a\u003e.\u003c/strong\u003e Hi guys! In the last month I\u0026rsquo;ve prepared a presentation on \u003cstrong\u003eProcedural Contents Generation history and techniques\u003c/strong\u003e in commercial videogames. I did this presentation for a Game Jam some time ago and for a series of meetings in our university. I think it is a nice summary of the main elements of PCG in commercial games, so I think it is worth to share this presentation with you!\u003c/p\u003e","tags":["pcg","procedural content generation"]}],"2015/04":[{"title":"Weekly Inspirational #2","url":"https://www.davideaversa.it/blog/weekly-inspirational-2/","date":"2015-04-17","summary":"\u003cp\u003eHere we are again! For five brand new inspirational articles found on the web (mostly on Reddit to be honest, but who care). This time we will see a lot of Procedurally Contents Generation algorithms, another emulation related article, and the smallest academic paper of all time! Let\u0026rsquo;s start!\u003c/p\u003e","tags":null},{"title":"Weekly Inspirational #1","url":"https://www.davideaversa.it/blog/weekly-inspirational-1/","date":"2015-04-10","summary":"\u003cp\u003eStay inspired during the boring working week is the best way to fight procrastination and stay on board of the \u003cem\u003e\u0026ldquo;do-stuff\u0026rdquo;\u003c/em\u003e  train. There is nothing better than looking at a creative a work to say \u0026ldquo;Cool! I want to do something similar, too!\u0026rdquo; (or to lay down crying in depression, but this is another topic I suppose). For this reason I\u0026rsquo;d like to share with you \u003cstrong\u003e5 of the best inspirational and interesting stuff of the week\u003c/strong\u003e that the web can provide. It is good food for your brain! (PS: Someone could say that I spend too much time reading and looking for these stuff\u0026hellip; well\u0026hellip; ehm\u0026hellip; please, don\u0026rsquo;t. Let me dream.)\u003c/p\u003e","tags":["clojure","inspirational"]},{"title":"Javascript is not so bad, after all","url":"https://www.davideaversa.it/blog/javascript-is-not-so-bad-after-all/","date":"2015-04-08","summary":"\u003cp\u003eI have to admit it. I was a big Javascript hater. I used to criticize the language on every possible aspect: syntax, maintainability, error prevention and management, and so on. Let me be clear, I still have a lot of concerns on all this things. I wasn\u0026rsquo;t wrong. Javascript\u0026rsquo;s syntax can be a nightmare (and this is why there are \u003ca href=\"https://github.com/jashkenas/coffeescript/wiki/List-of-languages-that-compile-to-JS\"\u003eso many languages that transpile to Javascript\u003c/a\u003e), maintainability is a state-of-the-mind more than a language feature and a lot of Javascript design issues are an infinite-bug-spawner. But, after all, it is not so bad and it is going to improve significantly in the future.\u003c/p\u003e\n\u003cp\u003eIn the last months, I get used a lot to the Javascript ecosystem and community and it becomes a language in which I feel quite happy to work with. Let\u0026rsquo;s see why (and why still is not a perfect language).\u003c/p\u003e","tags":["javascript","opinion"]}],"2015/03":[{"title":"Debug with Git Binary Search","url":"https://www.davideaversa.it/blog/debug-with-git-binary-search/","date":"2015-03-29","summary":"\u003cp\u003eI don\u0026rsquo;t think I have to spend too many words on Git. Every programmer who was not on the moon in the last 5 years should already be a proficient Git user. Git is an amazing, flexible and powerful \u003cstrong\u003eversion control system\u003c/strong\u003e. Sure, as Mercury fans often claim, its command\u0026rsquo;s syntax is often really unclear (\u003ccode\u003egit reset HEAD \\\u0026lt;file\\\u0026gt;\u003c/code\u003e anyone?) and some operation are really unintuitive and hard to remember (e.g., remove a remote branch?). But Git is the most popular, successful and probably powerful tools available for VCS. That\u0026rsquo;s a fact.\u003c/p\u003e\n\u003cp\u003eMany of you use Git daily, I\u0026rsquo;m sure of this. You are using it for managing projects, tracking version of your software, personal documents or to collaborate with other colleagues and open source softwares. But I\u0026rsquo;m pretty sure that many of you don\u0026rsquo;t know that you can use Git for \u003cstrong\u003edebug\u003c/strong\u003e! Yes, Git can be one of your debugging tools too! Let\u0026rsquo;s see how!\u003c/p\u003e","tags":["debug","git","vcs"]},{"title":"Never underestimate a smooth workflow","url":"https://www.davideaversa.it/blog/never-underestimate-a-smooth-workflow/","date":"2015-03-10","summary":"\u003cp\u003eTo be productive, you have to be constant. To be constant, you have to be organized. To be organized, you have to be happy about what are you doing. This are three simple rules that I try to apply to my work. The first two are quite straightforward and they don\u0026rsquo;t really need explanations. The third one, however, is more delicate. What do we mean with \u0026ldquo;to be happy about what we are doing\u0026rdquo;? Why this is connected with \u0026ldquo;to be organized\u0026rdquo;? Well, the answer is \u003cstrong\u003epositive feedback\u003c/strong\u003e. When I\u0026rsquo;m happy with what I\u0026rsquo;m doing I\u0026rsquo;m able to stick to the workflow I\u0026rsquo;m using. At the same time, a good workflow means less time spent debugging, less trivial bugs committed, less troubles during deployment, in other words: an happier developer!\u003c/p\u003e\n\u003cp\u003eThis positive feedback loop can really increase your productivity. The real problem is, how can we find this magic smooth workflow? I don\u0026rsquo;t know. I cannot tell you the magic solution to every developer problems. You have to find this by yourselves. The only thing I can do now is telling you my actual workflow. This may be a good starting point for some of you. :)\u003c/p\u003e","tags":["ci","coverage","github","workflow"]},{"title":"Quadarto: a didactic project in Haskell","url":"https://www.davideaversa.it/blog/quadarto-a-didactic-project-in-haskell/","date":"2015-03-05","summary":"\u003cp\u003eThe last week I spent some time build a small tool for abstracting  an image into a mosaic, for fun. To do this I\u0026rsquo;ve used \u003ca href=\"https://www.haskell.org/\"\u003eHaskell\u003c/a\u003e, of course. However, this is my first \u0026ldquo;complete\u0026rdquo; program I\u0026rsquo;ve written in Haskell. Before that, I\u0026rsquo;ve read a lot about Haskell and used it for solving tons of \u003ca href=\"https://projecteuler.net/\"\u003eProjectEulers\u003c/a\u003e\u0026rsquo;s problems. However writing  program that performs real stuff, such as loading an image, do stuff and write a new image is a completely different things. Using Haskell for the Project Euler problem is almost like cheating, using Haskell for a _side-effect-full _application can be a pain in the neck if you are not prepared.\u003c/p\u003e\n\u003cp\u003eSo the idea was to do this trying to be as much idiomatic as possible so that this code could be used by new haskellers in order to learn something on the language. It is still not really idiomatic, but I\u0026rsquo;m working on that.\u003c/p\u003e","tags":["github","haskell","quadarto"]}],"2015/02":[{"title":"The definitive guide to start with ClojureScript","url":"https://www.davideaversa.it/blog/the-definitive-guide-to-start-with-clojurescript/","date":"2015-02-14","summary":"\u003cp\u003eYesterday, while my working machine was crunching tons of numbers, graphs and maps to produce some (hopefully) meaningful data for a research work, I was looking for a simple guide to build a simple web page with ClojureScript. Unfortunately, I was not able to find something that was at the same time straightforward, simple, minimal and explained! So, I decided to write something by myself to avoid my pain to some future young clojurist. The main problem with the guides I\u0026rsquo;ve found online were:\u003c/p\u003e","tags":["clojure","clojurescript","javascript","leiningen"]},{"title":"My peek on Atom","url":"https://www.davideaversa.it/blog/my-peek-on-atom/","date":"2015-02-01","summary":"\u003cp\u003ePeople who know me already know: I\u0026rsquo;m a tool maniac. I can spend hours searching for the perfect configuration of keys, plugins, colors, themes, debugging tools and so on, and unfortunately this is how I waste a lot of time every now and then. Text editors and IDE are one of these big tools that I cannot stop searching for the perfect one. The real problem, though, is that I cannot find satisfaction for more than a month on a particular editor, so, during my life as a coder I used with a certain degree of experience tons of editors such as Vim, Emacs, Sublime Text, GEdit and much more. Honestly! Look at this! If  I had spent less time on tweaking my editors and more on coding, now I would have more side projects completed for sure. Anyway\u0026hellip;\u003c/p\u003e\n\u003cp\u003eI have a certain envy for those developers that are able to stick on, for instance, Vim for more than 20 years. They are happy and enthusiastic of their editor! Lucky them! But I\u0026rsquo;m not in this way. Maybe I find the exploration more rewarding. I don\u0026rsquo;t know.\u003c/p\u003e\n\u003cp\u003eSo, coming back to the topic, when I used Linux I was happy too and my favourite editor was by far Vim. Yes, the learning curve is steep as hell but this thing has never scared me (I try to learn too many newborn and cryptic programming languages to be scared by a text editor, complex or not that may be. Then, a couple of years ago, I moved back to Windows and I started to work on bigger project. For some reason, my pleasure and muscle memory in using Vim began to disappear.\u003c/p\u003e\n\u003cp\u003eNow, there is a long story made of IDE and text editors but I don\u0026rsquo;t want to spend too much time talking about my evolution (or devolution, your call) in the world of programming editors. The real goal of this article is to explain why, for now, I\u0026rsquo;m happily landed on \u003ca href=\"https://atom.io/\"\u003eAtom\u003c/a\u003e, the text editor mad in GitHub.\u003c/p\u003e","tags":["atom","editor"]}],"2015/01":[{"title":"Global Game Jam 2015 Postmortem","url":"https://www.davideaversa.it/blog/global-game-jam-2015-postmortem/","date":"2015-01-31","summary":"\u003cp\u003eFirst of all, some time ago I stated that I would like to start writing more. Unfortunately, a combination of personal issues, flu and other psychological breaks did not allow me to respect this promise. But I\u0026rsquo;ll be back soon. I swear.\u003c/p\u003e\n\u003cp\u003eSecond, it is now time to talk about the game we developed for the \u003ca href=\"http://globalgamejam.org\"\u003eGlobal Game Jam 2015\u003c/a\u003e (and obviously valid as a January entry for my \u003ca href=\"http://www.onegameamonth.com/\"\u003eOne Game A Month\u003c/a\u003e challenge!) I\u0026rsquo;m very happy with this game also if it is not a real \u0026ldquo;game\u0026rdquo; because (little spoiler) it is an online game who require a big amount of users to be interesting. I\u0026rsquo;ll never have so many users connected at the same time, so it is useless in practice. The good thing is that it was a big technical challenge and to be able to complete everything in less than 30 hours was really exciting. But first things first.\u003c/p\u003e","tags":["1gam","ggj210","global game jam","postmortem"]},{"title":"The most promising languages of 2015 - Part 2","url":"https://www.davideaversa.it/blog/the-most-promising-languages-of-2015-part-2/","date":"2015-01-11","summary":"\u003cp\u003e\u003cstrong\u003e\u003cspan style=\"color: #ff0000;\"\u003eUPDATE: \u003ca style=\"color: #ff0000;\" href=\"/2015/12/the-most-promising-languages-of-2016/\"\u003eThere is a new version of this article for 2016!\u003c/a\u003e\u003c/span\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eIn the the \u003ca href=\"/2015/01/the-most-promising-languages-of-2015-part-1/\"\u003eprevious post\u003c/a\u003e we have seen what are the general trends of the previous year with regard to the fascinating world of programming languages. To summarize, we can say the there are two strong trends: 1) more functional-inspired elements in programming languages 2) more statically strong typed languages that can be compiled in machine code.\u003c/p\u003e\n\u003cp\u003eNow, in the current article, I want to list all the languages which have attracted interests in the last years and that represent the implementation of these trends. Obviously, as I said in the previous article, these are not languages on which to bet their careers: these are new trendy languages but the real world does not work on \u0026ldquo;trends\u0026rdquo;, but on software, oil, commerce, health care and an hundred of categories in which the actual programming languages are doing great with an huge amount of per-existing codebase.\u003c/p\u003e\n\u003cp\u003eHowever, it is nice to explore the \u0026ldquo;future\u0026rdquo;, so, let\u0026rsquo;s take a look.\u003c/p\u003e","tags":["functional programming","go","julia","nim","programming language","rust"]},{"title":"The most promising languages of 2015 - Part 1","url":"https://www.davideaversa.it/blog/the-most-promising-languages-of-2015-part-1/","date":"2015-01-03","summary":"\u003cp\u003e\u003cstrong\u003e\u003cspan style=\"color: #ff0000;\"\u003eUPDATE: \u003ca style=\"color: #ff0000;\" href=\"/2015/12/the-most-promising-languages-of-2016/\"\u003eThere is a new version of this article for 2016!\u003c/a\u003e\u003c/span\u003e\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eAt the very beginning of a new year, it is customary to try to predict what will happen in the future. That is the selling point of each big astrology book which pollute bookstores and newsstands in this part of the year.\u003c/p\u003e\n\u003cp\u003ePersonally I\u0026rsquo;m not a fortune teller, but I think that can be interesting to try to set the route of the new year on the basis of the one just past. Obviously, I do not pretend to talk on every possible kind of events, but for the one I\u0026rsquo;m interested in, I think I can say something interesting or, at least, start a discussion.\u003c/p\u003e\n\u003cp\u003eSo, let\u0026rsquo;s try to spend some words on the trends regarding programming languages and software development.\u003c/p\u003e","tags":["functional programming","programming language"]},{"title":"One Game A Month - December 2014","url":"https://www.davideaversa.it/blog/one-game-a-month-december-2014/","date":"2015-01-01","summary":"\u003cp\u003eThe new year is come, full of good resolutions and appealing feelings of renovation. For my part I have two main target. The first one is to write a bit more. I always feel that I have a lot to say but, for some reason, I usually get stuck in a kind of writer\u0026rsquo;s block every time I finally found time for writing. So, because the only way to beat a writer\u0026rsquo;s block is to write, and write and write, I decided to spend at least January into a more strict scheduling. Maybe there will be a good impact in the blog post frequency too.\u003c/p\u003e\n\u003cp\u003eThe second \u0026ldquo;resolution\u0026rdquo; is to beat the \u003ca href=\"http://onegameamonth.com/\"\u003eOne Game A Month\u003c/a\u003e challenge for 2015. The goal is to complete a game each month. You don\u0026rsquo;t have to realize the full game in one month, you just have to complete and release it. I think it is a nice opportunity to challenge myself on some specific game development aspect while forcing some deadline (that is always a good thing).\u003c/p\u003e\n\u003cp\u003eHowever, taking advantage of the \u003ca href=\"http://ludumdare.com/compo/\"\u003eLudum Dare\u003c/a\u003e jam on December, I started this challenge a bit in advance. :) So, now I\u0026rsquo;m going to do short post-analysis of my game for the previous month.\u003c/p\u003e","tags":["ludum dare","ludum dare 31","one game a month","unity"]}],"2014/12":[{"title":"LowPoly in Blender","url":"https://www.davideaversa.it/blog/lowpoly-in-blender/","date":"2014-12-02","summary":"\u003cp\u003eRecently I started exploring the low poly modeling in Blender. Well, there is this guy on youtube that is simply amazing. I really love his work and I\u0026rsquo;d suggest to watch his tutorials. For now I just leave here an appetizer.\u003c/p\u003e\n\u003cdiv style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n\t\t\t\u003ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\" loading=\"eager\" referrerpolicy=\"strict-origin-when-cross-origin\" src=\"https://www.youtube.com/embed/KVvk-F_qnlo?autoplay=0\u0026amp;controls=1\u0026amp;end=0\u0026amp;loop=0\u0026amp;mute=0\u0026amp;start=0\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" title=\"YouTube video\"\u003e\u003c/iframe\u003e\n\t\t\u003c/div\u003e","tags":["blender","low poly"]}],"2014/11":[{"title":"On developer anxiety","url":"https://www.davideaversa.it/blog/on-the-developer-anxiety/","date":"2014-11-24","summary":"\u003cp\u003eYou are finally back home. During your work day your mind was totally a volcano of creativity. You have so many cool ideas to implement (or at least to sketch). You go to your machine and you start to thing to the technical details. Many questions reach your mind. Maybe too many. Is it better to use Python or Haskell, or maybe C++? I have to start implementing my game prototype with Unity or with some other engine? What if in the future I want to add \u0026ldquo;feature X\u0026rdquo; after \u0026ldquo;feature Y\u0026rdquo;? So you start crawling the web for resources, opinions and more information on your problem. And this will generate more questions. You spend two hours in this way and you are still full of doubts. Then it becomes late. You are tired. You will check out this problems tomorrow. But tomorrow you will find others problem and not even a solution. And so on. Until every project loses its momentum.\u003c/p\u003e","tags":["anxiety","productivity","workflow"]},{"title":"Random Maps with Cellular Automata","url":"https://www.davideaversa.it/blog/random-maps-with-cellular-automata/","date":"2014-11-13","summary":"\u003cp\u003eIn the spirit of the \u003ca href=\"www.davideaversa.it/2014/10/towards-the-procjam-2014/\" target=\"_blank\"\u003eProcJam2014\u003c/a\u003e (that unfortunately I have to skip because of a ton of academic duties :\u0026lt;) I\u0026rsquo;m presenting to you a simple algorithm to generate maps: the \u003cstrong\u003ecellular automata generator\u003c/strong\u003e. In particular, cellular automata are very well suited for cave-like environment and, in general, natural maps. It works both in 2D than in 3D and can be easily implemented in no more than 20 minutes.\u003c/p\u003e\n\u003cp\u003eFrom the theoretical point of view, a cellular automata is a discrete model that consist in a regular grid of \u003cem\u003ecells\u003c/em\u003e. Each cell can have a finite number of states (usually two: on and off). On top of this grid, a system of \u003cem\u003erules\u003c/em\u003e is built to control the \u003cem\u003eevolution\u003c/em\u003e of the cells. The rule are usually simple and \u003cem\u003elocal\u003c/em\u003e: this means that each rule decide on the state of a single cell just on the basis of a limited set of cells (the \u003cem\u003eneighborhood\u003c/em\u003e) located around the cell of interest. No rule on the global state of the grid can exist! For instance \u0026ldquo;the total number of cell in the on state is less than X\u0026rdquo; is NOT a local rule.\u003c/p\u003e","tags":["cellular automata","pcg","procedural content generation"]}],"2014/10":[{"title":"Towards the ProcJam 2014","url":"https://www.davideaversa.it/blog/towards-the-procjam-2014/","date":"2014-10-30","summary":"\u003cp\u003e\u003ca title=\"http://en.wikipedia.org/wiki/Procedural_generation\" href=\"Procedural Content Generation\" target=\"_blank\"\u003eProcedural Contents Generation\u003c/a\u003e (PCG) is a family of techniques, algorithms and procedures used for generating contents in an automatic way rather than manually. In other words, using PCG, game contents can be created by the host computer instead of pre-design everything at development time.\u003c/p\u003e\n\u003cp\u003eIn recent years, PCG is having an increasing popularity among the academic and game development communities. There are two big reasons behind this success: first, it allow the designer to generate an near-infinite amount of contents without the effort of manually design each element by hand (and that\u0026rsquo;s why the indie scene \u003cstrong\u003elove\u003c/strong\u003e PCG), second it increase the game longevity and replayability value of the game (because, for instance, the game it is always different after each run and so it can be replayed more). This two things combined are The Dream for every game designer: huge longevity with low effort at design time.\u003c/p\u003e","tags":["gamejam","pcg"]},{"title":"Back from AIIDE 2014","url":"https://www.davideaversa.it/blog/back-from-aiide-2014/","date":"2014-10-18","summary":"\u003cp\u003eHi everyone! Sorry for the long absence but my days are really full of commitments and terrible news. It is still not over, but but I really need write about something before is too late. :) During the last 3th-7th October, the tenth conference on \u003cstrong\u003eArtificial Intelligence for Interactive Digital Entertainment\u003c/strong\u003e (AIIDE) was held in Raleigh (North Carolina, USA). It was a very interesting conference on AI and games stuff and I am really happy to have joined such amazing things. I mean, this is something that I could proudly say to the 10 years old me and make him happy and unbelieving. I could look the younger me in the eyes and say \u0026ldquo;In the future you\u0026rsquo;ll participate in a conference about artificial intelligence and videogames with some of the most beautiful mind in that field!\u0026rdquo;. Wow. However, unfortunately I received too many commitments and bad news from Italy to be able to freely enjoy this conference and to be fully concentrated. I\u0026rsquo;m really sorry of this.\u003c/p\u003e","tags":["aiide","aiide2014","bdp","pathfinding"]}],"2014/09":[{"title":"Speccy Jam 2014 Postmortem","url":"https://www.davideaversa.it/blog/speccy-jam-2014-postmortem/","date":"2014-09-08","summary":"\u003cp\u003eAs I said in a previous post, in these days me and \u003ca href=\"https://twitter.com/mauriliodc\" target=\"_blank\"\u003emy colleague\u003c/a\u003e at Noctua were working in the \u003ca href=\"http://www.speccyjam.com/\" target=\"_blank\"\u003eSpeccyJam 2014\u003c/a\u003e. The goal of the jam/competition is to make a game with the same \u003cem\u003elook and feel \u003c/em\u003eof an original \u003ca href=\"http://en.wikipedia.org/wiki/ZX_Spectrum\" target=\"_blank\"\u003eZX Spectrum\u003c/a\u003e game. This introduces a lot of interesting limitations. First, it constrains our resolution to  256 × 192 (that is, however, a really big improvement respect to the \u003cstrong\u003eLowRezJam\u003c/strong\u003e :D), second it forces us to use only 15 colors. But most important of all, the non-strict limitation, is to simulate the \u003ca href=\"http://en.wikipedia.org/wiki/Attribute_clash\" target=\"_blank\"\u003ecolor clash effect\u003c/a\u003e of the original Spectrum on modern engines. This was the most hard constraint that forced us to explore 2D shaders and a lot of simulated low-level algorithms on top of a modern engine like Unity 3D.\u003c/p\u003e","tags":["gamejam","postmortem","speccyjam"]},{"title":"Random Goblin Name Generator","url":"https://www.davideaversa.it/blog/random-goblin-name-generator/","date":"2014-09-04","summary":"\u003cp\u003eHi everyone. In these days, me and my friend and colleague at \u003cstrong\u003eNoctua\u003c/strong\u003e (EDIT: we don\u0026rsquo;t have a webpage anymore) are working at a new game jam: the \u003ca href=\"http://www.speccyjam.com/\"\u003eSpeccyJam\u003c/a\u003e. The goal of this jam is to recreate a game with the same feel and look of an original \u003cstrong\u003eZX Spectrum\u003c/strong\u003e game. We chose to implement a \u0026ldquo;managerial game\u0026rdquo; in which the player takes the role of a fantasy blacksmith that have to increase its fame crafting amazing weapons. This jam is very formative because it is forcing us to work in a low resolution with a very limited color space and, also, to explore the amazing kingdom of 2D shaders in Unity in order to recreate the \u003ca href=\"http://en.wikipedia.org/wiki/Attribute_clash\"\u003evisual glitches of the original console\u003c/a\u003e.\u003c/p\u003e","tags":["pcg","procedural content generation"]}],"2014/08":[{"title":"Back from ECAI 2014","url":"https://www.davideaversa.it/blog/back-from-ecai-2014/","date":"2014-08-25","summary":"\u003cp\u003eHi everyone! I\u0026rsquo;m back. In the last week I was in \u003cstrong\u003ePrague\u003c/strong\u003e to attend to the \u003cstrong\u003e21th European Conerence on Artificial Intelligence\u003c/strong\u003e (a.k.a. ECAI2014). This was my first real academic conference since I started my Ph.D. in the last November.  As I said before, conferences are amazing events where I get stressed like never before but, at the end, I come back home super-excited and full of inspirational ideas. Moreover, in these type of events you are surrounded by amazing people that do what you do. Meeting and talking with them is always insightful and amazing. So, first of all, thanks to all the nice people I met during this conference.\u003c/p\u003e","tags":["ecai2014","workshop"]},{"title":"In search of the \u0026#8220;Philosopher\u0026#8217;s Code\u0026#8221;","url":"https://www.davideaversa.it/blog/in-search-of-the-philosophers-code/","date":"2014-08-16","summary":"In search of the Philosopher\u0026rsquo;s Code. A small manifest on my actual thoughts and interests in programming.","tags":["functional programming","opinion"]},{"title":"Lazy, Bloody Summer (starting again)","url":"https://www.davideaversa.it/blog/lazy-bloody-summer-starting-again/","date":"2014-08-13","summary":"\u003cp\u003eI don\u0026rsquo;t know if my life is starting to be more interesting or just more hard. Anyhow, in this bloody hot August summer I really feel the need to recollect my digital goods and finally put all of them in a single place. Unfortunately, it is too hot here and my will is at historic lows so this \u0026ldquo;restyling\u0026rdquo; is taking longer than expected. As I said before, my life is just increasing in complexity and, as a consequence, I need some place for my academic things, a place for my artistic side, a place for my gamedev ambitions, a place for my work, a place for my spare time, a place for my nerdy things. I usually tried to keep all this thing separated and using this website just as an index. Thinking about that today, I don\u0026rsquo;t know why. Maybe because I always had problems handling my multiple me, my multiple sides of my interests. However, I really cannot handle all this fragmentation anymore. It is just too complicated. So, I have shut down everything and I created this. It is not a special website about something, is just one website, just about me. (Moreover, in this place there were a shitty page the I promised myself to renew for centuries. Thus, I seized the opportunity and now I\u0026rsquo;ve solved the two problem at once. Nice job, indeed.\u003c/p\u003e","tags":["ecai"]}]}