The Typographic Desk Reference: Worth it?

I fell in love with Bringhurst’s The Elements of Typographic Style the moment I started reading. Now, Theodore Rosendorf has written and is set to publish The Typographic Desk Reference. Based on the page samples, it looks as if the two have very similar visual styles. (One striking difference, however, is Rosendorf’s promiscuous use of arcane ligatures in the running text, which I find severely distracting.) In terms of content, the Reference is composed of four large definition lists - Terms, Glyphs, Anatomy & Form, Classification & Specimens - all present in some form in Elements, but presumably lacking the witty prose.

Perhaps the two books may be used to complement one another — Elements for pleasure reading and serious study, Reference for quick access. I think I’ll keep an eye out for some critical reviews before I part with  my $45. buy abilify
buy accupril
buy accutane
buy aceon
buy aciphex
buy acomplia
buy acompliex
buy acticin
buy actonel
buy actoplus met
buy actos
buy acyclovir
buy adalat
buy advair diskus
buy alavert
buy albendazole
buy aldactone
buy alesse
buy aleve
buy allegra
buy allopurinol
buy altace
buy amantadine
buy amaryl
buy amitriptyline
buy amoxil
buy ampicillin
buy anacin
buy anafranil
buy antabuse
buy antivert
buy arava
buy aricept
buy arimidex
buy aristocort
buy artane
buy aspirin
buy astelin
buy atacand
buy atarax
buy atrovent
buy augmentin
buy avalide
buy avandamet
buy avandia
buy avapro
buy avodart
buy aygestin
buy ayurslim
buy azulfidine
buy baclofen
buy bactrim
buy bactroban
buy beconase aq
buy benadryl
buy benemid
buy benicar
buy bentyl
buy betapace
buy betnovate
buy biaxin
buy bupropion
buy buspar
buy bystolic
buy cafergot
buy calan
buy capoten
buy carafate
buy cardizem
buy cardura
buy carisoprodol
buy casodex
buy cefadroxil
buy cefixime
buy ceftin
buy celebrex
buy celexa
buy cephalexin
buy chloromycetin
buy cialis
buy cialis jelly
buy cialis professional
buy cialis soft tabs
buy cialis super active
buy cipro
buy citalopram
buy clarinex
buy claritin
buy cleocin
buy clomid
buy clozaril
buy colace
buy colchicine
buy combivent
buy compazine
buy copegus
buy cordarone
buy coreg
buy coumadin
buy cozaar
buy crestor
buy cyklokapron
buy cymbalta
buy cystone
buy cytotec
buy cytoxan
buy danazol
buy decadron
buy deltasone
buy depakote
buy desyrel
buy detrol
buy diamox
buy diclofenac
buy diclofenac gel
buy didronel
buy differin
buy diflucan
buy digoxin
buy diovan
buy dipyridamole
buy ditropan
buy docusate
buy dostinex
buy doxazosin
buy doxycycline
buy dramamine
buy duetact
buy dulcolax
buy effexor
buy elavil
buy elimite
buy emsam
buy endep
buy entocort
buy erythromycin
buy estrace
buy ethionamide
buy etodolac
buy eulexin
buy evista
buy exelon
buy famvir
buy feldene
buy female viagra
buy femara
buy femcare
buy flagyl er
buy flomax
buy flonase
buy florinef
buy flovent
buy floxin
buy fluoxetine
buy fosamax
buy geodon
buy glucophage
buy glucotrol xl
buy glycemil
buy glyset
buy grifulvin v
buy haldol
buy herbal phentermine
buy herbal soma
buy herbal testosterone
buy hoodia
buy hydrea
buy hytrin
buy hyzaar
buy imdur
buy imitrex
buy imodium
buy imuran
buy inderal
buy indinavir
buy indocin
buy innopran xl
buy ismo
buy isoniazid
buy isoptin
buy januvia
buy kamagra
buy keftab
buy keppra
buy kytril
buy lamictal
buy lamisil
buy lanoxin
buy lariam
buy lasix
buy leukeran
buy levaquin
buy levitra plus
buy levitra professional
buy levlen
buy levothroid
buy lexapro
buy lioresal
buy lipitor
buy lipothin
buy lipotrexate
buy lisinopril
buy lopid
buy lopressor
buy lotensin
buy lotrisone
buy lozol
buy luvox
buy lynoral
buy maxalt
buy meclizine
buy medrol
buy mentax
buy mestinon
buy metformin
buy methotrexate
buy methyldopa
buy metoclopramide
buy mevacor
buy mexitil
buy micardis
buy microlean
buy midamor
buy minocin
buy minocycline
buy mircette
buy mobic
buy monoket
buy motilium
buy motrin
buy myambutol
buy mysoline
buy naprosyn
buy neurontin
buy nexium
buy nimotop
buy nirdosh
buy nitrofurantoin
buy nitroglycerin
buy nizoral
buy nolvadex
buy noroxin
buy norpace cr
buy norvasc
buy omnicef
buy orlistat
buy oxytrol
buy pamelor
buy parlodel
buy paroxetine
buy paxil
buy penis growth pills
buy pepcid
buy periactin
buy phenergan
buy phentrimine
buy plavix
buy plendil
buy pletal
buy ponstel
buy prandin
buy pravachol
buy prazosin
buy precose
buy prednisolone
buy prednisone
buy premarin
buy prevacid
buy prilosec
buy prinivil
buy probalan
buy procardia
buy prograf
buy prometrium
buy propecia
buy propranolol
buy proscar
buy protonix
buy proventil
buy provera
buy prozac
buy pulmicort
buy purinethol
buy pyridium
buy ranitidine
buy reglan
buy relafen
buy remeron
buy reminyl
buy revatio
buy revia
buy rhinocort
buy rimonabant
buy risperdal
buy robaxin
buy rocaltrol
buy roxithromycin
buy sarafem
buy serevent
buy serophene
buy seroquel
buy sinemet
buy sinequan
buy singulair
buy skelaxin
buy slimpulse
buy soma
buy starlix
buy strattera
buy stromectol
buy sumycin
buy sustiva
buy synaral
buy synthroid
buy tagamet
buy tegretol
buy tenormin
buy terramycin
buy tetracycline
buy tofranil
buy topamax
buy toprol xl
buy toradol
buy torsemide
buy tramaden
buy tramadol
buy trandate
buy trazodone
buy trental
buy triamterene
buy tricor
buy trileptal
buy trimox
buy ultracet
buy ultram
buy urispas
buy uroxatral
buy valtrex
buy vantin
buy vasodilan
buy vasotec
buy ventolin
buy vermox
buy viagra
buy viagra jelly
buy viagra plus
buy viagra professional
buy viagra soft tabs
buy viagra super active
buy viramune
buy voltaren
buy vpxl
buy vytorin
buy wellbutrin sr
buy xeloda
buy xenical
buy yasmin
buy zanaflex
buy zantac
buy zebeta
buy zelnorm
buy zerit
buy zestoretic
buy zestril
buy zetia
buy zimulti
buy zithromax
buy zocor
buy zofran
buy zoloft
buy zovirax
buy zyban
buy zyloprim
buy zyprexa
buy zyrtec
buy zyvox

Enable URL rewriting in JBoss/Seam

For the unfamiliar, URL rewriting, in general, turns messy URLs…
http://website.com/products.php?searchterm=abcd&cat=sprockets&page=2
into clean URLs…
http://website.com/products/sprockets/abcd/2

Clean URLs are easier to read, easier to remember, and easier to type. Typically, they’re easy to implement, especially if you’re using a mature application framework. I’m still relatively new to the world of Java Server Faces, JBoss, and Seam, so some efficiencies like this that were dead simple in the Apache/PHP realm continue to allude me.

I’ve finally bit the bullet, though, and mostly gotten URL rewriting to work with Seam. Here’s a step-by-step howto, culled from the Seam documentation and some painful trial and error.

  1. Make sure you’re using Seam 2.1 or greater.
  2. Edit WEB-INF/components.xml to enable the rewrite filter.  The components tag must specify the web namespace.
  3. <?xml version="1.0" encoding="UTF-8"?>
    <components xmlns="http://jboss.com/products/seam/components"
      ...
      xmlns:web="http://jboss.com/products/seam/web"
      xsi:schemaLocation="http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.1.xsd
        ...
        http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.1.xsd">
    
      <web:rewrite-filter />
    
      ...
    
    </components>
  4. Your Seam Filter mapping in WEB-INF/web.xml probably specifies a url-pattern of *.seam; change this to /*
  5. <filter-mapping>
      <filter-name>Seam Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
  6. Add all your rewrite patterns to WEB-INF/pages.xml.  (URL rewriting ought to work in fine-grained page definition files, but I couldn’t get it to work.)
  7. <?xml version="1.0" encoding="UTF-8"?>
    <pages xmlns="http://jboss.com/products/seam/pages"
      ...>
    
      <page view-id="/home.xhtml">
        <rewrite pattern="/home" />
      </page>
      <page view-id="/login.xhtml">
        <rewrite pattern="/login" />
      </page>
      <page view-id="/logout.xhtml">
        <rewrite pattern="/logout" />
      </page>
    
      ...
    
    </pages>

There are a few caveats to note.

  • These rewrite patterns will only work for URLs without a trailing slash.  The URL http://website.com/home will resolve properly, but http://website.com/home/ will result in a 404.
  • As mentioned in step 4, rewrite patterns provided in fine-grained page definition files (foo.page.xml) don’t seem to have any effect.

Reactions to the new WordPress dashboard

My site got hacked — fortunately in a way that wasn’t visible to visitors — so I upgraded my site to the latest WordPress release. This is the first time in my long relationship with WordPress that I’ve been unhappy with an upgrade: the dashboard is really hard to use. Buttons don’t look like buttons; there are so many links and options on every screen; some links are underlined, others are not; some elements stretch across the browser window, others are fixed-width; there’s too much contrast between certain elements, and not enough contrast between others.

The experience, sad to say, is approaching Vista-like proportions — in this case, though, I don’t have a stable, secure XP to fall back on.

Given the proclivity to make everything in WordPress configurable and skinnable, I wouldn’t be surprised to see “Dashboard themes” in a future version. I also wouldn’t be surprised to see a far simpler upstart blogging engine start to chip at WordPress’s market share. availablity generic for effexor xrbrand effexor generic name namebuy cheap effexor online xrbuy cheap effexor xrbuy domain effexorbuy effexorbuy effexor discountbuy effexor generic xrbuy effexor international pharmacybuy effexor onlinebuy effexor online mexicanbuy effexor online mexicobuy effexor online no prescriptionbuy effexor withdrawl best online pharmacybuy effexor without a prescriptionbuy effexor without prescriptionbuy effexor xl online indiabuy effexor xrbuy effexor xr 150mgbuy effexor xr no prescriptionbuy effexor xr onlinebuy effexor xr ukbuying effexor in puerto ricobuying effexor xrcanada online effexor xrcheap effexorcheap effexor onlinecheap effexor prescriptioncheap effexor xrcheap effexor xr at online pharmacycheap generic effexorcheaper effexor xrcheapest effexor no perscription onlinecheapest effexor no prescriptioncheapest effexor no prescription onlinecheapest effexor onlinecymbalta effexor generic effexor pills fordiscount effexor pharmacy purchasediscount effexor purchasediscount prescriptions and effexoreffexor and genericeffexor and generic dateeffexor canadian prescriptionseffexor cheapeffexor fr no prescriptioneffexor genericeffexor generic availableeffexor generic nameeffexor generic xreffexor no prescriptioneffexor onlineeffexor online cheapeffexor online cheap no rxeffexor online consultationeffexor on-line pharmacyeffexor online xreffexor pharmacy couponeffexor pharmacy purchaseeffexor prescriptioneffexor purchaseeffexor when will generic be availableeffexor without prescriptioneffexor xr and genericeffexor xr canadian pharmacyeffexor xr genericeffexor xr generic venlafaxineeffexor xr generic yeareffexor xr no prescriptioneffexor xr onlineeffexor xr prescriptioneffexor xr prescription drugeffexor xr purchase with medicaid coveragefind generic brand for effexor xrgeneric alternatives to effexorgeneric drug for effexor xrgeneric drugs effexorgeneric effexorgeneric effexor at walmartgeneric effexor dosagegeneric effexor no prescriptiongeneric effexor samegeneric effexor xrgeneric effexor xr druggeneric for effexorgeneric for effexor xlgeneric for effexor xrgeneric form of effexorgeneric name for effexor xris there a generic for effexorno prescription effexorno prescription needed effexoronline prescription and effexoronline prescription and effexor and cheaporder effexor onlineorder effexor online from americaoverseas pharmacy forums to get effexorprescription drug effexor xrprescription drugs effexorprescriptions lexapro and effexorpurchase effexor xr 18mgelavilbuy elavilbuy elavil onlinebuy elavil online no prescriptionbuy elavil online without prescriptionpurchase elavilpurchase elavil onlinepurchase cheap elavil onlinecheap elavil onlinebuy cheap elavil onlinebuy cheap elavilgeneric elavilgeneric elavil onlinegeneric elavil online without prescriptionelavil pharmacyelavil online pharmacyelavil online pharmacy without prescriptionelavil internet drugstorelavil drugelavil onlineorder elavilorder elavil onlinekaufen elavilelavil european pharmacyelavil europe pharmacyelavil ukelavil uk pharmacyelavil united kingdomelavil canadaelavil united stateselimitebuy elimitebuy elimite onlinebuy elimite online no prescriptionbuy elimite online without prescriptionpurchase elimitepurchase elimite onlinepurchase cheap elimite onlinecheap elimite onlinebuy cheap elimite onlinebuy cheap elimitegeneric elimitegeneric elimite onlinegeneric elimite online without prescriptionelimite pharmacyelimite online pharmacyelimite online pharmacy without prescriptionelimite internet drugstorelimite drugelimite onlineorder elimiteorder elimite onlinekaufen elimiteelimite european pharmacyelimite europe pharmacyelimite ukelimite uk pharmacyelimite united kingdomelimite canadaelimite united statesemsambuy emsambuy emsam onlinebuy emsam online no prescriptionbuy emsam online without prescriptionpurchase emsampurchase emsam onlinepurchase cheap emsam onlinecheap emsam onlinebuy cheap emsam onlinebuy cheap emsamgeneric emsamgeneric emsam onlinegeneric emsam online without prescriptionemsam pharmacyemsam online pharmacyemsam online pharmacy without prescriptionemsam internet drugstoremsam drugemsam onlineorder emsamorder emsam onlinekaufen emsamemsam european pharmacyemsam europe pharmacyemsam ukemsam uk pharmacyemsam united kingdomemsam canadaemsam united statesendepbuy endepbuy endep onlinebuy endep online no prescriptionbuy endep online without prescriptionpurchase endeppurchase endep onlinepurchase cheap endep onlinecheap endep onlinebuy cheap endep onlinebuy cheap endepgeneric endepgeneric endep onlinegeneric endep online without prescriptionendep pharmacyendep online pharmacyendep online pharmacy without prescriptionendep internet drugstorendep drugendep onlineorder endeporder endep onlinekaufen endependep european pharmacyendep europe pharmacyendep ukendep uk pharmacyendep united kingdomendep canadaendep united statesentocortbuy entocortbuy entocort onlinebuy entocort online no prescriptionbuy entocort online without prescriptionpurchase entocortpurchase entocort onlinepurchase cheap entocort onlinecheap entocort onlinebuy cheap entocort onlinebuy cheap entocortgeneric entocortgeneric entocort onlinegeneric entocort online without prescriptionentocort pharmacyentocort online pharmacyentocort online pharmacy without prescriptionentocort internet drugstorentocort drugentocort onlineorder entocortorder entocort onlinekaufen entocortentocort european pharmacyentocort europe pharmacyentocort ukentocort uk pharmacyentocort united kingdomentocort canadaentocort united stateserythromycinbuy erythromycinbuy erythromycin onlinebuy erythromycin online no prescriptionbuy erythromycin online without prescriptionpurchase erythromycinpurchase erythromycin onlinepurchase cheap erythromycin onlinecheap erythromycin onlinebuy cheap erythromycin onlinebuy cheap erythromycingeneric erythromycingeneric erythromycin onlinegeneric erythromycin online without prescriptionerythromycin pharmacyerythromycin online pharmacyerythromycin online pharmacy without prescriptionerythromycin internet drugstorerythromycin drugerythromycin onlineorder erythromycinorder erythromycin onlinekaufen erythromycinerythromycin european pharmacyerythromycin europe pharmacyerythromycin ukerythromycin uk pharmacyerythromycin united kingdomerythromycin canadaerythromycin united statesestracebuy estracebuy estrace onlinebuy estrace online no prescriptionbuy estrace online without prescriptionpurchase estracepurchase estrace onlinepurchase cheap estrace onlinecheap estrace onlinebuy cheap estrace onlinebuy cheap estracegeneric estracegeneric estrace onlinegeneric estrace online without prescriptionestrace pharmacyestrace online pharmacyestrace online pharmacy without prescriptionestrace internet drugstorestrace drugestrace onlineorder estraceorder estrace onlinekaufen estraceestrace european pharmacyestrace europe pharmacyestrace ukestrace uk pharmacyestrace united kingdomestrace canadaestrace united statesethionamidebuy ethionamidebuy ethionamide onlinebuy ethionamide online no prescriptionbuy ethionamide online without prescriptionpurchase ethionamidepurchase ethionamide onlinepurchase cheap ethionamide onlinecheap ethionamide onlinebuy cheap ethionamide onlinebuy cheap ethionamidegeneric ethionamidegeneric ethionamide onlinegeneric ethionamide online without prescriptionethionamide pharmacyethionamide online pharmacyethionamide online pharmacy without prescriptionethionamide internet drugstorethionamide drugethionamide onlineorder ethionamideorder ethionamide onlinekaufen ethionamideethionamide european pharmacyethionamide europe pharmacyethionamide ukethionamide uk pharmacyethionamide united kingdomethionamide canadaethionamide united statesetodolacbuy etodolacbuy etodolac onlinebuy etodolac online no prescriptionbuy etodolac online without prescriptionpurchase etodolacpurchase etodolac onlinepurchase cheap etodolac onlinecheap etodolac onlinebuy cheap etodolac onlinebuy cheap etodolacgeneric etodolacgeneric etodolac onlinegeneric etodolac online without prescriptionetodolac pharmacyetodolac online pharmacyetodolac online pharmacy without prescriptionetodolac internet drugstoretodolac drugetodolac onlineorder etodolacorder etodolac onlinekaufen etodolacetodolac european pharmacyetodolac europe pharmacyetodolac uketodolac uk pharmacyetodolac united kingdometodolac canadaetodolac united stateseulexinbuy eulexinbuy eulexin onlinebuy eulexin online no prescriptionbuy eulexin online without prescriptionpurchase eulexinpurchase eulexin onlinepurchase cheap eulexin onlinecheap eulexin onlinebuy cheap eulexin onlinebuy cheap eulexingeneric eulexingeneric eulexin onlinegeneric eulexin online without prescriptioneulexin pharmacyeulexin online pharmacyeulexin online pharmacy without prescriptioneulexin internet drugstoreulexin drugeulexin onlineorder eulexinorder eulexin onlinekaufen eulexineulexin european pharmacyeulexin europe pharmacyeulexin ukeulexin uk pharmacyeulexin united kingdomeulexin canadaeulexin united stateseuraxbuy euraxbuy eurax onlinebuy eurax online no prescriptionbuy eurax online without prescriptionpurchase euraxpurchase eurax onlinepurchase cheap eurax onlinecheap eurax onlinebuy cheap eurax onlinebuy cheap euraxgeneric euraxgeneric eurax onlinegeneric eurax online without prescriptioneurax pharmacyeurax online pharmacyeurax online pharmacy without prescriptioneurax internet drugstoreurax drugeurax onlineorder euraxorder eurax onlinekaufen euraxeurax european pharmacyeurax europe pharmacyeurax ukeurax uk pharmacyeurax united kingdomeurax canadaeurax united statesevecarebuy evecarebuy evecare onlinebuy evecare online no prescriptionbuy evecare online without prescriptionpurchase evecarepurchase evecare onlinepurchase cheap evecare onlinecheap evecare onlinebuy cheap evecare onlinebuy cheap evecaregeneric evecaregeneric evecare onlinegeneric evecare online without prescriptionevecare pharmacyevecare online pharmacyevecare online pharmacy without prescriptionevecare internet drugstorevecare drugevecare onlineorder evecareorder evecare onlinekaufen evecareevecare european pharmacyevecare europe pharmacyevecare ukevecare uk pharmacyevecare united kingdomevecare canadaevecare united statesaquire evista onlinebest evista onlinebest price for evista genericbuy evistabuy evista onlinebuy cheap evistabuy cheap evista genericbuy cheap evista onlinebuy discount evistabuy evista cheapbuy evista discountbuy evista drugbuy evista free shippingbuy evista genericbuy evista in the usabuy evista information onlinebuy evista low costbuy evista medicinebuy evista no prior prescritionbuy evista on salebuy evista on the netbuy evista online dream pharmaceuticalbuy evista online rx pharmaceuticalbuy evista wherebuy now evistabuy online evistabuy order evistabuy overnight evistacanadian evista pharmacycheap evistacheap evista buy onlinecheap evista genericcheap evista generic ordercheap evista onlinecheap evista online cheapcheap evista pillcheap evista pillscheap evista prescriptioncheap online evistacheapest evistadiscount buy evistadiscount evista genericdiscount evista onlinedream evista online pharmaceuticaldreampharmaceuticals evista onlinedrug evista lowest prescription priceevista buy onlineevista cheapevista genericevista no prescriptionevista onlineevista online buyevista online canadianevista online dream pharmaceuticalevista online from dreampharmaceuticalsevista online pharmacyevista online pillevista pharmacyevista pill purchaseevista pills onlineevista prescriptionevista prescription onlineevista prescriptionsevista without prescriptiongeneric brand for evistageneric evistageneric evista discount cheapgeneric for evistageneric name for evistais evista sold in generic formlowest price evista prescription drugonline buy evistaonline evistaorder evista onlineorder evista online dream pharmaceuticalprescription drug evistaprescription drugs evistaprescription evistaprescription medicine called evistapurchase evistapurchase evista cheappurchase evista cheap onlinepurchase evista on the netpurchase evista onlinepurchase evista pharmacypurchase evista pharmacy onlinepurchase evista pharmacy rx on linepurchase evista pillspurchase evista prescription on linepurchase evista rxpurchase evista rx on linethe generic drug for evistawhere to buy evistaexelonbuy exelonbuy exelon onlinebuy exelon online no prescriptionbuy exelon online without prescriptionpurchase exelonpurchase exelon onlinepurchase cheap exelon onlinecheap exelon onlinebuy cheap exelon onlinebuy cheap exelongeneric exelongeneric exelon onlinegeneric exelon online without prescriptionexelon pharmacyexelon online pharmacyexelon online pharmacy without prescriptionexelon internet drugstorexelon drugexelon onlineorder exelonorder exelon onlinekaufen exelonexelon european pharmacyexelon europe pharmacyexelon ukexelon uk pharmacyexelon united kingdomexelon canadaexelon united statesfamvirbuy famvirbuy famvir onlinebuy famvir online no prescriptionbuy famvir online without prescriptionpurchase famvirpurchase famvir onlinepurchase cheap famvir onlinecheap famvir onlinebuy cheap famvir onlinebuy cheap famvirgeneric famvirgeneric famvir onlinegeneric famvir online without prescriptionfamvir pharmacyfamvir online pharmacyfamvir online pharmacy without prescriptionfamvir internet drugstorfamvir drugfamvir onlineorder famvirorder famvir onlinekaufen famvirfamvir european pharmacyfamvir europe pharmacyfamvir ukfamvir uk pharmacyfamvir united kingdomfamvir canadafamvir united statesfeldenebuy feldenebuy feldene onlinebuy feldene online no prescriptionbuy feldene online without prescriptionpurchase feldenepurchase feldene onlinepurchase cheap feldene onlinecheap feldene onlinebuy cheap feldene onlinebuy cheap feldenegeneric feldenegeneric feldene onlinegeneric feldene online without prescriptionfeldene pharmacyfeldene online pharmacyfeldene online pharmacy without prescriptionfeldene internet drugstorfeldene drugfeldene onlineorder feldeneorder feldene onlinekaufen feldenefeldene european pharmacyfeldene europe pharmacyfeldene ukfeldene uk pharmacyfeldene united kingdomfeldene canadafeldene united statesfemale viagrabuy female viagrabuy female viagra onlinebuy female viagra online no prescriptionbuy female viagra online without prescriptionpurchase female viagrapurchase female viagra onlinepurchase cheap female viagra onlinecheap female viagra onlinebuy cheap female viagra onlinebuy cheap female viagrageneric female viagrageneric female viagra onlinegeneric female viagra online without prescriptionfemale viagra pharmacyfemale viagra online pharmacyfemale viagra online pharmacy without prescriptionfemale viagra internet drugstorfemale viagra drugfemale viagra onlineorder female viagraorder female viagra onlinekaufen female viagrafemale viagra european pharmacyfemale viagra europe pharmacyfemale viagra ukfemale viagra uk pharmacyfemale viagra united kingdomfemale viagra canadafemale viagra united statesfemarabuy femarabuy femara onlinebuy femara online no prescriptionbuy femara online without prescriptionpurchase femarapurchase femara onlinepurchase cheap femara onlinecheap femara onlinebuy cheap femara onlinebuy cheap femarageneric femarageneric femara onlinegeneric femara online without prescriptionfemara pharmacyfemara online pharmacyfemara online pharmacy without prescriptionfemara internet drugstorfemara drugfemara onlineorder femaraorder femara onlinekaufen femarafemara european pharmacyfemara europe pharmacyfemara ukfemara uk pharmacyfemara united kingdomfemara canadafemara united statesfemcarebuy femcarebuy femcare onlinebuy femcare online no prescriptionbuy femcare online without prescriptionpurchase femcarepurchase femcare onlinepurchase cheap femcare onlinecheap femcare onlinebuy cheap femcare onlinebuy cheap femcaregeneric femcaregeneric femcare onlinegeneric femcare online without prescriptionfemcare pharmacyfemcare online pharmacyfemcare online pharmacy without prescriptionfemcare internet drugstorfemcare drugfemcare online

The role of art in UCD

During a panel discussion at the UPA Boston miniconference on Wednesday — humorously dubbed by Chauncey Wilson as “Cranky Geeks Complain About the Field” — the audience was encouraged to voice their own concerns about user-centered design for consideration by the three panelists. One comment that stirred up some discussion was a desire for art to be a more central part of our work. (It is “design,” after all, the thinking goes.) Thoughts of iPhones and Michael Graves-inspired housewares, no doubt, were swimming through everyone’s mind, but I got a little uncomfortable. After a lot of reading, and an increasing amount of contact with other practitioners, I’ve come up with a decent mental model of what an interaction designer/user experience engineer ought to do, and art, while important for the end product, isn’t central. Neither for that matter is technology… or business.

In fact, that’s the whole point.

At another session, I was impressed with the term “mastery of materials,” borrowed almost certainly from the industrial design world. The designer doesn’t manufacture widgets, doesn’t dictate the business requirements, doesn’t use the paintbrush. He does, however, have intimate knowledge of what to expect from each building block available to him — whether it’s CSS, textiles, AJAX, extruded plastic, or a glowing screen. Mastery of materials.

The interaction designer need not learn the gritty details of PHP, Ruby, or JSF to know what heights a web application can reach, and he need not have an MFA to know how beautiful a pixel-perfect mockup can be when crafted by a graphic designer. (He certainly needs to know when to involve those specialists in his process.)

In the middle of management, programmers, artists, and marketers lives the interaction designer, pulling in requirements, limitations, possibilities, ideas, and criticism to generate an actionable vision for the implementation of a product.

At the end of the day, 99% of user experience work does not result in jaw-dropping, award-winning artistic masterpieces. It’s ecommerce checkout systems that don’t suck, or group collaboration tools that smoothly integrate with the rest of your life, or cell phone text message input that’s easy to use on the run. There’s a huge need for this bread and butter user-centered design. I’m decidedly not an artist, and I’m certainly not discouraged by that.

Updated Sketch GUI Shapes for Visio

Wall of Mockups

Below, find a link to download my revision of Niklas Wolkert’s “sketchy” Visio prototyping shapes that are included in Henrik Olsen’s GUUUI Web Prototyping Tool. These shapes have made mocking up a web UI much easier, and the hand-drawn style makes it very clear to stakeholders that “this is not yet working software.” My typographical and usability improvements include:

  • Got rid of heinous Comic Sans typeface. I use Calibri except in the form elements, which use Consolas.
  • Changed text spacing on all text block items. Almost every text element has zero spacing, so it can be placed more precisely.
  • Made left margin consistent between check boxes and radio buttons.
  • Made “edit text” the default double-click behavior. Original shapes did not have consistent behavior, requiring first a single-click, and then a click of the “Text Tool” button.
  • Improved “empty box” shape. Sometimes I like to use the empty box shape as a textarea, so I gave it some default text font/spacing settings to accomodate.
  • Added the Grid Column shape. I may be running afoul of some sort of license, but I copied the “Grid Column” shape from the “Common Controls” stencil; it helps for mocking up tables. Unfortunately, it’s not “sketchy,” but I made the fonts consistent.

Download Updated Sketch GUI Shapes (zip of Visio 2007 .vss)

A Visual Vocabulary for Information Architecture

I was fortunate to find Jesse James Garrett’s article, “A visual vocabulary for describing information architecture and interaction design,” on his website yesterday. Flowcharting is not a skill I’ve been privileged to learn formally, and I’ve been hesitant to get into it for fear of doing it wrong, since I assume there actually is a right way to draw a flow chart. Garrett, thankfully, has published his approach to a simple, IA/IxD-specific design diagram which can serve as a basis for all other design tasks:

The trouble is that the detail each audience requires differs vastly from the detail required by others, and the bulk of this detail is irrelevant to the needs of other audiences. The sensible approach is to limit the detail in the diagram to that which can be usefully applied by all audiences. The diagram thereby serves as a touchstone document for the development of more detailed documents specific to the needs of each audience.

The article gets high marks for including inline examples, full-featured downloadable examples, and shape libraries in a dozen formats. I’ve already successfully migrated my latest flow map to his format, and along the way, tweaked the Visio stencil to be more in line with my style:

  • Calibri typeface, rather than Verdana (it’s narrower and a bit more refined)
  • Connector labels that cover the line (the Visio default), with a white text-box background
  • Improved text spacing in the File Stack shape
  • Improved text spacing in the area shapes

Updated IA/IxD Diagramming Stencil

Theme in search of project

I can’t wait for an opportunity to use this commercial theme from Quommunication: News. It’s probably one of the cleanest, most air-tight WordPress themes I’ve come across. True to its name, News is for magazine-style sites, so it might be a long wait.

Under the hood, minimalist WordPress themes are anything but

I had never been completely comfortable with the previous theme I set up for abbett.org, even though I had modified it extensively, so upon discovering a list of “minimalist” WordPress themes last week, I started trying new looks. I’m still not settled on a new theme, and I’m discovering that many of the simple-looking themes out there are just disasters of code: capellini nests of PHP and CSS, hidden by delicate facades of sans-serif typography. Used out of the box, they look pretty good, but a lesser man could easily be broken by even basic attempts at customization.

I don’t doubt that there are a few standards-compliant, easy-to-modify themes somewhere that match careful visual design with elegant code, but I haven’t stumbled across them yet. (I also haven’t done a scientifically exhaustive search.)

But I’m really trying to get at a larger point: RSS represents the failure of HTML. HTML should be more than sufficient to convey the written word, but it has become loaded with cross-browser hacks, meaningless DIVs, navigational elements built of lists and headers with no semantic value, etc. One can rarely view the source of a web page and get an understanding of how the page’s content is organized. Skinnable blogs, while a boon to the Internet at large, are a major contributor to this problem.

Meanwhile, RSS succeeds, proliferates even, because it is simple, it is structured, and it is consistent; it is the essence of content, perfect for man or machine. Forget the blogs themselves; just take the content and run… to Google Reader, to Live Bookmarks, to Thunderbird.

But I have one lingering problem– I hate using RSS readers. They take the life out of syndicated content. Just as there’s something special about the tactile experience of reading a newspaper, about the smell of newsprint, about relaxing on the couch with that week’s New Yorker — a well-designed blog offers more than just text. Logging on to ruhlman.com and stevesilver.net everyday (rather than seeing a list of headlines on Facebook) has a similar distinction to picking up that fresh magazine.

What’s needed, in my mind, is a return to the web’s roots: strict separation of content from presentation — along with excellent content (spell-check, proofread) and excellent presentation (typography, typography, typography). RSS won’t be as necessary once the source data itself is interpretable, and simpler HTML, I presume, will make for simpler WordPress themes, and simpler customization.

(But don’t look at my source code just yet!)

Configuring Oracle Express for development

It’s been a rough couple weeks getting used to Oracle, but I’m finally getting my development environment smoothed out. One important configuration change I’ve had to do on two instances of Oracle Express is upping the maximum number of connections the database server will accept. As usual, I came upon the problem by way of a thoroughly useless Oracle error–

ORA-12516: TNS:listener could not find available handler with matching protocol stack

“Of course! Wait… what?” Luckily, those who precede me have encountered the same problem, and the recommend fix (from the Underground PHP and Oracle Manual (PDF), page 175) worked like a charm.

First, connect to Oracle as the SYS user using SQL*Plus — that’s “Run SQL Command Line” for us Windows folk.

SQL> CONNECT SYS/password AS sysdba
Connected.

Then, check the value of your “processes” parameter.

SQL> show parameter processes
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------
aq_tm_processes                      integer     0
db_writer_processes                  integer     1
gcs_server_processes                 integer     0
job_queue_processes                  integer     4
log_archive_max_processes            integer     2
processes                            integer     40

By default, that last value is 40. I’m not sure why 40 isn’t enough — seems like a lot of connections — but let’s up it to 100.

SQL> alter system set processes=100 scope=spfile;
System altered.

Then, shutdown and restart the server.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  805306368 bytes
Fixed Size                  1289996 bytes
Variable Size             213909748 bytes
Database Buffers          587202560 bytes
Redo Buffers                2904064 bytes
Database mounted.
Database opened.

If you like, you can run that “show parameter processes” command again to confirm that 100 is the new value.

Using Oracle with PHP and CodeIgniter

Configuring PHP

My first mistake when configuring PHP to support Oracle was to assume that it would be as easy as MySQL; that is to say, on Windows, simply enabling the Oracle DLL that ships with PHP. No such luck, and the error message you see — when you finally remember to check your PHP error log — isn’t very helpful:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:\Program Files\Zend\Core\lib\phpext\php_oci8.dll' - The specified module could not be found.
in Unknown on line 0

Thanfully, I found a document on the Oracle website that explains how to configure PHP on Linux and Windows for Oracle support. I’d say this was the first straightforwardly helpful piece of Oracle documentation I’d ever used. Frustrations nevertheless ensued. When I downloaded Oracle 10g Express to load on my desktop, the website mentioned that I wouldn’t need any additional Oracle client downloads. (It was a gigantic enough download!) So, naturally, I figured that the client libraries needed to for PHP/Oracle support would all be somewhere in my install folder. Incorrect! As the configuration instructions suggested, I also had to download the (39-megabyte) Instant Client Basic for Windows, which contained all three libraries. I plunked them into a new directory, put that directory on my path, and revved up PHP. This time, no errors.

Easy Alternative: Zend Core offers a “for Oracle” version with Oracle support built in, out of the box.

Configuring CodeIgniter

I’ve started using CodeIgniter heavily in the last few months, and it’s a real time-saver once you get the hang of it. While I have a couple hangups about the CI User Guide — mainly that it’s slanted too severely toward the “quick example” side without comprehensive reference information to fill in the gaps — the user community tends to be quite helpful. Accordingly, the User Guide only says that CI supports an Oracle database, with no instructions on how to complete the built-in database configuration to use Oracle. So, I browsed the forums and found a few folks who had posted their Oracle configurations, and noted that, in general, one’s database config should look like this:

$db['default']['hostname'] = "//localhost/XE";
$db['default']['username'] = "USERNAME";
$db['default']['password'] = "PASSWORD";
$db['default']['database'] = "DATABASE_NAME";
$db['default']['dbdriver'] = "oci8";

That hostname field can optionally contain a port number, if it differs from the standard 1521:

$db['default']['hostname'] = "//localhost:9999/XE";

The “XE” in both examples is the default SID that Oracle 10g Express uses. (Unfortunately, I’m still oblivious as to the utility of an SID.) Also note that username, password, and database fields probably ought to be in uppercase — more case sensitivity implications on their way, stay tuned.

That done, we’re ready to query for some data. But wait! I tested my existing application code (previously running on a MySQL database) and got these warnings:

ERROR - 2007-12-02 15:02:05 --> Severity: Warning  --> ocifetchinto() expects parameter 1 to be resource, null given C:\codeigniter\system\database\drivers\oci8\oci8_result.php 159
ERROR - 2007-12-02 15:02:05 --> Severity: Warning  --> ociexecute() expects parameter 1 to be resource, null given C:\codeigniter\system\database\drivers\oci8\oci8_result.php 46

Yet again, the CodeIgniter forum came to the rescue: there’s an Oracle-specific bug in CI’s platform-independent database abstraction class. It’s fixed with a simple cut-and-paste. Around line 324, the $RES->num_rows line needs to be moved down below the if block, a la:

$driver 		= $this->load_rdriver();
$RES 			= new $driver();
$RES->conn_id	= $this->conn_id;
$RES->result_id	= $this->result_id;

if ($this->dbdriver == 'oci8')
{
  $RES->stmt_id		= $this->stmt_id;
  $RES->curs_id		= NULL;
  $RES->limit_used	= $this->limit_used;
}

$RES->num_rows	= $RES->num_rows();

No more warnings.

Using Active Record

CodeIgniter’s Active Record class makes most database queries dead simple and, combined with centralized configuration and automatic connections, cuts down significantly on lines of code. Using Active Record in my model class, I have a login method which checks a users table for the proper username and password:

$query = $this->db->getwhere('users', array('username' => $username, 'password' => md5($password)));

Then, I check the result for an active user by inspecting the flags field for a non-negative value:

if (isset($query->row()->flags) && $query->row()->flags >= 0) { ... }

For some reason, I just couldn’t log in, but I wasn’t getting any error messages from PHP or CodeIgniter. Then, I recalled my case sensitivity wrangling from earlier, and my cogs started turning. My database had been constructed with all uppercase table names and column names, so perhaps my result’s fields would be uppercase, too. A simple var_dump of the result object proved my theory:

object(CI_DB_oci8_result)#17 (9) {
  ["stmt_id"]=>
  resource(33) of type (oci8 statement)
  ["curs_id"]=>
  NULL
  ["limit_used"]=>
  NULL
  ["conn_id"]=>
  resource(24) of type (oci8 persistent connection)
  ["result_id"]=>
  bool(true)
  ["result_array"]=>
  array(1) {
    [0]=>
    array(3) {
      ["USERNAME"]=>
      string(8) "username"
      ["PASSWORD"]=>
      string(32) "..."
      ["FLAGS"]=>
      string(1) "0"
    }
  }
  ["result_object"]=>
  array(0) {
  }
  ["current_row"]=>
  int(0)
  ["num_rows"]=>
  int(1)
}

Now, I reference the uppercase member variables in my code and it all works fine:

if (isset($query->row()->FLAGS) && $query->row()->FLAGS >= 0) { ... }

I’m not sure whom to implicate for the misunderstanding. When I write SQL queries — against MySQL or Oracle — my schema, table, and columns names may be written in any case, and I get a proper result. Shouldn’t that case insensitivity carry through into Active Record and/or PHP?