Use bash to open the Windows File Explorer at some location

Wednesday, August 26th, 2015

TL;DR: don’t bother clicking your way through the Windows File Explorer, use bash functions instead! :)

I’ve already blogged in quite some length about my current Windows dev environment and I’ve put enough emphasis on the fact that bash is at the center of my workflow, together with my bash profile & more recently with ConEMU.

I continually improve my bash profile as I discover new things I can do with it, and this post is in that vein.

I often find myself opening the Windows File Explorer (Win + e) to get at some location; for that purpose, I simply pin the often used locations in the ‘Quick access’ list, although that means that I have to go the ‘click-click-click-click’ route and as we know, one can be much more efficient using only the keyboard.

To quickly open the File Explorer at locations I often need to open (e.g., my downloads folder, my movies folder & whatnot), I’ve created the following utility function & aliases:

# Aliases to open the Windows File Explorer at the current location
alias explore='explorer .' # open file explorer here
alias e='explore'
alias E='explore'

# Open File Explorer at the given location
# The location can be a path or UNC (with / rather than \)
# Examples
# openFileExplorerAt //192.168.0.1/downloads
# openFileExplorerAt /c/downloads
# openFileExplorerAt c:/downloads
openFileExplorerAt(){
 pushd $1
 explore
 popd
}

The ‘explore’ alias simply opens the Windows File Explorer at the current shell location while the ‘openFileExplorerAt’ function goes to the path given in argument and opens the File Explorer before going back to the previous shell location.

With the above, I’m able to define functions such as the one below that opens my downloads folder directly:

downloads(){
	openFileExplorerAt //nas.tnt.local/downloads
}

And since i’m THAT lazy, I just alias that to ‘dl’ ^^.

That’s it! :)

Additional Windows 10 Configuration Tips

Wednesday, August 26th, 2015

I’ve recently blogged about my Windows 10 configuration. In this post I’ll list some additional things that I could disable/tweak/configure using a new application called W10Privacy.

If you haven’t read the first part, then I recommend you to do so first as it has some interesting tips in store for you :)

First, you need to download the application here. Once downloaded, you should uncompress it and run it with administrator privileges. To have access to the list of System applications, you can also download PSExec and place the executable in the folder where W10Privacy is located.

Here’s what I’ve configured using that tool (knowing that my configuration already covers many of the settings it provides):

  • Privacy
    • Turn off SmartScreen Filter to check web content (URLs) that Windows Store apps use
    • Disable sending of information on writing behavior
    • Disable location for this device
    • Disable asking for Feedback
    • Disable the AutoLogger
    • Block Microsoft server, to which telemetry data will be sent (in the hope that this setting has additional domain names to block)
  • Search
    • Do not search online and do not include web results
    • Disable the retrieve of Bing search suggestions and web results (applies only to the actual user)
  • Network
    • Do not connect to proposed public hotspots
    • Do not connect to wireless networks shared by my contacts
    • Do not share my networks with my Outlook.com contacts
    • Do not share my networks with my Skype contacts (w t f)
    • Do not share my networks with my Facebook contacts (w t f)
  •  Explorer
    • Remove search option on the taskbar (searching by Windows key + Q is still possible)
    • File Explorer opens at “This PC” instead of “Quick Access”
    • Show a desktop icon for “Computer”
    • Show extensions for known file types in File Explorer
    • Show hidden files, folders or drives in File Explorer
    • Show protected operating system files in File Explorer
    • Turn off Windows SmartScreen
    • Remove “- Shortcut” suffix from future shortcut file names (w00t!)
  • Services
    • Disable Windows Diagnostics Tracking Service – reboot required!
  • Edge
    • Send “Do Not Track” requests
    • Do not help me protect me from malicious sites and downloads with SmartScreen Filter
  • OneDrive
    • Do not start OneDrive automatically when I sign in to Windows
    • Remove OneDrive from the File Explorer sidebar in Windows 10
  • Tasks
    • Disable the task “Microsoft Compatibility Appraiser”
    • Disable the task “ProgramDataUpdater”
    • Disable the task “Proxy”
    • Disable the task “Consolidator”
    • Disable the task “KernerlCeip Task”
    • Disable the task “UsbCeip”
    • Disable the task “Microsoft-Windows-DiskDiagnosticDataCollector”
    • Disable the task “DmClient”
    • Disable the task “FamilySafetyMonitor”
    • Disable the task “FamilySafetyRefresh”
    • Disable the task “SmartScreenSpecific”
  • Tweaks
    • Disable automatic restart, the user is instead asked to plan a restart
    • Disable updates for other Microsoft products on Windows Update (e.g., office, etc)
    • Updates and apps will no longer be distributed to other clients (disables the lower switch) (i.e., my bandwidth is my own)
    • Distribute updates and apps only on the local network (disables upper switch)
  • Background-Apps
    • Disable background functionality for … (ALL THE DAMN APPS!)
  • User-Apps
    • Uninstall the following:
      • Money
      • News
      • Sports
      • Weather
      • First Steps
      • Get Office
      • OneNote
      • Skype download
      • Groove-Musik
      • Movies and TV shows
      • Maps
      • companion phone

As you can see, W10Privacy has quite a lot of nice features. I know that disabling the privacy related features will not protect my privacy much more than it currently is (i.e., it ain’t), but it can’t do harm either and at worst it’ll just save me some CPU cycles.. ;-)

Chrome Extensions that rock

Friday, August 14th, 2015

TL;DR: I can’t live without browser extensions, here are my favourite ones

Most if not all power users rely on the presence of a number of browser extensions to satisfy their specific needs/lunacies. The fact that Internet Explorer never provided an easy/accessible way to develop & deploy extensions is one of the many reasons why it was never my default Web browser (apart from when Microsoft forced my hand with OS upgrades…).

Fortunately for us, modern Web browsers (apart from MS Edge) are very customizable and major ones such as Google Chrome & Firefox have huge catalogs of extensions. The difficulty that remains for us is to find the truly great extensions among the huge number of crappy and plain evil ones ;-)

I’ve switched from Firefox to Chrome at the time Chrome came out and was blazingly fast and I haven’t taken a look back ever since (even if I know I probably should), hence I’ll only list the Google Chrome extensions that I use, although there are counterparts for most of the ones I’m about to mention.

So here’s my current list, in no particular order:

  • uBlock Origin: efficient AD blocker. If you need but one extension then it must be this one (light CPU/memory usage)
  • Personal Blocklist (by Google): if you want to block domains/hosts from appearing in your Google search results (e.g., shopping/comparison crap sites when you search for information about products)
  • Clickable Links: doesn’t it make you mad when websites display URLs without links? This extension fixes that automatically
  • ScriptSafe: if you want to stay in charge of what Web browser does
  • View Thru: if you’re concerned about what stands behind shortened URLs (e.g., bit.ly & the like)
  • Ghostery: if you care even a little about your privacy then this one should get your attention
  • Shoptimate: automatic price comparison: awesome extension to help you know if you’re getting the best price you can
  • The Camelizer: see historical pricing data and even get mails when prices drop
  • Page Eraser: sometimes there are things on Web pages that aren’t necessarily ads but that we just don’t care about/don’t wanna see. This extension will help you make them disappear.. for good :). I’ve developed a similar extension a while ago but I don’t maintain it anymore :p
  • Link2Clip: Copy all links in the copied text to your clipboard. Very useful when you don’t want to manually extract links from web pages
  • LinkClump: alternative that supports fast bookmarking
  • Docomplete: this extension enables autocomplete for password fields on websites that intentionally disable it (use this only if you know what that means.. ^^)
  • Lazarus: Form Recovery: automatically save everything you type in forms so that you can easily recover from timeouts, crashes & network errors
  • BehindTheOverlay: easily close overlays on any websites
  • iMacros for Chrome: automate tasks by recording/replaying macros
  • Gestures for Google Chrome: mouse gestures rock, just try it out
  • Desprotetor de Links: sometimes websites send you through link protectors & whatnot with tons of boring ads. If you’re like me then you’ll like this extension because it’ll help you go right through to the content you’re after
  • Fast Bookmark Scanner: scan your bookmarks & identify duplicate links, folders & empty ones
  • SuperSorter: alternative extension to fix your bookmarks
  • SmoothScroll: smooooooooooth scrolling is something you need even if you don’t know it yet
  • I’m a Gentleman: one click to save images
  • Neater Bookmarks: neat bookmarks tree popup with easy filtering
  • Session Buddy: save/load entire browsing sessions; useful for context switches
  • Session Manager: alternative for session management
  • Turn Off the Lights: fade the entire web page to dark in order to better appreciate videos
  • Capture Webpage Screenshot – FireShot: quickly capture a screenshot of an entire web page
  • Random Bookmark: this may sound dumb but if you have a huge backlog of bookmarks to check then this one can help :)
  • Scroll To Top: does what it says
  • Shut Up: lets you choose if comment sections should be visible or not
  • Live HTTP Headers: because it’s always useful to know what your browser is up to
  • Page Monitor: for times when you need to know as soon as a page has changed without killing your F5 key (e.g., that concert reservation page that’s about to go live)
  • Pastebin.com: put stuff on Pastebin.com easily
  • Enhanced Steam: dramatically improve the Steam website (highlight games you own, games on your wishlist, calculate bundle discounts based on the games you own, etc)
  • Play to Kodi: if you’re using XBMC errr Kodi then you need this extension to easily send content to your server
  • Google Cast: if you have a Google Chromecast, then you just need this
  • Language Immersion for Chrome: cool extension to immerse yourself in a new language. This extension switches certain words/phrases from English into a language of your choice and you can switch back and forth between the original & translated versions
  • Reddit Enhancement Suite: nice improvements for browsing Reddit
  • .torrent to Transmission: easily add torrents to Transmission (works with distant hosts as well; useful since Transmission runs on my NAS)
  • Better Usenet: if you’re a Usenet user then you’ll love this one; it adds a ton of improvements to Usenet related websites (e.g., Binnewz, Binsearch, NZBIndex, …)
  • Binnews Enhancer: another Usenet-specific extension that improves the Binnewz website
  • CouchPotato: if you use CouchPotato then you’ll like this one

Bonus: DO IT! (just in case you need some motivation

Voilà! Apart from a bunch of software development related ones, the extensions above are the ones I can’t live without!

Which ones do YOU rely on and why?

ConEmu is my new console replacement

Friday, August 7th, 2015

TL;DR: ConEmu is the BEST console for Windows power users!

Update 2015-08-24:

A recent update to ConEmu has added support for a feature I’ve requested last month, the ability to automatically restore the ConEmu console on the currently active screen (i.e., where the mouse is located), this makes ConEmu even more awesome! :D


 

In a previous post about my Windows dev environment configuration, I’ve explained that I was using AutoHotKey in combination with Console2 to get a quake-like console on Windows. Since then, I discovered ConEmu… and I ain’t going back!

I’ve recently switched from Console2 to ConEmu and because of this change, I no longer need AutoHotKey to show/hide the console since ConEmu show/hide can be bound to a global hotkey (i.e., I can get the same behavior). Altough, I still use AutoHotkey in order to start ConEmu when pressing ‘²’ in case ConEmu isn’t started already.

ConEmu has a gazillion features, one of which being the holy grail for me: an actual Quake-like console with animated dropdown and support for image backgrounds :D. It’s not my goal to describe all it can do but do yourself a favor, just try it out.

Basically the rest of my configuration is as explained in my earlier post apart from the fact that I now use ConEmu rather than Console2. In fine, I’m still using Bash :)

Here’s a link to my ConEmu configuration file

ConEmu configuration highlights:

  • Main
    • Consolas font w/ Clear Type
  • Main > Size & Pos
    • Full screen
    • Centered (not important actually)
    • Long console output: 9999
    • Restore to active monitor (MUST HAVE if you use my configuration). See my update of 2015-08-24 above)
  • Main > Appearance
    • Always on top
    • Auto scrollbars (hidden after a small delay)
    • Quake style slide down (
    • Auto-hide on focus lose
  • Main > Background
    • custom background image (dark.jpg)
  • Main > Tabs
    • Always show
  • Main > Confirm
    • No confirmation for new consoles/tabs
    • No confirmation for tab closing
  • Main > Update
    • automatic check on startup
    • Release type: latest
  • Startup
    • {Bash::Git bash} (can’t live without my Bash shell :p)
  • Startup > Tasks
    • {Bash::Git bash}
      • set as default task for new console
      • set as default shell
  • Features
    • Sleep in background
    • Log console output (great!)
  • Features > Text cursor
    • Active console
      • Block
      • Color
      • Blinking
  • Features > Colors
    • Scheme: Solarized Git (I’d love to have a Seti_UI one here)
    • Fade when inactive
  • Features > Transparency
    • Active window transparency: ~90%
  • Features > Status bar
    • Shown
    • Selected columns
      • Console title
      • Synchronize cur dir (not sure what this one does)
      • Caps Lock state
      • Num Lock state
      • Active console buffer
      • System time
  • Keys & Macro
    • ²: Minimize/Restore (Quake-style hotkey also)
    • F1: Create new console or new window
  • Keys & Macro > Controls
    • Send mouse events to console
    • Skip click on activation
    • Skip in background
    • Install keyboard hooks
  • Keys & Macro > Mark/Copy
    • Detect line ends
    • Bash margin
    • Trim trailing spaces
    • EOL: CR+LF
    • Text selection: Left Shift
    • Copy on Left Button release
    • Block (rectangular) selection: Left Alt
    • Copying format: Copy plain text only
  • Keys & Macro > Paste
    • All lines
    • Confirm
    • First line Confirm pasting more than 200 chars

Here’s the new version of my AutoHotKey script. Now it:

  • starts ConEmu if not running already
  • lets the ‘²’ key press pass through if ConEmu is running (so as to let ConEmu show/hide the console window
; ConEmu script (start it if it ain't running)
; ConEmu class: VirtualConsoleClass (reference: https://github.com/koppor/autohotkey-scripts/blob/master/ConEmu.ahk)
; Change your hotkey here
;SC029 == ²
SC029::

DetectHiddenWindows, on
IfWinNotExist, ahk_class VirtualConsoleClass
{
	Run "C:/CloudStation/Programs/tools/ConEmu/ConEmu64.exe"
	WinWait ahk_class VirtualConsoleClass
}
else{
	; let the key pass through if ConEmu is active
	; reference: http://www.autohotkey.com/board/topic/2121-hotkey-pass-through/
	Suspend, On
	Send,{SC029}
	Suspend, Off
	return
}
DetectHiddenWindows, off
return

Bonus: here’s the link to the background images that I use (I don’t claim any rights on these ^^).

Google Translate bash function (Windows)

Friday, August 7th, 2015

I’ve noticed that since I switched to Windows 10, my Google Translate bash functions were broken. I suppose that something has changed in the way that explorer.exe interprets URLs (?). Anyway, here’s a fixed version, simply using a different way to construct the URL ;-)

I use the function below to translate from english to french:

enfr(){ (explorer "https://translate.google.com/?sl=en&tl=fr&text=$*" )& }

The only things to know to understand the above:

  • sl = source language
  • tl = translation language
  • text = what to translate :)
  • $* = arguments passed to the function (i.e., what you want translated)
  • calling this function will open a new tab in your default Web browser

I know that it could be improved because it needs proper escaping (e.g., running frnl c’est sympa will break it because of the ‘), but it’s just enough for what I need.

One could create a more intelligent function supporting multiple languages (please do :p) but I don’t need one =)

My development environment on Windows

Thursday, July 30th, 2015

TL;DR Use Bash on Windows like me and you’ll be in heaven too, with penguins and ice creams :)

Update 2015-08-07: I now use ConEmu rather than Console2; apart from this, my configuration is still as described below


In this post I’ll describe my current Windows configuration and development environment. I’ve already covered how I’ve customized my Windows 10 install, but here I’m going to explain what I do to have an efficient workflow and a ‘portable’ configuration.

For those wondering, yes I use Windows as my main operating system (don’t throw the tomatoes just yet). As I’ve said in the past, I do prefer Linux, but I also enjoy gaming and dual boot is just not for me anymore. Moreover having one OS across all the machines I use at home and at work (apart from tablets) is useful.

Before going in the nitty gritty details, here’s a brief overview of my setup:

  • CloudStation (Synology NAS application): synchronizes files between my desktop, NAS, laptop & tablets; you can substitute this with Dropbox or whatever else you like
  • Git (i.e., msysGit) & git bash: because I love git and MSYS
  • Console: a great Windows console enhancement (supports multiple tabs, different shells, different fonts, easy text selection, shortcuts, …
  • AutoHotkey: create macros & scripts. I use it to show/hide my bash console with the ‘²’ key
  • bash profile: if you know *nix, you know this but I’ll cover the basics below
  • a ton of portable apps (or non-portable ones adapted)
  • GitHub: great Git client for Windows

Here are a few examples of things I can do with my setup (on all my Windows machines):

  • hit ‘²’ and start typings commands
  • use common *nix commands such as ls, cat, less, sed, …
  • type ‘e’ and have the File Explorer opened in the current folder
  • type ‘s’ and have Sublime Text opened
  • type ‘s cool’ and have Sublime Text opened with the file ‘cool’ opened it in
  • type ‘npp’ and have Notepad++ opened
  • type ‘n’ and have my notes opened
  • type ‘m’ and have my GMail mailbox opened
  • type ‘g cool’ and have a new browser tab open with the Google search results for ‘cool’
  • type ‘imdb shawshank redemption’ and see the IMDb info about the best movie of all times
  • type ‘wiki’ and have my wiki opened
  • type ‘f’ and get facebook opened
  • type ‘nlfr echt waar’ and have google translate opened with the translation of ‘echt waar’ from dutch to french
  • same with frnl fren …
  • type ‘img mario’ and see pictures of Mario all over
  • type ‘mkcd test’ and have the test folder created and cd into it
  • type ‘ws’ and have WebStorm started
  • type ‘idea’ and have IntelliJ started
  • type ‘write 001′ and have my 001 project opened in Scrivener
  • type ..3 and be 3 levels higher in the file system tree
  • type ‘p’ and have my bash profile opened for edition in Sublime Text
  • type ‘mindmap’ and have my Mindmap opened in FreeMind
  • well you get the idea … :)

The goal of my setup is to strictly limit the number of steps to get my development environment up and running (e.g., after I get a new device or need to reinstall one) and to synchronize my configuration(s) between all devices I work on.

At the heart of my configuration, there is CloudStation, the synchronization app provided by Synology NASes (best NAS devices you can find on the market). I use CloudStation to synchronize the following between my devices:

  • Configuration files (I’ll cover these later)
  • Programs
  • Books I’m currently reading (or plan to read soon)
  • Comic books (only thing that I synchronize w/ my tablet)
  • Pictures (e.g., wallpapers & pictures of my face — if I need to upload one somewhere)
  • Podcasts
  • Book drafts (stuff I’m writing from time to time)
  • My notes.txt file

The most important parts are the config files and programs because that’s the core of my setup.

My CloudStation folder is organized as follows:

  • _FOR_HOME: stuff to bring back home
  • _FOR_WORK: stuff to bring to work
  • _NOW: stuff I’m currently busy with
  • Books
    • Reading
    • Later
  • Configuration
    • Bash: contains my bash profile
    • Dev: contains the configuration for all my dev tools
      • Eclipse: my Eclipse preference files (.epf), code style rules, etc
      • IntelliJ: my portable IntelliJ config (config & plugins)
      • WebStorm: my portable WebStorm config (config & plugins)
      • Git
      • Templates: project templates
    • Home: my *NIX home folder (.gitconfig, .npmrc, .ssh folder, etc are in there)
    • Scrivener
    • XBMC: my portable XBMC config (worth another post in itself)
  • Electronics: my current electronics projects
  • Guitar: that thing with strings that I learn when I find free time (i.e., not often enough)
  • Lightroom: my LR catalog (worth another post in itself)
  • Music: things that I listen again and again
  • Pictures
  • Podcasts
  • Programs
    • dev: JDK, maven, docker-machine, groovy, intellij, mongodb, nodejs, npm, python, eclipse, svn, webstorm, …
    • electronics: arduino IDE, atanua, circuit, fritzing, …
    • emulation: zsnes, project64, …
    • games: minecraft and other small games ;-)
    • readers: e-book readers & comic book readers (e.g., ComicRack)
    • seb: my own tools
    • tools: a huge ton of (portable) apps
    • writing: apps like Scrivener, WriteMonkey, …

To give you an idea of the tools I have in CloudStation, here’s a part of what I use:

  • SublimeText: my current preferred text editor (no it’s not VI, I’m more of a nano guy)
  • Notepad++: my previous preferred text editor
  • SysInternals suite: greatest Windows toolkit ever
  • 7-zip: it does it all
  • KeePass: one passphrase to rule them all
  • kitty: putty portable replacement
  • ADExplorer
  • AntMovieCatalog (again worth another post)
  • AutoHotKey (more on it below)
  • borderless window tool: useful for games that don’t have a fullscreen windowed mode
  • calibre: manage my e-books
  • Console2: awesome Windows console replacement (more on it below)
  • desktops: obsolete with Windows 10 :)
  • ffmpeg: holy grail (or so I thought)
  • exiftool: dump exif
  • ext2explore: let me see EXT partitions
  • fat32format: format stuff
  • folder2iso: sudo make me an iso
  • freemind: can’t live without mindmaps
  • guiformat
  • HexChat: coz IRC is still there in 2015 (yeah I’m tired looking for the links ^^)
  • hfsexploer
  • hxDen
  • ImageMagick: do me some magic with images
  • JDownloader: download all the things
  • jude: sometimes helpful for quick UML drawings
  • libmp3lame: encoding stuffz
  • mplayer: who can live decently without mplayer around?
  • MySQL Workbench
  • netcat: netcat for Windows, weee
  • PortQry: check UDP ports
  • Privoxy: local proxy
  • ProxyGet: dumps info about the currently configured proxy (useful in locked-down environments)
  • PS3Splitter: split large files
  • restoration: restore deleted files (family helper)
  • SolEol: download subtitles easily
  • SQLite
  • SteamMover: move steam folders around
  • SubtitleEdit: fix me thy subtitles
  • twt: CLI for Twitter
  • USBDiskEjector
  • uTorrent
  • wakeMeOnLan: wake up LAN devices
  • wget
  • win32diskimager: create img files
  • WinDirStat: where’s my free space gone??!
  • WinMerge: diff me up
  • WinSplitRevolution: can’t live without this to re-arrange/resize windows around
  • winscp
  • YNAB: yes you do need a budget

Okay so all of that currently sums up to about 30GB so clearly the initial sync time is quite long because there are a huge amount of very small files to sync, but once synchronized, you get an idea of all I have available at my fingertips.

There are apps that I do actually install on my OS for two reasons: either the app is way too large to be copied around or it integrates too deeply with the operating system. Here are some applications that aren’t in my CloudStation folder:

  • Lightroom
  • Photoshop
  • VLC: much easier to install & have the file type associations
  • Winamp: same idea
  • Git
  • Spotify
  • Google Chrome
  • Steam
  • Battle.net
  • Daemon Tools
  • CrashPlan client
  • Dropbox
  • GitHub client
  • VirtualBox

Okay, so far you have an idea of the stuff I carry around with my but you don’t know yet how I use it all. Let’s assume for a moment that my PC goes up in flames and that I need to setup a brand new one.

Here’s what I need to do in order to get back up and running (to the point of being able to work):

  • install the OS (haha)
  • install drivers (hoho)
  • install CloudStation and let it sync all my files
  • install msysGit
  • create a .profile (bash profile) file in my home folder with the following contents
    • source /c/CloudStation/Configuration/Bash/bashProfile.txt
    • this loads my actual bash profile which is part of my CloudStation synchronized files
  • add AutoHotkey to the startup list (i.e., put a shortcut under ‘shell:Startup’)
    • C:\CloudStation\Programs\tools\AutoHotkey111502_x64\AutoHotkey.exe
  • copy my AutoHotkey script to the Documents folder
  • at this point I can already hit ‘²’ and my console opens up, with all my tools available
  • install the few other apps I like to have
  • done!

Okay so let’s see how my console is set up.

So when the OS boots, it now starts AutoHotkey. I’ve written a small script that opens up Console2 when I hit ‘²’ and hides it when I hit ‘²’ again, a bit like Quake’s console or Yakuake under Linux (although I don’t have the nice animation ;-)).

Here’s the script

; QuakeConsole, used in combination with Console2
; Change your hotkey here
;SC029 == ²
SC029::

DetectHiddenWindows, on
IfWinExist ahk_class Console_2_Main
{
 IfWinActive ahk_class Console_2_Main
 {
 WinHide ahk_class Console_2_Main
 WinActivate ahk_class Shell_TrayWnd
 }
 else
 {
 ; put the console at top left
 WinMove, 0, 0
 ; show the console
 WinShow ahk_class Console_2_Main
 WinActivate ahk_class Console_2_Main
 }
}
else
 Run "C:/CloudStation/Programs/tools/Console-2.00b148-Beta_64bit/Console2/Console.exe"
DetectHiddenWindows, off
return

The script is quite simple: if Console2 is running, pressing the configured key will either show/hide the window (and put it on the top left of the screen on show); if not, it starts the program.

As you can see Console2 is also in my CloudStation folder, just like AutoHotkey is.

So now, here are the relevant parts of my Console2 configuration (console.xml file placed in the Console2 program folder in my CloudStation tools)


	
		
			...
		
	
	
		
			
		
		
		
		
			
		
		
		
	
	
		
		
		
	
	
		...
		 
		
		
	
	
		
			 
  			 
  			 
			
			
			
			
			
		
	
	
		   
		
			
			
			
				
					
				
			
		
	

With this Console2 configuration:

  • I automatically get in a Git Bash shell in my workspace (i.e., where I have my project folders)
  • I can hit ctrl+ F1 to open a new tab, also with the same Git Bash shell
  • I can use ctrl + c / ctrl + v to copy/paste
  • I can use the middle mouse click to paste
  • I can use shift + click to select & copy text

Okay thus so far you can see how I can use my bash shell on Windows, I just hit ‘²’ and I can enter commands, not much harder than hidding the Windows key to open up the start menu & searching for stuff, except that in my shell I’ve got all my commands & aliases available.

The final (and most important) part of my configuration is my bash profile. It’s where I configure my environment, define functions and aliases, configure programs in my path, etc. 

Given how long it is I’ve create a Gist of it here (note that it’s just a subset of my whole config): https://gist.github.com/dsebastien/47d24a5d6c1b8005f434

I don’t claim any rights on the functions I use in my bash profile as it is mostly based on stuff I gathered over time from various sources. Though there mustn’t be many crazies like me to do this kind of things on Windows ;-)

In the file, you’ll see that the basic principles are quite simple & straightforward, folders added to the path, functions and aliases with shorter names, etc.

I have tons of ideas to improve my bash profile but I just don’t have time now. There are just tons of worth-looking examples all over the place if you’re interested. And if you have ideas/links, just post them in the comments!

What I like with my current configuration is that it is portable in the sense that if I add a new tool or change the configuration of an existing one, all my machines are directly updated.

Of course it is far from perfect, most apps aren’t up to date and the more I add into my system, the harder it gets to update stuff. Package managers are indeed the solution and *NIX has had them since the dawn of ages, but there’s hope on Windows too.

In the future, Windows package managers like OneGet (now part of W10) and Chocolatey should simplify things, but I don’t feel like it’s usable for my goals right now (correct me if I’m wrong).

The most evident and easiest solution would simply be to use Linux, but for as long as I’ll be playing games from time to time, I won’t go back. 

 

Windows 10 configuration tips

Thursday, July 30th, 2015

Update 2015-08-26:

I’ve posted a new article with some additional configuration steps/tweaks.

Update 2015-08-05:

Removed some additional tracking services & bloatware using: 

I’ve also removed OneDrive from autorun, removed the app, etc. Thanks Microsoft but no, I’m not interested and if I ever am, I’ll let you know. It’s not because I’m using Windows that I want all the software you’ve ever produced. Propose me to opt in if you want, but don’t force additional products on me!.

Tip:

If you want to get a list of the other currently installed apps just use: Get-AppxPackage -User <username>. If one of them bothers you then you can invoke Remove-AppxPackage <package name>

In the previous post, I’ve mentioned that almost all of my applications and settings were kept during the upgrade from Windows 8.1 to Windows 10. Almost all, but not all.

And anyway, each time I switch to a new OS release, I can’t help but spend some time going through all the options and policy settings just to configure it the way I like.

With Windows 10, it’s the very first time that I’m done in less than two hours, which is nice :)

Now let me list all the things that I’ve done after upgrading, in no specific order:

  • Activate Windows (first things first right? :p)
  • Installed the latest NVidia drivers (these didn’t survive the upgrade)
  • Put the resolution back to 1920*1080
  • Configured the File Explorer to show “This PC” rather than “Quick Access”, because I don’t care about frequent folders & recent files. I know where I need to go and how my files are organized
  • Reinstalled Virtualbox as I’ve noticed that it crashed when started
  • fired up gpedit.msc (which you will only have with the Professional & above editions..)
    • disabled thumbs.db files generation: because I can’t stand trying to move/delete things to discover that the damn thumbnails file prevents me from doing what I want…
      • User > Administrative Templates > Windows Components > File Explorer > Turn off the caching of thumbnails in hidden thumbs.db files
    • disabled things that send data to Microsoft: Sorry MSFT, but I never like having my machine send data around (just a general principle that I stick by)
      • Computer > Windows Components > Windows Error Reporting > Disable Windows Error Reporting
      • Computer > Windows Components > Windows Error Reporting > Do not send additional data
      • Computer > Windows Components > Data Collection and Preview Builds > Allow Telemetry
    • made sure that the shutdown button on the logon screen was disabled: If you have young children you’ll understand why
      • Computer > Windows Settings > Local Policies > Security Options > Shutdown: Allow system to be shut down without having to log on
    • enabled always sending Do Not Track (DNT) header: because if there are still non-evil people on the Web, I need them to know that I somehow value privacy
      • Computer > Windows Components > Internet Explorer > Internet Control Panel > Advanced Page > Always send Do Not Track header
    • disabled Windows SmartScreen: because I don’t need Microsoft to tell me what is safe and what isn’t
      • Computer > Administrative Templates > Windows Components > File Explorer > Configure Windows SmartScreen
    • enabled confirmation for file deletion: because I can’t trust myself that much ;-)
      • Recycle Bin > Properties > Display delete confirmation dialog
    • disabled documents history: who cares about history (don’t repeat that to my son ^^)
      • User > Administrative Templates > Start Menu and Taskbar
        • Clear history of recently opened documents on exit
        • Do not keep history of recently opened documents
    • disabled searching for files/documents/internet in start menu: because I care about apps when I use the start menu, nothing else (personal choice indeed)
      • User > Administrative Templates > Start Menu and Taskbar
        • Do not search communications
        • Do not search for files
        • Do not search Internet
    • forced listing desktop apps first (rather than metro apps..)
      • User > Administrative Templates > Start Menu and Taskbar 
        • List desktop apps first in the Apps view
    • disabled MS Edge app usage tracking: I love MS Edge but I just don’t like tracking
      • User > Administrative Templates > Windows Components > Edge UI
        • Turn off tracking of app usage
    • customized the File Explorer
      • User > Administrative Templates > Windows Components > File Explorer
        • Remove the Search the Internet “Search again” link
        • Start File Explorer with ribbon minimized
        • Turn off display of recent search entries in the File Explorer search box
        • Turn off caching of thumbnail pictures
  • forced numlock at boot (logon screen also!): this setting was apparently lost during the upgrade
    • run “regedit”
    • go to \HKEY_USERS\.DEFAULT\Control Panel\Keyboard
    • change value “InitialKeyboardIndicators” from “2147483648” to “80000002”
    • restart and u will have NUM LOCK ON always on windows startup

After this I already felt a bit more at ease, although that was only the first part.

The next part was to go through all the Settings and trying out the new features..

  • created a new virtual desktop: Hey MSFT, great that you’ve finally added virtual desktops but why so late? :)
  • fixed the default apps: this is one of the things I disliked. MSFT, you’ve managed to keep so many things and just decided to replace my default apps by all of yours? That really sucks!
    • Switched default browser back to Google Chrome
    • Switched default music player back to Winamp (because it really… :p)
    • Switched default video player back to VLC
  • modified the folders that appear by default in the Start Menu
    • File Explorer
    • Settings
    • Downloads
    • Personal Folder
  • modified privacy settings
    • Settings > Privacy
      • General
        • Send Microsoft info about how I write…
          • OFF
      • Location
        • Disabled
      • Removed various rights from apps…
      • Feedback & diagnostics
        • Windows should ask for my feedback: Never
        • Send your device data to Microsoft: Basic
        • Background apps: Remove
  • removed default Windows 10 apps: MSFT I get why it is all there, but I just couldn’t care less
    • Finance
    • News
    • MSN Food & Drinks
    • Health & Fitness
    • Travel
    • Get Skype
    • Get Office
    • Get Bored
    • Get Whatever :o
  • Windows Store
    • signed in with my Windows Live account: ONLY for apps
  • Cortana & Search settings
    • disabled web search results

Done!

I’ll probably edit this post over time to reflect config changes, but for now I think it’s already in a pretty good shape :)

PS: For those wondering, no I’m not hardening my Windows box in any specific way, I just have a local firewall (Net Limiter) set to ask me to allow/Deny anytime there are inbound/outbound connections (when I don’t already have rules covering those), so as long as apps cannot bypass that Firewall, I know what tries to go in/out and I’m in control. That combined with the Antivirus is all I need. I wouldn’t configure a Windows box just like that at work, but at home that’s just more than enough :)

Upgrading from Windows 8 to Windows 10

Thursday, July 30th, 2015

TL;DR: Huge kudos to Microsoft for making the upgrade from W7 & 8 to Windows 10 a breeze!

This post is a summary of my experience upgrading from Windows 8.1 to Windows 10; I’m not going to talk about the new features as there are already a huge amount of articles about that.. :)

Yesterday, the binaries for Windows 10 were available on MSDN so I wanted to finally give W10 a try. I’ve never been keen of installing technical previews on my main machine and I just don’t have time to test that kind of things anymore.

So first things first, I’ve downloaded the ISO & claimed my key. Once downloaded I mounted the iso and let the magic happen.

One HUGE step forward with the Windows 10 installer is that it is now able to perform the upgrade while keeping most applications and settings.

In my case, although I have a “pretty complicated” configuration, I was back up and running directly after the upgrade which is just of awesome :)

Here’s what makes it surprising for me:

  • all of my applications are still there, intact (i.e., still configured just as I’ve left them)
  • my registry settings were kept (for the most part)
  • my services are still there after the upgrade (I’ve got a local MySQL instance, a Confluence wiki and a bunch of other stuff)
  • all my drivers are still there
  • my custom Firewall (Net Limiter 2) is still there after the upgrade (impressive given how deeply it must be integrated with the OS (filter drivers & al)
  • Daemon tools is still installed and my virtual devices are still there
  • (most of) my startup applications are still in the autorun list
  • my Windows defender settings & folder exclusions were still there
  • my custom power plan was still there & active
  • my favorites in File Explorer were still there (ok that’s no magic but hey ^^)
  • my desktop icons are still there
  • my regional settings & other are still there

I think that the difference between XP & 7 was MUCH more important and given how “close” W10 is to W8, I can’t say that any of the above is really surprising, but it’s still very nice.

Hopefully the next upgrade from W10 to W.Next will not even require a reboot anymore.. ;-)

In a follow up post I’ll describe the things that I’ve configured after the upgrade.

Huge kudos to Microsoft for making the upgrade from W7/8 to Windows 10 a breeze!

My current global npm packages

Sunday, July 26th, 2015

If you’re familiar with nodejs & npm you already know this (just skip this part), but newcomers should realize that npm packages can not only be installed locally in a project’s folder, but also globally. Packages that are installed globally are.. globally accessible, which is really cool because using npm you can install many CLI tools to streamline your workflow and boost your productivity.
 
To install a package globally, you simply need to use the –global (-g) flag. For example:
 
npm install --global gulp
Note that you can customize where npm stores globally installed packages by creating a .npmrc file in your home folder and adding the following to it:
 
prefix="/path/to/your/global/npm/packages"
You then simply have to add that same path to your system’s path to get all the tools available at your fingertips.
 
Here’s a small list of npm packages that I currently install globally
  • gulp: Streaming build system for the web!
  • babel: JS transpiler. Because we all want ES2015/2016/20xy right now!
  • jspm: JavaScript package manager: one package manager to rule them all. Let’s just forget about npm vs bower vs git vs whatever, just use jspm and be done with it
  • typescript: Ahhh TypeScript, worth explaining in its own post because strongly typed JS is the future and the future is now
  • tsd: TypeScript type definitions downloader. Because TypeScript without type definitions isn’t very useful
  • brower-sync: Easy to use web server that will make your developer life easier: automatically refresh/sync across all connected devices
  • http-server: Minimalist web server (zero-configuration). Using this you can easily serve local content
  • sass: CSS preprocessor (also deserves its own post). Until I free up some time to learn more about PostCSS, I’ll continue to use this
  • node-sass: SASS without Ruby, weeee
  • yo: CLI to run Yeoman generators
  • slush: Another scaffolding CLI (based on Gulp)
  • caniuse-cmd: CLI to easily check browser compatibility of certain features using data from caniuse.com
  • reveal-md: Quickly generate a reveal.js presentation from markdown content
  • superstatic: Nice web server for SPAs
  • bower: Package manager for the web. I install it for older projects
  • grunt: Task runner for the web. Same as above
  • node-inspector: Blink-based debugger for NodeJS apps
  • node-debug: Wrapper for node-inspector

Quick NPM tip and a little rant about node-gyp

Wednesday, July 1st, 2015

Before I start explaining why I’m writing this, here’s my NPM tip of the day: if you encounter errors pertaining to node-gyp “rebuild”, while trying to install an NPM package, then before wasting precious hours of your life, just try to install using the –no-optional flag; if you’re in luck, that’ll just work (as it did for me in most cases).

Now what the heck is node-gyp? That’s a fair question to ask. As they put it in their readme it’s a “cross-platform command-line tool written in Node.js for compiling native addon modules for Node.js … and takes away the pain of dealing with various differences in build platforms”.

Well the way I now see it, it might just do what they say.. for people who need/care about that, but for the rest of the world and especially people like me who just want to install an npm package and get on with their life.. it’s just trouble and needless time waste.

Sometimes when you try to install an NPM package, there will be some dependency in the tree that requires to be built specifically for your platform and at that point, node-gyp (which is one of the dependencies of NPM itself) might come into play. The issue is that to be able to do its job, node-gyp has some prereqs that vary from OS to OS and those prereqs are not part of node/NPM (you’ll soon understand why :p). If you’re one of the good guys and use Linux (you should… and I should too but can’t) then you’ll be alright: python + make will make your day (you’ll also be fine with OSX).

Unfortunately, if you’re a sad panda working on a Windows box just like me, then tough luck!

Here’s a little overview of the ‘light/small’ requirements that node-gyp has on Windows 8+:

  • Python (2.7.x and NOT 3.x+): ok just with this one I already dislike node-gyp
  • Microsoft Visual Studio C++ 2013: ok, now I hate it. Do I really need 7GB just to get an npm dependency on my machine? Wtf (pre-compiled binaries FTW, if I wanted to compile everything myself on my machine, I’d still be using gentoo..)
  • and last but not least, for 64-bit builds… Windows SDK: are you kidding me?!!

Assuming that you’re motivated, then you’ll go ahead and install these.. try again and… still get the same error?! Gee… Well the thing is that quite some people have encountered this problem and have hopped through all kinds of hoops to finally get it to work. Some have had success by uninstalling all Visual C++ redistributable packages (any gamers around here?), reinstalling node-gyp’s dependencies in a specific order, adding environment variables and whatnot..

In my case I was pretty happy to discover that in all cases, the dependencies that needed node-gyp were optional (e.g., for babel, browserify and some others), so simply avoiding them was fine. If you really do need node-gyp to work then I pity you and your disk space ^^. Just take a look at some of these links and may the force be with you.

What also sucks is that npm install rolls back on error even for optional dependencies although it’s not supposed to..