Overview of hacker-friendly single board computers

The linux gizmos mag has a nice and helpful review/compilation of all kind of single board computers created in Jan 2017.

Brief reviews on the site look like this:

They also have a spreadsheet online to get the full overview.

Why do I blog this? I always wanted to play around with one of these. I did a bit playing around with Arduino but never went for something more than a 20-40 lines of code. Maybe this helps to get me into a deeper sphere of playing around with these quite powerful things.

Adding Emoji to your LaTeX document

I found a rather quick way to get emoji in my document. But this is the brute force quick way. The russian way. It always works but is not that elegant. PDF-images.

How to

  1. Read this blog post „Emoji in LaTeX documents“
  2. Download the hires emoji-images in this github-repo
  3. Search the emoji-PDF files you need for your document
  4. Copy them to the folder where your .tex-document resides
  5. Define a shortcut/macro to include those emoji-PDF files you need
  6. Include the following code in your .tex-document
\usepackage{scalerel} % needed package to scale the pdf-images perfectly
\def\emojithumbup{\scalerel*{\includegraphics{emoji_thumbup_1F44D.pdf}}{O}}
\def\emojistar{\scalerel*{\includegraphics{emoji_star_2B50.pdf}}{0}}

In your document

This my five star rating
\emojistar\emojistar\emojistar\emojistar\emojistar
I would say \emojithumbup for this easy integration.

Why do I blog this? Because when I tried to integrate the coloremoji.sty class in my LaTeX document, I got a series of issues with conflicting textinput encodings not matching the one the coloremoji expects. This way your avoid any new encoding issues by directly integrating PDF-images which is what will happen anyway with that class. maybe you need to include \usepackage[pdftex]{graphicx} too.

Developing for tvOS using the Remote Layout Helper

I am developing an app for tvOS. One thing you quickly run into when testing on real world devices is the limits of screensize on several TV models. For this apple added a calibration tool in the settings.

I found I needed this info to actually make my UI layout work for customers. So I took a screenshot and created this screenimage as (PNG) to overlay it at any time in the dev-process for orientation of myself as a Remote Layout Helper).

tvOS Layout Template
Download the Overlay Image (use Save as…)

On my main controller I added & called following method which I call in - (void) viewDidAppear:(BOOL)animated:

- (void) activateCalibrationOverlay {
    if( DEBUG_CALIBRATION_OVERLAY ) {
        if( !overlayImageView ) {
            self.overlayImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"tvOS_screen_size.png"]];
            overlayImageView.alpha = 0.0;
            overlayImageView.userInteractionEnabled = NO;
            [[self appDelegate].window addSubview:overlayImageView];
            [[self appDelegate].window bringSubviewToFront:overlayImageView];
            if( !overlayPlayPauseGesture ) {
                self.overlayPlayPauseGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleRemoteTapPlayPause:)];
                overlayPlayPauseGesture.allowedPressTypes = @[[NSNumber numberWithInteger:UIPressTypePlayPause]];
                [self.view addGestureRecognizer:overlayPlayPauseGesture];
            }
        }
    }
}

This adds an overlay of the Remote Layout Helper screen image on TOP of everything else and a gesture recognizer monitoring the PLAY/PAUSE-button of the TV remote. It calls following method:

-(void)handleRemoteTapPlayPause:(UIGestureRecognizer*)tapRecognizer {
    if( overlayImageView.alpha == 0.0f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.3;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.3f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.5;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.5f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.8;
        }];
        return;
    }
    if( overlayImageView.alpha == 0.8f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 1.0;
        }];
        return;
    }
    if( overlayImageView.alpha == 1.0f ) {
        [UIView animateWithDuration:0.3 animations:^{
            overlayImageView.alpha = 0.0;
        }];
        return;
    }
}

This helped me a lot doing the right things during development. I hope it helps you too. Feel free to share!

How to use it

You simply press PLAY/PAUSE again and again and the overlay will fade in at different alpha-blending-levels between 0.0 and 1.0. This allows to easily check boundaries of UI elements displayed against the screenlimits.

See following screen example:

The overlay in action on an app displayed.
The overlay in action on an app displayed.

Recognize, that you need a retained variable for the UIImageView called overlayImageView and another for the tap gesture recognizer called overlayPlayPauseGesture to be overlaid. And recognize that I use a boolean Precompiler-Flag named DEBUG_CALIBRATION_OVERLAY to switch this feature OFF in deployment.

Why do I blog this? I found it cumbersome to check against real world TV screens if my app works. So I just made sure that most of my UI is usable from within the MINIMUM SCREENSIZE frame the overlay gfx displays to me. Checking this anytime using the remote is a huge plus also on the real device. (Do not forget to disable the code on deployment!)