Nov 15

There's a legacy app I work on that currently requires adding 4 columns and a couple rows (in different tables) every time you add a row to another table. It doesn't happen often and it would be a nightmare to refactor so I wrote little script that would search the database for any columns named 'x' as well as any fields with a value of 'x' and return an array of the offending tables.

I cleaned it up a little bit and cfc-ized it in case I ever have to do anything similar. I haven't tested it at all aside from the one time I ran it today so use it at your own risk. It's really simple to use, you just need to pass in the ColdFusion datasource name and the search term.

Example Usage:

<cfset db_util = CreateObject("component","db_util").init(dsn = "datasource_name")/>
 
<cfoutput>Looking for column <strong>#search_term#</strong></cfoutput>
 
<cfdump var="#db_util.FindColumn(search_term)#">
 
<cfoutput>Looking for value  <strong>#search_term#</strong></cfoutput>
 
<cfdump var="#db_util.FindValue(url.looking_for)#">

Download ColdFusion MySQL Search Utility!

PS: it won't search numeric columns if you aren't searching for a number.

Nov 07

I wanted to demo an ad rotator the other day at work and I wanted to load up a bunch of images of various sizes to make it look legit. It would have taken forever to do it ad by ad, so I wrote a little ruby script to automatically resize all the images in a directory. Then I used my directory listing utility to copy the files into my clipboard. Pasted into the database from there!

(Requires GD2)

Usage:

 r = Resizer.new input_path, output_path, width, height
 r.crop_files

Download it!

Oct 24

Here's another little utility I put together. It uses my clipboard utility to copy and format xml data stored in the clipboard. Just copy, run the script and paste!

It comes in handy.

I got (and ever so slightly modified) the xml formatting code from DZone.

Download the bundle!

Oct 16

Here's a nice bookmarklet I recently came across. The Firefox web developer add-on has this built in, but if you're chromin' it up then this works quite nicely. Doesn't work in IE at the moment. No comment.

http://www.phpied.com/form-auto-fill-bookmarklet/

Oct 02

I made a small update to my ruby clipboard utility. Now it works in both Windows and Gnome...*ahem* again.

In particular I renamed my Clipboard class to Clipboardr to avoid a naming conflict.

Download the code!

Sep 23

Here's a little something I was working on today. The goal was to model an HTML unordered list in JavaScript so I could easily add/remove and display elements. I haven't gotten around to actually writing all of the display methods because I haven't exactly figured out how I want to use it yet.

PS: I kinda re-remembered the toString method on this one.

PPS: Requires prototype

Example Usage:

set up the list

list1 = new List();
list1.add('a');
list1.add('b');
 
list2 = new List();
list2.add('b1!');
list2.add('b2!');
 
// nest away!
list1.add(list2);
list1.add('c');
list1.add('d');

li data

alert(list1.get_at(1).data);

remove li

list1.remove(4);

alert the list

alert(list1);

BAM!

Download the code!

Sep 18

In keeping with my current "blog-more-about-less" stratagem I thought I'd post a little JavaScript utility I wrote. The idea was just to add "next" and "previous" buttons to an existing gallery, but I thought I'd have a little fun with it, as it may come in handy in the future.

The idea was to create a simple slider object that would keep track of the users position in an array of items. I could cycle through the items, backwards and forwards and fire of item methods. For the gallery I only had to worry about a few basic properties and methods, but I wanted to design this in such a way that adding properties and functionality to my objects would be a breeze.

PS: Current the slider object expects your items contain the methods "update" and "show". I *know* this is bad, but I've had a hard time coming up with a solution that I liked better.

PPS: The example code I'm posting below was done using Prototype and ColdFusion, neither of which are required but are there because I thought it made it easier to get the point across.

Alright, enough gibber jabber.

Image Object:

function Image(thumb,large,caption) {
      this.thumb = thumb;
      this.large = large;
      this.caption = caption;
      this.show = function() {
          showPhoto(this.large,this.caption);
      }
      this.update = function() {
          $('largeImg').src = this.large;
          $('photoCaption').update(this.caption);
      }
  }

Create and fill it up!

gallery = new Slider();
// don't forget to escape those special javaScript characters!!!!
<cfloop query="gallery">
      gallery.add(
          new Image('#thumb#','#large#','#caption#')
      );
</cfloop>

Attach the "previous" and "next" methods to my links. <3 unobtrusive JavaScript!

Event.observe(
      'previous',
      'click',
      function() {
          gallery.previous();
      }
  );
  Event.observe(
      'next',
      'click',
      function() {
          gallery.next();
      }
  );

And finally, on the actual thumbnails on the page:

<cfloop query="gallery">
      <!--- This should probably be done unobtrusively,
               but it's just so darn convenient! --->
      <a onclick="gallery.show(#gallery.currentRow - 1#); return false;" href="##">
            <img src="#thumb#" alt="" />
      </a>
</cfloop>

Download the code!

As always, this solution is far from perfect, and I'd love feedback!

Sep 04

I wrote a little renaming utility to help me with the all too common task of file re-naming that seems to keep coming up. The class itself is pretty general; the idea is to extend it and override the "valid_file" and "format" methods for whatever specific task I'm doing.

The "valid_file" method is intended to recognize which files need to be renamed in the case you've got files you don't want to touch in the directory. By default the function just ignores the "." and ".." in the directory listing.

The "format" method is used to to specify the actual rules and routine to use when renaming your file. By default it replaces spaces and dashes with underscores.

Finally, this isn't "finished" software. No error checking, no notes. It works for me and maybe it'll work for you too.

Here's an example class I wrote using the renaming utility. It'll prepend the string "prepend_" onto all png files in the specified directory. Note that there's a "safe_mode" variable passed in the constructor. Setting the "safe_mode" to true will prevent the files from being renamed while you're working on it.

 
require 'renamer'
 
safe_mode = false
 
class Example < Renamer
 
  def format file
    file = custom_format(super(file))
    puts file
    return file
  end
 
  def valid_file file
    valid = super(file)
    valid = valid && file.include?('.png')
    return valid
  end
 
  def custom_format file
    return "prepend_#{file}"
  end
end
 
if __FILE__ == $0
  path = ARGV[0]
  r = Example.new(path,safe_mode)
  r.rename_files
end

Download the code: Ruby File Renaming Utility

Sep 01

I have a few ruby scripts that I use to make life a little easier at work. Some of said scripts utilize the clipboard. My work machine is windows and my laptop runs Ubuntu. I'm able to use the same scripts on both computers but I have a few qualms with how I'm doing it.

Right now I've got classes for gnome and windows, a clipboard wrapper class to be used by my scripts and a basic (and poorly named) OS class I use to determine which class desktop class to use.

First off, the method I'm using to determine OS is...terrible. Currently I'm doing a string comparison in my OS class, but it doesn't actually tell me which desktop application I'm actually running, so at the moment it's just a dirty hack but I'm not sure of the preferred way to do it..

def is_linux
  return RUBY_PLATFORM == 'i486-linux'
end

Second, I'm uncomfortable with how I'm importing my desktop specific code in the main clipboard class. Is there a ruby-er way of doing this, or maybe just a smarter way anyone knows of?

class Clipboard
  def initialize
    os = OS.new
    if(os.is_linux)
      require 'clipboard/clipboard_gtk'
      clipboard = GTKClipboard.new
    else
      require 'clipboard/clipboard_win32'
      clipboard = WinClipboard.new
    end
    #other stuff
end

Any help would be greatly appreciated!

Download the code: Clipboard Utility

PS: I realize there's quite a bit of other stuff I need to do to really get this usable, but you have to start somewhere!