Liz Norton

About Liz Norton

Liz Norton is a developer and Code Monkey at Matrix Group. You can often find her playing with her dog, biking, or practicing her Irish dancing moves for her debut on Riverdance. Something you may not know about Liz: “I can recite almost all of the lines from the movie ‘Project ALF.’”

A Twitter Logo CDN?

Twitter logoTwitter has grown immensely since its creation six years ago. Any brand that is growing will inevitably revamp its website and collateral along the way.Twitter is no different and has undergone several logo changes of late. With the new logo changes, Twitter provides detailed documentation about exactly how their collateral should be used. This makes sense. During a time where  one’s brand identity is hugely important and can be digitally manipulated,  it’s important to have firm boundaries.

What I don’t understand, though, is how a social media giant like Twitter isn’t, well, more social in providing its logo and collateral to users. Continue reading

Using Google’s PageRank Algorithm to Detect Cancer

Using algorithms to determine relevant related content by ranking content and linking? Pretty brilliant. Using those same algorithms to predict cancer growth? Really brilliant.microscope

Researchers in Switzerland and Germany recently published an article in Public Library of Science Computational Biology about using Google’s PageRank algorithm to predict cancer growth: Google Goes Cancer: Improving Outcome Prediction for Cancer Patients by Network-Based Ranking of Marker Genes.  (Now, in the interest of full disclosure, I have to admit that I didn’t read the whole paper in PLoS Computational Biology.  I did, however, read a fascinating review and digest by on the paper on Txchnologist: Googling Cancer: Search Algorithms Can Scan Disease for Patient Risk.)

Continue reading

Essential Chrome Web Dev Extensions

Everyone has different preferences for preferred browsers and plug-ins when working.  My current favorite set-up is Google Chrome with the following extensions installed.  
Here’s what I use and why:
  • Adblock Plus – My favorite ad blocking program/plug-in.  I’ve used this across multiple browsers and platforms.  It’s easy to use and helps cut down on ads competing for my attention when I am searching for solutions and examples on the interwebs.
  • Firebug Lite – A great code inspection tool that I like to use in conjunction with Chrome’s built-in inspector.  Chrome’s inspector has more functionality than Firebug Lite, but I still prefer Firebug Lite’s method of inspecting individual page elements.
  • JSONView – Ever tried reading a block of non-formatted JSON?  It’s not pretty.  Fellow developer Craig saved my life (or at least my eyesight) one day when he told me to go install the JSONView extension by gildas.  Now reading JSON is 1000% better.
  • LastPass – A fantastic password manager integrated into your browser of choice.  It allows me to easily pre-populate log ins and forms when I am working on a project in a secure manner.  I have to log in with my credentials before the extension will retrieve username and password information  and once I log out, no one else can get  to my stored log ins.
  • Web Developer – Select colors from the screen.  Measure page elements.  Display form elements and values.  Outline tables and divs and spans. Display print styles.  The list of things amazingly useful things that the Web Developer extension can do goes on and on.  If I could have only one extension for Chrome, it would be Web Developer.  Hands down.

What extensions do you find essential?

The Purple Pranksters: Why Pranking is Good for the Soul

If you’ve followed Matrix Group in the past, be it on Facebook or The MatriX Files, you’ve probably realized that while we take work seriously, we definitely do not take ourselves seriously. Dan's Tropical Island prank

It’s not uncommon to find someone taking a brain break playing our Simpsons Pinball machine or engaging in creative feats of Nerf derring do.  (Pro tip: Playing William Tell with an apple on the head and a Nerf Hatchet ends better than scooter jousting using Nerf Broadswords.)  Sometimes we take old toy helicopter motors, coffee stirrers, plastic toy camels, and bouncy balls and turn them into a whirling circus act, complete with circus theme music.  And on special occasions, we turn programmer Dan Fisch’s cubicle into a cardboard house or a tropical beach locale.

Now, using my amazing predictive mind powers, I will answer your next question: We do actual work all the time.  The brilliant thing about Matrix Group is the understanding that while we play hard, it allows us to work hard as well.  Staying late to fill a kiddie pool with 30 lbs of lemon Jell-O or convening on the week-end to build a Moai head out of papier mâché allows the whole staff to come together, bringing together new business and developers, designers and network administrators, building camaraderie while undertaking our tongue-in-cheek projects.  Our brief bursts of Nerf warfare and SimpsonsBuilding the Moai head Pinball allow us to step away from a difficult problem, rest, reset and return with a better perspective.

What kinds of things do you do to build camaraderie and get a better perspective at work?

P.S. —  30 lbs makes A LOT of Jell-O.  We still have 20 lbs leftover.  Please someone, take all of this Jell-O.

Cfqueryparam and Query Schema Caching

The other day I was working on a report that was running for minutes before finally timing out. The report was written in ColdFusion and queried the database.  I manually ran the query in SQL Manager.  It ran in less than a second.  Checked ColdFusion and server timeouts: all OK.  What in the world was causing this query to behave so strangely?Puzzle pieces

At last I tried an experiment: Remove the cfqueryparam tags from the code … the query runs fine; add the cfqueryparam tags back … the query slows to a crawl.

After being baffled as to why in the world the use of cfqueryparam tags would cause a query to misbehave so badly, I shared my mystery with fellow developer Eric Mosel, who promptly found an answer:  The query schema was being cached.  

Queries with cfqueryparam tags use Java prepared statements, causing the database to treat the query as a stored procedure. This means that even if changes to the table are made, the old query schema is being used when ColdFusion tries to execute the query, as nothing flags the database changes to your “stored procedure.” [1]

What to do, then, to refresh the query schema?

Option 1: OPTION (RECOMPILE)

To fix my long-running query, Eric suggested that I use a T-SQL Query Hint, OPTION (RECOMPILE), to force my query to re-compute its execution plan every time it runs.   This isn’t ideal for all queries, as the SQL server usually does the best job of coming up with an execution plan for queries. However, in this case it was necessary and solved the problem.

Option 2: Add a Semicolon

When the query schema is being cached, the exact text of the query matters.   If you change the query in ColdFusion, it causes the query schema to be refreshed.  But how to change the query when you don’t want to change the query but do want to refresh the schema? Add a semicolon to the end of your query.  Semicolons are the end-of-statement characters in SQL, and while not required for ColdFusion queries, are allowed and are enough of a change to force your query schema to refresh.

Have you run into this problem?  How did you solve it?

[1] Comment from Brandon Purcell, on Ray Camden’s blog post Odd Issue w/ CFQueryParam