cvui - A very simple UI lib for OpenCV

I have been working a lot with OpenCV and C++ lately. After spending a great amount of time waiting for things to compile (so I could see my changes), I decided to improve my workflow. I decided to make changes in runtime, so I could tweak things without the need to recompile the whole project.

I immediately faced a problem: how to quickly and easily create GUI with OpenCV. The OpenCV lib has complete support for Qt (which is great for UI creation), but you need to compile OpenCV with such Qt support. If you don’t like that (or you have OpenCV compiled without Qt), you can enable OpenGL and use any of the awesome GUI out there, e.g. imgui. If you decide for that, you add the OpenGL dependency to your (probably already complex) project.

I didn’t have Qt available and I didn’t want to use OpenGL, so I distilled cvui. cvui is a (very) simple UI lib built on top of OpenCV drawing primitives. All the rendering is made using OpenCV, by calling cv::rectangle(), for instance. Here is a picture of it working:

cvui

The API is heavily inspired by imgui. The calls are all C-like, so no classes, objects nor OOP. I have nothing against that, I just wanted an extremely simple way of creating UI for my application (one line written, one thing on the screen).

At the moment, the API includes a small set of components: button, checkbox, window and counter. I will probably add more components in the near future. For more information, visit the cvui repository on Github. The code is MIT licensed.

Goodbye Wordpress, hello Github Pages!

It took a lot more than I wanted it to take, but I finally concluded the move from Wordpress to Github Pages! Finally my personal website (this one you are reading) runs in a static fashion, without PHP, databases and all that useful-but-not-for-my-personal-website stuff.

I enjoyed Wordpress from the very beginning, it has a nice set of features and helps you write and manage content. During the last year or so, however, it was standing in my way. The template I was using was already showing signs of aging, some things were breaking and, last but not least, I had to pay constant attention to security patches/updates. Not anymore! Now I can use my daily code editor to write content using Markdown and publish it to the magic clouds of Github with a git push command.

I hope the move will encourage me to blog more often, which is something I have being trying to do lately. Time will tell if that worked or not :)

My 2013 in review

Another years has gone by. I wrote my new year’s resolutions for 2013 almost a year ago, but it still feels like yesterday. The last days of 2013 seem the perfect time to review the year and check if I collected accomplishments or lame excuses.

Without further ado, down to the goals:

Improve my skills as an indie game developer. I already joined OneGameAMonth and will try to release 12 games in 2013. A pharaonic task, but the fun is proportional. It is not about working until faint, but learning how to avoid code bloat and feature creep (two of my most significant problems as a developer).

Depending on the point of view, this was completely or partially accomplished. I did not release 12 games in 2013, I did 6 instead. 1GAM was amazing and I’ve learned a lot from it. The “12 games” thing was just a guide, not a goal per se.

As I explained here, my gamedev year was awesome. I can say I improved as an indie game developer, a LOT.

Exercise! I stopped running with my friends (in 2011, I ran a 10km marathon, that felt great!). I want to start jogging at least. I also want to get back on track on my push-ups training. I will buy a dumbbell too.

Partially accomplished. I got on track on my push-ups and the jogging, but I didn’t follow a strict and regular routine.

I trained for a marathon, signed up for it and was ready to run. However I’m too dump to pay attention to the payment due date, so my registration was invalidated :(Damn! It was a fun and short 5km marathon that I will have to postpone to 2014.

I didn’t buy the dumbbell.

Regularly write tutorials about game development at As3GameGears. Since I started the blog, I just post about tools. It’s time to improve the content and write about game related stuff.

Again, depending on the point of view, I completely or partially accomplished this one. I did wrote several gamedev tutorials, but for the Game Development section of the Tuts+ network, not As3GameGears.

On the other hand, I kick started a new series named game dissection. It’s not a tutorial, but it’s a start.

Write a book about game development.

Not accomplished. Judging by my work in March and April, I thought I would accomplish this one. I wrote two chapters, then I totally dropped the work.

My university classes consumed a significant amount of time, so I was not able to write chapters. I was planning to write and use the texts in my gamedev classes, but that didn’t happen either. Too bad.

Contribute to an open source project.

Accomplished! I worked on Flixel Community, fixing bugs and planning new features. By the end of November we released version 2.56, the very first Flixel release under the community label.

We attracted more developers to the project, that was amazing! I will continue my efforts to make Flixel Community a great game engine.

Found a Jr tech company at UFFS.

Not quite there yet. I mentored students regarding the tech company, which was founded and named FronteiraTec. In the founding process, however, we skipped all legal and governamental steps, so the company exists, but in a “virtual”.

In that situation, the company is not able to sign any contract or sell anything, but it didn’t prevent the students from planning and working. They worked on several projects, covering subjects as games, mobile apps and hardware. They even made an arcade machine.

The only missing piece of this puzzle is the legal papers and the official registration in the government records.

Research. It’s been two years since I stopped working on my master’s dissertation. I want to start working on it again, researching and publishing papers.

Not accomplished. I didn’t have the time (nor the will) to keep this up. I co-authored a paper about procedural generation of canyons, though. The paper is in the works, but it will be published in 2014.

Find inner patience. Sometimes I get really upset by small things and it is not helping. I will try to keep myself calm and constant during 2013. It will make me a better husband, professor and person.

I don’t know how to classify this one. I made some great improvements, but I didn’t reach the point where I wanted to be.

Finding inner patience is harder than I thought. It requires a lot of energy to take a deep breath and ignore the things that upset you. The jogging helped keep things cool, so I think I’m on track for this goal in 2014.

Release at least one side project. I have lots of ideas, but I never manage to work on it and release something.

Not accomplished. I joined my friends on a project, we had some meetings, but we were not able to launch anything. I had some ideas too, but I was short on time to make them come true.

Ok, that was the review!

Looking back and checking all those accomplishments, I can say 2013 was an outstanding year! Goals keep me motivated, even if I’m not able to accomplish them all. I managed to accomplish much more than I expected, which was great!

A new year is just around the corner. It’s time to write some new goals again 😀

 

Gamedev book – days 1 and 2

book_1_2

It’s been three weeks since I started working on this book. During Friday the 15th I finished the summary. I came up with 19 chapters! That’s more than I previously thought, but since it’s a draft, I can cut some chapters along the way.

Today I finally started writing something. Damn, it was hard! It’s been almost 3 years since I wrote something big (my master thesis) , so I had to brush all that dust. The key secret for every endeavor is persistence, so it took me some time to get things working again. At the end of the day I was really proud of my result. It was a small piece of text, but it served the purpose of warming things up.

Analyzing the current scene I will merge some chapters and change the main subject of others. However that’s a task for the future and for my next Friday.

Gamedev book – day 0

book-textbook

I am thrilled to say that today I’ve started writing my book about game development! Every great (and huge) journey starts with a single step, which probably is the hardest one. This book is one of my new year’s resolutions for 2013.

I’ve been planning to start this book since the beginning of the year, but university work (and some side projects, such as 1GAM) swamped me with tasks. I knew there was no easy way to start this book, so I reserved 20% of my week to work exclusively on it. My workmate Denio and I made a pact to progress a personal side-project during a specific day of the week. We chose Friday for that and named it “Insane Friday” (sounds much better in Portuguese).

Sharing a common day to work on our projects is great because it helps us focus on the job, even though we are working on completely different things. No matter how much university work we need to overcome during Friday, we must progress with our projects, that’s the rule. I know 20% (a single day of the week) is not the perfect amount of time to finish a book, but I need to start with a healthy pace. The idea is to (hopefully) increase that amount over time, but smoothly.

During my first day of work, I did the obvious: planned the content. I brainstormed all the subjects I want to cover, then I wrote them down on a draft summary. Our first Insane Friday just lasted for a couple of hours, so I was not able to make my draft become a real summary, but that’s already a start.

I am looking forward to working on my book again. I will blog every week about my progress, so I can keep track of the time and measure how many centuries it will take me to finish this book :D.