Between reality and cyberspace
Jenkins+Github+Dashing+TV+Raspberry Pi = Project-Cockpit

In our office we had a spare TV and wanted to use it as an information radiator in our room.

As our setup involves Github where pull requests are built with Jenkins to verify everything is working as expected, I wanted to put the success rate of the builds, the build health and the latest open pull request on the screen.

The screen is hooked up to a Raspberry Pi, so I had a vast amount of possibilities to get something on screen.

After having a look at Dashing, I decided to go for it and build the project-cockpit project on top of it.

It uses the Jenkins API to get the ration of successful / non-successful builds as well as the latest build state. It also calls the Github API to get the latest pull request to display the name and picture of the author and the title of the pull request on the dashboard.

This is how it looks like in action:

In case the latest build is broken, it plays a Youtube Video of an exploding nuclear bomb.

The next step will be to show the JIRA tickets in the different stages (open, in progress, done).

NASA Space Apps Challenge Lausanne - C&C CubeSat Project

Abstract

CubeSats are small sats for educational purposes

This weekend the “NASA Space Apps Challenge” took place and I participated at the EPFL, Lausanne to work on a challenge about communicating with multiple CubeSats in space

Our amazing team decided to go all the way from “Satellites throw some bytes on us” to “You can tap a button on your iPad and see temperature curve of Satellite #1 for the last 10 days”. Our Code is on GitHub.


What a weekend!

This weekend, the NASA Space Apps Challenge took place and a few cool guys and I decided to tackle the “New command & control system for CubeSat”-Challenge.

We were participating at the EPFL, Lausanne - a very nice location with a lot of cool people there! We had a lot of fun on Saturday & Sunday and I’ll definitely try to attend next time, too.

Thanks a lot

The organization team surely did a great job and I want to thank all of them! (I can only name a few of you, but you all did a great job, so count this as a big THANK YOU! to every one of you!)

For our project, I would like to give a big thank you to the guys from the Swiss Space Center and Dr. Anton Ivanov for his patience and knowledge. Without him we wouldn’t have had a clue where to find the right specs to talk with CubeSats.

And last but not least: My teammates. You’re awesome guys! Let’s keep up the good work!


The Challenge: Command & Control CubeSats

So our challenge was to create a command & control system for CubeSat satellites.

As Dr. Anton Ivanov from the Swiss Space Center pointed out to us, there is already a solution going from the packetization layer up to the end-user.

That solution is currently capable of talking to a single satellite (currently “Swisscube 1” - call-sign “HB9EG”).

Our task now is to go down one layer and take encapsulated TC-Transfer-Frames (resp. Segments) and assemble them together to TC-Command-Packets again.

Our architecture is built upon 4 components:

  1. A packet-generator generating sample packets and puts them into frames and a library to reassemble packets from some given frames.
  2. An interface to put packets enriched by information about the sending spacecraft and the status of the packet (valid or invalid) into a database
  3. An API-layer to access data from the database as JSON
  4. A client-application for the end-user (for demo purposes)
For the sake of simplicity, the first to steps are both done in the packet generator, but can be easily deferred by using the packet generation functions and the packet reassembling functions separately.

Our result

We put our code on GitHub - more detailed documentation is in the wiki there.

We’ve been chosen as one of the two projects nominated for the global NASA challenge. (This is the other one, if I remember correctly)

The current status is:

  • We have a basic version of the packet generator and the library (currently it only validates frames, but I am currently implementing the other functions [i.e. packet assembling and enrichment for the database).
  • The API-Layer generates dummy data for testing purposes already (see the wiki).
  • The client application exists in static mockups (more and more)


And the T-Shirt goes to…

Thanks to the sponsors (NASA, Swiss Space Center and evolucix - tell me if I missed someone) the two teams nominated for the global challenge got T-Shirts! Yay!

 Perspective

I am not really sure how exactly this will go on - the team stays in touch and we’ll be giving some presentation at the Swiss Space Lab - and are participating at the global challenge. But how exactly this will all will happen is unknown to me now. Stay tuned!

Android Speech Control

Recently I’ve been creating an Android App to enable fully adaptable speech-command-control for my phone.

The App is called “Geniedroid” and can be customized to react on any keyword you want with a variety of different actions:

  • Call: You can call a predefined contact or the contact mentioned after the keyword.
  • SMS: Go to the SMS composer to compose an SMS for the contact mentioned after the keyword or a predefined contact.
  • Run: Run the app previously linked to that keyword in the config.
  • Search: Do a web-search for the term mentioned after the keyword or perform a predefined query.

The keywords itself are chosen by you. For example, you may bind the keyword “Photo” to launching the camera-app - or you may prefer linking this action to the keyword “Cam”. Its up to you!

If you want to give it a try, you can find the file here. GenieDroid is tested with Android 2.1 - may run with lower versions.

Slide: Live-CD available!

As mentioned in my last article, I am currently building a desktop environment, called Slide (Simple, Lightweight, Individual Desktop Environment).

Slide has a very small amount of dependencies: An X Server, wxWidgets-X11 (preferable 2.8.11 at the moment), libpng, libjpeg and libtiff (and as well libc and libstdc++).

The core itself is only ~52 kb in size and contains a window manager and communication sockets, the core applications (Desk, “Starter” and Tray) are approx. 260 kb in Size. wxWidgets takes ~ 10 MB and X with a few 100 MB makes a complete system around 120 MB in size.

Please note, that Slide is in a very early stage and I appreciate any contributions - let it be programming apps for it, working on the core, artwork, testing or whatever you want to do.

If you want to have a look at it, see it on GitHub!

There are two branches: master, which is considered stable and should not be merged with experimental without being 100% sure what you do there - and experimental, where the newest features are implemented, but not tested against a live environment.

As you might encounter trouble with your system-configuration or might not to risk running Slide in its early stage on your computer now, I provide a Debian-based Live-CD.

Get the Live-CD here! (Takes ~ 355 MB)

Just put it in your drive, start and enjoy. You might as well load the ISO in some virtual machine, of course.

If you run into any trouble, feel free to contact me using the comment section!

Hope you enjoy it!

Iron+linux and blocking ads

[See below for update!]

After having used Firefox for many years, I had some problems with it in the last few months.

It needed ages to start, crashed several times per hour, I had many issues with Flash, no matter what plugin I tried and it took a huge amount of memory and cpu cycles.

This was the reason I switched to Opera. With spare improvements: Opera crashed several times per day (sad to say this was an improvement!), the Flash issues kept going on and it also wasted a lot of memory.

Then, a week ago, I tried Iron. I need to say: It is perfect for me.

Its really fast, its reliable (hadn’t had any crash so far), extendable (through a really nice API!) and allows me to comfortably surf the net. Additionally Flash works without any problems.

Although, there was a problem: The integrated adblocker did not work for me.

I followed the instructions, but with no effect.

If any of you encounter this, using Iron under Linux, I developed a small ad blocker extension, as the AdBlocker-Extension for Iron needs at least version 6, while currently the most recent Linux version of Iron is 5.0.381.0. 

You can find my extension here. It catches a fair amount of ads already, but if you like to, you may tell me (using “Inspect Element” from the context-menu) what code the ad used and I may extend the blacklist.

You should be abled to do it on your own, I guess. Just edit the blacklist.js situated in the extension’s directory (at the moment I don’t know WHERE this is :D)

It allows you to switch it on or off, whenever needed and works pretty nice for me.

I hope that its useful for you :)

Hang on,

0x86

Update:

I noticed I had some alert() call in code, which has been debug-code. I am sorry!

If you encounter dialogs popping up, stating some numbers, then you encountered exactly that piece of code ;) Just download the new version [link above is updated] and the problem is solved :)

Simple3D

So, the code is public and its time to tell you about the project.

Its something pure educational. Mostly for my own education, but I think some of you may be interested in this and use it for their own experiments.

If you want to, feel free! Just fork it and play.

Nomen est omen. Simple3D is a very, very, very simple 3D engine.

Its goal is not performance, but clean, structured and portable code and my goal with this is just my own education.

With this project, I wanted to use my knowledge of computer-graphics theory to build a real thing. I decided I would like to go from a pretty low level.

This is the reason, the library can easily been ported to everything, that is abled to draw some sort of pixels. Nothing more, nothing less.

There is plenty of work in this and as this is a freetime-project, I’ll only work on this whenever there is time for it. Change frequency may vary between minutes and years, probably.

However to me this is an interesting project. I learnt alot already and I am sure there is much more to learn from it.

Currently the engine allows the following:

  • Create a window for drawing
  • Creating different entities (some of them aren’t up to date with the new version. These are S3DCube, S3DRect and S3DTetraeder. I’ll get on this soon)
  • Primitives S3DPoint, S3DLine, S3DTriangle and S3DMesh
  • S3DMesh allows you to load a complex entity, consisting of different colored triangles, from a file.
  • Rotating, scaling and moving entities.
  • Rendering your entities on screen, of course :D

I concentrated the platform-specific code (i.e. X11-related code) in as few places as possible, thus its not a hard job to port it to other systems.

However, as I am currently trying to get some features into it, there is really much room for optimization. And its lightyears away from a “state-of-the-art” engine, of course! So if you’re just looking around for a good 3D engine you could use one of the dozens of other engines for productive use. This thing really is for educational purpose ;)

But if you wonder, how 3D graphics can be done - Simple3D is the right thing for you, maybe. Its well documented (I’ll improve this further.) yet but you still need some theoretical knowledge to understand the code.

Anyway, I like the idea of sharing knowledge, so here you go.

Its licenced using the MIT licence, so you’re pretty free with it - but I’d welcome it, if you give me feedback on what you do with it, okay? Thanks.

Have fun with it :)

So long and thanks for all the fish!