Recent blog entries for zanee

Haven't posted in a little while because i've been busy being a father, husband, contracts and other things. Recently i've been doing work with AWS and working at a company not directly free-software related however recently i've been working on an automated image build pipeline, where you can also kick off and manage images in a consistent way. As well as exposing an endpoint that can then be used with other internal applications. Pretty straight-forward non exciting stuff.

Today I came across this tech paper over at Google on automated image building with jenkins and kubernetes. This process is just overly convoluted and need not be for creating an automated image pipeline.

I'll provide a short synopsis of a better way to approach this problem and hopefully follow up with something a little bit more concrete when I get the chance to get my blog back up:

Realistically the problem with images at the end of the day is three-fold. One, it takes a very long time to provision a standard image, so you're dealing with time. Two, the image that has been provisioned eventually becomes stale meaning that the software associated with it needs security patches, bugfixes etc. Three, once you have more than 2 or 3 images, you need a lifecycle for managing the retiring, promoting, validating, testing and etc of images.

So your build process has to revolve around the lifecycle of whatever you need an image for. The best way to achieve this is to completely decouple the build process by itself and the best way to do that is to use a message broker. So you have a message broker, and in front of that you build a web client that is primarily used for publishing of what you'd like for your image and finally have the consumer processes sitting in the background getting ready to chew on the workflow of building an image.

There is obviously a lot more to it than this (what's in an image?, how do we manage these images? retire them? archive them? etc) and I'll hopefully get some time to expound on all of this as was done above. However the most anyone should have to care about are the steps involved in provisioning. Meaning "this is what I want installed on my image" or "this is what I want my image to look like". So in the above example it would be whatever the chef-solo steps involve. In my specific case i'm using ansible (because it's better than chef; yeahhhhh wanna fight?!). Then you don't want to poll github because, well.. why? Even if you wanted an image whenever there was a change in your repo it would be an inefficient way to handle building in a pipeline. What happens if you publish a very trivial change, do you do a full rebuild just because of it? No, you don't want to do that, so just use git webhooks. I'm not sure but it looks like Hashicorp's Atlas has a similar approach. Anyway, this with publishing a simple message to a broker and letting a consumer process do the work is a better approach. Especially because things will definitely fail in an image building pipeline, often enough that you simply need a way to handle this gracefully. All this combined with the fact that no one wants to sit around looking at build output of software installing makes for not a fun time.

So yeah, let me get my shit together and post a more simple approach you can do this with packer, rabbitmq, some python pub/consumer code, ansible and github webhooks (if you're using github). I'll do it with AWS and GCE.. I can't link to a repo because it's private unfortunately BUT the method itself can be disclosed.

Management Culture

Over the course of some odd years now, and in my own dealings I never really understood management. I mean, you always have a boss. Whether it be the board of trustees, share holders, your lawyer, the IRS, your husband/wife, Mom, squad leader, customers or some such. Inevitably you're always answering to someone for the decisions that you make on a daily basis and in that way I've always understood it. However to the extent that one has a boss that tells them to do xyz I never understood until now. It just simply never made sense to me.

I was always under the guise that one applied for a job and with that job came duties. So long as those duties were done, one was free to go about their business in whatever manner they felt necessary. This is how I've always operated, in almost all regard, feel free to ask any of my umpteen bosses. There may come a time where things change and so does the job and/or one moves to fit their needs of career growth or whatever one needs at the time. This always made perfect sense to me and in practice, this works. Trust me, I have learned, it simply works well when you hire the right people for the job. Unfortunately, I have seen many a person as of late take the context of management and put such a nasty and unhealthy spin on it that it's as if I am almost watching some episode of reality tv.  Expecting someone to pop-out at the end and say, "GOT YA!"

On recollection of my peers, friends, colleagues and how they used to ramble on about how horrible their job was I simply could not believe it. This has nothing to do with politics, passive aggressiveness, water cooler talk, all of that even in my own situations it was never really that bad. In the most sincerest form I always thought there were bits of embellishment in order to paint an entertaining picture. Now, that I'm in a different position and have almost a complete 360-degree view of the situation I can say there is a definite tone-deafness i've noticed through-out my career. Sadly this odd behavior is within my own ranks and sans any response from legal by the end of this I feel the need to speak on it, obviously no particulars.

I'm not sure what MBA's are learning in school right now, as I don't have an MBA myself and don't actually have any need for one, don't plan on getting one and think it's a worthless degree. Before the hate, please, I have several MBA degree family members. However, when it comes to managing people, persons who are hired to do a job there is an art that I feel has been lost. Part of this is just common courtesy. The whole, treat people as you'd like to be treated bit and the other part of this at its most basic form happens to be manners. An employee of a company needs to feel empowered to do their job in a way that is conducive to the overall productivity of the company which is respectful towards not just the job, but the company as a whole. This is called, good business. It promotes a positive energy and allows open door policies to work, it also quells incessant water cooler talk and allows for honest and open fighting about work. A good fight over work promotes ideas and healthy competition it also helps to cycle out poison. I particularly love a good heated argument every now and then over a problem, it shows passion and without passion, you have nothing. Probably get into some sort of heated discussion at least once a week, good for the blood pressure.

Anything opposite of this and that is called, bad business. When business is bad, it's bad for everyone and when it's bad for everyone it's bad for the bottom line and culture. As such, we wouldn't go into business to see bad bottom lines so reorganization is necessary and it involves placing the blame on poor management. Management is not about shoveling work to someone, or sitting on their shoulder to make sure they do it, or telling them how to do what it is you hired them to do. For myself, proper management has always involved letting the person you hired for the job... Do the job. Seeing strengths and making synergies that allow for delivery of product. Whatever they need to do the job, is what the role "management" calls for. Sometimes this is easy, sometimes it is not, especially if you feel the job isn't being done adequately or to your liking. Sometimes you have people problems (trust me, I have had these in such a way you would not believe). Sometimes the person just isn't the right cultural fit. Sometimes you have strong urges to meddle, or try to pitch in where you don't understand the underlying problem, but think you do. It is best to refrain at these points and leave it to the person you hired, to do it. If it's not getting done, that's a different yarn-ball. One can't fix everything and it is at that point, you respectfully let the person go with no hard feelings if it can be avoided.

If you're at the top of the food chain, sometimes it requires taking the pulse of your core and making sure it's protected from any bad business. The day-in, day-out core of your organization, company, squad, team or etc needs protecting and you should remove or polarize correctly those who practice any form of bad business. This is an old learned lesson presenting itself anew to me within these last couple of weeks and I plan to go ahead and do just that. Lets get back to the core tenets of good business, courtesy and respect for our peers, colleagues, employees and even at the end of the day our enemies.

Nooooo response but then again it's 11:53pm est... politely, fuck legal, this is my personal blog, had it way before anything else and I'm sure i've used much more explicit profanity laced delivery around these parts.. Posting.

Share/Bookmark

Syndicated 2012-02-16 04:53:57 from Christopher Warner » Advogato

Cognitive Bias and The Mary Protocol

I have lots of questions

Everything you look for and all that you perceive has a way of proving whatever you believe.

Every now and then I am reminded of cognitive bias as presented by Kruger-Dunning in the paper Unskilled and Unaware of It: How Difficulties in Recognizing One's Own Incompetence Lead to Inflated Self-Assessments. As I have been active in the opensource community for close to 18 years now in some form or fashion the first lesson I learned is that if you have never done it before. You don't know. It's just that simple, and this lesson tends to stick with you with in almost every facet of life. It affects ones approach to problems such that every problem starts with one question. Quickly and summarily followed by a series of questions that need to be answered. My standard trajectory usually begins to branch off in a series of questions leaving me with few answers and even more questions to which I simply don't have the answer. Early on this led to a slight madness as I would start down some rabbit hole and end up working on some esoteric issue that affected a handful of people. In retrospect, I was young and dumb, back then I thought that so long as you plugged away at it. No matter how long it took you, you would be able to answer anything. Now that I'm slightly older, and know how dumb I still am and how valuable it is in choosing the right question, I am able to avoid madness. Of course, sometimes it will sneak up on me and I find myself doing something that makes absolutely no sense at all. This is obviously why we call it madness, but I'm much better at avoiding it or tolerating it depending on my needs or condition. I'm of the mindset that madness can't be cured, only managed.

Usually if I receive an email or a critique of work furnished that needs a sign-off, peer review or some such. I'm wholly open to it because my first assumption is that if I'm treading new or unfamiliar water then I obviously don't know what I am doing. Secondly, the more eyes the better. While treading familiar waters I am much less open to critique or suggestion unless I feel it will beneficial, primarily to avoid rabbit holes but also due to a lack of time. New variables mean risk and if there is no gain by adding the element of risk to something that has been tried and true. I'm unlikely to entertain or even respond to it. This is not necessarily always the case but largely this behavior I feel has strengthened my ability to stay focused on the right question and to avoid rabbit holes.

I think proponents and participants in opensource operate within the same vein and mindset for the most part. It's more of a behavioral mindset or lifestyle, propelled by the some itch, urge, quest to solve a given problem and find the right answer. Whether it be for fortune, fame, enjoyment or some other facet. You work the problem until you are tired and move on to some other problem whether it be in the same domain or somewhere else. Hopefully you were able to answer a question or two and because it's opensource inevitably someone at some point will continue finding answers to questions old or new.

I'd appreciate much more answers however

Lately though with my own interactions I feel as if this isn't the case, partly because I suspect their is a racial and gender tinge to cognitive bias that is ripe for exploration. This brought up in a couple of discussions on gender recently. Specifically in regards to women in opensource and generalizations of women by men in general. Before these discussions a couple of weeks earlier I had recently finished reading a post by Daniel Stenberg titled "Three out of one hundred" (which I recommend you read) so the conversation and ideas were fresh in my head. Also, I had a heated discussion about some work where I can only make the assumption that because of my skin color this person thought that somehow they knew better and would simply do the exact opposite of what I said. To be brutally honest, sometimes this works in my own favor, and to be blunt, I'm a capitalist and love money so cleaning up a mess may work out for me in monetary fashion. I mean, ignorance is costly, but let me be clear. Unlike agile salesmen, I try my best to offer clear and abrupt warning.

On the whole though the idea is that men on average will make the incorrect assumption that they are more capable at a technical subject than their female counterparts no matter how qualified they may be. Women having to deal with this their entire lives tend to see the bigger picture and avoid what they consider to be rabbit holes. As a woman I would ask why? Why even bother going down that route if every time I do someone is going to offer to second guess me? This coalesced quite nicely with another discussion I had on generalizing untrue statements as applied to women. So, let us take for example the statement, "all women are batshit insane" as clearly being a gross generalization. Amongst a group of men shooting the shit  it may be viewed as an off-cuff remark, in a mix of women, it will still be viewed as an off-cuff remark but it will be normally tolerated, at least to your face. However, this one statement in and of itself subtly reaffirms subconsciously that there must be some bit of truth to that statement. Thus, most women are indeed insane, maybe not batshit insane but a mild course of irrational behavior is expected. Of course this statement is simply ridiculous! I don't have the actual data to back any of this up and saying I believe it to be true isn't enough for an idiot, I realize. That aside, I am ashamed to admit that I am guilty of remarks like this myself. I've tried to rationalize the comments with "it's about context" but I can't qualify that as an "african-american" male. Is the statement "black people no jack shit about computers" any different? It's generalistic, and is again ridiculous but do we subconsciously hold onto these ridiculous generalist statements and again subconsciously use them to validate our own cognitive bias? Of course if that is actually the case there will be less women in opensource because all the men seem to think they are superior. Can you really blame someone that can't get a word in edgewise, everything they do is second guessed, or felt to be inferior? Doesn't sound fun to me at all, especially when you are paid less and have to doubly prove yourself answering harder questions. In short, fuck that noise. So of course, there will be less of any group that isn't already in the majority. Which means we have much less answers to our questions. This is unacceptable and we must try harder not just in our professional but personal lives as well.

The Mary Protocol

In response to my own behavior and to help me realize when I may be making a generalist statement that I may not consider hurtful, insulting or a turn-off to someone. I've implemented the Mary protocol. It's a simple procedure that will help me, help myself.

  1. The moment I may have said something and/or heard someone else say something that sounds ridiculous enough to either retract with an immediate apology or to pause the conversation with a "not cool". I will do so.
  2. I will not argue about my position beyond stating that i'm invoking something known as the Mary protocol to help myself from reinforcing my subconscious with nonsense and to allow for open discussion if the offending party would like to hear more.
  3. I will do my best to keep any proceeding conversation succinct and within reason.

The protocol is to be like a bit of a tase to correct my behavior. Not because I want to become some righteous feminist with a penis but because should I have a daughter someday I'm quite sure i'd take high offense to anyone calling her batshit insane, or treating her in inferior manner in anyway shape or form. So much so that I pray to never see it occur in my presence for the safety of the offending party. Off-cuff or not, it's not acceptable behavior and I will not continue it. It is my hope, that you do the same.

Share/Bookmark

Syndicated 2011-12-15 19:49:38 from Christopher Warner » Advogato

Issue Department Detector for Roundup

Could find no samples for immediate team/department email on issue creation for Roundup. There used to be one that was shipped with it but that code is broken. Anyway, I needed it so I had to waste my morning writing it. The roundup api is a bit hairy but this example is simple. You’ll need to modify your tracker schema and it will send an email on creation of a ticket or issue to a specific department or team address. Obviously if you change the order or mapping you’ll need to update that in the detector code. Cheers!

  # Copyright (c) 2011 Christopher Warner - cwarner@kernelcode.com (http://cwarner.kernelcode.com)
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
#   The above copyright notice and this permission notice shall be included in
#   all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
#
from roundup.anypy.sets_ import set
from roundup import roundupdb, hyperdb

def deptissue(db, cl, nodeid, oldvalues):

    # get all message info
    create = cl.generateCreateNote(nodeid)
    dept_id = cl.get(nodeid, 'department')
    print dept_id

    ''' BUILDING DEPARTMENT '''
    # You have to know the id mapping
    #  technically we could find this

    if dept_id == '1':
        for msgid in cl.get(nodeid, 'messages'):
            try:
                print "Alerting Building Engineering Department"
                cl.send_message(nodeid, msgid, create, ['christopher.warner@drms.dla.mil'])
            except roundupdb.MessageSendError, message:
                raise roundupdb.DetectorError, message

    elif dept_id == '2':
        for msgid in cl.get(nodeid, 'messages'):
            try:
                print "Alerting Technology Department"
                cl.send_message(nodeid, msgid, create, ['Technology EMAIL ADDRESS HERE'])
            except roundupdb.MessageSendError, message:
                raise roundupdb.DetectorError, message

    elif dept_id == '3':
        for msgid in cl.get(nodeid, 'messages'):
            try:
                print "Alerting Research Department"
                cl.send_message(nodeid, msgid, create, ['RESEARCH EMAIL ADDRESS HERE'])
            except roundupdb.MessageSendError, message:
                raise roundupdb.DetectorError, message
    else:
        print "Department doesn't exist"
        pass

def init(db):
    # check on create of ticket
    db.issue.react('create', deptissue)


Share/Bookmark

Syndicated 2011-07-21 17:19:48 from Christopher Warner » Advogato

Specification Pepsi Openindiana Build 148 – FAQ

I’m going to try in earnest to keep this post updated with relevant information about Specification Pepsi – Openindiana Build 148 as i’m now calling it.

  1. How much energy does the entire machine use?

    On initial boot with the Samsung Optical SH-223L/BEBS spinning up we hit 95 watts, the system then drops to about 50watts and as it idles out drops to between 47 and 48 watts. While pushing the machine using all 4 drives as stated in the spec, we fluctuate between 50 and 57 watts.
  2. Why the 750w ATX Power supply?

    Based on the above data the 750w would seem to be overkill but in my specific case I have multiple units plugged into the motherboard. If one doesn’t plan on adding more than 4-6 hard drives you could easily get away with a 200-250 watt power supply. I’m going to search around for one and update the original specification.
  3. Do you need to have the optical drive?

    Not necessarily, you could technically remove the optical drive after install of the specification if you wanted to save on initial start up power. However the unit spins up only on start-up and considering it will be rarely if ever used, it’s pretty much a complete non-issue.
  4. No ECC memory, will that be an issue?

    In the original specification I noted the addition of ECC memory. Well, the Intel D5x doesn’t support ECC memory most likely to save as much energy as possible. It also doesn’t support Dual Channel memory, again for the same reason. Not the biggest deal in the world for this machine as it’s primarily used for storage and technically speaking the likelyhood of getting severe degradation or errors are low. Still, it would of been a nice to have. To my knowledge I don’t know of any mini-itx motherboard manufacturers that support ECC memory. At least not yet.
  5. Instead of the D510, why not the D525?

    Well, if we take a quick look at a comparison between the D510 and the D525 we see that we gain a minute speed bump in processing and DDR3 instead of DDR2 and wattage remains unchanged. None of this quite frankly mattered to me at the time as the D510 was roughly $20.00 USD less. None of the stated improvements would significantly speed up the function of archival and storage. This obviously changes if you plan to do compression or encryption with ZFS in which case it may then become useful. In reality though it would make much more sense to apply that extra $20.00 USD to a proper gzip or encryption off-board card.
  6. How much will it cost you to operate this unit?

    I pay roughly 9 cents per kwh off the top of my head. I’ll have to update with exacts next time I check but based on that number we are looking at close to $3.05 USD per month with the machine running at an average of 0.47kw/h or roughly $37.00 USD a year. Not such a horrible price for the machine that backs up my lively hood. Not that bad at all.

Share/Bookmark

Syndicated 2011-03-15 02:48:39 from Christopher Warner » Advogato

OpenIndiana ZFS Server

Recently I had to upgrade the hardware for my research server due to a massive hardware failure. The failure itself hasn’t been diagnosed properly but turns out it was essentially a ram failure of my OCZ DDR2 PC2-6400 modules or a chip failure. The near loss of all of my research data and work had [...]

Syndicated 2011-03-06 21:26:41 from Christopher Warner » Advogato

Plone and div blocking

Excuses

I haven't written any functional tutorial or such for Plone in a while. I'm working on a paper involving openid and started some work on an introduction to object and dynamic publishing that I need more time to work on, have random other things moving and etc excuses here. Something quick and useful in the meantime I suppose.

What is div blocking?

Div blocking is what I'm calling the process of returning a CoookedBody() back to your template into a specific html div. It's not specific to plone and it's a simple and straight-forward method many Plone developers call on. The idea is that you want to be able to return a section of html back into your overall template using a "Page" or "Document" content type. A simple use case for this is when you want to allow content-editors a chance to change something in the overall webpage using the standard Plone page content type. No sense in creating a new content-type just to return some formatted structured text. The end result is that you would like the final rendered html from that page to fit in-between <div></div> tags and for the overall look to leave your layout alone.

CookedBody() is a method that is apart of the overall Document object located in the Products.CMFDefault egg. It is an accessor method and it looks like this:

    #
    #   IDocument methods
    #   

    security.declareProtected(View, 'CookedBody')
    def CookedBody(self, stx_level=None, setlevel=0, rest_level=None):
        """ Get the "cooked" (ready for presentation) form of the text.

        The prepared basic rendering of an object.  For Documents, this
        means pre-rendered structured text, or what was between the
         tags of HTML.

        If the format is html, and 'stx_level' or 'rest_level' are not
        passed in or is the same as the object's current settings, return
        the cached cooked text.  Otherwise, recook.  If we recook and
        'setlevel' is true, then set the recooked text and stx_level or
        rest_level on the object.
        """
        if (
            (self.text_format == 'html' or self.text_format == 'plain'
            or (stx_level is None)
            or (stx_level == self._stx_level))
            and
            ((rest_level is None)
            or (rest_level == self._rest_level))
            ):
            return self.cooked_text
        elif rest_level is not None:
            cooked = ReST(self.text, initial_header_level=rest_level)
            if setlevel:
                self._rest_level = rest_level
                self.cooked_text = cooked
            return cooked
        else:
            cooked = stx2html(self.text, level=stx_level, header=0)
            if setlevel:
                self._stx_level = stx_level
                self.cooked_text = cooked
            return cooked

Reading the documentation of the object method we can see that it returns the cached cooked text which is stored in Plone's portal_catalog. One can go ahead and set stx_level or rest_level if you want which will use the reStructuredText parser to get you what you want.

I'm normally using a custom template in the form of a BrowserView and very rarely am I utilizing Plone's default theme. So if you know nothing about BrowserViews then please read the previous link first.

How to do?

Pretty simple, you just get the page object that you are looking for and run CookedBody(). So create a page and let's call it "Example" and fill it with some content. From there in creating your BrowserView lets add the method getTextFromPage() which will take the content from the page Example and return the CookedBody.

class MySpecialThemeView(BrowserView):

    implements(IMySpecialThemeView):

    def getTextFromPage(self):
    """Get the structured text from a page object with the id/name Example"""

        # We grab the root of our site here
        root = self.portal_eroor.getPortalObject()

        # We then grab the page object with the id Example
        example = getattr(root, "Example")

        # We then grab the body of the page as that is where the content lies
        # We could just as easily grab the title of the page or other attributes if needed
        body = example.CookedBody()

        # We then return body to our web browser
        return body

That finished our template would resemble something like:

Cooked Template HTML

HTML Template for CookedBody

Where right at the top of the page we have the div named example. That's pretty much it!

Share

Syndicated 2011-01-19 19:15:05 from Christopher Warner » Advogato

The Humanities

As I age, I have come to the conclusion that there used to be some form of class or just consciousness that existed in society that held basic principles of life, liberty, pursuit to happiness, appreciation for the arts, man-kind, betterment of/appreciation of the human condition and such near and dear. This included things like common decency and the ability to marginalize what I believe to be a cloud of idiocy even in the face of what many would deem arduous duty. It simply had to be done.

Maybe i'm wrong. Maybe I was just extremely fortunate in my upbringing and interest to have butted into stubborn headed elders whom for whatever reason saw the need to make sure I somehow believed this to be the case. Needless to say, in retrospect I very much pity my poor parents. Whom even though seem no worse for the wear can attest to the many battles. Fortunately the war was long ago ended in a series of newly signed treaties and an ever evolving and changing treatise. Which at this point gets summary retractions and addendum during the holidays. I pray often my own off-spring spares me.

In any event, I say this all because I came across an article in today's New York Times on digital humanities. The article in and of itself was of no interest to me. If one is now realizing that having large data sets to look deeper into a subject or topic makes sense then they haven't been practicing proper science. Computers are just tools, i'm not sure what the confusion is all about. What is interesting are the comments http://nyti.ms/9mOwAI. It's amazing to me that people in Humanities or Liberal Arts in general somehow feel that they are of some cloth or class irrespective to man-kind. The same way mathematicians or scientists in general feel as if they are apart of some form of church to which they are the studious acolytes serving the greater master of Truth. To which, they will impart knowledge as and when they see fit. To which, there is one structured way. It would only seem the logical thing to me to work with anyone, from any background if I thought it would further whatever I was interested in. That said there is clearly some insightful commentary, and hopefully more so will be added as the day, week continues.

Dr. Carl Sagan. My favorite humanist. You know why Carl Sagan is such a great mind to me? (I watch his series "Cosmos" at least once a year http://www.amazon.com/Cosmos-Carl-Sagan-DVD-Set/dp/B000055ZOB) He was simply able to impart with knowledge in such a brilliant fashion and he was a humanist! He was a physicist yes, but it is clearly obvious to anyone watching the series that the Physics was just an understanding of the world. To better understand deeper fundamental questions into human existence and our general welfare. If Dr. Carl Sagan was still alive there is no doubt in my mind and I would put my life on it right now. We'd have civilization on the Moon and be figuring out how to get to Mars.

Meanwhile, I seem to recall a time where watching Bugs Bunny I would get to hear Prokofiev or Grieg in the background. Where public works were seen as simply necessary. Where you could actually take piano classes at BAM (Brooklyn Academy of Music). Where, imparting with knowledge was the glory. All of these things have improved and empowered my life immensely. There are things that I appreciate sheerly because of the subtle exposure. How could I have been so wrong? What happened to these great minds? It's as if they have all passed away during the night leaving no recollection. All i'm left with are a bunch of grown children arguing over what the next Facebook or Twitter will be. How Social Media is great, did I hear about the Facebook email system. All these idiot startups that are solving cut and paste problems. How Google is going to save the world and a bunch of other random nonsense. It's as if it simply will not stop.

Selfishly, I think all of us from every background could really use a healthy dose of this imaginary consciousness I speak of, well imaginary, if it never existed. At least for myself, I really need it. From the responses in that article it looks to me that humanities is in serious trouble and if that is the case that means we all are.

Disclaimer: This post has absolutely nothing to do with where I may spend most of my work hours, any contracts I work on, or any of the in betweens. It's not endorsed in part, in whole or even understood by any party but myself. It is merely a personal observation. There is nothing to discuss in that regard and I'm going to start getting tired of writing these idiot disclaimers every time I say something off-the-cuff which may quite obviously unintentionally offend someone. So, just take it as my general position unless otherwise noted.

Share

Syndicated 2010-11-17 20:16:18 from Christopher Warner » Advogato

Choosing a web design company or design consultant?

Choosing a web design firm/company or consultant seems like a daunting task and the easiest thing to do is choose a name you know or go with a company or consultant that X other person and or company has used. This is the wrong way to go about this choice.

Here's an easy and simple guideline to aide in choice of a web design company/consultant.

1. Disregard large portfolios of work. You want to browse a small and recent selection of work. Not that large ports or older works are of no use but you'll want to see what the company is doing in the present. What they have done in the past is no correlation or affirmation on what they can do for you now. Firms especially, as designers that were once there may not be there any longer. If what you like about the firms work was done by a designer that is no longer there that artistic expression or essence will not be furnished in anything that will be produced for you.

2. You are not a designer, you however know what you like and what you don't like. For the most part you'll want to save the design to the designer. Tell them what you are looking for and leave the rest to them. If you don't like the small bit of work they have done recently. You will not like anything the design firm or design consultant has to offer. Designing is an artistic space and you have to enjoy/admire/like the artistic space the firm or consultant is in. Otherwise it's just not going to work.

3. The designer is not an engineer, however there are elements of function that will need to be discussed between the designer and the persons actually building the functionality or engine for the site. In rare cases you will find a designer who can do both. This is an extreme rarity so in those cases you should count your blessings many-a-fold.

4. Web design for the most part is expressed in ONE fashion; visually. Forget all technical aspects in regards to the design until you have visual aspect that you can be happy with. Beauty is of form-and-function but form is your initial attractor.

5. If what is produced is not to your liking then you have the wrong designer. Design by committee doesn't work. Never has, never will. Anything that has ever been produced by design-by-committee always looks and operates in such frankenstein fashion one may as well have not bothered in the first place. Refer to 2. It's ok to say, "Well, I do not like this and i'm going to try another designer". A professional designer will not be offended and may even recommend someone else in this space that is more to your liking. The commission or setup of a design is a working relationship. Any designer worth his/her weight will tell you that much. Any contract furnished by a professional designer will have such a clause in it.

6. Should you find yourself in constant iteration? There is something clearly wrong with the design, no professional designer will put up with constant iteration on their work once they've felt it to be complete. If you find yourself saying? "Can we just tweak this, or change that, or move that". There is an overall problem with the design and you need to either find a new designer or start over.

7. The best design is the most simple design. If you see a lot of clutter everywhere? There is clearly a problem. There are huge design problems that haven't been solved in the relay of large bits of information in all sorts of different context. If you don't have a designer that knows this? Something is wrong.

8. You get what you pay for. Many persons often think design is superfluous and easy. Unfortunately that is not the case. Design is an extremely draining mental task all for the goal of someone not even noticing and appreciating the work in most cases. The web package deals you see around the internet are for cookie-cutter box designs much like McDonalds has value meals. That maybe ok for something small or a site one doesn't really have much invested in but one cannot subsist on value meals alone. If your website is an important part of your daily routine then maybe instead of the value meal you should invest in a proper dinner.

9. There are a lot of bullshit artist out there. You shouldn't be looking for someone who knows all the whiz-bang words. You should be looking for a true designer, one who views the world creatively through the objects around them and is able to put together something functional in a way the rest of us apes aren't. Even if they don't know whiz-bang technology, that work can be assigned to someone who is ore capable in that realm. This doesn't mean the person doesn't know whiz-bang it just means they don't considering Flash, ASP, .NET worth mentioning. The same way a construction guy doesn't say Hammer, Screwdriver set, pipe wrench know-how! This type of person doesn't follow whiz-bang anything and in general will use all the tools available to them to get what they want.

10. Another tip is to find a designer who actually has a studio or works with other designers in actual creation of products/stuffs/tools/whatever. If all they have in their portfolio is web design then you aren't dealing with a designer. You're just dealing with someone that understands HTML. These are clearly two entirely different beasts.

Syndicated 2010-10-06 15:18:55 from Christopher Warner » Advogato

1 Oct 2010 (updated 1 Oct 2010 at 13:29 UTC) »

Plone 3 Intranets Review

Plone 3 Intranets

Víctor Fernandez de Alba

When Packt asked me to review this book I have to honestly say that I wasn't looking forward to it. Plone as a product has a notorious track record for what I believe to be not the friendliest or most accessible documentation. Regardless of it's technical superiority and usability, it's a glaring deficiency. This is getting better with time but there is still a lot of work to do. Unfortunately my apprehension was filled with curiosity and I agreed to do so at one of the busiest times for me. That and the fact that instead of going on another tirade about documentation it would probably be useful to use my own guidelines in reviewing the book. <h2>Nutshell for the impatient.</h2>

For those of you that cannot wait, have ADD, or TLDR syndrome here's a short summary. Actually, this may come as a shock but I really enjoyed the book. My initial wanton and disregard was primarily for Chapter 8 but clearly it was simply due to context. Packt should really not use that as a sample chapter for this book, it's a complete turn off for several reasons. I will pass that gripe along. That said, there are some tidbits in this book that really make it a good reference manual and a keeper for at least a little while. In regard to technical documentation that means it's something you probably want on your shelf if you're doing anything with Plone and intranets in the forseeable future. Quite frankly the book should be updated in minor fashion with a subsequent release for Plone 4 as not much has changed and it will help to get the book in hands of more new administrators and users of Plone. With some very minor changes this book could be called Plone 4 Intranets. This issue was most likely do to time constraints as Plone 4 has only recently been released. The intended audience for this book is administrators or new users who tend to do their own administration and I think it's successful in reaching that audience. That said on a scale of 1 - 10 I give the book a strong 7. <h2>Chapter 1</h2>

The introduction gives a good general background to Plone and how it came into existence. Discussing the excellent security track record of the CMS and it's general history up until present. It then begins to segue into the more complicated but powerful features of Plone. Workflow, States and Transitions. This chapter also covers and introduces Python and ZODB (Zope Object Database) and why they are useful not only to Plone but to the entire content management space. It's short-and-sweet providing just enough information and background to make it useful to the reader.  There is also a nice overview of the Plone community which introduces the reader to the entire community with a great handshake and welcome that is actually quite refreshing. An introduction on the fine line between extranet and intranets and how the spaces merge in some use case is a great cap for this chapter. <h2>Chapter 2</h2>

Some introduction to the ZMI (Zope Management Interface) and a discussion of blob file types with no background was a bit too early I believe. The issue is that blob file types are native to Plone 4 and not Plone 3. It's again an issue of time constraint and it must of been difficult for Victor to find the right balance between the two versions but I just don't think the mention of the information was relevant here. Also even though ZMI is explained in detail it will be a little hard for non-technical users to fully grasp. The installation of Plone is shown with the Buildout system instead of the unified installer as a first option which I felt was a little hard to swallow as well. For non Plone users this will all seem foreign extremely early on in the book. However the book shines in guides for installing with the unified installer on the major operating systems environments. This really should have been outlined before the buildout instruction but even there the documentation is precise. The explanation of buildout and how it functions is really good and it takes you down into the specific sections for each buildout configuration which is quite handy. If you don't know how to install Plone or have been having trouble you can follow along step-by-step with these instruction.

All in all Chapter 2 feels a little abbreviated and some of the concepts I felt should have been introduced through a relevant example in using them. If you are well versed in Plone it may seem rote here but will make good printed reference material for buildout. Otherwise this chapter maybe slighty confusing to a completely new administrator of Plone. If as a new user you aren't readily thrown off by Buildout introduction you've survived one of the more difficult chapters. Also there is no dire need to use buildout. If you are confused then I recommend reading the sections for the unified installer specified for your operating system and it should help you along digesting some of the concepts. <h2>Chapter 3</h2>

The chapter starts off with creating a Plone site named "intranet". That one example would of been wholly useful as a step through from Chapter 2. That said this chapter gives a great overview of the breakdown of the default Plone theme installed with Plone 3. This has since been replaced in Plone 4 but that is pointed out in the chapter. We also get a well versed overview of the Plone user interface and how one can go about navigating it. As well as a few good examples on adding some of Plones default content types. This includes a walk-through and breakdown of the content structure and default hierarchy of a Plone site. The Dublin Core Metadata specification and good coverage of creating content in Plone is discussed. Including setting up content with some of the default content views. This chapter will certainly help the intended audience in navigation and use of Plone's interface and it succeeds in a comprehensive overview here. <h2>Chapter 4</h2>

In this chapter we deal with the configuration of Plone through it's configlets. They are identified, explained and then broken down into a detailed explanation of usage. Good coverage of ZODB (Zope Object Database) packing via the maintenance configlet and the issues and concerns wrapped around that. There is also a section specifically page 65 which discusses the fact that Plone 4 has its own UI for site creation that simply feels a little out of place. The mention of this should have been in Chapter 3. Otherwise this chapter gives a great overview of the power of the ZMI (Zope Management Interface) and how it can affect site health if administered incorrectly. A valid and perfect apt warning as we delve deeper into the ZMI. For anyone well versed in Plone this is simply a fantastic overview of the ZMI and all of the objects related to Plone. Adding new products is also discussed in the two- way fashion. Meaning the old style products and the new standard de facto recommended procedure of using buildout and eggs (like zip files). The example given for eggs is really a poor one I believe. TinyMCE is native to Plone 4 and even though this book is specifically for Plone 3 one has to suspect that some users will just grab the latest package of Plone which will cause problems. Other than that this is a great chapter that begins to show you the power of Plone and the ZMI. <h2>Chapter 5</h2>

This chapter begins one of the most important series of chapters in regards to Plone. Managing users and groups. The discussion on roles in Plone as well as the entire overview of the security system is excellent coverage of the topic that simply doesn't get much mention at all. Even experienced Plone administrators or developers get confused about the setup from time to time. So for instance, the fact that roles are isolated so an editor who may have the rights to edit content may not have rights to explicitly read that content. For that you'd need to be granted the reader role. This chapter also covers how to create and manage a new user or group. There is also more coverage of administration through the ZMI to create user and groups. The author even clears up some common misconceptions that a new administrator to Plone may have such as confusing Plone PAS with the Zope PAS module. This is a solid meat and potatoes chapter. <h2>Chapter 6</h2>

Next in this important series of chapters is Managing Workflows. This is probably one of the most critical and useful topics covered in this book. So far and up until this point there haven't been many visual diagrams and explanations for the most part. With the exception of stepping through commands we don't get much visual aid. This begins to change here as it begins to become necessary. There is great overview of workflows and what they are comprised of. Including coverage on out of the box workflows related with Plone. The difference between a state and a transition and what you can do with each specific action. There is also light discussion on tales/tal which exposes the lack of documentation on topics like ZPT (Zope Page Templates). The book does it's best to provide a link but no coverage is giving there. Quite frankly one should be able to pickup another manual on ZPT or the likes but a comprehensive manual doesn't really exist here.  We also talk about some third party add-on products for Plone primarily  collective.workflowed, collective.wtf and DcWorkflowGraph which simply is a requirement if you are going to be doing anything with workflows. I really wish one tool was chosen instead a discussion of the three. Having the three divergent paths even though useful in the context of choice may confuse a new user should one of those paths fail. Otherwise this was an excellent chapter and worth the read even if you are an experienced Plone user, administrator or developer. This chapter along with the previous one make this book worth keeping as a reference manual. <h2>Chapter 7</h2>

Security is important and this chapter covers securing the intranet. Concentrating primarily on permissions and workflows the chapter goes into great detail on converging what we have learned up until now in the previous chapters. The differences between Global and Local roles is great. I feel the discussion on Anonymous, Owner and Authenticated functional roles was a bit brief and needed much more detailed explanation. The coverage on actually creating and implementing a policy is pretty good. From outlining requirements, building an example intranet workflow, creating a private section for your intranet and even taking into account third party addon products security and settings you will be well versed towards this chapters end on security. This is also the chapter where we start to see a bit of python code that quite frankly is ok. There is a note, noting that basic product development will take place in Chapter 10. New users to Plone will most likely have to skip to this chapter to ramp up and immediately cover that background if they would like to continue following in earnest but it's not absolutely necessary. There is also a discussion on collective.sharingroles at the end which nicely caps the chapter. I'm not sure if it's absolutely required, but it's a decent addition to the overall chapter. <h2>Chapter 8</h2>

Using a content type effectively. This chapter in the context of reading the book is completely useful. Otherwise in the context of simply a sample chapter it's useless. Quite frankly, there is nothing in this chapter that isn't already on Plone.org in some fashion. This doesn't exactly entice one to buy the book, as I read this as a sample chapter I said to myself, I have already read this stuff many a time over. Sans this one gripe in this chapter you'll learn about creating collections and querying the ZODB (Zope Object Database). We also learn about the useful features of other out-of-the-box Plone content types. Other than that there is not much to say about this chapter. I wouldn't have necessarily called it useful outside of the context of the book and even in context it's more of a standard straight forward chapter. <h2>Chapter 9</h2>

This is a nice progression from the previous chapter as it discusses external content-types and products that can be used with Plone. Most of these products are primarily for intranet purposes obviously and a good over view is given of each product. You have calendar, events, blog, survey, poll, document management and form generation products. In specific the form generation product covered is PloneFormGen and I'm pleased that this was the only thing covered on the topic of form generation. There are actually other different ways to create a form but the author picks one and sticks with it. An experienced user or administrator of Plone would be able to branch off where necessary. Also the discussion on the document management products is really quite useful for intranet settings. This chapter is great in introducing these add-on products that most intranets will need to use and gives a good overview of each different type of product. <h2>Chapter 10</h2>

This chapters goal is to introduce the readers to the basics of Plone product development and I think it succeeds in that regard. It steps through the basics of creating and building a completely useful product it's not as comprehensive as my own documentation on the topic but it's very comprehensive and readable. GenericSetup the tool used to manage some of the major tool objects in Plone is broken down in detail and explained including a matrix of all the relevant xml and it's subsequent description. There is even an example of cloning a content type with GenericSetup through the ZMI (Zope Management Interface).  The only issue with this chapter is any mention of Dexterity. Dexterity is on track to be a replacement/sister for Archetypes. Unfortunately there are some sacrifices that will be made and  incompatibility with the previous Archetype system is unavoidable. Quite frankly Archetypes will be around for sometime to come and there is nothing useful to be had by even mentioning it in any context at this point in the book. <h2>Chapter 11</h2>

Content rules are triggered based on Zope event handlers and this coverage is pretty decent you'll learn how to create rules and have them triggered based on specific event. You'll also learn how to create syndicated feeds from folderish content type objects. However the most important piece in this chapter will have to go to versioning. Versioning is an absolute requirement for any content management system and Plone has a simple and straight-forward way it handles changes to content. This chapter will give a great overview of how to use the versioning system as well as managing version policy. The WebDAV and External Editor coverage is also useful. <h2>Chapter 12</h2>

Chapter 12 starts with the pronouncement "Theming -- what a huge subject in Plone!" This is quite right as Plone and theming opens all avenue of possibility I was surprised to see this chapter in this book. After reading it and with the prior knowledge that there are numerous other manuals, reference material and books on the topic of Plone theming this chapter is in my opinion superfluous. All that stated the chapter does give a decent overview of theming Plone. Changing logos, managing viewlets describing the page render process and useful tools like Gloworm it makes itself a chapter of bonus material. Viewed in that context this again makes the book a solid and useful reference manual. <h2>Chapter 13</h2>

This is simply a great chapter that discusses proper deployment of Plone for three different types of deployments. Victor goes into useful detail on site deployment describing it as a continuous process there are many different options and implementations but breaking the process down into 3 different deployment sizes is reachable. We have small 1-50, medium 50-100 and large 100+ every essential process for a working deployment is covered from backing up, restoring and packing the database to rotating log files, scheduling, virtual hosting, load balancing between ZEO clients for redundancy, caching and even externally authenticating against LDAP (Lightweight Directory Access Protocol). Each process has enough coverage to get any of your deployments off of the ground. The only thing that I think is missing from this chapter is a way to assess and manage performance which I would have easily given up chapter 12 for. All in all however the final chapter in this book is yet another solid and useful chapter in what has turned out to be a great and useful manual. <h2>Recommendation</h2>

All things considered this book in so far as a technical manual is great coverage of the topic of Plone and Intranets. The author does an excellent job in conveying the material and even if you aren't doing anything with intranets there are several solid chapters on Plone deployment, theming and others that make the book a solid purchase for anyone planning to use Plone for almost any application. I give the author my congrats and highly recommend it as a solid buy.

Syndicated 2010-10-01 02:18:36 from Christopher Warner » Advogato

212 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!