Media Informatics
iMeet application presentation
0
Finally, the biggest moment: application is ready!! I am very proud of this application, as it represents my achievements in fast learning and adapting to:
- new way of programming, as XCode and Interface Builder truly represent the ModelViewController paradigm
- new language- Objective-C, which as any language has its pluses and minuses
- new device: mobile devices on which I didn’t work since my experience on Sales Force Automation in TotalSoft company, back in 2005, on Windows CE.
I’ve structured the application visually in few areas:
1. Login screen – the ‘”gate” to the application. Since the access to the![]()
XML-RPC is done in a secure way, the application implemented also a credential input and recording mechanism. The mechanism is dual: user can enter the login into the first screen or in the iPhone Settings application. Depends only on him where and how he’ll manage his credentials.
The main point of this screen is to create a intuitive interface for users to insert their credentials, instead of having to leave the application and go to the iPhone settings.
Objective-C: Putting markers on Map control
1This article comes as a completion to my previous ones, XCode : using MapKit with no geocoding available out of the box and XCode: Modal windows – Google maps and shows how to add pins on your already created Map View.
First of all, adding the points to the map is not as intuitive as it might seem, so let’s start by creating a new class called POI – point of interest. Its header must be filled with this code:
#import <foundation foundation.h> #import <mapkit mapkit.h> #import <corelocation corelocation.h> @interface POI : NSObject{ CLLocationCoordinate2D coordinate; NSString *subtitle; NSString *title; } @property (nonatomic, readonly) CLLocationCoordinate2D coordinate;@property (nonatomic,retain) NSString *subtitle;@property (nonatomic,retain) NSString *title;- (id) initWithCoords:(CLLocationCoordinate2D) coords; @end
The User Interface
0This week we work also on the User Interface – the Flash GUI. It was challenging since neither me nor Loredana had previous experience in creating games under this application.
Because of this fact, we searched for some advices on the net and after quite a long trial and errors we found something interesting here . Even that it didn’t met all requirements, this tutorial was what we needed to get a quick start.
The animal images are free clip arts taken from http://www.free-clipart-
After following the steps and understood the concepts,we modified the application to :
- Change the resolution, as it has to run on a projector
- Redesign the entire scene graphics, but keeping basic elements like scoring and timer.
- Change the game’s AI from
- how many simultaneously balloons you can hit in a specific period of time to
- having only one target available at one time and you can get another one only if you hit the current one
- Remove the old targets and create 6 new ones more appealing.
- Implement the Arduino interface classes taken from here.
XCode: Modal windows – Google maps
1
From time to time, you’ll need to show in your iPhone application a view over the entire application without navigating and destroying your workflow of the application. I’ll present the mechanism of modal windows as it is implemented in Cocoa Touch.
Lets take a real case: you have a view in which you want to input an address. Near the address you have a button which will show the user the Map centered on the specific address that he inputted. How this can be implemented?
The answer is quite simple: you need to declare the view from which you launch the modal view as <UINavigationBarDelegate> in the header file (.h for newbies), like this:
@interface CtrlAddEvtView1 : UIViewController <UINavigationBarDelegate>
This way, the view will know “magically” how to interact with children views.
XCode : using MapKit with no geocoding available out of the box
1One of the tasks in the CSCW lab was to create a map on which the users to see the location of a specific address.
So I started working on it, knowing that the newest framework brings a lot of goodies, through which there is also a map framework. But surprise! Apple provides only reverse geocoding, not forward geocoding. This means that you can only transform a pair of Latitude / Longitude to the Map and it will show it to the user. But what to do when user enters an address?
My point is that nobody caries with him a GPS to search for the address, get the coordinates and enter them into my map!
I was curious about it and after a little search I found that there was a big argue about the geocoding and Apple didn’t want to pay the price that Google and Tom-Tom asked for this feature.
The User Interface
0A game should not have only a great idea, but also nice graphical interface. For this, we created an immersive forest environment where the user to be able to ‘hunt’ some animals.
Underneath is the background of the application:
We’re going on Arduino
0From the last lab we had a week of accomplishments:
- we set our hardware to Arduino platform
- completed on Monday a little programming and testing of the hardware platform
- decided the final idea of the game
- and also set Adobe Flash as our interface and display application
The idea of the game remains as presented a week ago. We will have a screen acting as a pressure sensor (composed from at least 9 sensors to be more precise about the user’s hit point).
The Arduino board will be linked with the sensors and will provide via USB the signals to the serial port. Flash will be on top, acting as a mix of a Controller of the user’s input gathered by the interface and providing the data for the View, thus creating a fully ModelViewController implementation.
The advantages of the MVC will enable us to quickly create an application, easy bug removal and improved User Experience by easy customization of the View.
Objective-C: Base64 to NSString and NSString to Base64
0While working on the CSCW Lab project, I encountered a situation in which the XML-RPC call returned an image, of course encoded as Base64. And guess what – in its known style, Apple doesn’t provide Base64 encoding and decoding – quite lame, given the fact that this encoding is used everywhere in data transfer over the internet – e-mail, browsers, web services – all of them use at some point this encoding to overcome the different local encodings on each one’s machine.
Once identified this problem, I had to solve it somehow – but guess what? – over the free sources there aren’t too many functions that provide this simple and basic encoding.
Finally, after few hours of searching, I finally found that Eric Czarny had a very successful implementation of this in its Cocoa XML-RPC Framework . After taking a quick look at its code, I end up using and importing into my project the
- NSStringAdditions.h. NSStringAdditions.m – providing the new category
+ (NSString *)base64StringFromData: (NSData *)data length: (int)length;
- NSDataAdditions.h and NSDataAdditions providing the new category:
+ (NSData *)base64DataFromString: (NSString *)string;
Being categories, they are automatically added to NSString and NSData automatically at runtime, thus their usage is straight forward :
UIImageView *uiIV;
// currentElementValue holds the string representation of the image, encoded in Base64
NSData *nsD = [NSData base64DataFromString: [dataLayer currentElementValue]];
if ([nsD ){
uiIV = [[UIImageView alloc] initWithImage:[UIImage imageWithData: nsD]];
}
Processing NSDate into an ISO8601 string
2
During the CSCW Lab, where I had the experience of working on iPhone, I had to connect to a XML RPC server. Some of the parameters of the request had to be formatted as ISO8601 standard. After some reading, I end up using the following code, managing both the conversion of a NSDate to NSString and a NSString to a NSDATE using the above format:
NSString –> NSDate
-(NSString *) strFromISO8601:(NSDate *) date {
static NSDateFormatter* sISO8601 = nil;
if (!sISO8601) {
sISO8601 = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone localTimeZone];
int offset = [timeZone secondsFromGMT];
NSMutableString *strFormat = [NSMutableString stringWithString:@"yyyyMMdd'T'HH:mm:ss"];
offset /= 60; //bring down to minutes
if (offset == 0)
[strFormat appendString:ISO_TIMEZONE_UTC_FORMAT];
else
[strFormat appendFormat:ISO_TIMEZONE_OFFSET_FORMAT, offset / 60, offset % 60];
[sISO8601 setTimeStyle:NSDateFormatterFullStyle];
[sISO8601 setDateFormat:strFormat];
}
return[sISO8601 stringFromDate:date];
}
Brainstorming 2
0In a previous post I explained the facts that forced us to re-think our project idea. Basically, our cool idea of an iPhone tied to a skateboard to create a exertion game require too much programming time. So we searched another idea who is required to be simpler and easy to be implemented in the remaining time.
So we got us a round table (the ones in BIT cafeteria are the best!) and put our minds to work.
First step : Use the Initial Design Techniques – Brainstorming (as learned in DIS I)
Our goal: collect as many ideas of exertion game as we can
Defer judgment, no criticism, no rejection of ideas
Include all ideas, allow also the leapfrog ideas
Result:
1. Virtual basket
2. Ping-pong game to the wall
3. Squash
4. Throw a ball to a target
5. Boxing
6. Throwing paper balls to garbage – fun in offices
After some debate we agreed to pursue in implementing the 4th idea. We will try to create an exertion game which will be composed from:
- a board which will act like a hit sensitive projection screen,
- a projector to display the target on the screen
- the software behind to calculate:
- hit points,
- decide if user hit the target
- scoring and level finishing
To have a clear idea of our game we created also a small storyboard:

