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,839 other subscribers

Archive for the ‘Development’ Category

Programmers’ hardest tasks

Posted by jpluimers on 2015/08/25

It took me a while to find the original illustration (especially as it was copied so often in low quality), but below it is.

Martin Wienold made a great joke based on it last year:

There are only two hard problems

  1. naming things
  2. cache invalidation
  3. off-by-one errors

–jeroen

via: G+; Programmers’ hardest tasks.

Original (October 2013): Don’t go into programming if you don’t have a good thesaurus | ITworld.

Programmer's Hardest Tasks

Programmer’s Hardest Tasks

 

Posted in Development, Software Development | Leave a Comment »

Was ist Cloud? Great presentation including transcript by Kristian Köhntopp.

Posted by jpluimers on 2015/08/23

When one of my DevOps friends asks: Was ist Cloud?.

Kristian Köhntopp even published it as a SlideShare deck with transcript: Was ist Cloud?.

There is even a video: Froscon “Was ist Cloud?” – Video.

Thanks a million, Kris, this is very much worth reading for anybody doing Ops, Dev or DevOps.

There is even a

If you can’t read German: tough luck (;

–jeroen

Read the rest of this entry »

Posted in Cloud, Development, Firewall, Infrastructure, Software Development | Leave a Comment »

GoF Patterns in Delphi | Implementations of the famous Gang of Four Design Patterns in Delphi language – via Nick Hodges

Posted by jpluimers on 2015/08/20

Thanks to Nick Hodges for having Delphi-losophy | Flotsam and Jetsam #88 point me to GoF Patterns in Delphi | Implementations of the famous Gang of Four Design Patterns in Delphi language.

–jeroen

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

Installing FireDAC 8 for Delpi 2007

Posted by jpluimers on 2015/08/19

Installing FireDAC 8 for Delpi 2007

Installation

  1. Obtain 29458_firedac_xe4_update_2_for_rad_studio_delphi_c_ent_ult_arch.zip from a registered Delphi XE4 or higher license: http://cc.embarcadero.com/item/29458:
  2. Extract it into FireDAC_8.0.5.3365.exe.
  3. Run FireDAC_8.0.5.3365.exe with the /showide parameter as described in http://support.embarcadero.com/article/42970:
  4. FireDAC_8.0.5.3365.exe /showide
    1. (When not running as Administrator: elevate to Administrator)
    2. Welcome screen: press next
    3. License screen: accept, then press next
    4. Destination selection screen: keep C:\Program Files (x86)\Embarcadero\FireDAC, then press next
    5. Select components screen: keep the selection (Full installation), then press next
    6. Select IDEs screen: choose Delphi 2007 (but not Delphi 2006), then press next
    7. Select Demo Databases screen: keep the settings (do not choose Interbase / Firebird server as then you have to provide the credentials for the server), then press next
    8. Start menu screen: keep Embarcadero FireDAC, then press next
    9. Ready to install screen: press install
    10. After installation: press finish, then read the readme
      1. or later browse to <file:///C:/Program%20Files%20(x86)/Embarcadero/FireDAC/Readme.html>
      2. That’s what actually tells you:

The installer automatically installs FireDAC in the Delphi XE4 and C++ Builder XE4 IDEs. For older versions of the IDEs, you can run the installer with the /SHOWIDE command line parameter.

After installation

To fix this when starting Delphi:

[Window Title]
Error

[Content]
Can't load package C:\Users\Public\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl.
The specified module could not be found.
Do you want to attempt to load this package the next time a project is loaded?

[Yes] [No]

The actual BPL sometimes is in C:\Users\<username>\AppData\Local\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl

The cause is that the BPL gets loaded from %BDSCOMMONDIR% which on some systems points to

  • %PUBLIC%\Documents\RAD Studio\5.0

and on others points to

  • %LOCALAPPDATA%\Documents\RAD Studio\5.0

This seems to be the case on machines where more different Windows users are using Delphi.

The installer does not fully recognize this distinction, so copies the BPL to %LOCALAPPDATA%\Documents\RAD Studio\5.0\Bpl and registers it as being in %PUBLIC%\Documents\RAD Studio\5.0\Bpl.

On these machines there is a difference between the definition of BDSCOMMONDIR in these registry keys:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
    • points to C:\Users\Public\Documents\RAD Studio\5.0
  • HKEY_CURRENT_USER\Environment
    • points to C:\Users\<username>\AppData\Local\Documents\RAD Studio\5.0

Solution

reg delete "HKCU\Software\Borland\BDS\5.0\Known Packages" /v "%PUBLIC%\Documents\RAD Studio\5.0\Bpl\AnyDAC_Dcl_D11.bpl" /f
reg add "HKCU\Software\Borland\BDS\5.0\Known Packages" /v "%BDSCOMMONDIR%\Bpl\AnyDAC_Dcl_D11.bpl" /t REG_SZ /d "Embarcadero FireDAC Components" /f

–jeroen

via: jeroenp / BeSharp.net / source / Native / Delphi / Documentation / Install-FireDAC-8-in-Delphi-2007.md — Bitbucket.

Posted in Delphi, Delphi 2007, Delphi XE4, Development, Software Development | 4 Comments »

.NET enable and disable Fusion log to investigate assembly loading issues

Posted by jpluimers on 2015/08/18

Had to investigate some Assembly Loading issues, so I wrote two batch files to enable and disable the .NET Fusion Log:


reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 0 /f


reg add "HKLM\Software\Microsoft\Fusion" /v EnableLog /t REG_DWORD /d 1 /f

They modify the HKLM\Software\Microsoft\Fusion key REG_DWORD value EnableLog.

A few notes:

  • It is very important to turn of the Fusion log settings as soon as you are finished investigating. Fusion logs potentially take a lot of resources.
  • When you have a .NET host like ISS, you have to restart that host (for instance by running iisreset)
  • There is also Fuslogvw.exe Assembly Binding Log Viewer, but I like logging over viewing as logs are persistent.
  • There are more values under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion you can configure; see the answer by Gary Kindel on StackOverflow:
    • DWORD ForceLog set value to 1
    • DWORD LogFailures set value to 1
    • DWORD LogResourceBinds set value to 1
    • String LogPath set value to folder for logs e.g. C:\FusionLog\ (ensure the final backslash is there and the folder exists).

–jeroen

via:

Posted in .NET, .NET 1.x, .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, .NET 4.5, C#, C# 1.0, C# 2.0, C# 3.0, C# 4.0, C# 5.0, C# 6 (Roslyn), Development, Software Development | Leave a Comment »

Linking commits to issues and issues to issues on BitBucket (via: Resolve issues automatically when users push code – Bitbucket – Atlassian Documentation)

Posted by jpluimers on 2015/08/13

Besides commit statements from hg or git like this:

hg commit -m “fixes #6, resolve ticket #5 and see ticket #9 and ticket #5 in the tracker”

The best is to start with the command, then finish the comment (commands in the middle of a comment are far less reliable).

There is a whole bunch of commands for which BitBucket tries to understand conjugations of verbs:

Command “Verb” Conjugation(s)
resolve close close
closes
closed
closing
resolve fix
fix
fixed
fixes
fixing
resolve resolve resolve
resolves
resolved
resolving
reopen reopen reopen
reopens
reopening
hold hold hold
holds
holding
wontfix wontfix wontfix
invalid invaldate invalidate
invalidates
invalidated
invalidating

You can also use the word “issue” in the middle to just link to an issue like this syntax:

links to issue #1

Finally, you can refer from issues to change sets using a cset syntax: &lt;&lt;cset 2f2f8d4cae7da0e37a5ffbc81c527cb67cc56015&gt;&gt; where the hex number is from a URL in your commit list (for instance in https://bitbucket.org/jeroenp/fastmm/commits)

Note that linking from changesets to issues often automatically creates a back-link, but that doesn’t always work, and fixing it has very low priority (like many things on BitBucket): Issues getting linked to commits have the wrong link syntax, they show BB-6232 — Bitbucket.

–jeroen

via:

Posted in BitBucket, Development, DVCS - Distributed Version Control, git, Mercurial/Hg, Source Code Management | Leave a Comment »

How to reopen a closed branch in Hg/Mercurial – via: Stack Overflow

Posted by jpluimers on 2015/08/12

Thanks to the answers and comments on stackoverflow, here are my steps to resurrect a closed hg branch:

  1. List all branches (including closed ones)
    • hg branches --closed
  2. Switch to a closed branch
    • hg update my_closed_branch_name
  3. Change anything
    • For instance by adding a tag, as that is considered a versioned and mergeable change)
      • hg tag reopened_my_closed_branch
    • Or making a change to a file, then ommit your changes
      • hg commit -m "I changed a message"

This works because of what Lazy Badger explained in another answer which summarised is:

A commit on top of a closed head effectively opens the head.

Note: if you while experimenting with this, you want to undo your last change before committing, perform this command to revert back one revision:

hg update -C -r .

The answers and comments (thanks Lóránt Pintér for asking the question):

Tim Delaney:

You can just hg update to the closed branch then do another hg commit and it will automatically reopen.The closed flag is just used to filter out closed branches from hg branches and hg heads unless you use the --closed option – it doesn’t prevent you from using the branches.

Francis Upton:

The commit won’t do anything unless there is something to actually commit, so you may need to make a gratuitous change to make it happen.

lorddev:

A tag is sufficient to make it commitable.

–jeroen

via: Is it possible to reopen a closed branch in Mercurial? – Stack Overflow.

Posted in Development, DVCS - Distributed Version Control, Mercurial/Hg, Source Code Management | Leave a Comment »

Fuzzing in addition to Unit Tests – via: David Millington G+

Posted by jpluimers on 2015/08/11

I need to give this link from Jonathan Lange which was shared by David Millington some thought:

Embedded in Academia : How to Fuzz an ADT Implementation.

There they add fuzzers to help testing an ADT: in this case an Abstract Data Type in the form of  a red-black tree.

And then see if it can be added to DUnit and NUnit or MSTest/VSTest in some way.

In the original post by Jonathan Lange, an important remark was made by Eric Castelijn:

… the downside being that having non deterministic tests means having test failures that are hard to repeat

When fuzzing multiple or composite values, the chances that you will hit interesting edge cases semi-reliably will drop dramatically, in my experience

–jeroen

via “This post has two points. First, you should write ADT fuzzers. It is often….

Posted in .NET, .NET 2.0, .NET 3.0, .NET 3.5, .NET 4.0, .NET 4.5, C#, C# 2.0, C# 3.0, C# 4.0, C# 5.0, C# 6 (Roslyn), Delphi, 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 »

HTML Cleaner – (not only) Word to clean HTML

Posted by jpluimers on 2015/08/10

A great on-line way to cleanup html (from for instance style information) before publishing it on your blog: HTML Cleaner – Word to clean HTML.

One of the things is does is Remove inline styles.

Ideal for copy-pasting a quote from a web-site to your HTML editor.

–jeroen

via: www.html-cleaner.com

Posted in Development, HTML, HTML5, Power User, SocialMedia, Software Development, Web Development, WordPress | Leave a Comment »

Translating non-English error messages into English

Posted by jpluimers on 2015/08/06

For a long time, I’ve persuading people to install English versions of their operating systems (especially on server side) at least for some parts of their environment.

The main reason is that searching for English error messages gives you a much bigger chance of finding the cause than non-English ones.

I’m still standing by that recommendation, but life has become a bit easier because of these two sites that offer quite good translations of Windows Error messages in many languages to English:

I like the latter a bit more because of the overview, but the former more because of the catalog.

The way I landed there was because of a search for “Cannot SetData on a frozen OLE data object” which I bumped into for one of my C# .NET projects.

–jeroen

Posted in .NET, C#, Development, Power User, Software Development, Windows, Windows 7, Windows 8, Windows 8.1, Windows 9, Windows Server 2003, Windows Server 2003 R2, Windows Server 2008, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2, Windows Vista | Leave a Comment »