More Magento Annoyances

This week I had to deal with yet more stupid Magento behaviour. First, I had to overload a core controller class. Naively, I tried doing it the easy way at first—ie: simply duplicating the file and file path in the /app/code/local directory and making my changes there. (Which, BTW, always struck me as a deeply stupid way to go about things, but that’s another story)—but that didn’t work.

This week I had to deal with yet more stupid Magento behaviour. First, I had to overload a core controller class. Naively, I tried doing it the easy way at first—ie: simply duplicating the file and file path in the /app/code/local directory and making my changes there. (Which, BTW, always struck me as a deeply stupid way to go about things, but that’s another story)—but that didn’t work. A further bit of research told me that hey, controllers can’t be overridden that way. What you have to do, apparently, is create your own extension, with a controller class extending the core class, and perform other configuration magic.

Read the whole tutorial in the official Wiki here. Speaking of, I’m a little appalled at how incomplete and in need of a cleanup this article is, for what you’d think is a pretty important operation. Not only that, but the editors can’t even seem to agree on the details. For example, regarding Step 2, should the rewritten URL in the config file contain a leading slash or not? For the record, I did need those slashes, but maybe that depends on the version. That, plus lines like

(comments I’m not a 100% sure about are ending with “(?)”):

and

You need to get extra precise with the rewrite regular expression cause this causes a very hard time. In this part.

make the article look really unprofessional. Guys, it’s your freaking official freaking Wiki, you need to (a) be 110% sure about what you’re putting up, and (b) write in correct English. Sheesh.

Anyway. So I followed the instructions and it worked. Yay? But wait! In a crazy twist, my override controller (ie: in the extension) was actually extending my local controller (ie: the duplicate of the core class, that I’d forgotten to delete). So… a local override could have worked after all? Or is it a bug? I have no idea. I decided to just delete the local override and call it a day.

(There was another issue that at first I blamed on a Magento default template, but on mature reflection may have been caused by our team.)

Fieldsets and Drupal settings forms

Blame my lack of experience with Drupal. This week I was held up on a weird problem, and for once the online documentation didn’t seem to be helping.

I was coding a module, with a number of parameters. To keep things tidy, I decided to group them in fieldsets. And, not being too clear on the consequences, I set those fieldsets’ #tree parameter to TRUE. Here’s what it looked like:

Blame my lack of experience with Drupal. This week I was held up on a weird problem, and for once the online documentation didn’t seem to be helping.

I was coding a module, with a number of parameters. To keep things tidy, I decided to group them in fieldsets. And, not being too clear on the consequences, I set those fieldsets’ #tree parameter to TRUE. Here’s what it looked like (simplified example):

function foomodule_admin_settings() {
  $form['foo'] = array('#type' => 'fieldset', '#title' => t('Foo'), '#tree' => TRUE);

  $form['foo']['testmodule_bar'] = array('#type' => 'checkbox',
    '#title' => t('Bar'),
    '#description' => 'Bar',
  );

  $form['foo']['testmodule_baz'] = array('#type' => 'textfield',
    '#title' => t('Baz'),
    '#size' => 20,
    '#description' => t('Baz'));
    

  return system_settings_form($form);
}

What I found then was that the settings wouldn’t save. There were no errors, I got the normal message that “The configuration options have been saved.” but the values in the form were not updated.

After a bit of experimentation and reading up on how Drupal saves these settings, I figured out that the message was correct: my options really were saved, but not in the way I expected.

First, Drupal saves persistent variables in a table, named variable. Each record in this table has two fields: name and value. This field doesn’t exactly hold the value: for some reason Drupal also stores its type and (if it’s a string or array) its length. So (ignoring fieldsets for the moment) the value field for variable “bar” might be

b:1;

(“b” for “boolean”)

—while the value for “baz” could be

s:8:"whatever";

(“s” for “string”)

Apparently, if you’re editing these fields manually, you have to be really careful to make the stored length match the value’s actual length, or Bad Things will happen.

So here’s what it looks like is happening: if a form element is set to '#tree' => TRUE, its child elements’ values will not be stored in the database. Instead, it will get its own line in the variable table, with the value being an array of its child elements’ values. Which here, would look something like this:

a:2:{s:3:"bar";b:1;s:3:"baz";s:8:"whatever";}

This behaviour makes sense, but it seems to break everything about persistent variables. Fortunately there’s a simple solution. Just don’t set ‘#tree’ to TRUE, and the form elements’ values will store correctly. There we go, easy-peasy.

I Overdosed Twice

This Saturday I took part in Vancouver’s 10:23 Challenge (“Homeopathy – There’s Nothing In It”) A bunch of CFI people on the steps of the Art Gallery, doing a homeopathy demonstration (complete with whacking the magic elixir against a leather-bound Bible, which is what Hahnemann apparently preferred), and some of us overdosing on homeopathic medicine. Or I should say, “medicine,” with sarcastic quote marks.

This Saturday I took part in Vancouver’s 10:23 Challenge (“Homeopathy – There’s Nothing In It”) A bunch of CFI people on the steps of the Art Gallery, doing a homeopathy demonstration (complete with whacking the magic elixir against a leather-bound Bible, which is what Hahnemann apparently preferred), and some of us overdosing on homeopathic medicine. Or I should say, “medicine,” with sarcastic quote marks.

Arnica Montana (30C dilution)

I was told this was a muscle relaxant, but according to homeopathic web sites I consulted later (emphasis theirs):

Produces conditions upon the system quite similar to those resulting from injuries, falls, blows, contusions. Tinnitus aurium. Putrid phenomena. Septic conditions; prophylactic of pus infection. Apoplexy, red, full face.
It is especially suited to cases when any injury, however remote, seems to have caused the present trouble. After traumatic injuries, overuse of any organ, strains. Arnica Montana is disposed to cerebral congestion. Acts best in plethoric, feebly in debilitated with impoverished blood, cardiac dropsy with dyspnoea. A muscular tonic. Traumatism of grief, remorse or sudden realization of financial loss.(source)

Apparently Hahnemann “found it helped heal everything from baldness and impotence to incontinence, cramps, bruises, general soreness, forgetfulness, travel sickness, sleeping problems, gout, rheumatism and emotional problems”(source)

The directions on the bottle were “5 pellets, 3 times per day or as directed by your health care practicioner.” I took around 80 in one shot, and sadly didn’t develop a Wolverine-like healing factor.

Silicea (200C dilution)

Imperfect assimilation and consequent defective nutrition. It goes further and produces neurasthenic states in consequence, and increased susceptibility to nervous stimuli and exaggerated reflexes. Diseases of bones, caries and necrosis. Silicea can stimulate the organism to re-absorb fibrotic conditions and scar-tissue.

[…]

Ill effects of vaccination. suppurative processes. It is related to all pustulous burrowings. Ripens abscesses since it promotes suppuration. Silica patient is cold, chilly, hugs the fire, wants plenty warm clothing, hates drafts, hands and feet cold, worse in winter. Lack of vital heat. Prostration of mind and body. Great sensitiveness to taking cold. Intolerance of alcoholic stimulants. Ailments attended with Pus formation. Epilepsy. Want of grit, moral or physical.(source)

An abundant mineral in the earth’s crust, silicia has a profound cleansing effect on the body. Long neglected and persistent ailments respond well to silicea therapy.

Silicea, derived from quartz or flint and an essential structural component of cartilage and bone, is used to treat chronic conditions that progress slowly over time. It is also very effective against seasonal ailments, such as colds. Like other homeopathic remedies, silicea is typically prescribed to relieve symptoms associated with particular personality types. Those most likely to benefit from silicea show such character traits as lack of direction, pliability, weakness, confusion, fear of failure and the kind of mental burnout seen in those who overwork to the point of exhaustion. Silicea is said to impart qualities that reflect its rock hard origins, structure in one’s life, clarity, steadfastness and reliability. Also referred to as silica, silicea has a powerful restorative and stabilizing effect on the human body.(source)

The directions on the bottle were also “5 pellets, 3 times per day or as directed by the physician.” Again, I scarfed down 80 of the little buggers, and didn’t start looking like The Thing. Just as well, old Ben Grimm acts like he’s Blessed with Suck most of the time.

So that was kind of fun. What really struck me looking up these medicines is how vague their effects are supposed to be. Seriously, sudden realization of financial loss? baldness? forgetfulness? Want of grit, moral or physical? Still, that’s par for the course for faith healing.

The Joy of Drupal, The Agony of Magento

I’ve been working for a small web development shop for the past few months. It’s interesting work, all open-source, all PHP-based. My first project was with Magento, and it was frakking painful.

I’ve been working for a small web development shop for the past few months. It’s interesting work, all open-source, all PHP-based. My first project was with Magento, and it was frakking painful.

I’m not just talking about the inevitable learning curve of tackling a new code base, and a (to me) whole new kind of CMS. The pain comes from an incredibly unintuitive code architecture that I keep having to wrap my brain around over and over.

From working with WordPress I was used to files for a given theme or plugin sitting together in one directory; this makes sense because they are all part of one module. Not so in Magento. Code, templates and other config elements are spread all across the system. From a design point of view I can sort of see why you’d want your business logic separate from your page templates, and both separate from your javascript, CSS, images and whatnot. You’d think it seems tidier, right? But in practice it makes extensions much harder to code than they should. To enhance or override core functionality, I have to know the exact names of these core classes and where they sit in the code directories, with no tidy hooks or API around which to build my functions.

And that’s not even counting the unholy tag soups in configuration XML files, with weird rules and redundancies that I haven’t been able to grok so far, so I just copy from existing samples and hope it eventually works. For example, according to A book to cook with Magento, config parameters defaults are set in the file config.xml, but if you want to view and modify them in the Web interface, that form is defined in another file, system.xml. My jaw literally dropped when I read up on this. How does it make any sense?

Mind-boggling or not, I’m grateful to blogs like A book to cook because there a serious dearth of online Magento documentation, official or otherwise. As often as not, googling particular issues led me to forum threads asking the same question I was researching… and nothing else, except maybe others chiming in to say they’ve got the same problem, or the same guy posting again a few months later to ask “What, nobody can help me?” Magento just doesn’t seem to have the same kind of active online community as, say, WordPress.

So what you end up with is a system that is way harder than it should be to enhance in any substantial way. Magento is open-source, sure, but if the source is a scary and confusing jungle of code, that doesn’t really help. No wonder people are willing to shell out megabucks for what you’d think are pretty minor extensions, instead of working it out themselves. Case in point:

The Backorder Button extension gives you the ability to display to your customers which of your products are currently on backorder.

If one of your products are on backorder, the Backorder Button extension will change the text’s of your “Add to Cart” buttons to “Backorder” (both in the product list, and on the product details pages), and the “Availability: In Stock” text’s (displayed on the product details pages) to “Availability: Available on Backorder.”. You can of course rewrite / customize the replacement text’s from the System Configuration.

$29 for this? Really? It took my coworker a couple of hours to figure out how to do it. But Magento’s deceptive: what looks simple and obvious isn’t always so. For instance, I had to abandon one extension that I thought at first would take me a few days, but later looked like many weeks of tedious hacking. It’s still on my to-do list, though: it’s useful functionality that should be present in an e-commerce system, but as far as I can tell nobody’s done in Magento yet. I tell you, if I ever make it work I’m going to be a fucking millionaire.

And then there’s Drupal

Now, I only have a few weeks’ actual experience with Drupal. I’d started playing with it a few months ago in preparation for a large volunteer web design project—that will end up using another CMS, but that’s another story. Then last month at work I finally got to do some actual Drupal development.

And it’s true, there’s a steep learning curve, which I’m only starting on. But unlike Magento, the learning process really isn’t frustrating. There are plenty of resources to help me with issues, and at the end of the day I just feel productive: Drupal development is way more straightforward—no mucking around with core classes, no having to create a dozen files in five different directories just for a simple “Hello World” module. Drupal is complex, but not overly complicated. It feels elegant. It makes sense, and I like that. Drupal is, frankly, a joy to work with.

2010 was a good start

It’s been an interesting year, that’s for sure. A year of transitions and new beginnings. After being laid off in late 2009, I spent the first few months of 2010 trying to look for work, and not having much success. After a while I began to wonder if maybe there wasn’t another way to go about things. Tentatively I reached out to other freelance web designers, getting a feel for the industry, still unsure of what I really wanted to do, and what I was ready for.

It’s been an interesting year, that’s for sure. A year of transitions and new beginnings. After being laid off in late 2009, I spent the first few months of 2010 trying to look for work, and not having much success. After a while I began to wonder if maybe there wasn’t another way to go about things. Tentatively I reached out to other freelance web designers, getting a feel for the industry, still unsure of what I really wanted to do, and what I was ready for.

Eventually, I landed a couple of small contracts, just enough to give me the confidence to continue. And I started a long-term contract at a small web development shop, doing interesting things with Magento and Drupal, and possibly other CMS’s down the line, exactly the kind of skills I want to develop. Plus, it’s a steady paycheck, which is nothing to sneeze at. But the difference with all the other steady paychecks I had in my career, is that this is something I really enjoy doing, and that I can see myself doing in the long-term. I’ve still got a lot to learn, both in technical skills and the freelancing life in general, I believe I’ve finally found my path.

Some other important firsts:

And they won’t be the last, that’s for sure.

What else? Well, there’s going in drag for the first (and probably last) time.

And here’s to 2011! Time to build on everything I’ve accomplished last year.

I felt like a tourist in my home town

I went back to Ottawa to visit my family for the holidays and it struck me—not for the first time—that I was a tourist in my home town. Gone for almost 15 years, coming back once a year on average, gradually lost touch with most of my friends there—but this time, I decided to roll with it, and actually do the touristy thing. Well, it was either that or stay indoors and cower from the winter cold.

I went back to Ottawa to visit my family for the holidays and it struck me—not for the first time—that I was a tourist in my home town. Gone for almost 15 years, coming back once a year on average, gradually lost touch with most of my friends there—but this time, I decided to roll with it, and actually do the touristy thing. Well, it was either that or stay indoors and cower from the winter cold.

First stop, Parliament Hill. I’ve only gone a couple of times, including one school trip, and at least one student protest. Was kind of hoping I could get in, but no, only staff or tour groups were allowed inside. Oh well, I still snapped some photos, then wandered around the Byward Market, the Art Gallery, and Notre Dame Cathedral.

Parliament, main building

Parliament and Library

Parliament and Centennial Flame

Ottawa Notre Dame Cathedral

Ottawa Art Gallery

Ottawa Jail Hostel

Next day, I hit the Experimental Farm. The weather was fine and clear, though still bloody cold.

Sun, Snow and Shadow

Arboretum Ducks

Fields

Sunset

And on the flight back, I managed to get some more pictures from the plane. Picking a window seat on the starboard side was a long shot because I didn’t know how good the weather would be, but it paid off. Skies were clear for big chunks of northern Ontario, and bits of Manitoba and Alberta, as well as the Lower Mainland. Score! And once back, I got some experience fiddling with colour levels to remove the atmospheric haze. On the whole, I’m pretty happy with the results.

Vein Island, Lake Superior

Dryden

Lac du Bonnet

Meeting of Pitt River and Fraser River

Surrey Central City

Culture Crawl 2010: Why Art?

Yes, it’s that time of year again. On Saturday I went a-crawling, deciding to roam around Strathcona again. There are still many studios I haven’t seen yet, way out past Clark and near the Waterfront, but I enjoyed Strathcona so much! the pretty heritage houses, the rich history, the feel of community similar to what I feel in the queer West End, though with a different flavour, of course.

Yes, it’s that time of year again. Last weekend I went a-crawling, deciding to roam around Strathcona again. There are still many studios I haven’t seen yet, way out past Clark and near the Waterfront, but I enjoyed Strathcona so much! the pretty heritage houses, the rich history, the feel of community similar to what I feel in the queer West End, though with a different flavour, of course.

I’d like to think this poster was an omen, when I saw on the way to my first studio:

Why Free Art?

Okay, as far as omens go, it doesn’t say much about the fundamental interconnectedness of all things, because the people organising this Free Art event probably timed it to go along with the Crawl. And though I don’t agree with everything this poster has to say (especially in the fine print), it got me thinking. Hence this stream-of-consciousness blog post.

Why free art?
Or, Why art?
Or, What is it that I’m getting out of the Crawl?

Good questions. It’s true that “Art is food” and “Art soothes pain,” as the poster says, but the Crawl is about a lot more than that. It lets us see not just finished art pieces, we get a peek at the creative process. A lot of the studios had tools, paintbrushes, or what have you, out in the open and obviously well used. Artists are not magicians, they are not some refined elite conjuring beautiful things out of nowhere. Art takes talent, yes—and some say that’s overrated—but also work and dedication and passion.

And art doesn’t exist in a vacuum. Around every artist is a whole community to inspire or be inspired by their work. Art and culture don’t (necessarily) belong in galleries, and they’re not disconnected from everyday life. You can find art in paintings and sculptures, but also furniture, clothing, even custom-made panties. No fooling, one of the studios was selling them, but I forgot to get her card. And hey, even painting can brighten up whole communities: about a dozen large public murals were on display in the Downtown Eastside. I only photographed one, the closest to Strathcona, the others being too far out of my way.

Mural

I don’t agree with the Free Art people: art, for better or for worse, is not disconnected from money. It’s a business, and one that I’m a little more sensitive to, having taken the plunge into the freelance world. I hope my work will be as rewarding as these artists’.

Streets of Strathcona

Parade of Lost Souls 2010: Ghosts, Fears and Magic

I’ve got to admit, my attendance at the Parade of Lost Souls has been pretty spotty. I’ve only gone a handful of times since I moved to Vancouver, and I didn’t even know it had been canceled last year. I went this year, though. Because it’s a wonderful tradition that’s worth following, and because Public Dreams needs the support.

I’ve got to admit, my attendance at the Parade of Lost Souls has been pretty spotty. I’ve only gone a handful of times since I moved to Vancouver, and I didn’t even know it had been canceled last year. I went this year, though. Because it’s a wonderful tradition that’s worth following, and because Public Dreams needs the support.

How much support, I didn’t even realise until I read this West Ender article on how provincial cuts are hurting the arts and communities. Yet even scaled down the Parade (or I should say, the Ghost Walk), is keeping the magic alive. From the crazy costumes to keep us in the mood, to neighbourhood musicians keeping us entertained… to the (dare I use the word) more spiritual offerings, like Queen Victoria’s booth, where Walk participants can give away their fears in exchange for a feather. I remember that one from years past; wait, maybe for that one we wrote down wishes, not fears. Or maybe there were two booths, I forget.

And I lost the feather the next day. Oh well, it did its job.

I love the Parade of Lost Souls, for the way it brings together a whole community, and for the way it lets me suspend my skepticism for just one night. I hope it gets back on its feet, more people need to experience it.

So here they are, a month late, some photos of the Ghost Walk. And tomorrow’s the Culture Crawl!

The Walk Begins

A Band

Ghost

Wisdom

Scarecrow Grave

SkeptiCamp 2010 II

On October 23rd, 2010, several dozen skeptics descended on UBC for the second SkeptiCamp of 2010: a full day of science, education, questioning assumptions, and rap. Good times.

On October 23rd, 2010, several dozen skeptics descended on UBC for the second SkeptiCamp of 2010: a full day of science, education, questioning assumptions, and rap. Good times.

The Wisdom of Crowds

Jess Brydle had a jar full of candy corn at the back of the room, and attendants were invited to guess the number, with the closest guess winning a prize (an iPod Touch, I think). Though I tried to estimate the volume of a single piece vs. the volume of the jar, my guess (1050) was way off the actual number (around 770). On the other hand, it was almost bang on the average guess. Go me! Conformity over reality!

Google Maps

Jesse Brydle presented an interesting project: displaying bullshit and woo businesses on Google Maps. As you can see, there are a hell of a lot of them. If you look at the comments, (both on the map and Jesse’s blog post), it looks like it hit a major nerve with some of the local witch doctors—as well it should.

Reason Vancouver

Ian Bushfield presented an idea for a new Vancouver political party: Reason Vancouver. Though I approve of its mission statement of “developing policies based on reason and empiricism,” that still doesn’t tell me what those policies are going to be. Ethics (political or otherwise) is only partly based on reason and empiricism. Besides, I’m not convinced Vancouver needs an explicity secular party, since we all know facts already have a liberal bias. Still, it’ll be interesting to see how this develops.

Hamlet: The Skeptic Prince

Joe Fulgham made a good case for Hamlet being a good proto-skeptic. When the guards tell him they’ve seen a ghost that looks like his dead father, he accepts that ghosts may exist, but grills the guards, asks for details, and withholds belief until he sees the ghost for himself and talks to it. Even then, after he’s told explicit details of his father’s death, he decides to get a second opinion and trick the truth out of Claudius. The theme of Hamlet (as Joe explained, I’m only familiar with the basics) was that giving in to his passions is what destroyed Hamlet. If he had stuck to reason (and yes, skepticism), things might have been different.

I’m not totally convinced of his conclusion that Shakespeare himself was a proto-skeptic, and spoke through his characters, though. C.S. Lewis (just to pick one example) wrote a couple of skeptics in his Space Trilogy, but he himself was far from one.

Baba Brinkman’s Rationalist Rap

Meet Baba Brinkman, “the propaganda wing of skepticism.” He brought the house down with his rationalist anthem, “Off That!” Totally awesome.

I got witnessed to!

When I got back to my car in the pouring rain, I noticed a little soggy piece of paper stuck in my car’s windshield. For a second I was afraid it was a ticket (though I hear parking tickets at UBC are only a problem for UBC students), but it was something very different:

Why settle for

Why settle for “OK”?

And if you read the Bible, you’ll see Jesus is the most inclusive person ever.

With love,
A brother.

Sigh. Just like that hip-hop drive-by witnesser of years ago, here’s a guy who couldn’t help reacting to my “Born OK The First Time” and “Celebrate Diversity” bumper stickers. I’m slightly impressed that he took the time to write his note in the rain, but very unimpressed at his blinkered world view. Well, I didn’t get angry this time, just shared the note with my atheist friends at the pub afterwards and we all had a good laugh.

How to Identify Pseudoscience, Quackery, and Fraud with Dr. Harriet Hall

Okay, it’s been almost two weeks, and I’ve kept putting off blogging about this event. Partly because I’ve been extremely busy, with a new full-time job and working on my freelance career, and partly because, well, I didn’t learn anything earth-shattering. Dr. Hall’s talk at Langara College about the ins and outs of pseudoscience, what it is, how to identify it, and why people believe in it, covered a lot of ground already well-visited by people like Michael Shermer. Still, there were some good tidbits. In point-form, then:

Okay, it’s been almost two weeks, and I’ve kept putting off blogging about this event. Partly because I’ve been extremely busy, with a new full-time job and working on my freelance career, and partly because, well, I didn’t learn anything earth-shattering. Dr. Hall’s talk at Langara College about the ins and outs of pseudoscience, what it is, how to identify it, and why people believe in it, covered a lot of ground already well-visited by people like Michael Shermer. Still, there were some good tidbits.

“Thinking like a human” is not a logical way to think but it is not a stupid way to think either. You could say that our thinking is intelligently illogical. Millions of years of evolution did not result in humans that think like a computer. It is precisely because we think in an intelligently illogical way that our predecessors were able to survive…
—Morgan Levy, MD

And that quote from Dr. Morgan Levy’s book Placebo Medicine (available free online) pretty much sums up why people believe weird things.

One thing I did learn was that Jesus promoted colon cleansing. No, seriously! It’s in the Essene Gospel of Peace. Good to know whenever the old Argument from Authority is pulled out.

“Think not that it is sufficient that the angel of water embrace you outwards only. I tell you truly, the uncleanness within is greater by much than the uncleanness without. And he who cleanses himself without, but within remains unclean, is like to tombs that outwards are painted fair, but are within full of all manner of horrible uncleannesses and abominations. So I tell you truly, suffer the angel of water to baptize you also within, that you may become free from all your past sins, and that within likewise you may become as pure as the river’s foam sporting in the sunlight.

“Seek, therefore, a large trailing gourd, having a stalk the length of a man; take out its inwards and fill it with water from the river which the sun has warmed. Hang it upon the branch of a tree, and kneel upon the ground before the angel of water, and suffer the end of the stalk of the trailing gourd to enter your hinder parts, that the water may flow through all your bowels. Afterwards rest kneeling on the ground before the angel of water and pray to the living God that he will forgive you all your past sins, and pray the angel of water that he will free your body from every uncleanness and disease. Then let the water run out from your body, that it may carry away from within it all the unclean and evil-smelling things of Satan. And you shall see with your eyes and smell with your nose all the abominations, and uncleannesses which defiled the temple of your body; even all the sins which abode in your body, tormenting you with all manner of pains. I tell you truly, baptism with water frees you from all of these. Renew your baptizing with water on every day of your fast, till the day when you see that the water which flows out of you is as pure as the river’s foam. Then betake your body to the coursing river, and there in the arms of the angel of water render thanks to the living God that he has freed you from your sins. And this holy baptizing by the angel of water is: Rebirth unto the new life. For your eyes shall henceforth see, and your ears shall hear. Sin no more, therefore, after your baptism, that the angels of air and of water may eternally abide in you and serve you evermore.

Dr. Hall also quoted from Pope Brock’s Charlatan, a book about old-time huckster Charles Brinkley, who got famous by performing goat-to-human testicle transplants, to restore the energy and virility of his patients. It sounds deliciously weird, and I’ve added it to my reading list.

She concluded with a few tips on how to deal with pseudoscientific claims or theories:

  • How do I know that’s so?
  • Where’s the evidence?
  • What’s the evidence against? Is there another side to the story?

Which leads to the SkepDoc’s rule of thumb:

Before accepting a claim we should try to find out who disagrees with it and why.

Words to live by.