tag:blogger.com,1999:blog-62134756735981620572024-03-14T03:33:00.688-04:00webdevworkHoward Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.comBlogger37125tag:blogger.com,1999:blog-6213475673598162057.post-3655260615443654112009-05-11T12:54:00.004-04:002009-05-11T17:31:09.344-04:00google search appliance experienceOver the past few months I've gotten intimately acquainted with the Google Search Appliance(gsa), which is basically a version of Google you can purchase to search and index your organization's content. The Google search feature we are currently offering our users is good but it could be better and road here was filled with many obstacles. <br /><br />When we first got the appliance there was this sense that not only was it "plug and play" but that as soon as we plugged it into our network it was just going to out and search everything, potentially choking our network. While the gsa can generate a good deal of traffic, this just couldn't be farther from the truth. We actually spent months, researching and attempting through trial and error to get the gsa to index our content including a legacy document management system. <br /><br />Our system happens to rely on a combination of windows network authentication and cookies, which at first glance of the documentation it looks like the gsa could support. What they don't seem to tell you is these 2 authentication methods can not be used in tandom. You have to pick one or the other. The other thing they don't tell you is that when they say that the gsa supports cookies what they really mean is that it doesn't support cookies but if you really <span style="font-style: italic;">have </span>to use them they will let you through a convoluted shceme where you direct the gsa to a login form, which may or may not exist on your system, which then generates a cookie which the gsa will store and use from then untill some set point in time in the future. <br /><br />What we ended up doing was giving the gsa a windows network login and then coding around the system's use of cookies for that user. This was one of the many code changes we have had to make to accomodate the gsa. More on this later but for now I'm off to the to Silverstripe cms talk and indyhall classic.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-6869365369055592302008-12-10T11:10:00.000-05:002008-12-10T11:43:11.937-05:002008 day job accomplismentsI had to put together a list of my accomplishments for my day job as a web developer/ analyst for a Philadelphia based stock brokerage firm so I thought i would repurpose that list here:<br /><br /><span style="font-weight: bold;">Financial Consultant Dashboard: </span>I played an integral role in the design and architecture of a Financial Consultant (FC) Dashboard. I worked closely with the business to understand it's needs and goals and then gathered the requirements for this application. I also designed and mocked up user interfaces for widgets and screens. I also assisted with usability testing and findings analysis.<br /><br /><span style="font-weight: bold;">Financial Consultant Performance Reporting: </span>I significantly enhanced the Performance Reporting tools i began developing last year, revamping the user interface and adding administrative data analysis features for branch, region and firm managers<br /><br /><span style="font-weight: bold;">SharePoint Development: </span>I have begun developing business tools on the MS SharePoint platform. I have released a shared calendar to track Branch Office Visits, Blogs for the Taxable Fixed Income and Municpal Bond Departments and a document libaray with custom workflows to assist with on boarding related documents. <br /><br /><span style="font-weight: bold;">Conference Registration System</span>: I developed a conference registration system which I go into more depth about <a href="http://webdevwork.blogspot.com/2008/01/conference-registration-system.html">here</a><br /><br /><span style="font-weight: bold;">Web Application Monitoring: </span>I researched and then selected Web Application monitoring services from <a href="http://AlertBot.com">AlertBot</a>, which have resulted in impoved up-time. <br /><br /><span style="font-weight: bold;">Purchase Order System: </span>rebuilt a legacy PO system in oder to stream line the process and get more users on board with paperless system<br /><br /><span style="font-weight: bold;">SAML Single Sign-on System: </span>I coded a SAML SSO system to allow our users to seamlessly access Rearden Commerce's travel booking site. I go into a lot more detail about this <a href="http://webdevwork.blogspot.com/2008/09/single-sign-on-with-saml-and-coldfusion.html">here</a><br /><br />So, that's pretty much my year of webdevwork day job achievements.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-56752869520540148152008-11-04T20:34:00.000-05:002008-11-04T20:45:02.777-05:00typoLight reviewWhile TypoLight is most likely a powerful framework, it is over complicated for the average user. The install did not go as smoothly as I had hoped and had to be redone a few times. Installing without a template left me in a place where I had no idea what to do to get a site up and installing with a template added so much content it would take hours to simplify. I wonder if, after you get to know the system you can just start with exactly what you need from a query rather than building it through the interface. It does seem to have a lot of features like event calendar, forms, and support for extension modules. The main issue at this point seems to be a lack of robust support community which is something that could change overtime.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-90502831759737440462008-10-30T17:26:00.000-04:002008-10-30T17:27:15.742-04:00SharePoint Initial ImpressionsI have recently been doing quite a bit of work with SharePoint. This hasn't been much fun becuase (at least as of yet) it doesn't involve much coding and relies heavily on microsoftian configuration. It has however, been very productive for a fairly low level of effort. In the past week alone, I have rolled out a couple blogs, a shared calendar and a document library, all with fine grain access control, desktop application integration, alerting and workflow. I did have to do a fair degree of customization to these apps, mostly involving disabling or hiding unnecessary functionalities. It has been very interesting learning about the power, limitations and of course bugs of SharePoint.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-8754916314367838002008-09-05T10:29:00.015-04:002009-03-16T17:13:25.987-04:00Single Sign-On with SAML and ColdFusionMy implementation of SAML is largely based on <a href="http://blog.tagworldwide.com/?p=19">this post</a> by David Rutter which is unfortunately riddled with errors that I spent more time than I would like to admit working through. His post and some of my background knowledge are from Phil Duba's <a href="http://www.philduba.com/index.cfm/2006/12/29/SAML-and-ColdFusion-Part-1">Saml and ColdFusion</a> Series which was very useful until about halfway through part 5 where it ventures out of my comfort zone into compiling java code for use within CF.<br /><br />What I have done is merge the two approaches into a single solution usable on CF8(and possibly others although it has not been tested) for connecting to PingIdentity's <a href="http://www.pingidentity.com/solutions/service-providers.cfm">PingFederate </a>Service Provider server such as that used by <a href="http://www.reardencommerce.com/">Rearden Commerce</a>.<br /><br /><span style="font-weight: bold;">PreReqs</span><br /><ol><br /><li>Download the binary(bin) <a href="http://xml.apache.org/security/dist/java-library/">Apache XML Security Library</a>. I used the most current version 1.4.2.<br /></li><br /><li>Unzip it and copy from xml-security-1_4_2\libs serializer.jar and xmlsec-1.4.2.jar into ColdFusion8\lib and restart the CF service </li><br /><li>Buy or Generate an x509 certificate and provide the public portion to you service provider. I will cover this in more depth in another post. </li><br /></ol><br />Now we are ready to get into the code.<br /><br />We start with SAML Assertion XML and fill in the dynamic portions: ID's, dates and username.<br /><br /><pre name="code" class="xml"><br /><cfoutput><br /><cfxml variable="samlAssertionXML"><br /> <samlp:response responseid="#CreateUUID()#" issueinstant="#DateFormat(DateConvert(" ddt="" local2utc="" ssz="" majorversion="1" minorversion="1" recipient="https://go.reardencommerce.com/sp/acs.saml1" samlp="urn:oasis:names:tc:SAML:1.0:protocol"><br /> <samlp:status><br /> <samlp:statuscode value="samlp:Success"><br /> </samlp:statuscode><br /> <saml:assertion assertionid="#CreateUUID()#" issuer="janneytest" issueinstant="#DateFormat(DateConvert(" ddt="" local2utc="" ssz="" majorversion="1" minorversion="1" saml="urn:oasis:names:tc:SAML:1.0:assertion"><br /> <saml:conditions notbefore="#DateFormat(DateConvert(" notonorafter="#DateFormat(DateConvert(" ddt="" local2utc="" n="" ssz=""><br /> <saml:authenticationstatement authenticationmethod="urn:oasis:names:tc:SAML:1.0:am:unspecified" authenticationinstant="#DateFormat(DateConvert(" ddt="" local2utc="" ssz=""><br /> <saml:subject><br /> <saml:nameidentifier format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">#username#</saml:nameidentifier><br /> <saml:subjectconfirmation><br /> <saml:confirmationmethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:confirmationmethod><br /> </saml:subjectconfirmation><br /> </saml:subject><br /> </saml:authenticationstatement><br /> </saml:conditions><br /> </saml:assertion><br /></samlp:status><br /></samlp:response><br /></cfxml></cfoutput></pre><br /><br />Now we will Sign our XML Assertion:<br /><pre name="code" class="coldfusion"><br /><cfscript><br />//injest the xml<br />samlAssertionElement = samlAssertionXML.getDocumentElement();<br />samlAssertionDocument = samlAssertionElement.GetOwnerDocument();<br />samlAssertion = samlAssertionDocument.getFirstChild();<br /><br />//create the neccesary Java Objects<br />SignatureSpecNS = CreateObject("Java", "org.apache.xml.security.utils.Constants").SignatureSpecNS;<br />TransformsClass = CreateObject("Java","org.apache.xml.security.transforms.Transforms");<br />SecInit = CreateObject("Java", "org.apache.xml.security.Init").Init().init();<br />XMLSignatureClass = CreateObject("Java", "org.apache.xml.security.signature.XMLSignature");<br /><br />//set up the signature<br />sigType = XMLSignatureClass.ALGO_ID_SIGNATURE_RSA_SHA1;<br />signature = XMLSignatureClass.init(samlAssertionDocument, javacast("string",""), sigType);<br />samlAssertionElement.insertBefore(signature.getElement(),samlAssertion.getFirstChild());<br /><br />//set up signature transforms<br />TransformsClass = CreateObject("Java","org.apache.xml.security.transforms.Transforms");<br />transformEnvStr = TransformsClass.TRANSFORM_ENVELOPED_SIGNATURE;<br />transformOmitCommentsStr = TransformsClass.TRANSFORM_C14N_EXCL_OMIT_COMMENTS;<br />transforms = TransformsClass.init(samlAssertionDocument);<br />transforms.addTransform(transformEnvStr);<br />transforms.addTransform(transformOmitCommentsStr);<br /><br />KeyStoreClass = CreateObject("Java" , "java.security.KeyStore");<br />//injest your previously created keystore<br />ksfile = CreateObject("Java", "java.io.File").init("c:\temp.keystore");<br />inputStream = CreateObject("Java", "java.io.FileInputStream").init(ksfile); <br />ks = KeyStoreClass.getInstance("JKS");<br />ks.load(inputStream,"SamlTest");<br />keypw = "mypass";<br />key = ks.getKey("SamlTest",keypw.toCharArray());<br />cert = ks.getCertificate("SamlTest");<br />publickey = cert.getPublicKey();<br /> <br />signature.addDocument("", transforms);<br /><br />//optionally include the cert and public key<br />//signature.addKeyInfo(variables.cert);<br />//signature.addKeyInfo(variables.publickey);<br /><br />signature.sign(key);<br /><br />samlAssertionXML = toBase64(toString(samlAssertionXML), "utf-8");<br /></cfscript><br /></pre><br /><br />and then we use a form to post it to the service provider<br /><br /><pre name="code" class="coldfusion"><br /> <form action="https://YourSpSSOServer" method="post"><br /> <input name="TARGET" value="https://YourSpTarget" type="hidden"> <br /> <input name="SAMLResponse" value="#samlAssertionXML#" type="hidden"><br /> <!---<input type="submit">---><br /> </form><br /></pre><br /><br />And there you have homegrown SAML Single Sign-on Solution In ColdFusion. <br /><br /><a href="http://howard.ross.work.googlepages.com/SAMLsso.cfm">Here is the source file</a> in it's entirety because blogger has a tendency to mangle code<br /><br />Please feel free to post questions or comments.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com9tag:blogger.com,1999:blog-6213475673598162057.post-71277956197113558742008-07-30T17:02:00.003-04:002008-07-30T17:25:54.950-04:00FC Recruiting Workflow SystemI need to provide a system where users will have the ability to post, comment and approve documents. In addition, his system needs to provide access control and groups. Work flow would also be nice if possible.<br /><br />Due to the procedural changes being handed down from on high, I need to get this done in under 30 days otherwise, it turns into a pumpkin, or rather a project, as opposed to a Rapid Application and would then require voluminous paperwork and painstaking meetings.<br /><br />While I could build something custom, I'm not sure that I can get all the desired features done in the time frame, so I'm looking at document management systems and frameworks I could potentially build off of.<br /><br />I looked at M$ WSS, but quickly scrapped it due to the need to run Visual Studio 2005 on Windows Sever 2003, which makes it much less free (as in beer)<br /><br />I then looked at Alfresco, which is very pretty but complex. The community edition comes in a large executable, which install a full java stack. It was not as easy to get running as I had hoped.<br /><br />Next, was Knowledge Tree, which I found to be more usable and intuitive than Alfresco, although slightly less shiny. I am interested in pursuing this one, but also want to continue investigating other lighter weight alternatives such as Genus and others found on SourceForge.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-72680302578895809632008-07-27T16:02:00.002-04:002008-07-27T16:05:05.763-04:00firefox extensions to haveThe best thing about Firefox besides the good standards compliance, speed and reliability are the extension.<br /><br />I'm running:<br /><ul><li>Adblock Plus</li><li>All-in-one Sidebar</li><li>Delicious Bookmards</li><li>Firebug</li><li>Web Developer<br /></li></ul>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com1tag:blogger.com,1999:blog-6213475673598162057.post-54698309518985385682008-07-23T16:38:00.004-04:002008-07-25T16:55:40.812-04:00installing MediaWiki on XamppI am trying to install MediaWiki on Xampp which i thought would be a cinch but it's actually not.<br /><br /><span style="font-size:180%;">UPDATE: Heres the solution <a href="http://www.splitbrain.org/projects/dokuwiki">DoKuWiki </a></span><br /><br />Here is my account of where i am so far so that maybe we can make it easier for the next guy:<br /><br />I downloaded <b>XAMPP Windows 1.6.7</b> from http://www.apachefriends.org/en/xampp-windows.html#641<br />Install and startup goes fine<br /><br />I downloaded MediaWiki 1.12 from http://www.mediawiki.org/wiki/Download and extract.<br /><br />I created the wiki db.<br /><br />I then pull up the wiki page on my localhost. My environment checks out. I proceed to fill out the install form. MediaWiki won't let me use a blank db pw.<br /><br />I drop the wiki db and then create a new db user and have phpmyadmin create a db with the same name and give the new user full privileges on it.<br /><br />MediaWiki install completes and tells me to move my config/LocalSettings.php to it's parent directory. I do that and then follow the link MediaWiki gives me and i get:<br /><br /><b>Warning</b>: domdocument::domdocument() expects at least 1 parameter, 0 given in <b>C:\xampp\htdocs\wiki\includes\Preprocessor_DOM.php</b> on line <b>566</b><br /><br /><b>Fatal error</b>: Call to undefined method domdocument::loadXML() in <b>C:\xampp\htdocs\wiki\includes\Preprocessor_DOM.php</b> on line <b>568</b><br /><br />I Googled "MediaWiki Xampp domdocument" which leads me to a forum posting on apachefriends .org telling me to comment out extension=php_domxml.dll in my php.ini. I do only to recieve yet another error. ugh. more on this saga to come.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com1tag:blogger.com,1999:blog-6213475673598162057.post-12153726269606151502008-07-18T17:03:00.003-04:002008-07-18T17:10:07.450-04:00What I got out of the uPenn Web SymposiumThis week I had the opportunity to attend the uPenn Higher Education Web Symposium.While the this conference was focused on IT Professionals working in Higher Education, there were world renowned experts in the fields of usability, user centered d3sign, CSS, AJAX and many others making it was extremely relevant to my work.<br /><br />I attended a Full Day Workshop on Web Form Design best Practices by the esteemed Luke Wroblewski who currently works as a Principal Designer and Product Manager for Yahoo!.He also runs a design consultancy, <a style="font-size: 24px; line-height: 27px;" href="http://www.lukew.com/">LukeW</a>, and a publication, <a style="font-size: 24px; line-height: 27px;" href="http://www.lukew.com/ff/index.asp">Functioning Form</a>.<br /><br />Here are some web form best practices:<br /><ul style="font-size: 24px; line-height: 27px;"><li>Put Labels above fields for increased readability and accessibility to screen readers and other languages<br /></li><li style="font-size: 24px; line-height: 27px;">Don’t include non-required fields when possible.</li><li style="font-size: 24px; line-height: 27px;">If most fields are required provodie </li><li style="font-size: 24px; line-height: 27px;"><span style="font-size: 24px; line-height: 27px;">If you are going to provide in-line validation, wait until the user has moved to the next field to validate </span></li><li style="font-size: 24px; line-height: 27px;"><span style="font-size: 24px; line-height: 27px;">Make it conversational</span></li><li style="font-size: 24px; line-height: 27px;">“Keep, Cut, Postpone, or Explain.”</li><li style="font-size: 24px; line-height: 27px;">Less is more</li></ul> <p style="font-size: 24px; line-height: 27px;">These were culled from <span style="font-size: 72px; line-height: 82.5px;font-family:";font-size:12;" >live to site analytics, usability testing, eye-tracking studies, and best practice surveys.</span></p>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-18167135049054828252008-07-03T13:58:00.006-04:002008-12-09T20:35:33.579-05:00Purchase Order SystemIn addition to my busy schedule of extra curriculars like Philly Ignite and Junto I have been busy at work with internal applications.<br /><br />One such application is a Purchase Order System which allows for the generation of Purchase Order Documents in PDF. The system automatically notifies purchasing and accounts payable when a new PO is generated and when an existing PO is updated. It also includes search functionality to review existing POs. I used jQuery to do row striping and and highlighting. Here are a couple Screen Shots:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_4LbNm6BqHWk/SG0WmZMzdJI/AAAAAAAAAA8/QePoD2wVhiI/s1600-h/PO+sys.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_4LbNm6BqHWk/SG0WmZMzdJI/AAAAAAAAAA8/QePoD2wVhiI/s320/PO+sys.png" alt="" id="BLOGGER_PHOTO_ID_5218852392047703186" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_4LbNm6BqHWk/SG0ZZymkOiI/AAAAAAAAABE/8opmY_whRU8/s1600-h/posystable.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_4LbNm6BqHWk/SG0ZZymkOiI/AAAAAAAAABE/8opmY_whRU8/s320/posystable.png" alt="" id="BLOGGER_PHOTO_ID_5218855474063227426" border="0" /></a>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-72231338187785222352008-04-30T13:59:00.005-04:002008-07-03T13:45:51.794-04:00Philly PHPMeeup Presentation: TDDLast night, I had the pleasure of attending a presentation about Test Driven Development (TDD), co-hosted by the <a class="url" href="http://php.meetup.com/353/"><span class="fn org">The Philadelphia Area PHP Meetup Group</span></a> and the Drexel Math and Computer Science Society.<br /><br />The first presenter was Raymond Bokenkamp, Senior Programmer Analyst with the University of Pennsylvania School of Medicine. He gave a high level overview of TDD and the philosophy behind it which goes like this: programmers have to much to do and not enough time to do it (Stress). This leads programmers to not test as much they should or sometimes not at all. This leads to errors which leads to more stress.<br /><br />As the name implies TDD lets the tests drive the development. This means that after an initial application concept, developers move immediately to listing possible tests for this applications. Tests are then programmed and run. Only then is code written to fulfill these tests. Once the test's are run, the code is re-factored appropriately and test are rerun until an error free program is produced.<br /><br />Once again, the TDD work flow is as follows:<br /><ol><li>List Tests</li><li>Create tests</li><li>Make tests work</li><li>Re-factor<br /></li></ol>The key here is to write test which account for as many if not all possible use cases. This is a skill in and of itself which takes time to develop but is well worth the effort for the confidence, peace of mind, and of course low error code it produces.<br /><br />The second presenter was Owen Winkler with Rock River Star, a Philadelphia-area web development shop specializing in PHP and Drupal development. Owen provided insight an into testing in general and a real world example of TDD utilizing SimpleTest, a popular PHP testing framework.<br /><br />The presentations were very informative and reaffirmed my emphasis on thorough testing.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-39089772747165074232008-04-22T15:22:00.003-04:002008-04-22T15:51:07.736-04:00Working with DTSI have been doing quite a bit of work with DTS, short for Data Transformation Services, a feature of M$ SQL, which facilitates getting data in and out of the db, among other things. One of the best features of DTS is the ability to set packages to run at regularly scheduled intervals. For instance, every night a csv file gets dropped in a networked folder. My package then ingests that file into our db for later use.<br /><br />The easiest way to get started with DTS is to use the Data Transformation Services Import/Export Wizard and then save the package for later modification and use. This wizard is accessible by right clicking on a table and selecting from All Tasks Import or Export Data. I have found csv files to be much easier to work with than excel files. <br /><br />A very useful DTS package i put together runs a query to pull the accounts that were added last the day before, dumps the data into a csv, emails the csv as an attachment and finally runs a query to update the records to show that they have been emailed.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-70429430758692928032008-03-03T16:04:00.002-05:002008-03-03T16:16:25.683-05:00Commas in Ext Currency FormatI'm using the fabulous Ext Javascript library through ColdFusion 8. It outputs a beautiful, full-featured grid complete with sorting and re-ordering of columns. <br /><br />It has a US currency formatter called the usMoney Format Renderer but it lacks the all-too-useful comma separator when dealing with numbers greater than 999. Ext, did you think we were only small-time?<br /><br />So i swapped out the current usmoney function in the util.js with <a href="http://javascript.internet.com/forms/currency-format.html">this one</a>. The math seems to work out but if you catch anything let me know.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-29161201873153735172008-02-11T16:54:00.000-05:002008-02-11T17:25:46.496-05:00Web Site Monitoring Service Business Case and Comparison<p class="MsoNormal">We currently have a need for external web site/application uptime and availability monitoring.<span style=""> </span>In Order for a web application to effectively support business and client needs it must be available to its users.<span style=""> </span>If it becomes unavailable the systems’ administrators must be notified promptly so that they can take appropriate actions.<span style=""> </span>In addition, we have a responsibility to our customers and associates to ensure that the Service Level Agreements pertaining to availability provided by 3<sup>rd</sup> party vendors are being upheld.<span style=""> </span></p> <p class="MsoNormal">This can be accomplished through the use of a Web Site Monitoring Service (webmonitor).<span style=""> </span>Webmonitors test the availability of web sites from locations around the world at set intervals.<span style=""> </span>Webmonitors can also perform transactions such as logins to help ensure that services are up and running as expected.<span style=""> </span>If a web site becomes unavailable administrators can be notified by email or cell-phone via SMS.<span style=""> </span>Webmonitors can also accumulate statistics for further analysis.<span style=""><br /></span></p><p class="MsoNormal">There are many webmoniter providers to choose from.</p>The "Best Buy" of the group has to be <a href="http://www.host-tracker.com">host-tracker</a>, which has the most test nodes but is more bare bones in terms of functionality and reporting.<br /><br />Next we have <a href="http://www.alertbot.com">AlertBot</a>, which has great support and is very easy to use but also lacks some of the more advanced test scripting and reporting features. What they lack in features they make up for in price and service. <br /><br /><a href="http://www.alertsite.com">AlertSite </a>is the first that I would consider to be enterprise quality. They offer robust reporting I would feel comfortable handing off to upper management. The most interesting feature however, is a firefox extension called DejaClick, that records and then uploads and replays your actions at given intervals. This is a really great feature that allows you to do tests that you just can't with some of the competitors. Unfortunately, it does still have some bugs and is best used only in the hands of the advanced user.<br /><br />Last but not least is <a href="http://www.webmetrics.com">WebMetrics </a>which offers the most attractive and usable interface by far. The reporting is extremely robust and includes output to pdf. They also develop and maintain test scripts on behalf of clients at no charge. In addition, they offer other enterprise services like load balancing and RIA monitoring. <br /><br />I'm in the process of getting proposals from these companies and will put together a comparison matrix including pricing when i get them. <p class="MsoNormal"><span style=""><br /></span></p>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-19549704999928924512008-01-23T12:22:00.000-05:002008-01-23T12:41:42.911-05:00Great PHP Datetime Conversion SnippetUsing PHP you can easily convert just about any date or time to the format of your choosing.<br /><br />function <a href="http://us2.php.net/strtotime">strototime()</a> which accepts English textual datetime strings and outputs timestamps can be combined with the <a href="http://us2.php.net/manual/en/function.date.php">date()</a> function to output a formated date.<br /><br />For instance,<br /><code><br />date("n/j/y",strtotime($someDate))<br /></code><br />will accept a datetime of pretty much any format and output it as mm/dd/yyyy.<br /><br />This can come in handy when working with dates stored in a database as strings or when converting between International and US formats.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-27658295532594778112008-01-17T17:18:00.000-05:002008-01-17T17:36:22.144-05:00Conference Registration SystemI spent the better part of this week banging out a Conference Registration System in an effort to beat one our competitors<span style="font-size:78%;"> (Goldman) </span>to the punch, which I'm pretty sure we did. The system uses php for server side scripting and database interaction, MySQL database, and javaScript for form validation.<br /><br />The system features<br /><ul><li>Registration form</li><li>JavaScript form validation<br /></li><li>Email confirmation</li><li>Database backup<br /></li><li>PayPal Payment Processing</li><li>PayPal Instant Payment Notification (IPN)</li></ul>We rolled it out today with relatively no issue and dough has already begun coming in.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-86880661259092521112008-01-03T17:07:00.000-05:002008-12-09T20:35:34.001-05:00FC Progress ReportAs promised... Here is a screen shot of the individual FC Progress Report<br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://echoability.com/FcProgReg.jpg"><img style="cursor: pointer;" src="http://1.bp.blogspot.com/_4LbNm6BqHWk/R31dM_g6wyI/AAAAAAAAAAM/PMbl_eZvu60/s320/FcProgRegmini.jpg" alt="" id="BLOGGER_PHOTO_ID_5151376026571031330" border="0" /></a><br /></div><br />It features a pretty flash graph and pdf for saving and printingHoward Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-16355806668316475052008-01-02T15:17:00.000-05:002008-01-02T15:51:57.235-05:00What I'm up to: FC Comission Reporting SystemI have been working on a Financial Consultant (FC) Commission Reporting System. It is written in Coldfusion (CF) and takes advantage of some the great user interface enhancements in CF8 including:<br /><ul><li>tight pdf integration<br /></li><li>enhanced Flash charting<br /></li><li>ajaximified data grids utilizing the awesome <a href="http://extjs.com/">Ext JavaScript library</a>. </li></ul>This system takes data from the Thomson Beta back office system, the dark side as it's affectionately known around here because of its black screen terminal look, and presents in a clear and compelling format which the FC can use to gauge progress.<br />Data presented includes:<br /><ul><li>Assests Under Management <br /></li><li>Production</li><li>Distance Targets</li><li>Distance to Next FC</li><li>Firm Ranking<br /></li></ul>We are using an iterative methodology with monthly development cycle which allows us to deliver a high quality product quickly while continually improving the system as user feedback comes in. For our 3rd iteration, this month, we will be adding additional graphs and an aggregated view for Branch Managers. (screen shots coming soon)Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-89293589571879282092007-11-19T16:41:00.000-05:002007-11-19T17:06:35.274-05:00echo[Ability] 2.0.1.2 alphaAfter an arduous weekend of WordPress hacking by Kelani with support of the moral and technical variety provided by yours truly, the new and improved Echo[Ability] has been rolled out.<br /><br />It is still a work in progress so expect quite a bit of change over the course of the next few weeks.<br /><br />It is meant to serve not only as a point of contact and representation of our work and philosophy but also as an eventual jumping off point and resource for the like minded, interested in learning more about the technology and tools with which we are working.<br /><br />For the weekend play-by-play and a good starting point for hacking together your own custom wordpress theme check out this post by Kelani:<a href="http://74.54.4.213/blog/?p=11" rel="bookmark" title="Permanent Link to Building a Wordpress Theme"><span style="font-weight: bold;"> </span>Building a Wordpress Theme</a>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-90304685176014077422007-11-16T15:53:00.000-05:002007-11-16T16:40:14.911-05:00PANMA Web Tools ShootoutLast night I had the opportunity to attend and present at the PANMA Web Tools Shootout. PANMA stands for Philadelphia Area New Media Association. PANMA hosts networking and educational events, where we encourage the connections among our members, offer business opportunities and enjoy good times with friends. We are web designers, graphic artists, database developers, programmers, information architects, marketers and other professionals.<br /><br />Topics presented on included:<br />Blogging<br />Johnny Bilotta – WordPress<br />Kelani Nichole - Blogger<br /><br />Content Distribution & RSS feeds<br />Michael Klusek - feedburner<br />Howard Ross (me) - digg<br /><br />Web Analytics & Reports<br />Johnny Bilotta - Mint<br />David Speers - googleAnalytics<br /><br />Social Networking<br />Cheryl Anscombe - Facebook<br />Nick Floro - LinkedIn<br /><br />Business Automation & Project Management<br />Geoff DiMasi - Basecamp<br />Nick Floro - Highrise<br /><br />Video Sharing<br />Aaron Couch - YouTube<br />Rob Sandie - Viddler<br /><br />Wiki knowledge collaboration<br />Juan Leon - mediaWiki<br />Alex Hillman - pbWiki<br /><br /><br />Photosharing<br />Aaron Couch - flickr<br />Johnny Bilotta - shutterfly<br /><br />Webconferencing<br />Nick Floro – GoToMeeting<br />Nick Floro- Webex<br /><br />Email marketing<br />Nick Floro – constant contact<br />Tim Dodd - emma<br /><br />Bonus Category<br /><br />Alex Hillman -- Twitter<p>The Event was fast paced and a ton of fun and all attendees received expert certification in these tools.<br /><span style=";font-family:Times New Roman;font-size:100%;color:black;" ><span style="color: rgb(0, 0, 0);font-size:12;" ></span></span></p><p><span style=";font-family:Times New Roman;font-size:100%;color:black;" ><span style="color: rgb(0, 0, 0);font-size:12;" ><br /></span></span></p><p><span style=";font-family:Times New Roman;font-size:100%;color:black;" ><span style="color: rgb(0, 0, 0);font-size:12;" ><br /></span></span></p>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-47540929958116001132007-10-10T11:11:00.000-04:002007-10-10T11:22:33.170-04:00Notes on Forrestor Research IW vs ECM<p class="Pa1"><span class="A2" style="font-size:100%;">Notes on Forrester Research:</span></p><span class="A2" style="font-size:100%;">For Enterprise Collaboration, Focus On Information Workplace Platforms, Not ECM Specialists</span><br /><p class="Pa1"><span style="color: rgb(142, 145, 148);font-size:100%;" >by Erica Driver</span></p><span style="color: rgb(142, 145, 148);font-size:100%;" >for Information & Knowledge Management Professionals</span><br /><p class="Pa0"><span style="color: rgb(142, 145, 148);font-size:100%;" >June 26, 2007 </span></p><span style="font-size:100%;">This article distinguishes between Information Workplace (IW) Platforms and Enterprise Content Management (ECM) Systems. It covers the similarities and differences and when and where each should be implemented. This article goes into detail about the offerings of the major vendors in the space.<br /><br /></span><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size:100%;">While Both IW platforms and ECM Systems offer collaboration and productivity services ECM is trending towards more industry specificity allowing IW to offer more general, core services. These core services include messaging, team collaboration such as on documents and social computing tools like blogs, wikis, and tagging. It has not yet been fully determined which services should be included in IW and which should be specific to specialized collaboration applications. Examples of Specialized collaboration applications include drug approval process facilitators and collaborative software development tools. </span></p><span style="font-size:100%;">Of particular interest for our team are the comments about Microsoft including:</span><br /><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size:100%;">“</span><span style="font-size:100%;">• Microsoft is a leading collaboration platform vendor.<br />• Microsoft offers the core collaboration platform pieces: messaging, team collaboration, real-time collaboration and communication, and some basic Social Computing tools.“</span></p><span style="font-size:100%;">The major recommendation of the paper is to implement IW and look for ECM providers for process specific collaboration needs that provide integration points and synergies with IW.</span><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size:85%;"> </span></p>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-42306615407787891302007-10-08T10:09:00.000-04:002007-10-08T10:19:34.884-04:00Forrester SharePoint Research Notes<span style="font-size:14;">Notes on Microsoft’s 2007 Enterprise Content Management Platform<o:p></o:p></span><span style="font-size:14;"><br />By Kyle Mcnabb<o:p></o:p></span> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" >MOSS provides a single environment for collaborative document management, Web content management, records management, workflow, and eForms support<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" >MOSS now supports defining content based on its type — such as contract, deal, article, or customer presentation which facilitates more discrete management<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" >Document Management supports Check and Check out (standard and enterprise?)<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" >MOSS now includes serial and parallel document review and approval workflow support.<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" ><o:p></o:p>Administrators can create new workflows using Office SharePoint Designer 2007, and developers can use Visual Studio 2005 Extension for Windows Workflow Foundation to create new workflows.<o:p></o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" ><o:p></o:p>MOSS integrates with Microsoft Office 2007 client applications such as Outlook and Word. Document libraries can be natively accessed through the Outlook client. Employees can subscribe to document libraries, and they can get notified of changes to documents via RSS feeds and email alerts through Outlook. Furthermore, SharePoint documents and folders connected to Outlook can be synchronized with local desktops for offline access and editing<o:p></o:p></span></p> <span style="font-size:14;"><o:p></o:p></span><span style="letter-spacing: 0pt;font-size:11;" >Per user price points for basic document management have hovered between $50 and $100 for the past 18 months.<span style=""> </span>Moss offers basic document management abilities plus a host of additional features at that cost.<o:p></o:p></span> <p class="MsoNormal" style="text-align: left;" align="left"><span style="letter-spacing: 0pt;font-size:11;" ><br />Troubles with MOSS stated in this document are not of much concern for us:<o:p></o:p></span></p> <ul style="margin-top: 0in;" type="disc"><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >No federated policy management support across SharePoint libraries.</span><span style="font-size:11;"><o:p></o:p></span></li><ul style="margin-top: 0in;" type="circle"><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >Not an issue now, nor a requested feature</span><span style="font-size:11;"><o:p></o:p></span></li></ul><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >MS forces customers to migrate, not simply upgrade, existing implementations.</span><span style="font-size:11;"><o:p></o:p></span></li><ul style="margin-top: 0in;" type="circle"><li class="MsoNormal" style="text-align: left;"><span style="font-size:11;">MOSS 2007 implementation should work for us for years to come<o:p></o:p></span></li></ul><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >No digital asset management support(such as video).</span><span style="font-size:11;"><o:p></o:p></span></li><ul style="margin-top: 0in;" type="circle"><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >Teams dealing with this have their own systems in place</span><span style="font-size:11;"><o:p></o:p></span></li></ul><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >Some value-added capabilities are only available with full Office upgrade.</span><span style="font-size:11;"><o:p></o:p></span></li><ul style="margin-top: 0in;" type="circle"><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >We intend to upgrade </span><span style="font-size:11;"><o:p></o:p></span></li></ul><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >Very little support for transactional content processes. Lack robust Business Process Management (BPM) support</span><span style="font-size:11;"><o:p></o:p></span></li><ul style="margin-top: 0in;" type="circle"><li class="MsoNormal" style="text-align: left;"><span style="letter-spacing: 0pt;font-size:11;" >Could be enhanced with supporting products</span><span style="font-size:11;"><o:p></o:p></span></li></ul></ul> <p class="MsoNormal" style="text-align: left;" align="left"><b><span style="letter-spacing: 0pt;font-size:11;" ><o:p> </o:p></span></b></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size:14;"><o:p> </o:p></span></p> <p class="MsoNormal" style="text-align: left;" align="left"><b><span style="letter-spacing: 0pt;font-size:11;" ><o:p> </o:p></span></b></p> <p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size:14;"><o:p> </o:p></span></p>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-7057705240615901172007-09-26T10:04:00.001-04:002007-11-22T13:52:42.390-05:00How many people are on your server right now?To view how many users are currently connected to your Windows Web Server you can use the M$ Performance Monitor.<br /><br />Run perfmon.<br />Right Click in the counter table and select 'Add Counters...'<br />Change Performance object to Web Service<br />Change counter to Current Connections.<br /><br />You should now be able to see the number of users currently connected to your webserver. Save this Configuration by doing a save as.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com0tag:blogger.com,1999:blog-6213475673598162057.post-32373735684713144732007-09-12T14:03:00.000-04:002007-09-12T14:17:34.135-04:00How to force users to print using SpryYou can't actually <span style="font-style:italic;">force </span>users to print but you can have the browser's print dialog displayed using a simple, properly placed JavaScript command. The JavaScript I'm referencing is "window.print()", which could be launched on submit if it weren't for the form validation which it will conflict with. <br /><br />If you are using the Spry Framework to assist with form validation you can place the window.print() command in the Spry JavaScript file such as, SpryValidationSelect.js in the Spry.Widget.ValidationSelect.prototype.validate function immediately before the return true. This will cause the print dialog to display only if the input passes validation.Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com1tag:blogger.com,1999:blog-6213475673598162057.post-57927431110989398112007-08-23T14:43:00.000-04:002007-08-23T15:14:11.590-04:00Simple ASP contact form processorIf you have a contact form like this:<br /><br />First Name<br /> <input name="firstName" style="width: 250px;" type="text"><br /> Last Name<br /> <input name="lastName" style="width: 250px;" type="text"><br /> Address<br /> <textarea name="address" cols="" rows="2" style="width: 250px;" id="address"></textarea><br /> City<br /> <input name="city" style="width: 150px;" id="city" type="text"><br /> State<br /> <input name="state" style="width: 25px;" maxlength="2" id="state" type="text"><br /> ZIP Code<br /> <input name="zip" style="width: 75px;" id="zip" type="text"><br /> Age<br /> <input name="age" style="width: 75px;" type="text"><br /> Your Question Is?<br /> <textarea name="question" cols="" rows="3" style="width: 250px;"></textarea><br /> Email Address<br /> <input name="emailAddress" style="width: 250px;" type="text"><br /> Phone Number<br /> <input name="p1" style="width: 25px;" maxlength="3" type="text"><input name="p2" style="width: 25px;" maxlength="3" type="text"><input name="p3" style="width: 35px;" maxlength="4" type="text"><br /> <input value="Submit" type="submit"><br /><br />you could use a simple ASP script this to send the submissions via email:<br /><%<br />dim emailFrom, emailTo, emailSubject, emailBody<br /> dim objMail, iConf<br /> emailFrom = Request.Form("emailAddress")<br /> emailTo = "hross@jmsonline.com"<br /> emailSubject = "JMS Website: Contact Form Submission"<br /> emailBody = "The following information was submitted from the JMS online contact form:" & vbcrlf &vbcrlf<br /> emailBody = emailBody & "First Name: " & (Request.Form("firstName")) &vbcrlf<br /> emailBody = emailBody & "Last Name: " & (Request.Form("lastName")) &vbcrlf<br /> emailBody = emailBody & "Address: " & (Request.Form("address")) &vbcrlf<br /> emailBody = emailBody & "City: " & (Request.Form("city")) &vbcrlf<br /> emailBody = emailBody & "State: " & (Request.Form("state")) &vbcrlf<br /> emailBody = emailBody & "Zip: " & (Request.Form("zip")) &vbcrlf<br /> emailBody = emailBody & "Age: " & (Request.Form("age")) &vbcrlf &vbcrlf<br /> emailBody = emailBody & "Question: " & (Request.Form("question")) &vbcrlf<br /> emailBody = emailBody & "Email Address: " & (Request.Form("emailAddress")) &vbcrlf<br /> emailBody = emailBody & "Phone: " & (Request.Form("p1")) & Request.Form("p2") & Request.Form("p3") &vbcrlf &vbcrlf <br /> emailBody = emailBody & vbcrlf<br /> set objMail = server.CreateObject("CDO.Message")<br /> set iConf = CreateObject("CDO.Configuration")<br /> With iConf.Fields<br /> .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 ' CdoSendUsingPort<br /> .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Application("EmailServer")<br /> .Update<br /> End With<br /> objMail.From = emailFrom<br /> objMail.To = emailTo<br /> objMail.Subject = emailSubject<br /> objMail.TextBody = EmailBody<br /> objMail.send<br /> Set objMail = Nothing<br />%>Howard Rosshttp://www.blogger.com/profile/07315533364026027249noreply@blogger.com1