Pages

Wednesday, August 18, 2010

Knowledgeroot - installation and backup/restore

Knowledgeroot is an open source knowledgebase system. It helps you to create a central place for organizing information/knowledge for your team. 

Below is a screenshot from our current knowledgeroot system:


Anyway, the installation guide for this open source is not clear enough for you to install easily. I've just found a great guideline on below link:

http://www.debian-administration.org/users/ericrox/weblog/1


I already tried to install it on my Ubuntu desktop for the team to use currently. After some days, I need to move this system to another server because if I shutdown my computer, noone can use it anymore :)

Fortunately, backup & restore knowledge root is easy. You just need to backup/restore the database only. All attached files are stored inside the MySQL DB.


MySQL v.5.0 supports some nice commands for you to backup data:
http://dev.mysql.com/doc/refman/5.0/en/mysqlhotcopy.html


In this case, I prefer to copy the whole folder of my knowledgeroot database (because it contains also binary data files). So, I did below steps:


Step 1: using mysqlhotcopy to create backup database in raw


Below is the command I use to backup my knowledgeroot database to current directory:

sudo mysqlhotcopy -u my_db_account -p password_of_my_db_account  knowledgeroot . 


Step 2: copy this folder into USB, and copy it to the data directory of mysql (default mysql data directory is located at: /var/lib/mysql


However, I need to do a quick trick to copy this folder because /var/lib/mysql folder is not owned by my account by default
(a) sudo chown -R myaccount /var/lib/mysql
(b) copy the backup data folder into /var/lib/mysql
(c) return the owner for mysql account by this command:  sudo chown -R mysql:mysql /var/lib/mysql




Saturday, June 5, 2010

Smartphone market

Some useful information for all mobile developers

Mobile market share (2009)

(The graph below presents for general mobile market share)
Source: Gartner

Smartphone market share


Source: Nielsen

Worldwide Mobile Terminal Sales to End Users in 1Q10

(Thousands of Units)
Company
1Q10
 Units
1Q10 Market Share (%)
1Q09
 Units
1Q09 Market Share (%)
Nokia
110,105.6
35.0
97,398.2
36.2
Samsung
64,897.1
20.6
51,385.4
19.1
LG
27,190.1
8.6
26,546.9
9.9
RIM
10,552.5
3.4
7,233.5
2.7
Sony Ericsson
9,865.6
3.1
14,470.3
5.4
Motorola
9,574.5
3.0
16,587.3
6.2
Apple
8,359.7
2.7
3,938.8
1.5
ZTE
5,375.4
1.7
3,369.6
1.3
G-Five
4,345.0
1.4


Huawei
3,970.0
1.3
3,217.9
1.2
Others
60,418.1
19.2
44,972.2
16.5
Total
314,653.50
100.0
269,120.10
100.0
Source: Gartner (May 2010)

Worldwide Smartphone Sales to End Users by Operating System in 1Q10

(Thousands of Units)
Company
1Q10
 Units
1Q10 Market Share (%)
1Q09
 Units
1Q09 Market Share (%)
Symbian
24,069.8
44.3
17,825.3
48.8
Research In Motion
10,552.6
19.4
7,533.6
20.6
iPhone OS
8,359.7
15.4
3,848.1
10.5
Android
5,214.7
9.6
575.3
1.6
Microsoft Windows Mobile
3,706.0
6.8
3,738.7
10.2
Linux
1,993.9
3.7
2,540.5
7.0
Other OSs
404.8
0.7
445.9
1.2
Total
54,301.4
100.0
36,507.4
100.0
Source: Gartner (May 2010)

Refs:
http://blog.nielsen.com/nielsenwire/online_mobile/iphone-vs-android/

Comparision of smartphones

A useful link from wikipedia for comparison os smartphones
http://en.wikipedia.org/wiki/Comparison_of_smartphones

Wednesday, April 14, 2010

Gesture recoginization in iPhone SDK

For many magazine applications running on iPad, you easily see that the application detect your gestures for interactions on the content: rotate, swipe right to left (or left to right), tap. If we have to handle these gestures manually by code, it is not efficient.

So, Apple tries to make our developer life easier to breath by providing us a built-in mechanism to detect these common gestures on the latest iPhone SDK version.


You can find these APIs from UIGestureRecognizer class.
"A gesture-recognizer object (or, simply, a gesture recognizer) decouples the logic for recognizing a gesture and acting on that recognition. When one of these objects recognizes a common gesture or, in some cases, a change in the gesture, it sends an action message to each designated target object" - from Apple API documentation.


This class derives to:
1. UITapGestureRecognizer: presents the gesture that p fingers tapped the screen q times consecutively.
  • Input properties: numberOfTaps (q), numberOfFingers (p)
  • Output properties: location, touches
2. UISwipeGestureRecognizer: represents the gesture that p fingers tapped the screen q times consecutively.

3. UIRotationGestureRecognizer: looks for rotation gestures involving two touches. When the user moves the fingers opposite each other in a circular motion, the underlying view should rotate in a corresponding direction and speed.

4. UIPinchGestureRecognizer: represents the gesture that 2 fingers moving towards or away from a center point. This gesture is usually used for scaling a view.
  • Input properties: scaleThreshold
  • Output properties: scale, velocity, anchorPoint, transform
scaleThreshold is the critical scale the fingers must first move apart/together before this recognizer could fire.

5. UILongPressGestureRecognizer: represents the gesture that p fingers moved/stayed on the screen continuously for T seconds.
  • Input properties: numberOfFingers (p), delay (T), allowableMovement
  • Output properties: touches, centroid, startPoint
6. UIDragRecognizer: represents the gesture that 1 or more fingers moving on the screen for a distance of d. Optionally it may also be constrained to moving only within an angle of θ ± Δθ.
  • Input properties: minimumDistance (d), angle (θ), maximumDeviation (Δθ), restrictsToAngle
  • Output properties: touch, startPosition, startAngle
Note that the angles are in radians.
7. UIPanGestureRecognizer: represents the gesture that 1 or more fingers moving on the screen for a relatively large distance. This gesture is usually used for scrolling, and is used by UIScroller and UIScrollView.
  • Input properties: directionalLockEnabled
  • Output properties: offset, velocity, transform
8. UITapAndAHalfRecognizer: represents the gesture that 1 finger tapped the screen q times consecutively, and then moved/stayed on the screen.
  • Input properties: numberOfFullTaps (q), allowableMovement
  • Output properties: touch


An example for how to use these API:
UISwipeGestureRecognizer *swipeRecognizer = [[[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(DidSwipe:)] autorelease];

By default this line of code detect the swipes from left to right.

If you want to detect a swipe from right to left add the below line after the above line:
swipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;

On 1 view, you can add many gesture recognizers to handle different interactions by using below function
[self.view addGestureRecognizer:swipeRecognizer];

After that, just implement the [DidSwipe] method we already registered above:
- (void) DidSwipe:(UISwipeGestureRecognizer*)sender{
   Do something...
}


Refs:
+ http://iphonedevwiki.net/index.php/UIGestureRecognizer
+ iPhone SDK 3.2 API document

Happy coding!

Monday, March 29, 2010

Top reasons you should NOT join to the mobile team at Pyramid Consulting

1. There are many exciting things in our activities. You may DIE if you cannot control your emotions.
2. There’re many interesting things to learn. You will be overloaded with knowledge and new things – but useful for your work & your life.
3. Your friends may envy you because you can do many wonderful & crazy things.
4. We’re NOT colleague only. We’re brothers in a family. If you’re afraid of having more brothers, don’t join us.
5. We share all things together, all troubles & happiness, both in work & life. If you’re afraid of sharing, this team is not a good choice for you.
6. All members are courage men. Dare to talk, dare to do, dare to share.
7. You cannot stand some our bad habits for relaxing at the weekend: drink & eat dog meat, play some games – may be good (or bad) for your health.
8. If you can think of more reasons NOT to join into mobile team, please share to us.

Monday, March 15, 2010

Multiple phone application framework

Multiple phone application frameworks are: frameworks/solutions that allow developers to build applications to run on multi phone devices.

Recently, there' re some companies trying to build these solutions. This may make a new trend in developing application on mobile: build once, run every where (at least on most popular mobile platform) :)

Actually, this idea is good. However, it meets some troubles:
  • Mobile Platform + their SDKs are changes frequently. The multiple phones application frameworks cannot catch up with the speed of change of the platform + SDKs. Mobile developers prefer to have chance to use the latest APIs to make use of the strength of the newest platform.
  • On some popular mobile platforms (Apple, Android, BlackBerry), there' re always some private APIs - means some APIs are not official public. Developers must work on the real platform & SDK to use these APIs. The multiple phones application frameworks cannot wrap these APIs into their library because it needs to be more generic to be used in a common way.


Anyway, we should wait.

You can checkout a list of some open source multiple phone application frameworks here