tag:blogger.com,1999:blog-34420203932736730282024-03-13T21:19:52.119-05:00I Broke I.T.!A technology blog.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.comBlogger20125tag:blogger.com,1999:blog-3442020393273673028.post-22696275210189178082016-07-29T17:24:00.002-05:002016-07-29T17:24:39.676-05:00A new home!<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<h2>
<span style="font-family: Arial, Helvetica, sans-serif;">A new home!</span></h2>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Hello there! </span><span style="font-family: Arial, Helvetica, sans-serif;">I just wanted to write a short post to say that <b>I'm not going to be adding new content to this blog</b>. This post will be my last on the blogger platform. It has been wonderful but I feel that since I am no longer writing about IT related things and instead am focusing on my career as a web developer, it is probably best to keep my worlds separate.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">I'll leave this up for as long as people keep needing the content.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">If you're looking for my new developer blog, come find me at https://jimthedev.com or as jimthedev on Twitter or Github.</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">It's been real!</span><br />
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span>
<span style="font-family: Arial, Helvetica, sans-serif;">Jim</span>jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com1tag:blogger.com,1999:blog-3442020393273673028.post-51402661207623108882014-05-23T10:22:00.000-05:002014-05-23T10:22:08.377-05:00A visual representation of seeding before manually bootstrapping AngularJS<br />
<br />
If you're just here for the demo, here you go: <a href="http://embed.plnkr.co/vBb2c3/preview">http://embed.plnkr.co/vBb2c3/preview</a><br /><br />
<h3>
The Problem</h3>
As a developer using AngularJS, sometimes you'll want to seed data into some data source (local storage), or make some async calls to a server before your AngularJS application actually loads. There are good reasons to avoid this at all costs, except when you're trying to replicate an existing user experience.<br />
<br />
Take the case of local storage. Sometimes when you deploy a new version of your AngularJS application, you want to see how it works with existing user data. That is, you don't want to assume your user has no data. Ideally you're writing perfect code and you're handling all the null cases correctly, but we don't want to assume that with production data, right?<br />
<br />
This process is critical because you don't want your application to incorrectly handle, corrupt, or delete any user data stored in these source, but how do we test this experience without writing hard coded config structures (which are actually data) directly into our Angular application. We want to separate these concerns and bring seeding outside of the Angular application so that we can accurately replicate the user experience when we actually bootstrap the application.<br />
<br />
<h3>
The Solution</h3>
To accomplish this, we're going to remove the ng-app attribute from our index.html. By doing so, we ensure that the application is not bootstrapped until we actually want it to be.<br />
<br />
Since this is a complex topic, I've created a visualization that I think shows the AngularJS manual initialization process pretty well. Keep in mind I've added in UI-Router and several wait functions so that your eyes have a chance to see each step in action. As a visual learner, this helped me to understand the process from start to finish.<br />
<br />
You can see the example Plnkr here: <a href="http://embed.plnkr.co/vBb2c3/preview">http://embed.plnkr.co/vBb2c3/preview</a><br />
<br />
PS. This all came about while diagnosing an issue for the ng-inspector extension/plugin. Check that excellent project our here: <a href="http://ng-inspector.org/">http://ng-inspector.org/</a><br />
<br />
Happy seeding and bootstrapping!jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-16236951277566780182014-01-25T18:18:00.001-06:002014-01-25T20:14:23.743-06:00How to type the Dogecoin symbol on a Mac? (Ð, Icelandic capital letter Eth)<h3>
</h3>
<h3>
Summary</h3>
Hello Shibes,<br />
<br />
To type the Dogecoin symbol on a Mac (Ð, an Icelanding uppercase letter called ) is way harder than it should be, but can be done using a combination of Mac's built in text replacement and a Chrome Extension called Popchrom.<br />
<br />
The first thing you'll need to do is choose a phrase that you want to type which will be replaced by the Doge symbol. I chose $D$ because you can hold down shift throughout the combination and it isn't likely to conflict with anything else. Feel free to choose whatever you like.<br />
<br />
<h3>
Instructions to set up OSX's text replacement to show Ð:</h3>
<ol>
<li>Go to Settings > Language & Region.</li>
<li>Click Keyboard Preferences button at the bottom of the screen.</li>
<li>Click the "Text" tab of the Window that pops up.</li>
<li>Click the plus (+) sign to add a new replacement.</li>
<li>In the "Replace" column, type $D$ or the phrase you chose above.</li>
<li>In the "With" column, copy and paste this: Ð</li>
<li>Close out. This should take care of basic apps like TextEdit and others. You just need to type $D$ or your phrase, then hit space, it should replace it, although it can be a little slow. :)</li>
<li>NOTE (UPDATE): For older OSX versions, you must enable text replacement on a per application basis. This is dumb, so instead, run this command in termina to enable it in all apps that support apple text replacement, then restart your apps and it should work:<br /> <span style="font-family: Courier New, Courier, monospace;">defaults write -g WebAutomaticTextReplacementEnabled -bool true</span></li>
</ol>
<b>Warning:</b> some apps do not follow the built in Apple method of doing text replacements. This is a pain, but usually you can make it work. Word, for example, has their own text replacement that I am not going to cover here.<br />
<br />
<h3>
Instructions to set up Google Chrome's text replacement to show Ð:</h3>
Since Chrome unfortunately does not listen to the Apple way of doing text replacement, and does not have its own text replacement built in, we're forced to install a Chrome Extension called Popchrom. It is a little finicky so make sure to follow all the instructions carefully.<br />
<ol>
<li>Close all your Chrome tabs.</li>
<li>Install Popchrom from here: <a href="https://chrome.google.com/webstore/detail/popchrom/iinhokidgfoomcighckbjmlcndbjmomp?hl=en">https://chrome.google.com/webstore/detail/popchrom/iinhokidgfoomcighckbjmlcndbjmomp?hl=en</a></li>
<li>Once installed, go to Tools > Extensions</li>
<li>Scroll down until you see Popchrome, click Options.</li>
<li>Once in the Popchrom options, you can delete all the default replacements.</li>
<li>Create a new replacement with <div>
(or your chosen phrase)</div>
as the abbreviation and Ð as the Expand to...</li>
<li>Click save.</li>
<li>Voila. Now you should be able to use your phrase in text boxes in Chrome, press Ctrl + Space on any website and it will be replaced when you hit space afterwards. </li>
<li>Note that this will not work in other extensions or in the Chrome search box, only in website text fields so that you can post in <a href="http://www.reddit.com/r/dogecoin">/r/dogecoin</a> :) I'd love to see proper text replacement in Chrome (or if someone could implement the Apple method)!</li>
</ol>
<br />
wow. So keyboard. Much typing.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com1tag:blogger.com,1999:blog-3442020393273673028.post-89700990225995952992013-10-24T11:02:00.001-05:002015-10-02T11:50:14.865-05:00Fixing xcrun: error: invalid active developer path (/usr/bin), missing xcrun at: /usr/bin/usr/bin/xcrun in OSX 10.9 Mavericks<div>
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div>
<span style="font-family: Arial, Helvetica, sans-serif;">When using git for the first time in OSX Mavericks you may run into a problem where you get the following error:</span></div>
<div>
<br /></div>
<div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;">xcrun: error: invalid active developer path (/usr/bin), missing xcrun at: /usr/bin/usr/bin/xcrun</span></div>
<div class="p1">
<br /></div>
<div class="p1">
<span style="font-family: Arial, Helvetica, sans-serif;">This error indicates can be fixed by running the following commands:</span></div>
<div class="p1">
<span style="font-family: Arial, Helvetica, sans-serif;"><br /></span></div>
<div class="p1">
</div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;">sudo xcode-select --install</span></div>
<div class="p1">
<br /></div>
<div class="p1">
This will force the Xcode command line tools to be reinstalled. Now we just run the following command to point xcrun to the correct path for the reinstalled tools:</div>
<div class="p1">
<br /></div>
<div class="p1">
</div>
<div class="p1">
<span style="font-family: Courier New, Courier, monospace;">sudo xcode-select -switch /</span></div>
<div class="p1">
<br /></div>
<div class="p1">
<span style="font-family: Arial, Helvetica, sans-serif;">Credit to people in this homebrew issue thread for identifying this fix:</span></div>
<div class="p1">
<span style="font-family: Arial, Helvetica, sans-serif;"><a href="https://github.com/mxcl/homebrew/issues/23500">https://github.com/mxcl/homebrew/issues/23500</a></span></div>
<div class="p1">
<br />
Edit: I have received feedback that this also works for 10.10 Yosemite and 10.11 El Capitan.</div>
</div>
jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-42363026011604316052013-01-09T11:11:00.002-06:002013-01-09T14:53:28.910-06:00ConnectWise bug: Inactive contact checkbox unchecks itself on save<b>Edit: According to support, ConnectWise is aware of this and will be rolling out a fix in version 2013.1. Until then, see Holly's workaround in the comments.</b><br />
<h3>
<br /></h3>
<h3>
The Scenario</h3>
<div>
<br /></div>
<div>
In ConnectWise, you want to inactivate a contact. This contact has at least one ticket associated with it.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgFuo3P1gPDQ5qVmcT5QbJuTet90CsT5ONFB3MFhba4AM_Tnt0oqRnvmadiE8tVtxMZFB2RDcuMUNRLraR6JcX0AOynmaQ505QqNEw4mPsNasWfW13AN6B8z-hIL1ij-i6bp9XU6q9Y/s1600/cwcontact1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgFuo3P1gPDQ5qVmcT5QbJuTet90CsT5ONFB3MFhba4AM_Tnt0oqRnvmadiE8tVtxMZFB2RDcuMUNRLraR6JcX0AOynmaQ505QqNEw4mPsNasWfW13AN6B8z-hIL1ij-i6bp9XU6q9Y/s400/cwcontact1.jpg" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<h3>
The Bug</h3>
<div>
<ol><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-DsE2lA2svy_a65X1Xz4gw3GqMM8pQ2sEiuJX5saDjznma5abCLfrLXCr-2PKQ3yJ5TBMVrZaNbVrk-fljS6QoUuGNBrB_X2Z3m2Z-lkdq8A-S8e4RD4WG56ZjDryM0q3HsjRsqTyBHQ/s1600/cwcontact2.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><br /></a>
<li>You check the checkbox that says "Inactive".</li>
<li>Immediately you get a popup asking if you want to reassign the tickets to a new user, you decide not to and just click the Update button.<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-DsE2lA2svy_a65X1Xz4gw3GqMM8pQ2sEiuJX5saDjznma5abCLfrLXCr-2PKQ3yJ5TBMVrZaNbVrk-fljS6QoUuGNBrB_X2Z3m2Z-lkdq8A-S8e4RD4WG56ZjDryM0q3HsjRsqTyBHQ/s1600/cwcontact2.jpg" imageanchor="1" style="clear: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="321" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-DsE2lA2svy_a65X1Xz4gw3GqMM8pQ2sEiuJX5saDjznma5abCLfrLXCr-2PKQ3yJ5TBMVrZaNbVrk-fljS6QoUuGNBrB_X2Z3m2Z-lkdq8A-S8e4RD4WG56ZjDryM0q3HsjRsqTyBHQ/s400/cwcontact2.jpg" width="400" /></a></li>
<li>Immediately you are back at the Contact screen and you should see the problem. <b>The inactive checkbox has been unchecked!</b><br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgFuo3P1gPDQ5qVmcT5QbJuTet90CsT5ONFB3MFhba4AM_Tnt0oqRnvmadiE8tVtxMZFB2RDcuMUNRLraR6JcX0AOynmaQ505QqNEw4mPsNasWfW13AN6B8z-hIL1ij-i6bp9XU6q9Y/s1600/cwcontact1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRgFuo3P1gPDQ5qVmcT5QbJuTet90CsT5ONFB3MFhba4AM_Tnt0oqRnvmadiE8tVtxMZFB2RDcuMUNRLraR6JcX0AOynmaQ505QqNEw4mPsNasWfW13AN6B8z-hIL1ij-i6bp9XU6q9Y/s400/cwcontact1.jpg" width="400" /></a></li>
<li>Now here is the part that is even more confusing. Even though this checkbox is unchecked, the contact has actually been inactivated and saved. This is a problem because if you simply surf away from this screen without clicking the save button, then everything works very well, but, in the event that you make the mistake of hitting the save button, then the contact magically becomes active again.</li>
</ol>
</div>
<h3>
The Fix</h3>
<div>
This should be a very simple fix for ConnectWise to resolve. All they need to do is ensure that the checkbox remains checked after the ticket reassignment popup is presented. For all I know this may have been fixed already. I am on ConnectWise version 20.12.1 (13220).</div>
<div>
<br /></div>
<div>
<br /></div>
jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com3tag:blogger.com,1999:blog-3442020393273673028.post-74817309689688393152012-10-22T14:48:00.000-05:002012-10-22T14:53:24.794-05:00Improvements needed in ConnectWise Configurations Page<h2>
A Rant</h2>
<br />
ConnectWise is powerful, there's no doubt there. It is even more powerful when it integrates with Labtech. Unfortunately, the user interfaces of both programs leave so much to be desired that it is really hard to be efficient on a daily basis.<br />
<br />
The problem is that ConnectWise configurations are, after two years, still very immature from a usability standpoint.<br />
<br />
A technician may work on hundreds of tickets each day. In theory, having computer information attached to that ticket would actually make that technician much more efficient. If you've been to a ConnectWise sales session, you know that this is the pitch you're given.<br />
<br />
Unfortunately, in my opinion, ConnectWise still misses the mark in this area. Managing a computer from ConnectWise actually takes longer than clicking into Labtech and searching for the computer by the same name.<br />
<br />
<h2>
The Problem</h2>
<br />
I'll try to demonstrate this by counting the number of clicks it takes to manage a server via RDP. For the purposes of this demonstration I'll assume the technician already has the ticket opened.<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<ol>
<li style="text-align: left;">See that little "view" link? That's click #1.<br /><a href="http://i.imgur.com/zehrB.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="66" src="http://i.imgur.com/zehrB.png" width="400" /></a></li>
<li style="text-align: left;">Now we get a bunch of information, which although potentially useful, mainly just takes up space. I am really just interested in the "Manage" button which will bring up the computer screen in Labtech. That's click #2.<br /><a href="http://i.imgur.com/jFTFS.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="140" src="http://i.imgur.com/jFTFS.png" width="400" /></a></li>
<li style="text-align: left;">Ready for things to get a bit ridiculous? We're about to have three clicks all in one step. Here we are clicking Redirectors > Network redirectors > Remote Desktop. Ok, so now we're at a whopping 6 clicks to just get a remote connection screen up.<br /><a href="http://i.imgur.com/OduqD.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="240" src="http://i.imgur.com/OduqD.png" width="400" /></a></li>
</ol>
<div>
Understandably, 6 clicks is small in the big scheme of things and may seem nitpick-y, but multiply that by thousands of tickets. </div>
<div>
<br /></div>
<div>
I respect the power of ConnectWise, but am always floored by the shear volume of self congratulation at their user events. They have a ton of work to do in the usability area and really haven't made any investments in this area in over two years.</div>
<div>
<br /></div>
<h2>
A short term solution</h2>
<div>
<br /></div>
<div>
Here is a mock up of a theoretical UI that would make me much more efficient as a technician.:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja7plgb6AjUBriulkVpBqC4jTXyJo4Q82z5V9G5QjbuX-s61MnCWikMhxAZkFqwxQ8iPm0PG786ObCuZeM6NYyATu6wSVuIH0VTmG5X-tTNXUDyDvWPRqaUTNUqmQNH6p38DRWJu71o_k/s1600/cw_config_mockup.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="108" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja7plgb6AjUBriulkVpBqC4jTXyJo4Q82z5V9G5QjbuX-s61MnCWikMhxAZkFqwxQ8iPm0PG786ObCuZeM6NYyATu6wSVuIH0VTmG5X-tTNXUDyDvWPRqaUTNUqmQNH6p38DRWJu71o_k/s640/cw_config_mockup.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<br />
<br />
<br />
<br />
<br />jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com8tag:blogger.com,1999:blog-3442020393273673028.post-66235250143041447132012-10-16T17:08:00.000-05:002012-10-16T17:08:46.998-05:00Node.js Applications as a Windows ServiceNormally I try not to repost stories, but this came in so handy that I have to share it. <br />
<br />
I was working on a getting Node.js to play nice with MongoDB. This is my first time working with Mongo so I cloned <a href="https://github.com/semu/mongoclikker/">MongoClikker</a> in an effort to bring a little gui to this text-based party. I eventually realized I wanted MongoClikker to be running at all times on my dev box (which is running Windows). Rather than having a command prompt at all times, I was able to use the instructions on <a href="http://blog.tatham.oddie.com.au/2011/03/16/node-js-on-windows/">Tatham Oddie's post</a> to make MongoClikker run as a service thanks to the help of <a href="http://nssm.cc/">NSSM</a>.<br />
<br />
I was able to make this work using the following commands:<br />
<br />
nssm.exe install mongoclikker "C:\Program Files\nodejs\node.exe" "C:\code\mongoclikker\app.js"<br />
net start mongoclikker<br />
<br />
So far it is working wonders!<br />
<br />
<br />
jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-55428957887320531662012-10-07T00:28:00.000-05:002012-10-07T00:28:22.747-05:00Nginx, Comet, and Symfony2. Fun times.<br />
What have I done?<br />
<br />
I've officially found a brand new config that I am testing out. This time it is ngninx with the <a href="http://pushmodule.slact.net/">http push module</a> to accomplish Comet pushes without the need for a full Bayeux implementation, php-fpm using a unix sock, and Symfony2 for the MVC legwork. I am looking at setting up HAProxy on the front end to do load balancing if possible in the future.<br />
<br />
So far it has been very painless with a few caveats. I'll be interested to see how the performance of the server can handle the repeated requests. At this point I have the push module running on static html pages. I will be curious to see if php is able to take the requests as fast as I can throw them down the open connection. Initially I'll be connecting to just MySQL dbs and maybe a SQL database occasionally. At some point I'd like to see if I can integrate with Amazon RDS. I am pretty psyched and can think of so many projects this combo could be used for.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-11831708864370998412012-08-08T10:27:00.001-05:002012-08-14T21:39:21.115-05:00Expanding on the built-in reporting capabilities in Labtech, ConnectWise, and ShoreTel<h2>
<br /></h2>
<h3>
The Problem: Reporting as an afterthought</h3>
<div>
We've all used software that boasts reporting capabilities, but how often do we actually take full advantage of this functionality? Personally, I only look at reporting when I actually need the report. My own time management issues aside, when I finally find the time to jump into reporting, I am usually extremely underwhelmed by the canned reports that are available to me. They are often static, have fields that I do not want, and cannot be exported automatically, on a schedule to a central repository. In an environment such as mine, I want to set up a report once and never touch it again. I want the reports to run on a schedule and I want the results to be automatically published and available via a version history.</div>
<div>
<br /></div>
<div>
I've finally come to the conclusion that many others have settled upon. Sharepoint with SQL Reporting Services is the ideal reporting solution for reporting across various . Software vendors can now officially stop adding reporting "features" into their enterprise software. Just give us access to your SQL or MySQL database, a schema description, and call it a day.</div>
<div>
<br /></div>
<div>
<br /></div>
<h3>
Thought shift: Reporting as an API</h3>
<div>
Unfortunately, in the MSP world, most built-in reporting "features" either misses the mark completely or is only slightly effective in delivering an overall business intelligence. It would be great if software manufacturers started to think about reporting as an API function instead of trying to bundle it in as part of their software. This is where business leaders in the software development field need to stand up to their project managers. Resist the urge! Do not bundle crappy, limited reporting into your software. Instead, spend your time documenting your database structure. Release this via a developer network and then let others develop easily against your software.</div>
<div>
<br /></div>
<div>
ConnectWise has done this already and are quick to offer reporting services to their customers for a fee. Good for them I say. My question is, why not remove the built in reporting completely. It may serve some people for one off reports, but for anyone who is serious about business intelligence, they will have to look elsewhere. Strangely enough, ConnectWise uses SSRS but misses the mark when it comes to educating partners on how to actually use these powerful features.</div>
<div>
<br /></div>
<div>
Labtech Software has attempted to revamp the reporting in its software package as well, but again, misses the mark as reports are stored inside the software itself and not easily exported. They are often clunky to navigate. Labtech is moving to a more robust web control center so perhaps they will have "reporting" built in to that. One thing is for sure, Labtech being on MySQL and ConnectWise on Microsoft SQL has limited how much the company is able to offer in terms of reporting.</div>
<div>
<br /></div>
<div>
<br /></div>
<h3>
The Solution: Bridging the gap with Sharepoint and SQL Server Reporting Services</h3>
<div>
Sharepoint with SQL Server Reporting services allows for us to bridge the gap between Labtech and ConnectWise. We can run reports against both MySQL and MSSQL with the same system. All reports can be run on a schedule automatically and dumped into locations on Sharepoint that are immediately accessible to all members of an organization, not just those with access and knowledge to a specific system.</div>
<div>
<br /></div>
<div>
Although the setup time and effort needed to write the SQL queries is much larger than the built in reports, we can actually start to learn about the inner workings of our organization. The metrics are usable, relevant, and you set them up once and walk away.</div>
<div>
<br /></div>
<div>
Using the same system I've been able to write reports against our Shoretel call logs as well. This gives us an idea of call volumes over time and on how our employees are doing on answering calls.</div>
<div>
<br /></div>
<div>
I try to go into a bit more detail later on how exactly this can be implemented.</div>
<div>
<br /></div>
<div>
<br /></div>
jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-62658178193543614292012-03-14T17:03:00.002-05:002012-03-14T17:03:18.114-05:00Google Page Speed: Gzip and Caching, order mattersOk so this may seem pretty simple and obvious, but it is late in the day and my brain is fried so I just wasted time on it. If you're ever using Google Page Speed and it suggests enabling caching and enabling Gzip compression, make sure you enable caching last. I just accidentally enabled caching, then went about enabling Gzip for all of my mime types. The problem is that Page Speed was (correctly) listening to my caching rules and as such, I was fooled into thinking my Gzip rules were not taking. In reality, Gzip was working fine, but the JS and CSS files were cached and thus my browser still viewed them as "uncompressed". Order matters.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-18104894839180796772012-03-12T23:35:00.001-05:002012-03-12T23:35:05.307-05:00GOAT Web Development StackOk, real talk. There's a lot of absolute garbage out there. Defining your core quality tools is made difficult for new developers as they try to sift through the good, the bad, and the ugly.<br>
<br>
I've put together what is my current stack of what I consider quality development tools. I've put them all on a server in a file called GOAT (Greatest of all time). It works like a personal repository for my favorite frameworks and plugins.
<br><br>
<h4>Here they are:</h4>
<br>
<a href="http://twitter.github.com/bootstrap/">bootstrap</a> (aka <a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap 2</a>, use <a href="http://bootswatch.com/#gallery">bootswatch.com</a> to get a good theme.<br>
<a href="http://www.eyecon.ro/bootstrap-colorpicker/">bootstrap.colorpicker</a> (Color picker for Bootstrap)<br>
<a href="http://www.eyecon.ro/bootstrap-datepicker/">bootstrap.datepicker</a> (Date picker for Bootstrap)<br>
<a href="http://jquery.com/">jquery</a> (A no brainer...)<br>
<a href="http://harvesthq.github.com/chosen/">jquery.chosen</a> (Nicely style SELECT elements for easy filter)<br>
<a href="http://needim.github.com/noty/">jquery.noty</a> (The best jquery notifications plugin out there)<br>
<a href="http://craigsworks.com/projects/qtip2/">jquery.qtip2</a> - Excellent Tooltip Library<br>
<a href="https://github.com/tommoor/tinycon">jquery.tinycon</a> - HTML5 Favicon Manipulation Library<br>
<a href="http://jquerymobile.com/">jquery.mobile</a> (Slowly becoming more stable, very neat stuff so far)<br>
<a href="https://github.com/commadelimited/jQuery-Mobile-Bootstrap-Theme">jquery.mobile.bootstrap.theme</a> (A great theme for jquery mobile)<br>
<a href="https://github.com/joggink/mobileGmap">jquery.mobile.gmap</a> - Responsive Google Maps for mobile devices<br>
<a href="http://addyosmani.github.com/jquery-ui-bootstrap/">jquery-ui.bootstrap</a> (The bootstrap theme for jquery UI)<br>
<a href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/smoothness/jquery-ui.css">jquery-ui.smoothness</a> (A simple, clean theme for JQuery UI)<br>
<a href="http://knockoutjs.com">knockout</a> (Knockout.js is simply amazing MVVM. Do their tutorial and you'll see why.)<br>
<a href="http://sammyjs.org/">sammy</a> (Sammy is a small library that goes well with Knockout.js for handling RESTful eventful javascript)<br>
<a href="http://www.fuelphp.com">FuelPHP</a> (FuelPHP is the library I've settled on for doing my MVC and so far I've very impressed)<br>
<br><br>
<h4>Honorable mentions:</h4>
<br>
<a href="http://foundation.zurb.com/">Foundation by Zurb</a> (I want to use this, but Bootstrap 2 make is tough. I keep going back and forth)<br>
<a href="http://loopj.com/jquery-tokeninput/">jquery.tokeninput</a> (Token input is nice but development has stopped. In the end, I went with jquery.chosen instead.<br>
<br>
That's all I've got for now. I will try to update this as I add to it. Would love to hear suggestions or potential additions to this list of core dev tools/frameworks for web application developers.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-81389501734274800972012-03-05T20:19:00.001-06:002012-08-29T12:47:48.672-05:00Get Wireshark to Work in Windows 8I came across very handy fix for Wireshark in Windows 8 was posted today by user thejoefish.
http://www.reddit.com/r/sysadmin/comments/qiwdv/windows_8_and_wireshark_easy_fix/
"For those of you out there experimenting with Windows 8, you were probably upset by the fact that Winpcap won't run. If you do an upgrade from a Win7 box to a Win8 it warns you, and Server 8 just refuses to list any capture interfaces.
It turns out the issue is with the installer only and not NDIS 6.2 or something. Install wireshark but don't run the winpcap installer. Then download Winpcap for x64 separately. Go to the binary, right click and choose compatibility mode. Run it in mode for Win 7 and as administrator.
It installs and run without issue. It will even capture on the new Windows Server 8 built in teaming just fine."
Very handy stuff for those moving to Windows 8.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com1tag:blogger.com,1999:blog-3442020393273673028.post-56891252984731595712012-03-02T11:31:00.001-06:002012-03-02T11:31:36.327-06:00PsExec with UAC EnableChristopher Byrd has a nice little write up on using PSExec on UAC enabled machines: http://riosec.com/Windows-UAC-PsExec.
I will be updating my articles accordingly with the proper syntax, but for now, this is my lazy solution.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-11447171551763466622012-02-29T10:59:00.000-06:002012-02-29T10:59:16.262-06:00JQuery Mobile Prototyping with Codiqa<h2>JQuery Mobile Prototyping with Codiqa</h2>
Codiqa lets you mock up your JQuery Mobile apps without installing any software. My big question here is the pricing. It seems a bit steep considering there are other mockup sites out there that will likely soon add jQuery Mobile to their list of possible mockups. My big question is, why Codiqa over other mockup options? They do give you a nice 30 day trial and you can actually "use" the interface after mocking it up by sliding around all the elements.
Worth a look.
<a href="http://codiqa.com/">http://codiqa.com/</a>jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-16525234767634021802012-02-07T18:32:00.000-06:002012-02-07T18:32:41.763-06:00The Microsoft Office Safe Mode / UAC Catch-22 in Windows 7<br>
<h2>Symptoms</h2><br />
When attempting to open Word, Outlook or another Microsoft Office Application, the program hangs or the ribbon or other features are missing or distorted. Being skilled troubleshooters, we know that we should start up our application in "/safe" mode to make sure that it is indeed an add-on that is causing the problem. Assuming safe mode starts up, we should (in theory) be able to disable the problem add-on.
<br><br>
But wait! Windows 7 with UAC enabled causes put the breaks on even these basic troubleshooting steps.<br /><br />
<h2>Recreating the Problem</h2>
In my case, I witnessed this on a Windows 7 SP1 computer with Microsoft Office 2007 and several COM add-ons installed. I was unable to open Word in normal mode without the Ribbon disappearing which meant I could not get to options to disable the addin. I went to run Word in safe mode by typing winword /safe in the Start Menu. Word popped up as expected so I made the assumption that this was indeed a Word add-on that was causing the issue. I went to disable the COM addon and got the following error: "This add-in is installed for all users on this computer, and can be connected or disconnected by an administrator".
<br/><br/>
This seems like a reasonable request given that we are disabling some software. The problem? This user is actually a local administrator on the machine! They should already have the needed rights to disable this add-on. Ok so how can we fix this?<br /><br />
<h2>The Solution</h2>
<br />
I was able to track down a <a href="http://www.howtogeek.com/howto/microsoft-office/make-outlook-faster-by-disabling-unnecessary-add-ins/">solution</a> for the error which includes right clicking Word and choosing "Run an Administrator". Unfortunately I was not able to actually perform the fix listed because my issue removed the ribbon from Word. Like I stated above, my only option was to go into Word's safe mode.<br><br>
The biggest problem I ran into was when I typed "winword /safe" into the Start Menu then right clicked and choose "Run as Administrator". Oddly, this opens Word as Administrator, but in regular mode, apparently ignoring the parameters I tried passing it.
<br><br>
To actually fix it, you simply need to type cmd, right click, Run As Administrator. This will open an elevated command prompt. Now type: cd C:\Program Files\Microsoft Office\Office12\winword.exe /safe
Now you will get Word to run as an admin, in safe mode and can remove your faulty add-ons. This should work for any application and not just Microsoft Office applications.
Oh, last step, turn off UAC. :)jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com2tag:blogger.com,1999:blog-3442020393273673028.post-74858076949788581782011-09-13T17:11:00.000-05:002011-09-13T17:12:22.853-05:00Calendar Overlay Malfunction Error in Sharepoint 2010<h2>Symptoms</h2><br />
When accessing a calendar that utilizes the Calendar Overlay feature of Sharepoint. You get an error that says the error "Unable to find specified web in the given url" followed by a url. This may occur when viewing an already created calendar or when you're drilled down in to the properties for the specific overlay. <br />
<br />
First thing, fully patch your Sharepoint server. In April 2010 there were some updates that fixed certain issues relating to this problem. You need to patch the server before doing anything.<br />
<br />
If you're fully patched and still having the issue then you're likely viewing the site at an address that is different from the address that was logged into when the overlay was originally created. Generally this is due to accessing the site via an alternate AAM accidentally. Some ways that you'd probably do this without even knowing you're doing it: <br />
- Visiting the site at the external fqdn and not having it set as default<br />
- Visiting the site at the internal netbios name and not the external fqdn after setting the external fqdn it as default<br />
- OR visiting the site at http:// and not https:// when you're using ssl as your default.<br />
<br />
<br />
Either way, you're going to have to fix those issues before proceeding. Here are some resources I found useful to do that:<br />
<br />
<a href="http://support.microsoft.com/kb/2025977">http://support.microsoft.com/kb/2025977</a><br />
<a href="http://social.technet.microsoft.com/Forums/en/sharepoint2010setup/thread/884698ea-390f-465b-abb4-f1fb374f1cdc">http://social.technet.microsoft.com/Forums/en/sharepoint2010setup/thread/884698ea-390f-465b-abb4-f1fb374f1cdc</a><br />
<a href="http://support.microsoft.com/kb/2512804">http://support.microsoft.com/kb/2512804</a><br />
<a href="http://support.microsoft.com/kb/2516471">http://support.microsoft.com/kb/2516471</a><br />
<br />
Now, to get to this point I used all of the resources above, but my issue was still not fixed! When I went to the overlay properties for my malfunctioning overlay I'd see the following:<br />
<br />
<a href="http://i.imgur.com/iReJV.jpg"><img src="http://i.imgur.com/iReJV.jpg" alt="Sharepoint 2010 Overlay Error Screenshot" height="300" width="400" /></a><br />
<br />
Now, let's assume that I know for a fact that https://sharepoint.example.com is valid and set as the default AAM, I'm accessing it from the proper url and I have the needed access, but overlays still aren't working. That was the case I was in. So here's how I fixed it.<br />
<br />
<h2>Solution</h2><br />
Ok, in this case I really didn't have to fix anything. I did have to find a little bug in the Overlay settings page. If you had previously clicked the Resolve button and caused an error then the error remained even if you had fixed the condition. So while I had fixed the issue, the overlay settings page still displayed the same error. The only way you would notice this is if you hit the "Resolve" button and notice that the error message text remains the same as before you changed the address. So, to conclude, even though an error is displayed on the overlay settings page, you can still safely hit the Save button and all will work correctly.<br />
<br />
This stumped me for some time because the urls I was using were so similar (I'd just switched from http to https). I didn't even notice that the error still was showing the old url and not the new url I'd entered before hitting Resolve.<br />
<br />
All is now well with my overlays!jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-4028602448428152932010-06-23T12:28:00.000-05:002010-06-23T12:28:32.817-05:00PSExec failing on Windows XP 64-bit<h2>Symptoms</h2>Recently, I used a batch script in combination with PSExec to try to install an MSI file on a remote computer with Windows XP 64-bit. The installation worked just fine on Windows XP and Windows 7 32-bit but failed on the 64-bit OS. I kept getting the cryptic return code 1 from the batch script and redirecting the output of the batch script yielded an empty log file.<br />
<br />
I was pulling my hair out when I noticed I was using version 1.95 of PSExec. After upgrading my batch script magically worked! I'm not sure why I was using an old version but from here forward I'll make sure to have 1.98 installed.<br />
<br />
<h2>Solution</h2>Install PSExec 1.98 and magically PSExec now works just fine on Windows XP 64-bit machines.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com2tag:blogger.com,1999:blog-3442020393273673028.post-85834255157496209512010-04-19T14:02:00.000-05:002010-04-19T14:04:13.478-05:00Running multiple applications concurrently from a batch script in Windows 7 or XP<h2>The Problem</h2><br />
Let's assume your organization has a fully automated PC setup procedure but one legacy application requires you to copy and paste (or manually type) a serial number. You are setting up 1000 computers with this app and there's no work around yet. Huge waste of your time right?<br />
<br />
What do you do? Well you could open a text file with the serial number before running the installer. This way you only have to perform copy/paste and don't have to go on your network drive to find the file each time. This should save you about a 30 seconds on each machine or 500 minutes total. Not bad for a simple little script. So how do we accomplish this?<br />
<br />
<h2>The Old Solution</h2><br />
In Windows XP this can be accomplished by creating a Windows Shortcut to the text file and the application then calling our Shortcuts from the script as below:<br />
<br />
<code>"\\fileserver\My Folder\myinstaller.lnk"<br />
"\\fileserver\My Folder\mytextfile.lnk"</code><br />
<br />
Unfortunately, this doesn't work in Windows 7 or Vista. Why? <br />
<br />
It has to do with how both OS's handle shortcuts. Previously XP would invoke the application from a Windows Shortcut wait for the return code. This allowed you to invoke as many applications from a shortcut as you wanted without ever having to wait for a return code. In the updated Windows 7 and Vista operating systems, when you invoke a shortcut the batch script actually waits for the application to return a return code before proceeding. <br />
<br />
Ok, so using Windows Shortcuts isn't an option unless we're using only XP. So how else can we accomplish this?<br />
<br />
<h2>The New Solution</h2><br />
Basically we're going to do this:<br />
<br />
<code>start "" "\\fileserver\Installers\MyApplication\setup.exe"<br />
start "" "\\fileserver\My Folder\mytextfile.txt"</code><br />
<br />
This works by invoking the using the <code>start</code> command. The first parameter is two quotation marks and the second is the location of the program or document to run. Notice that we actually invoke the text document second in this case because we want it to appear on top so that you can copy the serial number, then close the document and have setup already running in the background.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com0tag:blogger.com,1999:blog-3442020393273673028.post-24189411198372437432010-04-15T13:41:00.000-05:002010-04-16T17:30:47.922-05:00'Parameter is incorrect' error when editing empty batch file in Windows 7<h2>Background</h2>As I've already said, I write batch scripts often. In Windows XP (and ideally Windows 7) I'd follow these steps to create a new bat file:<br />
<ul style="list-style-type: upper-roma;"><ol>Right click and choosing New > Text Document</ol><ol>I then change the file extension to .bat</ol><ol>Next I right click on the file and choose Edit</ol><ol>A blank batch script opens up in Notepad.</ol></ul><br />
Unfortunately the steps above fail in Windows 7. Windows 7 does not like to you edit blank batch files. From what I understand it has something to do with the way UAC treats batch file (yes even when just editing them, and yes even if UAC is turned off). This really cramps my style and inhibits my workflow.<br />
<br />
The unfortunate part is that since this is a UAC/Windows 7 problem and not a Notepad problem we won't be helped by editing the context menu item to point it to some other editor like Wordpad or Notepad++. <br />
<br />
<h2>Recreating the Problem</h2><br />
To see this in action simply follow the steps above to create a blank batch file and try it out. You'll get a vague "parameter is incorrect" error. Now, to confirm that it indeed only happens with blank documents open notepad separately from the start menu and drag and drop the blank bat file inside. Add a few characters to the file hit save, then close notepad. Now right click on the batch file and click Edit. Voila! Magically the Edit command in the context menu works. I haven't found a fix for this yet but will post as soon as I do.<br />
<br />
<h2>Solution</h2><br />
The problem, as it turns out, exists not only for batch files but also for registry files and other "protected" (aka locked down) files. These files have the special capability of editing the system's resources and thus they have special protection against being run/edited when they are empty. I don't know if this is supposed to be protection against null pointer protection but it sure annoyed me. <br />
<br />
Anyhow, I (kinda) found a solution. Basically, instead of fixing the actual problem this is a workaround that puts one space inside of all newly created text documents. It only applied to those created by right clicking and choosing New > Text Document. This fix means text documents will no longer be empty and therefore won't throw the error. <br />
<br />
The fix it to add a new string value in the ShellNew portion of the registry entry for the .txt file type. The value you need to create is this one:<br />
<br />
<code>[HKEY_CLASSES_ROOT\.txt\ShellNew]<br />
"Data"=" "</code><br />
<br />
If you are lazy like me you can get a .reg file to make the change for you by <a href="http://groups.google.com/group/i-broke-it/web/EditEmptySystemFile.zip">downloading this solution's zip file</a> from my Google Group.<br />
<br />
As you can see this just creates a space in the text files when they are created. It is a bit dirty, but works, and will get you on your way! Again, let me know if you come up with a more elegant solution.jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com1tag:blogger.com,1999:blog-3442020393273673028.post-69954395057333624532010-04-14T11:37:00.000-05:002010-04-16T15:14:28.473-05:00Taming All Users Desktop and Start Menu Environment Variables in Windows 7 and XP<h2>Some Background</h2><br />
This week I installed Windows 7. I enjoy many of the new features but have also come across several annoyances. I expected to have a few issues but those relating to batch scripting and the location of profile information are particularly perplexing. There may be some rationale behind moving the data but I haven't been able to find an official Microsoft explanation. At my job we manage thousands of workstations so we've got a heavily scripted deployment environment. It is extremely efficient except during transitional periods when we are between operating systems. Currently, we are testing a lab of Windows 7 machines but will still plan on supporting well over 2000 Windows XP machines for several more years. My goal is to make the transition to Windows 7 as painless and quick as possible. Before I can do that however I must get our batch scripts to be cross-OS between Windows 7 and Windows XP. I've left out Vista because we never deployed a single Vista machine (thank goodness). Enough babble, onward!<br />
<br />
<h2>The Guts of the Problem</h2><br />
When writing batch scripts in Windows XP, you can access the All Users Desktop and Start Menu paths using these enironment variables:<br />
<br />
<code>%ALLUSERSPROFILE%\Desktop<br />
%ALLUSERSPROFILE%\Start Menu</code><br />
<br />
These really made it quite easy to...<br />
<ul><li>script a file copy</li>
<li>pass these paths as parameters to other scripts or programs</li>
<li>or even to open to these locations in windows explorer</li>
</ul>In Windows 7, for unknown reasons, the environment variables have been modified and the All Users Desktop and Start Menu paths have been moved to completely separate folders. So you'll need to use these variables instead:<br />
<br />
<code>%PUBLIC%\Desktop<br />
%PROGRAMDATA%\Microsoft\Windows\Start Menu\</code><br />
<br />
Technically you could use the Windows XP environment variables, but they don't work as expected in all situations. Here is a simple demonstration. Open an elevated command prompt and type the following 3 commands and hit enter after each line.<br />
<br />
<code>cd %ALLUSERSPROFILE%\Desktop<br />
mkdir test<br />
dir</code><br />
<br />
Now, look on your Desktop. The directory "test" was successfully created. Great! That part worked. Now, head back to the command prompt for the bad news. After you typed the dir command we would expect to see a directory listing that lists the directory "test". Instead we are greeted with an empty, unhelpful directory listing that states "File Not Found". Well we just created a directory so we know this just isn't true. Something has gone horribly wrong. If you want another example of why this is a problem simply type %ALLUSERSPROFILE%\Desktop into Windows Explorer. You'll get an access denied message. Fail.<br />
<br />
So we are in a bit of a bind here. We don't want to write a bunch of IF/ELSE statements in our scripts but since the paths returned by environment variables are flawed we really don't have any other choice. So how can we do this in as few lines as possible? Continue below for a 1 line solution that requires some editing of your Windows XP only scripts.<br />
<br />
<h2>A Crude but Acceptable Solution</h2><br />
Place the following one line of code (there should not be a line break) at the top of your batch scripts then use %AUDESKTOP% or %AUSTARTMENU% to refer to the All Users Desktop and Start Menu respectively.<br />
<br />
<code>IF DEFINED PUBLIC (SET AUDESKTOP=%PUBLIC%\Desktop) & (SET AUSTARTMENU=%PROGRAMDATA%\Microsoft\Windows\Start Menu) ELSE (SET AUDESKTOP=%ALLUSERSPROFILE%\Desktop) & (SET AUSTARTMENU=%ALLUSERSPROFILE%\Start Menu)</code><br />
<br />
Here is a little demo script that you can use to make sure the script is working correctly in your environment:<br />
<br />
<code>IF DEFINED PUBLIC (SET AUDESKTOP=%PUBLIC%\Desktop) & (SET AUSTARTMENU=%PROGRAMDATA%\Microsoft\Windows\Start Menu) ELSE (SET AUDESKTOP=%ALLUSERSPROFILE%\Desktop) & (SET AUSTARTMENU=%ALLUSERSPROFILE%\Start Menu)<br />
ECHO All Users Desktop is at path: %AUDESKTOP%<br />
ECHO All USers Startup is at path: %AUSTARTMENU%<br />
pause</code><br />
<br />
There may be other differences in environment variable names between Windows 7 and Windows XP and this script could certainly handle those if discovered. Please post them in the comments for the rest of us.<br />
<br />
<h2>How to Actually Implement It?</h2><br />
Ok let's assume you have a simple batch script such as the one below that currently only works in Windows XP but that you'd like to get working in Windows 7 too. All it does is open two Windows Explorer windows (one to the all users desktop and one to the all users start menu) but is giving you two access denied errors in Windows 7:<br />
<code><br />
%SystemRoot%\Explorer.exe /n, "%ALLUSERSPROFILE%\Desktop%"<br />
%SystemRoot%\Explorer.exe /n, "%ALLUSERSPROFILE%\Start Menu"<br />
</code><br />
<br />
Your modified, cross-OS script should read like this and will work properly in both Windows 7 and Windows XP:<br />
<code><br />
IF DEFINED PUBLIC (SET AUDESKTOP=%PUBLIC%\Desktop) & (SET AUSTARTMENU=%PROGRAMDATA%\Microsoft\Windows\Start Menu) ELSE (SET AUDESKTOP=%ALLUSERSPROFILE%\Desktop) & (SET AUSTARTMENU=%ALLUSERSPROFILE%\Start Menu)<br />
%SystemRoot%\Explorer.exe /n, "%AUDESKTOP%"<br />
%SystemRoot%\Explorer.exe /n, "%AUSTARTMENU%"<br />
</code><br />
<br />
Voila! You have a cross browser script. Now, I admit it is a pain to go through and Find/Replace all the instances of the old style of scripting but if you have a large enough support environment it will be worth your time since you won't have to have two versions of the same script and only has to be done this one time.<br />
<br />
<h2>One Final Caveat</h2><br />
Remember, when you run batch scripts that access either of these folders you're going to need elevated (administrator) permissions. This means you need to right click on the script and choose "Run as administrator".<br />
<br />
If anyone finds a better way to implement this or knows of a hidden environment variable that I am missing, please let me know!jtdhttp://www.blogger.com/profile/10186995783108127593noreply@blogger.com11