May 5, 2013 - Tabata Trainer - Aplicação Android

Comments

Hoje lancei a minha primeira aplicação Android, Tabata Trainer.
Desenvolver esta app tornou a minha aprendizagem de desenvolvimento Android numa experiência muito agradável, ao mesmo tempo dando algo de novo ao ecossistema de aplicações móvel.

A app permite aos praticantes de Tabata e desportistas em geral fazer os seus exercícios cronometradamente, de forma apropriada e automática. Fornece ainda a possibilidade dos utilizadores definirem/planearem os seus próprios exercícios e tempos de treino. Mais funcionalidades estão previstas para esta aplicação!
Tabata é um tipo de treino de alta intensidade de intervalos de tempo fixos (HIIT) e foi baseado num estudo de Izumi Tabata. Inicialmente consistia num exercício que era executado de forma intensiva durante 20 segundos com 10 segundos de descanso após. Este exercício era repetido 8 vezes, dando um total de 4 minutos de treino.

Resumo das funcionalidades:
  • Temporizador para Tabata;
  • Controlos de começo/pausa/parar;
  • Definição de tempos;
  • Definição do número de rondas;
  • Definição de exercícios, com descrições textuais, que formam um treino personalizado pelo utilizador;
  • Motor texto-para-voz para ler os nomes dos exercícios e guiar o utilizador no seu treino;
  • Alertas sonoros: Descansar; Exercitar; Estimulador de respiração; Treino terminado;
  • Línguas suportadas em texto: Português (Portugal) e Inglês (Reino Unido);
  • Texto-para-voz em Português não está disponível devido à falta de suporte por parte do Android;
  • Sem publicidade e sem permissões especiais de acesso necessárias;
  • Som, voz, e permanência do ecrã configuráveis;
  • Capacidade de partilhar o treino atual;
  • Layout horizontal e suporte para Tablet;
  • Definições;
  • Sons personalizáveis;
  • Capacidade de desativar o gradiente de fundo.
[a lista de funcionalidades foi pela última vez alterada em novembro de 2013 e está agora desatualizada, por favor ver o registo de alterações.]

    Se pretende exercitar com esta aplicação, vá até à página da Play Store do Tabata Trainer ou da Amazon Appstore e experimente!

    O Tabata Trainer já foi referido nos seguintes websites:

    Apr 24, 2013 - Intel graphics extreme color saturation using HDMI and M2250D

    Comments

    When I acquired the LG M2250D display I noticed that when connecting it to my computer via HDMI, under Windows, the colors would be extremely saturated. This issue was not reproduceable in other operating systems and also not via VGA (under Windows too).

    Saturated color of Windows' window
    Expected color of Windows' window

    My display (when via HDMI) is detected and assumed by the Intel graphics driver as a "Digital Television" instead of a "Monitor". I think that is because it is a hybrid monitor and TV. The consequence of this is that the driver will adjust the color scheme to match a TV watching scenario (and won't let us change it in a straightforward way!).

    What I did to fix (workaround) this was open up "Intel(R) Graphics and Media Control Panel" (one way can be by pressing Ctrl+Alt+F12) and change a few settings. Here's how you can do it:

    First:
    Select "Advanced Mode" in the dropdown that, by default, is set to "Basic Mode". Then select "Custom Resolutions" inside "Display".

    Changing to Advanced Mode
    Second:
    Fill the "Add Custom Resolution" fields with the intended screen resolution and under "Timing Standard" select "CVT-RB" (this is where the secret lies).

    Changing Timing Standard for specific resolution
    Finally:
    If your screen doesn't flicker automatically, you may need to restart your computer. You need to add a custom resolution configuration for every different resolution you may need. The "Timing Standard" can be different from "CVT-RB", but that one I can assure works.

    How it should look after everything

    Apr 22, 2013 - A working bashrc function without parameter expansion (globbing)

    Comments

    I have noticed that the function I had under my bashrc script to simplify the syntax of the find command wasn't actually working for all cases. When I passed asterisks for the search criteria, I was left with weird findings resulting from parameter expansion (globbing). Here is the failing function (from my home .bashrc):

    function findf() {
    find $1 -name "$2" 2>/dev/null
    }
    Which doesn't work properly for the case mentioned above.

    After meddling a little bit with this I was able to have a working "findf" by using an alias just to deactivate globbing (set -f) before calling the function (which I have renamed to avoid conflicting with the alias):

    alias findf='set -f; findf_func'
    function findf_func() {
    find $1 -name "$2" 2>/dev/null
    set +f
    }
    Deactivating globbing inside the function is not enough because the parameters will be expanded before the first line is executed.

    After the find command finishes, globbing can be activated again with set +f.

    Apr 18, 2013 - ADB - CPU usage and staggering mouse cursor

    Comments

    After tuning my system to develop an Android app, I noticed that every time ADB (Android Debug Bridge) daemon was started, the mouse cursor (and all graphics for that matter, as well as other I/O tasks like playing music) in my GNU/Linux system would start flickering, staggering, jumping, get slow, I'm not even sure what to call it. Besides that, the CPU usage was always around 2% to 7% (if seen from KSysGuard, lower using ps).
    KSysGuard shows the ADB daemon consuming an average 4% CPU time
    After monitoring the adb process and system I/O operations, I noticed that the problem was probably related to ADB polling the host USB devices periodically. That made me think of the disastrous xHCI controller from Fresco Logic, which I have in my computer for providing USB 3.0 connectivity, that had already given me problems before.

    For now, what I do to avoid this issue when I need ADB is simply unloading the kernel module xhci_hcd:
    sudo modprobe -r xhci_hcd
    If I didn't want to use my USB 3.0 port I would just blacklist the module.

    If you have this issue, post a comment or contact me so we can have a further chat and possibly get more insight.

    Mar 13, 2013 - The vmware-usbarbitrator binary closes itself with "Pipe unexpectedly closed."

    Comments


    The binary closes itself after around 5 seconds. If run directly from the terminal it shows the following:
    # vmware-usbarbitrator
    Pipe unexpectedly closed.

    The following command only shows the following:
    # vmware-usbarbitrator --info -f
    VTHREAD initialize main thread 2 "usbArb" pid 7554

    This is caused by an empty /etc/arch-release (owned by filesystem).
    To fix it, add a version string to /etc/arch-release in the form of <year>.<month>(.<day>) (e.g. 2013.03.01).

    I have added this fix to ArchWiki, the official Arch Linux Wiki where more troubleshooting information is available.

    Update (2013/04/17):
    I have also added the AUR package vmware-usbarbitrator, which provides a systemd service to automatically run VMware-USBArbitrator on computer startup. This systemd service has now been integrated into a single, feature-complete package: vmware-patch.

    Feb 25, 2013 - Cannot find application with Spotlight (the missing solution)

    Comments

    As a recent user to the Apple world, I've been exploring and optimizing the OS X based on my needs. After playing with my OS X installation I ended up losing access to some applications (native ones!). I managed to restore them by copying the files from another OS X installation. However, Spotlight couldn't find the applications anymore. I searched for solutions but all I got was disappointment. So, I decided to fix it myself and share it with you.
    Spotlight cannot find an application that is installed

    After non-deliberately deleting some native applications I restored them by copying the files from another OS X installation. However, Spotlight couldn't find the applications anymore (but I could run them).

    I tried multiple ways to rebuild the Spotlight index as suggested in the community. Nothing did it.

    It turns out that the applications had a wrong set of permissions which made them invisible to Spotlight.

    After observing the other native applications' files I discovered that:
    • The main application directory and all its contents must belong to the user root and group wheel;
    • The main application directory and all directories recursively inside of it must have a set of permissions equal to 755 (Traditional Unix permissions);
    • All files recursively inside the main application directory must have a set of permissions equal to 644
    • The file inside the Contents/MacOS/ from the main directory must have the set of permissions 755 because it must be executable or the application won't run;
    The most important aspect is that the file Contents/Info.plist be readable in the others class so that Spotlight can view it.


    Now that we know the theoretical aspects of the issue, let's delve into some Terminal exercise:

    1. Open up Terminal and cd to the directory containing the main directory of the application you want to fix, e.g: cd /Applications/Utilities. Let's assume the application is called MyApp and its main directory MyApp.app;
    2. Set the right owner and group to every file and directory: sudo chown -R root:wheel MyApp.app;
    3. Set the general permissions to every file and directory: sudo chmod -R 775 MyApp.app;
    4. Change the permissions of only the files: find MyApp.app -type f -print0 | xargs -0 sudo chmod 644;
    5. Change the permissions of the actual executable file, to be executable: sudo chmod 775 MyApp.app/Contents/MacOS/MyApp;
    Although it doesn't need to be exactly like this, these steps get your application consistent with the other ones.

    If the application still doesn't show up in Spotlight, try to force a rebuild of its database:

    mdutil -E

    Update: Some application files may require specific permissions. Run Disk Utility to verify and repair the disk files' permissions.

    References

    Traditional Unix permissions