Tuesday, March 10, 2015

Agility on Waterfall projects

So you find yourself on a strict waterfall project, but you want to inject as many Agile practices as you can, where do you start? There are many agile practices that can be incorporated into your day-to-day activities. Here is a start:

1. Acceptance Tests. Regardless of your role, you can write acceptance tests to verify your understanding of the requirements and to reduce the waste that is UAT. Do this before you code.

2. Technical Excellence. TDD, SOLID Principles, etc can be used on waterfall projects even if you dont have official support to write your code that way. Depending on the development team make-up, you may have to find a way to refactor your tests when someone else changes your code, but since waterfall projects are sometimes silo-ed, this may not be an issue.

3. Customer Accessability. Find ways to get near your customers, analysts and testers to walk them through prototype screens, talk about the requirements, or discuss acceptance tests. Do this frequently (daily if possible).

4. Work to done. Make sure your code is shippable and passes all the tests you wrote, plus all the requirements. Be thorough.

5. Deliver Frequently. While you may not be able to put the code in production every 2 weeks, you can certainly put the code (prototypes, screen shots, diagrams, etc) in front of your customer frequently.

6. Be ready for change. Dont be upset when requirements change or new requirements are found. Make sure your code (and your mindset) is change tolerant. Youll still need to fill out the change request forms and follow the process, but at least your code will be ready for it.

7. Team of One. You may not be invited to help with the project estimate, plan the project, write status reports etc, but you can run your own tasks like an agile team. Create your own visual project management board, hold stand-ups and retrospectives with yourself, practice your planning poker skills by re-estimating all the tasks assigned to you, plan your iterations.

8. Suggests phases. If you can, suggest a phased approach to the project (rather than iterations). This may enable you to eliminate some of the waste and respond better to change.

In short, try to intregrate as many practices as possible, but dont necessarily ask permission to do so. Hopefully someone will notice and ask the important question: "Why are you doing that?"

Monday, March 9, 2015

Time to Wow the Judges The Google Apps Developer Challenge is Ready for Submissions!

Are you an expert in the Drive API or Google Apps APIs? Are you an expert in Google Apps Script? If you are, then you must have been busy coding away for the Google Apps Developer Challenge since its launch earlier last month.


Now it’s time to wow the judges, as the Google Apps Developer Challenge is now open for submissions! If you would like to submit your application, please submit on the website using one of the three following categories:

  • Enterprise / Small Business Solutions e.g., Accounting, Sales, Workflow, Collaboration
  • Social / Personal Productivity / Games / Fun
  • Education / Not for Profit / Water / Food & Hunger / Health

If you are not ready, don’t worry -- as you still have time. The submission deadline is 24 August 2012 at 23:59:59 PT. Remember to use the many resources available to you in order to get ready. Ask questions on the Google+ Office Hours and Google Developers Live. Read up on Apps Script and the Drive and Apps APIs on Google Developers. Review the latest updates since Google I/O as well as the pre-submission checklist. Post questions and comments using the hashtag #gappschallenge on Google+. Review, and most importantly, finalize your application!

Best of luck!




Chukwuemeka Afigbo profile | blog

Chukwuemeka is a Program Manager at Google with the Emerging Markets Outreach team where he works closely with developers, startups, businesses and IT professionals in the region to successfully grow their business around Google Developer Tools and APIs. His current mission is to drive developer internet content in Sub Saharan Africa.

Even more Image Metadata for the Google Drive SDK

Lots of photographers, both professionals and amateurs, have started using Google Drive to store their photos online. We recently launched new features such as a way to quickly preview files and today I wanted to share more details about the image media metadata capabilities of the Drive SDK.

All digital cameras add some Exif information to the photos they take, and we exposed an initial set of Exif fields via the Google Drive API at the end of 2012. That set of metadata has now been expanded to include 9 new fields, such as the sensor type or the metering mode.

For instance, take a look at this recently taken photo:

Photo credit: Claudio Cherubino

What follows is the image media metadata as returned by the Drive API (in bold the new fields):


"imageMediaMetadata": {
"width": 2048,
"height": 1536,
"rotation": 0,
"date": "2013:02:18 12:51:51",
"cameraMake": "Panasonic",
"cameraModel": "DMC-GF2",
"exposureTime": 0.0025,
"aperture": 7.1,
"flashUsed": false,
"focalLength": 14.0,
"isoSpeed": 100,
"meteringMode": "Pattern",
"sensor": "One-chip color area",
"exposureMode": "Auto",
"colorSpace": "sRGB",
"whiteBalance": "Auto",
"exposureBias": 0.0,
"maxApertureValue": 3.6289062

}

You might have noticed that a number of fields have been added to the response while others (“subjectDistance” and “lens”) were not returned. This is expected as the camera doesn’t have to populate all Exif fields and in that case the corresponding properties will simply not be included in the API response.

For more information and to check the description of all metadata fields returned by the API, check the Files resource Reference Guide. If you have technical questions, please post them on Stack Overflow, my team monitors the google-drive-sdk tag and is happy to help.

Claudio Cherubino   profile | twitter | blog

Claudio is an engineer in the Google Drive Developer Relations team. Prior to Google, he worked as software developer, technology evangelist, community manager, consultant, technical translator and has contributed to many open-source projects. His current interests include Google APIs, new technologies and coffee.

Sunday, March 8, 2015

Doodles for your Google Apps domain

Since 1998, when the first doodle was released, they have been one of the most loved features of the Google home page. There have been doodles to celebrate all kinds of events, including national holidays, birthdays of artists and scientists, sports competitions, scientific discoveries and even video games! Also, doodles have evolved from simple static images to complex applications, such as the interactive electric guitar used to celebrate the birthday of Les Paul.

Want your company logo to change for selected events or holidays, just like doodles? The Admin Settings API allows domain administrators to write scripts to programmatically change the logo of their Google Apps domain, and Google App Engine offers the ability to configure regularly scheduled tasks, so that those scripts can run automatically every day.

With these two pieces combined, it is pretty easy to implement a complete solution to change the domain logo on a daily basis (assuming the graphic designers have prepared a doodle for each day), as in the following screenshot:

Let’s start with a Python App Engine script called doodleapps.py:

import gdata.apps.adminsettings.service
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from datetime import date

class DoodleHandler(webapp.RequestHandler):
# list of available doodles
DOODLES = {
1-1: images/newyearsday.jpg,
2-14: images/valentinesday.jpg,
10-31: images/halloween.jpg,
12-25: images/christmas.jpg
}

# returns the path to the doodle corresponding to the date
# or None if no doodle is available
def getHolidayDoodle(self, date):
key = %s-%s % (date.month, date.day)
if key not in self.DOODLES:
return None

return self.DOODLES[key]

# handles HTTP requests by setting today’s doodle
def get(self):
doodle = self.getHolidayDoodle(date.today())
self.response.out.write(doodle)

if doodle:
service = gdata.apps.adminsettings.service.AdminSettingsService()
// replace domain, email and password with your credentials
// or change the authorization mechanism to use OAuth
service.domain = MYDOMAIN.COM
service.email = ADMIN@MYDOMAIN.COM
service.password = MYPASSWORD
service.source = DoodleApps
service.ProgrammaticLogin()

# reads the doodle image and update the domain logo
doodle_bytes = open(doodle, "rb").read()
service.UpdateDomainLogo(doodle_bytes)

# webapp initialization
def main():
application = webapp.WSGIApplication([(/, DoodleHandler)],
debug=True)
util.run_wsgi_app(application)


if __name__ == __main__:
main()

The script uses a set of predefined doodles which can be edited to match your list of images or replaced with more sophisticated logic, such as using the Google Calendar API to get the list of holidays in your country.

Every time the script is triggered by an incoming HTTP request, it will check whether a doodle for the date is available and, if there is one, update the domain logo using the Admin Settings API.

In order for this script to be deployed on App Engine, you need to to configure the application by defining a app.yaml file with the following content:

application: doodleapps
version: 1
runtime: python
api_version: 1

handlers:
- url: .*
script: doodleapps.py

We want the script to run automatically every 24 hours, without the need for the administrator to send a request, so we also have to define another configuration file called cron.yaml:

cron:
- description: daily doodle update
url: /
schedule: every 24 hours

Once the application is deployed on App Engine, it will run the script on a daily basis and update the logo.

The holiday season is upon us. Could there be a better time for your company to start using doodles?

Happy Holidays!

Claudio Cherubino   profile | twitter | blog

Claudio is a Developer Programs Engineer working on Google Apps APIs and the Google Apps Marketplace. Prior to Google, he worked as software developer, technology evangelist, community manager, consultant, technical translator and has contributed to many open-source projects, including MySQL, PHP, Wordpress, Songbird and Project Voldemort.

Wednesday, March 4, 2015

LN 04 Use Padlet to Break the Ice Brainstorm Share ideas and Have Fun!


"Awesomely Simple and Powerful!"
- Zaid Ali Alsagoff

(What are you waiting for?)


PADLET?
Padlet (early known as Wallwisher) gives you a blank wall, and you can basically put anything you want on it, anywhere. Simple, yet powerful.

It basically empowers people to express their thoughts on a common topic easily. It works like an online sheet of paper where people can put any content (e.g. images, videos, documents, text) anywhere on the page, together with anyone, from any device.

Here is a video tutorial to get you started:



YouTube version:



Yes, you can even use it to present (or curate) learning content. I am not kidding:


Created with Padlet

POWERFUL?

This is why Padlet is simple, yet powerful:

  • Easy-to-Use
     Simple interface, double click to add posts (or double tap for touch screens), drag and drop, auto save, etc.  WOW!  
  • Instant Collaboration
    Everyones activity can be seen on the wall instantly. Page reloads is history.
  • Multimedia
    You can add any kind of file/links - videos, images, documents. You can paste links (URLs) to (YouTube) videos (view-able from the wall). Can drag a document from your computer. Can take pictures with your computer devices.  
  • Embeddable
    You can embed a wall in blogs and other websites (How?).
  • Privacy 
    You are empowered to keep the wall(s) private by adding password lock or specific email addresses. You can also moderate posts, by requiring approval by one of the moderators before they show up on the wall for the other readers.
  • Exporting
    You can export your Walls to PDF, Excel, and CSV formats with a single click.
  • Customized URL
    Every wall has an unique URL that you can give out. You can now also customize the ending of your URL to your Wall (E.g. http://padlet.com/wall/myawesomewall) or your Domain URL (E.g. http://myawesomewall.com ).
  • Notifications
    You can get e-mail notifications on updates to your wall, or subscribe to them via RSS.
  • Design & Layouts
    You can easily spice up the backgrounds with all sorts of cool designs and images. You can change your layout to Stream to view group discussions more structured (linear chat like format, with time-stamps of when someone commented).

Check out Padlets user guide (Knowledge Base) to discover more.


FOR LEARNING?

What about Padlet for learning and teaching?

While you dont need brains to use Padlet, you might need to stretch your imagination to realize how easy and powerful this tool could be to empower and energize collaborative learning experiences. Here are some examples on how Padlet can be used for:
  • Ice breaker to get to know one another (Participants/Students upload photos of themselves and then write one or two sentences for others to get to know them better).  
  • Brainstorming ideas, problem-solving, decision-making, or solutions.
  • Q&A sessions before/during/after a lecture or class.
  • Open-ended (formative) question or reflection sessions, where students all share their answers on the Padlet wall;
  • Noticeboards or making course announcements.
  • Bookmarking and curating resources or video playlists. 
  • Group/Class/Community Discussions.
  • Adventure and travel maps (field trips). 
  • Developing a website. 
  • Etc.
Lets not stop there, why not explore Padlet as a potential tool for organizing a students e-portfolio.

Actually, if we stretch our imagination even further, we could perhaps use Padlet even for an entire class (or even course) from the lecture (or lesson) to the assignment (Full Article):
  1. Lesson/Lecture/Tutorial
    Researching, collecting and curating content for your lesson does not have to be a tiresome task across folders, sites, emails and links.
  2. Group Discussion
    Use Padlet for a group discussion before/during/after a lecture (or class).
  3. Feedback
    Your lecture is coming to an end and you want to take check the students’ understanding of the subject or topic.
  4. Assignments/Projects
    Students can work individually or as groups using Padlet. For example, each group sets up a wall that discusses or visualizes their project, which can later be made available to the other students when completed. You can even make it a competition!
Whether you want to use Padlet for everything in online learning is probably a bit extreme, but no doubt this tool can be used in many creative ways to engage learners and have some fun while learning takes place.


ALTERNATIVE TOOLS?

If you want an alternative tool to teach a class or share digital content with activities, I would probably recommend Edcanvas (for now), which provides more structure, control, features and even provides a quiz engine with reporting.

If you want a dedicated tool for collaborative bookmarking or social curation of online resources, I  would recommend Pinterest or Scoop.it instead. 

Though, if you want a simple and powerful tool to easily break the ice (of new group), brainstorm, share ideas and have some quick fun...Padlet is my tool to the rescue :)