Tuesday, July 26, 2011

Working for MartianCraft

In case you missed my tweets earlier this week, MartianCraft is looking to add a few developers. We're looking for a couple of experienced developers, and are also thinking about bringing in one or two entry-level devs without significant experience to be trained up.

Initially, the work would be project-based contracting and would start in late August. Conversion to full-time employment is a possibility, but not right away.

If you're interested in being considered, send an e-mail with relevant work experience and/or résumé/CV to work@martiancraft.com.

Monday, July 25, 2011

How to Care for Your iPhone


For most of us, our iPhone is a very essential part of our life. It keeps us linked to our business, our family and our friends. It isn’t just a phone. If something happens to our phone to render it unreachable, we go into panic mode. Here are ten ways to care for your iPhone to retain it safe and functioning properly.

1. Don’t leave it in your car. Cars are not a good place to leave your iPhone, even for short periods of time. Temperature limits of hot and cold can damage your device. Hot temperatures can particularly be magnified inside of a vehicle.

2. Avoid high moisture areas. Bathrooms, enclosed swimming pools and other high damp areas can cause water damage to cellphones much faster than you might recognize. Leave your cellphone behind when you enter these kinds of areas where the air is thick with moisture.

3. Drying it out. If your iPhone should get unprotected to moisture, take the back off and remove the battery as soon as possible. To captivate the moisture, place the phone in a container of uncooked rice. Immerse the phone totally in the rice and seal the container. If no rice is available, let the phone air dry for a day before trying to operate it again.

4. Use display protectors. The surface of your iPhone can easily become scratched and marred- you should already have learned it from one of our posts. Guard it with transparent film protection sheets. Change the sheet every few months. You can even bring your phone into your local cellphone carrier and have it renewed for you.

5. Keep it in a hard case. Purchasing a hard case to snap your iPhone into is a wise investment. The case will take the punishment of abuse instead of the phone itself.

6. Car chargers. Car chargers are a great convenience, but they shouldn’t be your primary charger. You should also disconnect your iPhone from the car charger when you are starting or shutting off the car to avoid injuring it with power surges.

7. Battery indicator. At times cellphones will appear to be losing their charge more rapidly than normal, when, in reality, it is the battery life pointer just giving a false alarm. To spot on this situation, let your phone battery to go thorough dead before recharging. After doing this a couple of times, the indicator should be reset and start action correctly again.

8. Don’t overload. Your iPhone is a mini-storage device and has a restricted amount of memory. If you find your browser or apps freezing, you may be reaching your memory limits. If there are apps that you don’t use, removing them from your iPhone on a regular basis can free up more memory.

9. Don’t overcharge. It is suggested that you remove your phone from the charger once it reaches a full charge, or else shut the phone down when charging the phone. Leaving a fully charged phone plugged into the charger and turned on can lead to overheating.

10. Be aware of placement. Many iPhones are injured because of being set down on a hood or roof of an automobile, and then forgetting it there when the owner drives away. An iPhone moving loosely in a handbag is also subject to ‘battering’ by other items in the bag. Keeping your device in a separate pocket of a handbag is much favored.

Maybe you’ve already experienced any of the situations listed above. We all agree that it is simply a common sense, but most of us find it hard to learn from others’ mistakes, unless they suffer all on their own...

Tuesday, July 19, 2011

iPod nano – A Long Way Before It’s Here The Way It Is!

Apple products probably are the most rapidly developed devices in the world of technology. To measure the progress, let’s take one of Apples successful products – iPod nano. Below you can see the differences between the first and the 6th (the last so far) generations. You can compare the two and see how huge the progress has been in only 4 years!

1G

Original Release Date - February 7, 2006
Capacity- 1GB, 2GB, 4GB
Colors- Black, White
Rated battery life (hours) - audio 14 hours, slideshow 4 hours
Size- 89mm, 41 mm, 6.9 mm
Weight- 42.5g (1.5 oz)


6G

Original Release Date - September 1, 2010
Capacity- 8GB, 16GB
Colors- silver, graphite, blue, green, orange, pink, red Special.
Rated battery life (hours) - audio 24 hours
Size- 37.5mm, 41 mm, 8.78 mm
Weight- 21.1g (0.74 oz)

iPod nano actually is a global product, and its 29 UI languages prove this fact. The last version has a capacity of 240 to 1000 songs in 128-Kbps format – this is a whole library! Why do we love iPod’s so much, even now, when the world is so crowded by smartphones and numerous devices for music and video? Because: we can use iPod nano at the gym, while riding a bike, and with most leisurely outdoor activities. It’s so small and light that can clip on the collar or sleeve with an incredible ease, iPod nano has the “apple / line-out” connector, features pausable AM/FM radio, has a touch screen for stress-free navigation, and it turns on and off instead of just switching to a “sleep mode”!

Monday, July 18, 2011

iOS 4.3.4 Update Preventing Hacking & Jailbreaking


A software update has been released by Apple for the majority of its devices, including the iPhone 4, iPhone 3GS, iPad 2, iPad and generation 3 and 4 of iPod touch. Available now by plugging it into iTunes, it’ll bring your device to version 4.3.4.
The update is free and fixes a vulnerability of the PDF hacking, with which a malicious PDF file could sneak malware into your iOS device, giving hackers access to your hardware. Moreover, the same PDF file allows easy jailbreaking of iOS 4.3.3, which frees users from the strict constraints Apple sets for its iOS software. Apple definitely sought to stop that as hastily as possible.

It doesn’t take a lot of time to install the update if you backup your iPhone on a regular basis. Having tries it on our devices; there are no significant changes in system operations after the update download. 

Anyway, it’s a wonderful feeling when you recognize that your iPhone is no longer bound by the quirks of some nasty PDF files!

Thursday, July 14, 2011

Auto-Incrementing Build Numbers for Release Builds in Xcode

I use the wonderful Test Flight to distribute builds. One thing that Test Flight is a little picky about is build numbers. When you upload a build, it uses the build number to see if you're uploading a replacement or a new build. It will let you create a new build even if you don't remember to increment the build number, but it's an extra manual step, and then you end up with two builds with the same build number.

Because I'm forgetful, I wanted to automated this process. Basically, I wanted to increment the version short string any time we do an Archive and increment the bundle build ID any time we do a Release configuration build, but leave the version numbers alone on Debug builds.

Unfortunately, several of our projects are ones that we inherited or took over, so not every project uses the same version numbering scheme. How we increment 1.0b5 is different from how we increment 1.0.12, or a simple build number like 1058.

The way I deal with this is a Run Script Build Phase in my application's executable target that runs the following Ruby script (make sure you set the "shell" field to /usr/bin/ruby, and make sure the script is the last build phase in the application). Feel free to use this script if you wish and modify it to meet your needs. If you improve it, I'd be glad to incorporate improvements back into it. One item of note: the way that I differentiate between Archive builds and other Release configuration builds might be a bit fragile since I'm relying on an undocumented naming pattern in an environment variable.

Note: I'm aware of agvtool. I avoided it for two reasons. First, I wanted more control over the numbering schemes, and second, I tried using agvtool in a build script a few years back, but at that time, there were issues when you bumped the version numbers of a project that was currently open. Those issues may have been resolved, but I didn't want to fight that battle again.

def get_file_as_string(filename)
data = ''
f = File.open(filename, "r")
f.each_line do |line|
data += line
end
return data
end


def handle_alpha_beta(old_value, letter, infoplist, start_of_value, end_of_value)
parts = old_value.split(letter)
version_num = parts[0]
alpha_num = parts[1].to_i

alpha_num = alpha_num + 1
new_version = version_num.to_s + letter + alpha_num.to_s
print "Assigning new version: " + new_version + "\n"
new_key = "<string>#{new_version}</string>"

part_1 = infoplist[0, start_of_value - '<string>'.length];
part_2 = new_key
part_3 = infoplist[end_of_value + "</string>".length, infoplist.length - (end_of_value - start_of_value + (new_key.length - 1))]

new_info_plist = part_1 + part_2 + part_3
new_info_plist
end

def find_and_increment_version_number_with_key(key, infoplist)

start_of_key = infoplist.index(key)
start_of_value = infoplist.index("<string>", start_of_key) + "<string>".length
end_of_value = infoplist.index("</string>", start_of_value)
old_value = infoplist[start_of_value, end_of_value - start_of_value]

print "Old version for " + key + ": " + old_value + "\n"
print old_value.class.to_s + "\n"
old_value_int = old_value.to_i
print old_value_int.class.to_s + "\n"
if (old_value.index("a") != nil) # alpha
infoplist = handle_alpha_beta(old_value, "a", infoplist, start_of_value, end_of_value)
elsif (old_value.index("b") != nil) # beta
infoplist = handle_alpha_beta(old_value, "b", infoplist, start_of_value, end_of_value)
elsif (old_value.index(".") != nil) # release dot version
parts = old_value.split(".")
last_part = parts.last.to_i
last_part = last_part + 1
parts.delete(parts.last)

new_version = ""
first = true
parts.each do |one_part|
if (first)
first = false
else
new_version = new_version + "."
end
new_version = new_version + one_part
end
new_version = new_version.to_s + "." + last_part.to_s
print "New version: " + new_version.to_s + "\n"
new_key = "<string>#{new_version}</string>"
infoplist = "#{infoplist[0, start_of_value - '<string>'.length]}#{new_key}#{infoplist[end_of_value + '</string>'.length, infoplist.length - (end_of_value+1)]}"
elsif (old_value.to_i != nil) # straight integer build number
new_version = old_value.to_i + 1
print "New version: " + new_version.to_s + "\n"
new_key = "<string>#{new_version}</string>"

part_1 = infoplist[0, start_of_value - '<string>'.length]
part_2 = new_key
part_3 = infoplist[end_of_value + "</string>".length, infoplist.length - (end_of_value+1)]
infoplist = part_1 + part_2 + part_3
end
infoplist
end



config = ENV['CONFIGURATION'].upcase
config_build_dir = ENV['CONFIGURATION_BUILD_DIR']

archive_action = false
if (config_build_dir.include?("ArchiveIntermediates"))
archive_action = true
end

print "Archive: " + archive_action.to_s + "\n"


print config

if (config == "RELEASE")
print " incrementing build numbers\n"
project_dir = ENV['PROJECT_DIR']
infoplist_file = ENV['INFOPLIST_FILE']
plist_filename = "#{project_dir}/#{infoplist_file}"

infoplist = get_file_as_string(plist_filename)
infoplist = find_and_increment_version_number_with_key("CFBundleVersion", infoplist)
if (archive_action)
infoplist = find_and_increment_version_number_with_key("CFBundleShortVersionString", infoplist)
end
File.open(plist_filename, 'w') {|f| f.write(infoplist) }
else
print " not incrementing build numbers"
end

Share Your Memories With The Whole World With Pro-Share!


One of the “what’s hot” apps of the week, let us introduce Pro-Share by iApps24 ! The app that links all the hottest social networks and enables you to share your photos with just a tap to the whole world! You no longer need to use different slowcoach apps for different networks; all are united in Pro-Share for your use! With Pro-Share it's a spur-of-the-moment to capture memorable moments with your iPhone and share them with all your friends and family. In just a few taps you can post photos and videos to your favorite social network, including Facebook , Flickr, Twitter, Picasa and YouTube of course.

With pro-Share, being among top 100 apps in 5 App Stores, including US and UK, you can: share, review, connect, transfer and capture!

The app interface is extremely user-friendly and easy to use, allowing you to:

Upload full size images without compromising quality
Simultaneously send/receive over Bluetooth/WiFi
Upload photos/videos in the background
Add captions and comments to photos
Create new photo album or a photos/video batch via Cover-Flow
Queue & send multiple albums with single tab

This is not the full list of Pro-Share features. To see with what else can this app surprise you, visit Pro-Share homepage . But before you do that, check out the funny YouTube promo:


You can download the app right now, right here  for only $0.99! 

Tuesday, July 12, 2011

Apple App Store Announces 15 Billion Downloads


Since its launch in July 2008, Apple’s App Store hasgenerated 15 billion app downloads, according to Apple.

The store is the biggest in the world, offering more than 425,000apps. Note that 100 000 of the total amount are developed exclusively for iPad!

Apple has remunerated creators more than $2.5 billion so far.Assumed Apple’s 30/70 proceeds splitting with the developers, we can estimatethat Apple itself has acquired more than $1 billion revenue straight from appsales.

In January 2010, the App Store exceeded 3 billiondownloads, and in January 2011, Apple declared that the App Store reached up to10 billion downloads. In only six months apple managed to increase the amountdownloads with 5 billion! If this trend continues unchanged, the smartphonegiant will score all the possible records!

Thursday, July 7, 2011

Happenings and Prospects

I apologize for the relative dearth of posts here since WWDC. That week in San Francisco always tends to backlog me pretty badly (I returned from WWDC at inbox 1138 - and that's after spending the return flight answering e-mails), so I've been pretty much heads down on work-related stuff ever since. I've also, at the same time, been consciously trying to back away from the 12-15 hour days, 7 days a week schedule that I'd fallen into trying to help get MartianCraft off the ground. Those two have conspired to give me very little time for writing lately, but I think things are under control now.

I've got my semi-mythical OpenGL ES from the Ground Up 10th installment on skeletal animation nearly finished and hope to have it posted within the next couple of weeks, and it's bit of a doozy. My goal with this post is to make one of the more intimidating topics in graphics programming approachable. Fingers crossed, it's been a challenge making this topic approachable, but I think I'm getting there.

A few other bits of news.

First, work has officially started on Beginning iPhone 5 Development. Yes, I know it probably should be called Beginning iOS 5 Development, but as of right now, we're sticking with the naming sequence Apress established with the first book. Dave, Jack, and I have already started updating the book for Xcode 4, ARC, Storyboards, and all the other cool new stuff and are hoping to have the book ready to go to press when the GM version of iOS 5 ships this fall.

Second, I purchased a new domain today. There's nothing there yet, but OpenGLESBook.com is now mine, and I have big plans for it. Once Beginning iPhone 5 Development is in the can, I'm going to revisit my partially written OpenGL ES 2.0 book. I plan to revise it to use GLKit and to add material about the very cool new OpenGL ES tools we're getting with iOS 5.

As of right now, my plan is to self-publish. I'm still researching the exact process, tools, and services that I'll use, but my plan is to sell the book without DRM and at a reasonable price. I'd like to have an early access program, however since a lot of the material I'll be covering will be under NDA until iOS 5 goes GM, I can't promise that at this time.

Google+ Coming to Hit App Store (after approval, of course)

Have you already registered an account on Google+? For those who aren’t aware, it’s a social network just worked out from Google.

Google+ is already available on Android and on the mobile web, but not yet for iPhones. But no need to worry, as the search giant’s social network will soon make its debut on iPhone and iPad as well.

As Google engineer Erica Joy exposed on Google+, “the Google+ iPhone app has been deferred to the App Store and is awaiting approval.”

We all have anticipated the app to come to iOS as well, but not expected it all to be accomplished so operatively. Based on preceding experience with the authorization process, we believe that the Google+ iOS app will be unveiled about the next two weeks’ time.

Google+ is still in private beta and needs private invites to entree. In spite of this restriction, Google+ has rapidly become the hot topic of the social media space. The feedback to Google’s social initiative has been mostly optimistic, but the corporation will have to verify that it can set itself apart from Facebook while keeping users. 

Update on UpdateConf

Just wanted to let you know that I'm speaking at another conference. I'll be speaking at the inaugural UpdateConf in Brighton, UK on September 5th.

As part of the conference, I'm also giving a two-day intensive workshop on OpenGL ES. The workshop assumes no prior experience with graphics program, but will be fairly fast-paced and will cover a lot of ground because there's a lot of new ground to cover. I'll be going over the new GLKit and the incredible new OpenGL debugger as well as the updated OpenGL ES Instruments templates.

 Not interested in OpenGL ES? There are four other two-day workshops going on with some really awesome instructors. Marcus Zarra is doing a two-day workshop on Core Data, Drew McCormack is doing a workshop on Core Animation, Sarah Parmenter is doing one on iOS UI design, and Remy Sharp is doing one on HTML5 for mobile. The worst thing about giving this workshop is that doing so will prevent me from going to one of the other great workshops.

The conference proper has a number of speakers, including the workshop instructors and it's really shaping up to to be quite a conference, and also quite a steal at £99 for early bird tickets to the conference (the workshops are extra). You can sign up for the conference on EventBrite.

 Hope to see you there!