plonewars.com

August 11th, 2007

Martin Aspeli: RIP FOPP

It’s not often that I mourn the closure of a chain of shops, but the last decent chain of record stores in the UK just went the way of the dodo. http://fopp.co.uk carries this note:

It is with great regret that we announce the closure of Fopp.

Our store chain is profitable, well regarded and loved by our loyal customers and staff. However we have failed to gain the necessary support from major stakeholders, suppliers and their credit insurers to generate sufficient working capital to run our expanding business.

We would like to thank staff and customers for their support over the past 25 years.

Any outstanding website orders have now been cancelled and will not be fulfilled or charged.

Sob… The Fopp stores had a decent amount of CDs covering a variety of styles, wasn’t outrageously overpriced, had friendly and knowledgeable staff and sold good films, books and other media. I was never able to reist going into a branch when I passed by one, and normally left with five or six CDs. I hope someone comes in to fill the void, but given how many ridiculously over-sized, over-priced Virgin Megastores and HMVs that are popping up, I won’t get my hopes up.

:-(

Martin Aspeli: RIP FOPP

Originally from Planet Plone by optilude


from Yoda http://plonewars.com/2007/08/11/martin-aspeli-rip-fopp/







August 11th, 2007

COM.lounge TV: CLTV31: EuroPython 2007 – Marius Gedminas about gtimelog (Lightning Talk)

Marius Gedminas shows and explains his little tool for time tracking called “gtimelog”.

Alternative versions

Subscribe

You can always subscribe to this videos by subscribing via iTunes or using of the buttons in the sidebar

COM.lounge TV: CLTV31: EuroPython 2007 – Marius Gedminas about gtimelog (Lightning Talk)

Originally from Planet Plone by cs@comlounge.net (Christian Scholz)


from Yoda http://plonewars.com/2007/08/11/comlounge-tv-cltv31-europython-2007-marius-gedminas-about-gtimelog-lightning-talk/







August 11th, 2007

RIP FOPP

RIP FOPP August 11th, 2007 It’s not often that I mourn the closure of a chain of shops, … t get my hopes up. :-( Posted by optilude Filed in plone No Comments »

RIP FOPP

Originally from [Technorati] Tag results for plone


from Yoda http://plonewars.com/2007/08/11/rip-fopp/







August 11th, 2007

Baiyunshan Pharmaceutical and Baxter Finalize Joint Venture for Parenteral Nutrition Products …

Food and Nutrition Information CenterFood Stamp Nutrition Connection (FSNC). Resources for Nutrition educators. International Bibliographic Information on . Nutrition Information Center – a leader in food and human Nutrition information dissemination since 1971. Provides . Healthy Meals Resource System (HMRS). Assistance and materials for Child Nutrition professionals. WIC Works Resource . …

Baiyunshan Pharmaceutical and Baxter Finalize Joint Venture for Parenteral Nutrition Products …

Originally from Most recent posts on plone – Quality Blog Search – Strategicboard by Natural Health Nutrition Guide


from Yoda http://plonewars.com/2007/08/11/baiyunshan-pharmaceutical-and-baxter-finalize-joint-venture-for-parenteral-nutrition-products/







August 11th, 2007

The Plone Blog: New Salesforce PFG Adapter Release Up on the Plone Software Center

While creating a working demo for my post on Saving PloneFormGen Data Directly to Salesforce.com, I was reminded of and discovered several new irritating bugs present with the current field mapping user interface.

Jesse Snyder and I were able to pick of several of these during today’s … er, yesterdays … Open Source Friday session and package up a 1.0 alpha 2 release. Fixes include:

  • Due to some trailing and proceeding character stripping that happens within DataGridField’s FixedRow implementation, inadvertently named fields like “My Form Field with Trailing Spaces   ” (spaces intentional), could never be successfully mapped to a Salesforce.com SObject field. NB: We’re still using the Title of form fields as the “key” for our mapping, which has its limitations, but is easiest in this more proof of concept phase of work.
  • Because we’re eliminating a user’s ability to wipe away form fields by disabling DataGridField’s add/remove row features (this is by design, as a “read-only” paradigm is much clearer for users), re-titled and deleted fields were polluting our available form fields for mapping user interface. We’ve now got code that cleans up those form fields which are unmappable to Salesforce.com SObject fields anyway.
  • We’ve also got a nice little, fully passing suite of 25 tests, which is starting to get into the realm of respectable for our code base.

Up next is likely to be i18n work, improving usability around a chosen
SObject’s required fields, and enabling the mapping of PloneFormGen’s
DateTimeField to Salesforce.com’s Date/Time string format. 

Let us know if you come up with anything that’s not currently on our todo list. 

The Plone Blog: New Salesforce PFG Adapter Release Up on the Plone Software Center

Originally from Planet Plone by Andrew Burkhalter


from Yoda http://plonewars.com/2007/08/11/the-plone-blog-new-salesforce-pfg-adapter-release-up-on-the-plone-software-center/







August 11th, 2007

New Salesforce PFG Adapter Release Up on the Plone Software Center

While creating a working demo for my post on Saving PloneFormGen Data Directly to Salesforce.com, I was reminded of and discovered several new irritating bugs present with the current field mapping user interface.

Jesse Snyder and I were able to pick of several of these during today’s … er, yesterdays … Open Source Friday session and package up a 1.0 alpha 2 release. Fixes include:

  • Due to some trailing and proceeding character stripping that happens within DataGridField’s FixedRow implementation, inadvertently named fields like “My Form Field with Trailing Spaces   ” (spaces intentional), could never be successfully mapped to a Salesforce.com SObject field. NB: We’re still using the Title of form fields as the “key” for our mapping, which has its limitations, but is easiest in this more proof of concept phase of work.
  • Because we’re eliminating a user’s ability to wipe away form fields by disabling DataGridField’s add/remove row features (this is by design, as a “read-only” paradigm is much clearer for users), re-titled and deleted fields were polluting our available form fields for mapping user interface. We’ve now got code that cleans up those form fields which are unmappable to Salesforce.com SObject fields anyway.
  • We’ve also got a nice little, fully passing suite of 25 tests, which is starting to get into the realm of respectable for our code base.

Up next is likely to be i18n work, improving usability around a chosen
SObject’s required fields, and enabling the mapping of PloneFormGen’s
DateTimeField to Salesforce.com’s Date/Time string format. 

Let us know if you come up with anything that’s not currently on our todo list. 

New Salesforce PFG Adapter Release Up on the Plone Software Center

Originally from The Plone Blog by Andrew Burkhalter


from Yoda http://plonewars.com/2007/08/11/new-salesforce-pfg-adapter-release-up-on-the-plone-software-center/







August 11th, 2007

Chris McDonough: It Was Fun While It Lasted

Civil liberties in America

Chris McDonough: It Was Fun While It Lasted

Originally from Planet Plone by chrism


from Yoda http://plonewars.com/2007/08/11/chris-mcdonough-it-was-fun-while-it-lasted/







August 11th, 2007

Ian Bicking: Defaults & Inheritance

I thought I’d note a way I try to make classes reasonably customizable without creating lots of classes, but letting other people create classes if they want.

Here’s a common technique; I’m going to use a class from WSGIProxy as an example, because that’s where I was about to use this technique when I thought it might make an okay post.

In this example there’s a WSGI application that forwards requests to another HTTP server. There’s different ways to forward requests, depending on what kind of data you want to give the remote server about the original request. One example is Zope’s VirtualHostMonster, which takes requests like /VirtualHostBase/http/example.org:80/rootdir/VirtualHostBase/path — the idea is that the server can then realize that the original request was for http://example.org/path (and should ignore any Host headers), and that Zope is supposed to serve that from the internal path /rootdir/path.

There’s a problem with this particular pattern, because there’s no way to mount, say, /blog onto some Zope /sitename/blog-application path, because there’s no concept like in WSGI or CGI of SCRIPT_NAME — the base path of the request. It only handles the base host. So I didn’t just want to settle on that.

I’m kind of inclined to prefer headers, like X-Script-Name: /blog, X-Forwarded-Server: example.org, etc. But I want to support both forms.

The common way to do this is:

class WSGIProxyApp(object):
    def __init__(self, host): ...
    def __call__(self, environ, start_response):
        # actual application interface...
        # Constructs the base request:
        request = self.construct_request(environ)
        # Uses one of these conventions:
        self.update_headers(environ, request)
        ... do stuff with request ...
    def update_headers(self, orig_environ, request):
        raise NotImplementedError
class VirtualHostMonsterApp(WSGIProxyApp):
    def update_headers(self, orig_environ, request):
        request.environ['SCRIPT_NAME'] = (
            '/VirtualHostRoot/%(wsgi.scheme)s/%(HTTP_HOST)s/VirtualHostRoot/'
            % orig_environ)
class HeaderSetterApp(WSGIProxyApp):
    def update_headers(self, orig_environ, request):
        request.environ['HTTP_X_SCRIPT_NAME'] = orig_environ['SCRIPT_NAME']
        # and so on...

Then you use one of the subclasses depending on your needs. Personally I think this really sucks. For one thing, you may have to determine which class to use based on some configuration parameter, which can get awkward. And you might want to subclass the class to change the functionality some yourself, but you have to subclass both of them. There’s patterns to handle this, with policies and factories and other crap; but it’s not a hard problem, and those patterns are hard solutions to a problem that shouldn’t be hard.

Also, it’s harder to inform people about the options available to them, and somewhat harder to use these classes. So I tend to do something like:

class WSGIProxyApp(object):
    default_forwarding_style = 'headers'
    def __init__(self, host, forwarding_style=None):
        ...
        if forwarding_style is None:
            forwarding_style = self.default_forwarding_style
        self.forwarding_style = forwarding_style
    def __call__(self, environ, start_response):
        ...
        method = self.forwarding_style
        if isinstance(method, str):
            method = getattr(self, 'forward_'+self.forwarding_style)
        method(environ, request)
        ...
    def forward_headers(self, orig_environ, request): ...
    def forward_virtual_host_monster(self, orig_environ, request): ...

This way it’s just a simple parameter to change the style. You can pass in your own function, or use one of the named methods already available. The default_forwarding_style class variable lets you change the default in subclasses. If the default was in the function signature it would be much more awkard to change it, because you’d have to override the method and its signature with just that one change, then delegate back to the superclass method.

Ian Bicking: Defaults & Inheritance

Originally from Planet Plone by Ian Bicking


from Yoda http://plonewars.com/2007/08/11/ian-bicking-defaults-inheritance/







|