Compare objects in java

If you want to compare if plain old java objects have the same properties, it is easiest to override the equals method.  This way, if you initialise objects on different places, you can be certain when comparing that they are the same.

We will show you how to do it with this simple class:

public class Insect
{
    private int legs;
    private int eyes;
    private int colour;
    private String sortName;
}

Override equals

@Override
public boolean equals(Object o)
{
    if (this == o)
    {
        return true;
    }

    if (o == null || this.getClass() != o.getClass())
    {
        return false;
    }

    final Insect that = (Insect) o;

    if (this.legs != that.legs)
    {
        return false;
    }

    if (this.eyes != that.eyes)
    {
        return false;
    }

    if (this.colour != that.colour)
    {
        return false;
    }

    if (this.sortName != null ? (this.sortName != that.sortName) : (that.sortName != null))
    {
        return false;
    }

    return true;
}

Override hashCode()

@Override
public int hashCode()
{
    int hash = super.hashCode();
    hash = 14 * hash + this.legs;
    hash = 14 * hash + this.eyes;
    hash = 14 * hash + this.colour;
    hash = 14 * hash + (this.sortName != null ? this.sortName.hashCode() : 0);
    return hash;
}

How to use the Microsoft Azure Storage SDK

After visiting Microsoft Cloud Camp in Brussels last week I wanted to dive into android developing by using Microsoft Azure.

I wanted to store images on a storage account, and since I didn’t use Gradle or Maven, I had some issues getting it to work. In the end, this is quick guide how I did it.

On github you can find the Microsoft Azure Storage SDK for Android. I checked out the project information on the maven-repository. I had to download the com.fasterxml.jackson.core since that was a dependency I wasn’t yet using.

On the repository URL I found the azure-storage-android-0.3.1.aar file. You need to download it and open it with a ZIP client. The classes.jar file is the library you need to put in your libs folder. I renamed it to azure-storage-android-0.3.1.jar. I also put the azure-storage-android-0.3.1-sources.jar in the libs folder.

For uploading an image to a storage account, this is a code example. Remember to execute it in an Async Task!

The image object is returned after pushing it to an Azure Mobile Service and contains the sasQueryString to authorize the upload.

String FileRef = FILEPATH + FILENAME of the file.
String BaseUrl = "http://storageaccountX.blob.core.windows.net";
CloudBlobClient blobClient = new CloudBlobClient(new URI(BaseUrl);
String blobName = image.ResourceName;
URI uri = new URI(blobClient.getEndpoint().toString() + "/" + "containername" + "/" + blobName + "?" + image.SasQueryString);
CloudBlockBlob sasBlob = new CloudBlockBlob(uri, blobClient);
File fileReference = new File(FileRef);
sasBlob.upload(new FileInputStream(fileReference), fileReference.length());

 

Raspbmc doesn’t update

For some reason, xbmc and raspbmc didn’t auto update anymore on my raspberry pi (running Raspbmc) since april this year.

Usually when you reboot your device, auto update makes sure your raspbmc is using the latest version.

By deleting some files, you can trigger your pi to update again on the next restart. This will probably solve your problem if you have the same issue:

  1. sudo -s
  2. cd /scripts/upd_sys
  3. rm *.sh
  4. wget http://svn.stmlabs.com/svn/raspbmc/release/update-system/getfile.sh
  5. wget http://svn.stmlabs.com/svn/raspbmc/release/update-system/cdn_env_prep.sh
  6. cd /scripts/upd_hist
  7. rm xbmcver
  8. reboot

Source

Update CouchPotato on Raspbmc

If you want to update CouchPotato just execute the following commands in the bash shell:

  1. sudo /etc/init.d/couchpotato stop
  2. cd CouchPotatoServer (or cd CouchPotato, whatever folder you installed CouchPotato in).
  3. git pull
  4. sudo /etc/init.d/couchpotato start

Even after starting, it might take 60 seconds before your site responds to requests.

 

My raspberry pi

The raspberry pi is an awesome device. It’s affordable, it’s a media center, a web server, very slow and doesn’t use much electricity. It’s also a very good looking piece of hardware. Fits your living room!

pi-1

pi-2

This post is about how mine is configured!

The services

  • Xbmc (installed as raspbmc): a powerful media center, running on Debian.
  • Transmission: A minimalistic torrent client.
  • CouchPotato: Software that searches the movies you want and starts to download them as soon as they come available.
  • BitTorrent Sync: Dropbox like service, easy way to backup folders on multiple computers.
  • Samba: Share a hard disk to the local network.

The place

My pi lives next to my TV. It’s powered by a 5V 2A power supply. It has a 8 gb sd card and their is a 2 TB external usb hard drive attached.

Connected

I use Putty to modify raspbmc via ssh, Yatse android app to control Xbmc. When needed I can connect an external keyboard because I still have 1 usb port over.

Security

As you could possibly open up some ports to the internet, you will want to secure your raspberry pi.

Install

I won’t list the complete process but refer to guides I followed.

0. Static IP

http://choorucode.com/2012/08/14/how-to-assign-a-static-ip-address-to-raspbmc/

1. Raspbmc

First we need to install raspbmc on the pi: http://www.raspbmc.com/wiki/user/windows-installation/.

2. CouchPotato, Transmission

3. BitTorrent Sync

4. Enable samba

You can do this in the xbmc interface.

5. Dynamic Dns

http://www.techjawab.com/2013/06/setup-dynamic-dns-dyndns-for-free-on.html

XBMC tweaks

  1. By default, if there is no hdmi connected on boot, it won’t enable hdmi. That’s ridiculous!

Uml basics

If you want to do proper analysis you really need to be able to draw what you intend to build. Doing so will make you a better architect.

Even though I have learned uml at school, I did forgot most of it. I have however been able lately to spend more time on making proper analyses, and thus improving my own uml skills.

This is a quick wrap up of the most important relationships you can have in uml.

uml

Generalization
An object extends another object.

Implements
An object implements an interface.

Aggregation
Aggregation means that classes have their own life, but they can only belong to one parent. For example a department and a teacher.

Composition
A bit stronger than aggregation, is composition. If the parent object dies, children object dies to. Sometimes referred to as the death relation. Think of it as a house and rooms. When you delete the house, all rooms get deleted too.

Association
There is a relationship between both objects, but at the same time they also have their own life cycle.

Copy file to android in ClockWorkMod

If you installed a malfunctioning ROM on your android smartphone, it can happen that your android phone no longer works. I have had this often enough to write a blog post on how copy a hopefully better ROM on your device, to install that one.

Why didn’t the ROM work?

  • If you install nightlies from cyanogenmod, it can happen that a nightly is actually broken.
  • Sometimes the file you downloaded from the internet and copied to your smartphone got corrupt.

What do I need?

This guide will only work when you have ClockworkMod Recovery installed on your phone.

You also need the android SDK. If you are a developer you will already have this. It’s in the folder AndroidSDK/platform-tools.

How to

  1. Copy your new cyanogenmod ROM (or other) file to this AndroidSDK/platform-tools folder. (Or any file you would like to copy.)
  2. Give it an easy name, something like cm-11.zip
  3. Control-Shift click in the folder, and choose Open command window here.
    adt-openshell
  4. Boot your smartphone into ClockworkMod Recovery. Every smartphone has it’s own way to do. For the Galaxy S3 you need to push power, volume-up and the home button all together. When the boot logo shows you can stop.
  5. Go to mounts and storage in the ClockworkMod Recovery menu.
  6. Make sure it says unmount /system and unmount /data by entering on the items.
  7. Now go to your shell and start the copy process with this command: adb push cm-11.zip /sdcard/0/cm-11.zip. (Of course, change the files to your filenames!)
    adt-shell
  8. The process can take a while, it will respond with the copy speed and the total bytes / total time it took. That means it was successful!
  9. Go back, and choose install zip, choose zip from /sdcard to install the MOD!