Thursday, September 12, 2013

Why Apple discontinued iPhone 5


(Original article by: Ali Rizvi at homeshopping.pk)
Seeing how this topic has gotten a reaction from the public, I would like to explain by giving reason as to why Apple chose to discontinue its 2012 flagship phone.
The perception, for a long time, even before we had a name for the iPhone 5c was that it would be a budget phone and therefore of lower quality than the iPhone 5s. The rumors kept building up and people started thinking that a budget iPhone was definitely going to happen. As rumors progressed further, we started seeing signs of the budget iPhone with the images of the plastic shell around the body being released. Of course, some would have been fake but still the perception was being made since a very long time.
t4t4

In the past few days, leaked pictures showed the packaging, colour variants and more concrete information regarding the device and people were thinking that it would cost quite low. However, when the prices were released, a lot of people were shocked and are using the social media to vent their anger.
iphone5c_boxes_Hajek-380x285

Well, one of the main reasons that Apple discontinued the iPhone 5 is that the “budget iPhone” as it was labelled will cost a whopping $549 (PKR 56,000) and $649 (PKR 66,000) for the 16gb and 32gb model respectively. This wedges the price right below that of the iPhone 5S and offers the same specifications as the iPhone 5. This would have caused problems when people would have decided to choose between the iPhone 5 and 5c since the release of the 5s would have meant that Apple would have to lower the price of the iPhone 5.
Now, why would anyone buy a phone which was labelled a cheap phone made with plastic over a phone of premium quality with the same specifications and price like the iPhone 5? This might have been the main reason for the discontinuing decision as it would have affected the sales of the iPhone 5c which Apple would never want since it is their latest phone.
The iPhone 4s is still hanging in there because Apple could have reduced its price even further leading to an increase in sales. A very calculated decision taken by the company which the consumers wouldn’t have minded.
But, would you really buy the iPhone 5c over the iPhone 5 or you'll go for iPhone 5s? Let us know in the comments.

Wednesday, September 11, 2013

UIPageViewController In Right to Left format (Arabic/Urdu based books) - iPad

Introduction:

PageViewController in iOS 5 and later is becoming very common and most useful component now a days. It lets the user navigate between pages of content, where each page is managed by its own view controller object. Navigation can be controlled programmatically by your app or directly by the user using gestures. When navigating from page to page, the page view controller uses the transition that you specify to animate the change. It gives you a classical book curl page which gives a very nice view to the user.

We are now creating a Sample Project in which a PageViewController is created manually as a Single View Application.

1. Starting the Project:

Open the Latest XCode with iOS SDK 5 or later and create new Project with Single View application. Enter the name of the Project and then select iPad as devices. Don't forget to Uncheck "Use Storyboard" and Check "Use ARC". Since we are creating the application manually from scratch using the SingleView Application so we don't need to use Storyboard.


2. Setting up the Book Background:

Open the ViewController.xib file and select change the background of the view by selecting view Objects Panel. You can place any ImageView in the view in case if you want to add a custom Image on the background of the Classical Book. In my case I am adding just a background color.


3. Adding Book ContentView Controllers:

Lets add a ContentView Controller and Add an Objective C File in the project with UIViewController as its parent Class and name it OneContentViewController with Target as iPad and with XIB User Interface.


4. Add Book Content and Setup Page

Set the background color of the View inside OneContentViewController xib file. Now drag and drop an UIImageView in the View and set its Size from the Size Inspector on Right Side Panel as (x, y, width, height) (20, 8, 424, 643).


Create an IBOutlet of UIImageView in OneContentViewController.h file and connect that Outlet with the UIImageView you dragged and placed in the OneContentViewController.xib file. Also create one UIImage and NSString property in OneContentViewController.h file and synthesize all the properties in OneContentViewController.m file.

Your OneContentViewController.h file will look something like below.

#import <UIKit/UIKit.h>

@interface OneContentViewController : UIViewController

@property (nonatomic, retain) IBOutlet UIImageView *pageView;
@property (nonatomic, retain) UIImage *page_content;
@property (nonatomic, retain) NSString *page_name;
@end

Now replace the viewDidLoad method in you ContentViewController with the following Code. In this code we just set the UIImageView "pageView" with the UIImage "page_content" so that when we set the UIImage from our MainController (ViewController.m) then it set that UIImage in the UIImageView.

- (void)viewDidLoad
{
    [pageView setImage:page_content];
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}


5. Setup MainController (ViewController.h/ViewController.m)

Now add a UIPageViewController property in the ViewController.h file and synthesize the property. Also add one NSMutableArray object in ViewController.h file and synthesize it as well. Then you can add the UIPageViewControllerDataSource and UIPageViewControllerDelegate in the ViewController.h file because we will use some delegates and datasources of UIPageViewController in our ViewController.m file.

Last but on least we would also import OneContentViewController.h in our ViewController.h file.

After 5th Step our ViewController.h file would be look something like following.


#import <UIKit/UIKit.h>
#import "OneContentViewController.h"

@interface ViewController : UIViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate>

@property (nonatomic, strong) UIPageViewController *pageViewController;
@property (nonatomic, strong) NSMutableArray *modelArray;

@end

6. Add UIPageViewController in  ViewController.m file:

Now we will setup and initialise UIPageViewController  and add that into the subview. Add the following method into the ViewController.m file and call this method from our viewDidLoad method.

#pragma mark - Local Methods
-(void)setupPageViewController{
    
    //Instantiate the model array
    self.modelArray = [[NSMutableArray alloc] init];
    for (int index = 1; index <= 24 ; index++)
    {
        [self.modelArray addObject:[NSString stringWithFormat:@"%d",index]];
    }
    //Step 1:  Instantiate the UIPageViewController.
    self.pageViewController = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl
                                                              navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];
    
    //Step 2:  Assign the delegate and datasource as self.
    self.pageViewController.delegate = self;
    self.pageViewController.dataSource = self;
    
    //Step 3:   Set the initial view controllers.
    OneContentViewController *contentViewController = [[OneContentViewController alloc] initWithNibName:@"OneContentViewController" bundle:nil];
    contentViewController.page_name = [self.modelArray objectAtIndex:0];
    contentViewController.page_content = [UIImage imageNamed:[NSString stringWithFormat:@"page_%@.jpg",[self.modelArray objectAtIndex:0]]];
    
    //You can add more ContentView Controllers in this array as well. Each ContentViewController can denotes a seperate page. In our case we are using same ContentViewController on each page
    NSArray *viewControllers = [NSArray arrayWithObject:contentViewController];
    [self.pageViewController setViewControllers:viewControllers
                                      direction:UIPageViewControllerNavigationDirectionReverse
                                       animated:NO
                                     completion:nil];
    
    //Step 4:    ViewController containment steps ---- Add the pageViewController as the childViewController
    [self addChildViewController:self.pageViewController];
    
    //Add the view of the pageViewController to the current view
    [self.view addSubview:self.pageViewController.view];
    
    //Call didMoveToParentViewController: of the childViewController, the UIPageViewController instance in our case.
    [self.pageViewController didMoveToParentViewController:self];
    
    //Step 5:
    // set the pageViewController's frame as an inset rect.
    CGRect pageViewRect = self.view.bounds;
    pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0);
    self.pageViewController.view.frame = pageViewRect;
    
    //Step 6:
    //Assign the gestureRecognizers property of our pageViewController to our view's gestureRecognizers property.
    self.view.gestureRecognizers = self.pageViewController.gestureRecognizers;
    
}


7. Setup Delegates and DataSources of UIPageViewController:

Now add the following two UIPageViewController DataSource Methods in the ViewController.m file. These two methods will select the currentIndex of the pages that are being showed right now and get the Image from your resources and set that into the UIImage in ContentViewController.

#pragma mark - UIPageViewControllerDataSource Methods

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
      viewControllerBeforeViewController:(UIViewController *)viewController
{
    NSUInteger currentIndex = [self.modelArray indexOfObject:[(OneContentViewController *)viewController page_name]];
    if(currentIndex == self.modelArray.count-1)
    {
        return nil;
    }
    OneContentViewController *contentViewController = [[OneContentViewController alloc] init];
    contentViewController.page_name = [self.modelArray objectAtIndex:currentIndex + 1];
    contentViewController.page_content =[UIImage imageNamed:[NSString stringWithFormat:@"page_%@.jpg",[self.modelArray objectAtIndex:currentIndex + 1]]];
    
    return contentViewController;
}

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController
       viewControllerAfterViewController:(UIViewController *)viewController
{
    
    NSUInteger currentIndex = [self.modelArray indexOfObject:[(OneContentViewController *)viewController page_name]];
    if(currentIndex == 0)
    {
        return nil;
    }
    OneContentViewController *contentViewController = [[OneContentViewController alloc] init];
    contentViewController.page_name = [self.modelArray objectAtIndex:currentIndex - 1];
    contentViewController.page_content = [UIImage imageNamed:[NSString stringWithFormat:@"page_%@.jpg",[self.modelArray objectAtIndex:currentIndex - 1]]];
    return contentViewController;
    
}

Now add the UIPageViewController Delegate method, which would be called when you Curl the page. Now add the following method in the ViewController.m

#pragma mark - UIPageViewControllerDelegate Methods

- (UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController *)pageViewController
                   spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation
{

    /* uncomment this if statement if you want to add portrait functionality as well. */
    
//    if(UIInterfaceOrientationIsPortrait(orientation))
//    {
//        //Set the array with only 1 view controller
//        UIViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
//        NSArray *viewControllers = [NSArray arrayWithObject:currentViewController];
//        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
//        
//        //Important- Set the doubleSided property to NO.
//        self.pageViewController.doubleSided = NO;
//        //Return the spine location
//        return UIPageViewControllerSpineLocationMin;
//    }
//    else
//    {
        NSArray *viewControllers = nil;
        OneContentViewController *currentViewController = [self.pageViewController.viewControllers objectAtIndex:0];
        
        NSUInteger currentIndex = [self.modelArray indexOfObject:[(OneContentViewController *)currentViewController page_name]];
        if(currentIndex == 0 || currentIndex %2 == 0)
        {
            UIViewController *previousViewController = [self pageViewController:self.pageViewController viewControllerBeforeViewController:currentViewController];
            viewControllers = [NSArray arrayWithObjects:previousViewController, currentViewController, nil];
        }
        else
        {
            UIViewController *nextViewController = [self pageViewController:self.pageViewController viewControllerAfterViewController:currentViewController];
            viewControllers = [NSArray arrayWithObjects:currentViewController, nextViewController, nil];
        }
        [self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];
        
        return UIPageViewControllerSpineLocationMid;
//    }
}


8. Add the images into the sources:

Now add the page images into the source folder of the project with the following pattern, page_1, page_2,......,page_15,page_16....

Build and Run the code and you will see a classical book curl type in your simulator. You can download the code as well from here. Open the link and goto File and Click Download. You will get sample images in the source code.

Enjoy Coding!


Tuesday, September 10, 2013

Microsoft Surface 2 and Surface 2 Pro Coming On September 23rd?

surface
Microsoft hasn’t exactly had a run away hit with either Windows 8 or its Microsoft Surface tablet line, but as the saying goes – if at first you don’t succeed, try, try again. On the Windows front, Microsoft will soon release Windows 8.1, which Microsoft hopes will address customer concerns regarding the mobile-centric OS. On the Surface front? The Surface 2 may be just around the corner, with rumors pointing to an announcement of the Surface 2 and Surface Pro 2 on September 23rd.
Last Month Nvidia’s CEO confirmed that the Tegra 4 processor would be making its way to the lower-end Surface 2, which means that Microsoft isn’t abandoning Windows RT yet. As for the Surface Pro? We can expect a Haswell Core i5 processor from Intel, which should help address battery life concerns experienced with the first-gen model.
Not much is known about either model, spec-wise, though reports suggest the base (RT) version will pack a 1080p display. If the new Microsoft tablets are announced later this month, that means they likely won’t arrive until sometime in October. With Windows 8.1 and RT 8.1 arriving on October 17th, odds are both tablets should pack the newest version of Windows right out of the box.


Sunday, September 1, 2013

Don't try too hard

By Yousuf Ahmed

Don’t try too hard!

This is probably the most important lesson I have learnt from my deep involvement in agile transformation initiatives over the last decade.

I have seen too many projects fail where the primary focus has been in implementing steps of a specific agile method – whether the environment is ready for them or not. Examples are of many types - a daily scrum is a great tool – but forcing folks to join a daily meeting where there is not a whole lot changing in what they do may prove counter-productive.  4 week sprints are great – but don’t make much sense for a maintenance team. Test driven development is fabulous – but is a test for every getter and setter really needed?

... I can go on.

Successful agile projects begin with focusing on the fundamentals – and I find it helpful to refer back to the Agile manifesto and its core principles to reinforce these fundamentals.

Agile is concerned with delivering value in an efficient and timely manner - and the different agile methods have given us many great processes and tools to achieve these goals. But most importantly – agile recognizes that the success of a project depends on the people and their level of commitment. At its core, agile is about collaboration, transparency and trust. Agile tools and processes are enablers that help facilitate teamwork and provide a roadmap for efficient execution.  But they need to be used judiciously, ensuring that they help increase the quality of teamwork. Used literally where they don’t necessarily fit, these very tools can alienate the team and ruin the chances of success.

Ken Schwaber (co- creator of Scrum in “Agile Project Management with Scrum”) describes Scrum as a practice of “the art of the possible” – which very aptly describes the spirit of agile – keep the core principles in mind, and adapt the tools to work properly in your environment.
Having said that – it is important to have some sort of a guideline and set of rules, some level of prescriptiveness and discipline in your project, and as a thinking project manager – you are going to need to define these rules for your project yourself.  Don’t try to implement a method just because it exists, but do figure out a process that fits your needs – and then make sure it’s followed. Here are a few key best practices which can serve as a guideline to help define the specific rules for your project.
·           Build trust among team members, including all business stakeholders
·           Find ways to collaborate, and effectively communicate – a daily scrum is one possible way, but adjust the times and frequency appropriately
·           Do build a backlog – knowing what you are dealing with is important
·           Split the work into manageable chunks – use iterations, sprints, or release plans as tools when appropriate
·           Make testing a part of your team’s development culture.
·           Review and communicate progress regularly – in whatever form is best understood by your audience. 
·           Adjust and tweak your methods based on regular retrospection.



Wednesday, August 28, 2013

Give Your Project Client the Real Picture

By Brad Egeland

An sign with half full and half empty written on it
Are you a glass half empty or glass half full type of person? Do you consider yourself to be a good reader of character of those individuals you interact with? Are you good at reading situations and anticipating a likely outcome?
I always think I am good at all of those things, but I've learned some hard lessons by not taking in all the information possible or by reading my own thoughts and interpretations into the information I am sometimes given. My wife has pointed this out on several occasions and she has always been right. She, in fact, IS very good at correctly seeing a situation for what it is and pretty good at predicting a likely outcome. That's why I run professional situations by her from time to time when she seems to have some interest and time to deal with it.
I'm bringing this up because I've learned that it is usually not in my best interest - or my client's - for me to perform too much interpretation of information and situations before passing info on to my project client. It is usually best for me to give my client the full picture - the real picture and full disclosure of information - and discuss it with them. By doing so you are never at risk of causing them to misinterpret and respond inappropriately because you may have just given them what you 'thought' was right or 'thought' they needed to hear. Often we just need to let them see the full picture and make decisions accordingly. Being the PM or main consultant doesn't mean we need to take away their ability to absorb all information possible about a given situation. That may cause them to act in such away that would actually be unfavourable for their business or the project we are managing for them.

It's Ok to 'Help'

With all of this said, it's ok to 'help' your client with your interpretation of the information at hand...based on your experience. But explain it as such. We just had our own non-PM related incident in our personal lives where a realtor we had been working with on a property we were very interested in indicated that the buyers who jumped in ahead of us on a short sale purchase had lost interest and now that the bank had come back with a counter-offer, it was ours to act on. As we got excited and prepared our offer and made tentative moving plans, she called back the next day and apologised that she had made an incorrect assumption. The original buyers were only hesitant, not disinterested, and had now accepted the banks counter-offer and were moving forward. It left us frustrated and somewhat upset that we had wasted a couple of days of our lives planning for something that wasn’t ours to plan for. We were out any money, but it was still upsetting. Now, transpose that into a project scenario where you may have caused a project client to act on this type of information and some serious time and money may have been 'lost' in the process.

Summary

I think most of us can see where you could easily lose a project and a customer over simply presenting our own interpretation of the situation rather than the entire picture. It's ok to help, but make sure that the client understands that you are only giving them some of your own 'best guess' information based on what you know. Then let them decide how to act, react, and plan accordingly.

Source:

Wednesday, August 21, 2013

Here, there and everywhere: Google Keep reminds you at the right time

Notes are a good way to keep track of all you have to do, but most of us need a little nudge now and then. Google Keep can remind you of important tasks and errands at just the right time and place. For example, Keep works with Google Now to remind you of your grocery list when you walk into your favorite grocery store, and nudges you on Thursday night to take out the trash.

To get started, select the “Remind me” button from the bottom of any note and choose the type of reminder you want to add. You can add time-based reminders for a specific date and time, or a more general time of day, like tomorrow morning. Adding a location reminder is incredibly easy too—as soon as you start typing Google Keep suggests places nearby.


 
Of course, sometimes plans change. If you get a reminder you’re not ready to deal with, simply snooze it to a time or place that’s better for you.



 

It’s now even easier to get to all of your notes using the new navigation drawer, which includes a way to view all of your upcoming reminders in one place. And for people who want more separation between their home and work lives, the drawer also lets you easily switch between your accounts. 


And finally, we've made it easier to add your existing photos to a Google Keep note on Android. When you tap the camera icon you can choose between taking a new photo or adding one you already have from Gallery.


Posted by Erin Rosenthal, Product Manager

Tuesday, August 20, 2013

Samsung, The True Ruler of the Android Kingdom

Android has been a hot topic lately, with some arguing that it may become a unilateral smartphone superpower and others arguing that it has already peaked in the US market. A lot of thisconversation seems to assume that Android’s (and by extension, Google’s) gain is Apple’s loss and vice-versa. We believe that the situation is more complex than that.
Two facts about Android are now well established: 1) Android smartphones now dominate many markets in terms of device shipments, but 2) The market for Android devices is famously fragmented. What’s less well-established is how and when all of those Android devices are being used and the implications of that for participants in the Android ecosystem and beyond. Those are the topics that we tackle in this post with a particular focus on Samsung devices and how their owners compare to users of other Android devices.

Smartphones Dominate On Android

This posts builds on a previous one we did exploring how people use iOS smartphones and tablets. As we will show, there are many similarities in usage patterns across the two operating systems, but one big difference is the overall breakdown between smartphones and tablets. In this May sample of 45,340 Android devices (of the 576 million Flurry measures), 88% were phones and 12% were tablets. The share of devices represented by smartphones is significantly greater than in our iOS sample, in which 72% of devices were phones. The emphasis on phones over tablets was even greater among Samsung devices in our sample: 91% were smartphones and 9% were tablets.
FLR130801 Android Sm1ACC4E resized 600
As in our previous post, we started our analysis by considering how the smartphone versus tablet distribution varies by psychographic segment. These are Personas, developed by Flurry, in which device users are assigned to segments based on their app usage. An individual person may be in more than one Persona because they over-index on a variety of types of apps. Those who own more than one device may not be assigned to the same Personas on all of their devices because their app usage patterns may not be the same across devices.
The Personas shown above the “Everyone” bar in the graph below skew more toward phones than the general population of Android device owners, while the Personas shown below the “Everyone” bar skew more toward tablets. (Android device ownership patterns for Personas not shown are not statistically different from those shown for “Everyone.”) In general, these follow a similar pattern to the one we saw for iOS. On-the-move type Personas, including Avid Runners, skew toward phones and more home-bound personas, such as Pet Owners, skew more toward tablets.
FLR130801 AndroidTabletsHomeUse v1 resized 600
Within that broader pattern, there were differences based on the particular Android smartphone or tablet that a person owns. Samsung is the dominant manufacturer of Android devices. Its phones represented 59% of the phones in our overall sample of Android phones, and its tablets represented 42% of the tablets in our sample. Both its products and its promotion suggest that Samsung attempts to differentiate itself from other devices that share the Android operating system, and those differences were reflected in persona memberships. 

Samsung Is Building A Unique and Attractive Audience

Owners of Samsung devices were disproportionately likely to be in many personas, including some of those most sought-after by advertisers (e.g., Business Travelers and Moms). Since Persona memberships are based on over-indexing for time spent in particular types of apps, this suggests that Samsung device owners are generally more enthusiastic app users than owners of other brands of Android smartphones and tablets.
FLR130801 SamsungOwnersEnthusiastic v3 resized 600
Overall, owners of Android tablets spent 64% more time using apps than owners of Android smartphones. This ratio varied by category, as shown in the chart below. For example, owners of Android smartphones spent more than five times as much time, on average, in Business apps as owners of Android tablets. Sports and Photography were other categories that heavily favored phones. As with iOS, Education and Games skewed more toward tablets. (Average time spent using app categories not shown does not differ in a statistically significant way between Android smartphones and tablets.)
FLR130801 RatioTimeSpentAndroid v1 resized 600
Once again there was variation by manufacturer. Overall, owners of Samsung phones spent 14% more time using apps than owners of other Android phones and owners of Samsung tablets spent 10% more time using apps than owners of other Android tablets. The particular categories of apps where time spent was greater for Samsung phones were News Magazines, Tools, Health and Fitness, Photography, and Education. Owners of Samsung tablets spent more time than owners of other Android tablets in Communication (e.g., voice over IP and texting) apps.
Android app use peaks between 8 and 11 pm. Comparing the two types of Android devices, a greater share of tablet use takes place from 3pm until 11 pm and a greater share of phone use takes place from 11 am to 3 pm and overnight. While the overall amount of time spent on Samsung devices is greater than for other Android smartphones and tablets, the overall time distribution throughout the day is similar.
FLR130801 AndroidTimeAllocation v1 resized 600

Can Samsung Compete At Both Ends Of The Market?

As this and our previous post have shown, while smartphones capture more time in specific app categories, such as Navigation and Photography, those tend to be categories of apps used in short bursts. Tablets are favored for longer-duration app categories, such as Games and Education, and so, on average, tablet users spend more total time using apps than smartphone users. That makes tablets particularly interesting to content creators and to advertisers.
Samsung is the dominant manufacturer of Android devices. As shown in this post, it is attracting a unique audience relative to other Android devices. Owners of Samsung devices spend more time in apps than owners of other Android devices, and they are also disproportionately likely to be members of psychographic segments (Personas) that are attractive to advertisers. In those respects, they are more similar to owners of iOS devices than owners of other Android devices are.
But compared to iOS, a smaller share of Android devices are tablets, and that percentage is even smaller for Samsung devices than for Android as a whole. So the question is: will Samsung make as big of an impact in the tablet market as it has in the smartphone market?
In some ways, this comes down to a question of how it will balance its resources between two different types of markets: relatively more affluent countries that were early adopters of connected devices so new growth is now coming mainly from tablet adoption versus less affluent countries where smartphone penetration is still relatively low, but growing quickly.
A focus on tablets could enable Samsung to better develop more of a true ecosystem of its own (especially considering that they can include connected TVs as part of that) and the higher profits that go with that. Riding the wave of global smartphone growth is more of a high volume / low margin strategy. Of course, they could try to compete at both ends of the market, but each individually may require a lot of resources because of Apple’s (and to a lesser extent, Amazon’s) strength in the tablet market and the number of hungry competitors anxious to grow along with the Android smartphone market. If they can do both, they will rule the Android Kingdom, and Samsung, rather than Google, will pose the greater threat to Apple.