- simple and user-friendly interface
- marvellous artwork
- create your own flash cards in embedded editor
- search and download flash cards from Quizlet.com (over 7 million flashcard sets)
- upload your flashcards to Quizlet.com and share with other users
- post your newly created sets on Facebook's Wall
- support for text and images
- share your sets with friends via email
- shuffle cards by shaking device
- tap and swipe to interact with cards
AX4 is a logistics IT-platform which improves, automates and controls the logistical chain across companies and simply and flexibly integrates all parties involved. It is used by over 52.000 users, available in 92 countries and 12 languages. Major customers are DHL, BMW, Ford, DB Schenker, BASF and alike.
We are very proud to announce that Nomtek has developed the mobile AX4 application for all iOS-based devices: iPhone, iPad and iPod. With our application it is possible to track statuses of AX4 shipments anywhere and anytime - just enter the shipment reference number and get detailed tracking information within seconds. Application automatically stores the list of recent shipments for future reference and provides useful bookmarking system called "Watchlist". With push notifications user is instantly informed about tracking status updates for all shipments that he "watches".
From the developer's perspective, AX4 Tracking application introduces some advanced features. We have designed special table views that are made of native iOS UI components to achieve high performance (avoiding pitfalls of UIWebView), yet they are extremely flexible. Dedicated protocol that describes each table cell separately allows definition of font sizes, text and background colors, number of rows and columns, borders, images, buttons and much more!
Read about the application on iTunes, or see AX4 Tracking in action!
// time is a value from 0 to 1;
// 0 - begin of the effect,
// 1 - whole page has been flipped
void update(float time)
{
const Point A, B', C, D; // corners of the animated page (except B')
const float t = sqrt(time);
const Point P1 = lerp(B', A, t);
const Point P2 = lerp(C, D, t);
const Line line = CreateLineFromPoints(P1, P2);
const Point N = GetNormalVectorFromLine(line);
const float maxRadius = 0.5 * pageWidth * pi;
float R;
if (time <= 0.5)
{
// for the first half of the effect keep a fixed value of radius
R = maxRadius;
}
else
{
// in the second half decrease the radius from its max value to 0
const float s = sqrt( 2 * (1 - time) );
// note that "2 * (1 - time)" is between 0 and 1, so is "s"
R = (0, maxRadius, s); // <=> R = maxRadius * s;
}
const float invR = 1 / R;
const float halfCylinderCircumference = π * R; // π ≈ 3.14159
Vertex v;
for v in grid.vertices
{
const float dist = distance(v, line);
if (dist > 0)
{
const Point p = v - N * dist;
if (dist <= halfCylinderCircumference)
{
const float alpha = dist * invR;
const float sinAlpha = R * sin(alpha);
v.x = p.x + N.x * sinAlpha;
v.y = p.y + N.y * sinAlpha;
v.z = (1 - cos(alpha)) * R;
}
else
{
v.x = p.x - N.x * (dist - halfCylinderCircumference);
v.y = p.y - N.y * (dist - halfCylinderCircumference);
v.z = 2 * R;
}
}
}
}
- simple and learn-friendly interface
- beautiful graphics
- embedded editor for creating own EduCards packages
- easy import and export via e-mail or iTunes
- support for text and images
- shaking device shuffles cards
- tap and swipe to interact with cards
- support for unicode characters
Decision on what mobile phones/browsers to support for mobile web page project is not a trivial task. There are quite a lot of mobile platforms, each one with its own default mobile web browser, additionally there exist also third party browsers. The first thing you need to do is to look at some statistics as you have to decide on what platforms to focus on. StatCounter at http://gs.statcounter.com/ gathers web page statistics - we recommend to look in there. It is worth not only to look at worldwide statistics, but also regional statistics where your mobile web page will be mainly targeted - there are huge differences between different parts of the world. We will focus on European region, the results for USA will be similar. We also recommend to use rather line type of stats then bar type, because it gives information about trends, not only about current usage statistics (and you have to remember that you develop for some time in future not for now). So let's see how it looks in case of mobile web browsers in Europe for September 2010 :
We can see two things: there are a few platforms that we should focus on and that generally web browsers usage is generated by platforms' default browsers, with exception of third party Opera web browser, which is quite popular. In case of Opera we have two browsers: Opera Mini and Opera Mobile. Opera Mini displays web pages first processed in data centers (to make web page more tolerable for mobile phones and to reduce net bandwidth) thus its support for JavaScript is limited, whereas Opera Mobile is standard web browser and supports JavaScript, Ajax and Html5. We recommend to focus on Opera Mobile in case of more powerful web projects that need good support for those technologies. Summing it up we can define following recommendations:
Platforms that we recommend to focus on
- iPhone/iPod (for Europe and North America)
- Android (for Europe and North America)
- Blackberry (for Europe and North America)
- SymbianOS (for Europe only)
- Opera Mobile web browser (for Europe only)
Test Phone Recommendations
Here we restrict ourselves to platforms listed above. Selection of platforms/phones to support depends on web technologies and phone's functionalities you need during development. Thus we propose test recommendations for three categories (each one more restrictive then previous):- HTML 4.1, CSS and JavaScript support
- HTML 4.1, CSS, JavaScript support with focus on phones with touchable screens
- HTML 4.1, CSS, JavaScript support with reasonable support for HTML 5
HTML 4.1, CSS and JavaScript support
Finding and recognizing oldest acceptable version is quite hard and we recommend to use results gathered by John Resig http://jquerymobile.com/gbs/, who needed to recognize supported platforms for JQuery Mobile project. We propose to focus on native column from his table, as its represents default web browser for each platform. Definitely you need to support A-grade platforms from this table: iOS v3.1.3, v3.2 and v4.0 (and newest v4.1); Symbian S60 v5.0; Blackberry OS v5.0, v6.0; Android v1.5, v1.6, v2.1, v2.2. In case of iOS and Android the situation is clear: all A-grade versions run on majority of those platforms devices. In case of Blackberry OS v6.0 runs only on few latest phones so we recommend to support also v5.0 that runs on lot of Blackberry devices that are currently in use. In case of Symbian S60 it is worth to support version 5.0 that runs on touchscreen devices and if you want to support also non touchable devices then you should suport Symbian S60 version 3.2 as well. Additionally you need of course to support latest Symbian^3 platform. As to Opera Mobile you can see from John's table that latest version 10.0 of Opera Mobile should be supported, previous versions might gave you some trouble. Below is list of all recommended platforms and devices to consider:- iOS
- v3.1.3 :
- iPhone 3G, iPod Touch 3rd generation
- v3.2 :
- iPad
- v4.0, v4.1 :
- iPhone 3GS, iPhone 4
- Recommended test device:
- iPhone 3G
- v3.1.3 :
- Android
- v1.5:
- HTC: Dream (android dev phone 1 is htc dream also), Hero, Magic
- Motorola: DEXT, ME600, MB300, i1, MB501
- Huawei: U8230, U8220
- Other: Acer beTouch E110, Sciphone N19, Dell Mini 3, Samsung M900 Moment, LG-GW620
- v1.6:
- LG: GT540 Swift, LKH5200 Andro-1G, LU2300 Optimus Q;
- Samsung: Behold II, i7500 Galaxy, i5700 Spica;
- Sony Ericsson: XPERIA X10 Mini, Xperia X10;
- Other: Acer: Liquid A1, SciPhone N21, CSL Spice, Garminfone, HTC Tattoo, ZTE Link
- v2.1:
- Acer: Liquid E, Liquid Stream S110;
- HTC: Aria, Desire, Droid Incredible, Legend, myTouch 3G Slide, Wildfire, Google Nexus One;
- LG: VS740 Ally, KU9500,
- Motorola: Charm, Droid X, Milestone XT701, XT720, Defy, Flipout;
- Pantech: Sirius Sky, Sirius Izar, Sirius Vega;
- Samsung: i5800 Teos, Galaxy A, i9000 Galaxy S, Acclaim, M910 Intercept
- v2.2:
- HTC: Evo 4G, Desire HD;
- Motorola Droid 2
- Recommended test device:
- HTC: Dream (android dev phone 1 if available)
- v1.5:
- Blackberry
- v5.0
- models: 8330, 8900, 9000, 9630, 9650, 9700, 9100, 9300, 8530, 9500, 9530, 9550
- v6.0
- models: 9670, 9780, 9800
- Recommended test device:
- 8520 - (its not listed above but should have upgrade to v5.0 available)
- v5.0
- Symbian S60
- v3.2
- Nokia: 5320 XpressMusic, 5630 XpressMusic, 5730 XpressMusic, 6210 Navigator, 6220 Classic, 6650 fold, 6710 Navigator, 6720 Classic, 6730 Classic, 6760 Slide, 6790 Surge, C5, E5-00, E52, E55, E71x, E72, E75, N78, N79, N85, N86 8MP, N96
- Samsung: GT-i8510 (INNOV8), GT-I7110, SGH-L870
- v5.0 (also known as Symbian^1)
- Nokia: 5230, 5233, 5235, 5250, 5530 XpressMusic, 5800 XpressMusic, 5800 Navigation Edition, C6-00, N97, N97 mini, X6
- Samsung: i8910 Omnia HD
- Sony Ericsson: Satio, Viva, Vivaz Pro
- Symbian^3
- Nokia: C6-01, C7-00, E7-00, N8
- Recommended test device:
- Nokia C5
- v3.2
- Opera Mobile 10.0
- Recommended test device:
- test on some Symbian S60 device: so again - Nokia C5
- Recommended test device:
HTML 4.1, CSS, JavaScript support with focus on phones with touchable screens
In that case we have to narrow selection of supported platforms/devices. All iOS and Android platforms/devices uses touchscreen so for them the list is the same, in case of Blackberry the list of platforms doesn't change but list of supported devices shrinks to 4 models. In case of Symbian S60 we have to remove v3.2 completely as it doesn't run on any device with touchscreen. So below you can see list for supported devices with touchscreen:- iOS
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Recommended test device:
- the same device as in the previous section
- Android
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Recommended test device:
- the same device as in the previous section
- Blackberry
- v5.0
- models: 9500, 9530, 9550
- v6.0
- models: 9800
- Recommended test device:
- one of 9500, 9530, 9550 models
- v5.0
- Symbian S60
- v5.0 (also known as Symbian^1)
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Symbian^3
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Recommended test device:
- Nokia 5230
- v5.0 (also known as Symbian^1)
- Opera Mobile 10.0
- test on some Symbian S60 device: so again - Nokia 5230
HTML 4.1, CSS, JavaScript support with reasonable support for HTML 5
HTML 5 is not yet fully defined, so there is no such thing as a browser that fully supports HTML 5. But there are already quite a few well defined functions in this standard and they are already implemented in some browsers. If you want to go into deeper details please use this excellent tool for testing html5 compatibility: http://html5test.com or http://beta.html5test.com. In case of mobile web browsers we only have three platforms that support HTML 5: iOS from v3.1.3, Android from v2.1 and BlackBerry from v6.0. You might also consider to support Opera (please look at: http://www.opera.com/docs/specs/productspecs/), but here we assume that its HTML5 capabilities are not yet acceptable. This limits our choice of platforms/devices to the list below:- iOS
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Recommended test device:
- the same device as in the previous section
- Android
- v2.1
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- v2.2
- the same devices as in the previous section ("HTML 4.1, CSS and JavaScript support")
- Recommended test device:
- HTC Desire
- v2.1
- Blackberry
- v6.0
- models: 9670, 9780, 9800
- Recommended test device:
- one of models available for v6.0: 9670, 9780, 9800
- v6.0
Information about available emulators
- iPhone/iPod
- sdk (with simulator)
- the latest version of sdk has only the latest version of iOS simulator but here you can download older versions
- runs only on mac os
- default web browser is available under simulator
- Android
- sdk (with emulator) page
- jdk required - installed by default in snow leopard (try javac -version in cmd)
- eclipse required - Caution: There are known issues with the ADT plugin running with Eclipse 3.6. Please stay on 3.5 until further notice. We recommend Eclipse Classic (versions 3.5.2)
- ADT plugin for eclipse
- fortunately sdk (with ADT plugin) allows for having different platform versions installed and switching between them
- there is a default android web browser (called just "browser") available under emulator
- in android simulator you can configure several devices with different screen sizes, here is an excellent introduction to developing/testing applications on screens with different sizes/densities
- sdk (with emulator) page
- SymbianOS
- BlackBerry
- in order to browse html pages via browser on the simulator you need to install BlackBerry Email and MDS Services Simulator Package
- separate simulators for each blackberry device (see Simulators section)
- simple post describing how to setup a simulator environment
- has default browser
- connects with internet via blackberry gateway
- BlackBerry simulator is only for Windows !
- Opera Mobile
Collection of useful links
Mobile web development and testing in general
- Mobile browser - Wikipedia, the free encyclopedia
- JavaScript - Wikipedia, the free encyclopedia
- Building Web sites optimized for the iPhone and Android OS 2 - InsideRIA
- Cross-Browser Guidelines
- Mobile Phone Development - There is no WebKit on Mobile
- Mobile compatibility tables
- Mobile Web Design: Tips and Best Practices - Noupe Design Blog
- Comparison of web browsers - Wikipedia, the free encyclopedia
- A List of Mobile Web Browsers - Top Mobile Web Browser List
- Testing on Mobile Devices using Emulators « klauskomenda.com
- Ajax (programming) - Wikipedia, the free encyclopedia
- Solutions for Mobile Website and Web Application Developers
- Modernizr - runtime test
- iPhone Human Interface Guidelines for Web Applications: Metrics, Layout Guidelines, and Tips
- Mobile Web Best Practices 1.0
- Design and User Experience Library - Screen size
- List of iOS devices - Wikipedia, the free encyclopedia
- JQuery
Html5
- HTML5 Test for Mobile Browsers
- HTML4/5 Mobile Applications - InsideRIA
- The HTML5 test - How well does your browser support HTML5?
- HTML5 Boilerplate - A rock-solid default for HTML5 awesome.
- Safari HTML5 Audio and Video Guide: Introduction
- HTML5 support - Symbian developer community forums
- HTML5 Demos and Examples
- HTML5 presentation
Symbian
- Web Browser for S60 - Wikipedia, the free encyclopedia
- S60 (software platform) - Wikipedia, the free encyclopedia
- Symbian Emulator - Symbian Developer Community
- YouTube - How to setup the Symbian Emulator
- Mobile-review.com Description Nokia Web Browser S60 (OSS Browser)
- Nokia Virtual Developer Lab - The Source for Testing Mobile Applications on Nokia Mobile Devices
- Symbian Web Browser versions and device support
- Porting iPhone web applications to S60 5th Edition - Forum Nokia Wiki
Android
- Comparison of Android devices - Wikipedia, the free encyclopedia
- Supporting Multiple Screens | Android Developers
Blackberry
Opera Mobile
- wiki page
- web browser compatibility
- opera mobile engine called presto
- Opera Developer Network | Opera Developer Tools
Other

Current situation
So what is new about Google TV
- TV and STB manufacturers will have better access to the platform's source code and will be able to contribute to it.
- Google TV will support Android Market for downloading and installing applications selected / paid for by the user and created by any third party - in contrast to being limited to the apps provided by the broadcasters. For start, the users will be able to choose among hundreds of thousands of existing Android applications. For example, one thing I already know I'd like to do with my TV is to install existing Android TED application on it and watch TED talks.
Risks
TV application development - what is specific?
- Like in the mobile world, TV apps will probably be used mostly for consuming the content (watching videos, reading news, blogs etc). Content creation (like writing blogs) is not very convenient on TV even with full-keyboard remote controller, so such features should be simplified on TV and implemented in desktop versions of the services.
- Interestingly, like on the mobile screen, the TV screen should not contain too much content on single view. This is because of the high distance from TV to the user. Also, the user may be distracted by other activities he/she is performing at the same time in the same room, so must be possible to easily focus on the actions in the app.
- Unlike in mobile touch-screen world, on TV it will be difficult to scroll the content, so all important info/options should be available on one screen.
- TV apps should provide less interactivity and be more automated. For example, after user finished watching the video, the next video should start automatically. TV app user expects it to be working 'in the background'.
- TV app designers should consider the possibility of watching current TV channel and using the app simultaneously - they should devote part of the screen to the video even if the app is performing completely different tasks like instant messaging.
Consequences
Hint
- 2d animation
- 3d animation
- animation based on set of images
A flat plane
Vertex v;
for v in grid.vertices
{
update v;
}
Line line;
Vertex v;
for v in grid.vertices
{
const float distance = PointToLineDistance(v, line);
if (distance > 0)
{
reflect(v, line);
}
}
PointToLineDistance is a function which returns a distance between the line and the vertex v. When distance is less than 0 it means the vertex is behind the line. reflect function does a reflection of the vertex v across the line.update function should be called only for the duration of the effect with the argument progressFactor with values between 0 and 1 (0 means the begining of the effect, 1 means the whole page has been flipped). There is a lerp(A, B, s) function used which interpolates A towards B by s. s is clamped between 0 and 1. When s = 0 it returns A. When s = 1 the result is B. When s = 0.5 it returns the average of A and B. lerp(A, B, s) can be evaluated to the following form: A*(1-s) + B*s.sqrt(x) is a square root of x. We use the sqrt function to make the symmetry axis moving faster at the beginning of the effect and slower at the end. Try to experiment with the s value, pass the result to the lerp function and see what you get. Note that both s and progressFactor values have the range from 0 to 1.// progressFactor is a value from 0 to 1
void update(float progressFactor)
{
// play with other values:
// e.g.: s = progressFactor; or s = progressFactor * progressFactor;
const float s = sqrt(progressFactor);
Point P1 = lerp(B', A, s);
Point P2 = lerp(C, D, s);
Line line = CreateLineFromPoints(P1, P2);
Vertex v;
for v in grid.vertices
{
const float distance = PointToLineDistance(v, line);
if (distance > 0)
{
reflect(v, line);
}
}
}
- You don't need to update all vertices all the time (in the first stage of the animation most of them stay unchanged).
- Play with grid's dimensions and find values that best meet your needs
- In 2d case you don't need to use a grid at all, it will be much faster if you use just a few triangles (at least four I guess) but it'll be much more difficult to draw them properly.
- Take into account a density of the grid, if you animate only right side of your book then left side doesn't need to be covered by grid (or grid can be thinner on this side).
- Think about adding some shadows/lights to make the effect more realistic (I would try to write a pixel shader or play with a shadow texture).
- Note that the effect may look different on different platforms as it depends on many factors (e.g. camera settings, projection matrix, viewport resolution, etc.).
|
|
MyHammer.de is an online directory of small businesses and skilled individuals that can deliver services such as construction, plumbing, gastronomy, transport and many more. With over 6 million searches per month, MyHammer is the number 1 website for finding tradesmen and service providers in Germany, Austria and the United Kingdom. Now with the help of the application written by NOMTEK it is possible to search the database using an iPhone or iPad in a convenient way. Click Here to See the App in the Apple App Store.
UIPickerView *countryPicker = [[UIPickerView alloc] initWithFrame:CGRectZero];
countryPicker.delegate = self;
countryPicker.dataSource = self;
[countryPicker setShowsSelectionIndicator:YES];
countryTextField.inputView = countryPicker;
[countryPicker release];
It's all you need to show up a UIPickerView when you tap on a text field. Handling picker's delegates is very easy.
For the UIPickerViewDataSource you just need to give a number of rows and columns of the picker view.
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return countries.count;
}
UIPickerViewDelegate is used to:
- tell the control what values should be displyed at each row/column
- update the text field with already selected value
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
return [countries objectAtIndex:row];
}
- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
countryTextField.text = (NSString *)[countries objectAtIndex:row];
}
Of course you can assign your custom view not only to UITextField objects but also to other UIControl-derived objects (UIControl inherits from UIView and UIView from UIResponder).
If you want to use the inputView property with buttons you have to create a new class that derives from UIButton, make inputView property writable and override canBecomeFirstResponder method (see the code below).
Header file
@interface CustomButton : UIButton
{
UIView *_inputView;
}
@property (nonatomic, retain) UIView *inputView;
@end
Source file
#import "CustomButton.h"
@implementation CustomButton
@synthesize inputView = _inputView;
- (BOOL) canBecomeFirstResponder
{
return YES;
}
@end
Tip:If you wonder how to display a toolbar or any other view above your keyboard or picker (see picture above) then have a look at inputAccessoryView - another property of UIResponder class. It works exactly the same as the inputView.
The sample code for this article can be found here.






















