<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="../assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Blind Not Dumb (Posts about windows)</title><link>https://www.feoh.org/</link><description></description><atom:link href="https://www.feoh.org/categories/windows.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2026 &lt;a href="mailto:feoh@feoh.org"&gt;Chris Patti&lt;/a&gt; 
&lt;a rel="license" href="https://creativecommons.org/licenses/by-nc-sa/4.0/"&gt;
&lt;img alt="Creative Commons License BY-NC-SA"
style="border-width:0; margin-bottom:12px;"
src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"&gt;&lt;/a&gt;</copyright><lastBuildDate>Mon, 02 Mar 2026 00:41:16 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>Windows Papercuts for *NIX Developers</title><link>https://www.feoh.org/posts/windows-papercuts-for-nix-developers.html</link><dc:creator>Chris Patti</dc:creator><description>&lt;h3&gt;Introduction&lt;/h3&gt;
&lt;p&gt;If you're used to developing on *NIX systems, coming to Windows can be a bit of
a shock.&lt;/p&gt;
&lt;p&gt;My goal in writing this article is to point out some of the pain points and,
where I know they exist, some work-arounds.&lt;/p&gt;
&lt;p&gt;Note that I'm talking about &lt;em&gt;native&lt;/em&gt; Windows here. If WSL meets your needs and
your environment allows it (not everyone's does. Many IT orgs turn it off) then
bully for you but this article isn't about that :) I think WSL is both an
incredible tool for developers and an awesome feat of engineering. I wish more
Linux folks appreciated this. Anyway :)&lt;/p&gt;
&lt;p&gt;So let's get started!&lt;/p&gt;
&lt;h3&gt;The Paper Cuts&lt;/h3&gt;
&lt;h4&gt;The C Compiler&lt;/h4&gt;
&lt;p&gt;For most of us, having a standard raft of development tools on hand is par for
the course. We just expect gcc and make to be there at our beck and call, and
the fact that they're not can cause some tools to fail spectacularly.&lt;/p&gt;
&lt;p&gt;For instance, whenever I start my editor of choice (Neovim) I'm greeted with:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Neovim C Compiler Error on Windows" src="https://www.feoh.org/images/windows_nvim_c_boom.png"&gt;&lt;/p&gt;
&lt;p&gt;Having spoken to some experts, apparently it's considered &lt;em&gt;really&lt;/em&gt; bad form to
leave your C compiler on the PATH on Windows. I suspect this is because malware
on Windows is such an incredibly pervasive problem.&lt;/p&gt;
&lt;p&gt;I get that, but then we should probably either modify our tool-chains to not
expect that as a default or maybe create documentation to help people understand
the happy path.&lt;/p&gt;
&lt;p&gt;As near as I can tell, the 'standard' set of c/c++ tools on Windows is Microsoft
Visual Studio. The free "Community" version works just fine though the installer
is a bit of a jank-fest.&lt;/p&gt;
&lt;p&gt;That thing provides a prompt shortcut called "Powershell for VS XXXX" and you
can use that to get a shell that has the usual build tools available.&lt;/p&gt;
&lt;p&gt;Not a great solution though, since the experts say not to run that way as a
default, but having your editor blow up on start just-up isn't a great feel.&lt;/p&gt;
&lt;h4&gt;The Shell&lt;/h4&gt;
&lt;p&gt;While you certainly &lt;em&gt;can&lt;/em&gt; run tools like bash or zsh on Windows, unless you
&lt;em&gt;really&lt;/em&gt; know what you're doing, this is not the happy path. You're in Rome. Do
what the Romans do and you won't regret it :)&lt;/p&gt;
&lt;p&gt;The good news here is that the native tools are now really quite good. Gone are
the days when CMD.EXE was your only choice. You now have Powershell and it's
really quite awesome.&lt;/p&gt;
&lt;p&gt;Here are a couple of tips to make your Powershell experience awesome and help
you appreciate what this environment has to offer.&lt;/p&gt;
&lt;h5&gt;Oh My Posh&lt;/h5&gt;
&lt;p&gt;This one's gotten a lot of press and let me tell you it's incredibly well
deserved. It's like the oh my zsh of Windows shell prompts :)&lt;/p&gt;
&lt;p&gt;Mine shows me git status and whether my last command's exit code indicates
success or failure, as well as what Git branch I'm on. Here's what it looks
like:&lt;/p&gt;
&lt;p&gt;&lt;img alt="What My Oh My Posh Prompt Looks Like" src="https://www.feoh.org/images/OhMyPoshScreenshot.png"&gt;&lt;/p&gt;
&lt;p&gt;I wrote some about Oh My Posh in my &lt;a href="https://www.feoh.org/posts/getting_started_with_python_on_windows_2021_edition_push_the_easy_button.html"&gt;previous article on Windows for Python
Developers&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;PSFzf&lt;/h5&gt;
&lt;p&gt;One of the biggest productivity boost for me in recent memory was when I
integrated &lt;a href="https://github.com/junegunn/fzf"&gt;fzf&lt;/a&gt; the fuzzy finder into my
workflow.&lt;/p&gt;
&lt;p&gt;With a single keystroke I can find any file or directory on my system.
Navigation becomes effortless and the endless sequence of &lt;code&gt;cd&lt;/code&gt; and &lt;code&gt;pwd&lt;/code&gt; commands
melt away in a burst of productivity goodness :)&lt;/p&gt;
&lt;p&gt;Thankfully, Powershell offers all these benefits as well via
&lt;a href="https://github.com/kelleyma49/PSFzf"&gt;PSFzf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here's what it looks like. In this case I wanted to edit my Neovim main
configuration file &lt;code&gt;init.lua&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Edit my init.lua file" src="https://www.feoh.org/images/psfzf.png"&gt;&lt;/p&gt;
&lt;h4&gt;The Console / Terminal&lt;/h4&gt;
&lt;p&gt;For long time *NIX users, one of the biggest bones of contention for a
long time was the Windows console. To put it kindly, it was god awful, mostly
because it maintained compatibility with the Antideluvian DOS console.&lt;/p&gt;
&lt;p&gt;Happily, we now have a fairly decent solution &lt;a href="https://github.com/microsoft/terminal"&gt;Windows
Terminal&lt;/a&gt;. I say fairly decent because
it's still not quite up to par with your favorite &lt;em&gt;NIX terminal, but the fine
folks behind this open source project are working &lt;/em&gt;really* hard to change that,
and the progress they've made here has been nothing short of miraculous. Mad
props to these folks for fixing by far the biggest deal breaker for many around
working in Windows!&lt;/p&gt;
&lt;p&gt;They've even recently added an easier UI for editing settings, but you can also
still go edit the JSON yourself if that's your jam :)&lt;/p&gt;
&lt;p&gt;It's not perfect, but this is an incredibly flexible tool with a ton of depth
and it's been exciting to watch it evolve.&lt;/p&gt;
&lt;h4&gt;The Windows Desktop/GUI&lt;/h4&gt;
&lt;p&gt;I'm sure there will be folks who aren't happy with this one but my take? Just
ignore it.&lt;/p&gt;
&lt;p&gt;Windows is pretty good about making EVERYTHING accessible from the keyboard, and
many things are also accessible from the command line. If you just avoid
graphical interfaces wherever possible, and if you're anything like me, you'll
see your productivity levels soar and your frustration levels plummet.&lt;/p&gt;
&lt;h4&gt;Packaging&lt;/h4&gt;
&lt;p&gt;One of the big pain points coming from *NIX is the lack of a 'real' package
manager.&lt;/p&gt;
&lt;p&gt;I use the &lt;code&gt;winget&lt;/code&gt; tool that comes bundled with Windows 11. It's officially
supported by Microsoft and lets me install most if not all of the commercial
apps I use.&lt;/p&gt;
&lt;p&gt;It has the further advantage that it will write a JSON blob with all the
packages you have installed, so you can get your software up to snuff with a
single Powershell invocation.&lt;/p&gt;
&lt;p&gt;But there are other popular options as well, namely
&lt;a href="https://github.com/ScoopInstaller/Scoop"&gt;Scoop&lt;/a&gt; and
&lt;a href="https://chocolatey.org/"&gt;Chocolatey&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To be honest I wish MSFT had worked a bit harder to maintain compatibility with
these other projects so we don't have multiple separate package namespaces.
Can't have everything I guess.&lt;/p&gt;
&lt;h4&gt;Where Do I Put?&lt;/h4&gt;
&lt;p&gt;One of the things I continue to struggle with is the simple expedient of "Where
do I PUT things?". On UNIX based systems, pretty much everything user or
configuration related lives in $HOME. Not so on Windows.&lt;/p&gt;
&lt;p&gt;As just an example, my Neovim configuration lives in something like
&lt;code&gt;$HOME\AppData\Local\nvim.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In some respects, I get it. Keeping application configuration separate is a good
thing, but navigating where to put what can feel like a bit of a morass for the
uninitiated.&lt;/p&gt;
&lt;p&gt;Maybe once I get a better understanding of the lay of the land, I can create a
cheat sheet for UNIX users.&lt;/p&gt;
&lt;h3&gt;Fin&lt;/h3&gt;
&lt;p&gt;That's all I have for now, but I may update this post as time permits or if
various situations I detail here improve. Thanks for reading!&lt;/p&gt;</description><category>compiler</category><category>neovim</category><category>powershell</category><category>python</category><category>windows</category><guid>https://www.feoh.org/posts/windows-papercuts-for-nix-developers.html</guid><pubDate>Tue, 04 Jul 2023 17:42:31 GMT</pubDate></item><item><title>Getting Started With Python On Windows 2021 Edition: Push The Easy Button!</title><link>https://www.feoh.org/posts/getting_started_with_python_on_windows_2021_edition_push_the_easy_button.html</link><dc:creator>Chris Patti</dc:creator><description>&lt;h2&gt;Don't Despair! This Is Gonna Be Easy! :)&lt;/h2&gt;
&lt;p&gt;Over the last few months I've seen a &lt;strong&gt;&lt;em&gt;ton&lt;/em&gt;&lt;/strong&gt; of confusion swirling around social media about how to help people who are new to Python development and software development in general get up and running on Windows quickly.&lt;/p&gt;
&lt;p&gt;GOOD NEWS! You can ignore all that. Many of these suggestions are well meaning but come from people who don't actually do Python development on Windows regularly.&lt;/p&gt;
&lt;p&gt;Note that I'm not going to tell you the 5 different ways to do a thing, I'm going to tell you the ONE easy way :)&lt;/p&gt;
&lt;p&gt;So let's get started!&lt;/p&gt;
&lt;h3&gt;Side Note: Everyone Will Tell You To Use WSL - You Probably Don't Want That!&lt;/h3&gt;
&lt;p&gt;I hear a lot of incredibly talented and experienced well meaning UNIX/Mac enthusiasts tell newcomers looking to get going on
Windows "Oh well you just use WSL! It's easy! Then you install python with apt get yada yada, and then you install pyenv,
and then you configure your shell's environment to use the right shims... and..."&lt;/p&gt;
&lt;p&gt;The truth is that if you want to learn Linux - you SHOULD! It's an incredible platform and a virtually bottomless font of
power waiting for you to tap.&lt;/p&gt;
&lt;p&gt;But if there's one thing I've learned in 30 years in the tech trenches, it's that trying to learn a million things all at
once is the surest way to learn nothing. Why not focus on teaching yourself Python programming first and then exploring Linux
as a separate effort?&lt;/p&gt;
&lt;h2&gt;Install Python&lt;/h2&gt;
&lt;p&gt;If you're on Windows 11 (And I recommend it if your hardware is new enough!) this is as simple as bringing up a Powershell in your swank Windows Terminal. If you want a look at my setup please go read &lt;a href="https://www.feoh.org/2021-the-year-windows-became-a-first-class-python-development-environment.html"&gt;my article on that&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Anyway, all you have to do is type:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;winget install python
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;That's it! This will install the latest stable version of Python from &lt;a href="https://www.python.org"&gt;The official Python website&lt;/a&gt;. If you're not lucky enough to be running Windows 11, just download the latest stable version from &lt;a href="https://www.python.org/downloads/"&gt;the website's Downloads page&lt;/a&gt; and double click on the executable file in your Downloads folder. If you're not sure just keep clicking Next on the dialogs and in a few minutes you'll have Python installed!&lt;/p&gt;
&lt;h2&gt;Embracing The Power of Py! (Psst. This Is The Easy Button!)&lt;/h2&gt;
&lt;p&gt;The 'py' Python launcher used to be a super power that only Windows versions of Python shipped with, but now thanks to &lt;a href="https://github.com/brettcannon/python-launcher"&gt;Brett Cannon, an amazingly prolific Python core developer's hard work&lt;/a&gt; our UNIX friends can enjoy the easy button as well!&lt;/p&gt;
&lt;p&gt;So let's get this party started and see how easy it is these days to get into the Python prompt:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Windows Python Prompt With Py" src="https://www.feoh.org/images/WindowsPyPrompt.png"&gt;&lt;/p&gt;
&lt;p&gt;Pretty easy, right?&lt;/p&gt;
&lt;p&gt;Note that py has other superpowers as well. It can list all the python versions you have installed, and also let you choose which version to run with the arguments you choose. Run:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;py --help
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;to see an exhaustive description of all the magic tricks py can do :)&lt;/p&gt;
&lt;h4&gt;Set The Stage&lt;/h4&gt;
&lt;p&gt;Again, from your Powershell, create a project directory for yourself. Programmers often create a 'src' directory wherever it's convenient (Maybe in your home directory?) and then put their projects underneath.&lt;/p&gt;
&lt;p&gt;So let's go ahead and do that:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;CD $HOME
mkdir src\starwars_characters

&lt;span class="gh"&gt;#&lt;/span&gt; Yes i'm a big nerd. Our project will pull down a list of characters in the movies from the Star Wars API :)

cd src\starwars_characters
&lt;/pre&gt;&lt;/div&gt;

&lt;h4&gt;Building A Sandbox&lt;/h4&gt;
&lt;p&gt;Now let's create a safe space for our project so we don't unintentionally install libraries or other experiments in public. This can lead to situations where you go to create another project but a library you installed previously either causes undesirable behavior or perhaps is even in a broken state, getting in the way of you getting your work done.&lt;/p&gt;
&lt;p&gt;We're going to create a thing called 'virtual environment'. Don't worry too much about the details, just think about this as a nice tidy sandbox for us to play in where we don't have to worry about breaking anything outside.&lt;/p&gt;
&lt;p&gt;Again from our Powershell prompt:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;# Actually create our virtual environment. Put the bits in a folder called 'venv'.
# Most Pythonistas use this folder name, but you can use any name you want :)
py -m venv venv

# Actually activate our new virtual environment in our Powershell
.\venv\Scripts\Activate.ps1
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Let's see what happens when we do that (Assuming you're running Oh My Posh, and you should be if you followed my setup article):&lt;/p&gt;
&lt;p&gt;&lt;img alt="Create/Activate Virtual Environment" src="https://www.feoh.org/images/virtualenvps.png"&gt;&lt;/p&gt;
&lt;p&gt;See what happens there? We create the virtual environment, and our shell notices which Python version it uses, and tells us that in our Powershell prompt!&lt;/p&gt;
&lt;p&gt;Then, we activate our virtual environment, and now our prompt adds a (venv) at the beginning. With this visual indicator in plce, we know we're safely ensconced in our sandbox and can start playing with no worries!&lt;/p&gt;
&lt;h4&gt;Install Necessary Libraries&lt;/h4&gt;
&lt;p&gt;You'll need an editor or an IDE. I use &lt;a href="https://code.visualstudio.com/"&gt;Visual Studio Code&lt;/a&gt;. It's free, it runs on any modern computer, and it offers an incredibly rich set of tools to help you with your development. Bonus points? It's also free, and even largely open source.&lt;/p&gt;
&lt;p&gt;Let's get started, and tell Python which libraries we'll need for our project:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;code requirements.txt
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;In this file, add a single line:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;requests
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you want to add a truly superlative interactive Python environment with which to prototype and 
explore, you could also add IPython:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;IPython
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(Note IPython here is case sensitive so be careful!)&lt;/p&gt;
&lt;p&gt;Now, still in our Powershell prompt, type this command to actually install these required libraries into our virtual environment:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;py -m pip install -r requirements.txt
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You should see some messages about libraries being installed. Note that you invoke IPython this exact same way:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;py -m IPython
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Write The Code&lt;/h3&gt;
&lt;p&gt;Create a file in your project directory called starwars_characters.py with your editor that includes the following code:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="kn"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nn"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;STARWARS_API_URL_BASE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://swapi.dev/api"&lt;/span&gt;
&lt;span class="n"&gt;GET_CHARACTERS_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;STARWARS_API_URL_BASE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/people"&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GET_CHARACTERS_URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response_json&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;characters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response_json&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'results'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;character&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;"Character Name: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;character&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'name'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Here's what my Visual Studio Code session looks like with this code loaded and the output shown in the run window:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Starwars Project VSCode Screenshot" src="https://www.feoh.org/images/vscode.png"&gt;&lt;/p&gt;
&lt;p&gt;Notice that bit at the bottom that says 3.10? That shows us that Visual Studio Code automatically detected the Python we have installed in our virtualenv. You can click on that to see a list of installed Python interpreters to choose from.&lt;/p&gt;
&lt;p&gt;We can run our new project either by using the Run menu inside Visual Studio Code or on the command line with that very same &lt;code&gt;py&lt;/code&gt; syntax we used before:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;py starwars_characters.py
&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;The End Is Just The Beginning&lt;/h2&gt;
&lt;p&gt;Well there we have it! You have Python installed and running, and you've built a small but interesting Python project right here on your Windows machine!&lt;/p&gt;
&lt;p&gt;The truth is, a large number of people have put in innumerable hours making Python drive smooth like a Cadillac on Windows,
so if you find yourself using and enjoying it, the next time someone tells you to abandon all hope and install Linux/WSL,
be sure to point them at this article! Maybe if we change some minds we can help bring more Pythonistas into the incredibly
awesome Python community!&lt;/p&gt;
&lt;p&gt;Please feel free to leave comments with any questions, or hit me up on 
&lt;a href="https://cybre.space/@feoh"&gt;Mastodon&lt;/a&gt; or &lt;a href="https://twitter.com/feoh"&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'd love to hear from you!&lt;/p&gt;</description><category>development</category><category>geekery</category><category>newbie</category><category>python</category><category>setup</category><category>windows</category><category>winget</category><guid>https://www.feoh.org/posts/getting_started_with_python_on_windows_2021_edition_push_the_easy_button.html</guid><pubDate>Sat, 06 Nov 2021 05:45:00 GMT</pubDate></item><item><title>Windows Scripting - a VBScript Survival Guide</title><link>https://www.feoh.org/posts/windows-scripting-a-vbscript-survival-guide.html</link><dc:creator>cpatti</dc:creator><description>&lt;section id="introduction"&gt;
&lt;h2&gt;1. Introduction&lt;/h2&gt;
&lt;p&gt;If you're new to the world of Windows scripting as I am, the array of acronyms, technologies and access methodologies that you need to traverse in order to get anything done can range from bewildering on a good day to utterly derangement inducing on a bad one.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br&gt;&lt;/div&gt;
&lt;div class="line"&gt;I've been doing installer and deployment development at a Windows enterprise software company for the last year or so, and after decades spent comfortably swaddled in the familiarity of the UNIX and Java world, I definitely found myself feeling shell shocked, disoriented, and frustrated at the lack of any sort of cohesive resources to aid me in my quest.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Microsoft has been doing its best to pretend VBScript doesn't exist - touting &lt;a class="reference external" href="https://blogs.msdn.com/PowerShell/"&gt;Windows PowerShell&lt;/a&gt; as the way and the light.  PowerShell is indeed an awesome tool, and I for one would happily consign VBScript to the briny deeps never to be thought of again were it not for one little problem - the vast majority of Windows systems running in the wild don't have PowerShell installed.   Until a new day dawns and PowerShell is on *every single* Windows box our company wants to install its software on, VBScript remains the lowest common denominator for system scripting and thus the only &lt;strong&gt;real&lt;/strong&gt; game in town for install time scripting.&lt;/p&gt;
&lt;p&gt;The goal of this article is not to teach you VBScript, sadly, there are essentially no books and precious few online resources dedicated to this topic online.  I will offer pointers to those that I have found most useful, and some collected wisdom on how to best make use of them, as well as some pitfalls I encountered which with any luck I can help you avoid.&lt;/p&gt;
&lt;p&gt;That said, let's get started.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="learning-vbscript"&gt;
&lt;h2&gt;2. Learning VBScript&lt;/h2&gt;
&lt;p&gt;This will mostly be a collection of pointers to resources with a smidgen of commentary on each to get you moving in the right direction.&lt;/p&gt;
&lt;section id="a-books"&gt;
&lt;h3&gt;A. Books&lt;/h3&gt;
&lt;ul class="simple"&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.amazon.com/Windows-XP-Annoyances-Geeks-2nd/dp/0596008767/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1270065442&amp;amp;sr=8-1"&gt;Windows XP Annoyances&lt;/a&gt; - This book should really be titled "Windows For Geeks" :) it is the single most useful book I have ever encountered for someone trying to make the transition from another environment and isn't content to just grit their teeth and groan at all the annoying defaults Windows ships with.  In addition to an incredible amount of depth around the Windows registry and how you can wield it to suit your needs, this book also has one of the best simple introductions to system scripting with VBScript I've seen.  Two thumbs up. Note that this is the 1997 edition, and this book now comes in Windows Vista and Windows 7 flavors which I haven't read, but can only assume are equally awesome.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.visualbasicscript.com/"&gt;visualbasicscript.com&lt;/a&gt; - This is far and away the single best VBScript resources on the intertubes.  The folks in these forums are experts, and will help you solve your problem virtually every time.  I can't say enough about the incredible community here.  Nine out of ten times, if I go looking somewhere else first I end up coming back here and wishing I hadn't wasted my time elsewhere first :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://technet.microsoft.com/en-us/scriptcenter/default.aspx"&gt;Microsoft Script Center / The Scripting Guys&lt;/a&gt; - The second most useful scripting site on the web.  The Scripts Repository and "Scripting Guys" MSDN blog are an incredible resource for system scripters.  While the emphasis has definitely shifted towards PowerShell these days (and rightfully so) most of the techniques discussed can be leveraged in VBScript once you get cozy with the syntactic differences between the two (very different) languages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://msdn.microsoft.com/en-us/library/d1et7k7c%28v=VS.85%29.aspx"&gt;MSDN Windows Scripting Technologies&lt;/a&gt; - This page covers things like the Windows Scripting Host, the core technology that actually allows you to perform useful work in VBScript.  While somewhat more complete than the VBScript reference itself, it's no great shakes.  You'll find yourself learning much more from examples published elsewhere, but for the occasional API lookup or clarification it can be useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://msdn.microsoft.com/en-us/library/t0aew7h6%28VS.85%29.aspx"&gt;MSDN VBscript Reference&lt;/a&gt; - You'll note this site's position well down the list.  It's there for a reason.  The documentation provided here is very sketchy and frankly incredibly misleading in places.  The authors seem to have weaseled out of writing a more complete documentation set by making a vacuous assertion along the lines of "Well, it's just like regular Visual Basic, with a few minor differences".  This leaves people like myself who have never had the need to touch a fully fledged VB implementation out in the cold, feeling like second class citizens.  While these pages can be useful for occasional clarification on some obscure language feature, those seeking to understand how the language works in the large should definitely look elsewhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://support.microsoft.com/kb/308364"&gt;Windows Script Debugging Microsoft KB Article&lt;/a&gt; - This article will get you started interactively debugging your scripts using Visual Studio.  Don't bother with the Windows Script Debugger, Visual Studio Express is free and much better :)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a class="reference external" href="https://www.w3schools.com/vbscript/default.asp"&gt;W3Schools VBScript Tutorial/Reference&lt;/a&gt; - This page is definitely rather Web-centric, focusing on VBScript in classic ASP programming, however, the core language and some of the techniques are the same.  In many cases this is a better reference than the MSDN one, and the tutorial lets you work through the examples online in a web browser which is cool.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;/section&gt;
&lt;section id="debugging"&gt;
&lt;h2&gt;3. Debugging&lt;/h2&gt;
&lt;section id="who-turned-the-lights-out"&gt;
&lt;h3&gt;Who turned the lights out?&lt;/h3&gt;
&lt;p&gt;If you find that some script you've inherited is not working, but you get exactly zero output or errors, look for the telltale &lt;code class="docutils literal"&gt;On Error Goto 0&lt;/code&gt; or &lt;code class="docutils literal"&gt;On Error Resume Next&lt;/code&gt; statements. These basically disable VBScript's inherent error handling functionality and cause your script to silently ignore errors. Helpful, eh?&lt;/p&gt;
&lt;/section&gt;
&lt;section id="never-run-while-blind-folded"&gt;
&lt;h3&gt;Never run while blind folded.&lt;/h3&gt;
&lt;p&gt;Know how you're invoking your VBScript. If you're calling your script from an installer or some such executable, you're likely using Microsoft's &lt;code class="docutils literal"&gt;cscript&lt;/code&gt; tool. which doesn't do a very good job of always displaying handy things like syntax or run time errors. Try running your script with &lt;code class="docutils literal"&gt;wscript&lt;/code&gt; instead for debugging purposes. Heretofore mysterious behavior may become clear :)&lt;/p&gt;
&lt;/section&gt;
&lt;section id="that-s-all"&gt;
&lt;h3&gt;That's all!&lt;/h3&gt;
&lt;p&gt;Hopefully this post will prove useful to some poor soul, manacled in place, suffering through their own personal Windows induced hell. Even if it isn't, these tidbits have been rattling around in my head since I escaped (I now work for &lt;a class="reference external" href="https://www.bluestatedigital.com"&gt;Blue State Digital&lt;/a&gt;, we're a LAMPs shop (Linux, Apache, MySQL, PHP) and I hope to never be trapped in Windows enterprise limbo again!&lt;/p&gt;
&lt;/section&gt;
&lt;/section&gt;</description><category>deployment</category><category>installers</category><category>microsoft</category><category>powershell</category><category>scripting</category><category>systems</category><category>vbscript</category><category>visualbasic</category><category>windows</category><guid>https://www.feoh.org/posts/windows-scripting-a-vbscript-survival-guide.html</guid><pubDate>Wed, 31 Mar 2010 19:18:00 GMT</pubDate></item><item><title>3 Things Microsoft Should Do for Release Engineers</title><link>https://www.feoh.org/posts/3-things-microsoft-should-do-for-release-engineers.html</link><dc:creator>cpatti</dc:creator><description>&lt;p&gt;For the last year or so I've been working at a 100% Windows based enterprise development shop.   They ship a fairly large and complex application for health insurance providers, which draws on many of the core technologies in the Microsoft enterprise stable.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br&gt;&lt;/div&gt;
&lt;div class="line"&gt;This post highlights a few things that make working in this environment a whole lot more onerous than it needs to be in my opinion, so let's get started.&lt;/div&gt;
&lt;/div&gt;
&lt;section id="installers"&gt;
&lt;h2&gt;1. Installers&lt;/h2&gt;
&lt;p&gt;The Windows installation landscape has been a bleak one indeed for a very long time.  Tools like Installshield with their own proprietary languages like InstallScript make installer development unnecessarily painful and baroque.  Is there &lt;strong&gt;really&lt;/strong&gt; any reason I should be programming in a language with no real data structures to speak of in 2010?  Even flow of control is handled in a way I can only describe as baroque.  There are methods/functions, but the main body of your installer's code has to jump around everywhere using goto.  What a mess.&lt;/p&gt;
&lt;p&gt;There is hope on this front, in the form of &lt;a class="reference external" href="https://wix.sourceforge.net/"&gt;WiX&lt;/a&gt;, the Windows Installer XML toolkit, which allows developers to iteratively build and design their installer along with the regular development process.  Right now however the learning curve seems incredibly steep.  Perhaps Visual Studio could generate a template WiX project to get people started?&lt;/p&gt;
&lt;p&gt;I'd also love to see some thought given to simplifying the deployment model for things like &lt;a class="reference external" href="https://msdn.microsoft.com/en-us/library/ms685978%28VS.85%29.aspx"&gt;COM+&lt;/a&gt; - which feels to me like a magic black box with myriad buttons and levers, all of which are a bear to get right at install time.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="builds-scm"&gt;
&lt;h2&gt;2. Builds/SCM&lt;/h2&gt;
&lt;p&gt;MSBuild needs to have &lt;strong&gt;dramatically&lt;/strong&gt; better documentation, and to a lesser extent so does TFS  - they get the broad bits right - everything you could want to do through the UI is covered, but process automation using scripting / command line tools gets substantially murkier.&lt;/p&gt;
&lt;p&gt;In the 'credit where credit is due' department, the TFS team has been incredibly responsive on their forums, and that's what's helped us get by so far, but there's no substitute for first rate docs.&lt;/p&gt;
&lt;/section&gt;
&lt;section id="infrastructure-scripting"&gt;
&lt;h2&gt;3. Infrastructure Scripting&lt;/h2&gt;
&lt;p&gt;As of right now, there are a thousand different interfaces to accomplish the same thing, and for complex configuration tasks like configuring IIS at install time, the possibilities can be dizzying.  I would like to see Microsoft choose &lt;strong&gt;one&lt;/strong&gt; mechanism for run-time system/software configuration and document the heck out of it.&lt;/p&gt;
&lt;p&gt;Kudos to the &lt;a class="reference external" href="https://blogs.msdn.com/powershell/"&gt;PowerShell&lt;/a&gt; team and &lt;a class="reference external" href="https://technet.microsoft.com/en-us/scriptcenter/dd901334.aspx"&gt;The Scripting Guys&lt;/a&gt; for making great strides in this area.  PowerShell is a really nice environment for all kinds of scripting, and I look forward to the day when we can eliminate VBScript from our installers entirely in its favor, but we're not there yet sadly.  The object pipeline is one of the more powerful concepts in the modern scripting milieu, and I think Apple and the UNIX world could take a page from PowerShell's book in this regard.&lt;/p&gt;
&lt;p&gt;Being a release engineer in a Windows world presents some very interesting and different challenges for someone coming from a UNIX background like myself, and with a little bit of emphasis and effort on Microsoft's part, surmounting them could be a whole lot less painful.&lt;/p&gt;
&lt;/section&gt;</description><category>infrastructure</category><category>installers</category><category>Installshield</category><category>microsoft</category><category>msbuild</category><category>powershell</category><category>release</category><category>releng</category><category>scripting</category><category>tfs</category><category>windows</category><guid>https://www.feoh.org/posts/3-things-microsoft-should-do-for-release-engineers.html</guid><pubDate>Thu, 28 Jan 2010 18:39:00 GMT</pubDate></item><item><title>Something for nothing when you don't WANT IT is still damn annoying.</title><link>https://www.feoh.org/posts/something-for-nothing-when-you-dont-want-it-is-still-damn-annoying.html</link><dc:creator>cpatti</dc:creator><description>&lt;p&gt;Dear Sun;&lt;/p&gt;
&lt;p&gt;When you tell me I hava Java (TM) updates available on my work Windows machine, I gleefully say sure why not and click through the installer, because generally Sun provided updates to my installed JDK don't do anything evil, and with security and all it's a good idea to stay up to date.&lt;/p&gt;
&lt;p&gt;HOWEVER - trying to shoehorn OpenOffice into the mix is downright annoying, and I resent it.&lt;/p&gt;
&lt;div class="line-block"&gt;
&lt;div class="line"&gt;&lt;br&gt;&lt;/div&gt;
&lt;div class="line"&gt;I don't have anything at all against OpenOffice. In fact, it's a Class A piece of open source software and is damn impressive for what it is, what it does, and how much it costs ($0).&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;However, I and many other users have exactly zero use for OpenOffice because we have the arguably more powerful Microsoft Office suite already installed on our machines.&lt;/p&gt;
&lt;p&gt;I take no issue with having a little checkbox that says "Hey, want to get OpenOffice along with Java?" because at least I can check that off if I want, or not. But having your Java update installer constantly display ads for OpenOffice, and having it give me &lt;strong&gt;no choice&lt;/strong&gt; in the matter as to whether or not I want the ferschlugging OpenOffice installer is just wrong.&lt;/p&gt;
&lt;p&gt;The software sells itself, Sun, there's no reason to try to sneak it under the radar of unsuspecting users just because you want to be able to claim more seats. Last time you tried this with Netbeans, and look at how well that turned out!&lt;/p&gt;
&lt;p&gt;So, get a clue people, really. Truth in advertising, let me do what I mean and don't try to install software that I need whether I realize it or not, it just pisses me off.&lt;/p&gt;
&lt;p&gt;Grumph, enough ranting for now :)&lt;/p&gt;</description><category>annoyances</category><category>free</category><category>installers</category><category>java</category><category>openoffice</category><category>software</category><category>sun</category><category>windows</category><guid>https://www.feoh.org/posts/something-for-nothing-when-you-dont-want-it-is-still-damn-annoying.html</guid><pubDate>Thu, 02 Oct 2008 15:02:00 GMT</pubDate></item></channel></rss>