Thursday, March 12, 2015
Iterative Development and User Story Slicing
Here is a quick discussion on Iterative vs Incremental development:

- Allows you to validate your architecture and solution early
- Allows users to see and test the whole application early
- Minimizes the affects of change to a feature
- Ensures important stories are built first
- Elicits improved feedback on the whole application early
- Allows you to deliver your application early
- Discourages "gold plating"
- It partners nicely with user story mapping (turn the diagram upside down and you have your story map)
- Your code and design has to be change tolerant
- You have to be proficient at slicing your user stories
- You wont know the final solution at the beginning of the project
The first story slice is simply a form with little or no validation with text boxes To, Subject and Body with Send and Cancel buttons. When the user fills in the text boxes and clicks Send an e-mail is sent provided the e-mail addresses entered are correct. But, this e-mail has no extra features like support for HTML formats, RTF, attachments, e-mail priorities, etc. Once this story is implemented, the team will implement similar slices of each feature for Read Email, Create Appointment, View Calendar, Create Task, Edit Task, Create Contact, Edit Contact, etc in order to create a minimalist working model of the whole application.
![]() | ![]() |
The next slices of this particular feature would be to implement stories such as implementing Carbon Copy (CC) and taking e-mail addresses from your contact list. You can also see that the form has changed slightly - the Cancel button has been removed and the Send button has been moved to the top.
![]() | ![]() |
As we continue to iterate through this feature by adding story slices, the form takes additional shape, adding tool bars and tool bar items. At this point, the application may be finished enough to release to production and start earning revenue for the organization while we continue to add new features and use that revenue to help fund the remainder of the project.
![]() | ![]() |
A further release with more story slices implemented:
![]() | ![]() |
The final release:
![]() | ![]() |
Iterative development is an important tool in your agile toolbox to help your teams deliver early and adapt to change while keeping the projects end goals in mind. User story slicing is one of the important techniques you can use to help make this happen.
Want to receive future blog posts in your inbox? Enter your email address here.
Tuesday, March 10, 2015
Allowing the user to select Google Drive files from your application
If your application needs a way to let users easily choose a file from their Drive, this is for you.
Users can browse and select files from their Drive file list using the Google Picker API. The Google Picker API provides a user interface containing a list of all the users files in Google Drive.
Since the user interface is generated by the Picker API, there is very little effort in adding the Picker to an existing site. This article will show how to use the picker for your application, and discuss some of the configuration options.

First create a view on the data describing the type of Picker that we will be using. In this case, we’ll use google.picker.ViewId.DOCS. For more types of Picker, see the documentation.
var view = new google.picker.View(google.picker.ViewId.DOCS);
You can set the MIME types to filter the list of files. This allows you to specify your application’s specific file types to display to the user.
view.setMimeTypes("text/plain,text/html");
Use a PickerBuilder to set the required configuration parameters for your Picker.
var picker = new google.picker.PickerBuilder()
.enableFeature(google.picker.Feature.NAV_HIDDEN)
.setAppId("your app id")
.addView(view)
.setTitle("Select a Text File")
.setCallback(pickerCallback).build();
Once configured, the picker can be popped up to the user as often as you like, using
picker.setVisible(true)
When a user selects a file with the Picker, the callback set in setCallback is called with the data from the dialog. Pass this callback as the action to perform when a user selects a file in the Picker.
function pickerCallback(data) {
if (data.action == google.picker.Action.PICKED) {
var fileId = data.docs[0].id;
alert(The user selected: + fileId);
}
}
Check the data’s action, in this case google.picker.action.PICKED, and if it is appropriate, access the file ID as the the first element of the docs attribute.
Here are some additional tips on customizing your Picker.
- You can allow the user to select multiple files. There will be more than one element in the data’s docs array, each representing a selected file.
var picker = new google.picker.PickerBuilder()
.enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
- You can hide the navigation bar.
var picker = new google.picker.PickerBuilder()
.enableFeature(google.picker.Feature.NAV_HIDDEN)

For a complete example, including how to load the Picker library, please visit our the Drive SDK documentation. Also, see the Picker API documentation for more information.
![]() | Ali Afshar profile | twitter Ali is a Developer Programs engineer at Google, working on Google Docs and the Shopping APIs which help shopping-based applications upload and search shopping content. As an eternal open source advocate, he contributes to a number of open source applications, and is the author of the PIDA Python IDE. Once an intensive care physician, he has a special interest in all aspects of technology for healthcare. |
Monday, March 9, 2015
Monitor user logins storage consumption and apps usage with the Admin SDK
Security is a top priority for Google, just as it is for many of our Google Apps customers. As a domain administrator, a big part of keeping your users safe is knowing when and how they are using their accounts. Since we launched the Admin SDK Reports API in June, weve continued to add features to let you more easily visualize Google Apps usage and security in your domain. These new features include:
Security Reports
- Login audit—View all web browser based logins with IP information for all users in your domain. You can use this data to monitor all successful, failed, and suspicious logins in your domain.
- Authorized applications—View a list of third-party applications that users in your domain have shared data with. Gain visibility into how many users are accessing each application. Revoke access to specific apps using the security tab on Admin console.
Usage Reports
- Storage quota—View user-level quota usage. This is available both as total usage and split by Gmail, Drive and Google+ photos for every user in the domain. Monitor which users are nearing their quota limits and acquire more storage if necessary.
- Google+ usage—View 1-day, 7-day and 30-day active Google+ usage in your domain. See the number of Hangouts attended by users in your domain.
Refer to the Reports API documentation for more details on how to use the Reports API and to see what is possible with all of our entire Admin SDK.
![]() | Rishi Dhand profile Rishi Dhand is a Product Manager on the Google Apps for Business team. In addition to working on data migration features, he also works on the Google Apps administration platform with focus on building new security and admin reporting features. In his free time, he enjoys playing squash and badminton. |
Friday, February 13, 2015
C Program to print a triangle or square of s according to user choice
#include<iostream.h>
#include<conio.h>
void main()
{
clrscr();
int i,j,k,n,ch;
cout<<"What you want to Print
"<<"1.Triangle
"<<"2.Square
"<<"Enter your choice: ";
cin>>ch;
cout<<"
How much long....?(ex:8): ";
cin>>n;
switch(ch)
{
case 1:for(i=1;i<=n;++i)
{
for(j=n-1;j>=i;--j)
cout<<" ";
for(k=1;k<=(i*2-1);++k)
{
if(i==n)
cout<<"*";
else
{ if(k==1||k==(i*2-1))
cout<<"*";
else
cout<<" ";
}
}
cout<<"
";
}
break;
case 2: for(i=1;i<=n;++i)
{
for(j=1;j<=n;++j)
{
if(i==1||i==n)
cout<<"*";
else
{ if(j==1||j==n)
cout<<"*";
else
cout<<" ";
}
}
cout<<"
";
}
break;
}
getch();
}











