Practical use of CountIf with Google Docs Spreadsheet

If you wanna follow the explanation of this post by looking at cell references, go to this post: Taking Microsoft Office Excel Web App for a spin

I’ll show you a practical use of the CountIf function that you can apply in both Microsoft Excel spreadsheets and Google Docs spreadsheets.

Let’s start with this sample spreadsheet:

I’m using the above spreadsheet to keep track of my progress during the course for my first driver’s license.

The CountIf function is being used in column Remaining classes for each discipline. For example, the actual formula in cell I17 is this:

I17 = H17 - countif(D3:I14, B17)

Let’s break this thing and explain each piece:

H17 is a fixed value = 18. I know it beforehand. In this case for the Transit Legislation discipline I must have a total of 18 classes.

The countif function has this form: COUNTIF(range, criteria). So the above countif(D3:I14, B17) is telling us that:

D3:I14 is the range of cells we’re searching and B17 is what we’re after… The range encompasses all the disciplines’ acronyms from 11/23/2010 to 12/9/2010 for all the timetable.

B17 is the discipline’s acronym, in this case it is TL.

Easy to understand, isn’t it?

Doing the above with countif I can tell how many classes I have scheduled for that discipline. Then I just subtract this value from the total necessary classes to have a picture of how many classes I still have to go through to fulfill the necessary ones.

Let’s do the math:

CountIf returns 18 because LT appears 18 times in the timetable. Making the substitution of values:

I17 = H17 - countif(D3:I14, B17)
I17 =  18 - 18 = 0

Now I know that if I follow the above schedule I’ll probably finish the theoretical course by 12/9/2010. Pretty good.

This was a simple and practical use of the countif function that came in handy in this situation.

Why is it so important to Move Your Body?

Permit me to go a little bit "off topic" with this post… is it really off topic to a computer professional?

I know this is kinda of cliché and that it may scares you, but physical activity is a human necessity and as such it deserves special attention. So here I am writing about it hoping that someone that reads this takes notice and start acting right away. Do not leave for tomorrow what you can do today! Yet another cliché I know but it is perfect in this phrase.

People of my "professional class" and also from my generation also known as generation Y are the ones most impacted by the lack of physical exercises in this modern age of ours. In our age we are completely immersed in technology with products that make us want to avoid the outsides. Just to name a few: computers, internet, video games, delivery services, etc.

One thing that I as a computer engineer "have done" in the past 7 to 8 years was not moving my body to the extent needed.

When I was a kid ( 6 to 11 years old ) I used to play soccer almost 7 days a week. I lived near a soccer field. Then I moved to Volta Redonda where I live now and it ceased to happen.

In Volta Redonda I used to go to school every day cycling, that was about 6 KM (this route in Google Maps) each day. I used to play soccer with my street friends in front of my house (this green field seen in Google Street View) at least once a week, but as we all grew up we just did not keep contact and then the soccer games disappeared. I also used to go to Águas Quentes Country Club Resort "near" my house that has a lot of pools to practice swimming and that is now just past as well. I am not a member of the club anymore.

People that work with computers pass a lot of time fixed in a single place (programmers do it more frequently) as is my case and this tends to cause bad consequences to the body. Lots and lots of articles and TV programs debate this theme and lots and lots of people just do not give the necessary attention to this subject.

I am writing about this because I think it is crucial to our lives, that is, we were made to be in constant movement and it makes sense to expose my point of view since I am an avid user of computers and everything in between. Maybe this post will even serve as a start point to someone studying the impact of modern life in human health. What does a generation Y guy think about the subject? So here it is…

I definitely started to pay attention to this only after almost 2 years working at Chemtech. The work rhythm is intense and for someone that is starting in the job market, exercising can be a point of no interest and if you do not wake up to reality things can get worrisome. We had gymnastics at the workplace but that was not really something that I would call exercising, you know. While at Chemtech, on the weekends I was always inclined to rest since I was tired of working the whole week.

Move Your BodyOK. What have I found? We need a way of moving our body, working out for at least 30 minutes a day. You can do the kind of exercise that is a best fit to you, but the thing is: do something to move your body. Do not tie yourself to the same routine each and every day - car/bus to workplace, seat, a little walking to have lunch, in a sitting position again and then car/bus to home.

Since I started college in 2003 my exercising level downgraded to unacceptable levels. To correct this, one thing that I started doing lately was going to the gym to stretch my muscles – 5 days a week – 1/1.5 hours a day.

I am in the 3rd month mark now and I am really satisfied with the results because my overall mood got better and now I know I am contributing to my body and health. Body, Mind and Soul must be in synchrony.

The benefits of physical exercising are numerous and if you want to know more about them, refer to this article.

If you can not go to the gym: go walking/cycling to your workplace, do stair climbing (avoid elevators), but definitely do something that puts your body in movement. Start slowly and then increase the pace. You will see that as times goes by it starts to be a part of your day and the day you do not exercise you feel something is wrong/missing. Your body will ask for it. Amazing, isn't it? This is only a part of what we need to keep a healthy life. Of course, what you eat will have great impact in your health. Exercising alone will not be sufficient. Watch out for your way of life.

I think the point is: we all know that these are difficult days and that arranging all this stuff seems daunting enough. We already have a bunch of things to do but what if we do not keep close attention to our body health? We will not have anything else to be preoccupied with because maybe we will not be able to do that bunch of things again without a capable body. Did you get the point? I hope so.

An advice from an intensive computer user to everyone out there that thinks that exercises are not important: exercises do make a difference in life even more if you are a computer professional that depends on computers to get things done. It is better to start early and to keep it a constant in your life. You will save yourself and your money from doctors, medicines, hospitals, etc., that is, while it is not a guarantee it is most probably that you will save yourself from suffering. You will get a better quality of life having fun along the way.

Shake Yourself! I am linking to a Yes song titled Owner of a Lonely Heart that passes the message.

Updated on 12/30/2013

I’ve quit the gym because after 2 to 3 years there things started to get boring. I prefer the outdoors and cycling is my favorite exercise. The feeling I get while pedaling is inexplicable.

StravaIf you happen to own a mobile device, there’s a great app to keep track of your activity be it running or bike riding. It’s called Strava.

Here’s my latest activity:

Complementary reading

Sitting is Making You Fat and Killing You by Phil Haack

Masters degree application essay UFRJ 2011.1

While applying to a masters degree course I had to write an essay of no more than 500 words containing:

1. Personal appreciation about the evolution of my academic and professional activities up to now, avoiding the mere repetition of information already contained in my resume/CV.
2. Succinct description about the reasons I have to take a post-graduation course and what I expect from the course.
3. My expectations regarding the post-graduate course's influences in my future professional activities.
4. Specification of topics of interest, trying to correlate them with the research area of the program I'm applying to.

So far so good.

I have sent my enrollment docs to two of the best universities in the Rio de Janeiro state in Brazil, namely: UFRJ and PUC-Rio. Both of them have the highest assessment grades ( 7 ) conferred by CAPES. CAPES is the Brazilian government agency responsible for the evaluation of post-graduate courses.

I applied for two research areas: Software Engineering and Artificial Intelligence.

The essay I'm posting here (English and Portuguese versions) is from the UFRJ enrollment process (Software Engineering one) in which I applied to the Systems and Computer Engineering Program (site in Portuguese).

Now I hope to be called for at least one of these institutions. UFRJ process requires the applicant to take some tests: language test (English) and specifics test (the research area you're applying to) and both counts towards the acceptance.


Essay
I have been trying for almost three years now (since the graduation in Computer Engineering in Dec/2007) to apply at work and in my life the content I learned.

I succeeded in my last job at Chemtech because I had a good background provided by the Computer Engineering course. During the course, the disciplines that really caught my attention were those related to software. In this last job experience I could put into practice the theory seen at the university in my first level degree. I participated in several interesting software projects. I found this way the importance of theory in the activities of a computer professional.

My motivation to continue the studies through a masters course exists since I finished the first level degree. Meanwhile, between the graduation and the master's degree, I got a job. One of the reasons that made me quit that job was simply because I wanted to continue studying. I attended great part of the university only studying, which allowed me to have a good performance. Likewise, I wish to attend the masters in full time.

I want to take the post-graduate course to:

1 - Learn and get a deep understanding of the software area;
2 - Improve what I know;
3 - Grow as a computer professional;
4 - Get better opportunities in the job market.

My expectations for the course are the best. I know the the course and institution reputation and I know I can learn a lot. This is my main goal: to learn more and with quality. I am hungry for knowledge!

After the masters and possessing more advanced knowledge, I intend to pursue a career in software. The software engineering market is "young" compared to others and has shown steady growth in recent years. I believe that this market will provide excellent opportunities for the professional who has a post-graduate degree in the area. Money Magazine and Salary.com site rated the area of Software Engineering as the best area to work in 2006. This demonstrates and attests this area's power and influence in the global market. When I mention a career, I think of software companies or even in educational institutions as a teacher/university researcher. Any of these options I choose will satisfy me as a person and as professional. If I decide to go with a software company, I hope to contribute with a deeper view on the aspects involving software projects. Otherwise, I hope to be able to disseminate advanced knowledge in the area, teaching people. Brazil in particular has a deficit of engineers and particularly in the area of software engineering, which is a technology area that adds greater value and therefore contributes more effectively to the growth of our country.

My interest in the area of software engineering is focused on the development of software products. I love writing code, and consequently the programming languages, solve programming problems, study the software tools used in development and all the metrics involved and any possible subject that is related to software engineering.

See:

http://www.leniel.net
http://stackoverflow.com/users/114029/leniel-macaferi


Redação
Tenho buscado nestes quase 3 anos de formado em Engenharia de Computação aplicar no trabalho e nada vida o conteúdo que aprendi.

Tive êxito em minha última experiência profissional devido à base proporcionada pelo curso de Engenharia de Computação. Durante o curso, as matérias que mais chamaram minha atenção foram aquelas ligadas a software. Nesta última experiência profissional pude colocar em prática a teoria vista na faculdade. Participei em vários projetos de software interessantes. Constatei dessa maneira a importância da teoria nas atividades do profissional de computação.

Minha motivação para dar continuidade nos estudos através de um curso de mestrado existe desde que terminei o curso de graduação. Neste meio tempo, entre a graduação e o mestrado, consegui um emprego. Um dos motivos que me fez sair desse emprego foi justamente o de querer continuar os estudos. Cursei a maior parte da graduação somente estudando, o que me permitiu ter um bom aproveitamento. Da mesma forma, desejo cursar o mestrado com dedicação exclusiva.

Quero fazer o curso de pós-graduação para:

1 - Aprender e me aprofundar mais na área de software;
2 - Aprimorar o que sei;
3 - Crescer como profissional da área;
4 - Conseguir melhores oportunidades no mercado de trabalho.

Minhas expectativas quanto ao curso são as melhores. Conheço a reputação do curso e da instituição e sei que poderei aprender bastante. Este é o meu principal objetivo: aprender mais e com qualidade. Sou faminto por conhecimento!

Após o mestrado e de posse do conhecimento mais avançado, pretendo seguir carreira na área de software. O mercado de engenharia de software é "jovem" se comparado a outros e tem apresentado constante expansão nos últimos anos. Creio que este mercado proporcionará excelentes oportunidades para o profissional que possui uma pós-graduação na área. A revista Money Magazine e o site Salary.com, classificaram a área de Engenharia de Software como a melhor área para se trabalhar no ano de 2006. Isso mostra e atesta o poder e influência da área no mercado global.Quando menciono seguir carreira, penso em empresas de software ou até mesmo em instituições de ensino como professor/pesquisador universitário. Qualquer uma dessas opções que eu escolher me satisfará como pessoa e profissional. Caso eu siga em uma empresa de software, espero contribuir com uma visão mais ampla sobre os aspectos que envolvem os projetos de software. Caso contrário, espero ter a possibilidade de disseminar o conhecimento avançado na área, ajudando a formar pessoal capacitado. O Brasil em especial tem um déficit na área de engenharia e particularmente na engenharia de software, que é uma área tecnológica que agrega maior valor e portanto contribui de maneira mais eficaz para o crescimento do nosso país.

Meu interesse pela área de engenharia de software é centrado no desenvolvimento do produto de software. Amo escrever código e consequentemente as linguagens de programação, resolver problemas de programação, estudar ferramentas de software usadas no desenvolvimento e todas as métricas envolvidas e qualquer outro assunto possível que seja relativo à engenharia de software.

Veja:

http://www.leniel.net
http://stackoverflow.com/users/114029/leniel-macaferi

Great iPhone Apps You Should Take a Look At

Here I’ll point you to great iPhone apps that I use. As I discover new ones I'll update this post to showcase them.

Use the comments section bellow to point me to great iPhone apps you use. Let's share them with the world.

Note
App here means any kind of application including games.

 
App - A to Z Description

Analytics Pro
Analytics Pro

Finally a Google Analytics App that has all the features you want and need. Your data is presented in a useful and meaningful way rather than just listing the data like some other apps.
   

Aqueduct
Aqueduct

Introducing Aqueduct - a world of jumbled waterways and mixed-up pipelines. It's up to you to rearrange the tracks and restore the flow.
Locked gates, shifty conveyor belts, puzzling warp portals, and more stand between you and order. With over 190 unique puzzles, spanning 8 chapters of difficulty, Aqueduct delivers hours of neuron-jolting fun.

   

Download Manager Pro
Download Manager Pro

Download Manager Pro is an ultimate download manager application which allows you to download files by using your iPhone OS device. You can view and share them.
   

Guitar Hero
Guitar Hero

Guitar Hero - the biggest music videogame franchise ever created is now available for the first time on your iPhone or iPod Touch! It’s your chance to experience the original, addictive guitar game that over 40 million people have jammed out to worldwide.
   

HP 15C Calculator
HP 15C Calculator

Developed by HP, the HP 15C Scientific Calculator app for your iPhone or iPod Touch is an exact replica of the original layout, functions, algorithms and calculation sequences you trusted to help you through college and your career.
   

iBabylon
iBabylon

With iBabylon you have translation @ a touch! Babylon the world’s leading provider of dictionary and translation software, brings you iBabylon for iPhone and iPod.
iBabylon gives you quick and comprehensive dictionary results in over 75 languages, as well as effective full-text translations between dozens of languages.

   

Plants vs. Zombies
Plants vs. Zombies

Winner of more than 20 Game of the Year awards!
A mob of fun-loving zombies is about to invade your home. Use your arsenal of 49 zombie-zapping plants — peashooters, wall-nuts, cherry bombs and more — to kill 26 types of zombies before they break down your door. Get ready to soil your plants!

   

Scrobbl
Scrobbl

Scrobbl is useful for Last.fm users. Its is an update of Tony Hoyle's Scrobble daemon for iPhone iOS 3.0. Music you listen to using your iPhone gets scrobbled so that you won't miss a song in your profile. You can find it in BigBoss' repo on Cydia.
It is compatible with the SBSettings Scrobble Toggle so you can turn scrobbling on and off quickly.

   

Tetris
Tetris

Now celebrating over 100-million paid downloads on mobile! Discover why millions of players around the world have made the TETRIS® game one of the biggest blockbusters in mobile gaming history.
   

Twitter
Twitter

Discover what’s happening right now, anywhere in the world with the official Twitter for iPhone app.
Realtime search, top tweets, trending topics and maps show what's happening now everywhere and nearby.
Tweet, send DMs, share photos, videos and links to your friends and the world. Don't have an account? Just sign up from the app!

   

Wi-Fi Sync
Wi-Fi Sync

Wi-Fi Sync enables wireless syncing with iTunes at the touch of a button. Never go looking for that USB cable again. Sync from the car, bed or shed whenever it suits you.
Available now on Cydia Store for iPhone, iPod touch and iPad. You won't find it on the App Store.

Do you need the services of a computer engineer/consultant?

This post is to offer consulting services in the area of computer engineering with a tendency toward software development. Whatever fits the bill is also of my interest.

During the rest of 2010 and the start of 2011 I plan to work as a freelance developer.

Next year I want to get back to studying with a Master's degree. Though probably not an online masters.

What I want to do in the meantime...
I'm willing to work from home in a home office arrangement. Something that won't take up all my day. I prefer to have control over my work and time. So, I'm offering consulting services for whatever need you may have regarding your presence on the internet.

I can help you leverage your business putting you online. I can build your website and configure Google Analytics and AdSense if you're also interested in these services.

I can assist you with problem solving and technical issues.

Although I'm a native Brazilian, technology standards and English are my super power when it comes to software development.

If you think that outsourcing your development is rewarding, don't think twice. You'll get a great result with the work I do.

My specialties
ASP.NET MVC/P
C++, C#, Java, Objective-C, JavaScript
CSS, jQuery
LINQ, Entity Framework (EF), N/Hibernate, NoSQL
WCF, WebServices
Oracle, SQL Server, MySQL
Visual Studio, Eclipse, PL/SQL Developer
IIS, Tomcat
iPhone

I'm a rapid learner. This way if you need something done using any other technology, drop me a line and I'll consider it.

Note
I already have the tools necessary to implement any solution based on the above technologies.
Feel free to contact me using the link at the top of this page for further discussion.

My references
This blog
CV/Resume
StackOverflow profile
LinkedIn profile

Sincerely,
Leniel Macaferi
johnleniel

Automate tasks in Mac OS with Automator

This one is about an incredible application that comes with Mac OS X. Its name is Automator.

Jesus Christ, this is a life saver app!

This is the description of Automator:Automator Apple Mac OS application icon

With Automator, you can accomplish time-consuming, repetitive manual tasks quickly, efficiently, and effortlessly. Automator lets you skip the complex programming and scripting that is normally required to create automations. Instead, you assemble individual steps into a complete task by dragging these actions into an Automator workflow. Automator comes with a library of hundreds of actions. And with the Watch Me Do action, you can record an action — such as pressing a button or controlling an application without built-in Automator support — and replay it as an action in a workflow.

I have lots of MP3 files that I need to go through analyzing if I really want to keep them in my media library. During the last year I stored all those MP3 in a folder and such a folder is now 55.56 GB and contains 11840 files to be precise. That’s a lot of MP3! I keep postponing this open/listen to task but today I thought I’d start. That’s where Automator fits the job.

In this post I’ll show you how to create a simple workflow that helps moving the MP3 files to iTunes folder /Users/leniel/Music/iTunes/iTunes Media/Automatically Add to iTunes. The folder Automatically Add to iTunes is a special folder that iTunes keeps watching for new files added to it. When a file is added in this folder, iTunes automatically adds it to the media library using MP3 metadata to organize the library. When added files will reside in /Users/leniel/Music/iTunes/iTunes Media/Music.

Let’s create the workflow:

1 - Go to the Applications folder and select Automator.

2 - You’ll be presented with the following screen to choose a template for your workflow. Select Service as the template.

Types of templates available to create an Automator workflow
Figure 1 - Types of templates available to create an Automator workflow

3 - In Service receives selected, select audio files. “In” select Finder.

4 - Now select Files & Folders in Library list and then select Move Finder Items under the Actions list. Drag this action to the workflow area in the right.

5 - In Move Finder Items select the folder where you want the files to be moved to. You also have the option of showing the action when the workflow runs.

6 - Go to the File menu and select Save. Give it an appropriate name as Add to iTunes and you’re done.

The following screenshot shows the Service workflow configured:

Add to iTunes.workflow configured according to the six steps described above 
Figure 2 - Add to iTunes.workflow configured according to the six steps described above

Now, let’s use this service workflow. To do this, go to Finder and open any folder that contains audio files such as MP3. Right click the MP3 file and voila. Now there’s an extra context menu option called Add to iTunes. What a marvelous thing.

Add to iTunes context menu option in Finder when right clicking MP3 file(s)
Figure 3 - Add to iTunes context menu option in Finder when right clicking MP3 file(s)

What happens when Add to iTunes is clicked? The workflow we created will be executed and the selected file(s) will be moved to the folder specified in the workflow, in this case /Users/leniel/Music/iTunes/iTunes Media/Automatically Add to iTunes.

As you see this is totally life saver.

I can play the MP3 in iTunes and if I decide that I want to keep it in my media library I just have to select Add to iTunes.

The possibilities with Automator are endless given the amount of options in its Library and Actions lists and workflow template types.

I hope you could get an idea of what Automator can do.

Updated on 12/16/2010

If you make a slight change in step 3 above you can have this workflow add not only audio files but even entire folders to iTunes and better yet, iTunes will ask if you want to replace existing files so that you don’t end up with duplicate files in your iTunes library. This is great.

So what do you have to do? Instead of audio files, select files or folders. Just this. Save the workflow. Now right click over any folder in Finder and you’ll see that you get a new menu option under Services called Add to iTunes.

Add to iTunes context menu option in Finder when right clicking a folderFigure 4 - Add to iTunes context menu option in Finder when right clicking a folder

Notes
Service workflows are saved in /Users/YourUserName/Library/Services.

In prior versions of Mac OS, there was an option to save the workflow as a plug-in. This was necessary so that you could have a context menu option (right-click) in Finder to run the workflow. I tried to go this way but this option isn’t available in Mac OS X 10.6.4. I realized that I had to create a Service workflow when I read this question at Apple’s Support site: No Automator plug-in in 10.6?

Download
You can download this workflow at:
https://sites.google.com/site/leniel/blog/AddtoiTunes.workflow.zip

References
Automator - Your Personal Automation Assistant

Automator - Learn by example

Automator at Apple’s Mac OS – All Applications and Utilities

Automator article at Wikipedia

Learning to develop for iPhone with a Mac mini

I think you should read this one too:
Productivity and happiness going from 4 to 8 GB RAM

My 2010 Unibody Mac mini arrived on Sep 9. Now it's time to get to coding for the iPhone. That's why I bought it after all. Go code guy instead of being here writing this somewhat long post. :) Go figure. Oh wait, I need to share my experience with the rest of the world so that I can contribute to people that like to do what I do, that is, software development. So, let's share and learn together.

In this post I’ll write about hardware, software, virtual machines and iPhone development. All this takes into consideration my Windows background and my need of having Windows around while I’m using the Mac.

New hardware
I needed new hardware to learn how to develop for the iPhone platform. My Windows PC is an "old" Intel DualCore Pentium E2180 2 GHz and so I couldn't get MAC operating system also known as Mac OS X running on this hardware because the processor lacks Intel VT-x (hardware virtualization) feature. VT-x is necessary if you plan to run Mac OS in your Windows PC hardware through a virtual machine. I needed Mac OS X because currently iPhone development can only be done the proper way (read with Apple official development tools) within the Mac operating system.

I didn't want to spend a lot of money buying a new computer. So I opted for the bare minimum necessary to develop for iPhone.

While buying the mini that comes with a “somewhat” powerful Core 2 Duo P8600 2.4 GHz processor I also bought the Magic mouse and the Wireless keyboard. Mini doesn't come with a mouse or keyboard. I customized Mini with 4 GB RAM¹. Memory customization made the shipping take 2 weeks more. I bought Mini at the Brazilian Apple online store. Because I customized Mini it shipped from China and that's a long way to Brazil. If I had opted for the standard 2 GB RAM version I'd get the Mini the week I placed the order since there's stock right here in Brazil.

All this wait was to get a new development box that could make me capable of developing for iPhone and that's cheap for my pocket.

¹ - It's OK to work with 4 GB of RAM, but if you can afford 8 GB of RAM, go for that. Don't think twice. NVidia graphics card that comes with Mini also gets 256 MB of RAM. Virtual machines also like RAM. Continue reading to know why I'm mentioning this.

Mac OS Activity Monitor showing the System Memory
Figure 1 - Mac OS Activity Monitor showing the System Memory

To better understand what those Wired, Inactive memory are, read this doc:
Mac OS X: Reading system memory usage in Activity Monitor

The quality of Apple products is undeniable! I also own an iPhone and it makes me second that.

Things I really appreciate about the Mac mini set (unordered):
- Being wireless with Apples’s magic mouse and wireless keyboard. I think they're a must have with Mini.
- No noise approach when it comes to working with computers. Mini makes no noise. The only sound you'll ever listen is the hard disk and you'll only listen to it when there's no other environment sound, for example, during the night. If you opt for a SSD drive you won't get any noise at all. SSD is still expensive so that was not an option for me.
- HDMI port that allows me to connect it to my 32'' Sony Bravia HD TV for crystal bright images.
- Sound output quality (it's better than my dedicated Creative Audigy sound card on the PC)
- Small size. See the photo bellow where Mini’s size is compared with my Playstation 3 joystick (photo taken with iPhone 3GS):

Mac mini's size compared with a Playstation 3 joystick  
Figure 2 - Mac mini’s size compared with a Playstation 3 joystick

Mac + Windows
As a user of the PC movement for the past 15 years (I started with Windows 3.1 in 1995) I got it going really fast with Mac. The transition is being straightforward.

I could for sure only use Mac OS but that wouldn't give me the power I need. As I still work with Windows only applications as is the case of Microsoft Visual Studio and Windows Live Writer (that I use to write these posts) I need a way of having Windows around. For that I got Parallels Desktop. This software enabled me to have a Windows 7 virtual machine running alongside Mac OS with a beautiful integration between the two operating systems.

Virtual machine
Remember the amount of RAM memory I mentioned and showed above? It plays a big part when you’re using virtual machines because the system RAM is shared with virtual machines. So if you plan to run virtual machines in your Mac computer, you’d better get more RAM. This will give you better performance (read responsive applications) while you work avoiding the infamous Page outs.

Using a virtual machine there’s no need to reboot the machine to go to other operating system – this is cumbersome (if using Boot Camp and installing Windows in other partition I would have to do that). Actually I first installed Windows 7 using Boot Camp but then I realized that Parallels could move that Windows 7 Boot Camp partition over to a virtual machine. So I decided to go this way and used my Boot Camp partition as a virtual machine.

After going to Boot Camp solution and then using a Boot Camp partition as virtual machine I saw that Parallels Desktop also allows us to move an existing Windows PC entirely to a Mac based computer. This means that all the software, configurations and files you have on your Windows PC disk partition can be migrated to a virtual machine. I tried this but it just didn't work for me. The migration that is done using Parallels Transporter Agent failed twice in a process that takes at least 5 hours to complete. In my case it tried to migrate 197 GB of data over my wired home network. The error message I got was that the Transporter migration failed/The migration could not be completed (no me info). I tried to run this resolution but that didn’t do the trick (no problems were found on my Windows PC). If it had worked for me I wouldn’t need to install anything as everything that I had on the Windows PC would be just copied over to the virtual machine. That’d freed me of having to install everything again on the virtual machine.

No problem at all as I created a brand new virtual machine with a clean install of Windows 7.

You see, all this work allowed me to learn a lot of things along the way… Things that I wouldn’t have tried.

Tip: I found that using a new virtual machine with a clean install of Windows instead of a Boot Camp partition as a virtual machine is really better. Windows runs faster this way.

Now, the only thing I have to do is to start the virtual machine and there I'm using Windows 7 just inside Mac OS as if I were using the PC. So far so good. This satisfies my needs as a multiplatform developer.

You can put your Mac mini to sleep and you'll never have to start the virtual machine again because while sleeping Mini keeps the memory in "On" state, which means that all applications that you have open will be kept in the same state they were before you put Mini to sleep. Isn't it good? It's a kind of Hibernate we have in Windows but it's not Hibernate at all. While Mini is sleeping you get a beautiful white glowing blinking light that shows you that it's sleeping of course.

Mac software
Applications look more polished in Mac OS. Better native windows design, beautiful icons, etc. Some things are simpler in Mac OS. Take for example the application installation process. In most cases you just copy the application file to your Application folder in the dock and you’re ready to use it.

Some Windows software I use and that I can't live without are available for Mac too:
- µTorrent
- Firefox
- Microsoft Office
- Babylon
- Eclipse
- SnagIt

Mac only software that I'm using:
- TextMate
- BBEdit
- QuickSilver
- UnRarX
- Pixelmator

I'm using keyboard shortcuts a lot more with Mac.

iPhone development
Before I could feel comfortable to start learning how to develop for iPhone I had to configure my work environment first and that’s why I had to go over things such as virtual machines, etc. Now that it’s done it’s time to engage!

For those that are starting in this new world just like me, here goes what you need to get going and coding:

1st - get the official iPhone SDK that stands for software development kit. You’ll have to create an account with Apple to be able to download it and use all the features that Apple iOS Dev Center has to offer. The SDK is a big download - for the current version (Xcode 3.2.4 and iOS SDK 4.1) its size is: 2.9 GB.

Xcode is the name of the the IDE used to develop applications for iPhone. iOS is the name of the operating system that iPhone uses.

2nd - learn how to develop in this platform and that’s totally a personal path you have to follow. After learning the basics you can follow the more diverse paths depending on what types of application you want to develop.

As for learning iPhone development I'm understanding how things work with some easiness. It's always good to learn new programming languages as Objective-C, a new development environment as Xcode, etc. The easiness I'm finding here is a result of some years of coding and my familiarity with the Model View Controller pattern that is extensively used in iPhone applications.

The main learning source has been the iOS Reference Library.

Tutorials I have followed ²:

Your first iOS Application
Core Data Tutorial for iOS: Introduction
Introduction to The Objective-C Programming Language

² - I'll try to update this list while I make progress.

Updated on 8-26-2011

As I explain in a recent post titled Xcode iPhone beginner projects with GitHub integration, I decided to follow a new path to learn iPhone development. I’m learning with sample projects taken from a book and I’m committing those projects to a GitHub repository. Feel free to clone the repo: https://github.com/leniel/iPhone-Beginner-Guide

Final note
This is a new world that opens up just in front of me. In the coming weeks and months I'll be immersed in this new world.

I won't let my Windows developer part behind because I'm always answering some questions at StackOverflow and every now and then I need to write some apps to test some code.

I really love programming. Any programming language that you learn opens a new door of possibilities. This is what motivates me and moves me forward. I'm thirsty for knowledge.

Let's see what the future reserves for me in this new endeavor.

If you're also planning to develop for iPhone in the near future (because things change really fast in the technology world) this post shows you a possible start point.

Hope you've found this an interesting read and that you can learn something from my own experience.