Feb 22, 2014 - Wrkout 1.8.0 for Android has been released


The new versions of Wrkout and its free counterpart, Tabata Trainer, have been released!

Major highlights for Wrkout 1.8.0 include:
  • The ability to import and export workouts to the external storage;
  • The ability to set a loop count for specific exercises, individually;
  • Google Analytics - to quickly detect future issues and fix them as soon as possible;
  • Great stability improvements.

Get Wrkout:
Get it on Google Play

Get Tabata Trainer:
Get it on Google Play

(QR Codes at the bottom of the page.)

For the complete list of changes please analyse the changelog of each app:
Follow Wrkout / Tabata Trainer on:
Wrkout / Tabata Trainer apps are available in English, Spanish, French and Portuguese. If you are interested in translating to other language(s), please contact me.

QR Codes:
Wrkout - Play Store
Wrkout - Amazon Appstore

Tabata Trainer - Play Store
Tabata Trainer - Amazon Appstore

Feb 20, 2014 - Changing Android Text-to-Speech (TTS) Engine (and other hints)


Changing the Android Text-to-Speech (TTS) Engine step-by-step in three different Android versions, as well as pointing to some alternative TTS engines, are the objectives of this post. The main reason for creating it is to provide additional troubleshooting support for Wrkout users, who may be having issues with the speech feature present in the app.

Note: If you've reached this page from Wrkout HIIT or Wrkout Pro and are using a Kindle Fire device, I can't guarantee you that these procedures smoothly apply to your device as I have no way to test them. Also, any TTS engines presented come bundled with the device or are downloadable from Google Play Store. I can't help with Amazon Appstore -only devices.

I will present how to change the Android TTS in three different Android versions/flavors: CM7.1 Android 2.3 (Gingerbread); Samsung GALAXY Fame Android 4.1 (Jelly Bean); 2012 Nexus 7 Android 4.4 (KitKat). Then, I will also show how to download offline languages to be used in the Google Text-to-Speech engine.

Critical zones in each screenshot are marked with red brushes.

Even if don't use any of these Android versions, you will still be able to follow this guide due to the similarities (with at least one version) being very high.

You can click the images to view them in higher resolution.

Unfortunately, I've made the whole guide in English. You can try to use Google Translate at the right of the page, but not everything will be correct.
Automatically translate this guide, at the top-right corner of the page.

Available TTS engines

There are many Text-to-speech engines available. There's no need to create yet another list of these, so I invite you to look at this list made by SoftwarePreneur.

Personally, I've had some success with SpeechSynthesis and IVONA TTS HQ (which is the one Wrkout redirects to in case the user chooses to install a TTS engine). To get more unusual languages, like Portuguese, offline, you may need to spend some money on language packs for SVOX Classic and IVONA TTS HQ, or just use Google Text-to-Speech engine present in the most recent versions of Android (which can also be installed from Play Store). Most of the languages Google TTS can play are online-only, but some can be manually downloaded to be played offline as well. Portuguese from Brazil was recently made available offline. Some phone/tablet brands also seem to provide offline TTS support for many languages.

CM7.1 Android 2.3 (Gingerbread)

1. Go to your app drawer and select "Settings";

2. Select "Voice input & output";

3. Select "Text-to-speech settings";

4. Make sure the wanted engine is selected and properly configured in the "Engines" section presented;

5. Finally, select the actual engine you want to be using with your Android apps in "Default engine".

Samsung GALAXY Fame Android 4.1 (Jelly Bean)

1. Go to your app drawer and select "Settings";

2. Select "Language and input";

3. Select "Text-to-speech output";

4. Select one of your TTS engines as the preferred to be used in your Android apps (don't forget to press the cog as well to configure them).

2012 Nexus 7 Android 4.4 (KitKat)

1. Go to your app drawer and select "Settings";

2. Select "Language & input";

3. Select "Text-to-speech output";

4. Select one of your TTS engines as the preferred to be used in your Android apps (don't forget to press the control in the right side as well to configure them).

Downloading offline languages for Google Text-to-Speech

This new section, added 7th March 2014, shows you how to download an offline language for Google TTS in recent versions of Android (4.x). Google recently improved its Text-to-Speech engine and added some new languages for offline download.

After getting to the "Text-to-speech output" screen in your Android settings (by following the screens above), you can download new languages, to be used offline, by going to the screens shown below (click the images to zoom):


Feb 18, 2014 - Loading app/web page from Android intent when app is disabled


In Android, it's pretty easy to load a page from Facebook or Twitter or a similar one, from our very own app. By passing an intent with the request, the related app will automatically show up with the desired content. If the app is not installed we can detect that scenario so that, for instance, the browser starts up and loads the link for the wanted page. With Google+  it's even simpler, as we just need to pass the web URL. Android then selects if it should use the Google+ app or a browser (taking into account users' preferences).

However, what if the app is installed but has been disabled (for example through App Quarantine)?

Let's consider Facebook as the app/website to load from our Android application.

Typical code for loading a page is something like the following:
Intent intent;
try {
getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
} catch (NameNotFoundException e) {
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));
try {
} catch (ActivityNotFoundException e) {
getString(R.string.facebook_error), Toast.LENGTH_LONG).show();

Which works most of the time: with or without the app installed.

However, if the user has Facebook installed but disabled (for example by using App Quarantine), this method will not work. The intent for the Facebook app will be selected but it will not be able to process it as it is disabled, ultimately resulting in the Toast above.

So, a quick fix (and the whole point of this post) is to detect if the app has been disabled and then choose to use the web URL:

Instead of:
getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));

You can use the following to decide what to do:
PackageInfo info = getPackageManager().getPackageInfo("com.facebook.katana", 0);
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("fb://profile/620681997952698"));
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.facebook.com/620681997952698"));

This process is similar for other apps (not required for Google+).

Some links:

Jan 6, 2014 - GNS3 Cisco IOS Escape Sequence


If you want to use the escape sequence in IOS in order to cancel pending commands (like a ping or a traceroute), using GNS3, and you're trying to use Ctrl+Shift+6 or Ctrl+C or any other combination that is supposed to work, as far as you can tell from the web, then just try Ctrl+6, it will probably work.

Nov 26, 2013 - JBoss ESB JMS client


In case you have followed this guide and are now wondering how to run the client, here'a a little tip to prevent you from wasting more time.

If you've created the SendJMSMessage.java inside the same project and ran it as a Java Application, then you probably got something that included this:

Caused by: java.lang.ClassNotFoundException: org.jboss.aop.metadata.ClassMetaDataLoader
or this:
Caused by: java.lang.ClassNotFoundException: org.jboss.aop.pointcut.PointcutStats
or even this:
Caused by: java.lang.ClassNotFoundException: org.jboss.aop.metadata.Pointcut

You should create a new Java Project with the SendJMSMessage.java, then go to the project properties and, instead of including every jar in the Java Build Path (as explained here), add two libraries: 1) JBoss ESB Libraries and 2) Server Runtime. The server runtime will be the previously created JBoss server runtime.

Then run this project as a Java Application and it should work.

In case your wondering what software versions I've used and so on, here are they:

  • Eclipse Helios (3.6.2);
  • JBoss Tools 3.2.x installed via Eclipse Marketplace;
  • JBoss ESB Server 4.10;
  • added JBoss Server Runtime as version 5.1;


JBoss ESB tutorial
he HelloWorld in the JBoss Enterprise Service Bus

Oct 6, 2013 - Rooting Memup SlidePad NG 808DC


After noticing there were no known methods of rooting the tablet Memup SlidePad NG 808DC (the methods for the other models did not work with this one), I took some hours off in the past 20th of July to check how hard it could be. It seems it's actually pretty easy and, finally, I'm going to post my method. Although the first root method on the web specific for this tablet, it may work for similar devices as well, but that's on your own responsibility.

Para traduzir para português utilizar o controlo à direita da página.
Pour traduire français utiliser le commande vers la droite de la page.

The following steps assume you know how to flash a ROM to your SlidePad, as well as using ADB to get the tablet's shell.

Pre-requisites: If not already, flash the original 4.1.1 ROM provided in the french memup website: http://www.memup.net/support/fr/produit.php?id_produit=112; ADB must be installed in your computer (http://www.howtogeek.com/125769/how-to-install-and-use-abd-the-android-debug-bridge-utility/http://pplware.sapo.pt/smartphones-tablets/android/como-usar-o-android-debug-bridge-adb/);

Step 1: Make sure /usr/xbin/su must already exists, the original 4.1.1 ROM provides it, so it's okay;

Step 2: Download http://download.clockworkmod.com/superuser/superuser.zip;

Step 3: Get the "su" binary from superuser.zip/armeabi to the SD card (/storage/sdcard0/external_sdcard);

Step 4: Enter the tablet's shell, using the command adb shell;

Step 5: Go root in the shell, using the command su;

Step 6: Backup /system/xbin/su, using cp /system/xbin/su /system/xbin/su.bak;

Step 7: Replace the system's "su" with the SD card one, using cp /storage/sdcard0/external_sdcard/su /system/xbin/su and then, chmod 6755 /system/xbin/su;

Step 8: Install Superuser APK (ClockworkMod's one) from the superuser.zip or Play Store;

Step 9: Run Superuser and let it update the "su" binary if a newer version is available;


You're welcome to ask for any clarification on the steps above.
Originally written on 20th July 2013, posted on 6th October 2013.