Friday, June 26, 2015

Becoming linux user

  Well, I delayed this post for few days, because I was busy with patches for moVirt and switching tasks in the middle is not good... But now I have time and there are important news I want to share.

  First thing that happened in last 2 weeks is that I finished with all base Augmented Reality features for moVirt. Now when you look at barcode you'll see information about host (status, CPU and memory usage), host events on right panel and host VMs on left panel. Also there is a button to open host details page where you could perform different actions with this host and VMs. The hardest thing is to optimize layout for variety of screen sizes and screen resolutions. On my 10" tablet all panels fits perfectly, but for smaller screens we need new design ideas.
Pic. 1. First look of AR screen with all base features.
  Second thing is that I'm Linux user now. For long time I've been avoiding this OS, but now it's time! To test moVirt features I need working setup of oVirt. Since oVirt is a linux software I need it running somewhere. For some time I've been using oVirt LiveCD booted from USB flash on my second laptop, until USB ports stopped working. I was looking for different solutions like running LiveCD .iso from HDD and from virtual machine and I realize that I need proper linux installation on my machine. I don't want to go deep with details, saying only that this way was also full of difficulties. To everyone how will try to install linux: don't try any optional solutions, follow only default, the most simple installation. You see that there is an option to install from .iso on hdd, and there is article in documetation? Don't try this, no one have tested this, you will be covered with bugs. You heard that there is no problem installing linux near windows installation? Don't trust them, erase your entire HDD (don't forget to backup...) and make a clean installation. Otherwise you will step into some bugs and lost dozens of hours.
Pic. 2. Meet the linux.
  After getting over through the troubles I was ready to install real oVirt engine, but with fake VDSM, because for testing purpose I don't need real hosts and VMs. In addition to the guide provided on the web-site we need few more steps:
1. Configure settings in database with this commands
psql engine -U postgres -c "UPDATE vdc_options set option_value = 'false' where option_name = 'SSLEnabled'"
psql engine -U postgres -c "UPDATE vdc_options set option_value = 'false' where option_name = 'EncryptHostCommunication'"
psql engine -U postgres -c "UPDATE vdc_options set option_value = 'false' where option_name = 'InstallVds'"

2. Uncheck "JSON Protocol" while creating host in web admin.

After that it was possible to create fake hosts and VMs to test moVirt.

Monday, June 8, 2015

First commit

  Two weeks passed and right at this point I've made pull request to moVirt repo with my commit. It's not actually "first" commit, there was several of them before the internship starts. And what I want to tell here is Git... I thought that I finally understand how to work with Git with help of my mentor during work on initial commit to apply to Outreachy. But on Friday I was confused and very frustrated again. The idea was to leave all day-by-day commits in my fork (so I could trace my progress later if I'll need to revert something), and send squashed version into main repo to ease reviewing. All my attempts was failed,.. seems like Git tries to reduce all redundancy. So then I decided to create patch which would contain all my commits in single file, then I erased everything in my repo because there was a lot of garbage of branches and merges, and just to avoid redundancy if Git decided just to link to previous commits instead of recreating them from patch, and last step was to apply patch... But who in the world could ever know that applying patch with multiple commits in it leads to reverted order of commits! I was one step before loosing everything I've done during this two weeks. Hopefully I've managed to recreate my progress from reversed commits on the weekend, and also I've made some fixes that I've forgotten before committing.

  So lets leave that freaky unhuman Git and get back to the commit. First thing I've realized learning ZXing that it doesn't assume to be used as a library inside another app. The integration class just makes calls to another app Barcode Scanner (BS) with it's own UI, thus preventing us from drawing any overlays on camera screen. Hopefully BS is a part of ZXing and also Apache licensed, so I've taken all decoder classes and build my own Activity class based on BS's Activity, so that we could decorate camera screen as we like. Also it could improve response time, because we don't need to support all barcodes, just choose one of them and skip guessing time.

  Looking through BS's Activity I've partially learned how parallel threads and handlers works in android. Activity has it's handler which loops through the message queue. Decoder works on another thread and posts messages when barcode has been detected and decoded. While catching such messages we could interact with Activity. All interactions occurs in function handleDecode(...), here we could ask data provider for Host instance which we are looking at, and show any desired information on screen. Also there is viewfinderView class that suits to draw anything on to the screen with Paint and Canvas classes. At this point I've made just simple rectangle that rounds decoded barcode in real-time to mark which one has been decoded if there are several of them on screen.

  Only two weeks (or less) required to bring Augmented Reality support with barcodes into your app. It may look not so fancy, but functional enough. And could be easily extended.

Pic.1. Test view with some fake data.