Archives
All the articles I've archived.
Switch between three keyboard languages
An AutoHotkey v2 script that maps Left Control, Right Control, and Right Alt to instantly switch between English, Russian, and Ukrainian keyboard layouts.
Regex to find the end of file (EOF) in Visual Studio Code
The regex $(?!\n) matches the true end of file in Visual Studio Code's multiline search mode, enabling EOF-only bulk replacements.
PowerShell Predictive IntelliSense
How to accept PSReadLine Predictive IntelliSense suggestions in PowerShell 7.3 using the Right Arrow key, and why F2 switches prediction view modes.
Space Cadet Pinball Remake
Links to an improved open-source Space Cadet Pinball remake for Windows and an Android APK port with optional custom Russian sounds.
Software for perfectionists
A curated list of best-in-class tools for notes, photos, ebooks, music, and local file search chosen for their organizational depth.
Chrome search for dynamically loaded code
Enabling the Chrome DevTools setting 'Search in anonymous and content scripts' allows searching inside dynamically eval-loaded JavaScript.
How to debug Obsidian plugins
Practical guide to debugging Obsidian plugins using Chrome DevTools, eval-loaded source navigation, TypeScript compilation, and hot reload.
Total Commander - Ignore List
Total Commander's Ignore List feature lets you exclude wildcard patterns from directory synchronization and other file operations.
Perfect Notes or My Journey to Obsidian
A detailed comparison of note-taking systems over many years, explaining why Obsidian with Syncthing and a curated plugin list became the final choice.
Bulk update video files Capture Time in Adobe Lightroom Classic CC
Two methods for bulk-updating video capture time in Lightroom using ExifTool and the jb Video Metadata plugin, working around SDK limitations.
Organizing photo collection - 20 years research
A 20-year journey through photo organization tools concluding with Adobe Lightroom Classic CC, PhotoStructure, AntiDupl.NET, ExifTool, and two key plugins.
Efficiently debug stored procedure in SSMS
A Stack Overflow question seeking community input on efficient techniques for debugging stored procedures in SQL Server Management Studio.
Windows case-insensitive file names = nightmares with Node.JS
Windows filesystem canonical casing causes Node.js module require cache misses when __dirname and process.cwd() differ in letter case.
cmd.exe AutoRun feature = evil feature
A cmd.exe AutoRun registry entry that ran chcp 65001 produced unexpected output that silently broke Node.js and other tools relying on stdout parsing.
Post SQL output to bug tracker details - Mr. Data Converter
Mr. Data Converter converts SSMS query results copied with headers into formatted markdown or wiki tables for pasting into bug trackers.
Debug .NET IIS Application on Production - dnSpy!
dnSpy enables full debugging of a .NET IIS application on a production server without Visual Studio or the .NET Framework installed.
Open Regedit on a specific key
Use the Sysinternals regjump tool installed via Chocolatey to open Registry Editor directly at any specified key path.
Download all of your data from Facebook. I mean ALL OF IT
Step-by-step method to scrape all Facebook activity log data by month using a JavaScript scroll automation script and the Web ScrapBook Chrome extension.
Integrate Facebook event and Google Calendar
Use eventcal.flown.io to generate a webcal URL from Facebook events and subscribe to it in Google Calendar, filtering by RSVP status.
Download Google Drive file via AJAX ignoring CORS
Using the cors-anywhere proxy to fetch a Google Drive download link via AJAX, bypassing the CORS restriction on the redirect.
HFS - Send large file P2P
HFS (HTTP File Server) is a reliable free tool for peer-to-peer large file transfers, after uTorrent Remote and JustBeamIt both failed.
My new favorite SQL toy - ApexSQL Refactor
ApexSQL Refactor is a highly configurable SQL formatter for SSMS, with a known bug that can incorrectly move SELECT statements inside IF blocks.
Nightmare on Skype street, or Skype on old computer
Troubleshooting Skype on a 15-year-old Windows XP machine without SSE2 support, eventually resolved with a patched Skype 4.2 build.
JavaScript propertyChanging, propertyChanged, propertyGetting events
A reusable JavaScript helper that wraps DOM element properties with CustomEvent-based propertyChanging, propertyChanged, and propertyGetting events.
WTF! MicrosoftAjax.js vs 'use strict' vs Firefox vs IE
Fixing a Firefox-only strict mode error in MicrosoftAjaxWebForms.js caused by window.event being undefined, requiring a cross-browser property descriptor hack.
Broken phone screen or 99% success = fail
Story of working around a completely broken Android screen using USB OTG mouse, AirDroid, and blind navigation to restore phone access.
Best programming font - Source Code Pro
How to install and configure the Source Code Pro TTF font for consistent rendering across Visual Studio, Sublime Text, and ConEmu.
Funny 'Lorem ipsum' memories
A brief anecdote about mistaking lorem ipsum placeholder text for Dutch language on the first encounter in a codebase.
Funny Out-of-memory error
Accidentally opening a large file in Sublime Text via Total Commander's F4 key consumed all available RAM, causing VirtualBox to fail.
'One long debug story' or 'checkbox.onclick'
A multi-hour debugging session reveals why setting checkbox.checked inside an onclick handler requires setTimeout to work correctly.
How to debug JavaScript to find code which modifies your DOM
Using Object.defineProperty to intercept input value assignments and trigger a debugger breakpoint on DOM mutation.
Perfectionist's hell or SQL formatting
Frustration with existing SQL formatters and a call for community input on automatic SQL code formatting tools.
jQuery BlockUI and iframe vs require.js
A require.js plugin that loads dependencies from the top-level window so BlockUI works across iframe popups.
MSBuild custom task and assembly locks
Copying a custom MSBuild task assembly to a temp folder before loading it to prevent file locking after build.
My recent open-source activity
Summary of contributions to GitExtensions, Monodevelop, jHtmlArea, T4 TransformOnBuild, and posh-git.
require.js, jQuery and race conditions
Fixing a race condition where require.js and a script tag each load jQuery independently, causing plugin conflicts.
I raise jQuery bug for IE8
Discovering that a jQuery behavior discrepancy in IE8 is actually an IE8 bug with named function expressions.
Execution of external commands (native applications) in PowerShell done right - Part 3
Fixing Invoke-NativeApplication to handle Windows exit codes beyond 0-255 using an IgnoreExitCode switch.
Execution of external commands (native applications) in PowerShell done right - Part 2
Improved Invoke-NativeApplication with an IsError property on each output line and a prompt function edge-case fix.
Another pull request to Git Extensions had been approved
A merged pull request to Git Extensions fixing the commit window title not refreshing on branch name changes.
git bisect - first time usage impression
First hands-on experience with git bisect to locate a regression in an ASP.NET WebForms GridView rendering bug.
SQL Server Management Studio and very large strings
Working around SSMS truncation of nvarchar(max) strings during concatenation and result copying via FOR XML PATH.
Adding AC3 support for MX Player for Android
Installing a custom codec to add AC3 audio playback support to MX Player on Android.
Dolphin Browser - Browser for Android with Adobe Flash support
Dolphin Browser as a stable Android browser option for sites that still require Adobe Flash.
Debugging weird focus behavior in browser
Technique for debugging unexpected focus changes by monkey-patching HTMLElement.prototype.focus with a debugger breakpoint.
IE vs Firefox and Chrome and jQuery val() vs attr('value')
Cross-browser bug where jQuery .val() returns null on non-form elements in Firefox and Chrome but works in IE.
Execution of external commands in PowerShell done right
A PowerShell exec helper that correctly captures stdout and stderr from native commands and checks exit codes.
Get EXIF metadata with PowerShell
Reading EXIF tags such as date-taken from images in PowerShell using System.Drawing.Image.
PowerShell and IDisposable
Implementing a PSUsing helper function in PowerShell that mimics C# using blocks for IDisposable objects.
PowerShell auto variable $LastResult
Adding a $LastResult automatic variable to PowerShell by wrapping Out-Default to store the last pipeline output.
svn for git-addicted or git-svn gotchas and WTFs - Part 4
Comparing SubGit and SmartGit for git-svn bridging, and using git filter-branch to rewrite SVN author history.
sqlcmd - Get real sql error line number
A PowerShell wrapper for sqlcmd that maps batch-relative error line numbers back to the real script line.
Write-Error vs error tracing
PowerShell Write-Error always reports line 1 instead of the actual error location, with no clean workaround found.
PowerShell $ErrorActionPreference = "Stop" vs error tracing
Why ErrorActionPreference Stop hides the true error line number and how trap { throw $Error[0] } fixes it.
Bulk cherry-picking process and magic ref CHERRY_PICK_HEAD
Using the CHERRY_PICK_HEAD ref to inspect the commit being cherry-picked during conflict resolution.
VirtualBox host key - change it!
Tip to reassign the VirtualBox host key from Right Ctrl to a less-used key like the Application key.
svn for git-addicted or git-svn gotchas and WTFs - Part 3
Handling svn:mergeinfo during cherry-picks with git-svn, and updating mergeinfo metadata manually.
svn for git-addicted or git-svn gotchas and WTFs - Part 2
Managing atomic commits and branch merging workflows when using git-svn to push changes back to Subversion.
Coding Standards document
A concise C# coding standards document with ReSharper configuration, covering access modifiers, var usage, and best practices.
svn for git-addicted or git-svn gotchas and WTFs
Setting up git-svn with a non-standard Subversion repository layout, including branch and tag mappings.
My NUnit pull request accepted
Announcement that a NUnit pull request fixing invalid XML character handling was merged and referenced in NUnit source code.
PowerShell Start-Job WTF
Troubleshoots Start-Job scope issues with PSScriptRoot and shows how to invoke a script path asynchronously using ScriptBlock.Create.
PowerShell Start-Process WTF
Documents a known PowerShell bug where Start-Process -PassThru does not expose ExitCode, with a workaround using Process.Start.
PowerShell .NET property access swallows exceptions
Demonstrates that PowerShell silently returns null when a .NET property getter throws an exception, and how to avoid it.
Escaping Invalid XML Unicode characters
Step-by-step derivation of a C# regex to strip or escape characters invalid in XML, handling UTF-16 surrogate pairs correctly.
My old NUnit _pull request_
Retrospective on a NUnit v2 bug fix submitted before pull requests existed, credited only via a manual description.
NUnit pull request
Announcement of a pull request submitted to the NUnit framework to fix invalid XML character handling in test output.
Stripping invalid characters from UTF-16 strings
C# regex approach to remove unpaired UTF-16 surrogate characters from strings to ensure valid Unicode output.
Unicode literals in PowerShell
How to express Unicode character literals in PowerShell using char casts and ConvertFromUtf32, including surrogate pair handling.
Another GitExtensions file history issue
Reports and proposes a fix for another file history bug in GitExtensions.
git core bug
Announcement that a git core pull request fixing ANSI sequences in non-terminal output was accepted upstream.
PowerShell Registry Set-ItemProperty gotchas
Documents undocumented Type parameter behavior in Set-ItemProperty and how to correctly read and write typed registry values.
PowerShell 3 - Attempting to perform the InitializeDefaultDrives operation on the FileSystem provider failed
Fix for a PowerShell 3 startup error caused by disconnected network drives, resolved via a registry key change.
Windows Task Scheduler silently fails
Diagnoses why a Task Scheduler task silently fails when run without a logged-on user due to unavailable mapped network drives.
NUnit issue
Bug report for NUnit console failing when error messages contain invalid XML characters such as null bytes.
git core and GitExtensions bugs
Summary of bug fixes and pull requests contributed to git core and GitExtensions for ANSI sequences and file history issues.
The best debugging technique - inverse breakpoint
Using Debugger.Launch and Debugger.Break in C# code to attach a debugger to hard-to-reach processes like Visual Studio plugins.
Task Scheduler Event IDs
Reference table of Windows Task Scheduler event log IDs and their corresponding task lifecycle categories.
C__PowerShell Clipboard Watcher
Implements a clipboard change watcher in PowerShell using inline C# with P/Invoke and WinForms WM_CLIPBOARDUPDATE.
PowerShell scripts and "Pattern Main"
Pattern for structuring PowerShell scripts with a Main function so core logic appears at the top before helper functions.
Efficient Base64 conversion in PowerShell
Chunk-based Base64 file conversion in PowerShell that avoids loading the entire file into memory for large files.
How to reach unreachable or copy files to RDP - Part 2
Follow-up on clipboard-based RDP file transfer, describing clipboard hang issues and a planned chunked clipboard watcher solution.
PowerShell Resolve-Path Safe
How to resolve paths for non-existent files in PowerShell using GetUnresolvedProviderPathFromPSPath instead of Resolve-Path.
Name collisions, PSBase and other mad PowerShell internals
Explores PowerShell name collisions between XML attributes and .NET properties, and how PSBase and PSObject.Members resolve them.
PowerShell and cd..
Explains how PowerShell handles the cd.. command via a built-in function rather than special-casing the syntax.
Set-StrictMode and legacy code issues
How Set-StrictMode interacts with legacy PowerShell scripts and safe workarounds for missing variables and properties.
Sublime Text missing feature - pin tab
Feature request for Sublime Text to support pinning tabs to prevent accidental closure during file search.
Git Extensions from console - UPD
How to launch Git Extensions from the console using a git alias, including a fix to avoid blocking the terminal.
How to reach unreachable or copy files to RDP
Technique for transferring binary files to an RDP server with no drive sharing by encoding them as Base64 via the clipboard.
where.exe PowerShell alternative
How to use Get-Command as a PowerShell native alternative to the where.exe utility for locating executables.
Kill Bill _W conhost
PowerShell script to kill all orphaned conhost.exe processes while preserving the one attached to the current session.
git hook proxy
Final implementation of a PowerShell git hook proxy that extracts and runs hooks from the repo for both client and server sides.
git - fight with pull merges
How to eliminate pull-merge commits using pull --rebase, autosetuprebase, --preserve-merges, and rerere.
git undo
How to undo a git pull --rebase or other destructive git operations using git reflog and reset.
git checkout on bare repo
How to extract files and folders from a bare git repository using git archive, avoiding encoding and binary issues.
git server-side hooks - maintenance
Pattern for self-updating git server-side hooks: a proxy script checks out hook code directly from the repository on each run.
Detect Console mode vs UI
Reliable PowerShell technique to detect whether a git hook runs in a console or a GUI environment like Git Extensions.
Get TeamCity build status from PowerShell
PowerShell function to query TeamCity REST API and detect broken builds, including currently running ones.
Git - Get Push Date
How to record and retrieve the actual push date for git commits using git notes and server-side post-receive hooks.
Interesting git helpers snippets
PowerShell git helper snippets: get current branch, resolve refs, test fast-forward, find commit's originating branch.
Parse git merge commit messages
PowerShell function with regex patterns to parse git's auto-generated merge commit messages and extract branch names.
Useful git hooks - Part 4
Summary of an expanded git hooks suite enforcing branch merge order, rebase safety, TeamCity build status, and push timing rules.
WTF_ PowerShell 3 _ Cygwin
PowerShell -Version 2 flag is ignored when launched from Cygwin, always running PowerShell 3 instead.
PowerShell 3 bug with stack trace
PowerShell 3 shows incorrect line numbers in stack traces when CmdletBinding and ErrorActionPreference are combined; trap workaround included.
PowerShell $PSScriptRoot vs dot-sourcing
Bug in PowerShell 2 where dot-sourcing overwrites $PSScriptRoot; workaround using a function instead of a variable.
Useful git hooks - Part 3
Completion of the git hooks suite with functional tests using PoshUnit and UI Automation PowerShell Extensions.
PowerShell script best practices
Best practices for PowerShell scripts: error handling preamble, strict mode, PSScriptRoot, and readability rules.
WTF Method overloads resolution in PowerShell
PowerShell resolves .NET method overloads differently from C#, causing unexpected method calls with bool arguments.
Indent styles holy wars
Discussion of Allman vs K&R brace styles across C#, JavaScript, CSS, and PowerShell.
PoshUnit
Announcement of PoshUnit, a new portable PowerShell unit testing framework inspired by NUnit.
PowerShell 2 and .NET Framework 4
How to configure PowerShell 2 to use .NET Framework 4 CLR via registry or config files.
PowerShell unit testing
Comparison of PowerShell unit testing frameworks: Pester, PsUnit, and PsTest.
Good WordPress free theme_
Request for a wide, code-friendly free WordPress theme with automatic post excerpts.
Useful git hooks - Part 2
Adds a commit-msg hook that enforces TFS work item ID prefixes on all commit messages.
MarkdownPad - very nice Markdown editor
Brief introduction to MarkdownPad, a WYSIWYG Markdown editor for Windows.
PowerShell Set-PSBreakpoint bug in PowerShell 3_
Bug report: Set-PSBreakpoint breakpoints are not hit when the script runs in a new PowerShell 3 process.
Remote debugging over TeamViewer
Step-by-step guide to setting up Visual Studio remote debugging over a TeamViewer VPN connection.
Useful git hooks
Introduction to a git hooks repository that prevents ugly pull-merge commits from cluttering git history.
obj.ToString(), nulls and ReSharper
ReSharper incorrectly marks ToString() as non-nullable, but BCL types like HtmlString can return null.
PowerShell Cmdlets sources
Script to open any PowerShell cmdlet's source code directly in .NET Reflector for inspection.
Pluralsight - The best screencasts
Brief recommendation of Pluralsight as a professional screencast platform covering a wide range of technologies.
WCF _ useless ProtocolException
WCF ProtocolException truncates the server error response; an extension method on WebException extracts the full response body.
T4 Assembly references for Design-time templates
Common patterns for referencing assemblies in T4 design-time templates using GAC paths, absolute paths, and MSBuild variables.
T4 Design-Time templates base class
How to create a shared custom base class for T4 design-time templates by extending TextTransformation, with a working example.
T4 Runtime Template and code-behind logic
How to add a code-behind partial class to a T4 runtime template by manually editing the csproj file, with a Visual Studio add-in.
T4 Templates and Null in Expression block
T4 templates throw ArgumentNullException on null expression blocks; fix by overriding ToStringWithCulture in the base class.
Useful Dictionary extensions I am always using
Two reusable C# IDictionary extension methods: GetValueOrDefault and GetOrAddValue with a factory function.
Annoying advertisement banners in my blog
A JavaScript one-liner to hide WordPress advertisement banners in the browser, alongside recommending Adblock.
[PowerShell] Built-in support for -Debug and -Verbose for your scripts
How to enable PowerShell common parameters -Debug and -Verbose in custom scripts using CmdletBinding and DebugPreference.
T4 Runtime Templates Base Class
Demonstrates extracting T4 runtime template auto-generated base class into a shared reusable C# base class for all templates.
T4 Syntax
Overview of T4 template syntax including directives, text blocks, control blocks, expression blocks, and class feature blocks.
Developing Custom Tool (aka Single File Generators) for Visual Studio 2012
Step-by-step guide to creating and registering a COM-visible Single File Generator custom tool for Visual Studio 2012.
[WTF] Visual Studio 2012 not supporting MSI Setup project (.vdproj)
Visual Studio 2012 dropped .vdproj MSI setup project support; workaround options include WiX and InstallShield Limited Edition.
T4 blog section
Introduction to the T4 (Text Template Transformation Toolkit) blog series covering code generation in Visual Studio.
T4 Syntax highlighting and IntelliSense
Third-party Visual Studio extensions for T4 syntax highlighting and IntelliSense, with a note on Visual Studio 2012 gaps.
WTF Generic attributes in C_
C# CLR limitation prevents generic types from deriving from Attribute, causing a CS0698 compile error.
git - change date of commit
PowerShell snippet to change the author and committer date of an existing git commit using GIT_COMMITTER_DATE and --amend.
Sublime Text - The best text editor ever
Introduction to Sublime Text as a developer-friendly editor, with tips on Package Control and PowerShell syntax highlighting.
Spoon.net - Combining the best of the desktop and the cloud
Overview of Spoon.net, a cloud service for running virtualized desktop applications including cross-browser testing.
Swype - Amazing keyboard for Android
Brief recommendation of the Swype swipe-based keyboard app for Android for faster typing.
Guide how to easy screw up your git repository
A real incident where a wrong-branch git reset --hard corrupted a release branch, with recovery steps for the team.
PowerShell + XAML => GUI
How to build a WPF GUI window in PowerShell using XAML, with a note on the STA threading requirement for PowerShell 2.
PowerShell Get-Content vs _System.IO.File___ReadAllText
Difference between Get-Content (returns array of lines) and ReadAllText (returns full string), with alternatives for both PowerShell versions.
WTF Exception.ToString() and FaultException
FaultException inner details are silently dropped by Exception.ToString(); an extension method restores the full fault message.
posh-git _ WARNING_ Could not find ssh-agent
How to suppress the posh-git ssh-agent warning by commenting out Start-SshAgent in the profile script.
PowerShell Sort-Object and Hashtables
Explains why Sort-Object -Property fails on PowerShell hashtables and how to sort them correctly using a script block.
Copy PowerShell command into clipboard
One-liner to copy the last executed PowerShell command to the clipboard using Get-History and clip.
Dropbox and Symbolic Links
Explains how to sync arbitrary folders with Dropbox by creating symbolic links using Link Shell Extension.
Git and typos
Shows how to enable git help.autocorrect to automatically fix and run mistyped git commands.
Git Extensions from console
How to launch Git Extensions GUI from the command line on Windows by creating a custom git alias script.
PowerShell _ Git = posh-git
Installing and configuring posh-git for PowerShell tab completion with Git, including a fix for slow prompt performance.
PsGet - NuGet for PowerShell
Introduction to PsGet, a package manager for PowerShell modules installable with a one-liner.
Batch files substitutions
Reference for batch file FOR variable substitution modifiers like %~f, %~d, %~p to extract path components.
Use laptop as a Wi-Fi router
Guide to turning a Windows laptop into a Wi-Fi hotspot using netsh hosted network commands, with a Windows 8 driver fix.
PowerShell and Visual Studio tools
PowerShell script to import Visual Studio command prompt environment variables (vcvarsall.bat) into a PowerShell session.
Git _ Devart CodeCompare integration
Configuration for using Devart CodeCompare as the diff and merge tool for Git via .gitconfig entries.
Repeat Debugger.Launch() in PowerShell
Shows how to set a named breakpoint in PowerShell profile using Set-PSBreakPoint so scripts can trigger the debugger inline.
Firebug Lite 1.4 fails in IE7
Describes a critical bug in Firebug Lite 1.4 on IE7 and provides a bookmarklet to use the stable 1.3 version instead.
How to add script to PowerShell 'startup'_
Explains how to use a PowerShell profile script to automatically run commands on every PowerShell session start.
IE6 testing
Options for testing in IE6 on modern Windows, including VirtualBox with Windows XP, IETester, DebugBar, and BrowserStack.
IE7 and browser resize issues
Documents IE7 positioning bugs triggered by browser resize and provides a CSS fix using position: relative on body.
sudo in PowerShell
PowerShell function and alias that elevates a process with admin rights, mimicking Unix sudo behavior.
MSBuild and .sln files
Explains how to make MSBuild emit the intermediate .metaproj file when building a .sln solution by setting msbuildemitsolution=1.
Debug minified_obfuscated javascript
Shows how to pretty-print and debug minified or obfuscated JavaScript in IE9+, Chrome 13+, and Firefox using built-in or plugin tools.
where.exe
Demonstrates using where.exe to find the full filesystem path of an executable resolved from PATH.
Execute PowerShell command from batch file
Shows the syntax for running a PowerShell command from a .cmd batch file, including how to escape quotes.
FireBug DOM inspection
Highlights Firebug's $0 and $1 command-line variables for referencing recently inspected DOM elements.
PowerShell Add directory to Environment PATH variable
PowerShell script to append a directory to the system PATH and broadcast the change to running processes without rebooting.
mnaoumov.NET now on WordPress!
Announcement post about migrating the blog from Blogspot to WordPress.
How to take screenshots from your Android devices
Explains how to take a screenshot on Android 4 ICS by pressing Power and Volume Down simultaneously.
The proper way to use Syntax Highlighter with Blogger
Step-by-step guide to integrating SyntaxHighlighter 3 with Blogger using jQuery autoLoader to support all languages.
About me
Author introduction: Michael Naumov, Senior .NET Developer at Readify, Australia, working with .NET, PowerShell, and JavaScript.
How to check current PowerShell version
Shows how to check the current PowerShell version using the $Host.Version variable.
Debugger.Launch() analogue for PowerShell
Links to an article about invoking the PowerShell debugger programmatically, analogous to Debugger.Launch() in .NET.
Nullable types, lifted operators and ReSharper
Explains C# lifted operators with nullable types and a ReSharper false-positive bug when assigning nullable int to a class with implicit operator.
Test SyntaxHighlight
Test post confirming SyntaxHighlighter integration works on Blogger with a C# code sample.
BugAid - cool plugin for VisualStudio
Brief mention of BugAid, a Visual Studio plugin for enhanced debugging features.
Firefox и картинки в ссылках
Firefox unexpectedly underlines images inside anchor tags on hover; CSS workaround using div wrapper and text-decoration overrides.
Поисковая система для иконок
Introduces findicons.com, a search service for finding icons by topic and tags.