DTS in Sql Server 2008

December 18th, 2009

If you manage lots of SQL Servers no doubt you will have some DTS Packages to work with…. my new install of Sql Server 2008 did not come with the features necessary to work with legacy DTS. (nord did 2005, I understand its depreciated, but this is annoying.)

Don’t be fooled by the install… the Compatibility Tools aren’t enough to get up and running. I found these instructions by Microsoft, which require MANUAL copying of DLLS and such.

http://msdn.microsoft.com/en-us/library/ms143755.aspx

But although I was able to get DTS to work in 2005, the same is not true for me in 2008… It’s time for me to fire up a new VM, hopefully you will have better luck.

Uncategorized

JQuery Google Suggest (jquery.gsuggest.js)

December 9th, 2009

I was unable to find an jQuery autocomplete / jQuery autosuggest plugin available that met my exacting standards. While there are a good number of plugins available in the plugin repository, they are either too large, poorly written, or simply do not work as expected. In addition to this, the ones I reviewed lacked extensibility and a good default configuration.

I decided to write my own jQuery autosuggest plugin (GSUGGSET), and give back to the community.

Project Requirements

  • memic the behavior of Google Suggest
  • make implementation as easy as adding suggest=”yes” to an input:text
  • allow for simple integration of ajax or inline datasets
  • intelligent caching
  • light weight

Default Configuration

  • ‘debug’: false
  • ‘url’: ‘/suggest.cfc’
  • ’size’: 10
  • ‘cacheenabled’: true
  • ‘cacheaggressive’: false //false – when user press ESC cache set is deallocated, true – cache set exist for duration of session
  • ‘cacheforward’:false, //true – complete cache dataset, false – incomplete cache datasets
  • ‘casesensitive’: false
  • ’sort’: true
  • ‘css0′: {’position’:’absolute’, ‘z-index’:’1′, ‘display’:’none’}
  • ‘css’: {’background-color’:’#ffffff’, ‘border’:’solid 1px #000000′, ‘margin’:’0px’, ‘cursor’:’pointer’, ‘color’:’#000000′, ‘padding’:’0px’}
  • ‘highlight’: ‘#bcd5ff’

Usage Information

While I wrote this plugin to be as simple and intuitive to use, there are some things you should be aware of before using it.

  1. The dataset used by the plugin must be a JSON String Array.
  2. There are two ways to assign a dataset to the input:text:, Inline & AJAX
  3. The nosubmit attribute you see in the examples above prevents the form from submitting when enter/return is pressed. This overrides the default browser behavior, but it is up to you to decide if you want to use this.

————————————

A. Using an Inline Dataset

An inline dataset is one that does not make a round trip to any server to get a collection of data used for the suggest-box. To use this, simply add the parameter suggestvalue=”" to your input:text. Note, the suggest_value must be a JSON Array.

html: <input type="text" name="attorney_name" value="" size="100" suggest="yes" suggestvalue='["Micah","Shawn","Charles"]' nosubmit>

*The sugget_value does not need to be sorted, thats handled automatically.

B. Using an Ajax Dataset

An AJAX dataset is one that communicates with a server in the background to get a collection of data (when necessary thanks to caching) used for the suggest-box. To do so, you will need to pass the address of your ajax call (wether that be a cfm page, asp .net, php, whatever) to the URL Config Option.

jQuery(document).ready(function(){jQuery.gsuggest({'debug':true,'url':'myAjaxPage.aspx'})});

That page will receive two url parameters in its get request: value & method. value is the value of the input:text after keyup and should be used to execute a query and return a JSON String Array. method is an identifier to allow multiple queries to be executed inside a single ajax page. I prefer to have all of my suggest queries in one file, suggest.cfc, and you will see that reflected in the defaults.

html: <input type="text" name="attorney_name" value="" size="100" suggest="yes" nosubmit>

MIT License/GNU License

http://www.opensource.org/licenses/mit-license.php

http://www.gnu.org/licenses/gpl.html

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.

jQuery Google Suggest

ECMA Script 5 approved at long last!

December 8th, 2009

10 years in the making, but the standards body finally agreed. Here it is:

http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

Uncategorized

Adobe ColdFusion Builder

December 7th, 2009

Ten years late, Macromedia/Adobe releases the next-gen ColdFusion Studio. The beta2 is available for free now so grab it while you can:

http://labs.adobe.com/technologies/coldfusionbuilder/


Uncategorized

Dictionary / Wordlists

December 2nd, 2009

In addition to the provided dictionaries being great for spell-checking routines, if you have a large library of backed up files and ever forget the password you used on an archive your in for a long road ahead. Assuming an inability to discover any binary hack, and there is no alternative method, you might want to consider a Dictionary Attack as your next choice for recovery. Put simply, a Dictionary Attack is where you try a large list of previously generated words until you find one that works.

Since everyone has their own style and pattern to passwords you need to approach this with some careful planning… but here are some general-use dictionaries and word lists I found online.

you may want to consider utilizing this dictionary (and the other wordlists) as a starting point. You can then “upgrade” them by converting it to upper-case or a combination of cases subjectively depending on how you typically create your passwords. Either way, it’s a start in the right direction!

If a Dictionary Attack fails, your only option is going to be a Brute Force attack… which will take lots and i mean LOTS of time. You will need to consider every combination of lower-case/upper-case/numeric/symbol one at a time. If I recall my high school math correctly it’s the number of different characters (DC) to the power of the total number of characters (TC) in the password or DC^TC.  Think about that, thats something like over 4.7 trillion combinations for an eight character password :) And thats assuming you KNOW the password is a full eight characters… otherwise its much more!

That having been said I’ve always been interested in this method since its pretty much an absolute guarantee, theoretically anyway, that it will at some point discover your old password even if it takes a thousand years with todays technology. In general though, most passwords, especially those of home users can be reasonably brute-cracked with enough know how. Large distributed systems are often if not as a rule always necessary and can help by spreading the workload, but you’ll need to have the know how to create the software, the equipment to manage it, and the network of people to help you run it.

Be very cautious about using any prebuilt “cracking” software… it takes too much time to isolate and make sure its not sending all your passwords to a hacker or doing something else that creates a huge security risk.. but if you can’t write your own software and have absolutely no other choice make sure you use an open source library with good references. Otherwise consider installing it on a virtual machine and lock it into an “island” where its on a completely different subnet or whatever.

For information on algorithums, and additional references:

Peace, and keep on coding!

Uncategorized

NotePad++

December 1st, 2009

I recently realized just how incapable notepad is.. if you need to open large text files you can forget it! A friend recommended NotePad++ as a replacement utility and I can say it works extremely well. I recommend checking it out if you do any computer work.

http://notepad-plus.sourceforge.net

Uncategorized

Open Source Wiki

September 10th, 2009

I was recently asked to create a knowledge base system at work… knowing that there were plenty mature open source projects that would work well, I opted not to write my own and instead chose one called MoinMoin.

To be honest I did not paticullary care what language it was written in (I can program in anything). My primary concerns were stability and simplicity. My decision in selecting MoinMoin was based primarily on the fact that the people who would be responsible for adding content did not have a solid grasp on basic web technologies, would have a difficult time learning HTML, and whom I did not trust to afford the luxury of a WYSIWYG editor.

MoinMoin allows new pages to be created simply by typing in the address you want, sub pages are created as subdirectories, and content is added in plain-text format using special identifiers which are later cast to html and styles (depending on which template you use). I felt that it included an adequate amount of embedded how-to documentation for them and that the syntax should be realitively easy for them to grasp in a short time.

I did have some issues with the install… but as usual, it was my fault and I soon had it running within its own application pool on IIS. I tested the system extensively for performance in cpu and memory overhead and it runs like a champ. Time will tell if the office actually uses it though 8-)

If you have any suggestions, questions, or experiences setting up your own Wiki I would be happy to hear from you so please comment.

For additonal help with wiki selection I recommend an article published by O’Reilly: Choosing a WIKI

web development

Google Definitions

September 10th, 2009

Many of you may already be well aware of google definitions… apparently its been around since 2007. I stumbled across this tonight (this morning) and thought it was pretty neat. The search format is as follows:

definition:programmers

definition:micah

*notice the related search shown for “micah moore”. I guess I need a better last name. 8-)

This could quite easily be utilized for a dictionary feature inside your own software… granted its not a webservice, and there is no doubrt in my mind theres one out there, but it isn’t a far fetched idea to query the page and parse out the definition with a simple regex.

-peace & keep on programming

news

ColdFusion UDF Library

December 16th, 2008

I am excited to announce that the programmers.org ColdFusion UDF Extension Library is now freely available.

Part of being a good developer is the act of working smarter and not harder. And there is no better way to accomplish this than through code reuse. Adding your own Extension Library to ColdFusion is a direct and powerful way to increase the speed and consistency of your development.

Uncategorized

Extending Coldfusion with UDFs

December 3rd, 2008

I cobbled together a few functions you may find useful this morning. As you can see they are simple, albeit useful, and so I wanted to share them here. Enjoy, and keep on coding!

/*
FUNCTION:   ArrayFindString
PURPOSE:    Searches inside the specified array (array_obj)
              for a string matching string (str)
PARAMETERS: 1. array_obj: the array containing the strings you
                 want to try to match to str
            2. str: the string you will be looking for in array_obj
RETURNS:    boolean
NOTE:       not case sensitive
*/
function ArrayFindString(array_obj, str){
var i = 1;

for (i = 1; i lte arrayLen(array_obj); i = i + 1)
if (array_obj[i] eq str) return true;

return false;
}

/*
FUNCTION: 	ArrayContainsString
PURPOSE: 	Searches inside the specified array (array_obj) for a
                  string that contains the string (str)
PARAMETERS: 	1. array_obj: the array containing the strings you want
                     to try to match to str
                2. str: the string you will be looking for in array_obj
RETURNS: 	boolean
NOTE: 		not case sensitive
*/
function ArrayContainsString(array_obj, str){
var i = 1;

for (i = 1; i lte arrayLen(array_obj); i = i + 1)
if (findNoCase(str, array_obj[i])) return true;

return false;
}

/*
FUNCTION: 	StringSearchArray
PURPOSE: 	Searches inside the specified string (str) for any
string matches contained in the array (array_obj)
PARAMETERS: 	1. str: the string you will be searching inside of
                2. array_obj: the array containing the strings you want
                     to look for in str
RETURNS: 	boolean
NOTE: 		not case sensitive
*/
function StringSearchArray(str, array_obj){
var i = 1;

for (i = 1; i lte arrayLen(array_obj); i = i + 1)
if (findNoCase(array_obj[i], str)) return true;

return false;
}

If your curious, I use StringSearchArray to control which areas of my application require user login:

...
foldersNoLogin = arrayNew(1);
foldersNoLogin[1] = "/login";
foldersNoLogin[2] = "/registration";
</cfscript>
<cfif not isDefined("session.loggedin") or session.loggedin eq false>
<cfif not StringSearchArray(cgi.path_info, foldersNoLogin)>
	<cflocation addtoken="no" url="/login/">
</cfif>
</cfif>

Free Stuff , , ,