Wednesday, December 04, 2013

ultrahaptics for handsfree feedback

Introduction

Ultrahaptics is the name that a team in Bristol University is calling their touchless feedback system. Haptics is the term used to describe tactile feedback like a vibrating joystick or a force feedback joystick. In the case of ultrahaptics, the feedback is via focussing audio waves to a point. From what I understood, they do this by focusing sound waves using a phased transducer array.

This makes it really cool because now you get feedback without having to touch something.

Applications of Ultrahaptics

I can think of several applications for this kind of technology, the first of which is definitely console games. Imagine hooking this up with Kinect! So, here's my list of places where I would like to see this.
  1. Mashup with Kinect.
  2. Digital Signs and Kiosks. Right now the only way is to the touch the screen.
  3. Phones and Tablets. I'm not fully sure of this one, but maybe.

Linux Device Drivers for Ultrahaptics

I don't know if there are any Linux drivers written for this. From the video, it looks like the ultrahaptics array is hooked up to a Mac. If this makes the mainstream, then definitely someone will sit down and write drivers for it. There are several things they will need to take care of There are USB Joystick drivers today and they provide both control and feedback. This would be something similar. However, the userspace will also need to keep up. evdev would need to provide event notification for applications and they will need to use some ioctl to control the 'feel' of the 'screen'. All in all very interesting.

Friday, November 29, 2013

How to build and setup LLVM Scan Analyzer for Linaro Toolchain

Downloading and Installing Clang-Analyzer

Download LLVM, Clang, Clang-tools-extra and Compiler-RT from - http://llvm.org/releases/download.html.

  1. Extract the LLVM tarball. I'm going to use the variable LLVM to point to this directory going forward.
  2. Go to $LLVM/tools/src. Extract the clang release tarball. Rename the extracted directory as clang
  3. Go to $LLVM/tools/src/clang/tools/. Extract the clang-tools-extra and rename it as extra.
  4. Go to $LLVM/projects/. Extract the compiler-rt tarball and rename it as compiler-rt.
Note! - If you don't extract the clang, clang-tools-extra and compiler-rt in the respectively directories, it will not build them by default.

For more information look at http://clang.llvm.org/get_started.html. The instructions are for svn but they apply for the release tarballs as well.

Building and Installing Clang

Go to $LLVM directory and then you can configure, build and install clang.
 $ ./configure $ make $ make install
If you want to install clang in a specific directory then pass --prefix= to configure. Usually, I use /proj/staging/ to stage my builds and so, I usually build as ./configure --prefix=/proj/staging/llvm

Note! make install will not install scan-build and scan-view. They remain in $LLVM/tools/clang/tools/scan-build and $LLVM/tools/clang/tools/scan-view. So you will need to add these directories into your path.

Downloading and Installing Linaro Toolchain

Download Linaro Toolchain from - https://launchpad.net/linaro-toolchain-binaries/. Extract it to a directory of choice. I usually place it in /proj/staging/linaro-gcc. Next add the /proj/staging/linaro-gcc/bin directory to your PATH variable.

Running clang-analyzer with linaro toolchain

Now follow usual steps to cross compile your program. To enable scan-build make sure you run make via scan-build as shown in my previous post on running clang-analyzer.

Monday, November 18, 2013

Running a custom PHP application on the Bitnami Wordpress stack

Being an embedded software engineer, I usually go a bit spaced out when reading about things like wordpress, bitnami stacks etc.. I have dabbled on making small intranet sites with Ruby on Rails but have never looked at PHP.

Today, I downloaded a wordpress installer from bitnami and 10 minutes later I had a small site running on my laptop. I had a look at the various plugins and installed a couple as well.

Intrigued, I wanted to spend a little time learning PHP. So, I created a custom app by following the instructions from Bitnami's Wiki topic and started reading the tutorial from w3cschools. So far PHP doesn't seem very complex and I'm being to understand why it's so popular.

Steps to create a custom app


  1. Create a new folder in the apps directory, say 'test'.
  2. Copy over the conf folder from the wordpress directory into the apps/test folder. We will need to edit the configurations inside them
  3. Search and replace 'wordpress' with 'test'. Typically, these are directory paths
  4. Create a htdocs folder in apps/test. This will hold our application. For now create an index.php and echo a 'Hello World'.
  5. Now, we need to edit the apache server configuration files so that they can find the app. Bitnami makes it quite simple by keeping a configuration file in apache2/conf/bitnami with the name bitnami-apps-prefix.conf. Edit this file and copy the line pointing to wordpress directory to a new line and change from 'wordpress' to 'test'.
  6. Restart Apache and that's it!

Thursday, March 21, 2013

Use git commits to understand code design

http://gitster.livejournal.com/30195.html has an excellent point about using --grep and other options such as --author --since to grep through commits to find information. One really good thing about Linux developers is the quality of the commits - very high.

I was reading up about omapdrm and wanted to find more information on GEM - Graphics Execution Manager. Now, most of the code for omapdrm has come from Rob and so, the easiest thing to understand about GEM is to run 'git log --grep=GEM --author=Rob' and boom! you get a design document (almost!). Add -p to the git log command and you get the code changes done as well.

On similar lines, reading code differences is a must. The patch format isn't really good for my brain, and I prefer seeing code differences side by side. The tool - Emacs of course, esp. ediff. Just visit any file and do a M-x ediff-revision. When choosing the revisions, you can pick anything that git rev-parse understands. This tip is brought to you by http://blog.endpoint.com/2009/03/emacs-tip-of-day-ediff-revision.html. A real life saver because my older flow used running vc-log and then visting a revision and finally running ediff-buffers. ediff-revision is much better.

Tuesday, March 05, 2013

make uImage in 3.9-rc1

With all the multiplatform support, make uImage no longer works in 3.9-rc1. There are two options - either pass LOADADDR to make uImage or run mkimage manually.

The other option is to compile uboot with zImage support and just use the zImage that's created.

For a pandaboard pass 0x80008000 as the LOADADDR

Monday, February 25, 2013

static analysis with llvm

Using Scan Build

LLVM comes with a static analyzer - http://clang-analyzer.llvm.org. It works by overriding CC. So, to use it with autoconf'ed project, you need to first run it when running configure and then make. On Ubuntu you can always apt-get it, but if you are interested in building from source then take a look at my other post.
$ scan-build ./configure
$ scan-build make
In some case, esp. if you are building from source, scan-build may not find clang. So you will need to explicitly, pass the path to clang to scan-build. E.g. if clang is installed (via make install) at /proj/staging/llvm, then you will need to pass --use-analyzer to scan-build.

$ scan-build --use-analyzer=/proj/staging/llvm/bin/clang ./configure
$ scan-build --use-analyzer=/proj/staging/llvm/bin/clang make

Integrating Clang Static Analyzer into Makefile.am

Alex has a different approach to running scan build. In this post, he shows how to include a step to run the analyzer in every build. This is really neat because there is no change to your standard build flow. Every time you run make, it automatically calls the analyzer (or not if you don't include the step to all-local).

The flip side is that you need to use clang as the compiler only and not gcc or any other compiler. 

More Details on Clang Static Analyzer

More details on LLVM's static analyzer is available at http://clang-analyzer.llvm.org/scan-build.html.

Example of a Bug that Clang Static Analyzer found

I ran scan-build against wayland source some time back and caught a bug immediately - https://bugs.freedesktop.org/show_bug.cgi?id=61385.

To incorporate Alex's idea, a small patch to src/Makefile.am is required. Just add the following changes to Wayland's src/Makefile.am and then rebuild. Note that you must use clang as the compiler in this case.

+analyzer_srcs =                                      \
+    $(filter %.c, $(libwayland_util_la_SOURCES))     \
+    $(filter %.c, $(libwayland_server_la_SOURCES))   \
+    $(filter %.c, $(libwayland_client_la_SOURCES))
+
+analyzer_plists = $(analyzer_srcs:%.c=%.plist)
+
+$(analyzer_plists): %.plist: %.c
+       @echo "  CCSA  " $@
+       @$(COMPILE) --analyze $< -o $@
+
+all-local: $(analyzer_plists)
+
+MOSTLYCLEANFILES = $(analyzer_plists)

Sunday, February 24, 2013

Linux News - Feb 24, 2013


1 Sony

  • Gamers rejoice - PS4 announced (shipping end of 2013) - http://www.wired.com/gamelife/2013/02/sony-liveblog/. Moving away from PS3's Cell Architecture (PowerPC) to a PC Architecture (AMD X86-64) with 8 GB RAM. GPU is AMD Radeon based which they claim can hit 1.84 Terflops. So, PS4 won't run PS3 Games I guess.

2 Linux

3 Minix

4 NetBSD

5 Voyager

Sunday, February 17, 2013

Installing Freebsd 9.1 on an USB Stick

If you want to evaluate Freebsd, then the quickest way to do that is by trying it out on with USB stick. However the download page does not have USB images and instead there is an ISO file to burn on a CD.

Here are my instructions for installing Freebsd on an USB memory stick. Tried and tested on Freebsd 9.1.

1. Download and install mfsbsd from http://bit.ly/1d4VpA2. Pick the usb image and flash to the USB stick that you want to use.
2. To flash the image on MacOS, run diskutil list to find the drive. Then run diskutil umountDisk diskX to umount all partitions on it. Finally run dd if=mfsbsd-9.1-RELEASE-i386.img of=/dev/rdiskX bs=4m to write the image to the USB Stick.
3. Reboot and boot from the USB Stick. This will drop you into the mfsbsd prompt. Goto /dev and see what daX devices are present. Use fdisk to figure out which one maps to your USB drive.
4. Now run bsdinstall from /usr/sbin. When choosing the location to install, pick the same daX device that maps to the USB Stick.
5. ????
6. Profit.

Linux News - Feb 17, 2013


1 Linux

1.1 Releases
1.2 Unix History
  • http://www.levenez.com/unix/ has a great view of how Unix has evolved from UNICS in 1969. QNX afficianados will appreciate how QNX started as QUNIX in 1980 and hit Beta in 1983. In comparision, the first Android Beta was in 2007 as a fork from 2.6.23. So, why is it important to look at Unix History? That's because most of the code in Linux is long-lived and the linux community takes backward compatibility very seriously!
  • There is a simplified version on Wikipedia - http://en.wikipedia.org/wiki/File:Unix_history-simple.png.  
2 QA and Testing

2.1 Trinity Fuzz Tester
2.2 QA on Ubuntu
2.3 Static Checker for Linux Kernel
2.4 SystemTap
2.5 UMockdev
3 Virtualization

3.1 Qemu
  • Qemu 1.4.0 released. Claims that a guest os can perform at 95% of native performance.
4 Driverless Car