The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,861 other subscribers

Archive for February, 2016

Some links and references to IBM CUA: Common User Access which defines a lot of the UIs and UX we still use.

Posted by jpluimers on 2016/02/04

Back in the late 80s and early 90s of last century, engineers Richard E. Berry, Cliff J. Reeves set a standard that still influences the user interfaces and user experience of today: the IBM Common User Access.

I mentioned CUA a few times before, but since an old client of mine managed to throw away their paper originals in a “we don’t need that old stuff any more as we are now all digital” frenzy, I wanted to locate some PDFs. And I promised to write more about CUA.

If anyone has printed versions of the non-PDF documents below, please donate them to aek at bitsavers.org or scanning at archive.org as they are really hard to get.

A few search queries I used:

The PDFs I think are most interesting:

Read the rest of this entry »

Posted in BitSavers.org, Development, History, IBM SAA CUA, Keyboards and Keyboard Shortcuts, Power User, Software Development, UI Design, Usability, User Experience (ux) | 3 Comments »

gabriel peery on Twitter: “@HenryHoffman I guess we could say that this is #GITarHeroMasterMode https://t.co/XE7NdpI3NM”

Posted by jpluimers on 2016/02/03

https://twitter.com/GabrielPeery/status/694293763426914305

Posted in Uncategorized | Leave a Comment »

Windows Vista/7/8/… hangs for Windows Common dialogs when your COM initialisation is wrong

Posted by jpluimers on 2016/02/03

A while ago I bumped into this: As of Windows 7 (and probably Vista), the standard Windows Common Item (Open and Save) Dialogs expect the main thread to be initialised with STA because it is easier to support apartment threading in single-threaded apartments because COM provides synchronization on a per-call basis and the Windows GUI APIs are not guaranteed to be thread safe.

Windows XP and Server 2003 didn’t enforce this for the classic Windows Open and Save Dialogs, so it only appeared when the software below got run on Windows 7 in a way too late time frame (but the market share of XP is still high).

The reason is that when using Delphi, the TOpenDialog and TSaveDialog will use the classic Open and Save Dialogs on Windows < Vista and fall-forward to the new Common Item Dialogs handled by TFileOpenDialog and TFileSaveDialog (both will not fall backward).

When you have your COM initialisation done wrong, your application appears to hang. Amidst the plethora of threads started by the COM subsystem, these two dead-lock:

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Delphi 2007, Delphi 2009, Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »

Get the full exe path name of running processes.

Posted by jpluimers on 2016/02/03

Every once in a while, I need to see which EXE paths.

In [Wayback/Archive] this particular case, I wanted to see which [Wayback/ArchiveSpring.Tests unit tests instances of [Wayback/ArchiveSpring4D were running.

This case I needed to see which DevEnv were running (because somehow I got my .csproj bindings wrong).

Since [Wayback/Archivetasklist nor [Wayback/Archivepslist would cut it, I wrote two small batch files:

[Wayback/Archive] :

[Wayback/Archive] :

@echo off
:: http://superuser.com/questions/768984/show-exe-path-of-running-processes-on-the-command-line-in-windows
  if [%1] == [] goto :help
  PowerShell Get-Process %* ^| Format-List Path
goto :eof
:help
  echo Syntax:
  echo   %0 ProcessName
  echo Shows the full EXE paths of any running process with the ProcessName name.
  echo Example:
  echo   %0 DevEnv
  echo Shows the paths of running Visual Studio processes

PowerShell to the rescue here: Both batch files use the PowerShell [Wayback/ArchiveGet-Process cmdlet.

First I used [Wayback/ArchiveGet-Member to see what Get-Process could return:

PowerShell Get-Process ^| Get-Member

Then I [Wayback/Archivefiltered the Path from Get-Process to figure out which Spring.Tests processes were running:

PowerShell Get-Process Spring.Tests ^| Format-List Path

resulting in:

Path : C:\Users\Developer\Versioned\Spring4D\Tests\Bin\DelphiXE\Spring.Tests.exe

The second batch file escapes the pipe (|) by using a carret (^), so it is passed from the command-line to PowerShell.

–jeroen

Posted in CommandLine, Development, PowerShell, Software Development | 2 Comments »

It Was Never Going to Work, So Let’s Have Some Tea on Vimeo

Posted by jpluimers on 2016/02/03

Posted in Uncategorized | Leave a Comment »

ElectriFly | SafeCharge LiPo Battery Charge Bag

Posted by jpluimers on 2016/02/02

http://www.electrifly.com/miscproducts/gpmp0751.html

Posted in Uncategorized | Leave a Comment »

I don’t care about cookies

Posted by jpluimers on 2016/02/02

https://chrome.google.com/webstore/detail/i-dont-care-about-cookies/fihnjjcciajhdojfnbdddfaoknhalnja

Posted in Uncategorized | Leave a Comment »

Windows: removing file and directory reparse points (symbolic links, directory links, junctions, hard links)

Posted by jpluimers on 2016/02/02

The interwebs is full of posts telling about how to create file and directory junctions**.

But there is little information about removing them and even less being correct: some suggest to del a directory junction (which just deletes everything in it but the junction).

Finally there is little information about listing all junctions, so lets start with that:

Deleting a link depends on the kind of link, not the kind of source.

Since symlink and hardlinks are for files, and directory symlink and junctions are for directories, this is how:

  • Delete a file symlink or hardlink by using DEL.
  • Delete a directory symlink or junction using RMDIR.

SysInternals – I wrote about them before – has a great junction tool. It can be used to create, delete and (optionally recursively) list reparse points. All usages allow for file and directory junctions.

More about reparse points

This is about the **: actually they are reparse points; for files they are symlinks, for directories mostly junctions, but sometimes symlinks.

And actually the reason I wrote this blog post. As you also have hardlinks. Some combinations of files and directories with these kinds of links fail.

Lets first go to see what kind of links there are on a fresh Windows system.

This is the only directory symlink: C:\Users\All Users and junction will show it like this:

.\\?\C:\\Users\All Users: SYMBOLIC LINK
   Print Name     : C:\ProgramData
   Substitute Name: \??\C:\ProgramData

It is unlike this directory junction C:\Users\Default User which junction will show as this:

\\?\C:\\Users\Default User: JUNCTION
   Print Name     : C:\Users\Default
   Substitute Name: C:\Users\Default

Together with C:\Users\Default and C:\Users\desktop.ini they are hidden, so you need the /AH flag to show them using DIR (as a gist, since WordPress still screws up less than and greater than):


Directory of C:\Users
08/22/2013 04:45 PM <SYMLINKD> All Users [C:\ProgramData]
09/30/2013 06:27 AM <DIR> Default
08/22/2013 04:45 PM <JUNCTION> Default User [C:\Users\Default]
08/22/2013 05:34 PM 174 desktop.ini

When you look at the examples below, it is odd to see that C:\Users\All Users is a SYMLINK and not a SYMLINKD as it points to a directory.

And yes, there are not so and very subtle differences between SYMLINKD and JUNCTION.

Lets show some examples.

The examples are hopefully more complete than the complete guide.

Since symlinks are client side created and not verified until use, you can actually use mklink to create both file and directory symbolic links for a file. DIR shows them as SYMLINK or SYMLINKD.

A SYMLINK to a file actually works, but a SYMLINKD or JUNCTION to a file gives you an Access Denied error. Hardlinks get the attributes of the source (so delete hidden hardlinks using the DEL /AH option).

Example batch file:

Example output:

When you try this for directories, you are in for a few small surprises.

A SYMLINK to a directory neither works as file nor as directory. A SYMLINKD or JUNCTION to a directory works. Hardlinks don’t work for directories with reason: limit the risk of cycles.

Example batch file:

Example output:

Conclusion

  • symlink and hardlink can be used as files, but not as directories.
  • files referenced through symlinkd and junction behave as empty directories.
  • symlinkd and junction can be used as directories, but not as files.
  • directories referenced as symlink are not usable.
  • directories cannot function as hardlink source.
  • hardlinks to files inherited their attributes.

–jeroen

Posted in Batch-Files, Development, Scripting, Software Development | 2 Comments »

Short Date Format Fix For Google Calendar™ – Chrome Web Store: from mm/dd to dd/mm.

Posted by jpluimers on 2016/02/01

You can set the long date format in Google Calendar, but not the short date format. This plugin does:

Changes the short date format in Google Calendar from [month]/[day] to [day]/[month] or the other way around.

It fixes this long standing bug: formatting – How do I change date format at top of day in Google Calendar? – Web Applications Stack Exchange which was reported in at least these places:

Source: Short Date Format Fix For Google Calendar™ – Chrome Web Store

–jeroen

Posted in Google, GoogleCalendar, Power User | Leave a Comment »

VPN over HTTPS: Ultimate Powerful VPN Connectivity – SoftEther VPN Project

Posted by jpluimers on 2016/02/01

This is cool, as it allows to run VPN over HTTPS or even over ICMP or DNS. Impressive: 1. Ultimate Powerful VPN Connectivity – SoftEther VPN Project.

Equally impressive is the range of operating systems covered:

  • Windows (98 until Server 20012 with x86 and x64 implementations).
  • Linux Kernels 2.4, 2.6 and 3.x on Intel x86, x64, ARM, MIPS and PowerPC platforms.
  • FreeBSD 5.x, 6.x, 7.x, 8.x and 9.x are supported on Intel x86 and x64 platforms.
  • Solaris 8, 9, 10 and 11 on Intel x86, Intel x64, SPARC (both 32 bit and 64 bit) platforms.
  • Mac OS X 10.4, 10.5, 10.6, 10.7 and 10.8 on Intel x86, Intel x64, PowerPC (32 bit) and PowerPC G5 (64 bit) platforms.

–jeroen

Posted in Network-and-equipment, Power User, VPN | Leave a Comment »