Disclaimer: This post is a joke based on a gift that I received this week from my ever-so creative wife. If you are looking for the latest and greatest news regarding the Motorola Droid, coming out on Verizon this Friday, you will need to look elsewhere :) With that said, let's have some fun!
Ever since I heard about the Droid, I've pretty much been obsessed with getting more information about it. I've been following any Android news website I can find, and also do daily searches on Google news. I am currently a Verizon customer and have long awaited the day when they present their customers with a truly "open" device that hasn't been gimped. Well my friends, I believe Friday is that day.
In any case, if I do end up getting the Droid it will partially be because of the mercy of my wife. I just used my new-every-two upgrade this summer to get the enV3 by LG (a great phone by the way), so I'm not eligible for a new phone discount anytime soon. However, my lovely wife, is a bit overdue for an upgrade. So, I had to convince her that she does in fact want my enV3 and really does want to let me use her upgrade. Well, sometime after having that talk with her, she decided to make a little gift for me: her take on the droid without seeing any pictures or reading any reviews. All she had to go on was things she may have heard me say and things she knew about technology in general -- and mind you, my wife is not a techie.
So, the only thing not self-explanatory in the picture above is the antenna where it says: "Perfect Reception Always". Here are the rest of the pictures (unfortunately when she tried to write on the tape holding it all together, it didn't stay, so I'll clarify when necessary):
In case you can't tell, the top half says "Free Navigation" and the bottom has "USB", "Ear Phones" and "Dial-up Modem" (Love that one!).
I couldn't stop laughing when I saw the "Jedi Button" -- who KNOWS what kind of power will be unleashed when I press it!
Here you have the "Hi-tech camera" and "Google Maps".
The "Cool Google easy Keyboard" -- I'm not sure what some of those symbols are though :)
All in all, a pretty good device -- don't ya think?
Tuesday, November 3, 2009
Tuesday, October 13, 2009
Wyse Device Manager Agent Disabled
In our thin client implementation we have decided on going with Wyse. We're using the Wyse OS based V10Ls for standard users and then Windows XPe based R90Ls for users that require special setups. Managing the V10Ls could not be easier: set up an FTP server with one config file and put the thin client in DHCP. The rest is magic. However, with the R90Ls we needed a way to customize the factory XPe image and deploy it to the rest of the devices. We initially looked into using Altiris for imaging, since we were already using it for some of our servers, but soon discovered that it would cost us about $5,000 in licensing to image the rest of our thin clients.
Enter Wyse Device Manager (WDM). This free thin client management solution from Wyse is great for keeping an inventory of your thin client devices, and can also be used for things like remote control and imaging. The process of taking an image of a thin client is fairly simple -- customize the current image to your liking, run a built-in prep script on the client (so that the device maintains its "uniqueness") and then take the image using the WDM interface.
As I started creating our XPe images, I noticed something. After every time we took an image, the WDM Agent service was stopped and disabled on the thin client (called the HAgent service in the Services tool). No matter what I did, this service would be disabled causing the device to no longer be in communication with the WDM server. Obviously this defeats the purpose since going forward we would not be able to remotely control or image this thin client.
After doing some digging, I discovered what the issue was: a typo in the built-in prep script. In prep_4_man.bat in C:\Windows\Setup there was a line that read:
regedit /s /i c:\windows\setup\isetup.reg
But there was no file named isetup.reg in C:\Windows\Setup -- but there WAS a file named setup.reg.
I simply removed the extra "i" from the line, and that triggered the train of scripts that run post-imaging that cause the thin client to establish itself and enable the WDM Agent service.
I'm not sure how many people are building custom XPe images with Wyse thin clients -- but if you're using the latest XPe build from Wyse, this should help!
Enter Wyse Device Manager (WDM). This free thin client management solution from Wyse is great for keeping an inventory of your thin client devices, and can also be used for things like remote control and imaging. The process of taking an image of a thin client is fairly simple -- customize the current image to your liking, run a built-in prep script on the client (so that the device maintains its "uniqueness") and then take the image using the WDM interface.
As I started creating our XPe images, I noticed something. After every time we took an image, the WDM Agent service was stopped and disabled on the thin client (called the HAgent service in the Services tool). No matter what I did, this service would be disabled causing the device to no longer be in communication with the WDM server. Obviously this defeats the purpose since going forward we would not be able to remotely control or image this thin client.
After doing some digging, I discovered what the issue was: a typo in the built-in prep script. In prep_4_man.bat in C:\Windows\Setup there was a line that read:
regedit /s /i c:\windows\setup\isetup.reg
But there was no file named isetup.reg in C:\Windows\Setup -- but there WAS a file named setup.reg.
I simply removed the extra "i" from the line, and that triggered the train of scripts that run post-imaging that cause the thin client to establish itself and enable the WDM Agent service.
I'm not sure how many people are building custom XPe images with Wyse thin clients -- but if you're using the latest XPe build from Wyse, this should help!
Wednesday, September 16, 2009
Users Unable to Change Expired Passwords on Windows Server 2008
In our environment, we have Citrix XenApp 5.0 publishing desktops from Windows Server 2008. Our users connect to these published desktops via thin client or through the web interface. We recently decided to put our password policy into effect, which included expiring user passwords once a month.
When the first user experienced the password expiration interface in Server 2008 after coming back to a locked workstation, they received the following message:
"The password for this account has expired. To change the password, click Cancel, click Switch User, and then log on."
However, there was no cancel button to click on, and no apparent way for them to either change their password or log off and log on again to do so. The only way we could get around this was for them to call the help desk, we'd manually reset their passwords in Active Directory and then they could log in again using that new password. An unacceptable solution in my opinion :)
So, I started to do some digging and found the following Microsoft KB article:
http://support.microsoft.com/kb/958900
which has an associated hotfix, that we applied and users were able to happily go on changing their passwords when they expired.
But then, we noticed something else. Users that had two monitors set up at their station were experiencing an interesting symptom now: When the Server 2008 login screen came up, the dialog was now centered in between the two monitors (instead of only being in the primary), and it only showed the left half of the dialog in the primary monitor. The secondary monitor was just completely black.
Oddly enough, the solution was to upgrade to Server 2008 SP2. The service pack includes the previously mentioned hotfix, but for some reason did not have the same affect on dual monitors that the hotfix alone had.
I spent several hours scouring the web for a solution and didn't find anything -- so hopefully this will help you!
When the first user experienced the password expiration interface in Server 2008 after coming back to a locked workstation, they received the following message:
"The password for this account has expired. To change the password, click Cancel, click Switch User, and then log on."
However, there was no cancel button to click on, and no apparent way for them to either change their password or log off and log on again to do so. The only way we could get around this was for them to call the help desk, we'd manually reset their passwords in Active Directory and then they could log in again using that new password. An unacceptable solution in my opinion :)
So, I started to do some digging and found the following Microsoft KB article:
http://support.microsoft.com/kb/958900
which has an associated hotfix, that we applied and users were able to happily go on changing their passwords when they expired.
But then, we noticed something else. Users that had two monitors set up at their station were experiencing an interesting symptom now: When the Server 2008 login screen came up, the dialog was now centered in between the two monitors (instead of only being in the primary), and it only showed the left half of the dialog in the primary monitor. The secondary monitor was just completely black.
Oddly enough, the solution was to upgrade to Server 2008 SP2. The service pack includes the previously mentioned hotfix, but for some reason did not have the same affect on dual monitors that the hotfix alone had.
I spent several hours scouring the web for a solution and didn't find anything -- so hopefully this will help you!
Thursday, August 27, 2009
How to add a DNS suffix from a command prompt
We recently moved our datacenter, which involved adding our servers to our new domain and related DNS server (let's call it mydomain.com). Previously, users connected to a telnet server by hostname (let's call it server1). Well, after moving our datacenter, users could no longer connect to the server unless they used its FQDN of server1.mydomain.com.
At this point we knew we'd have to hit every single computer (hundreds) on our network to update their preset connections. We had an option -- we could either join each machine to the domain, or we could add a DNS suffix of mydomain.com to their local area connection tcp/ip properties. We opted for the latter, since joining each machine to the domain would take longer, and is unnecessary considering we're in the process of rolling out thin clients to replace each of these machines.
In order to add a DNS suffix to a TCP/IP connection remotely, all you need is a list of IP addresses and the following command:
wmic /USER:administrator /PASSWORD:adminpassword /node:@c:\iplist.txt nicconfig call SetDNSSuffixSearchOrder (mydomain.com)
Where C:\iplist.txt contains a list of IP addresses, line separated.
After running this command for all of the IP addresses, users could then resolve server1 without needing to type out the whole FQDN. Of course, this command could also be put in a script if you wanted to use it in such a way as well.
Happy Networking!
At this point we knew we'd have to hit every single computer (hundreds) on our network to update their preset connections. We had an option -- we could either join each machine to the domain, or we could add a DNS suffix of mydomain.com to their local area connection tcp/ip properties. We opted for the latter, since joining each machine to the domain would take longer, and is unnecessary considering we're in the process of rolling out thin clients to replace each of these machines.
In order to add a DNS suffix to a TCP/IP connection remotely, all you need is a list of IP addresses and the following command:
wmic /USER:administrator /PASSWORD:adminpassword /node:@c:\iplist.txt nicconfig call SetDNSSuffixSearchOrder (mydomain.com)
Where C:\iplist.txt contains a list of IP addresses, line separated.
After running this command for all of the IP addresses, users could then resolve server1 without needing to type out the whole FQDN. Of course, this command could also be put in a script if you wanted to use it in such a way as well.
Happy Networking!
Monday, August 10, 2009
How to "forget" network share credentials so you can authenticate as another user
UPDATE (10/26/09): I recently stumbled across a case where I was getting the "multiple connections" error and the steps below did not resolve the issue. There is one more place to look (especially if you checked the box to "Remember my password" when connecting to the network share) to remove stored credentials. Go to Control Panel -> User Accounts. Then go to the Advanced tab and under "Passwords and .NET Passports" click on "Manage Passwords". If the server you're trying to connect to is listed there, you're in luck. Simply remove the entry, and log off and then back in again. You should then be prompted for your new credentials.
This is something that has saved me a lot of time by removing the need to log out from my current Windows session. Have you ever connected to a network share and then wanted to authenticate as another user and received the following error:
"Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed."?
For the longest time, I thought the solution was to log out and then back in again to authenticate as the other user. It turns out there is a much easier way to get your computer to "forget" your current credentials so that you can use alternative ones. Simply bring up a command prompt and type:
net use * /d /y
This will effectively disconnect all remote connections as well as their associated credentials.
If you have more than one network connection open and you'd rather just delete a specific connection, type in:
net use
in a command prompt window. This will list all of your current remote connections. To delete a specific connection (let's say to \\server\share), type in the following in the command prompt:
net use \\server\share /d /y
If you're more of a GUI fan, you can go to My Computer and then select:
Tools -> Disconnect Network Drive
Then just select the specific connection that you'd like to disconnect and click the OK button.
I hope that this saves you some time!
This is something that has saved me a lot of time by removing the need to log out from my current Windows session. Have you ever connected to a network share and then wanted to authenticate as another user and received the following error:
"Multiple connections to a server or shared resource by the same user, using more than one user name, are not allowed."?
For the longest time, I thought the solution was to log out and then back in again to authenticate as the other user. It turns out there is a much easier way to get your computer to "forget" your current credentials so that you can use alternative ones. Simply bring up a command prompt and type:
net use * /d /y
This will effectively disconnect all remote connections as well as their associated credentials.
If you have more than one network connection open and you'd rather just delete a specific connection, type in:
net use
in a command prompt window. This will list all of your current remote connections. To delete a specific connection (let's say to \\server\share), type in the following in the command prompt:
net use \\server\share /d /y
If you're more of a GUI fan, you can go to My Computer and then select:
Tools -> Disconnect Network Drive
Then just select the specific connection that you'd like to disconnect and click the OK button.
I hope that this saves you some time!
Tuesday, July 21, 2009
Diving Into CakePHP and Ruby on Rails
I love web development. It's the one kind of programming that seems to continually intrigue me and bring me back for more. I developed my first site using PHP (essentially on the WAMP stack) about 8 or 9 years ago, and haven't looked back. It wasn't until recently that I started looking into frameworks and libraries such as jQuery, Prototype, etc. I always preferred doing things with a text editor from scratch. Sure, it took longer, but I new the complete ins and outs of all of my website. Well, now that time is becoming more and more of a luxury, I can't afford to build sites from scratch anymore. Hence the discovery of two great frameworks: Ruby on Rails and CakePHP.
First, if you don't have any exposure to either of these technologies, there are some similarities in their paradigms. Both are designed to save you, the developer, time in building websites. Their goal is to do the monotonous, repetitive, underlying work for you so you can move on to build the rest of the website quickly. both use principles of MVC (Model View Controller) development. Essentially, their design forces you to use good design principles in your website. A very basic, and incomplete, description of the MVC components could be the following:
A Model is the data and associated interactions (Objects and Database)
A View is the presentation of that data (HTML, CSS)
A Controller is the logic used (Ruby/PHP)
A more complete explanation can be found here.
Another great thing that both provide is the ability to use REST APIs. So, for example, if you were to collect data that you wanted to open up to third-party applications, you could provide them with an API to access it. To me, this is a must to allow for layers of abstraction I previously mentioned in another post.
Ruby on Rails, until very recently, was a mythical and powerful creature to me. I had heard great things about it, heard what it could do, but I had absolutely no experience with it. I decided to change that this week. Within minutes I had completed the download and install of all required software to be up and running (I already had XAMPP on my machine from other development projects). Two great tutorials for learning basic Ruby on Rails can be found here and here. I went through both of them and feel like I have a good understanding of the design principles and capabilities of the technology. Ruby is a very interesting language and pretty easy to pick up. Ruby on Rails seems to be picking up steam in the US as of late, and is being used by websites such as Twitter.
Now, at first I was thinking, why learn another language like Ruby? I already have a good grip on PHP, so why not just stick with that? Great question! (Yes, sometimes I answer my own questions.) That's why I first looked at using CakePHP (plus, my friend was interested in learning it as well). According to the creator of CakePHP, he liked the idea of Ruby on Rails and wanted to bring that to the world of PHP, so he basically took the idea. To quote him from here:
"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake."
I followed along with the tutorials on the CakePHP website and had no problem setting this environment up either. I just dropped it into my existing XAMPP setup and ran with it.
I also found plenty of "CakePHP vs. Ruby on Rails" type discussions. In the end, I surprisingly don't have much of a preference. Both were easy to set up, both were easy to learn the basics of, and both provide the framework principles I was looking for. I have a feeling that with more exposure I'll be able to choose a side more easily, but in the meantime, I'm just waiting around for a real project to try these out on. What about you? Which do you prefer?
First, if you don't have any exposure to either of these technologies, there are some similarities in their paradigms. Both are designed to save you, the developer, time in building websites. Their goal is to do the monotonous, repetitive, underlying work for you so you can move on to build the rest of the website quickly. both use principles of MVC (Model View Controller) development. Essentially, their design forces you to use good design principles in your website. A very basic, and incomplete, description of the MVC components could be the following:
A Model is the data and associated interactions (Objects and Database)
A View is the presentation of that data (HTML, CSS)
A Controller is the logic used (Ruby/PHP)
A more complete explanation can be found here.
Another great thing that both provide is the ability to use REST APIs. So, for example, if you were to collect data that you wanted to open up to third-party applications, you could provide them with an API to access it. To me, this is a must to allow for layers of abstraction I previously mentioned in another post.
Ruby on Rails, until very recently, was a mythical and powerful creature to me. I had heard great things about it, heard what it could do, but I had absolutely no experience with it. I decided to change that this week. Within minutes I had completed the download and install of all required software to be up and running (I already had XAMPP on my machine from other development projects). Two great tutorials for learning basic Ruby on Rails can be found here and here. I went through both of them and feel like I have a good understanding of the design principles and capabilities of the technology. Ruby is a very interesting language and pretty easy to pick up. Ruby on Rails seems to be picking up steam in the US as of late, and is being used by websites such as Twitter.
Now, at first I was thinking, why learn another language like Ruby? I already have a good grip on PHP, so why not just stick with that? Great question! (Yes, sometimes I answer my own questions.) That's why I first looked at using CakePHP (plus, my friend was interested in learning it as well). According to the creator of CakePHP, he liked the idea of Ruby on Rails and wanted to bring that to the world of PHP, so he basically took the idea. To quote him from here:
"While it's difficult to copy Rails in PHP, it's quite possible to write an equivalent system. I like the terseness of Ruby code, but I need the structure that Rails provides, how it makes me organize my code into something sustainable. That's why I'm ripping off Rails in Cake."
I followed along with the tutorials on the CakePHP website and had no problem setting this environment up either. I just dropped it into my existing XAMPP setup and ran with it.
I also found plenty of "CakePHP vs. Ruby on Rails" type discussions. In the end, I surprisingly don't have much of a preference. Both were easy to set up, both were easy to learn the basics of, and both provide the framework principles I was looking for. I have a feeling that with more exposure I'll be able to choose a side more easily, but in the meantime, I'm just waiting around for a real project to try these out on. What about you? Which do you prefer?
Tuesday, July 14, 2009
Bible Gateway Search for Ubiquity 0.5
When I upgraded the Ubiquity extension in Firefox this morning to version 0.5, the Bible Gateway search command that I created died. Apparently, it used a deprecated version of the API -- and so did the other Bible search command that I had, rendering both useless. If you are completely unfamiliar with Ubiquity, it's an awesome extension available for Firefox that allows you to quickly carry out common tasks (similar to something like Spotlight or Quicksilver). For more information on the extension, you can go here.
So, if you're interested in updating your commands to reflect the new API, you should probably start at the new command authoring tutorial. There are some great examples in there on how to get started.
For anyone interested, I updated my Bible Gateway Search command to the following:
CmdUtils.CreateCommand({
names: ["bible-gateway"],
icon: "http://www.biblegateway.com/favicon.ico",
author: { name: "Matt Augustine", email: "sokkerstud_11@hotmail.com"},
license: "GPL",
description: "Launches a passage look up on BibleGateway.com",
help: "bible-gateway (passage query)",
arguments: [{role: "object",
nountype: noun_arb_text,
label: "passage"}],
preview: function( pblock, arguments) {
var template = _("Searches BibleGateway.com for ") + arguments.object.text;
pblock.innerHTML = CmdUtils.renderTemplate(template);
},
execute: function(arguments) {
var url = "http://www.biblegateway.com/passage/?search={QUERY}"
var query = arguments.object.text;
var urlString = url.replace("{QUERY}", query);
Utils.openUrlInBrowser(urlString);
}
});
Basically, it just does a very simple passage lookup and opens it up. So, for example, valid queries would be things like:
bible-gateway John 1-3
bible-gateway Matthew 1:4-5
If you would like to install this command in your browser, feel free to copy the code above, or you can install it by going here. If you have any questions about my command, feel free to leave a comment below!
So, if you're interested in updating your commands to reflect the new API, you should probably start at the new command authoring tutorial. There are some great examples in there on how to get started.
For anyone interested, I updated my Bible Gateway Search command to the following:
CmdUtils.CreateCommand({
names: ["bible-gateway"],
icon: "http://www.biblegateway.com/favicon.ico",
author: { name: "Matt Augustine", email: "sokkerstud_11@hotmail.com"},
license: "GPL",
description: "Launches a passage look up on BibleGateway.com",
help: "bible-gateway (passage query)",
arguments: [{role: "object",
nountype: noun_arb_text,
label: "passage"}],
preview: function( pblock, arguments) {
var template = _("Searches BibleGateway.com for ") + arguments.object.text;
pblock.innerHTML = CmdUtils.renderTemplate(template);
},
execute: function(arguments) {
var url = "http://www.biblegateway.com/passage/?search={QUERY}"
var query = arguments.object.text;
var urlString = url.replace("{QUERY}", query);
Utils.openUrlInBrowser(urlString);
}
});
Basically, it just does a very simple passage lookup and opens it up. So, for example, valid queries would be things like:
bible-gateway John 1-3
bible-gateway Matthew 1:4-5
If you would like to install this command in your browser, feel free to copy the code above, or you can install it by going here. If you have any questions about my command, feel free to leave a comment below!
Subscribe to:
Posts (Atom)










