Designing Informational Media

At the moment I am working on a series of videos intended to raise awareness among students for common language mistakes within scientific writing. This campaign mainly focusses on so-called ‚Denglisch‘, which is a neologism comprised of ‚Deutsch‘ – German and ‚Englisch‘ – English. However I am not going to delve into the details of the subject matter here, instead I want to give you a glimpse of what to think about when you are designing informational media

Know your Audience

The first and most important step is to lean back and think about your audience. Who are you designing for, what is their relationship with your product? What are you trying to achieve for them? And how are they going to use the thing you do?

Conceptualize

Once you have found out about your audience, try to make a concept. Write down ideas and storyboards. Try to narrate a story using specific examples. Do some brainstorming with collegues, talk about how you are trying to achieve certain effects and discuss stylistic choices.

Do lean Development

Last but not least: Produce. But don’t shy away from producing something while everything else is not perfect. You will learn the most about the media you are creating and about the audience you are targeting by doing lean research and development. What I mean by that is, that you should start producing once producing is possible. Try to use as few resources as possible and make prototypes of your product. Shoot with a smartphone instead of an expensive camera, use cheap effects, do rudimentary lighting, use a cheap built in microphone, but just do it. Producing will help you understand the production toolkit you need and will teach you a lot about what works and what doesn’t work. Maybe you have to change how you produce, maybe you have to change the whole concept in order to achieve what you were shooting for. The worst thing you could have done is to go for the highest production value and then find out that your concept is trash.

Furthermore this way enables you to get your product out the consumers, you can learn about whether there is an actual need you are fulfilling. You can also begin to estimate what size the audience is that you are producing for and how much enthusiasm you are generating. From here you can start refining your concept, your message, your production. Now is the time to buy a more expensive microphone, to produce your idea with higher production value.

Why we need more Fab Labs

I’ve been recently to a conference at RWTH Aachen and I truly enjoyed serving as a student volunteer there. As a bonus I was invited to visit the labs of the Human Computer Interaction Group of Prof. Borchers as well as their FabLab and I was super-impressed.

Fab Lab is short for fabrication laboratory and is basically a room full of computer controlled tools with the aim to make basically everything you can imagine. There are tools to 3D print plastics, to laser-cut wood and much more. It enables rapid prototyping and production of tools for various disciplines. In fact it’s even open to the public. You have to sign a sheet of paper, make your plans public and create something.

Why is this great?

Basically its a superb tool to do lean research and development. A huge part of research is finding creative new ways to measure things or find out about things or use methods that are not mass-fabricated and are very specific to the task. Being able to prototype solutions before manufacture the real deal in a short amount of time is a breakthrough. Imagine there is a part for a machine you are not sure about how it should look like – prototype it! Imagine you want to test usability of a product – prototype it! Imagine you want to repair something as fast as possible – produce it! Imagine you need a new solution and nobody sells it to you – invent it!

Why do we need more of them?

Basically thats what scientists have been doing all along, but these techniques are much faster than anything else before them. The thing is it’s not really about perfection. In the end you probably will have to order parts from a mechanical workshop or professionally mass produce, but using FabLabs can speed up the whole process of finding solutions. Because it enables a lean iterative way of research that was not really possible before.

Reading this, you probably think of a mechanical engineering student who 3D prints gears. However I firmly believe that this technology is beneficial to all kinds of research and development. Think of social science students who want to investigate the influence of relief-maps on visually-impaired people. Think of psychology students who are eager to know more about how we interact with certain things. Think of your dad who desperately wants a new handle for the garage door or a small startup who wants to test an idea with a small group of people.

The possibilities are manyfold and I believe that establishing new Fab Labs at every university or city is a great way to benefit everyone.

Building Tensorflow from Sources on Your MacBook

This guide is inspired by the tremendous walkthrough on TechPolyMath. It walks through building and installing the TensorFlow binary from source on a macOS system. Mostly I am publishing this also as a reference for myself but others might find it useful

The following assumptions were made, using a 2016 MacBook Pro:

  • macOS High Sierra
  • Intel Core i5 Processor
  • TensorFlow 1.4.1
  • Python 3.6.2
  • JDK 8u151
  • Bazel 0.5.4

Note that the resulting binary we build will be optimized for CPU support only.

Installing Prerequisites on macOS

Install Java Development Kit

At the time of publication, Bazel required the Java Development Kit 8.0. If it is not already installed follow these steps.

  • Download the DMG image that containers the JDK installer from Oracle’s Java SE Development Kit 8 Downloads page.
  • The file should be named something like jdk-8u151-macosx-x64.dmg
  • Mount the DMG image, double-click the installer, and follow the guided prompts.

Install Dependencies with Anaconda

It is strongly recommended that you use a virtualenv or Conda environment to isolate the packages and installation of TensorFlow from source. This enables you to maintain multiple combinations of package versions for various projects or experiments.

Since I use Anaconda, I created a new environment by executing the command conda create -n tensorflow python=3.6

Install Bazel

Instead of using the popular Homebrew System, I used anaconda. Basically I wanted to get by with as few tools as possible and since I am a Macports user I tried to avoid homebrew. You can refer to the Bazel documentation for alternatives.

  • From a Terminal, change into your newly created environment source activate tensorflow
  • Use anaconda search bazel to get the right version from conda-forge
  • Install using conda install --channel  https://conda.anaconda.org/c3i_test2 bazel
  • Confirm Bazel is installing by verifying the output of bazel version

I ran into a weird bug, where tensorflow wouldn’t compile with the conda-forge version of bazel 0.8.1, so had to use the next best version available.

Install Python Dependencies

TensorFlow requires the following Python packages:

  • six
  • NumPy
  • wheel

If these are not present on your machine or current environment execute the following to install:

pip3 install six numpy wheel</code>  <h3>Prepare the TensorFlow Installation</h3>  <h5>Clone the TensorFlow Repository</h5>  Now, clone the latest TensorFlow repository to some place on your computer by issuing the following command:  <code> git clone https://github.com/tensorflow/tensorflow

This will take a short while depending on your Internet connection bandwidth due to the repository’s size (~250 MB).

Most of the time you want install a release version rather than trunk. You can display the available releases and check out one using the following commands (example is TensorFlow release 1.4, since it is the newest release):

git branch -l --remote </code>  <code> git checkout r1.4

Configure and Build the TensorFlow pip Package

Frank Hinek from TechPolyMath posted a script that is based on the work of Sasha Nikiforov and a Stackoverflow post with a few minor modifications to support Anaconda environments.

Clone the build_tf.sh script gist to the same directory containing the TensorFlow source:

curl -O https://gist.githubusercontent.com/frankhinek/ \  20f8086d70886c56405fe4431f998ac4/raw/  \ 98c2ea1570d35bf20c0761390eb6d423ea387b02/build_tf.sh</code>  Now, make the script executable:  <code> chmod u+x build_tf.sh

Execute the script to configure and build the TensorFlow pip package using all of the CPU optimizations available for your CPU:

./build_tf.sh</code>  During the TensorFlow configuration process, accept all the defaults by pressing the Enter key repeatedly until the configuration is complete unless you have a specific need.  This build process will take some time to complete. In my experience it averages around 30 minutes, but a system with more than 16GB of RAM will compile faster.  The script will build a .whl file and store it in the /tmp/tensorflow_pkg directory.  <h3>Installing TensorFlow</h3>  The final step is to install the custom-built TensorFlow binary using the wheel file. The specific name of the while will vary depending on the version of TensorFlow and Python in your environment.  In my case, the command to install is:  <code> pip install /tmp/tensorflow_pkg/tensorflow-1.4.1-cp36-cp36m-macosx_10_7_x86_64.whl

Verify Installation

The last step is to confirm that TensorFlow is now installed and working as expected. Before proceeding be sure that you change to a directory other than the one that contains the TensorFlow source tree. We want to import the pip installed package and not the one in the source directory.

Launch the python interactive shell and execute the following commands:
import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello)

If the system outputs the following, then TensorFlow is installed and working:
Hello, TensorFlow!

Uninstall everything you don’t need anymore

JDK8

Take a look at this nice page documenting how you get rid of all traces of Java by Oracle: Uninstall Java, Uninstall Java JDK

Conda Dependencies

conda uninstall openjdk
conda uninstall bazel
conda uninstall libcxx
conda uninstall libcxxabi

Tensorflow git Repository

sudo rm -rf tensorflow

And finally you’re done, have fun with your newly compiled and optimized tensorflow on your Macbook. As you will probably notice it’s somewhat faster now. Personally I wonder if MPI support would make any difference on the Macbook, so maybe I try that next.