Developing a game intended for multiple end platforms can present some unique challenges to consider. For one, the differing pixel resolutions on apple devices over the years necessitate at least some different background images and layouts to accommodate the different aspect ratios. My initial technique to deal with this problem was to include a copy of each background for each device present in its scene, with its rendering switched off.
On December 01, 2013 I’ll be celebrating my one-year anniversary at Grio as their HR Administrator. I’d like to share some of my story with you. It’s a tale of a technology trailer turned technical achiever; that’s me!
Perspective: I’m 58 years young, my most recent experience prior to Grio was in the non-profit sector where the PC is king and paper pushing is commonplace.
Contrast: Grio is a software consultancy firm catering to a wide spectrum of clients spanning across industries. Grio is a gun for hire with respect to mobile apps and web development.
When I first interviewed at the Grio office, it was immediately apparent where the real challenge would be for me: Overcoming the huge technology gap.
Plainly put for the less nerdy: It’s ground zero for the Mac, Wi-Fi and pretty near a paperless exchange of information internally as well as most correspondence to and from the office. Where cloud computing, working remotely and social media reign while online chat-hubs and an ever-evolving number of apps services are consistently flowing across virtual space and digital workstations.
At that time nearly a year ago, I didn’t own a smart phone and only recently learned how to use an ATM machine. I was, however, HR experienced, motivated and available. A co-owner had referred me and the need to fill the position was keen.
I began the following Monday as a contractor and the need to learn their technology tools of the trade was on.
Grio supplied the necessary office hardware but I immediately went out and bought my own Mac laptop, upgraded to an iPhone (that I still can’t use very well) and began my learning quest. This would be no easy task for me. I’m not particularly fond of current communication technology or at least having it rule so much of my life. However, once you begin the digital lifestyle of cell phone, emails, Facebook, Twitter, Google and the like there’s no going back. You’re in it for the long haul. Which is why I think most baby-boomers and older often get left behind. In today’s labor market if your not technology savvy you’re not very valuable. As the cliché goes: “If you want to stay youthful stay useful!”
Here are a few tips I learned along the way that I’m happy to share.
- Dive in – It’s scary, confusing, frustrating and chaotic. Yup!
- Stick with it – Take some breaks but don’t give-up.
- Ask – Everybody is dealing with technology in some form or another. Folks are generally and genuinely interested in learning themselves and teaching others. Seek professional help where needed. The Genius Bar at Apple is a great resource.
- Online – The Internet is a vast library of endless information at your fingertips. Use it.
- Use the tools – A big conflict for me is security, not just privacy issues but remembering the different login and password codes. Managing password codes is a topic unto itself. I started an important contacts file and spreadsheet that I keep close and refer to it daily. A real lifesaver.
- Embrace it – Technology is here to stay. Make a part of your life as it fits to you?
So my message is: Truly, if I can venture outside of my comfort zone and prosper as a baby-boomer in the digital age, then hopefully this story will be an inspiration for others to do the same.
On Thursday, October 31st Google announced their new flagship phone, the Nexus 5. Along with their newest device they announced it would ship with Android 4.4, codenamed “KitKat” (much to the surprise of the entire Android community that was expecting “Key Lime Pie”.)
I received my Nexus 5 on November 7th, and have had some time to get used to KitKat as well as the device itself. Originally this post was going to review the device and the new Android version, but instead I want to discuss several of the key changes that have been introduced with 4.4 and my thoughts on them.
Social media has nowadays become a key aspect of every application, especially when it comes to games. Below you can find an easy tutorial on how to speed up development when integrating Facebook into your Unity project.
As a consultant, approaching new code bases is something that happens every day. As exciting as it sounds however, working on many different projects can be really tough. This is because in many occasions we are not provided with all the details that we need, but we just requested to fix something that is broken.
What makes these tasks difficult is that the data and code structures can be very large and not very intuitive. Also, it might not be clear who holds the knowledge on them, or in some cases the knowledge can be even lost; for example being held by people who left the company.
And the code does not always help to explain itself. Indeed, a considerable percentage of the problems that are raised by clients are not easily reproducible. They are a manifestation of inconsistencies that were somehow generated in the past and that can be detected only by thoroughly analyzing the code in a reverse fashion and making guesses.
These are some tricks I’ve been using to cope with this kind of situations in a SQL, Java and git based environment:
One very handy tool is to have an Entity Relationship (ER) Generator to get a visual representation of the tables as a general picture. There are several tools that do the trick. I have been using Squirrel DB; it works well and it’s free. To create the ER graph, select all the tables, right mouse click on the selection and choose the ‘Add to graph’ menu.
Another thing that has helped me a lot is to have a way to understand where a particular field is stored in the db. For instance, recently I had to work on fixes on a migration process from an old system to a new one, without knowledge of either of the two systems’ databases, each one storing around a hundred tables. It has been very useful to know from where in the old database a certain row in the new database was gathering the information in the old system, understanding the mapping and the data flow.
The way I did this was to have the old db exported as a sql script and then search on the file:
grep “,field,” db_dump.sql | sed -e ‘s/INSERT INTO \(……….\)/\1/’
This script returns the name of all the tables that contain an instance of that field. There might be neater commands to do the same thing but the concept is going to be the same.
Even more important than this however is to see the way the data flows. I always recommend having logging tool setup. If you are using MySQL, the logging setup is very easy: just make sure that in the file /etc/mysql/my.cnf this line is included:
general_log_file = /var/log/mysql/mysql.log
Restart the server. Then simulate locally small chunks of the application leaving the logs active in a shell window with:
tail -f /var/log/mysqllogfilename.log
Copy the queries logged and check what they do on your sql editor. This can be a huge hint, as it tells us exactly what data we are modifying or selecting. I’ve been using Mybatis and Hibernate. Especially for the latter one it is not so easy to extrapolate what query was executed, and in both cases it is required to analyze the code deeply to determine what query was triggered each time.
One particular usage I have done of the log has been to filter insertions to determine what data has been added or modified, to have a list of the tables that the particular process we are analyzing writes. For example for tables having lower character names separated by underscores:
sed -e ‘s/(into|update) \(([a-z]|_)*\).*/write \1/’ | grep write | sort | uniq
The other really useful thing in this scenario is a tool to show the commit history. Right now I’m using Intellij as my IDE, which has a built-in annotate functionality. This gathers all the commits on a file and shows for each line the last commit that modified the line. From this we can understand a couple of things:
1) Who worked on the code. This is very important because in many cases we get to a point in which we have a way to fix what’s requested but we are not sure whether this may break something else, and knowing who wrote the code gives us a chance to ask why it was written that way and understand if the fix would work.
2) When the code was committed. If for example we have the impression that a snippet of code might be responsible for a bug and we see that the code is very old and has been stable for a long time this may add some doubt to our guess. On the other hand, fresh code is more likely to not have yet resolved all the different corner cases.
I hope these tips and trick help you the next time you are trying to decipher a new code base.
As one would expect with a fine product, it would work best right out of the box. In the case of Android Studio, some assembly is required. The issue I found was that a newly created project with default settings wouldn’t compile. I thought that this bug might have been specific to my setup, but after reproducing it on 3 different computers and finding several outstanding questions as well as a few open bugs with Google concerning the issue, I decided that a fix would be a fine thing to write up, hoping it enables other people to develop as painlessly as possible.
Apple and Steve Jobs started the smart phone revolution. Just 7 short years ago we had the first iPhone, a technical marvel in its day. The craftsmanship of not only the device but also the iOS operating system was a thing to behold. Apple continued with its excellence in both hardware and software design for years. Unfortunately, the wild ride has ended, at least for the moment. While the hardware has kept up relatively well (although there is not a heck of a lot of innovation), the iOS operating system has, sadly, regressed.
With the release of iOS 7, there are several changes in how you lay out and customize the appearance of your UI. In particular, the status bar is now transparent, and your views will show through it. Now this is a great opportunity to redesign your app and take advantage of this new look and feel, but what if you aren’t ready and you want to the old iOS 6 status bar back? Well, I’m excited to tell you that there is a way to do this!
Recently I started a project which required an iOS app to be locked in landscape orientation. The method mentioned below was always the standard for locking/setting the orientation, but iOS 6 deprecated this method. This post will show and explain some other options that I came across when investigating alternative options for locking the screen.
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
The Android library is constantly growing. New widgets are built, and existing ones get deprecated. We’ll see how we can make XML layouts versioning more maintainable and more OO using the
<include/> element. For that we’ll take as an example the ActionBarSherlock SearchView.