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

Convert List/Enumerable of Enums to CSV – via Stack Overflow

Posted by jpluimers on 2015/09/01

I like simple solutions, thanks vcsjones for answering this:

Perhaps this:

var str = String.Join(", ", SupportedNotificationMethods.Select(s => s.ToString()));

You can read more about the String.Join method at MSDN. Older versions of String.Join don’t have an overload that takes an IEnumerable. In that case just call ToArray() after select.

–jeroen

via: c# – Convert List<Enum> to List – Stack Overflow.

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

Android NDK Beginner’s Guide – Free Learning | PACKT Books

Posted by jpluimers on 2015/08/31

For Delphi and Android developers that want a deeper insight in the NDAK: only free today

https://www.packtpub.com/packt/offers/free-learning

Android NDK Beginner’s Guide

Get deep insight into the Android Native Development Kit for building complex apps. Using this practical step-by-step tutorial, highlighted with comments and tricks, discover how to run C/C++ code embedded in a Java application or in a standalone application. You will create a real native application starting from project creation through to full implementation of native API and the porting of existing third-party libraries. Grab this eBook whilst it’s free today!

–jeroen

Posted in Delphi, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Software Development | 2 Comments »

New Delphi product version: will it be Seattle or 10? It might be both! radstudiodemos/code/…/branches now has RADStudio_Seattle branch, docwiki URLs with Seattle exists and nice YouTube preview image!

Posted by jpluimers on 2015/08/30

Two recent observations: that lead me into thinking Embarcadero is changing the Delphi and RAD Studio version suffix to Seattle.

Thanks to Achim Kalwa for getting that to my attention in Looks like Delphi XE9 will have support for Windows 10 RT: …

It led me to my observation that until now, sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches always had the real product name as banch name.

On 20150817 this branch got added:

http://sourceforge.net/p/radstudiodemos/code/HEAD/tree/branches/RADStudio_Seattle/

Today, Horacio Filho who observed the Seattle part in the new documentation URL http://docwiki.embarcadero.com/Libraries/Seattle/en/Main_page which currently is only accessible only for the groups writer, l10n, RADBeta, ConnectBeta, Employee.

The docwiki URLs historically also use the real product names in the URL.

In fact there is a little trick: removing the product name portion of a docwiki URL usually brings you to the most recent documentation (which might be more up to date and provide more information even for older products). So removing the XE7/ part of http://docwiki.embarcadero.com/Libraries/XE7/en/Main_Page will usually bring you to the most recent documentation http://docwiki.embarcadero.com/Libraries/en/Main_Page.

If they both Seattle URLs still use product names, then the new Delphi version is called Seattle is added.

Read the rest of this entry »

Posted in Delphi, Delphi 10 Seattle, Development, Software Development | 1 Comment »

Excel: get content of a cell given the row and column numbers (ADDRESS, INDIRECT, ROW, COLUMN)

Posted by jpluimers on 2015/08/28

A while ago, I needed to do calculations on partially absolute cell references: for some number of rows, the cells needed to be fixed to the top row of each row group.

For a pure absolute cell reference, you’d prepend a dollar sign to the row or column of a cell. So A1 would become $A1 (to make column A absolute), A$1 (to make row 1 absolute) or $A$1 (to make both column A and row 1 absolute).

There is a nice short cut function key F4 to do this.

Excel does not have a built-in partially absolute cell reference solution.

To solve this, I used these addressing functions: ADDRESSINDIRECTCOLUMNROW.

For all these functions, the ROW and COLUMN numbering starts at 1 (one) not 0 (zero).

The way I solved it was to added the below columns (first the reference:heading, then the formula).

The values in the formulas are for ROW 2 (cells A2..XFD2).

  1. AF: Calculation
    • =IF(D2=”*”;INDIRECT(AG2)&X2;””)
  2. AG: ZLookup
    • =ADDRESS($AH2;COLUMN(Z2))
  3. AH: Row
    • =2+12*TRUNC((ROW()-2)/12)

Column AH

Calculates the fixed row of the row group. There are 12 rows per group. ROW numbers start at 1, and there is one heading row, hence the 2+ and the -2.

Without TRUNC, the ROW result would be rounded (that is the default floating point to integer conversion that Excel uses).

There is no need to reference a specific row when calling ROW: if you leave it out, it will return the number of the current row.

Column AG

returns the address of the calculated ROW (from AH) combined with the

Column AF

Depending on the value of the D column, it calculates the outcome by combining

–jeroen

via:

Posted in Algorithms, Development, Excel, Floating point handling, Office, Office 2003, Office 2007, Office 2010, Office 2013, Power User, Software Development | 2 Comments »

anoymyous type trick: Check if KeyValuePair exists with LINQ’s FirstOrDefault – via Stack Overflow

Posted by jpluimers on 2015/08/27

When you have a Dictionary<TKey, TValue>, then LINQ results will get you a enumerables of KeyValuePair<TKey, TValue>.

Since KeyValuePair is a struct, selecting FirstOrDefault will not get you a null, but a default(KeyValuePair<TKey, TValue>) which is a lot harder to handle than null.

Sometimes, being able to get a null out of FirstOrDefault is very useful, so a bit thank you to Marc Gravell for answering this very neat trick:

If you just care about existence, you could use ContainsValue(0) or Any(p => p.Value == 0) instead? Searching by value is unusual for a Dictionary<,>; if you were searching by key, you could use TryGetValue.

One other approach:

       var record = data.Where(p => p.Value == 1)
            .Select(p => new { Key = p.Key, Value = p.Value })
            .FirstOrDefault();

This returns a class – so will be null if not found.

The trick is this portion:

p => new { Key = p.Key, Value = p.Value }

It introduces an anonymous type with two fields: Key and Value. (Note you can introduce any anonymous type here). Since these are classes, FirstOrDefault will return null if nothing was found.

–jeroen

via:

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

for %n = 1 to 100 step 1 do: windows – Batch script loop – Stack Overflow

Posted by jpluimers on 2015/08/26

Thanks Jon for answering this:

for /l is your friend:

for /l %x in (1, 1, 100) do echo %x

Starts at 1, steps by one, and finishes at 100.

Use two %s if it’s in a batch file

for /l %%x in (1, 1, 100) do echo %%x

–jeroen

via: windows – Batch script loop – Stack Overflow.

Posted in Batch-Files, Development, Scripting, Software Development | Leave a Comment »

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 »