<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.nayyeri.net/~d/styles/itemcontent.css"?><rss xmlns:a10="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Keyvan Nayyeri</title><link>http://nayyeri.net/</link><description>God breathing through me</description><managingEditor>keyvan@nayyeri.net</managingEditor><lastBuildDate>Tue, 16 Mar 2010 17:35:56 -0700</lastBuildDate><a10:id>Keyvan Nayyeri</a10:id><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.nayyeri.net/keyvan" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="keyvan" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">1029</guid><link>http://nayyeri.net/google-nexus-one-my-new-mobile-phone</link><author>keyvan@nayyeri.net</author><title>Google Nexus One - My New Mobile Phone</title><description>&lt;p&gt;&lt;a href="http://www.google.com/phone"&gt;&lt;img style="border-right-width: 0px; margin: 5px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Google Nexus One" border="0" alt="Google Nexus One" align="right" src="http://nayyeri.net/storage/images/posts/googlenexusonefirstimpressions_6997/nexus_1.png" width="300" height="60" /&gt;&lt;/a&gt; Since I arrived here in the United States, I’ve been arguing with myself to choose a mobile phone to use. To now I was using a very poor Nokia phone that I got with my prepaid plan on my arrival.&lt;/p&gt;  &lt;p&gt;Doing some research here and there, I finally realized that my best options are &lt;a href="http://www.apple.com/iphone/"&gt;Apple iPhone&lt;/a&gt; and &lt;a href="http://www.google.com/phone/"&gt;Google Nexus One&lt;/a&gt;. As I’ll describe later in this post, I chose to go for the Google phone and received it earlier today. Many of my friends have asked me to share my experiences with them as they’re in doubt to switch to Nexus One; therefore, here I write a review based on my first impressions on the first Google mobile phone called Nexus One.&lt;/p&gt;  &lt;p&gt;Before, jumping into the details, it’s worth mentioning that I have a good background to judge on the qualities of this phone and compare it with Apple iPhone, Windows Mobile, and Blackberry devices. In Iran I used to have Windows Mobile devices for 5-6 years, and I’ve used my friends iPhones for a very long time as I feel I’ve had one. I also tested Blackberry devices by friends a few times so I think that I can compare the features of these phones. Also unlike, many people in the world specifically many of the ordinary Americans who die for Apple products with no apparent reason, I’m not a biased person for any of these companies and my regular readers should have known me during the time. Therefore, if I write anything in this review, it’s solely based on my technical perspective and nothing more.&lt;/p&gt;  &lt;h3&gt;Order&lt;/h3&gt;  &lt;p&gt;As I arrived here with two bags of clothes only, I ought to order many things to start my life. In the past three months I never had a great experience as I had with Google Nexus One order yesterday. &lt;/p&gt;  &lt;p&gt;As I’ll describe later, I decided to buy an unlocked phone directly from the Google website. I put my order online and asked them to engrave my name and blog URL on my phone.&lt;/p&gt;  &lt;p&gt;The default processing time for engraved phones is 72 hours and I went to take a short nap, but receiving a call in less than 3 hours from FexEx automated notification service, I woke up and noticed that they already have engraved my custom text on my phone and have shipped it via FedEx. This was very surprising indeed.&lt;/p&gt;  &lt;p&gt;My phone was sent via Standard Overnight service by FedEx and arrived here at my address in less than 24 hours. I received it and unpacked my phone quickly!&lt;/p&gt;  &lt;p&gt;In my honest opinion the online ordering experience with Google was amazing! &lt;/p&gt;  &lt;h3&gt;Unpacking&lt;/h3&gt;  &lt;p&gt;The packaging was excellent but I don’t think that it can compete with Apple product packaging. Initial setup was easy and fast but obviously, the phone relies heavily on a good internet connection on the phone to have almost all the functionality.&lt;/p&gt;  &lt;p&gt;One initial problem that I noticed was the account signing-in process for my Google account. While I had my fast Wi-Fi connection at home and T-Mobile 3G network was also available without any problem, Nexus One took half an hour and several attempts to initially sign in and synchronize with my Google account.&lt;/p&gt;  &lt;h3&gt;Plan&lt;/h3&gt;  &lt;p&gt;My story with my monthly plan is something long that shouldn’t concern you but for some reasons I couldn’t sign up a contract with Apple, and it turned out to be a good thing later. I signed up for a 2 year contract with T-Mobile and waited for almost a month to evaluate my options.&lt;/p&gt;  &lt;p&gt;Doing some research on different forums, I realized that the best trick to get a Nexus One is to get an unlocked phone and use it with your existing plan even with T-Mobile that offers a service with Google. Honestly, the deal between Google and T-Mobile isn’t good at all and many people have been complaining about it. &lt;/p&gt;  &lt;p&gt;In my experience, the best way to get a Nexus One and use this phone is to get your plan from T-Mobile and use an unlocked phone. The good point is that T-Mobile has a deal that gives you all the features you need on a monthly basis without mandating you to sign a long-term contract.&lt;/p&gt;  &lt;p&gt;Of course, everybody knows that AT&amp;amp;T is not a good operator at all. I’ve had some interactions with their customer service and they were all frustrating. On the other hand, T-Mobile has one of the best customer service qualities. Yesterday, I asked them to add the data plan to my service and they did that quickly and easily.&lt;/p&gt;  &lt;p&gt;One point worth mentioning is that I didn’t get any text message service for my plan as I’m not a big fan of text messaging (being a Ph.D. student and wasting your time?) and I don’t need to send many text messages in a month to pay $10 per month. Luckily, Nexus One comes with the best integration with Google Voice and I can send unlimited number of text messages for free. I thought that this may be considered as an advantage of an unlocked phone because it doesn’t enforce you to get the whole plan from T-Mobile. I just hope that they don’t stop this feature in the future revision of the Android even though it seems far from the reality with the policies that Google has exhibited before.&lt;/p&gt;  &lt;h3&gt;Hardware&lt;/h3&gt;  &lt;p&gt;Nexus One comes with &lt;a href="http://www.google.com/phone/static/en_US-nexusone_tech_specs.html"&gt;one of the best hardware&lt;/a&gt; available on any mobile phone in the market even I think that I’m safe to say that it has the best set of hardware.&lt;/p&gt;  &lt;p&gt;Hardware specification is an area where it proves to be much better than iPhone, many of the Windows Mobile devices, and Blackberries. It has a very fast Qualcomm 1 Ghz process, 512 MB of Flash memory, and 512 MB of RAM memory. It has a big 3.7 inch display and 5 megapixels camera. Android platform 2.1 is installed and it supports all the common GSM/EDGE standards as well as Wi-Fi, and Bluetooth. Besides, it has AGPS receiver, Cell tower and Wi-Fi positioning, Digital compass and Accelerometer.&lt;/p&gt;  &lt;p&gt;Putting all the hardware specifications together, Nexus One is definitely a powerful phone, and I’m seeing it in action myself.&lt;/p&gt;  &lt;h3&gt;Platform&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://nayyeri.net/storage/images/posts/googlenexusonefirstimpressions_6997/2010-03-02%2015.44.20_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 5px 5px 5px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Me with my Google Nexus One phone" border="0" alt="Me with my Google Nexus One phone" align="left" src="http://nayyeri.net/storage/images/posts/googlenexusonefirstimpressions_6997/2010-03-02%2015.44.20_thumb.jpg" width="200" height="267" /&gt;&lt;/a&gt;This is an area that Nexus One is a leader for sure. Android is much more powerful than iPhone OS (OS X iPhone). One big weakness of iPhone is lack of multi-tasking support which is bolder when I turned on my Nexus One to stream a radio station while was receiving latest tweets and emails in the background, and was checking the Google Maps simultaneously! I don’t think that I need to compare it with Windows Mobile and Blackberry!&lt;/p&gt;  &lt;p&gt;Besides, the development process for iPhone platform is something complicated. I’ve started a new post series and am writing about it on a regular basis. In one of the recent posts I wrote enough details about &lt;a href="http://nayyeri.net/deployment-process-of-an-iphone-application"&gt;the pain of development and deployment of an iPhone application&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;Furthermore, Android is an open platform that lets many people work around it easily without worrying about limitations. So the applications built for the framework are mostly free or cheaper than equivalent iPhone applications.&lt;/p&gt;  &lt;h3&gt;User Experience&lt;/h3&gt;  &lt;p&gt;In my opinion iPhone is slightly better in this area. Nexus One is very powerful and in many situations it has the same level of user experience as iPhone does, but there is only one area where it shows some weaknesses: navigation buttons! I found the physical navigation buttons/shortcuts a little hard to use and sometimes they don’t respond very well. I don’t think that they’re necessary at all but most likely Google had the intention to show that they haven’t imitated something from Apple.&lt;/p&gt;  &lt;p&gt;For all the other scenarios Nexus One is as great as iPhone even in some areas it’s better because it seems to have a better Operating System and hardware.&lt;/p&gt;  &lt;h3&gt;Connectivity&lt;/h3&gt;  &lt;p&gt;I tested my phone and called some friends and received a few calls. The quality of the voice is great on both sides. I also tested my phone with my home Wi-Fi connection as well as T-Mobile’s EDGE and 3G networks and it worked very well. Obviously, I got much better results with my 3G connection on T-Mobile in comparison with AT&amp;amp;T! I can’t blame Apple for the connection problems with AT&amp;amp;T but with iPhone and AT&amp;amp;T you wouldn’t get the high level of quality that you can get with Nexus One and T-Mobile.&lt;/p&gt;  &lt;h3&gt;Graphic&lt;/h3&gt;  &lt;p&gt;In this area Nexus One is slightly better than iPhone. In my experience the level of graphic and video on Nexus One is noticeably better than what you can experience on iPhone. Of course, better hardware can be the main reason for this.&lt;/p&gt;  &lt;h3&gt;Applications&lt;/h3&gt;  &lt;p&gt;Although iPhone has more applications than Android available, Android applications are mostly free or cheaper than their equivalent iPhone applications. Also Android is younger and its current number of applications seems to be equivalent to the number of applications for iPhone at this age.&lt;/p&gt;  &lt;p&gt;Nexus One comes with a great set of pre-installed applications and has a fantastic integration with various Google services which means that you won’t feel the power of Nexus One unless you have a good internet connection on your phone.&lt;/p&gt;  &lt;p&gt;I installed some applications on my device and found very rich and powerful applications available for my purposes.&lt;/p&gt;  &lt;h3&gt;Camera&lt;/h3&gt;  &lt;p&gt;I took a few photos and videos with my new phone and really loved the quality. Nexus One should have the best camera among all the well-known mobile phones available in the markets today.&lt;/p&gt;  &lt;h3&gt;Maps&lt;/h3&gt;  &lt;p&gt;Google has proven to be the best in this area and has ported this power to Nexus One as well. Nexus One is much better than all the other phones when it comes to maps and directions. I really loved the speed and quality of Google Maps on my Nexus One.&lt;/p&gt;  &lt;h3&gt;Voice Recognition&lt;/h3&gt;  &lt;p&gt;I tested the voice recognition feature on my new phone and it worked fine. I had heard that this is another area that Nexus One rocks but so far I haven’t seen any noticeable difference with other phones.&lt;/p&gt;  &lt;h3&gt;Engraved Text&lt;/h3&gt;  &lt;p&gt;One cool option for unlocked Nexus One phones is to engrave two lines of text on your phone, and I used my name and blog URL on my phone. I found this a very nice idea that is not offered by the vendors for iPhone, Windows Mobile, and Blackberry.&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;So far I’ve enjoyed my experience with my new Google Nexus One mobile phone even though it’s not a very long time that I’ve used that. It’s hard to judge on mobile phones these days as the competition is very close, but in my honest opinion Nexus One takes the lead at present with some better features and qualities that it provides.&lt;/p&gt;  &lt;p&gt;I try to work more with my new toy and if I found something big to share, I’ll post it here or on &lt;a href="http://twitter.com/keyvan"&gt;my Twitter account&lt;/a&gt;. If you have special questions about the device, feel free to leave a comment and I try to answer you.&lt;/p&gt;</description><a10:updated>2010-03-16T17:35:56-07:00</a10:updated></item><item><guid isPermaLink="false">1028</guid><link>http://nayyeri.net/deployment-process-of-an-iphone-application</link><author>keyvan@nayyeri.net</author><title>Deployment Process of an iPhone Application</title><description>&lt;p&gt;Recently I started to write a new post series to share my experiences and show the development process of an educational iPhone application that we’re building for our graduate Software Engineering course this semester. After giving &lt;a href="http://nayyeri.net/getting-started-with-iphone-development"&gt;a general overview&lt;/a&gt;, I talked about &lt;a href="http://nayyeri.net/the-vision-of-an-educational-iphone-application"&gt;the vision of our application&lt;/a&gt;, and now I want to talk about the deployment process of the application even though we haven’t finished the development of our project.&lt;/p&gt;  &lt;p&gt;A very common part of any development process is deployment of the software into the host machine or machines. iPhone/iPod Touch development is no different and you need to follow some specific steps in order to deploy an iPhone application.&lt;/p&gt;  &lt;p&gt;One of the early tasks in development of our educational iPhone application was deploying a sample application, called &lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Creating_an_iPhone_App/index.html"&gt;MoveMe&lt;/a&gt;, to our devices, so we understand the deployment process. Interestingly, I found this step the most challenging and frustrating part of iPhone development for myself and my teammates to this point.&lt;/p&gt;  &lt;p&gt;Basically, iPhone application deployment process consists of two groups of steps: legal steps to obtain specific permissions from Apple and technical steps to deploy the application to a device.&lt;/p&gt;  &lt;p&gt;Here at the beginning I’d mention that we are using an Apple University Program that makes some points a little different, however, I think that I can assume the same major steps for deployment of a commercial iPhone application as well.&lt;/p&gt;  &lt;p&gt;As I had stated before, development of an iPhone application can be done only on a Macintosh machine and you can’t use other platforms such as Windows or Linux to accomplish this goal. Likewise, you can’t use the available Mac Virtual Machines to do this.&lt;/p&gt;  &lt;p&gt;In essence, these are the steps to be followed to deploy an iPhone/iPod Touch application to a device:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Create an account on iPhone Developer Program Portal.&lt;/li&gt;    &lt;li&gt;Add team members and information to the account.&lt;/li&gt;    &lt;li&gt;Generate and authorize appropriate certificates.&lt;/li&gt;    &lt;li&gt;Authorize your iPhone or iPod Touch devices on the portal.&lt;/li&gt;    &lt;li&gt;Generate Application IDs on the portal.&lt;/li&gt;    &lt;li&gt;Download and run your provisioning profile from the portal.&lt;/li&gt;    &lt;li&gt;Deploy your application.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;As you see, this is very different from the regular deployment process for other mobile platforms that have a few straightforward steps. In this post, I try to give a brief explanation of each step. As you see in a moment, such a long process is error-prone and can be difficult and it is indeed. In my experience almost all my classmates had problems with one or more steps of this process.&lt;/p&gt;  &lt;h3&gt;Create an Account on iPhone Developer Program Portal&lt;/h3&gt;  &lt;p&gt;The first step for a team leader or administrator is to go online to the &lt;a href="http://developer.apple.com/iphone/program/"&gt;iPhone Developer Program&lt;/a&gt; and enroll to create an account. Enrollment costs money and you need to pay $99 for a Standard program account or $299 for an Enterprise program account. There is a short comparison of these programs on &lt;a href="http://developer.apple.com/iphone/program/apply.html"&gt;the Apple website&lt;/a&gt; that you can read. We were lucky to use our university accounts to be able to log into this portal!&lt;/p&gt;  &lt;p&gt;This is one of the very bad points that I found about Apple. This is beyond the scope of this post but I see no point in this mechanism to enforce developers and companies to pay you in order to develop something even very simple for your platform.&lt;/p&gt;  &lt;p&gt;After logging into the portal, you need to navigate to the iPhone Developer Program Portal to follow the next steps. It’s worth mentioning that you have access to some good guidelines and videos on this portal that can help you learn how to follow the steps to deploy your application.&lt;/p&gt;  &lt;h3&gt;Add Team Members&lt;/h3&gt;  &lt;p&gt;In the second step you need to add your team members to the portal so they receive an invitation code via email to register on the portal and register.&lt;/p&gt;  &lt;p&gt;If you’re a member of a team, you may start your deployment process from here because your team leader, administrator, or manager has gone over the first step and you only need to use the invitation code to register on the portal.&lt;/p&gt;  &lt;h3&gt;Generate and Authorize Certificates&lt;/h3&gt;  &lt;p&gt;The third step is to generate a Certificate Signing Request on your Mac machine. This can be done by opening the Keychain Access application.&lt;/p&gt;  &lt;p&gt;Go to the Preferences menu and set Online Certificate Status Protocol (OSCP) and Certificate Revocation List (CLR) to Off.&lt;/p&gt;  &lt;p&gt;Choose Certificate Assistant and then Request a Certificate from a Certificate Authority, then enter your information. Don’t forget to use the same email address that you have used on the portal. Choose to generate a 2048 bits key size with RSA algorithm for your certificate. Finally, save the generated certificate somewhere on your machine.&lt;/p&gt;  &lt;p&gt;Go to the iPhone Developer Program portal and navigate to the Certificates page. Click on the Request Certificate button to upload your certificate, then wait for this certificate to be approved. Certificates must be approved by the team administrators and they will be notified by email. When they approve the request, a Download button appears next to your certificate in the Certificates page and you can download the file.&lt;/p&gt;  &lt;p&gt;After downloading the certificate to your machine, you need to install it on Keychain Access so it appears in the list of certificates with the appropriate name.&lt;/p&gt;  &lt;h3&gt;Authorize the Device&lt;/h3&gt;  &lt;p&gt;The other task that has to be done by the administrators is to authorize the devices that host your applications. Each iPhone or iPod Touch device has a 40 character unique identifier associated with it that can be found in iTunes, Xcode, or iPhone Configuration Utility.&lt;/p&gt;  &lt;p&gt;Administrators need to go the iPhone Developer Program portal and choose the devices page to add each device with an appropriate name and its unique ID.&lt;/p&gt;  &lt;h3&gt;Generate Application IDs&lt;/h3&gt;  &lt;p&gt;Each iPhone/iPod touch application has a unique identifier that should be associated with the application and be added to the Provisioning Profile. Application IDs enable some features in iPhone OS 3.x such as Push Notifications.&lt;/p&gt;  &lt;p&gt;Application IDs can be either a unique ID or a wildcard. The latter type of application ID can be used for several applications.&lt;/p&gt;  &lt;p&gt;There are some details about different components of an application ID called the Bundle Seed ID and Bundle Identifier but I don’t go over these details here.&lt;/p&gt;  &lt;p&gt;If you need to use an application ID for Apple Push Notification service, then you need to follow additional steps as well.&lt;/p&gt;  &lt;h3&gt;Download the Provisioning Profile&lt;/h3&gt;  &lt;p&gt;After generating the application ID by the administrators, a provisioning profile name and ID should appear in the Provisioning page on the program portal where developers can click on the Download button to get their provisioning profile.&lt;/p&gt;  &lt;p&gt;Next you need to add this Provisioning profile to your Xcode development IDE. Doing this correctly, you should see the name of your Provisioning profile in the Organizer window.&lt;/p&gt;  &lt;h3&gt;Deploy the Application&lt;/h3&gt;  &lt;p&gt;Having your application developed, and the above steps completed successfully, you can deploy the application to the authorized device. You can test you applications using the Xcode Simulator for different versions of the iPhone OS, but obviously, that’s not enough and you need to deploy the application to a real device to make sure everything works properly.&lt;/p&gt;  &lt;p&gt;After selecting your device from the list of devices in the drop down list, you need to choose your application name in the Targets sub-tree in the left pane, and then click n the Info item in the menu.&lt;/p&gt;  &lt;p&gt;This opens up a new window where you need to go to the Build tan and find Code Signing setting item and select your provisioning Profile from the list that appears next to the Code Signing Identity.&lt;/p&gt;  &lt;p&gt;Now have to open the Properties tab and put your application ID in the Identifier textbox.&lt;/p&gt;  &lt;p&gt;At this point, you should be able to click on Build and Go button in Xcode to build and deploy your application. If everything is set properly, then you should see your application deployed to the device after a few seconds.&lt;/p&gt;</description><a10:updated>2010-03-16T17:35:56-07:00</a10:updated></item><item><guid isPermaLink="false">1027</guid><link>http://nayyeri.net/the-vision-of-an-educational-iphone-application</link><author>keyvan@nayyeri.net</author><title>The Vision of an Educational iPhone Application</title><description>&lt;p&gt;
	In &lt;a href="http://nayyeri.net/getting-started-with-iphone-development"&gt;the first post&lt;/a&gt; of this series I wrote about the educational project that we&amp;rsquo;re going to build on top of the iPhone/iPod Touch platform for our graduate Software Engineering class and gave a quick overview of the elements of iPhone development.&lt;/p&gt;
&lt;p&gt;
	An infancy of our project was to choose a good idea regarding the requirements defined by our instructor and some other requirements that we had in our team. In this post I&amp;rsquo;m going to describe this idea and different aspects of its implementation in regards to the educational nature of this project.&lt;/p&gt;
&lt;h3&gt;
	Overview&lt;/h3&gt;
&lt;p&gt;
	We formed up a group of four students for this project. Apparently, we didn&amp;rsquo;t know each other and were not aware of the level of knowledge and experience of other team members. Our instructor, &lt;a href="http://cs.utsa.edu/~mshonle/"&gt;Dr. Shonle&lt;/a&gt;, requested us to work on the idea of this project after putting some general requirements on what we can do. We also had our own limitations as individuals and as a team. This part of the project was a critical part because we had to be careful and choose an idea that can meet the requirements and can be implemented in a timely manner with the effort that we could put into that.&lt;/p&gt;
&lt;h3&gt;
	Requirements&lt;/h3&gt;
&lt;p&gt;
	We had two types of requirements: those imposed by our instructor and those imposed by our internal limitations.&lt;/p&gt;
&lt;p&gt;
	Our instructor had defined the following limitations for our project:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Do not implement games unless they are educational.&lt;/li&gt;
	&lt;li&gt;
		Do not implement projects that need to maintain a third-party server.&lt;/li&gt;
	&lt;li&gt;
		Do not implement any idea that can be implemented as a single web-page or as a spreadsheet. Basically, this implies that we have to avoid some regular data-in/data-out ideas.&lt;/li&gt;
	&lt;li&gt;
		Implement your project in an incremental approach, that is, build a simpler core and then add additional features as time goes.&lt;/li&gt;
	&lt;li&gt;
		Implement your project as a team by splitting the work into smaller modules.&lt;/li&gt;
	&lt;li&gt;
		Deliver the project by the end of the semester by documenting everything as weekly blog posts to share your knowledge, experiences, resources, and tips.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	Besides, we had our own limitations as individuals or as a team:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		We are all novices in iPhone development and Objective-C. Choosing an ambitious idea could be challenging in the limited time that we have.&lt;/li&gt;
	&lt;li&gt;
		Initially, we&amp;rsquo;re not aware of the availability of third party libraries and different APIs provided in Cocoa. For example, choosing an internet-based idea could become tricky as we had no idea how powerful the built-in APIs are in helping us to implement the networking/communication aspects.&lt;/li&gt;
	&lt;li&gt;
		As graduate students, we have many responsibilities and we have limited time to dedicate to this project. This is one of the aspects of the Software Engineering knowledge that we have to earn in this class.&lt;/li&gt;
	&lt;li&gt;
		The idea chosen had to be familiar to everyone in the group because we didn&amp;rsquo;t have time to spend on learning the idea, itself. For example, we could work on a Twitter client or a MetaWeblog API implementation but these could involve learning the idea itself, and even learning some other concepts.&lt;/li&gt;
	&lt;li&gt;
		We also came to the agreement that it&amp;rsquo;s better to avoid using databases in our project because it could enforce us to learn new stuff as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
	Ideas&lt;/h3&gt;
&lt;p&gt;
	Having the abovementioned requirements in mind, we decided to share our ideas and describe them, so each team member submitted an idea to our internal Wiki. We received eight ideas:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		&lt;strong&gt;Secure PIN:&lt;/strong&gt; Applying the concepts introduced in another graduate class, this provides a more secure and alternative mechanism for authorization of users to login to their device. The default PIN is not very secure and everyone watching the owner of the device can get the PIN code and use it.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Reverse Polish Notation calculator:&lt;/strong&gt; The basic idea is to implement a calculator using the postfix notation.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;3D Tic-Tac-Toe game:&lt;/strong&gt; The implementation of Tic-Tac-Toe game in 3 dimensions that requires some tricks in Data Structures.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Instant Messenger:&lt;/strong&gt; A simple open source instant messenger.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Step Counter:&lt;/strong&gt; A helper tool for patients or weight watcher to monitor their steps.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Programmable Time Schedule:&lt;/strong&gt; An scheduler to assist the person to manage his timetable with reminders.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Medicine Database:&lt;/strong&gt; A quick reference of medicines by symptoms so the user can enter the symptoms and get the related medicine.&lt;/li&gt;
	&lt;li&gt;
		&lt;strong&gt;Contact Reminder:&lt;/strong&gt; A tool to display reminders regarding different tasks and events for some contacts such as birthday reminders.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	We discussed pros and cons of each idea and nominated two ideas for our project: Secure PIN and Reverse Polish Notation calculator.&lt;/p&gt;
&lt;p&gt;
	The Secure PIN had a sweet and noble idea that had a good level of flexibility and had a very sweet nature that could replace the default PIN authentication mechanism in iPhone/iPad Touch but the implementation of the user interface and algorithm could become challenging somewhere in the middle. Fortunately, one of the team members had implemented this in C# as a Windows Forms application but we had no idea how difficult it can become if we try to implement the same APIs in Objective-C with Cocoa. One drawback for this idea was that it&amp;rsquo;s very difficult to replace the default PIN mechanism in iPhone operating system, so the idea couldn&amp;rsquo;t become practical.&lt;/p&gt;
&lt;p&gt;
	The Reverse Polish Notation was a straightforward idea that was known to all team members and all the team members seemed to have a good level of knowledge and background to understand and implement it, and we couldn&amp;rsquo;t find any major drawback for that except the fact that there were many other calculators with different implementations available for the platform.&lt;/p&gt;
&lt;p&gt;
	One advantage of this idea was its nature to be split in different modules to be implemented by different team members. This was an important point for our course.&lt;/p&gt;
&lt;h3&gt;
	Reverse Polish Notation&lt;/h3&gt;
&lt;p&gt;
	&lt;a href="http://en.wikipedia.org/wiki/Reverse_polish_notation"&gt;The Reverse Polish Notation&lt;/a&gt; (abbreviated as RPN) is one of the common notations used in mathematics and Computer Science to represent mathematical expressions. RPN uses a postfix notation for expressions to evaluate them. In some circumstances, this notation is handy in calculating mathematical expressions.&lt;/p&gt;
&lt;p&gt;
	This notation is common in Data Structures and many other aspects of Computer Science such as Programming Languages and Compilers. The basic idea is to push operands in a stack and pop them to apply an operator to them.&lt;/p&gt;
&lt;h3&gt;
	How Does It Serve the Community?&lt;/h3&gt;
&lt;p&gt;
	First we have to define the community that this application serves to. This community can be either as wide as all iPhone/iPod Touch users or as limited as the group of developers interested in learning the programming for this platform by reading examples and codes.&lt;/p&gt;
&lt;p&gt;
	As a calculator, this idea can be helpful for those who want to use the Reverse Polish Notation in their calculations on iPhone and this is the practical aspect of this idea.&lt;/p&gt;
&lt;p&gt;
	As an educational project that may be released as an open source work, it can help others learn some aspects of iPhone development by reading the code. This project is specifically a good showcase of data structures implementation in Objective-C and iPhone.&lt;/p&gt;
&lt;h3&gt;
	Points for Future Expansion&lt;/h3&gt;
&lt;p&gt;
	One of the advantages of this idea is that it can be started as a simple core by implementing arithmetic expressions and then can be expanded in an incremental manner to have other mathematical operations and/or memory storage features.&lt;/p&gt;
&lt;h3&gt;
	Modules&lt;/h3&gt;
&lt;p&gt;
	This project can be broken to smaller modules in various ways, but one of the simplest and most straightforward ways for our group was to divide it in the following modules to be assigned to our group members:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		The user interface&lt;/li&gt;
	&lt;li&gt;
		The stack display&lt;/li&gt;
	&lt;li&gt;
		The stack and its management&lt;/li&gt;
	&lt;li&gt;
		The calculation engine&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	This is a very good separation that can help our team members work on their assigned parts individually and then combine them in a single application easily.&lt;/p&gt;
&lt;h3&gt;
	Prototype&lt;/h3&gt;
&lt;p&gt;
	We built an initial prototype of a horizontal user interface for this system.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://nayyeri.net/storage/images/posts/thevisionofaneducationaliphoneapplicatio_afce/projectsketch_2.jpg"&gt;&lt;img alt="Prototype" border="0" height="166" src="http://nayyeri.net/storage/images/posts/thevisionofaneducationaliphoneapplicatio_afce/projectsketch_thumb.jpg" style="border: 0px none ; display: block; float: none; margin-left: auto; margin-right: auto;" title="Prototype" width="450" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
	Basically, the user interface consists of two half: the left half is the user input area to get numbers and operators, and the right half is the output area to show the stack and the result of calculations.&lt;/p&gt;
&lt;h3&gt;
	Implementation&lt;/h3&gt;
&lt;p&gt;
	Hopefully, we start implementing this project this week and we will use a source control system along with &lt;a href="http://www.fogcreek.com/FogBUGZ/"&gt;FugBugz&lt;/a&gt; as our bug tracking software. Our plan is to build and test our initial modules then combine and test them as a whole. After that, we are going to expand these core features by adding the future expansion points described above.&lt;/p&gt;
</description><a10:updated>2010-03-16T17:35:56-07:00</a10:updated></item><item><guid isPermaLink="false">1026</guid><link>http://nayyeri.net/slides-of-my-presentation-on-scala</link><author>keyvan@nayyeri.net</author><title>Slides of My Presentation on Scala</title><description>&lt;p&gt;&lt;a href="http://www.scala-lang.org/"&gt;&lt;img style="border-right-width: 0px; margin: 5px 0px 5px 5px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Scala" border="0" alt="Scala" align="right" src="http://nayyeri.net/storage/images/posts/slidesofmypresentationonscala_dd75/scala_3.png" width="240" height="71" /&gt;&lt;/a&gt; Beginning my studies here in the US and for the first semester, I’m assigned a Teaching Assistant position for an undergraduate course on Programming Languages. One of the major goals of this course is to get students familiar with major features of different categories of programming languages as well as the differences in implementation of some basic features.&lt;/p&gt;  &lt;p&gt;The instructor of the class, &lt;a href="http://cs.utsa.edu/~vonronne/"&gt;Dr. von Ronne&lt;/a&gt;, has decided to use Scala as the main programming language for projects defined for this class, and students are supposed to use this language to build an incremental project and compare the features of Scala with other languages taught in the class.&lt;/p&gt;  &lt;p&gt;To get students started with the language I went over the principles of Scala and functional programming in two sessions at the beginning of the semester (back in mid-January).&lt;/p&gt;  &lt;p&gt;As some of you may know, &lt;a href="http://www.scala-lang.org/"&gt;Scala&lt;/a&gt; is a programming language that combines the Object-Oriented and functional programming features&amp;#160; from the two major paradigms of programming languages (declarative and imperative), and was founded and released in 2003 by &lt;a href="http://en.wikipedia.org/wiki/Martin_Odersky"&gt;Martin Odersky&lt;/a&gt;, a German scientist. The name of the Scala language comes from Scalability and it truly delivers a high level of scalability. The language is designed to be expandable and flexible.&lt;/p&gt;  &lt;p&gt;Scala has proven to be the best attempt in combining Object-Oriented and functional styles in a single programming language. The good point about Scala is that it doesn’t come as a completely new language and just tries to refine the Java platform or the .NET Framework. Scala is more known for its integration with Java and the .NET branch hasn’t been very active (most likely because F# has become the mainstream functional programming language for the Microsoft community). Scala has a compiler and an interpreter for Java and has a great set of features enhancing the functional programming style.&lt;/p&gt;  &lt;p&gt;The other interesting point about Scala is that it derives many of its features from existing languages and tries to get the best out of the previous experiences.&lt;/p&gt;  &lt;p&gt;I put all these introductory information in a set of slides for a short presentation in&amp;#160; to start the class. I thought that it may be helpful to published them here for those who may be interested to have a background in Scala. You can download the slides in the PDF format from &lt;a href="http://nayyeri.net/storage/documents/talks/Introduction%20to%20Scala.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;If you’re interested to learn the basics of Scala in a practical manner, &lt;a href="http://www.simplyscala.com/"&gt;Simply Scala&lt;/a&gt; is a great website to use with its tutorials, and if you’re looking to learn it in a more advanced level, &lt;a href="http://www.amazon.com/gp/product/0981531601?ie=UTF8&amp;amp;tag=keyvannayyeri-20&amp;amp;linkCode=xm2&amp;amp;camp=1789&amp;amp;creativeASIN=0981531601"&gt;Programming in Scala&lt;/a&gt; is a rich book written by some authors including Martin Ordersky, himself.&lt;/p&gt;</description><a10:updated>2010-03-16T17:35:56-07:00</a10:updated></item><item><guid isPermaLink="false">1025</guid><link>http://nayyeri.net/getting-started-with-iphone-development</link><author>keyvan@nayyeri.net</author><title>Getting Started with iPhone Development</title><description>&lt;p&gt;
	&lt;img align="right" alt="Photo taken from http://www2.samford.edu/ts/images/stories/mobile/iphone-logo.jpg" border="0" height="112" src="http://nayyeri.net/storage/images/posts/gettingstartedwithiphonedevelopment_a942/iphone-logo_3.jpg" style="border: 0px none ; margin: 5px 0px 5px 5px; display: inline;" title="Photo taken from http://www2.samford.edu/ts/images/stories/mobile/iphone-logo.jpg" width="200" /&gt; I know that it&amp;rsquo;s been quite a long while that I haven&amp;rsquo;t written anything on this blog and it marks a record in my blogging history. Moving from a country to another and starting a new life specifically as a graduate student has its own difficulties that eat all your time.&lt;/p&gt;
&lt;p&gt;
	However, the good news is that now I have some obligations to blog at least once a week until the end of this semester and it gives me a good chance to return to blogging covering new topics that may not be very related to the .NET world!&lt;/p&gt;
&lt;p&gt;
	For this semester I&amp;rsquo;ve taken a graduate Software Engineering course with &lt;a href="http://cs.utsa.edu/~mshonle/" rel="friend met"&gt;Dr. Macneil Shonle&lt;/a&gt; (recently, we&amp;rsquo;ve been finding many clones of &lt;a href="http://www.hanselman.com/blog/" rel="friend"&gt;Scott Hanselman&lt;/a&gt;!) and as a main part of our duties for this course, we&amp;rsquo;re supposed to work on a software project as a team.&lt;/p&gt;
&lt;p&gt;
	The software project for this course is something that should run on top of the iPhone/iPod Touch platform and we need to form groups of 4-5 people. We&amp;rsquo;re supposed to collaborate on this project and deliver it in a timely manner (by the end of the semester) and follow an incremental approach to build a useful application. Besides, we&amp;rsquo;re supposed to prepare documentation and information about our work individually and specifically blog about our experiences on a regular basis. Surely, this is good news for my blog readers.&lt;/p&gt;
&lt;p&gt;
	Apparently, Dr. Shonle had some goals in mind by defining this task for us:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Force students to work as a team and learn about all the team-work concepts&lt;/li&gt;
	&lt;li&gt;
		Help them learn about new platforms and technologies especially with a funny project for the iPhone platform&lt;/li&gt;
	&lt;li&gt;
		Contribute something to the community by building new applications.&lt;/li&gt;
	&lt;li&gt;
		Learning Software Engineering concepts and applying them in a real-world project in action.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	Therefore, I&amp;rsquo;m going to publish some blog posts in the next three months on this blog and cross-post them to our internal Moodle blog to get some points! I try to share my experiences, opinions and the challenges that I face with, so my readers can grasp an understanding of the process of programming with the iPhone/iPod Touch platform.&lt;/p&gt;
&lt;p&gt;
	To be honest, I&amp;rsquo;m not a big fan of Apple and haven&amp;rsquo;t used their products that much, and I&amp;rsquo;m not planning to do that for ages. I know that there are many people who find their products exciting but as a matter of a fact, I see no point in what they do except one thing: improving the user experience. As a technical user, this is not a big deal for me. As I&amp;rsquo;ll point in a moment, I got some bad impressions from my first experience with Apple product development.&lt;/p&gt;
&lt;h3&gt;
	iPhone Operating System&lt;/h3&gt;
&lt;p&gt;
	&lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/URL_iPhone_OS_Overview/index.html#//apple_ref/doc/uid/TP40007592"&gt;The iPhone Operating System&lt;/a&gt; has derived many features from the Mac OS X and of course, has altered many of them or has introduced new features appropriate for a mobile device, so those who have written programs for the Macintosh operating system should have an easier job learning the process of building an application for the iPhone platform.&lt;/p&gt;
&lt;p&gt;
	The iPhone operating system can be considered as a hierarchical multi-level stack of technologies included in a single platform. This consists of four main layers from bottom to top:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;
		Core OS&lt;/li&gt;
	&lt;li&gt;
		Core Services&lt;/li&gt;
	&lt;li&gt;
		Media&lt;/li&gt;
	&lt;li&gt;
		Cocoa Touch&lt;/li&gt;
&lt;/ul&gt;
&lt;p align="center"&gt;
	&lt;img alt="Photo taken from http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/URL_iPhone_OS_Overview/index.html#//apple_ref/doc/uid/TP40007592" border="0" height="141" src="http://nayyeri.net/storage/images/posts/gettingstartedwithiphonedevelopment_a942/overview_systemlayers_3.jpg" style="border: 0px none ; display: inline;" title="Photo taken from http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/URL_iPhone_OS_Overview/index.html#//apple_ref/doc/uid/TP40007592" width="240" /&gt;&lt;/p&gt;
&lt;p&gt;
	The first two levels are fundamental layers that provide more basic functionalities and features, services, and interfaces such as APIs to work with files, low-level data types, network sockets, etc. These programming interfaces are mostly provided in C programming language.&lt;/p&gt;
&lt;p&gt;
	The third level, media, provides several APIs to work with graphics, audio, and video, and combines C and Objective-C languages in its interfaces.&lt;/p&gt;
&lt;p&gt;
	Finally, the upper level, Cocoa Touch, which is basically the main layer that programmers deal with is a higher level API provided in Objective-C to let you apply many of the common tasks in your code.&lt;/p&gt;
&lt;p&gt;
	Typically, an iPhone application is written on top of the Cocoa Touch layer but if you can&amp;rsquo;t find relevant APIs for your work, you may dig deeper and use APIs from the lower layers.&lt;/p&gt;
&lt;h3&gt;
	Software Development Technologies&lt;/h3&gt;
&lt;p&gt;
	Building an application for the iPhone platform can be done using several approaches. The default approach, as many of you already know, is applying Objective-C and other development tools provided by Apple. This is used by most of the applications written and released on AppStore.&lt;/p&gt;
&lt;p&gt;
	But the other approach that may be familiar to the fellow .NET developers is &lt;a href="http://monotouch.net/"&gt;MonoTouch&lt;/a&gt;, a technology released as a part of &lt;a href="http://www.mono-project.com/"&gt;the Mono project&lt;/a&gt; to let .NET developers apply their knowledge in the .NET development to build applications for the iPhone platform. Basically, MonoTouch binds .NET APIs to native APIs that I described above. It also has a good integration with Xcode IDE that I&amp;rsquo;ll describe later in this post.&lt;/p&gt;
&lt;p&gt;
	My dear friend, &lt;a href="http://morewally.com" rel="friend"&gt;Wallace McClure&lt;/a&gt; has written &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Building-iPhone-and-iPod-touch-Applications-for-the-NET-C-Developer-with-MonoTouch.productCd-0470590734.html"&gt;a Wrox Blox&lt;/a&gt; about this technology that is worthwhile to read for everyone interested in using this technology.&lt;/p&gt;
&lt;p&gt;
	Unfortunately, MonoTouch is a commercial product and despite our interest to use it for our project, the pricing wasn&amp;rsquo;t fair for our educational purposes so we ended up with the default approach (using Objective-C).&lt;/p&gt;
&lt;h3&gt;
	Objective-C&lt;/h3&gt;
&lt;p&gt;
	&lt;a href="http://en.wikipedia.org/wiki/Objective-c"&gt;Objective-C&lt;/a&gt; is a reflective and Object-Orientated derivation of the C programming language that adds a messaging style to the C language.&lt;/p&gt;
&lt;p&gt;
	Objective-C is mostly known for its wide usage in Apple Mac OS X and iPhone development. If you&amp;rsquo;re going to develop for Apple products, you definitely need to know this language in a very good level.&lt;/p&gt;
&lt;p&gt;
	Knowing the C programming language and being familiar with the Object-Oriented concepts, you have a straightforward way to learn Objective-C syntax and style of programming.&lt;/p&gt;
&lt;p&gt;
	Apple developer guide has &lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/"&gt;a good introduction&lt;/a&gt; to this language that can give you a basic idea of the language.&lt;/p&gt;
&lt;h3&gt;
	Development Process&lt;/h3&gt;
&lt;p&gt;
	The development process of an application for the iPhone platform is very similar to programming for many other mobile platforms like Windows Mobile or Android, but some legal phases to get permissions from Apple add to its complexity that in my opinion seem to be a very annoying part of development process for iPhone platform.&lt;/p&gt;
&lt;p&gt;
	Following some steps, you need to sign up on Apple website and submit your generated local certificates to get a Provisioning Profile (after getting approved by Apple) to use on your machine.&lt;/p&gt;
&lt;p&gt;
	As an academic project, we have access to Apple University Program and had an easier process to get our profiles approved here. We have received a set of iPod Touch devices from the university to use for this project and test our code.&lt;/p&gt;
&lt;p&gt;
	After having the Provisioning Profile, and registering your devices on the Apple website, you can start building applications using the below-mentioned tools. After building your applications, you can test them on a local emulator, and then you can deploy this application to your device as well.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/Creating_an_iPhone_App/index.html"&gt;Here&lt;/a&gt; is a simple example that can get you started with the programming style for the iPhone platform.&lt;/p&gt;
&lt;h3&gt;
	Development Tools&lt;/h3&gt;
&lt;p&gt;
	Another major limitation of development for the iPhone platform is that it mandates you to use a real Mac machine to write your code and deploy them to your devices. So whether you use the default technologies or MonoTouch, you need to run everything on a Mac machine (and you can&amp;rsquo;t use a Virtual Machine neither).&lt;/p&gt;
&lt;p&gt;
	Having this important requirement, you can use a rich set of development tools provided for the iPhone development. The most common IDE to use for Mac OS X and iPhone development is &lt;a href="http://developer.apple.com/tools/xcode/"&gt;Xcode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;
	You can also use the &lt;a href="http://developer.apple.com/tools/interfacebuilder.html"&gt;Interface Builder&lt;/a&gt; to put a rich set of controls and user interface elements for Cocoa on your application surface.&lt;/p&gt;
&lt;p&gt;
	&lt;a href="http://developer.apple.com/iphone/library/referencelibrary/GettingStarted/URL_Tools_for_iPhone_OS_Development/index.html#//apple_ref/doc/uid/TP40007593"&gt;Here&lt;/a&gt; you can see a good description of the main development tools you can use for iPhone development.&lt;/p&gt;
</description><a10:updated>2010-03-16T17:35:56-07:00</a10:updated></item></channel></rss>
