Monday, January 7, 2013

Updates about my current job

Occasionally I am asked about my current job and if I would like to make a change. Here is an update since my last overview. I spent some time refactoring the web service providing GIS information about addresses and localities in Czech Republic and some other countries. As usually there is more so we are in process of migrating the database back-end of this system from DB/2 to Postgresql with PostGIS. That way we hope to get simple access to coordinates using various systems. We read data provided by authority (RUIAN - sometimes even the state can serve something useful) and surprisingly this is relatively straightforward - parse some XMLs that have schemas available so we could generate JAXB classes and convert that to a data objects and store in DB. Again I wanted to keep it simple so there is Hibernate involved and things are bind together using Spring. A bit of wrestling to get compatible mix of all these libraries (beware of conflicts with versions in JBoss) and it is spiced with Hibernate Spatial extension that has Postgresql driver. Another driver is used for testing - H2Database can run in-memory while support GEOMETRY datatype.

The second big topic is experimenting with storage for our binary data. We want to move some BLOBs out of database and if we built some storage there are a few cases where we can use such storage for resources served on our webs. So far we think that we can run this using Openstack SWIFT though the setup will be simplified. Rather than building a cluster of machine with commodity hardware we will start without replication and store the data using XFS filesystem on SAN that we already have. That way we get HTTP API similar to Amazon's S3 API for access to data and a migration path for future growth. There were some other possibilities that we considered like RIAK, CephFS with Rados, GlusterFS or other DFSs. There is nothing critically wrong with any of these but the idea is to have reasonably simple solution. While playing with all these I had also a chance to learn parts of Puppet and enjoyed beauty of virtualization using VirtualBox often through Vagrant that makes it even simple to build new boxes.

Thinking about it: should I throw some new keywords in my LinkedIn profile :-) At the moment I will not bother with it.

Tuesday, September 18, 2012

Installing Debian on HP Elite 7500 Microtower

I bought a new HP Elite 7500 Microtower workstation recently and decided to install Debian testing on it in a dual boot mode with Windows 7 that came pre-installed. Here are some notes on the process.

Apparently HP ships their machines in a funny state that is not very friendly for experiments like this. First of all they will not give you any original installation media for Windows OS. It means you have to rely on their recovery support. But they also format hard drive in their own manner and create four primary partitions there so there is no space where you can create another one to host your other operating system. One is some boot space (100M), second is the main space shown as drive C: and then there is 16G recovery partition. In addition to that they added another 100M primary partiotion probably with some tools. As a result you have to remove something. What I did is to initialize Windows, and run their Recovery Manager utility to burn four DVD. Once you have these you can remove recovery partition and shrink the big C: drive to something reasonable smaller.

Next step is to actually install Debian Wheezy. Net installer did not work for me because the machine has ethernet card not supported by any kernel module shipped on this media.Of course the case is not lost and Debian has full installation DVD (it is enough to have the first one unless you want to install KDE, Xfce or other stuff that does not fit on DVD#1). Alas this is only good enough to install basic system without network because it again cannot find module for the networking. During installation I decided to set up encryption on all mounted partitions which is not the best idea. GRUB needs to initialize booting from some non-encrypted space so I was glad the small partition with HP tools was there to be replaced with /boot. (You can boot with some USB flash too but this is not the point).

The installation goes smoothly then when you realize that there is no need to fill those encrypted partitions with random data at the begining and you can cancel this step. It would take the whole day otherwise.

My next terrible surprise came after reboot. Instead of new shiny gdm screen I was greeted by frozen terminal output with no chance to do anything (remember: no network). It told me about some problems in nouveau driver for NVIDIA card. The solution is to boot with some extra option. I used acpi=off and nomodeset but strongly suspect only the latter is needed. Awesome, now I had command line (or even a crippled XWindow).

Configuring network is obvious next step. I looked for a Realtek8111E driver for a while as this is the chipset mentioned in specification. Long story short: do lspci first to check what exactly is inside your box. It is Atheros Communications Inc. AR8161 Gigabit Ethernet (rev 08) in my case and not what was written on webpages. Again there was some struggle to find proper driver until I got one properly patched here. It is a bit tedious work to look for something on laptop and transfer it through USB stick for testing. Of course I had to insert installation DVD and install some development tools 'sudo apt-get install make' and probably a few more packages. When the module was compiled and installed (modprode alx) it is enough to do /etc/init.d/networking restart.

Great, isn't it? Few more things to do. Look up what to add into /etc/apt/sources.list because we installed the system and couldn't add any Debian distribution mirror without network. While we're  there we will add non-free repositories to make it possible to install NVidia drivers provided by company. They are not open source but they work in this case. Using DKMS as described in NVidiaGrapicsDrivers on Debian wiki worked like charm. Restart X to check it is working. Reboot and it is still working. So here I was at the end and the machine has its basic configuration done!

Wednesday, July 4, 2012

I've fun learning new stuff

For more than last two months I've been working with the team at LMC on their system that runs biggest job board in Czech Republic www.jobs.cz. I need to say that it is quite interesting for me. There is a lot to learn and they use a variety of technologies to build their system. Most people will judge it just looking at the website presenting job ads but there is more on the back-end side where recruiters manage their campaigns.

Moving from tooling and RCP-based application to a larger system running on web is fun. Teams are using Scrum more or less successfully and do their best to push updates for deployment to production bi-weekly. I believe we will be able to do even better in the future because there is a feeling that move towards more frequent releases was a good one. Jenkins is used heavily and some parts of system are deployed from it directly. Maven is used most often for builds and I have to admit that it makes many things simpler because maintaining too many Ant scripts would be a nightmare. Here I had to convert to Git though I prefer Mercurial. As a part of that conversion I became an early adopter of NetBeans 7.2 because there are some important bugfixes in their Git support. My current task is to refactor some web service that runs deployed on JBoss and make it talk to database in an efficient way. Of course I am trying to cover this with some basic tests and grunt why so many cool technologies come without (unit-)testing story. And there is long list of tasks that I can choose from next. Most of them have the promise that I will have to learn something new.

As you can see it keeps me busy and the downside is that my other projects are almost stalled. NBAndroid rarely receives updates these days and I need to decide what is will be the future of my Android app Fireside Talk.

BTW: new Head of Technology is wanted :-)

Wednesday, March 21, 2012

Revamping Fireside Talk UI

The UI of my Campfire client is now updated to use action bar on all supported devices. It uses better available space on screen while providing nice user experience. Together with this set of changes I modified the theme to use light background colors as this seems more common on modern devices. Other than that I spent some time to add support for image displaying.

There were some quirks with NetBeans IDE support for Andriod development so I had to tune it little bit.

Wednesday, March 14, 2012

More features for Fireside Talk app

As suggested in previous post the support for transcript loading is added to Fireside Talk client. It took me a while to learn the concept of fragments and apply it to this project. Now the application uses different fragments as tabs when showing room activity.

There was some additional work to add some button and images in a way that looks acceptable on different platform and tune the layout little bit for landscape and portrait modes. The picture shows landscape mode where the buttons are moved to the left side to leave some extra space needed to show messages. There are shown as a row of buttons above the message area in portrait mode.

Saturday, March 10, 2012

Campfire client for Android

My current pet project is Fireside TalkCampfire client running on Android. It is now available on Android Market Google Play. I have a lot fun there and learned a lot of things.

Here are some of them:

  • A few activities with AsyncTasks to perform network communication was good enough start.
  • Later I changed that to activities + content provider to persist the data between sessions.
  • The next important step is to add a service to run asynchronous updates.
  • Resources are expensive on device so I decided to build a server side to watch for updates in chats and notify the device through C2DM
  • The backend on server is now simple HTTP server running on Grizzly. (It is a pain to resolve dependencies of their Maven project to get it set up with pure Ant build).
  • I played a little bit to set up security for the communication between device and server.
  • Then I updated my Samsung Galaxy Tab to Android 3.2 to see some new bugs. So I went to fix them. Including bunch of threading violations.
  • The plan now is to add few more features like transcripts, search, file attachments and improve the user experience on tablets.
I can post some more detailed comments on these later. At the moment I am busy with all this work. As a side effect I have various ideas how to improve development support in NetBeans because obviously I am using NBAndroid plugin.

Thursday, July 2, 2009

Intro

This is going to be a place for my comments on topic related to programming, languages (most often Java), tools (most often IDEs) and related stuff. Hopefully it will be more often positive than negative.