Ruxandra Simion2019-11-21T17:33:53+02:00https://ruxandraS.github.io/Ruxandra Simionruxandrasimion93@gmail.comFive-or-More Modernisation: It's a Wrap2018-08-11T17:00:00+03:00https://ruxandraS.github.io//gnome/2018/08/11/five-or-more-final-thoughts<p>As probably most of you already know, or recently found out, at the beginning of this week the GSoC coding period officially ended, and it is time for us, GSoC students, to submit our final evaluations and the results we achieved thus far. This blog post, as you can probably tell from the title, will be a summary of all of the work I put into modernising <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> throughout the summer months.</p>
<p>My main task was rewriting <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> in Vala since this simple and fun game did not find its way to the list of those included in the <a href="https://wiki.gnome.org/Initiatives/GamesModernisation">Games Modernisation Initiative</a>. This fun, strategy game consists of aligning, as often as possible, five or more objects of the same shape and color, to make them disappear and score points.</p>
<p>Besides the Vala rewrite, there were also some other tasks included, such as migrating to Meson and dropping autotools, as well as keeping the view and logic separated and updating the UI to make this game more relatable for the public and more fresh-looking. However, after thoroughly discussing the details with my mentor, Robert Roth (IRC: evfool), more emphasis was placed upon rewriting the code to Vala, since the GSoC program is specifically designed for software development. However, slight UI modifications were integrated as to match the <a href="https://developer.gnome.org/hig/stable/visual-layout.html.en">visual layout guidelines</a>.</p>
<p>Some of the tasks, namely porting to gettext, porting to Meson and dropping autotools happened earlier on, during the pre-GSoC time frame, in the attempt to familiarise myself with the project and the tasks that would come with it.</p>
<p>Afterward, I started with the easier tasks and advanced towards the more complex ones. At first, I ported the application window and the preferences menu and added callbacks for each of the preferences buttons. I then continued with porting the preview widget displaying the next objects to be rendered on the game board.</p>
<p>Next, it was time to channel my attention towards porting the game board, handling board colour changes and resizing the board alongside the window resize, by using the grid frame functionality inside the <a href="https://gitlab.gnome.org/GNOME/libgnome-games-support">libgnome-games-support</a> library.</p>
<p>The following target was implementing the actual gameplay logic, which consisted of a pathfinding algorithm based on A*, erasing all objects of the same shape and colour aligned in a row, column or diagonal from the board, if there were either five or more than five, and adding to the score whenever that happened. I also made the object movement possible with both clicking and keyboard keys, for more ease of use.</p>
<p>Finishing touches included adding the high scores tables via the <a href="https://gitlab.gnome.org/GNOME/libgnome-games-support">libgnome-games-support</a> library, displaying an option to change the theme of the game, adding a grid to be able to make out easier the actual cells in which different shaped and coloured objects should reside, as well as updating some information contained by the help pages.</p>
<p>Some features, however, could not be done during the GSoC period. These included handling raster game themes, making significant UI updates, as well as some other extra-features I wanted to add, which were not part of the original project description such as gamepad support or sound effects. The fist feature mentioned in this list, handling raster images was decided upon skipping as a suggestion from my mentor, as the existing raster themes were low-resolution and did not scale well to large size and HiDPI displays.</p>
<p>For easier reading, I decided to also include this list of the tasks successfully done during GSoC:</p>
<ul>
<li>Ported from autotools to Meson</li>
<li>Ported application window and preferences menu</li>
<li>Added callbacks for all buttons</li>
<li>Ported widget of next objects to be rendered on the game board</li>
<li>Handled the resize and colour change of the game board</li>
<li>Implemented the gameplay logic (pathfinding, matching objects and calculating scores)</li>
<li>Made gameplay accessible for both mouse clicks and keyboard controls</li>
<li>Added high scores via the <a href="https://gitlab.gnome.org/GNOME/libgnome-games-support">libgnome-games-support</a> library</li>
<li>Handling vector image theme changing</li>
<li>Made slight modifications to the UI to serve as a template and changed the spacing as recommended in the <a href="https://developer.gnome.org/hig/stable/visual-layout.html.en">visual layout guidelines</a>.</li>
<li>Updated documentation.</li>
</ul>
<p>All code is available by accessing this <a href="https://gitlab.gnome.org/GNOME/five-or-more/merge_requests/1">merge request link</a>.</p>
Five-or-More Modernisation: Now You Can Properly Play It2018-08-07T21:30:00+03:00https://ruxandraS.github.io//gnome/2018/08/07/five-or-more-progress-3<p>As Google Summer of Code is officially drawing to an end, all of my attention was focused towards making the <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> Vala version feature-complete. As you probably already know from <a href="https://ruxandras.github.io/gnome/2018/07/30/five-or-more-progress-2.html">my previous blog post</a>, the game was somehow playable at that time, but it was missing some of the key features included in the old version.</p>
<p>So what’s new this time? First and foremost, you can surely notice the game board now sports a grid, which wasn’t there until now. On the same note, there are also animations used for clicking a piece on the board, for an improved gaming experience. For further accessibility, some header bar hints are available at different stages in the game: at the start of any new game, at the end of each game, as well as whenever there is no clear path between the initial position and the cell indicated by the user for the current move.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-3/1-overall-look.gif" width="500" />
<center>Overall final game look</center>
</div>
<p><br /></p>
<p>By using <a href="https://gitlab.gnome.org/GNOME/libgnome-games-support">libgnome-games-support</a>, I was able to implement a high scores table, which gets updated each time the player gets a score ranging in the top 10 highest scores for the chosen board size. The high scores for each of all of the three categories can also be viewed as showed in the screencast below. Also, you can see I have done quite my fair share of testing the functionalities and assuring everything worked as planned 😄.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-3/2-high-scores.gif" width="500" />
<center>High scores</center>
</div>
<p><br /></p>
<p>Further changes include theme changing, although this momentarily only works for the vector themes available in <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a>, namely the ball and shape themes, as implementation for raster images is not fully functional as of this moment.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-3/3-change-theme.gif" width="500" />
<center>Changing theme</center>
</div>
<p><br /></p>
<p>Also, now window size is being saved in between runs, so each time the game starts it will take into consideration the last window size settings, including wether the window was full screened or not.</p>
<p>As for the most exciting change revealed in this blog post, it concerns playing <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> using keyboard controls. Basically, the user can play the game by navigating with the keyboard arrows, the home, end, page up, page down and space, enter or return keys, as described in the <a href="https://help.gnome.org/users/five-or-more/stable/play.html.en">wikipage section for using the keyboard</a>.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-3/4-keyboard-controls.gif" width="500" />
<center>Playing Five-or-More usig keyboard controls</center>
</div>
<p><br /></p>
<p>If you have been following my journey with GSoC up closely, you probablly remember me mentioning something about extra-features in <a href="https://ruxandras.github.io/gnome/2018/05/07/welcome-to-my-blog.html">my first blog post</a>, such as adding gamepad support, sounds, or making some design changes. I need to say I feel optimistic about getting some of these features done in the weeks to come, post GSoC. I feel the ground has been already laid down somehow for gamepad support by adding keyboard controls. Also, <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> has already undergone some slight design changes, such as widget spacing and alignment.</p>
Five-or-More Modernisation: Now They Move!2018-07-30T21:30:00+03:00https://ruxandraS.github.io//gnome/2018/07/30/five-or-more-progress-2<p>These past two weeks I have worked on (probably) the most exciting part of modernising the <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> game. After the new changes, the game is officially playable and fun! But still, there is room for more changes. So let’s jump right to the updates.</p>
<p>First of all, if you remember reading <a href="https://ruxandras.github.io/gnome/2018/07/17/five-or-more-progress.html">my previous blog post</a>, there were no means to interact with a shape, or otherwise move it to any desired cell. The cells inside the game board were <a href="https://ruxandras.github.io/assets/images/progress-report-1/4-spawn-next.gif">filled up randomly</a> on click, using the queue on the top left corner of the window, which contained the next shapes to be rendered inside the game area.</p>
<p>Now, all of that changed, and the user can interact with each individual shape rendered on the game board. The pathfinding system I came up with uses the A* algorithm with a Manhattan distance heuristic to determine the shortest path from the current cell to the destination cell chosen by the player.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-2/1-player-shape-interaction.gif" width="500" />
<center>Player interaction with shapes</center>
</div>
<p><br /></p>
<p>Next, I continued to work on making five (or more 😄) shapes of the same kind aligned in a row, column or diagonal, disappear from the board…</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-2/2-match.gif" width="500" />
<center>Matching five or more shapes in a row</center>
</div>
<p><br /></p>
<p>… and whenever that happens, the player receives points as a result, which are displayed on the top-right corner of the window.</p>
<p>Once I reviewed the screen recordings, I realised I am actually not as good at playing this game. 🙈</p>
Five-or-More Modernisation: Progress Report2018-07-17T11:00:00+03:00https://ruxandraS.github.io//gnome/2018/07/17/five-or-more-progress<p>Over the course of the past couple of months, I was able to achieve a promising progress in modernising <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a>, although I would have to say there is a fair share of aspects to tackle yet.</p>
<p>I opted for rewriting the code module by module, without combining C and Vala code. There was was an <a href="https://gitlab.gnome.org/GNOME/five-or-more/tree/vala-port">old attempt</a> to port <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> to Vala, but I chose not to use it due to the fact that the <a href="https://gitlab.gnome.org/GNOME/five-or-more/tree/vala-port">partial port</a> was 4 years old and it definitely needed an update, which might have taken quite some time, and might have produced some nasty bugs. While doing so, I paid extra attention to keep things nicely separated: all of the currently ported modules separate the game logic from the drawing logic and the UI.</p>
<p>I also managed to port the app menu and the preferences window. However, due to the new <a href="https://wiki.gnome.org/Initiatives/GnomeGoals/AppMenuRetirement">design gudelines</a>, which are currently only in the state of a proposal, the app menu might require future alterations.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-1/1-app-menu.gif" width="500" />
<center>App Menu access with functional callbacks</center>
</div>
<p><br /></p>
<p>The app window is currently resizable and it sports a customisable coloured board. After each click, the next shapes contained inside the next pieces widget are being spawned inside the game board.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/progress-report-1/2-change-color.gif" width="500" />
<center>Changing the board colour from the Preferences menu</center>
<br />
<img src="https://ruxandraS.github.io/assets/images/progress-report-1/3-change-boardsize.gif" width="500" />
<center>Changing the board size from the Preferences menu and resizing the window (for some reason there is a colour flick when recording the screen for this one)</center>
<br />
<img src="https://ruxandraS.github.io/assets/images/progress-report-1/4-spawn-next.gif" width="500" />
<center>Clicking inside the game board area</center>
<br />
</div>
<p><br /></p>
<p>I am currently working on the pathfinding algorithm, which will basically allow the user to move a shape from cell A to cell B inside the game grid.</p>
<p>The short todo list includes adding the game over logic and implementing both the scores and high scores system, by using the <a href="https://gitlab.gnome.org/GNOME/libgnome-games-support">libgnome-games-support</a>. There are also some extra-features to be added, such as animations, sounds and gamepad-support, and providing a fresh looking UI.</p>
GUADEC 20182018-07-15T11:00:00+03:00https://ruxandraS.github.io//gnome/2018/07/15/guadec-2018<p>I would like to begin this special blog post by congratulating everybody for contributing to a memorable <a href="https://2018.guadec.org">GUADEC</a>. This was my first time officially attending the <a href="https://2018.guadec.org">GUADEC</a> conference, after attending as a visitor some of the events held in Manchester during the <a href="https://2017.guadec.org">GUADEC</a> 20th edition last year, and this time it was truly an amazing experience.</p>
<p>After countless talks and many social events that took place during the conference, I have to say my favourite event of them all would definitely have to be the <a href="https://2018.guadec.org/pages/social-events.html">newcomers lunch</a>. At first, I rendered it as nerve-racking. Right before my eyes, the whole thing unfolded as the most frightening social nightmare: having to meet a dozen of unknown people, have lunch and socialise with them, all while avoiding the embarrassment of smiling mid-lunch with a piece of spinach stuck between my teeth (imagine the horror 😬). Looking back now I laugh every time I remember this initial thought. I had the chance to meet some of my favourite GUADEC attendees, whom I might not have otherwise met, and I looked forward to seeing them all together ever since. Therefore, it is really fitting I thank Carlos Soriano for bringing us together and mediating our nice little lunch break so wonderfully and a thank you goes also to all of my newcomer fellows for being so easy-going about it.</p>
<p>However, some of my other favourite events included the talks which took place during the core days. And I would have to say my top favourite included <a href="https://2018.guadec.org/pages/talks-and-events.html#abstract-114-unconference-1">Building for Humans</a> and <a href="https://2018.guadec.org/pages/talks-and-events.html#abstract-19-designing_gnome_mobile">Designing Gnome Mobile</a>, but all of the other talks I attended to were equally interesting, inspiring and easy to follow.</p>
<p>I also had the opportunity to deliver a lightning speech on modernising <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> during the <a href="https://2018.guadec.org/pages/talks-and-events.html#abstract-102-intern_and_newcomer_lightning_talks">newcomer lightning talks</a> time slot, and then to listen to the other newcomers talking about the interesting projects they are currently working on and the progress they achieved thus far.</p>
<p>I am very lucky to have chosen to contribute to GNOME as a GSoC student, as I felt truly welcomed in the community. I am also overjoyed to have had the chance to attend <a href="https://2018.guadec.org">GUADEC</a>, and I will hopefully get to see you all at <a href="https://2018.guadec.org">GUADEC</a> in the years to come. ✨</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/guadec-2018/almeria.png" width="400" />
</div>
<p><br /></p>
<p>I would like to thank through this blogpost the organising team for the effort and dedication put into holding the <a href="https://2018.guadec.org">GUADEC</a> conference in the beautiful city of Almeria. Without all of your hard work I would not be writing this post now.</p>
<p>To the women of GNOME, thank you for kindly receiving me at the <a href="https://2018.guadec.org/pages/social-events.html">women’s dinner</a> and sharing your experiences with me. I truly appreciate it, and I will try my best to keep in touch with you all and continue to share ideas and experiences with you.</p>
<p>Thank you to everyone who interacted with me after delivering the lightning speech on modernising <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a>. It really means the world to me you came by to say hi, are willing to offer feedback, or even help with some aspects.</p>
<p>Also, a big thank you goes to the GNOME foundation for offering travel and accommodation sponsorship.</p>
<p>Thank you everybody, again, for making this such an unforgettable memory.</p>
<p><br /></p>
<div align="center">
<img src="https://ruxandraS.github.io/assets/images/guadec-2018/sponsored-by-gnome-foundation.png" width="400" />
</div>
<p><br /></p>
Five or More Modernisation: Overview2018-05-28T10:00:00+03:00https://ruxandraS.github.io//gnome/2018/05/28/five-or-more-modernisation-overview<p>Before jumping right into the <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> implementation plan and details, I would like to keep you updated with the progress made thus far.</p>
<p>I started working on some project-related tasks during the community bonding period, to cover up for the upcoming exam and research session and any other time frame in which I might not be as active as I would like to. Also, during this period, I had a previously announced one week trip, which kept me from working more on the project.</p>
<p>I began by reading the <a href="https://wiki.gnome.org/Projects/Vala/Tutorial">Vala tutorial</a>; I considered this was a very important first step as I have to first be aware of all the capabilities of the language before being able to put them to good use in porting <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> to Vala.</p>
<p>In order to practice a bit with Vala and Gtk+, I proceeded to set up a basic project in GNOME Builder. I encountered a couple of problems, out of which one was solved by updating to the <a href="https://flathub.org/apps/details/org.gnome.Builder">latest Builder available on flathub</a>, and the other one led to opening an <a href="https://gitlab.gnome.org/GNOME/gnome-builder/issues/506">issue on the gnome-builder GitLab repository</a>. The two experiments I worked on mostly revolved around analysing the code generated by GNOME Builder as best practices starting template, and can be found on <a href="https://github.com/ruxandraS/vala-gtk-examples">my GitHub repository</a>. While working on the two simple apps, I also used <a href="https://glade.gnome.org/">Glade</a> to better understand how the UI templates work and the <a href="https://wiki.gnome.org/Projects/GTK%2B/Inspector">GtkInspector</a> tool to analyse them. I plan on doing more such experiments in the future, while working on the migration of <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a> to Vala, and add them to the previously mentioned <a href="https://github.com/ruxandraS/vala-gtk-examples">repository</a>.</p>
<p>Now moving onto the implementation plan for <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a>, as mentioned in my previous blog post, I would like to split the development process in a series of steps, working on one component at a time; this will allow me to test each new component after integration and fix issues in a timely manner, and also to better track the progress. I agreed with my mentor, Robert Roth, on following a top down approach, which essentially means that I will be starting with porting the topmost component, the application itself, and then progress towards the more complex tasks, such as implementing the game grid.</p>
<p>I will first create a second src folder (e.g. src-vala) where I will work on the Vala code, since I plan on maintaining a functional C version in the repository, until the port is complete. This way, I can easily ensure both the C and the Vala versions have the same set of features and the functionality remains the same.</p>
<p>Then, I intend to create a basic Vala app and window based on the template generated by GNOME Builder, only using the UI file that already exists in the <a href="https://gitlab.gnome.org/GNOME/five-or-more">Five or More repository</a>. If everything goes as planned, I will start adding one component at a time in the short run, starting with the application menu, the callbacks for the UI buttons, the preferences window, the score and the preview widgets, and lastly, the game area.</p>
<p>Only after I’m done replicating the existing functionality, I will take into account adding new features such as the ones mentioned in the previous post, namely sound, gamepad support or design changes.</p>
<p>Suggestions and feedback are highly appreciated, especially in the early stages of development, so don’t hesitate to leave me a comment or contact me via the <a href="https://ruxandras.github.io/about/">channels provided</a>.</p>
Google Summer of Code 2018: Introduction2018-05-07T18:30:00+03:00https://ruxandraS.github.io//gnome/2018/05/07/welcome-to-my-blog<p>Hi! My name is Ruxandra, but friends call me Ruxe [/ruːksɛ/], and throughout this post I would like to better introduce myself and give you a hint of what my summer journey with GSoC is going to look like.</p>
<p>I have quite a few interests, from photography and digital drawing, crafts and music, cooking and experimenting with not-so-good tasting cocktails (but they’ve been getting better, I promise 😊), to traveling and attempting to take better care of the environment. I try to allocate more or less time for each of them depending on a number of factors, but there’s one thing that has always been a part of my weekly activities: games.</p>
<p>When it comes to games, well video games have pretty much always been a constant in my life, in various forms; from the Disney Active CDs my dad used to bring me and my sister as kids, to the console ones I still enjoy playing with friends and family. Recent years did not, however, find me in front of my computer playing games, but rather discovering the open source world and developing applications.</p>
<p>Although I have worked on multiple game development projects, both by myself and in a team while studying for my Computer Science Degree at the University Politehnica of Bucharest, the one experience which I believe turned me from occasional player into dedicated game developer consisted of working on my first mobile game for my diploma project. It turned out to be appreciated by both my kind friends and colleagues at the university who volunteered to play it as testers, and the jury alike. It was then when I decided to continue studying and enrol for a masters program in Computer Graphics, Multimedia and Virtual Reality, which I am currently pursuing, to further hone my skills.</p>
<p>This summer I will be working on modernising <a href="https://wiki.gnome.org/Apps/Five%20or%20more">Five or More</a>, one of the few gnome games which haven’t been rewritten in Vala as part of the <a href="https://wiki.gnome.org/Initiatives/GamesModernisation">Games Modernisation Initiative</a>. It’s a simple and fun game whose objective is to align, as often as possible, five or more (no pun intended 😊) objects of the same shape and color, causing them to disappear. Besides the Vala rewrite, there are some other items that have to be tackled, like updating artwork, adding sounds and gamepad support, or some that I have already completed while preparing my application, such as migrating to Meson and dropping autotools, porting to gettext and integrating libgnome-games-support.</p>
<p>I am very grateful for the opportunity to participate in GSoC 2018 to work on this project, and more so I am grateful for my mentor Robert Roth (IRC: evfool), who has been kind enough to guide me throughout the pre-GSoC and the application process and has made the entire process easy and straightforward.</p>
<p>In my next blog post I will try to offer a more technical view of my project, by explaining the process I will undertake in order to port the game to Vala in a timely and productive manner, and make sure that anyone who is interested in my project can easily track my progress in order to be able to offer valuable feedback in early stages of the development.</p>
<p>Thank you for sticking with me until the end of this blog post. Head over to <a href="https://ruxandras.github.io/">my page</a> and <a href="https://ruxandras.github.io/gnome.xml">subscribe to my RSS feed</a> if you wish to keep an eye on my progress or to the <a href="https://ruxandras.github.io/about/">About section</a> if you would like to get in touch with me.</p>
<p>Until next time,<br />
Ruxe</p>