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

Canonical Delphi Singleton Pattern – Stack Overflow

Posted by jpluimers on 2017/11/29

Though I try to refrain from using the singleton pattern when possible (I prefer dependency injection over accessing “globals” that usually tend up to be not so global after all), sometimes I need to.

In C# there has been a canonical singleton pattern implementation by John Skeet for a very long time at [WayBackC# in Depth: Implementing the Singleton Pattern.

I just found out there has been similar implementations in Delphi both in this question (which like many useful questions is marked “closed”, oh the joy of StackOverflow): [WayBack] “Delphi Singleton Pattern – Stack Overflow:

I like both implmentation, but usually take the first as mostly locking has little overhead and sometimes two instances cannot co-exist (though that’s lessened when part of the singleton uses lazy initialisation, for instance from Spring4D).

–jeroen

via: [WayBack] May I please ask for your opinion on the following code:..singleton… – John Kouraklis – Google+

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

tiOPF discussion thread

Posted by jpluimers on 2017/11/29

Sometimes the title of a G+ entry looks not so interesting, but then you read the comments. In this cast it’s about the mediator pattern support in the tiOPF object persistence framework, how it works very well from Free Pascal and both classic and  modern Delphi compilers and why developers dislike ARC. It’s cool as it allows you to decouple UI from business logic and separate out business logic from your application into a back-end. Recommended reading: [WayBack] Hello i have a program that use MS SQL SERVER 2000i want to make a mobile application that connect to this database to make some consultationclient fi… – Mohammed Bouhlal – Google+

–jeroen

Posted in Delphi, Development, FreePascal, Pascal, Software Development | Leave a Comment »

Until 20171201 you can get free access to “Automate the Boring Stuff with Python”? 

Posted by jpluimers on 2017/11/29

A very interesting course: [WayBack] Want to learn how to “Automate the Boring Stuff with Python”? Check out this reddit post by Al Sweigart for free access to his online course on Udemy… – ThisIsWhyICode – Google+

If you get it before 20171201, then you can still access it for free after that date.

If you get it later, then you pay either USD 50, or USD 10; see this reddit fragment:

[WayBack] I’m releasing a free code for the “Automate the Boring Stuff with Python” Udemy course

Use this link to sign up for the “Automate the Boring Stuff with Python” Udemy online course: https://www.udemy.com/automate/?couponCode=PY_ALL_THE_THINGS

It’s free until the end of Friday, Dec 1, 2017. Afterwards it goes back to its normal $50 price. (Though you can use this link https://www.udemy.com/automate/?couponCode=FOR_LIKE_10_BUCKS to buy it for $10. And it’s an open secret that if you browse Udemy in privacy mode, they’ll show you the discount price to lure in a “new” customer. But course creators get a much larger cut when people use their referral codes.)

The course follows the book of the same name, which is available for free, in full, at [WayBackhttps://automatetheboringstuff.com under a Creative Commons license. (Which I encourage you to use to share your own creative works.)

The course is 50 videos and made for people with no previous programming experience. The first 15 videos are free to view on YouTube: https://www.youtube.com/watch?v=1F_OgqRuSdI&list=PL0-84-yl1fUnRuXGFe_F7qSH1LEnn9LkW

And now I will go self-flagellate to atone for my part in legitimizing “cyber monday”.

–jeroen

Read the rest of this entry »

Posted in Development, Python, Scripting, Software Development | Leave a Comment »

Kriscode.Hint := ‘Kris”s coding blog’: Lazarus IDE on ARM Ubuntu (Raspberry Pi, Ubuntu Touch, etc)

Posted by jpluimers on 2017/11/28

Interesting writeup as Lazarus and Free Pascal have come a long way: [WayBackKriscode.Hint := ‘Kris”s coding blog’: Lazarus IDE on ARM Ubuntu (Raspberry Pi, Ubuntu Touch, etc)

Via:

–jeroen

Posted in Development, FreePascal, Lazarus, Pascal, Software Development | Leave a Comment »

Implementing Memoize in Delphi 2009 – Community Blogs – Embarcadero Community

Posted by jpluimers on 2017/11/28

I think it was Stefan Glienke who pointed me at the Memoisation pattern: [WayBackImplementing Memoize in Delphi 2009 – Community Blogs – Embarcadero Community

Or in laymans terms: caching with generic functions and dictionaries.

Note the Archive.is link is way better readable than the WayBack link, so below I’ve saved parts only in Archive.is.

It points to two other interesting reads:

Later I found it was indeed Stefan who pointed me to the above links and also came up with this very small Memoisation example which is based on Spring4D:

and guess what? because we have interfaced based dictionary this is super easy, let me just hack an example, 5mins6:52 PM

function BuildCache: Tfunc<string,string>;
var
 cache: IDictionary<string,string>;
begin
 cache := TCollections.CreateDictionary<string,string>;
 Result :=
   function(s: string): string
   begin
     if not cache.TryGetValue(s, Result) then
     begin
       Sleep(1000); // hard work! ;)
       Result := ReverseString(s);
       cache.Add(s, Result);
     end;
   end;
end;

Since the returned anonymous method captures the dictionary its kept inside and once the anonymous method goes out of scope the dictionary is also cleaned, want to reset the cache? Just create a new one and throw the old one away.

Need thread safety? just add

System.TMonitoy.Enter/Leave(cache.AsObject);

–jeroen

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

iptables debugging « \1

Posted by jpluimers on 2017/11/28

Using the TRACE target: [WayBackiptables debugging « \1 via [WayBack] iptables Debugging using the TRACE chain – Kristian Köhntopp – Google+

Docs:

TRACE
This target marks packes so that the kernel will log every rule which match the packets as those traverse the tables, chains,
rules. (The ipt_LOG or ip6t_LOG module is required for the logging.) The packets are logged with the string prefix: “TRACE:
tablename:chainname:type:rulenum ” where type can be “rule” for plain rule, “return” for implicit rule at the end of a user
defined chain and “policy” for the policy of the built in chains.
It can only be used in the raw table.

Way more details in the linked article.

–jeroen

Posted in *nix, *nix-tools, Firewall, Infrastructure, iptables, Power User | Leave a Comment »

Kaart met onontplofte bommen in Amsterdam nu openbaar

Posted by jpluimers on 2017/11/27

De interactieve bommenkaart van de gemeente die laat zien waar onontplofte bommen uit de Tweede Wereldoorlog liggen, is openbaar gemaakt.

Source: [Archive.is] Kaart met onontplofte bommen in Amsterdam nu openbaar

Kaart: [Archive.is] Grote kaart – Dataportaal

Eerder artikel: [Archive.isKaart met verdachte bommen onder Amsterdam bijgewerkt

Dichtbij: [Archive.isVerdachte gebieden: Monte Viso / Gran Paradiso / Pasubio

 

Posted in LifeHacker, Power User | Leave a Comment »

OS X dmg files – Disk Utility usually creates them read-only

Posted by jpluimers on 2017/11/27

While recovering the backups of a Retina MacBook Pro, I needed to know if I could mount a Disk Utility backup image on read-only mode.

Finding that info was a tad difficult as most results were about making dmg files read-write. This already hinted me in that most dmg files were readonly.

The main tool for handling dmg files is hdiutil. for which you can get more info here:

The hdiutil command imageinfo will output a Format: line having the kind of dmg image:

  • UDRW – UDIF read/write image
  • UDRO – UDIF read-only image
  • UDCO – UDIF ADC-compressed image
  • UDZO – UDIF zlib-compressed image
  • UDBZ – UDIF bzip2-compressed image (OS X 10.4+ only)
  • UFBI – UDIF entire image with MD5 checksum
  • UDRo – UDIF read-only (obsolete format)
  • UDCo – UDIF compressed (obsolete format)
  • UDTO – DVD/CD-R master for export
  • UDxx – UDIF stub image
  • UDSP – SPARSE (grows with content)
  • UDSB – SPARSEBUNDLE (grows with content; bundle-backed)
  • RdWr – NDIF read/write image (deprecated)
  • Rdxx – NDIF read-only image (Disk Copy 6.3.3 format)
  • ROCo – NDIF compressed image (deprecated)
  • Rken – NDIF compressed (obsolete format)
  • DC42 – Disk Copy 4.2 image

All compressed formats seem to be read-only and of course all read-only formats. Which then basically leaves only these as (potentialy) read-write image types:

  • UDRW
  • UFBI
  • UDSP
  • UDSB
  • RdWr
  • DC42

References and further reading:

–jeroen

Posted in Uncategorized | Leave a Comment »

Chrome Store Foxified: Enables the Google Chrome Store and Opera Addons Website for Firefox.

Posted by jpluimers on 2017/11/27

Most of my browser life is in Chrome, but the memory consumption and CPU usage has increased so much over time so it, err, become less than optimal.

Given the new FireFox is supposed to use far less memory and CPU than previous FireFox versions, I want to try it, but since so much of my Chrome life is about Chrome Extensions, I was glad to discover [WayBackChrome Store Foxified

by Nicolas AragoneNoitidart
Enables the Google Chrome Store and Opera Addons Website for Firefox. Point and click to install Opera/Chrome extensions straight into Firefox.

via:

–jeroen

Read the rest of this entry »

Posted in Chrome, Chrome, Firefox, Google, Power User, Web Browsers | Leave a Comment »

DNS Knowledge DNS Tutorial, News and Tools: How to setup Quad9 DNS on a Linux

Posted by jpluimers on 2017/11/24

Reminder to self so I try this out: [Archive.isDNS Knowledge DNS Tutorial, News and Tools: How to setup Quad9 DNS on a Linux

Quad9 is a free security solution that uses DNS to protect your systems against the most common cyber threats and you can setup it on Linux.

Related: [Archive.is] Quad9 | Internet Security & Privacy In a Few Easy Steps:

Quad9 is a free security solution that uses DNS to protect your system against the most common cyber threats. It improves your system’s performance, plus, it preserves and protects your privacy. It’s like an immunization for your computer.

Via: [WayBack] Remember 8.8.8.8 (Google DNS)? Now we have 9.9.9.9 from IBM/Quad9 that brings together cyber threat intelligence about malicious domains…. – nixCraft – Google+

Remember 8.8.8.8 (Google DNS)? Now we have 9.9.9.9 from IBM/Quad9 that brings together cyber threat intelligence about malicious domains. It can block malware and other bad domains. https://www.dnsknowledge.com/tutorials/how-to-setup-quad9-dns-on-a-linux/ and https://quad9.net/#/ What do you think? Do you use Google DNS or OpenDNS or ISP DNS or newer Quad9 DNS?

–jeroen

Posted in *nix, DNS, Internet, Power User, Security | Leave a Comment »