Compiling Invalid Objects in PL/SQL

June 25, 2008 | 4 Comments

While I do a lot of and prefer PHP and JavaScript development, my daily job has a darker side...PL/SQL. At times the packages that I oversee invalidate during upgrades or poor compilations of a package that ends up having a ripple effect.

Here's a query I wrote to find the invalid objects and generate compile statements to attempt to fix whatever is busted.

SQL:
  1. SELECT CASE object_type
  2.        WHEN 'PACKAGE' THEN
  3.         'ALTER '||object_type||' '||owner||'.'||object_name||' COMPILE;'
  4.        ELSE
  5.         'ALTER PACKAGE '||owner||'.'||object_name||' COMPILE BODY;'
  6.        END
  7.   FROM dba_objects
  8.  WHERE STATUS = 'INVALID'
  9.    AND object_type IN ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE');

Quest Software: Active Directory Recovery Video

June 20, 2008 | 3 Comments

While frittering our lives away on the internet, my friend Dan and I stumbled upon an ad by Quest Software that featured 3 dudes in funny outfits. We had to click...and this is what we found:

Dan tried to escape this Active Directory Recovery ad a few times but I made him stay...The masked guy at the end doing the robot made it all worth it.

Funny stuff :) Kudos to Quest Software!

D&D 4th Edition NPCs: Minions

June 14, 2008 | 2 Comments

Dungeon Master's GuideI received my Dungeons and Dragons 4th Edition books on Monday and have been reading over them throughout the week. Because of the difference in rules from versions 3.5 to 4, I plan on covering a number of topics related to some of the new features of 4th Edition.

Minion NPCs happen to be the topic of this post.

So, I was reading through the Wizards forums and came upon a thread relating to the confusion with Minion NPCs in combat and how to explain their really weak stats. One of the questions that was posed asked how it made sense to have a level 14 Minion Cyclops that could feasibly drop in one hit while its fellow level 14 Standard Cyclops could withstand a much heavier beating.

One sage of a user, Morholdt, had this response which I buy in to totally:

To understand minions properly, you have to understand hit points properly. Hit points do NOT represent how many stbs you can take before you fall. They are a kind of combat karma: picture it like a sports game. As a team starts losing, an indefinable sense of hopelessness sets in, making it harder and harder to come back. Bloodied represents that point when you take your first really scary shot - your arm is slashed, your nose broken, your shield arm begins to go numb from the repeated blows. When you hit 0 hit points, you take a bad wound and are out of the fight. That is why someone can decide to use subdual damage at 0 HP and not all the way through the fight. In that light, healing surges make eminent sense. In the sports analogy, a healing surge is like the feeling when your team finally scores a goal and you begin to come back.

Using that understanding of hit points, one can see that minions are not puny versions of the monsters, but they are versions with no karma. They are the marathon runner who twists his ankle after the first mile. That orc minion can kill you almost as easily as the normal orc, but when you stab him with your spear, his luck runs out and he dodges the wrong way.

Personally I love minions. I've always found it a little lame to go into a goblin village which is populated by 12 goblins, or a dungeon where the monsters never leave their rooms and swarm the adventurers because any more would make it too hard.

With minions you can have truly epic battles against foes that can actually threaten you and live to tell the heroic tale.

So...that level 14 Minion Cyclops that I talked about earlier isn't necessarily a slim, diminutive one-eyed brute that walks around with his fellow level 14 Standard Cyclops that his a hulking monstrosity with bulging biceps and a club that could fell an elephant in a single blow. Nope. The minion is the same as the level 14 Standard Cyclops...the Minion just makes a few mistakes on the battlefield that cause him his life much sooner.

If you haven't read the Dungeon Master's Guide for 4th Edition and don't know what a "Minion" is, then here's an excerpt on them from the DMG:

Minions are designed to serve as shock troops and cannon fodder for other monsters (standard, elite, or solo). Four minions are considered to be about the same as a standard monster of their level. Minions are designed to help fill out an encounter, but they go down quickly.

A Minion is destroyed when it takes any amount of damage.

I know...any amount of damage doesn't seem overly scary. However, each minion causes damage similar to a standard NPC of its type and level. Just because they fall quickly doesn't make them easy to hit or prevent them from hitting you!

The Minion role in a combat encounter is one sexy addition to 4th Edition that will make for a much richer game!

Luminis: Forcing CSS/JavaScript Updates to Clients

June 2, 2008 | 1 Comment

Introduction

I gave a talk at SunGard Summit in Anaheim this spring on Plymouth State's portal (myPlymouth). There were a number of really great questions that came up following my presentation, one of which is the topic of this post:

"How do you force a client's browser to always use the correct version of CSS and/or JavaScript in Luminis?"

When upgrading Plymouth State's Luminis installation from III to IV, we had to tackle this same issue and after banging my head against the wall a number of times, I found our answer. I wanted to:

  1. Ensure that the JavaScript and CSS that is being served up to our users can be cached by their browser in order to optimize their download speeds.
  2. Control when a user's browser has to re-download a new version of the code.
  3. Do the above within the bounds of the very restrictive caching provided by the Luminis product.

All of it was super easy to do, although I must admit I knocked my head against the wall a few times coming up with the solution to the 3rd in that list.

Step 1: Basic Browser Caching

When I sat down to tackle this problem, I knew that the inline JavaScript within nested_tables.xsl was an unforgiving issue - if I wanted to make a change to some of the inline JavaScript, those changes would not be forced upon the users until Luminis decided to let go of its cached nested_tables.xsl.

That didn't work for me. So I ripped the inline styles out and combined a few JavaScript files into one...called combined.js.

My header within the regularLayout template in nested_tables.xslnow looked something like this:

HTML:
  1. <head .......>
  2.    <title>.........</title>
  3.    <script type="text/javascript" src="/js/clientsniffer.js"></script>
  4.    <script type="text/javascript" src="/js/util.js"></script>
  5.    <script type="text/javascript" src="/psu/js/combined.js"></script>
  6.    <script type="text/javascript" src="/psu/js/behavior.js"></script>
  7.    <link rel="stylesheet" type="text/css" href="/psu/style.css"/>
  8. </head>

The files clientsniffer.js and util.js are SunGard delivered and I did not touch those two. As I mentioned before, I yanked out all the inline JavaScript (provided by SunGard) and dropped that into combined.js along with a number of jQuery code. Our own custom Luminis JavaScript that controls a lot of our Ajax-like functionality in myPlymouth is in behavior.js. And of course, style.css holds the CSS for our portal.

All of these files could now be cached by users' browsers. Yay. I bounced the development portal and saw my changes in all their glory. Life was good.

Step 2: Browser Cache, Code Changes, and You

Invigorated by my recent success of effectively doing nothing, I grabbed a soda and began tackling the next objective. I had done this numerous times in my PHP applications and it was as simple as placing a version number at the end of the URLs used in the link and script tags. As such:

HTML:
  1. <head .......>
  2.    <title>.........</title>
  3.    <script type="text/javascript" src="/js/clientsniffer.js"></script>
  4.    <script type="text/javascript" src="/js/util.js"></script>
  5.    <script type="text/javascript" src="/psu/js/combined.js?v=1.0.0"></script>
  6.    <script type="text/javascript" src="/psu/js/behavior.js?v=1.0.5"></script>
  7.    <link rel="stylesheet" type="text/css" href="/psu/style.css?v=1.0.5"/>
  8. </head>

Once again, I bounced our portal, saw the changes, and danced around the room. Step 2. Accomplished.

Step 3: Taming Versioning/Cache Expiration in Luminis

The goal of taming this versioning/cache expiration was to do so without the need for bouncing the portal so I could make changes on the fly without planning for down times. Step 2 - as I detailed above - only gets you so far. With Step 2 in place, I could easily make a change in my CSS file and edit nested_tables.xsl to one-up my version number. But, because nested_tables is cached by Luminis, that wasn't good enough. Here's what I came up with:

I removed the script and link tags in the header of the regularLayout template in nested_tables, created a file called load.js, and dropped the homeless script/link tags as document.writes in load.js...as so:

Start of a Solution: load.js

JavaScript:
  1. document.write('<script type="text/javascript" src="/js/clientsniffer.js"></script>');
  2. document.write('<script type="text/javascript" src="/js/util.js"></script>');
  3. document.write('<script type="text/javascript" src="/psu/js/combined.js?v=1.0.0"></script>');
  4. document.write('<script type="text/javascript" src="/psu/js/behavior.js?v=1.0.5"></script>');
  5. document.write('<link rel="stylesheet" type="text/css" href="/psu/style.css?v=1.0.5"/>');

But wait...

This gave me a file with all of my script/link tags and their appropriate versions. However...I couldn't simply replace all those script/link tags with a script tag that pointed at load.js because load.js itself would be cached by users' browsers. So this got past the Luminis caching, but not our end users. So I came up with this:

Final Solution: pre_load.js

So...I wanted to cache all my sub-files and prevent load.js from caching so that I could version my scripts easily without bouncing the portal. The solution? Yet another file! I called it pre_load.js and it looks something like this:

JavaScript:
  1. document.write('<script type="text/javascript" src="/psu/js/load.js?nocache=' + (new Date()).getTime() + '"></script>');

A simple document.write of a script tag with an appended variable based on time in order to prevent caching on the browser side. Yup...load.js is never cached, but it is a small price to pay.

Now my header in the regularLayout template in nested_tables.xsl looks like this:

HTML:
  1. <head .......>
  2.    <title>.........</title>
  3.    <script type="text/javascript" src="/psu/js/pre_load.js"></script>
  4. </head>

How it works

  1. Luminis happily caches the pre_load.js script tag in the nested_tables.xsl.
  2. The JavaScript within pre_load.js writes another script tag to the document at render time. That script's URL is a call to load.js along with a variable that changes each page load thus preventing load.js from being cached.
  3. load.js then document.writes the appropriately versioned script/link tags into the document.
  4. The individual script/link tags load the associated JavaScript/CSS files. If the browser has already cached that script/link URL (remember, we change the version numbers when we make changes to the JS or CSS), then the cached file is loaded...otherwise the new version is retrieved from the server.

Summary

The set-up is fairly basic but the results just what we were hoping! And all it took was:

  1. Placing inline JavaScript into a file (combined.js)
  2. Creating load.js to document.write script/link tags
  3. Creating pre_load.js to document.write a script tag that uses a cache-free URL call to load.js

To date, we have not had any reported issues with local or server-side caching of our JS/CSS files using this method! You just need to make sure you remember to version your URLs in load.js!

Cyanide & Happiness Graces the Chalkboard at ROFLCon

April 26, 2008 | 3 Comments

So, as I mentioned, I'm at ROFLCon and one of the attendees whom I was excited to see was Cyanide & Happiness. After their session on Making it Big (also on the panel: Homestar Runner, Rooster Teeth, etc) - Cyanide & Happiness graced the chalk board with a wonderful piece of art:

Sadly, Matt Chapman didn't do any Homestar Runner voices (other than a little Strong Bad).

ROFLCon 2008

April 26, 2008 | Leave a Comment

I'm at ROFLCon in Boston this weekend and there are a number of really cool guests here and speaking. Some quick names/groups: Leeroy Jenkins (Ben Shulz), Homestar Runner, xkcd, StuffWhitePeopleLike, I Can Has Cheezeburger, LOLCode, LOLCatBible, Cyanide & Happiness, and many more.

The conference has been fun thus far with some great swag; loose talks; insights into surviving fame, growing with your community, and shrugging off hate; monetization; humor; etc!

Doctor Horrible’s Sing-Along Blog

March 17, 2008 | 3 Comments

It appears that Joss Whedon - writer god that blessed us with Serenity - decided to write a sweet new masterpiece called "Doctor Horrible's Sing-Along Blog" during the writers strike! Felicia Day is saying that it is an internet Musical. Yup. Internet. Musical. w00t!

Joss writes:

It's the story of a low-rent super-villain, the hero who keeps beating him up, and the cute girl from the laundromat he's too shy to talk to. And I'm having the time of my life.

The super villian - Doctor Horrible - will be played by Neil Patrick Harris. The hero - Captain Hammer - by Nathan Fillion, and the cute girl - Penny - will be played by one of my favorite YouTube stars: Felicia Day of The Guild!

Sadly there isn't a ton out there regarding this epic musical, but I'll be waiting and watching. Joss Whedon. Nathan Fillion. Felicia Day. Neil Patrick Harris. Awesome.

The Best Photoshop Tutorials Ever

March 7, 2008 | 3 Comments

My Damn Channel, an entertainment studio, has a series of Photoshop tutorials that are hilarious and...well...really good. I saw You Suck At Photoshop #8 via Digg and ended up watching them all. Really good stuff.

Here's #7:

High Resolution YouTube Videos

March 3, 2008 | 1 Comment

As reported by Slashdot, YouTube is rolling out high resolution video! Despite the fact that this feature isn't fully implemented, for those of you that can't wait - like myself - you can view the high-res versions simply by changing the URL like so:

Change This:

http://youtube.com/watch?v=CQzUsTFqtW0

Into:

http://youtube.com/watch?v=CQzUsTFqtW0&fmt=6

Yup! Just tack on &fmt=6 to the end of the YouTube video URLs and enjoy the high-res goodness.

Cybernet News additionally states:

If the YouTube video just sits there loading then that is a sign that the video has not been converted to the higher resolution yet. To really see the difference you should view the video in full screen mode by clicking the button in the bottom-right corner of the player.

Note: Alternatively you can add &fmt=18 and it will play the high-resolution version when available, otherwise it will play the regular version. Here’s a Greasemonkey script that will automatically add &fmt=18 onto the end of each YouTube URL.

Note: YouTube has millions of videos and this feature isn't officially released...so it will take some time for the high-res feature to become available on many videos. But...the URL tweak is worth it if it means there is a chance the video is higher quality.

Star Wars: Blowed Stuff Upped

February 25, 2008 | 1 Comment

This little girl is awesome. She pretty much summed up Episode IV!

DotA 6.51 Released

February 23, 2008 | 10 Comments

DotA 5.1 has been released! You can get it here or here. Here's the changelog:

  • Fixed a bug with Kellen's Dagger that caused it to sometimes not get disabled when hit
  • Fixed Land Mines tooltip
  • Increased cast range of Kelen's Dagger
  • Undid previous Bottle changes. Bottle now works as follows: Costs 600 gold, does not require mana to refill, auto-fills it when you are near fountain, rune refills it to full, resells at 50% like normal, purchasable at base only, regenerates less than previously, has no usage cooldown.
  • Fixed Medusa's Mana Shield from triggering Essence Aura
  • Fixed Searing Arrows' tooltip
  • Changed Hyperstone purchase hotkey to fix a conflict
  • Fixed a bug with Invoker when creating illusions
  • Updated Kelen's Dagger tooltip
  • Undid some of Morphling's base damage buff from last version
  • Fixed Bloodrage tooltip
  • Fixed Pulse Nova and Invoker's Reagents from triggering Last Word
  • Smokescreen interrupts teleportation once again
  • Color coded Invoker's spell descriptions (203050)
  • Improved Sange's percentage and Yasha's percentage, and lowered the recent buff on S&Y a little
  • Fixed Vladmir's Offering sell cost
  • Increased Counter Helix chance by 2%
  • Minor bonus armor in True Form
  • Improved the effect timing on Split Earth (187877)
  • -swapcancel code is triggered when a swap is successful (to prevent other accidental swaps)
  • Improved Shuriken Toss cast range
  • Added new Backtrack icon (183079)
  • Changed Battlefury recipe slightly
  • Lowered Poof casting time from 2 to 1.5 seconds
  • Lowered Elder Dragon Form's manacost and cooldown a little
  • Added neutrals field to -cs
  • Changed Phantom Edge's secondary ability from evasion to magic resistance
  • Replaced Phantom Assassin's Shadow Strike with a different similar ability (132694)
  • Fixed a minor coding bug with Time Lapse
  • Fixed Impale based spells from moving Juggernaut during Omnislash
  • Added new icon for Melting Strike
  • Reduced some lag with Invoker
  • Fixed level 1 March of the Machines doing slightly less damage than intended
  • Removed stock cooldown on Ironwood Branch
  • Added a new system that tracks when you help an ally kill a hero (no gameplay ramifications at this point)
  • -swap is now allowed in -sd
  • Fixed some minor neutrals' vision and pathing glitches
  • Lowered level 1 and 2 cast range on Replicate
  • Lowered Phantom Assassin's cast animation time
  • Fixed a bug with Exorcism's cooldown after leveling Witchcraft
  • Fixed some issues with -ah
  • Refined how some kill related messages and sounds are shown
  • Increased mana regeneration on Perseverance by 25%
  • Lowered Buriza recipe by 250 gold
  • Changed Voodoo Restoration to heal over a smoother interval (same total regen)
  • Lowered Manta Style's cooldown a bit
  • Fixed a bug with Voodoo Restoration and Impales
  • Fixed a bug with invoker in -spreverse
  • Fixed some inconsistencies with tower visions (TheLoneWolf14)
  • Increased duration of Lycanthrope's wolves a bit and allowed them to attack air
  • Temporarily disabled -unstuck command

Star Wars: Episode 2 1/2

February 13, 2008 | Leave a Comment

On August 15th, 2008 Star Wars hits the big screen once more, but this time as an animated film titled "Star Wars: Clone Wars." Animated? Yeah...sweet CG with an animation style that really turns me on. The film itself is geared as a kick-off for the upcoming Star Wars animated series of the same name that will be airing on Cartoon Network (and eventually TNT)...all of which takes place between Attack of the Clones and Revenge of the Sith.

Picture 2.png

Star Wars writes:

On the front lines of an intergalactic struggle between good and evil, fans young and old will join such favorite characters as Anakin Skywalker, Obi-Wan Kenobi and Padmé Amidala, along with brand-new heroes like Anakin's padawan learner, Ahsoka. Sinister villains -- led by Darth Sidious, Count Dooku and General Grievous -- are poised to rule the galaxy. Stakes are high, and the fate of the Star Wars universe rests in the hands of the daring Jedi Knights. Their exploits lead to the action-packed battles and astonishing new revelations that fill Star Wars: The Clone Wars.

I am extremely excited to see both this movie and the animated series. The cinematics look amazing. If you haven't seen the trailer yet, check it out...it looks freaking awesome.

The fact that the new movie (and series) will be focusing on a larger cast of characters beyond Anakin's storyline makes this The Clone Wars very appealing to me. We'll see focuses on Kit Fisto, Ahsoka, Clone Trooper Rex, General Grevious, and many more. That is quite exciting to me! I'll definitely be waiting in line on August 15th.

Picture 3.png

LOLCat Bible: In Ur Religionz Translatin Ur Wordz

January 15, 2008 | Leave a Comment

LOLCat Bible Need a way to introduce religion to your cats but people words are just too hard to understand? The LOLCat Bible is the answer. Written in a way that cats can understand using the handy dandy (and ever so entertaining) LOLSpeak made popular by the LOLCat images (often found at I Can Has Cheezeburger?).

Upon arriving at the LOLCat Bible you are greeted with this beautiful blessing:

Welcom to Teh Holiez Bibul

Hai! Teh blessigs of teh Ceiling Cat b pwn u, lol! This is a translation wiki to get the entire Bible translated into kitty pidgin (the language of lolcats). Zotnix saw a link to a picture with this done to Genesis and thought, "Why not the whole darned book?" Well, here is that effort.

The project - done a la Media Wiki - is surprisingly far along with many more Bible verses translated than I would expect! It is important to note that, while this is a collaborative translation of the Bible with excellent attempts at retaining each verse's meaning, a few words have been altered to give cats an easier time understanding the Bible's typically human-geared contents. Some of those changes are as follows:

  • Earth: urths
  • God: Ceiling Cat
  • Jesus: Jebus
  • Sex: "HARBL GOES WHERE?"
  • Heaven: Ceiling
  • Sin: Invisible Error
  • Blessing: Cheezburger
  • Seriously: Srsly

Here are some of the sweet translations:

John 3:16

So liek teh Ceiling Cat lieks teh ppl lots and he sez 'Oh hai I givez u me only kitteh and ifs u beleevs in him u wont evr diez no moar, k?'

Psalms 23

  1. Ceiling Cat iz mai sheprd (which is funni if u knowz teh joek about herdin catz LOL.) He givz me evrithin I need.
  2. He letz me sleeps in teh sunni spot an haz liek nice waterz r ovar thar.
  3. He makez mai soul happi an maeks sure I go teh riet wai for him. Liek thru teh cat flap insted of out teh opin windo LOL.
  4. I iz in teh valli of dogz, fearin no pooch, bcz Ceiling Cat iz besied me rubbin' mah ears, an it maek me so kumfy.
  5. He letz me sit at teh taebl evn when peepl who duzint liek me iz watchn. He givz me a flea baff an so much gooshy fud it runz out of mai bowl LOL.
  6. Niec things an luck wil chase me evrydai an I wil liv in teh Ceiling Cats houz forevr.

1 Corinthians 13:4-7

  1. Cheezburger are pashient an kind, cheezburger no has jelusniss or showin offz, cheezburger no are OMGWTF when u step on its tail or turn on teh vacuum cleanr, but are basickly delishis.
  2. Cheezburger no insistzes on doin it rite, itz not pisst off alla tiem or rezentfluffle.
  3. Cheezburger DO NOT WANT inikwitee, but DO WANT teh troofs.
  4. Cheezburger putz up wiht all teh stuffz, beelivez all teh stuffz, hoepz for all teh stuffz. Cheezburger putz up wiht all teh stuffz. i sed that areddy.

Needless to say, I was ROFLCoptering all over the place.

As you browse around the wiki, if you find a scripture that isn't translated yet and you wish to help out, make sure to follow their guidelines before posting! Heck, read them anyways because they are funny in and of themselves.

All told...a good find over the weekend!

Tutorial: Digital Coloring 1

January 6, 2008 | 5 Comments

I did up a quick and rough tutorial for coloring a dude's face in Photoshop. This is my first time using FLV video of my own creation so bear with me :)

Star Wars Pronunciations

December 30, 2007 | 5 Comments

Star Wars Yeah, I'm a Star Wars fan. I've read over 50 Star Wars books, have played the CCG, the RPG - d6 AND d20, I'm a member of The Dark Jedi Brotherhood, and I do a lot of Star Wars art. As such, I encounter a number of Star Wars-y names/terms in writing that I make assumptions on their pronunciations. Then, days, months, or years later I find out that the actual pronunciation does not match mine and my brain implodes with frustration. In conversations with fellow Star Wars geeks, I find that many of them are wrong as well.

A little while back, I did some searching and found a nice list of Star Wars pronunciations over at StarWars.com. Here are a few that may help ease your frustrations:

  1. Asajj Ventress - ah-SAAZJ
  2. A'Sharad Hett - AA-shaa-raad
  3. Borsk Fey'lya - BORSK FAE-lee-yaa
  4. Caamasi - kaa-aa-MAH-see
  5. Corran Horn - KORR-runn
  6. Darth Caedus - KIE-duss (rhymes with "hide us")
  7. dianoga - die-aa-NOE-gaa
  8. Elegos A'kla - ELL-ehh-goes AA-klaa
  9. eopie - ee-OE-pee
  10. Executor - igg-ZEKK-yoo-tur
  11. Honoghr - HONN-noe-gerr
  12. Ilum - ILL-umm
  13. Jabiim - jaa-BEEM
  14. Jacen Solo - JAE-senn
  15. Jorj Car'das - george CAR-dass
  16. Joruus C'baoth - joe-ROOS suh-BAE-oth
  17. Kir Kanos - KEER KAE-noes
  18. krayt dragon - KRATE
  19. Nar Shaddaa - NAR shah-DAA
  20. Noghri - NOE-gree
  21. Captain Pellaeon - PELL-lay-onn
  22. Tycho Celchu - TIE-koe SELL-choo
  23. Vergere - vur-ZJEER
  24. Prince Xizor - SHEE-zor
  25. Shi'ido - shee-EE-doe
  26. Ssi-ruuk - SEE-rook
  27. Twi'lek - TWEE-lekk
  28. Yevetha - yeh-VEE-thaa
  29. ysalamiri - ee-saal-aa-MEE-ree
  30. Ysanne Isard - ee-SAAN IE-sard
  31. Yuuzhan Vong - YOO-zaan
  32. Zonama Sekot - zoe-NAH-mah SEE-coat

« Previous PageNext Page »