Archive for the ‘Programming Language’ Category
Google Objective-C coding standard
I am not sure what coding standard you follow, but I usually follow the Objective-C coding standard of Google for code formatting:
Spacing And Formatting
- or + and the return type, and no spacing in the parameter list except between parameters.@public and @private access modifiers should be indented by 1 space.@ label on its own line and a space between the @ label and the opening brace ({), as well as between the @catch and the caught object declaration.My New Book – 21 years old achievement
21 years old, I got my first book released, I was so excited. Buy it here
Today’s iPhone and iPad apps developers are often running into the need to refine, improve and optimize their apps performances. As more complex apps can be created, it is even more important for developers to deal with this critical issue.
Pro iOS Apps Performance Tuning and Optimization covers many common but difficult problems when tuning and optimizing performance for iPhone and iPad apps and how to resolve these problems efficiently. This book gives you the following:
- Basic knowledge on common problems in iPhone apps
- Advanced knowledge over data structure, algorithms, multithreading, and network data in iPhone apps
- Comparison with problems and solutions for Android and Windows Phone apps
After reading this must-have book, you’ll be ready to make the most of the processing power of the iPhone with your apps performance optimization know-how.
What you’ll learn
- Benchmark your apps using emulators and real device tests
- Increase and optimize UITableView performance in your iOS apps
- Increase your app performance using image and data caching techniques
- Tune your apps using algorithms and data structures
- Improve your parallel data access using multithreading techniques
- Optimize memory usage for increased battery life and better apps performance
- Use native C code to address memory leaks or EXEC_BAD_ACCESS
Installing App with iPhone Configuration Utility
I always have problems finding a good tutorial for my customers whenever I send them the adhoc app for testing, so I write this post to have a basic place for me and everybody else to send to their beta tester/customer without touching to iTunes with the crazy syncing process. This can be good for JailBreak iPhone as well but this is another story.
1/ Download iPhone Configuration Utility.
You can download the iPhone Configuration Utility for Windows here, and for Mac here.
2/ Plugin and find your device
You can find your device easily, and then choose add button as shown in the red box
3/ Select your app
Open Your File Browser and select the file you need, in this case is JobFinder.app
4/ Go back to device and open the Applications Tab
5/ Installing the app in
Robocode New Beta Release
Robocode has released a beta version for 1.7.3.0, I am happy to contribute 1 feature and 1 bug fix in this release. Please download, test it and tell us any bugs you found
Reference:
New Twitter XAuth and Sharing on iPhone
This Twitter sharing library for iPhone has a great User Interface, comparing to my current library for Twitter Sharing, the only problem is that it does not work with new XAuth project. So, I decided to take that UI and merge into my existing codebase for twitter xauth and sharing. The new library allow you to login, share and logout
https://github.com/vodkhang/Twitter-XAuth-and-Sharing
And here is the result. It looks great and really like the UIAlertView in iPhone
http://amanpages.com/sample-iphone-example-project/multiple-login-for-twitteragent/
Freelancer Lessons and Strategies
As my plan in Adelaide, I want to get some job to earn money as well as keep me up to date with industry technologies. However, this turns out to be much harder than I believe when Adelaide is such a small city that does not have many IT companies here.
Then, I started my second option in my plan to looking for freelancer jobs and going to websites that offer freelancer jobs to see what I can get from there, and things are growing up fast enough and I learnt some key lessons over the my new job.
Price
Price was my first concern over deals and bid to get accepted a project. However, I can see that most of times, price is not the top priority for employers. What they care is they can have a high quality product in a short amount of time with a reasonable price. My strategy is to pick a fixed hourly rate for myself when competing and then just calculating over the number of hours I need to work and give them a general price.
I try to convince people about quality, in many terms: communication and product. I think it is true for any work with clients to try to exceed their expectations, try to understand their problems well and do exactly what solves their problems. The price can be higher but we can save time, money and make people feel safe, they would hire us. So, don’t aim for only price. Put one that is reasonable and prove clients that it is worth every penny
Outsourcing
This is always a way to cut down the business cost. People hire me because they want to look for more reasonable price with the same quality. And I can make another step to outsource them back to Vietnam developers. It cut down the price for me and the client and I can save my time to more important jobs, such as studying in my university
(Supposed to be the most important one)
There are certainly more aspects about management when you have to do outsource and communication with customers when both of these are remote only. I don’t forget about technology lessons that I learnt and expect to learn and work over these freelancer works. These will be shared on the next entry.
References:
Image source: http://freelancejobfeed.blogspot.com/
Windows Phone 7 v.s iPhone Presentation in Barcampsaigon
Here is my presentation with Nghia Dang on the topic comparing the differences between Windows Phone 7 and iPhone Development. I share it here for others who cannot come. Contact me (vodkhang@gmail.com) or Nghia (nghiadang@kms-technology.com) if you have any questions:
Kms-Technology
iPhone Code Generation – Property
This is my new generation script, mainly copied from here with some improvements to meet my needs:
- Change the dealloc to [self.variable release] instead of [self.variable dealloc];
- Change the @outlet variable to check for the “UI” prefix rather than letting it put IBOutlet everywhere or I have to use 2 scripts at the same time.
- Add some of my own into the assign list
The second one is not a perfect solution for IBOutlet but considering that it doesn’t harm much except let some annoying IBOutlet out.
Twitter: XAuth + Sharing

DDSocialDialog for Twitter
Showing a place for logging and sharing a tweet in Twitter with my new library. You now can use XAuth without even understanding about how it works and you also have a nice facebook-style pop up.
For details about XAuth and how to use the XAuth functions, you can follow this link: Aralbalkan’s blog and his feather apps.
For showing a Twitter Pop up Dialog, I appreciate the effort of DDSocialDialog and the quick image is like in the left hand image.
I hope that this will help other iphone developers and me to cut their time and efforts to redo this dialog again and again.
iPhone Http Server – Bug Fix
Recently, I encountered a serious bug in Cocoa Http Server (for iPhone) that took me and my colleagues time to fix it. However, it turned out to be a simple, easy to fix bug.
If you use the sample code (e.g iPhoneHttpServer3.zip) in the google site, you will sooner or later, recognize a bug that if you upload a file B if file A is still uploaded, you get a crash. Another crash case is that you request to a page, turn off the server and turn it on again, and then upload a file into the server, you get a crash.
What’s going on? Why does this server not behave like any other web servers we know? Generally, the bug is due to the fact that some variables are not init in the correct place. The server assumes that whenever you send it a get request, it will init the data for handling the POST request, which is not always correct. Here is the way you can fix it. Or you can just redownload the whole sample code for CocoaHttpServer for iPhone here
In file HTTPConnection.h
@interface HTTPConnection : NSObject
{
// vodkhang
// Added properties
NSInteger dataStartIndex;
NSMutableArray *multipartData;
BOOL postHeaderOK;
}
// vodkhang
// Added methods
- (BOOL)supportsPOST:(NSString *)path withSize:(UInt64)contentLength;
@end
In file HTTPConnection.m
@implementation HTTPConnection : NSObject
/**
* This method is called after the socket has successfully read data from the stream.
* Remember that this method will only be called after the socket reaches a CRLF, or after it's read the proper length.
**/
- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData*)data withTag:(long)tag {
. . .
// Find some places look like this
if(expectsUpload)
{
// Reset the total amount of data received for the upload
requestContentLengthReceived = 0;
// Prepare for the upload
[self prepareForBodyWithSize:requestContentLength];
// Start reading the request body
uint bytesToRead = requestContentLength <
POST_CHUNKSIZE ? requestContentLength : POST_CHUNKSIZE;
[asyncSocket readDataToLength:bytesToRead
withTimeout:READ_TIMEOUT tag:HTTP_REQUEST_BODY];
// vodkhang
// Add this line in
[self supportsPOST:@"" withSize:0];
}
else
{
// Now we need to reply to the request
[self replyToHTTPRequest];
}
}
// vodkhang
// Add this method:
/**
* Returns whether or not the server will accept POSTs.
* That is, whether the server will accept uploaded data for the given URI.
**/
- (BOOL)supportsPOST:(NSString *)path withSize:(UInt64)contentLength
{
// NSLog(@"POST:%@", path);
dataStartIndex = 0;
multipartData = [[NSMutableArray alloc] init];
postHeaderOK = FALSE;
return YES;
}
@end
In file MyHTTPConnection.h
// Remove properties dataStartIndex, multipartData and postHeaderOK // Remove method `supportsPOST:(NSString *)path withSize:(UInt64)contentLength;`
In file MyHTTPConnection.m
// Remove method - (BOOL)supportsPOST:(NSString *)path withSize:(UInt64)contentLength;
I hope it works well. If you have any problem, feel free to contact me at : vodkhang@gmail.com











