Category Archives: Programming

Rankz – an innovative middleware for sports event ranking information distribution

In one of my last posts I wrote about a young company Rarebyte. The folks from Rarebyte are mainly focused in game development but they also have a great experience in building highly scalable middleware applications for sport timing respectively sport events.

They are named their product line Rankz.

Rankz is desigend for small to very large sports events with thousands of  athletes. Its purpose is to get detailed information about every aspect of a sport event in real time. It has already been successfully used at the

Rankz is also the central core layer in a student project called “IRONNET” (FH-Sportstiming) done by students from Network Engineering & Communication (NET) and is also the overall software basis used  by “FH Sportstiming” (NET).  An older version is also operated by Triangle Show & Sports Promotion Gmb.

The middleware uses spring core layer technologies which allows them to be highlight flexible. The data structures which specify the sport event can be entirely configured through XML. A full featured editor for XML/POJO  is also available. The interface to the timing database can also be configured through XML. For this reason you are neither limited by the used format of the timing data nor to the database engine. Rankz works out of the box with MySQL, PostgreSQL, Oracle, MSSql.

Furthermore Rankz uses a dynamic plugin system. So new features can be added very easily. Plugins can be loaded and unloaded @ runtime.

Features

  • Superfast – detailed results nearly live during a race
  • Support for plugins (input, output, calculations)
  • Platform independent (completely written in Java)
  • Integrated webserver (Jetty)
  • Plugins:
    • Overall ranking
    • Ranking per split
    • Ranking in athlete’s age group
    • Relative ranking at certain splits
    • Timing, average Speed, finishing context,….
    • statistic system and missed time error correction system
    • FTP plugin upload
    • Athlete’s (geographical) real time position prediction.
    • SMS/MMS Notification Service
    • Athlete’s@Twitter …
    • Virtual Athlete’s rankings (audience favorite….)
    • Position estimation
    • RESTful resource connectors
    • Webservice Revision Layer
    • Distributed mode for sport events like wingsforlife
  • Query engine
  • RESTful interface
  • Web output for all plugins
  • CSV exports for all plugins
  • Android/iPhone  (iOS) applications for live data/timing visualization (special version for Event Moderator/sport commentators).

iPod Touch 4gen broken glass fixing session

Some impressions of my last iPod Touch 4gen broken fixing session.

This beast took me more than 4 hours to get the glass + digitizer emerged 🙂

Fix for ASP.Net parser error message: Could not load type ‘xxxxx.Global’

In one of my recent projects I stumbled about one annoying behavior of ASP.Net Projects.

For some reasons I got the meaningful error message :

Parser Error
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Could not load type 'WebService.Global'.

Source Error:

Line 1:  <%@ Application Codebehind="Global.asax.cs" Inherits="WebService.Global" Language="C#" %>

Source File: /global.asax    Line: 1

In my case I solved the problem in changing the build output path from  bin\x68\Debug to : bin

hope this helps anyone

have fun

Mario

How to cross compile ffmpeg for iOS (iPhone and iPad)

In one of my latest projects I needed some audio/video streaming capabilities for iOS driven devices.

The first App. which we implemented was a audio/HDVideo low latency conference streaming application for smart phones.

The second app was around  MPEGTS to Elementary Stream demuxer for some dreambox streaming fun 🙂

The framework of choice is the swiss army knife for streaming stuff,.. ffmpeg. To be more precise, ffmpeg consists of serveral libraries and the command line programs ffmpeg, ffplay, ffprobe.

What do you need:

  • Xcode4.3
  • Apple’s command line tools (Xcode -> Preferences -> Components)
  • pkg-config -> download
  • gas-preprocessor -> download (extract under your ffmpeg root dir ./gas-preprocessor)
  • build-essentials -> you can download an install script
  • m4
  • autoconf
  • automake
  • libtool

I used the latest snapshot available at the the time of writing. Extract the snapshot .tar to a folder of our choice.

Thanks Michael, the lead developer of ffmpeg, the ffmpeg source comes with the convenient autotools facilities. So we only need to set the correct configure flags 🙂

1. Compiler flags:

As we need to do some cross-compiling we need to select the compiler/assembler which comes with our XCode

–cc=’/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-llvm-gcc-4.2′.

–as=’./gas-preprocessor/gas-preprocessor.pl /applications/xcode.app/contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin10-gcc-4.2′

–arch=arm

–target-os=darwin

–cpu=cortex-a8

–enable-pic

–disable-yasm

2. iOs SDK path:

–sysroot=’/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk’

3. extra flags:

–extra-cflags=’-mfpu=neon -pipe -Os -gdwarf-2 -miphoneos-version-min=5.0′

–extra-ldflags=’-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk -miphoneos-version-min=5.0′

4. configure ffmpeg library components:

for example:

 –disable-ffmpeg
–disable-ffplay
–disable-ffprobe
–disable-ffserver
–disable-avdevice
–disable-avfilter
–disable-everything

and then enable the components you need

–enable-decoder=xxx
–enable-parser=xxx
–enable-demuxer=xxx

after successful completion of ./configure run make… and voilà 🙂

If you get some errors complaining about  “error: invalid operand in inline asm: ” try to disable assembler directives with

–diasble-asm

have fun

Mario

 

iPhone4 slack joint microphone quickfix

One of my colleagues, Marvin – proud owner of an iPhone4, has been fighting for some weeks with his iPhone internal microphone. Skype and Facetime stuff are working without problems but on “Radio” calls he got unsuspected mutes. The issue occurs in not deterministic intervals.

First aid,… yeahhh we have to open the phone, … operation on the open heart :-).

The problem must be the bottom mic. So we disassembled the bottom part of the phone.

No fancy actions here,… one two three screws open, some lever actions to loosen the glue stuff and voilà it’s open.

If it were up to me I would eliminate the apple hardware and build in a Galaxy S hardware, but marvin was dead set against it,… I don’t know why 🙂

Update” :

We initial thought that the bottom microphone was causing the problem. It turns out we were wrong 🙂

After 3 days without mic. problems I would say the problem is the grounding screw left next to the upper microphone. The conductivity pad on the print is very small and it seems that slight corrosion which results in an increased transition resistance to GND causes the mic problem. 🙂

Have fun!

Mario

Switching iPhone4 from custom iOS 4.3.1 to custom iOS 5.0.1

It’s been a while I updated my developer iPhone4 to custom  iOS 4.3.1.  According to statistics more than 75 % of all registered mobile iOS Devices are on iOS >= 5.0. So I decided to switch over to 5.0.1.

It would be remiss not to tell you that 5.0.1 is currently also supported as Untethered jailbreak, which I need for some comprehensive study 🙂

But here’s where the problem starts.

It’s been a while since Apple released version 5.0.1 and at time of writing the sign window is just closed. So if you build your custom ROM with your favorite RomOMagic Tool, put your device in DFU,.. fireup iTunes and start the recovery procedure,… you will end with a shine This device isn’t eligible for the requested build…… umpf WTF.

etc/hosts are ok, but iTunes cannot “sign” your ROM.

So what can you do?

First, as a brave jailbreaker you have your umbrella always with you and also a bunch of valid SHSH Blobs and the corresponding APTickets. We are interested in BLOBS for 5.0.1 🙂

Second, we need RedSnow. With this tool you can stitch (sign) an IPSW with your SHSH blobs.

Be sure to stitch only a custom ROM without the BaseBand!

voilà, no annoying isn’t eligible message,….after flashing your device should boot with a shiny new custom  5.0.1

be nice

have fun

Mario

Fixing XCode 4.x slow responsiveness / performance

The last months I noticed a very annoying behavior of Xcode 4.2 which results in responding very slowly to user interactions, e.g. editing code, debugging refactoring … mostly all IDE day to day work were affected.

It turns out that the problem is related to the project “workspace ” file. If  you delete em, .. yes you can :-), you get back a more or less speedy XCode.

The Credits for this valuable hint goes to link

have fun

Honeycomb for Tegra 2 based (POV, Vega,….) Tablets

Why….. because we can 🙂 The guys from TeamNewCo and TeamVillain made the first running Honeycomb (VegaComb) port for the Tegra 250 based tablets.

The last evening I reflashed my POV with the VegaComb ROM,… and it works almost flawlessly. If you are interested you can download the stuff from the tabletrons forum.

Just in case you have any trouble installing the ROM.

I started from a fresh 1.09 firmware rev from myadventvega, then installed the recover apk mentioned here, rebooted and recovered from the zipped ROM. .. e volà.. 🙂

And remember if you like it consider to support them with a donation!! 🙂

12.07.2011 – Update….. the newest VegaComb seems to be version beta 1.7 link

have fun! 🙂

Three20 how to use TTTableView within TTScrollView addition

In a current project I came across the situation that I wanted to implement a cool TTScrollView with a few TTTableViews in it.

For some reason in my version of the current Three20 branch the TableView was receiving the “up and down” touch events but the parent view (TTSscrollView) didn’t get any touch events. Googeling give me the result that some of you had the same problem but I couldn’t find any solution for the problem.

So I came up with the following solution for the problem.

I added a new category TTTableView+TouchesMoveAddition:

// UI
 #import "Three20UI/TTNavigator.h"
 #import "Three20UI/TTStyledTextLabel.h"
 #import "Three20UI/UIViewAdditions.h"

// UICommon
 #import "Three20UICommon/UIWindowAdditions.h"

// Style
 #import "Three20Style/TTStyledNode.h"
 #import "Three20Style/TTStyledButtonNode.h"
 #import "Three20Style/TTStyledLinkNode.h"

// Core
 #import "Three20Core/TTCorePreprocessorMacros.h"

#import "TTTableView+TouchesMovedAddition.h"

@implementation TTTableView (TTTableViewDataSourceNIBCapAddition)

- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event {
 [super touchesBegan:touches withEvent:event];

if ([self.delegate respondsToSelector:@selector(tableView:touchesMoved:withEvent:)]) {
 id<TTTableViewDelegate> delegate = (id<TTTableViewDelegate>)self.delegate;
 [delegate tableView:self touchesMoved:touches withEvent:event];
 }

if (_highlightedLabel) {
 UITouch* touch = [touches anyObject];
 _highlightStartPoint = [touch locationInView:self];
 }
 }
@end

So if you implement the UITableView protocol in your ViewController which holds, for example, your TTScrollView:

- (void)tableView:(UITableView*)tableView touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{
 tableView.scrollEnabled = NO;
 [_scrollView touchesBegan:touches withEvent:event];

}

- (void)tableView:(UITableView*)tableView touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event{

 [_scrollView touchesMoved:touches withEvent:event];

}

- (void)tableView:(UITableView*)tableView touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event{
 tableView.scrollEnabled = YES;
 [_scrollView touchesEnded:touches withEvent:event];

}

The touch events will be forwarded to the TTScrollView.

Focus on the scrollEnable calls !!!… 🙂

have fun 🙂

Nvidia Tegra ADB driver installation

Since a couple of people ask me about installing the ADB stuff, … here we go.. 🙂

So these is how i managed to get it working.

  1. Remove your POV drivers, these drivers are for rescue stuff.
  2. Install the Latest Android SDK
  3. Open the SDK Manager in “Admin” Mode and download and under “Available Packages” -> “Third party Add-ons” download the “Google USB Driver package.  After installation you will find the ADB driver under “..Android\android-sdk\extras\google\usb_driver”
  4. Goto “..Android\android-sdk\extras\google\usb_driver” and open android_winusb.inf.
    1. Search for [Google.NTx86] and [Google.NTamd64] add

;NVIDIA Tegra

%SingleAdbInterface% = USB_Install, USB\VID_0955&PID_7000

%CompositeAdbInterface% = USB_Install, USB\VID_0955&PID_7100&MI_01 (well spotted Michael 🙂 )

  • Open a shell an execute “echo 0x955>> %USERPROFILE%\.android\adb_usb.ini” (now without post space after hex, well spottet susafi!)
  • Connect your POV to your PC. Open the device manager. Here you should see something like “Nvidia Harmony with a yellow sign.
  • Right-click it and click ‘Update Driver Software..’. -> select to pick from a list device drivers on your computer
  • Browse to the google-usb_driver folder inside your Android SDK folder and select the android_winusb.inf file
  • Now you should see a new section “Android Phone” -> “Android Composite ADB Inteface”
  • Stop – Start you ADB server and check with “adb devices” for your POV. You should see something like

List of devices attached
0270308343a11617        device

One last note, if you have troubles deinstalling your POV driver, you can use “USBDeview”. Just search google for it.

have fun

POV Mobii Tegra Tablet and how to pimp it

A few days ago I got a shiny new Point of View Mobii Tegra 2 drive tablet.

The POV Mobii is equipped with :

  • Dual core Cortex A9 – 1 GHz
  • NVIDIA Tegra 250
  • Memory 512 MB DDR2 + 512 MB NAND
  • LCD display 10.1″ 1024×600 Capacitive touch screen
  • Operating system Android 2.2
  • WiFi 802.11 b/g
  • Graphics output HDMI
  • Audio ports Headphone out
  • Speakers 2x 1 W
  • Webcam 1.3M Pixel
  • USB Ports 1x USB 2.0 host

– So far so good.

But…, there is no android market installed, … for now 🙂 and the USB host mode is set to master.

So what can you do…..

After googling around and with the help of some hardware debugging I found out that the used hardware seems to more or less the reference design for the Tegra hardware which is also used in some other products.

One of this is Products is the Vega ADVENT Tablet. The OS used with this tablet supports USB host slave mode .

The first thing you have to do is to download the image for the Vega and flash you Mobii. (I’m using versoin 1.08).

After bootup you will have a MobiiVega-hybrid :-). You will also notice that the Vega OS is a bit faster then the POV version.

The next step is to upload a special ROM addon called the MoDaCo ROM addon. You can download it from here. If you have problems installing the addon on your 1.08 image you can also download the 1.06.05

Upload the addon is a bit more tricky. In the downloaded addon archive you will find an android debugging  bridge driver ADB . This driver must be installed for your MobiiVega-hybrid.

I used WIN7 for that process and encountered some problems where the tablet with activated USB debugging was not recognized by the OS.

If you also run into this problem you can fix it like doing the following:

Got to your device manager and open the USB-Controller section. There you will find a USB-Composite Device. Remove this device with its drivers and trigger a search for new hardware. Now you will get a new device ADB device for which you can install the ADB drivers.

After extracting the downloaded archive execute the install scripts and … here you go with android market, and a lot of other goodies 🙂

If you interested in some more details you may also have a look here. There are also some modified kernels around read here.

Ahhh and yes…. It goes without saying that any modification you do on your tablet and which eventually may fail are not in my responsibility :-).

have fun