Friday, November 14, 2008
Sunday, October 19, 2008
"Menu du Jour" for 6th Plone Tune-Up - Oct. 24, 2008
6TH PLONE TUNE-UP
Friday, Oct. 24th, 2008
7am-6pm (US ET)/ 13h-Midnight (GMT +1)
At #plone-tuneup on irc.freenode.net
This week, the Plone Tune-Up Team is pleased to announce an appetizing list of tickets that comes with a good amount of "newbie" and "greenbelt" issues. One "blackbelt" ticket has also been included for those who like it hot.
Here's the menu for this coming Friday, Oct. 24th:
#6960 Collection criteria XMLHttpRequest calls are broken
#6991 Full review list | Select: All | selection is improper...
#7248 auth_cookie_length doesn't take affect in Plone 3.0
#7559 Cannot add form validators because of button name
#7580 validators don't work on reference fields
#7581 FileField.getIndexable() returns 'None' if empty
#7707 Specific permissions created for iterate not being implemented...
#7949 Headings containing '@' display as URL in table of contents (ie7)
#8228 ATReferenceBrowserWidget batch may not work with IE6 and IE7
#8371 Search on @@sharing caused UnicodeDecodeError when full name...
#8417 My Folder link missing from personal toolbar (workaround included)
#8425 Error when must_change_password set to true
#8435 nuplone.css: "ul.portletNavigationTree" should be "dl.portletNavi...
#8438 member.css: syntax error
#8614 event_view.pt: Category name containing an ampersand not found...
You can get the full list of ingredients at: http://tinyurl.com/6g77wh
If you have any question, please feel free to contact gabrielle@sixfeetup.com.
ABOUT PLONE TUNE-UPS:
Plone Tune-Ups are regular online events that aim at addressing tickets in the Plone issue tracker and advancing Plone in general. It is a great opportunity for all to work together and discuss development tricks with influential Plonistas.
We look forward to seeing you all on irc this coming Friday!
Wednesday, October 15, 2008
Coming to terms with the 1000 horsepower Plone CMS
The typical LAMP developer has few moving parts, but just to get started with Plone there is a huge stack to wade through. Once you get past just the software stack alone, you still have the application server, potentially a cluster, load balancers, reverse HTTP accelerators, SSIs and rewrite rules to wade through if you are going to do the deployment on a large scale. Luckily there are some new tools out there to help simplify that like buildout and setuptools. Unfortunately there isn't enough good documentation about all the options available.
So what on the outset may look like a kludgy way to set things up, really is an enterprise solution which has nearly endless complexity. How do we bring new developers into the fold when getting started requires you to learn ZPT, DTML, ZCML, Python, Archetypes, Zope's Component Architecture and then all the technologies to deploy it. The upside is that you have the equivalent of that 1000 horsepower available to you for managing content and delivering it on a large scale. Once you get to that scale, Plone is very comfortable solving problems, then the LAMP stack probably starts to look very daunting as well. We just start addressing these issues earlier in the process. Luckily you don't need to pay the Veyron price tag to do it.
In an effort to help with the mystical deployment art of a Plone server, Six Feet Up is presenting the Plone Deployment Workshop. We will be tackling many of these tough questions during the two days of the workshop on November 20th and 21st here in Indianapolis. We are keeping it inexpensive so we can help reach more folks and the early bird is ending this week so get out there and sign up!
More information about the conference along with the full schedule of presentations, speakers bios, and social events is available online at: http://www.sixfeetup.com/dw08
Thursday, July 31, 2008
XULRunner --install-app command line options
Here is the help that comes with the XULRunner:
chimera-lite% /Library/Frameworks/XUL.framework/xulrunner-bin
Mozilla XULRunner 1.9
Usage: xulrunner [OPTIONS]
xulrunner APP-FILE [APP-OPTIONS...]
OPTIONS
--app specify APP-FILE (optional)
-h, --help show this message
-v, --version show version
--gre-version print the GRE version string on stdout
--register-global register this GRE in the machine registry
--register-user register this GRE in the user registry
--unregister-global unregister this GRE formerly registered with
--register-global
--unregister-user unregister this GRE formely registered with
--register-user
--find-gre
the path on stdout
--install-app
Install a XUL application.
If you just run it like this:
/Library/Frameworks/XUL.framework/xulrunner-bin --install-app .
It is going to drop your app in a folder in /Applications with an id of "Vendor" as specified in your application.ini. What do you do if you want it to create your app in another place or even create the installed app with a difference name other than the "Name" configured in application.ini.
Here is an example:
chimera-lite% /Library/Frameworks/XUL.framework/xulrunner-bin --install-app . ../../xul foo.app
This will create the program as foo.app in a folder 2 levels up called xul. There you have it, it is as easy as that.
Friday, March 07, 2008
How to locally change a remote RDF datasource loaded from a HTTP URL
RDF/XML datasources may be loaded from any type of URL. Currently, only those loaded from file URLs (URLs that begin with 'file:') may be modified with the RDF modification APIs. One possible workaround for modifying remote RDF sources is to load the RDF and then add the data into a separate in-memory-datasource.But of course it doesn't give an example of doing this workaround.
Here is what I came up with based on some snippets I found on the web and put them together to basically take the data source and serialize it to a string and the parse it into an in-memory-datasource.
This will take in the URL you wanted to load and give you back a nsIRDFDataSource that you can now manipulate. If it is attached to a XUL template it will now update the template as it notices changes in the datasource like it should.
function getInMemoryDataSource(url) {
var outputStream = {
data: "",
close : function(){},
flush : function(){},
write : function (buffer,count){
this.data += buffer;
return count;
},
writeFrom : function (stream,count){},
isNonBlocking: false
};
var mem = '@mozilla.org/rdf/datasource;1?name=in-memory-datasource';
var datasource = Components.classes[mem].createInstance(Components.interfaces.nsIRDFDataSource);
var ds = LOCAL_RDF.GetDataSourceBlocking(url);
ds.QueryInterface(Components.interfaces.nsIRDFXMLSource);
ds.Serialize(outputStream);
// Used to create a URI below
var ios = Components.classes["@mozilla.org/network/io-service;1"].
getService(Components.interfaces.nsIIOService);
var xmlParser = '@mozilla.org/rdf/xml-parser;1';
var parser = Components.classes[xmlParser].
createInstance(Components.interfaces.nsIRDFXMLParser);
var uri = ios.newURI(url, null, null);
// Entire RDF File stored in a string
parser.parseString(datasource,uri,outputStream.data);
return datasource;
}
It really shouldn't be this hard, but when it works it is nice.
Friday, February 15, 2008
Using HTML CSS Selectors in XUL
Wednesday, February 13, 2008
Plone Planning Summit 2008 Wrapup
Almost by design, the room we were holding the summit in had no tables, no chairs and almost no outlets. This meant we were able to very effectively disconnect from our laptops for 3 full days of putting it all out on this thing people call "paper". Then in the evenings we would gather in various establishments, hotel rooms or by the pool and get down to enjoying just being present with the rest of the participants.
Jon Stahl did an amazing job of keeping us 100% engaged for nearly 12 hours the first day, 8 hours the second and for a good 6 hours on the last day. I can't image that is an easy job to do and required a tremendous amount of planning. This has been huge. We were able to harness the thoughts and insight of each person who was there. Due to the amount of discussion leading up to the event, even the people not present were represented through their blog postings, email posts or lists sent with the attendees. There wasn't much left out in my opinion.
The first two days were spent completely framing the state of things and what people thought about moving forward. We carefully made no "decisions" during these days or spoke of any implementation details. That really helped keeping the group from bogging down on the small stuff. Instead, the ideas were flowing easily between the participants and made their way effortlessly to the hundreds of flip chart pages that were stuck to the wall over the course of the weekend.
The last day was about actually doing something. Through the process of extracting and distilling down the massive scrawling on the wall, we turned these ideas into concrete tasks that we can put a single person in charge of. Then, we did just that. Each task got a champion and off we went to get things done.
The old adage is true with this group. When we work, we work hard, but when we play, we play hard too. For all of the intense work we put in, we also had a great time playing together until 3:00 AM most evenings. I look forward to the next gathering, so the rest of you had better get in training so you can keep up!
