This is a really good paper, definitely worth a read. This is my favourite part of it:
"If we are going to solve the world’s most pressing problems, we must put the power of the Web to
work—its technologies, its business models, and
perhaps most importantly, its philosophies of openness, collective intelligence, and transparency. And
to do that, we must take the Web to another level.
We can’t afford incremental evolution anymore.
It’s time for the Web to engage the real world.
Web meets World—that’s Web Squared"
Monday, 20 December 2010
Friday, 3 December 2010
Amazon MP3
Last Thursday, Nina and I were looking for music for our Playing with Justice Concert. After determining the set list, we decided to purchase them from the Amazon MP3 website. This is by far the worst place I have ever purchased music.
Firstly, the download failed. Ok no big deal, that kind of stuff happens all the time. Was there an option to re-download though? No! After spending ages searching to re-find the download option, we had to contact the Amazon customer services, who then 'reactivated' the link. Tried a second time, download fails again, re-download link no longer available. Contacted them the third time, this time only 2 out of the 8 songs purchased downloaded and the link once again de-activated.
At this point, I decided to give up and download from iTunes. This is a major flaw in their system design as it does not count for download failure. There is no mechanism in place that allows you to track whether the download was successful or not (not even their player) and therefore ensuring the download link is not disabled.
This is such a waste of Oxfam money and I won't be using their store again. I'll stick to iTunes :)
Firstly, the download failed. Ok no big deal, that kind of stuff happens all the time. Was there an option to re-download though? No! After spending ages searching to re-find the download option, we had to contact the Amazon customer services, who then 'reactivated' the link. Tried a second time, download fails again, re-download link no longer available. Contacted them the third time, this time only 2 out of the 8 songs purchased downloaded and the link once again de-activated.
At this point, I decided to give up and download from iTunes. This is a major flaw in their system design as it does not count for download failure. There is no mechanism in place that allows you to track whether the download was successful or not (not even their player) and therefore ensuring the download link is not disabled.
This is such a waste of Oxfam money and I won't be using their store again. I'll stick to iTunes :)
Friday, 15 October 2010
Sunday, 3 October 2010
GWT Development Notes
General
The module XML file contains definition of the GWT module, the collection of resources that comprise a GWT application or a shared package. The default XML inherits the core GWT functionality required for every project. Optionally, you can specify other GWT modules to inherit from.
In the module XML file, you specify your application's entry point class. In order to compile, a GWT module must specify an entry point. If a GWT module has no entry point, then it can only be inherited by other modules. It is possible to include other modules that have entry points specified in their module XML files. If so, then your module would have multiple entry points. Each entry point is executed in sequence.
UI Components
Whenever possible, GWT defers to browsers' native user interface elements.
This means that GWT buttons render appropriately in different browsers and on different client operating systems. The benefit of using native browser controls is that they are fast, accessible, and most familiar to users. Also, they can be styled with CSS.
Root Panel:
A Root panel is the container for the dynamics elements of your application. It is at the top of any GWT user interface hierarchy. There are two ways you can use a Root panel, either to generate the entire body of the page or to generate specific elements embedded in the body. The Root panel works by wrapping an element in the HTML host page. By default (that is, if you don't add any placeholders in the host page) the Root panel wraps the body element. However, you can wrap any element if you name it and then, when you call the Root panel, pass the name as a parameter.
Debugging
One benefit of using GWT in your AJAX application development is that you can see the effects of your code changes as soon as you refresh the browser running development mode
http://code.google.com/webtoolkit/doc/1.6/tutorial/buildui.html (part 3)
The module XML file contains definition of the GWT module, the collection of resources that comprise a GWT application or a shared package. The default XML inherits the core GWT functionality required for every project. Optionally, you can specify other GWT modules to inherit from.
In the module XML file, you specify your application's entry point class. In order to compile, a GWT module must specify an entry point. If a GWT module has no entry point, then it can only be inherited by other modules. It is possible to include other modules that have entry points specified in their module XML files. If so, then your module would have multiple entry points. Each entry point is executed in sequence.
UI Components
Whenever possible, GWT defers to browsers' native user interface elements.
This means that GWT buttons render appropriately in different browsers and on different client operating systems. The benefit of using native browser controls is that they are fast, accessible, and most familiar to users. Also, they can be styled with CSS.
Root Panel:
A Root panel is the container for the dynamics elements of your application. It is at the top of any GWT user interface hierarchy. There are two ways you can use a Root panel, either to generate the entire body of the page or to generate specific elements embedded in the body. The Root panel works by wrapping an element in the HTML host page. By default (that is, if you don't add any placeholders in the host page) the Root panel wraps the body element. However, you can wrap any element if you name it and then, when you call the Root panel, pass the name as a parameter.
Debugging
One benefit of using GWT in your AJAX application development is that you can see the effects of your code changes as soon as you refresh the browser running development mode
http://code.google.com/webtoolkit/doc/1.6/tutorial/buildui.html (part 3)
Saturday, 21 August 2010
Natural Balance Foods Website
As I'm on a bit of a health food obsession at the moment, I went onto the Natural Balance Foods website and presented with the website I think overall it is pretty good. The background image doesn't interfere with the text or the information. The menus and options are clear and the user experience is generally good as you are able to find all the information you need:
I only have 2 qualms with the website. The first is that it takes forever to place the order, sending information back is such a slow process. The second is the inconsitency of the field layout for the start date and expiry date of the credit card details (as shown below):
This really threw me. Other than those 2 issues I quite like the web site :)
I only have 2 qualms with the website. The first is that it takes forever to place the order, sending information back is such a slow process. The second is the inconsitency of the field layout for the start date and expiry date of the credit card details (as shown below):
This really threw me. Other than those 2 issues I quite like the web site :)
MGMT Website
As fantastic as MGMT are as a band, and it's a pretty cool idea trying to engage their fans into designing their website. There are some really cool pictures and art work people have come up with, however this isn't very practical and from a usabilty perspective is very poor!
You visit the home page and are presented with the following page:
Although the image isn't too bad, it's still fairly noisy and makes text difficult to read, especially when you are looking at events (which has the same background) for concert dates. As this is the most important aspect of a band's site, the information should not be difficult to read.
You move away to the 'Music' part of the website, and boy is this an eye sore. You would probably get eye strain from trying to read what's on there and the whole fan art aspect of it means that the site is inconsistent.
If you then move on to the 'fan art' section you are presented with a gallery of art people have uploaded, by selecting you can change the backdrop....great....however there is no option (or easy way if there is an option) of turning off the fan art element of the site.
Yes it's a nice concept but it makes for a very poor user experience.
You visit the home page and are presented with the following page:
Although the image isn't too bad, it's still fairly noisy and makes text difficult to read, especially when you are looking at events (which has the same background) for concert dates. As this is the most important aspect of a band's site, the information should not be difficult to read.
You move away to the 'Music' part of the website, and boy is this an eye sore. You would probably get eye strain from trying to read what's on there and the whole fan art aspect of it means that the site is inconsistent.
If you then move on to the 'fan art' section you are presented with a gallery of art people have uploaded, by selecting you can change the backdrop....great....however there is no option (or easy way if there is an option) of turning off the fan art element of the site.
Yes it's a nice concept but it makes for a very poor user experience.
Saturday, 24 July 2010
Tab Bars and Pickers
(Pickerview) or just a picker are the controls with the dials that spin. Pickers are more complex than other iPhone controls.
Pickers can be configured to display one dial or many, by default pickers display text, but many can also be made to display images.
Date picker is the easiest type of picker to implement.
Picker has very few attributes that can be configured from within the interface builder. Date picker is the only one that can be grabbed from the interface builder.
A picker needs to be provided with both a picker delegate and a picker data source. The picker defers several jobs to its delegate. The most important of these is the task of determining what to actually draw for each of the rows in each of its components.
The picker asks the delegate for either a string or a view that will be drawn at a given spot or a given component. The picker gets its data from the delegate. In additon to the delegate, a data source is required. The data source tells the picker how many components it will be working with and how many rows make up each component.
Its very common for the data source and the delegate to be the same object and just as common for that object to be the view controller for the picker's endorsing view.
The data source isn't actually an object designed to hold data.
Root controller to manage swapping of applications other views. Tab bars use icons to represent each of the tabs. 24 x 24 pixel .png pics need to be added to the resources folder.
The root controller controls the very first view that the user will see when your program runs.
'Badge' in the 'Tab bar item' can be used to put a red icon onto a tab bar item, similar to red number placed on mail icon.
For tab bar controller first single click the first tab and use the atttributes inspector to specify nib name for that tab's associated view controller. Then open the identity inspector and change the underlying class of the view controller associated with the tab.
Click the tab again, instead of the view controller gave the tab bar item a title icon.
Root controller to manage the swapping of application's other views.
Tab bars use icons to represent each of the tabs. 24 x 24 pixel .png pics need to be added to the resources folder.
The root controller controls the very first view that the user will see when your program runs.
'Badge' in the 'Tab Bar Item' can be used to put a red icon onto a tab bar item, similar to red number placed on email icon.
For tab bar controller first single check the first tab and use the attributed inspector to specify a nib name for that tab's associated view controller. Then open the identity inspector and changed the underlying class of the view controller associated with the tab.
Click tab again, instead of the view controller gave the tab item a title and icon.
To implement the date picker a single outlet and a single action is required. The outlet will be used to grab the value from the date picker. The action will be triggered by a button and will throw up an alert to show the date value pulled from the picker.
Date picker is relatively easy, creating a picker that holds values requires NSArray, as pickers don't hold values themselves. Instead they call methods on their data source and delegates to get the data they need to display. The picker doesn't care where the underlying data is. It asks for the data when it needs it, and the data source and delegate work together to supply that data. As a result, the data could be coming from a static list, or could be loaded from a file or URL, or even made up or calculated on the fly.
controller.h class can act as both the data source and delegate for it's picker. Unlike a date picker, a regular picker cannot tell us what data it holds, because it doesn't maintain the data. It hands the job off to the data source and the delegate. Instead, we have to ask the picker which now is selected and grab the corresponding data from our pickerDataArray.
Using NSInteger as opposed to int or long means that the compiler automatically chooses whichever size is best for the platforms on which the code is being compiled. It will create a 32 bit processor and a longer 64 bit long when compiling for a 64 bit architecture.
Usually data will come from a property file in projects resources folder. Any line of code that begins with #pragma is technically a compiler directive.
For multi component pickers defining 2 constants will represent 2 components.
Components are assigned numbers, with the left most component being assigned zero and increasing by one each move to the right.
Pickers can be configured to display one dial or many, by default pickers display text, but many can also be made to display images.
Date picker is the easiest type of picker to implement.
Picker has very few attributes that can be configured from within the interface builder. Date picker is the only one that can be grabbed from the interface builder.
A picker needs to be provided with both a picker delegate and a picker data source. The picker defers several jobs to its delegate. The most important of these is the task of determining what to actually draw for each of the rows in each of its components.
The picker asks the delegate for either a string or a view that will be drawn at a given spot or a given component. The picker gets its data from the delegate. In additon to the delegate, a data source is required. The data source tells the picker how many components it will be working with and how many rows make up each component.
Its very common for the data source and the delegate to be the same object and just as common for that object to be the view controller for the picker's endorsing view.
The data source isn't actually an object designed to hold data.
Root controller to manage swapping of applications other views. Tab bars use icons to represent each of the tabs. 24 x 24 pixel .png pics need to be added to the resources folder.
The root controller controls the very first view that the user will see when your program runs.
'Badge' in the 'Tab bar item' can be used to put a red icon onto a tab bar item, similar to red number placed on mail icon.
For tab bar controller first single click the first tab and use the atttributes inspector to specify nib name for that tab's associated view controller. Then open the identity inspector and change the underlying class of the view controller associated with the tab.
Click the tab again, instead of the view controller gave the tab bar item a title icon.
Root controller to manage the swapping of application's other views.
Tab bars use icons to represent each of the tabs. 24 x 24 pixel .png pics need to be added to the resources folder.
The root controller controls the very first view that the user will see when your program runs.
'Badge' in the 'Tab Bar Item' can be used to put a red icon onto a tab bar item, similar to red number placed on email icon.
For tab bar controller first single check the first tab and use the attributed inspector to specify a nib name for that tab's associated view controller. Then open the identity inspector and changed the underlying class of the view controller associated with the tab.
Click tab again, instead of the view controller gave the tab item a title and icon.
To implement the date picker a single outlet and a single action is required. The outlet will be used to grab the value from the date picker. The action will be triggered by a button and will throw up an alert to show the date value pulled from the picker.
Date picker is relatively easy, creating a picker that holds values requires NSArray, as pickers don't hold values themselves. Instead they call methods on their data source and delegates to get the data they need to display. The picker doesn't care where the underlying data is. It asks for the data when it needs it, and the data source and delegate work together to supply that data. As a result, the data could be coming from a static list, or could be loaded from a file or URL, or even made up or calculated on the fly.
Using NSInteger as opposed to int or long means that the compiler automatically chooses whichever size is best for the platforms on which the code is being compiled. It will create a 32 bit processor and a longer 64 bit long when compiling for a 64 bit architecture.
Usually data will come from a property file in projects resources folder. Any line of code that begins with #pragma is technically a compiler directive.
For multi component pickers defining 2 constants will represent 2 components.
Components are assigned numbers, with the left most component being assigned zero and increasing by one each move to the right.
Labels:
cocoa,
Dave Mark,
iPhone development,
Jeff LaMarche,
notes
Subscribe to:
Posts (Atom)











