I wrote this program as a front-end application to handle MJPEG video streams. Originally, it was intended for just Yawcam webcam software but can actually be configured to use any available MJPEG stream including streams that require authentication.
This tool I wrote will find the installation source of applications installed on a system. It has been tested in Windows XP and newer and also in both 32 and 64 bit architectures.
I wrote this application to facilitate automation of converting PDF to TIFF format. This application monitors a configured directory for newly created PDF files and converts them to TIFF format and saves to the configured output directory. It also archives the original PDF. This application runs in the system tray and can also be setup to run as a service without a graphical user interface.
I wrote this tool to convert bits and bytes. Strongly based on Mattisse’s BitCalculator webpage.
I have spent a little time today troubleshooting an issue on a WSUS server that manages updates for our network. I couldn’t figure out why updates weren’t being installed on 40+ computers and wanted to test to make sure that WSUS was correctly configured as well as all the client PCs. I did end up figuring out what the problem was after all this work, and it is a little embarrassing to admit. The updates weren’t pushing to clients automatically because not all the updates were approved, and even after approving them I still had an installation issue and discovered it is because they weren’t synchronized to the local repository. *facepalm*
Anyway, here’s a VBScript code snippet that will check for updates and prompt to A) download and B) install.
I tried to document with MSDN reference links where appropriate for those of you who might stumble across this. The script in and of itself is based largely (if not almost completely) off the “Searching, Download and Installing Updates” article from Microsoft.
set updateSession = createobject("Microsoft.Update.Session") updateSession.ClientApplicationID = "VBScript Updater" set updateSearcher = updateSession.CreateUpdateSearcher() updateSearcher.Online = False ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa386525(v=vs.85).aspx updateSearcher.ServerSelection = 1 ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa387280(v=vs.85).aspx wscript.echo "Searching for updates..." & vbcrlf set searchResult = updatesearcher.Search("IsInstalled=0 and Type='Software' and IsHidden=0 and IsAssigned=1") ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa386526(v=vs.85).aspx WScript.Echo vbCRLF & "Creating collection of updates to download:" Set updatesToDownload = CreateObject("Microsoft.Update.UpdateColl") For I = 0 to searchResult.Updates.Count-1 Set update = searchResult.Updates.Item(I) WScript.Echo I + 1 & "> adding: " & update.Title updatesToDownload.Add(update) If update.EulaAccepted = False Then update.AcceptEula WScript.Echo I + 1 & "> Accept EULA " & update.Title End If Next If updatesToDownload.Count = 0 Then WScript.Echo "All applicable updates were skipped." WScript.Quit End If WScript.Echo vbCRLF & "Would you like to download updates now? (Y/N)" strInput = WScript.StdIn.Readline WScript.Echo If (strInput = "Y" or strInput = "y") Then WScript.Echo vbCRLF & "Downloading updates..." Set downloader = updateSession.CreateUpdateDownloader() downloader.Updates = updatesToDownload downloader.Download() WScript.Echo vbCRLF & "Successfully downloaded updates:" Set updatesToInstall = CreateObject("Microsoft.Update.UpdateColl") rebootMayBeRequired = false For I = 0 To searchResult.Updates.Count-1 set update = searchResult.Updates.Item(I) If update.IsDownloaded = true Then WScript.Echo I + 1 & "> " & update.Title updatesToInstall.Add(update) If update.InstallationBehavior.RebootBehavior > 0 Then rebootMayBeRequired = true End If End If Next If updatesToInstall.Count = 0 Then WScript.Echo "No updates were successfully downloaded." WScript.Quit End If If rebootMayBeRequired = true Then WScript.Echo vbCRLF & "These updates may require a reboot." End If Else Wscript.Quit End If WScript.Echo vbCRLF & "Would you like to install updates now? (Y/N)" strInput = WScript.StdIn.Readline WScript.Echo If (strInput = "Y" or strInput = "y") Then Set installer = updateSession.CreateUpdateInstaller() If installer.IsBusy = True Then wscript.echo "Another installation is currently in progress, try later." wscript.quite else WScript.Echo "Installing updates..." installer.Updates = updatesToInstall Set installationResult = installer.Install() 'Output results of install WScript.Echo "Installation Result: " & _ installationResult.ResultCode WScript.Echo "Reboot Required: " & _ installationResult.RebootRequired & vbCRLF WScript.Echo "Listing of updates installed " & _ "and individual installation results:" For I = 0 to updatesToInstall.Count - 1 WScript.Echo I + 1 & "> " & _ updatesToInstall.Item(i).Title & _ ": " & installationResult.GetUpdateResult(i).ResultCode ' http://msdn.microsoft.com/en-us/library/windows/desktop/aa387095(v=vs.85).aspx Next end if End If
The new Google+ layout gives me nausea, fills me with anxiety and gives me a feeling of rage like no other.
Ok, not so much the rage part, but I do get anxious when I first load Google+ in the new layout format. I scan back and forth through the columns trying to organize and order the posts by latest date/time. Such a pain.
The single column vertical layout is virtually useless as pointed out by Chris Kim A in a Google+ post.
Please fix this. Fix it all.
You can update your status via SMS by sending a text to 33669 (United States) or 9222222222 (India). This is only available if you have registered your phone number with your Google+ account.
Register Your Phone Number with Google+
- Hover over the Home menu and click Settings at the bottom. Alternatively, you can click on this link to be taken directly to the settings page.
- On the right pane, if you haven’t registered your number you will see an Add Phone Number. Follow these instructions.
Once you have registered your number, you are all set.
SMS Cheat Sheet
|Specific Circle||+work I am calling off.|
|Public||+public Hello, world!|
|Extended Circles||+extended Hello, world!|
|Specific Personfirstname.lastname@example.org Hi Rich, this is for your eyes only!|
Note: By default, all posts will be shared with Your Circles.
I wonder if they will add picture posting; that would be a nice feature!
Additional information can be found at Google’s SMS page.
If you don’t like the look of your Google+ stream since the update was rolled out yesterday, you can easily change it back to a vertical layout. Keep in mind that it isn’t the original layout, but at least it’s vertical again. I admit, it is taking some getting used to for me; it is a little overwhelming first thing in the morning before my coffee!
Step 1. Click on the More menu item at the top of the stream.
Step 2. Choose the vertical layout option in the Stream Layout section of the menu.
Now you have a nice vertical layout for your Google+ stream.
I have been working on a tool recently that can help with sizing of storage solutions at a very basic level. Previously, I had created an Excel “Cheat Sheet” for RAID calculations, IOPS calculations and more.
- IOPS to MBps and vice versa
- RAID Sizing (0,1,5,6,10)
- Disks Required for Given IOPS
- Workload IOPS based on IO Size, IO Type, IO Read% and IO Write%
Here are some of the formulas I use for calculations to build this application.
|IOPS||IOPS = 1 / (average latency (in sec) + average read/write seek time (in sec))|
|Total Raw IOPS||Number of Disks * IOPS Per Disk|
|Total Functional IOPS||( (Total Raw IOPS * Write%) / (RAID Penalty)) + (Total Raw IOPS * Read%)|
|IOPS to MBps||(IOPS * IO Size) / 1024|
|MBps to IOPS||(MBps / IO Size) * 1024|
|Disks Required||(total required IOPS * read%) + (total required IOPS * write% * RAID penalty) / IOPS|
|RAID Write Penalty|
|15,000 RPM SAS||~175-210|
|10,000 RPM SAS||~140|
|10,000 RPM SATA||~125-150|
|7,200 RPM SATA||~75-100|
|5,400 RPM SATA||~50|
|RAID Level Detailed|
|RAID-0||Data Striping. By definition RAID level 0 is not RAID because it does not provide data redundancy. Data is striped across all drives without parity.||None. If a drive fails all data is lost.||High. Provides the best performance and storage efficiency in I/O intensive environments because there is no parity related overhead.||No Data Redundancy.|
|RAID-1||Disk Mirroring. Data is written to a primary disk and a secondary disk. Identical data is stored on both disks.||A mirrored set of drives is created.||High performance in read intensive applications. If one drive is busy data can be accessed from the secondary disk. High write performance because of no parity overhead.||High cost per megabyte because double the amount of drives is required to achieve desired capacity.|
|RAID-5||Data Striping with Distributed Parity. Data is striped across a group of disk drives with distributed parity. Parity information is written to a different disk in the array for each stripe.||Parity is distributed across the disks in the array. Data is regenerated in the event of a drive failure.||High performance in small record, multiprocessing environments because there is no contention for the parity disk and read and write operations can be overlapped. No write bottlenecks as with RAID 4.||Distributed parity causes overhead on write operations. There is also overhead created when data is changed, because parity information must be located and then recalculated.|
|RAID-10||Implemented as a striped of mirrors.||A striped array (RAID 1) of mirrored drive pairs (RAID 0) is created.||High performance because data is striped and there is no parity overhead.||High cost per megabyte because double the amount of drives is required to achieve desired capacity.|
These websites were useful in collecting and helping to create the formulas as well as inspiration for an “all-in-one” type of tool.
You can sign up for a 30 day trial of the service and if you enjoy it, you can pay only $7.99 monthly if you sign up by June 30, 2013. After June 30, the service will cost $9.99 per month.
Google All Access takes the best from Pandora, Spotify and other online music streaming services and more.
- Enjoy unlimited listening to millions of songs
- Create personalized radio from any song or artist
- Listen to radio with unlimited skips
- Get smart recommendations based on your tastes
- Store up to 20,000 of your own songs in your locker
- Access your music anywhere without syncing
- Experience music without ads
- Buy new music on Google Play (18M+ songs)
I’m a fan for ad-free music streaming and one of the cool features is the ability to share a song you purchase with a friend for so they can play it. The friend can play the track one time.
Head over to the All Access page and take a look for yourself and get setup with a free 30 day trial!