TAUTOLOGY WIN
Bryn
Live Projects
Drupal 6 module that segregates content and various settings based on domain, subdomain, or other path parameter
bookmarked
RT @eethann: Why online organizers should care about geeky trends like RESTful Web Apps & JavaScript frameworks, pt2: http://t.co/uqAyHbt5
About 
EchoDitto empowers leading organizations to have a greater impact through the creative use of new technologies.
Learn more at echoditto.com >
One of the compelling reasons to developing web-based or hybrid mobile applications is being able to use the tried and true HTML/CSS/JS stack, which allows your app to be used (with some minor restrictions) directly as a mobile website or to be compiled and distributed as a native application using a tool such as PhoneGap.
The Butterfly Effect is a term from chaos theory that is designed to illustrate how one tiny change can have enormous consequences to the overall system down the line.
If we abstract butterfly to bug, it actually fits quite nicely within the realm of software development.
jQuery is the bread and butter of rapidly developing a highly-interactive websites, and Drupal has long made use of it, and indeed includes it as part of its core install.
Open Atrium (http://www.openatrium.com) is best described as an "Intranet in a box" that sits atop Drupal 6. With the release of Open Atrium 1.0-beta4, Development Seed made a few crucial changes to the way OA is configured and structured. Now at beta7, there are still some older OA sites out there that are still running versions prior to beta4. Those sites require a little extra work to upgrade since they need to be upgraded to beta4 first, and then can be upgraded to beta7 and beyond.
It's the little things that make a good site into a great site. I'm sure that the iPhone's ability to add bookmarks to your home screen is one of its most underused features, but with advances in HTML5 and Mobile WebKit, it is becoming a more useful tool.
Since 1.1.3, iOS has supported custom bookmark icons. The icons are square PNG files (iOS uses 57x57 pixels for its native apps, but I've heard of other sizes, such as 45x45 working as well). You can either name the file apple-touch-icon.png and add it to the root folder of your site, or use the following link tag to point to a custom path:
<link rel="apple-touch-icon" href="/Graphics/iphone-icon.png" />
Mobile site libraries, such as jQTouch, include settings to automatically insert the above code.
Negative indent. Hackish solution, but it gets the job done... most of the time. It fails spectacularly in IE7, however.
If you're ever looking to hide that special text from your evil seventh aunty thrice-removed (i.e. ie) try this handy trick
#selector {
color: transparent;
text-transform: capitalize;
}
Interesting tidbit. IE will ignore the transparent color UNLESS you apply a text-transform to it as well. That seems to be the cue that IE waits for before doing anything TOO crazy.
The context module is great, but it's lacking one distinct feature: weighting. There's no way to explicitly determine which order the contexts are evaluated in.
This leaves us to rely on a little known, implicit ordering system: alphabetical by context name.
As of version 6.x-3.0-beta5, the context module evaluates contexts in the order they appear on the admin panel. Using ordering prefixes can help to control the order. For example, if we have three contexts that apply to a particular path:
they would show up on the admin list as
and be evaluated in that order. In order to control the order, one solution might be to do:
Making use of this "feature" is obnoxious at best, obfuscative at worst, but it's what we have out of the box.
We've all been there. A client wants the nodes of one content type to be filtered and displayed on six different pages based on the content of one of the fields. No problem! Views was MADE for a task like this!
Oh yeah, I forgot, there's this twist. The client wants to be able to control the order that the nodes appear in. Again, no problem! We have Nodequeue!
When you create a nodequeue, it automatically generates a corresponding view that's pre-configured to receive the nodes in the queue, in the prescribed order. Excellent. Let's just whip up a node queue for each page that the customer wants. STOP RIGHT THERE!
This seems like the most straight-forward solution, but there are hidden problems. If we create one nodequeue per page, then we have to maintain each view independently. Need to suddenly add a field to the view? Need to do custom templates? Maintaining six identical nodequeues becomes a black hole of time.
Enter the Smartqueue
Nodequeue ships with the Smartqueue API and includes one for taxonomies right out of the box. A Taxonomy Smartqueue allows you to create a single nodequeue, associate it with content types and vocabularies. When you add a node to the queue, it is automatically placed in one or more subqueues based on its terms. The user can then re-order the nodes within each individual subqueue to the order they would like them displayed.
Our six-page, six-nodequeue, six-view solution can now be reduced to a six-page, one-nodequeue, one-view solution. By utilizing the Nodequeue: Subqueue arguments, you can easily select which subqueue to display in the view, and by adding additional displays, you can easily customize your views to accommodate any minor differences between the different subqueues.
Drupal is an extremely powerful and flexible content management system, and is a very strong foundation for a data-driven website. However, there are times when a solitary website just isn't enough -- for example you may want to have one main site and a number of affiliated sites, you may want to write a stand-alone application that can interact with your Drupal site, or you may want to share data between a Drupal site and a non-Drupal site. Situations like this call for a web service!
A web service is typically an API (application programming interface) that is hosted on a web server and exposed to the internet. One shining example of web services in our daily lives occurs every time you click the Submit button in an online shopping cart. A web service is responsible for telling the vendor that your credit card is valid and has enough room for you to make your purchase. Web services are also used to get your shipping quotes and reserve your tracking number.
The long and the short of it is that web services let websites talk to websites, websites talk with applications, and applications talk to applications.
Now, there are a number of different web service protocols (RPC, SOAP, AMF, REST, etc.). One of the drawbacks to web services is that they tend to be tied to a specific protocol, which means that you have to package up whatever data you wish to send to a web service in the protocol expected by the web service. If you are consuming multiple web services, it's quite possible that you'd have to package your data several different ways. To use the ecommerce example from above, you may have to package your order information (number of packages, each package's weight, source and destination addresses, etc.) for a SOAP-based shipping quote web service, and the customer's payment information for a REST-based credit card authorization service. This creates a lot of unnecessary complication in the world of web service consumption.
With all this in mind, when you sit down to write your own web service, where do you begin? What protocol should you use? How are you going to make the great behemoth of possibility that is Drupal available as a web service without sacrificing all that great power and flexibility by hard-coding your service to serve up only certain types of nodes and fields?
The beautiful answer is you don't have to think about any of that.
Enter the Services module. (http://drupal.org/project/services)
As an iPhone developer, I've had my hands on the iOS 4.0 Gold Master for about two weeks on my 3GS. As it becomes publicly available, I'd like to share my subjective impressions of it.
Being able to browse subversion repositories over the web is extremely handy if you want to take a peek at a file or two without checking out the entire repository. On the surface, though, this feature ignores one of the most important features of subversion, which is the ability to go back in time to work with previous revisions.
This handy little snippet, however, lets you browse any revision over the web. Simply insert “!svn/bc/<rev>/” after your repository root and before the file path.
For example, if the path to the current revision of your repository's trunk is:
http: //localhost/path/to/repo/ProjectX/trunk
You would use the following to browse the trunk of revision 1321:
http: //localhost/path/to/repo/ProjectX/!svn/bc/1321/trunk

