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

Delphi Build Groups: building all the Configuration/Target permutations of projects in your project group from inside the IDE

Posted by jpluimers on 2018/08/14

An automated build system for your Delphi applications is gold, and straightforward to setup using the Delphi support for msbuild.

Sometimes however, it is convenient to build any or all Configuration/Target permutations of all your projects from inside the Delphi IDE.

This has been possible since Delphi XE introduced the [Archive.is] Build Groups – RAD Studio XE. It is a really nifty feature which you can activate by clicking on the “people” icon in the project manager: .

Uwe Raabe has witten an excellent blog post on this a few years ago: [WayBack] Do you know Build Groups? | The Art of Delphi Programming

Since you can add multiple Build Groups, you can select which one contains what Configuration/Target permutations of any number of projects.

This for instance allows you to:

  • build all your server projects at once
  • only build debug versions of all projects

The Build Groups settings are saved as part of your groupproj settings and are a pretty stable feature.

Two extra tips:

–jeroen

Related:

Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »

bash: generating random passwords on Mac OS X / MacOS or what Apple calls their operating system by now

Posted by jpluimers on 2018/08/14

After some fiddling, I put this function in ~/bash_profile on my MacBook:

# https://www.cyberciti.biz/tips/linux-unix-bsd-openssh-server-best-practices.html
# pass # digits as first argument; defaults to 20
generate_password() {
  local l=$1
  [ "$l" == "" ] && l=20
  env LC_CTYPE=C LC_ALL=C tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

The fiddling was working around this error:

tr: Illegal byte sequence

The cause is that Mac OS is not Linux, where tr happily accepts any byte sequence from /dev/urandom: it requires the C locale.

Originally, I started with the below function from [WayBackTop 20 OpenSSH Server Best Security Practices – nixCraft (thanks +Joe C Hecht) which I undid from mixed tab/spaces:

genpasswd() {
  local l=$1
  [ "$l" == "" ] && l=20
  tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

Via: [WayBackJoe C. Hecht – Google+ who mentions:

I might add that if you do move the SSH port, try to keep it in within the first 1024 ports for a tad bit more protection on some systems.

Background reading on Apple hating binary input:

Background reading on the language setting:

–jeroen

Posted in bash, Development, Scripting, Software Development | 2 Comments »

Optimized Pascal compilation time | Fredrik Haglund’s blog

Posted by jpluimers on 2018/08/14

Long uses lists especially of units circularly referencing each other are killing for compiler performance both in CPU and memory consumption.

To solve it:

Ingredients

  • ICARUS – a free tool from the maker of Pascal Analyzer. [WayBackhttp://www.peganza.com/products.htm. Icarus parses Delphi or Borland Pascal source code and generates a Uses Report. This report will help you remove unneeded units from your uses lists. You will also know which units that can be moved from the interface uses list to the implementation uses list.
  • Uses Cleanup Tool – by Oleg Zhukov [WayBackhttp://cc.borland.com/Item.aspx?id=23199.

Step-by-step

  1. Run ICARUS on your delphi project to get a report of which units depends on each other.
  2. Input this report in the Uses Cleanup tool to automatically update all uses-clauses in your source code.
  3. Delete all DCU-files and recompile.

Source: [WayBackOptimized Pascal compilation time | Fredrik Haglund’s blog

Edit

Bit-rot galore!: Since Fredrik published his article, some links have vanished, so they are invalid in the above quote as well:

Uwe Raabe was the first to notice on [WayBack] G+ Long uses lists especially of units circularly referencing each other are killing for compiler performance both in CPU and memory consumption… – Jeroen Wiert Pluimers – Google+ that the Uses Cleanup Tool by Oleg Zhukov can now be downloaded from [WayBackFiles as [WayBackUsesCleanupceaf.zip.

Several people suggest using cnPack in the above G+ thread, but [WayBacktheir Delphi parser is far behind [WayBack] Delphi AST.

Cleaning uses lists is a tough thing, it very much depends in getting the dependencies really right, then interpreting them correctly.

–jeroen

Posted in Delphi, Development, Software Development | 7 Comments »

Hack The Box :: Penetration Testing Labs

Posted by jpluimers on 2018/08/13

Cool playground:

An online platform to test and advance your skills in penetration testing and cyber security.

Source: Hack The Box :: Penetration Testing Labs

Via [WayBack] hackthebox – Penetration testing labs This is an amazing platform – super addictive! Hack The Box is an online platform al… – Jürgen Christoffel – Google+

–jeroen

Posted in LifeHacker, Power User, Security | Leave a Comment »

Canon MF8200C default password…

Posted by jpluimers on 2018/08/13

I needed to figure out what was wrong with a Canon MF8200C UFRII LT XPS.

Luckily, this still worked for administrator access [WayBackDefault admin password for Canon Multifunction Printers:

Put in admin id 7654321 pw 7654321

–jeroen

Posted in Power User, Printer drivers, Windows | Leave a Comment »

Not just the Agile Manifesto – there is also one on Craftsmanship

Posted by jpluimers on 2018/08/13

Today it’s 17.5 years ago the gathering leading up to the Agile Manifesto ended.

It’s a great description on the way you want to develop software:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

I found out that I’ve been trying to that for my whole career – even before I knew about the Agile Manifesto – despite my actual nature being a bit on the autistic side that makes the “human” thing a bit harder for me, but not impossible.

In my day to day work, I try to encourage people to develop in the same way and to also broaden their perspective.

So while writing this, I remembered that doing so (both developing and encouraging) isn’t always easy and requires a lot of craftsmanship. This then reminded me of another manifesto I had seen a while ago, but had forgotten about.

After some digging, I found it back: the “Manifesto for Software Craftsmanship” from 2009 which is subtitled “Raising the bar”

Later I even found back who referred me to it: [WayBack] Great companion to the Agile ManifestoManifesto for Software Craftsmanship – Marjan Venema – Google+

I like it because it defines Craftsmanship as an enhancement of Agile by going a level deeper on all the points of the Agile Manifesto:

  • Not only working software,
    but also well-crafted software
  • Not only responding to change,
    but also steadily adding value
  • Not only individuals and interactions,
    but also a community of professionals
  • Not only customer collaboration,
    but also productive partnerships

–jeroen

References:

Posted in Agile, Development, Software Development | Leave a Comment »

Boot CDs (bootable from USB stick as well) for aiding PC recovery

Posted by jpluimers on 2018/08/10

  • Windows PE 10 x64 based: [WayBack] Hiren’s BootCD PE Hiren’s BootCD PE (Preinstallation Environment) is an emergency boot disk based on Windows 10 PE x64. It is being developed for the new age computers, it supports UEFI booting and requires minimum 2 GB RAM.After boot, it finds and installs many common drivers like graphics, sound, wireless and ethernet card for your hardware. So that you can connect to a WIFI or Ethernet network.
  •  Syslinux/Grub4dos/FreeDOS based: [WayBack] Ultimate Boot CD – Overview

–jeroen

Via:

Posted in Power User, Windows | Leave a Comment »

VLOOKUP Example Spreadsheet & Tutorial | Productivity Portfolio

Posted by jpluimers on 2018/08/10

Because I tend to forget how to use this:

Excel VLOOKUP tutorial with an example spreadsheet & video. The article shows how to lookup the values from one column to use in another worksheet column.

Source: [Archive.isVLOOKUP Example Spreadsheet & Tutorial | Productivity Portfolio

–jeroen

Read the rest of this entry »

Posted in Excel, Office, Power User | Leave a Comment »

How to tell if your site is served via CloudFlare | Igor’s Blog

Posted by jpluimers on 2018/08/10

Based on [Wayback/Archive.isHow to tell if your site is served via CloudFlare | Igor’s Blog, I’ve changed the script a little bit.

I’ve tested it with one of the domains from the Cloudbleed list (a pretty OK indication the site is using cloudflare) and a the example.org site that does not:

# curl -sI https://feedly.com | grep "Server\|__cfduid\|CF-RAY"
Set-Cookie: __cfduid=d779ee6e244349cf06e2707771a9185e21492589239; expires=Thu, 19-Apr-18 08:07:19 GMT; path=/; domain=.feedly.com; HttpOnly
Server: cloudflare-nginx
CF-RAY: 351e5e9af8971497-AMS
# curl -sI https://example.org | grep "Server\|__cfduid\|CF-RAY"
Server: ECS (ewr/15BD)

Domain Source: [Wayback/Archive] pirate/sites-using-cloudflare: Archived list of domains using Cloudflare DNS at the time of the CloudBleed announcement

–jeroen

via: [WayBack] https://www.igorkromin.net/index.php/2017/04/18/how-to-tell-if-your-site-is-served-via-cloudflare/ – Joe C. Hecht – Google+

 

Posted in *nix, *nix-tools, Cloud, Cloudflare, cURL, Hosting, Infrastructure, Power User | Leave a Comment »

Why Skylake CPUs Are Sometimes 50% Slower – How Intel Has Broken Existing Code – Alois Kraus

Posted by jpluimers on 2018/08/09

[WayBack] Why Skylake CPUs Are Sometimes 50% Slower – How Intel Has Broken Existing Code – Alois Kraus reports that the PAUSE instruction on Intel Skylake architecture takes an order of magnitude longer than on previous architectures.

This impacts spinlock code in .NET 4.x and .NET Core 2, and likely impacts other spinlock code as well. The .NET core fix gets back-ported to .NET 4.x.

Since Delphi XE, the Delphi RTL code has borrowed ideas from .NET implementing this kind of code, so I filed [WayBack] QualityCentral: 144063 PAUSE instruction on Intel Skylake takes order of magnitude longer: important for SpinWait/SpinLock code (because Google can index it).

It is no coincidence that a Senior Scaleability Engineer at Booking.com mentioned it on his G+ stream ([WayBack] The “Pause” instruction changed timing dramatically in Skylake. Spinlock implementation based on pause will need adjustments. – Kristian Köhntopp – Google+) as changes like this can heavily impact server systems.

–jeroen

via: [WayBack] The “Pause” instruction changed timing dramatically in Skylake. Spinlock implementation based on pause will need adjustments.I hope a fix for this will be back-ported for many Delphi versions. – Jeroen Wiert Pluimers – Google+

Posted in .NET, .NET 4.0, Delphi, Development, Software Development | Leave a Comment »