Tired of accessing Google Analytics via their web interface to obtain your web statistics? Great news Google has released a beta version API for accessing the analytics data. For the full documentation you can access the official google labs page.
As with most APIs google does place a quota on the calls you can make to the system so as to preserver integrity of their server. The quota is defined per web property (unique profile id)
- 10,000 requests per a 24 hour period
- 100 requests per every 10 second period
- Max entries of 10,000 entries per a feed request (the default returns 1000 and can be manipulated as needed)
Before diving right in I would suggest familiarizing yourself with the authentication procedure and the Feed Reference. After that you can utilize google’s Query Explorer to jump right in and see what information you can get back. If developing your own application, dashboard, or widget there are various libraries in different languages that have been written a compilation is listed at http://code.google.com/apis/analytics/docs/gdata/gdataLibraries.html.
Overview
An Issue Tracking System is a software application that allows for a group or individual to manage issues or tickets on a subject/project. In relation to software development an issue tracking system allows developers to outline releases for their project with associated tickets for bug fixes and new features. In addition it can be used by users to report bugs that they come across when using the software.
Trac
Trac is an open source Issue tracking System that I use for my own projects. The main features that Trac supports are:
- Tickets
Trac has a robust ticket system that allows you or users to create tickets for bugs and/or new features with attachments, priority level, component assignment and milestone assignment.
- Milestones
defining milestones enables you to roadmap out releases or enhancements to your project. For example you can define milestones for the next version of the project or for bug fixes to existing versions.
- Integrated Wiki
allows for users to easily and intuitively find information on your project and allows for you to keep all the information on your project in one source
- Subversion Interface
trac also has an integrated Subversion browser interface allowing users to view source code if desired
- Timeline
built in timeline allows users or developers to easily see progress and activity, which is a good indication of weather a project is still active.
- Reporting
robust ticket querying allows you to easily create status reports on a project
The main drawback to Trac is that it does not support multiple project and instead you need a separate instance for every project. This is more of a time sync then in anything else. Some individuals see this as a major drawback as they have “sub-projects” but I find this can easily be managed defining your components well within your tickets allowing you to easily track status of “sub-projects”.
Installation of Trac does take manual configuration and setup on your server. The guide for the latest version can be found at http://trac.edgewall.org/wiki/TracInstall. Also a good way to install Trac if you aren’t very tech savy is to do a google search of installing trac on …. where …. is your hosting company, if you are fortunate you may find that others have already done it and shared their scripts.
Conclusion
Although Trac is one of many Issue Tracking Softwares available ( comparison list ), it is one of the most professional and established open source ones available. Regardless if you are working on a project that is available to users you need some way to manage bugs, and feature requests. Utilizing an Issue tracking System can reduce time managing a project so you can spend your time developing.
Trac
Overview
Anti-Patterns are a pattern of behavior or design that proves to be counterproductive or inefficient to a project. Although Anti-Patterns exist for Software and Object-Oriented designs my favorites mostly apply to organizational and project management (personal and group behaviors). Some patterns are listed below, if these sound familiar to you and you happen to be a project manager or a team lead then you may want to do research into how to modify the group’s or your own behavior.
Analysis Paralysis
This anti-pattern is defined as spending too much time on the analysis and planning of a project that too little time is left to the actual development or completion of the project. Basically the project sits around with meetings and research going on but no work is being done on the actual project deliverable, until the implementation time period is shortened to the point the project is delayed or even canned.
Mushroom Management
This one I think explains itself in that the management keeps the team uninformed and fed lies (crap).
Death March
A project that everyone knows is going to be a disaster, which results in stress and pressure to work nights and weekends (or depending on the situation mandatory overtime). This can be caused by a multitude of factors some prominent ones are unrealistic time-lines, lack of necessary skills for the project, and poor management.
Scape Goat
Another one that probably needs no explanation but one I have often come across the brunt of. A scape goat is the individual that gets blamed for the failings of a project regardless of the factors that caused the project to fail. Ever been blamed for something when everyone knows their were a dozen other reasons that it went wrong? Congratulations!!, you were the goat BLEAT.
Wrap Up
There are dozens of other anti-patterns and hundred more unofficial ones, a quick way to find ones are to visit Wikipedia or the Anti Patterns Catalog. Some other ones i am fond of are Feature Creep ( I prefer CreepingFeaturitis ), Design By Committee, and Group Think.
Anti-Patterns
Overview
Design Patterns are a reusable solutions to a commonly seen software desgin problem. The key item to remember is that these patterns are more like templates and instructions and are not reusable code. Although helpful and can solve many problems they are not usefull in every case and can hinder you from finding the best solution if you get in the mentality of “what pattern should I use for x”. The better mentality is “does this functionality fit any patterns?”.
Decorator
The Decorator design pattern put simply is a way to add dynamic functionality to an object. This pattern is an alternative to sub-classing. The basic pattern is that instead of sub-classing a base object to modify its values you create a decorator object that wraps the object and performs any modifications to functions that need changing or calls the base object functions.
The easiest way to explain this pattern is with an example. And what could be better then ice-cream.
Example
Lets start with a base object of an ice cream. In this example we will be modifing one value cost.
class IceCream {
public IceCream() {}
public getCost(){
return 1.00;
}
}
Next we will define the various modifications we can make to the ice cream as Decorators, For example we could add Sprinkles, Hot Fudge, and Cherry Dip. The basics elements to the decorator is that it takes an object into its constructor that it “decorates” or modifies.
class Sprinkles {
private _baseObj;
public Sprinkles( baseObj ) {
this._baseObj = baseObj;
}
public function getCost() {
return this._baseObj.getCost() + .25;
}
}
class HotFudge{
private _baseObj;
public HotFudge( baseObj ) {
this._baseObj = baseObj;
}
public function getCost() {
return this._baseObj.getCost() + .50;
}
}
class CherryDip{
private _baseObj;
public CherryDip( baseObj ) {
this._baseObj = baseObj;
}
public function getCost() {
return this._baseObj.getCost() + .50;
}
}
You may have noticed that defining an interface that all decorators and base object implement is a great idea, but for the purpose of the demo we don’t need to. Now that the decorators are defined we can now modify or “decorate” our ice cream
var myIceCream = new HotFudge( new Sprinkle(new IceCream()) );
myIceCream.getCost();
The Cost of my icream will be 1.75 as seen this pattern is an excellent way to implement modifications to objects without creating distinct subclasses and allows the program to use whichever decorators it requires at run time by simply wrapping the base object. Further details as well as non pseudo code examples can be found at wikipedia
Decorator
Overview
When utilizing a spreadsheet you may find your self repeatedly entering the same set of information row after row. Drop Downs is an easy way to make sure you enter the exact values you want without introducing typos, or variations. This tutorial outlines methods for creating drop downs within Open Office Calc.
Method 1: A Static List
The first method to create a drop down is to define a Validator for a cell. What this will do is define what values are allowed in a cell. This cell can then be copied to other cells that should have the same value.
- Select a cell in the spreadsheet
- Select “Data” from the application menu
- Select “Validity” from the sub menu
- Select the “List” option from the Allow field of the Validity dialog box
- Enter your values in the Entries text box one value per line
- Click OK
Now if you select the cell you initily selected you will noticed an arrow to the right of it. Clicking on the arrow will give you a drop down to select from. If you want to restrict your input to strictly the values in your list you will have to add an alert to your validation.
- Select the cell that has validation
- Select “Data” from the application menu
- Select “Validity” from the sub menu
- Select “Error Alert” from the dialog menu tabs
- Check “Show error message when invalid values are entered
- Action input should be Stop
- Enter a Title for the error dialog
- Enter a Message for the error dialog
- Click “OK”
Now if you input a value into the cell that does not match a value in your list you will see a error dialogue with your title, and message. This method is a simple way to create drop downs from unchanging lists. However if you have a list that will change over time then I would suggest method2.
Method 2: A Dynamic list
If you find yourself using the same value across multiple sheets in a file and that you are adding new values as you continue to work then this method is for you. Method 2 is done by defining a name to a set of cells in your spreadsheet. So if you define a column as the set then as you add a new row then all drop downs that use that named set will be updated. Outlined below are the steps to defining the named set and creating the drop down.
- Create a list of values in a new sheet in one column 1 value per row
- Select the Column – (click on the letter above the column)
- Select “Insert” from the application menu
- Select “Names – define” from the sub menu
- Enter a name into the dialog box
- Click “Add”
- Close the Dialog box. You have successfully created a named set
- Select the cell you want to create a drop down in
- Select “Data” from the application menu
- Select “Validity” from the sub menu
- Select “Cell Range” from the Allow Input item in the dialog
- Enter the name from step 5 in the “Source” input
- Click “OK”
You will now find that the drop down is pulling values from your values you entered in your spreadsheet. Now if you add/edit/delete values in your list all drop downs that use that named set will be updated. Please note that if you modify a value in your named set then any drop down cells that have that value selected will not be updated you will have to update them manually.
Conclusion
Drop Downs are an excellent way to consistently enter information. If you find yourself working with financial data, maybe keeping track of your monthly finances then creating a drop down of your monthly bills can save you time and energy.