The Wiert Corner – irregular stream of stuff

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

  • Home
  • Wiert.me
  • About the Wiert Corner
  • Privacy Policy
  • Conferences, seminars and other public appearances
  • Posting categories
  • Archives
  • Toolbox
  • Contact form
  • License
  • Subscribe

    • Entries (RSS)
    • Comments (RSS)
  • June 2026
    M T W T F S S
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
    « May    
  • Archives

    • June 2026 (23)
    • May 2026 (42)
    • April 2026 (45)
    • March 2026 (45)
    • February 2026 (47)
    • January 2026 (48)
    • December 2025 (54)
    • November 2025 (47)
    • October 2025 (50)
    • September 2025 (49)
    • August 2025 (47)
    • July 2025 (50)
    • June 2025 (47)
    • May 2025 (48)
    • April 2025 (46)
    • March 2025 (44)
    • February 2025 (48)
    • January 2025 (55)
    • December 2024 (48)
    • November 2024 (44)
    • October 2024 (51)
    • September 2024 (46)
    • August 2024 (53)
    • July 2024 (50)
    • June 2024 (36)
    • May 2024 (33)
    • April 2024 (33)
    • March 2024 (36)
    • February 2024 (28)
    • January 2024 (28)
    • December 2023 (27)
    • November 2023 (24)
    • October 2023 (24)
    • September 2023 (29)
    • August 2023 (31)
    • July 2023 (33)
    • June 2023 (26)
    • May 2023 (26)
    • April 2023 (31)
    • March 2023 (26)
    • February 2023 (27)
    • January 2023 (24)
    • December 2022 (33)
    • November 2022 (27)
    • October 2022 (23)
    • September 2022 (25)
    • August 2022 (24)
    • July 2022 (26)
    • June 2022 (26)
    • May 2022 (23)
    • April 2022 (32)
    • March 2022 (69)
    • February 2022 (63)
    • January 2022 (66)
    • December 2021 (75)
    • November 2021 (66)
    • October 2021 (64)
    • September 2021 (67)
    • August 2021 (69)
    • July 2021 (69)
    • June 2021 (69)
    • May 2021 (68)
    • April 2021 (67)
    • March 2021 (72)
    • February 2021 (63)
    • January 2021 (65)
    • December 2020 (70)
    • November 2020 (64)
    • October 2020 (68)
    • September 2020 (67)
    • August 2020 (67)
    • July 2020 (71)
    • June 2020 (68)
    • May 2020 (64)
    • April 2020 (67)
    • March 2020 (70)
    • February 2020 (61)
    • January 2020 (74)
    • December 2019 (70)
    • November 2019 (63)
    • October 2019 (73)
    • September 2019 (68)
    • August 2019 (66)
    • July 2019 (68)
    • June 2019 (68)
    • May 2019 (72)
    • April 2019 (73)
    • March 2019 (64)
    • February 2019 (68)
    • January 2019 (78)
    • December 2018 (87)
    • November 2018 (77)
    • October 2018 (79)
    • September 2018 (77)
    • August 2018 (76)
    • July 2018 (74)
    • June 2018 (63)
    • May 2018 (70)
    • April 2018 (63)
    • March 2018 (72)
    • February 2018 (48)
    • January 2018 (83)
    • December 2017 (67)
    • November 2017 (62)
    • October 2017 (63)
    • September 2017 (52)
    • August 2017 (62)
    • July 2017 (48)
    • June 2017 (57)
    • May 2017 (68)
    • April 2017 (55)
    • March 2017 (59)
    • February 2017 (58)
    • January 2017 (60)
    • December 2016 (59)
    • November 2016 (74)
    • October 2016 (61)
    • September 2016 (87)
    • August 2016 (57)
    • July 2016 (51)
    • June 2016 (49)
    • May 2016 (48)
    • April 2016 (51)
    • March 2016 (49)
    • February 2016 (50)
    • January 2016 (48)
    • December 2015 (59)
    • November 2015 (57)
    • October 2015 (37)
    • September 2015 (31)
    • August 2015 (41)
    • July 2015 (31)
    • June 2015 (37)
    • May 2015 (30)
    • April 2015 (32)
    • March 2015 (37)
    • February 2015 (52)
    • January 2015 (50)
    • December 2014 (43)
    • November 2014 (39)
    • October 2014 (40)
    • September 2014 (41)
    • August 2014 (58)
    • July 2014 (32)
    • June 2014 (23)
    • May 2014 (38)
    • April 2014 (105)
    • March 2014 (145)
    • February 2014 (81)
    • January 2014 (56)
    • December 2013 (58)
    • November 2013 (32)
    • October 2013 (26)
    • September 2013 (26)
    • August 2013 (54)
    • July 2013 (47)
    • June 2013 (41)
    • May 2013 (33)
    • April 2013 (41)
    • March 2013 (50)
    • February 2013 (47)
    • January 2013 (55)
    • December 2012 (32)
    • November 2012 (23)
    • October 2012 (37)
    • September 2012 (52)
    • August 2012 (46)
    • July 2012 (40)
    • June 2012 (30)
    • May 2012 (27)
    • April 2012 (30)
    • March 2012 (29)
    • February 2012 (32)
    • January 2012 (25)
    • December 2011 (38)
    • November 2011 (28)
    • October 2011 (46)
    • September 2011 (63)
    • August 2011 (35)
    • July 2011 (24)
    • June 2011 (24)
    • May 2011 (24)
    • April 2011 (29)
    • March 2011 (50)
    • February 2011 (48)
    • January 2011 (18)
    • December 2010 (5)
    • November 2010 (18)
    • October 2010 (22)
    • September 2010 (29)
    • August 2010 (24)
    • July 2010 (27)
    • June 2010 (29)
    • May 2010 (25)
    • April 2010 (23)
    • March 2010 (10)
    • February 2010 (6)
    • January 2010 (16)
    • December 2009 (12)
    • November 2009 (3)
    • October 2009 (11)
    • September 2009 (21)
    • August 2009 (11)
    • July 2009 (11)
    • June 2009 (5)
    • May 2009 (12)
    • April 2009 (20)
  • *nix *nix-tools .NET About Apple C# Conferences Conference Topics Delphi Development Event Google Hardware Hardware Development History Internet LifeHacker Linux Mac OS X / OS X / MacOS Personal Power User Scripting Security SocialMedia Software Development Source Code Management VMware Web Development Windows Windows 7
  • Recent Comments

    jpluimers's avatarjpluimers on Windows warned me of disk full…
    jpluimers's avatarjpluimers on Started making people walk me…
    jpluimers's avatarjpluimers on Stack Overflow’s forum is dead…
    jpluimers's avatarjpluimers on Some links on getting the most…
    boctorbill's avatarboctorbill on Some links on getting the most…
  • Recent Posts

    • Hoe omgaan met iemand die ernstig ziek is en (misschien) niet meer beter wordt
    • Monitor Brandstofprijzen ACM: lichte daling brandstofprijzen gehele keten, diesel weer goedkoper dan benzine | ACM
    • Raspberr Pi with openSuSE: trying to fix a microSD card causing “A start job is running for File System Check on /dev/disk/by-id mmc” … some time elspased / no limit
    • What is the best way to get Windows 11 Pro Key for cheap ? : bootcamp
    • Two online transcription tools
  • Blog Stats

    • 3,675,850 hits
  • Meta title

    • Create account
    • Log in
    • Entries feed
    • Comments feed
    • WordPress.com
  • Tag Cloud Title

    1 2 3 3dprinting 4 6 7 8 14 16 18 25 32 android Apple arts aviation batch file bitbucket blogging computer Conferences define Delphi delphi 1 delphi 5 design developer documentation education embarcadero flickr fonts gadgets geeks gmail google google search include infosec internet iOS iphone jeroen mac os x Media microsoft surface mobile nick hodges pascal path names pdf photography Privacy Python RaspberryPi research science scott hanselman shorts software sourcecode language sourceforge ssd stack overflow technology transportation Travel twitter vcl vm VMware VMware Fusion wordpress xkcd
  • Top Clicks

    • archive.is/o/SSQ1a/https:…
    • elsvandongen.com/hoe-steu…
    • dilbert.com/strip/2017-01…
    • ifixit.com/Device/Magic_B…
    • wincdemu.sysprogs.org/tut…
    • download.microsoft.com/do…
    • datasciencewallah.medium.…
    • data.stackexchange.com/st…
    • pay.google.com
    • google.com/search?q="Figu…
  • Top Posts

    • When NTFS shrink fails, despite using the default settings from the shrink dialog
    • Hoe omgaan met iemand die ernstig ziek is en (misschien) niet meer beter wordt
    • Calls from +18553308653 might be because someone is trying to use your phone number to setup a Microsoft account two factor authentication
    • Visual Studio Code direct download links
    • DELL fans use a different pin-layout than normal fans, so watch out before connecting them!
    • Archives
    • LIDL Radio Controlled Wall Clock IAN 100489 English manual
    • Varios DELL machines having an unknown device ACPI\DELLABC6 - it is the WiFi switch support - via Dell Community
    • Looks like I might participate in the TRIASSIC-study to help compare TAMIS versus ESD for resection of non-pedunculated rectal lesions
    • Mordac, the preventer of information services strikes again... (via: Dilbert comic strip for 2013-03-09)
  • My badges

    Mastodon
  • Twitter Updates

    Tweets by jpluimers
  • My Flickr Stream

    20140508-Delphi-2007--Project-Options--Cannot-Edit-Application-Title-HelpFile-Icon-Theming20140430-Fiddler-Filter-Actions-Button-Run-Filterset-now20140424-VMware-Fusion-6.0.3.-no-reclaimable
    More Photos
  • Pages

    • About the Wiert Corner
      • bio
      • Music I like
    • Archives
    • Conferences, seminars and other public appearances
    • Contact form
    • License
    • Posting categories
    • Privacy Policy
    • Toolbox
      • DNS
      • Links
      • spring4d
      • Status
    • Wiert.me
  • 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 ‘Delphi’ Category

« Previous Entries
Next Entries »

On List growth strategies and memory managers

Posted by jpluimers on 2017/08/03

Interesting for anybody working on list growth strategies.

In this case with some Delphi background information and in depth coverage of FastMM memory (re)allocation strategies.

[WayBack] Stefan Glienke (of [WayBack] Spring4D fame) needed some help with allocation strategies and observed the difference between:

  • TList.Grow (and TStringList.Grow) growing like this: 4, 8, 12, 28, 44, 60, 76, 95, 118, 147, 183, 228, 285, 356, 445, 556, 695, 868, 1085
  • Generic TList<T> growing  the same way as the .NET List<T>: 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024

There is this nice [WayBack] Dynamic array – Growth factor – Wikipedia, the free encyclopedia mentioning this table:

Implementation Growth factor (a)
Java ArrayList[1] 1.5 (3/2)
Python PyListObject[7] 1.125 (9/8)
Microsoft Visual C++ 2013[8] 1.5 (3/2)
G++ 5.2.0[5] 2
Clang 3.6[5] 2
Facebook folly/FBVector[9] 1.5 (3/2)

[WayBack] Javier Hernández mentioned he doesn’t think exponential is better than n^2.

[WayBack] Eric Grange (of [WayBack] DWS and [WayBack] beginend.net fame) mentions he tends to use 1.5, it is about as good as 2 for small lists, but reduces waste for large ones. He also uses a constant delta to accelerate growth early on, so something like:

n := n + (n div 2) + 8

Since allocation strategies highly depend on the memory allocator as well, I was glad [WayBack] Primož Gabrijelčič (of [WayBack] OnmiThreadLibrary and [WayBack] Smart Mobile Studio fame) elaborated on FastMM:

  • FastMM small block allocator sizes (size includes the leading header) are: 8, 16, 24, 32, … 160 (in +8 steps), 176, 192, … 320 (+16), 352, 384 … 480 (+32), 528, 576, … 672 (+48), 736, 800, 880, 960, 1056, 1152, 1264, 1376, 1504, 1648, 1808 , 1984, 2176, 2384. [FastMM4.pas, SmallBlockTypes global var]
  • While the size of reallocated region fits inside a small block (with a different size than a previous block), the data is moved around (new block is allocated from a new suballocator). If it is too big (>2384 bytes), it gets allocated from the medium block allocator (which handles all block sizes up to 264752 bytes; larger blocks come directly from VirtualAlloc).
  • When small blocks are reallocated (to a larger size), allocator always allocates at least 100% + 32 bytes larger block, even if less is requested by the RTL (example: 8 bytes will grow to 2*8 + 32 = 48 bytes). When medium blocks are reallocated, allocator always allocates at least 125% of the old size. This boosts the performance when blocks are enlarged by small values as they can be enlarged “in place” (no data moved around, just the header is adjusted).

Stefan Glienke and Primož Gabrijelčič then concluded that:

  • Resizing an array from say 4 elements (pointer size) to 1000 (in multiple steps) will for sure move several times when jumping from one region into the next larger one.
  • Changing to a growth factor of 1.5 vs 2 won’t change anything in terms of memory fragmentation in FastMM4.

Source: [WayBack] I was just looking at TList.Grow (and TStringList.Grow) and I realized that the…

Edit 20181127

Delphi 10.3 Rio makes this configurable in a global way for all threads at the same time (#facepalm! as it is the 1980s Turbo Pascal ExitProc mess all over again): [WayBack] Delphi RTL Improvements in 10.3 Rio via [WayBack] +Marco Cantù is unstoppable. I can’t keep up LOL  – Clement Doss – Google+

The SetGrowCollectionFunc is of course not documented in the RTL, only in the [WayBack] What’s New – RAD Studio 10.3 Rio: [WayBack] Search results for “SetGrowCollectionFunc” – RAD Studio 10.3 Rio.

Stefan Glienke commented in that G+ thread:

I recently experimented with different grow factors and while the memory fragmentation can only mitigated for medium and large blocks (where it actually matters imo) it might be beneficial to only grow by 1.5 at that point. But that has yet to be tested.
What I liked so far is the grow strategy that Go uses (2x until 1024, 1.25x after that) – see https://golang.org/src/runtime/slice.go#L115

Since you usually set the size upfront if you add many elements at once (well, if you know how many beforehand) the grow strategy only matters in the long run. You want to balance speed (too many realloc might slow things down unnecessarily), memory overhead (if you are overallocating much you risk wasting too much memory) and memory fragmentation (which might happen with a grow factor bigger than the golden ratio)

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in .NET, Delphi, Development, Java, Java Platform, Software Development | 7 Comments »

Delphi call stack from exception…

Posted by jpluimers on 2017/08/02

Lars Fosdal:

MADExcept and Eurekalog are good products (and there is a JVCL tool as well). If you run your app in the IDE, you get the stack there – but for now, you need to acquire a third party package to get it runtime.I don’t disagree with the wish for a basic call stack tool, that works cross platform, but it would affect third party developers.

Stefan Glienke:

Whats the problem? You attach handlers to Exception.GetExceptionStackInfoProc, GetStackInfoStringProc and ` and just call a function that grabs the map or td32 info and generates the callstack – if you don’t want to spend any money for a high quality tool like madExcept (can even use it for free for non commercial use!) then use JclDebug.pas

I edited in some URLs above; the actual info is from: Why Delphi (like other developer environments) natively not included full call stack for every exception… [WayBack] (which is because it would kill even more of the Delphi 3rd party market).

And it taught me about this by madshi (of MADExcept fame):

DebugEngine is a collection of utils related to debug stuff (stack trace, CPU registers snaphot, debug info,…). Basically, I started to write a commercial error log plugin for Delphi, then I noticed that my internal framework got bigger and bigger. So I decided to share it with the community in hope it will be useful.

Source: MahdiSafsafi/DebugEngine: Delphi debug framework

And there is the JCL ExceptDlg.pas which is quite easy to use: just add it anywhere to your project and the global exception handler will show you a stack trace provided you have a .MAP file or .TDS file (which contains TD32 symbol information) in the same directory as your .EXE.

–jeroen

Example code:


unit ExceptionHelperUnit;
interface
uses
System.SysUtils;
type
ExceptionHelper = class helper for Exception
public
function Describe: string;
class procedure RaiseNotImplementedException(const aClass: TClass; const aMethodName: string);
class function GetStackTrace: string;
end;
implementation
uses
System.RTLConsts,
System.SysConst;
type
EStackTraceException = class(Exception); // EProgrammerNotFound to make it really clear this is only to be used in very limited places ??
{ ExceptionHelper }
function ExceptionHelper.Describe: string;
var
lStackTrace: string;
begin
Result := inherited ToString();
if Self is EInOutError then
if Result = System.RTLConsts.SInvalidFileName then
Result := System.SysConst.SInvalidFileName;
if Assigned(StackInfo) then
lStackTrace := StackTrace
else
lStackTrace := 'empty';
Result := Format('Exception'#13#10'%s at $%p: %s'#13#10'with StackTrace'#13#10'%s', [ClassName, ExceptAddr, Result, lStackTrace]);
end;
class function ExceptionHelper.GetStackTrace: string;
begin
try
Result := 'Get StackTrace via Exception.';
raise EStackTraceException.Create(Result) at ReturnAddress;
except
on E: EStackTraceException do
Result := E.StackTrace;
end;
end;
class procedure ExceptionHelper.RaiseNotImplementedException(const aClass: TClass; const aMethodName: string);
begin
raise ENotImplemented.CreateFmt('Method %s.%s is not implemented.', [aClass.ClassName, aMethodName]);
end;
end.

view raw

ExceptionHelperUnit.pas

hosted with ❤ by GitHub

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Debugging, Delphi, Development, MAP Symbol Information, Software Development, TD32/TDS Symbol information | 6 Comments »

Microsoft Research’s manual memory management for .NET: exactly one owner which provides shields for accessing the objects

Posted by jpluimers on 2017/08/01

A very interesting piece of research, in which I see a very familiar concept of single owners and I new concept of them providing shields for accessing the manually managed memory. I do miss mentions of Anders Hejlsberg, Chuck (Charles) Jazdzewski, or others that lay the foundation of ownership in the [WayBack] TComponent Branch.

Microsoft Research’s manual memory management for .NET: https://www.microsoft.com/en-us/research/wp-content/uploads/2017/07/snowflake-extended.pdf

Interesting concept of manual but safe memory management with exactly one owner of an object at any given moment and shields that prevent an object’s destruction while it’s still in use by other threads.

Source: [WayBack] Christopher Wosinski – Google+

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

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

There is a way to convert ‘array of const’ (open array) to TValue: Asbjørn Heid found one.

Posted by jpluimers on 2017/07/27

Brilliant solution by Asbjørn Heid:

So the solution I came up with is to use the observation that the “array of const” is “array of TVarRec”, and that “array of TVarRec” is passed as as two arguments: a pointer to the data and the length of the array (or rather, the highest index in the array).

Source: Is there a way to convert ‘array of const’ (open array) to TValue? For example,… [WayBack]

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

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

Sending various HTTP request kinds using curl

Posted by jpluimers on 2017/07/25

I’ve been using cURL but always had a feeling not to its potential basically because the cURL man page [WayBack] is both massive and lacks concrete useful practical examples.

For instance, I knew about the --header and --verbose options (I always use verbose names even though shorter -H and -v exist) to pass a specific header and get verbose output, but the man page basic examples like this by Tader:

curl --header --verbose "X-MyHeader: 123" www.google.com

source: How to send a header using a HTTP request through a curl call? – Stack Overflow [WayBack]

There are some more examples at bropages.org/curl but they’re hardly organised or documented.

So I was really glad I found the below answer [WayBack] by Amith Koujalgi to web services – HTTP POST and GET using cURL in Linux – Stack Overflow.

But first note that recent versions (around 7.22 or higher) of cURL now need to combine the --silent and --show-error (or in short -sS) parameters to suppress progress but show errors: linux – How do I get cURL to not show the progress bar? – Stack Overflow [WayBack]

Back to the examples

Read the rest of this entry »

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in *nix, Communications Development, cURL, Delphi, Development, HTTP, https, Internet protocol suite, JavaScript/ECMAScript, JSON, Power User, REST, Scripting, Security, Software Development, TCP, TLS, XML, XML/XSD | 1 Comment »

Anyone knows if Raize subscription before the Raize acquisition is still valid?

Posted by jpluimers on 2017/07/18

It’s from a while ago, so I wonder if this is still true:

  I just got my Embarcadero update to RC6 that includes #10Seattle support.

–jeroen

Source: Can I say that I’m a bit disappointed by the way the Raize acquisition has been…

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

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

A slightly optimized TDateTime functions (YearOf, MonthOf, DayOf) …

Posted by jpluimers on 2017/07/13

Besides the optimised versions of these functions, I learned the most from these comments:

 The DivMod should be faster. Should really be a single division. The CPU instruction will give you both div and mod from a single instruction. No point doing the divide twice.

http://stackoverflow.com/questions/20270596/how-do-i-implement-an-efficient-32-bit-divmod-in-64-bit-code

Updated code, added lookup-table optimizations, Lazarus / FPC support and test project:

https://github.com/davidberneda/FastDateTime

+Javier Hernández In the past I used AQTime but now I’m using NexusDB Quality suite (http://www.nexusdb.com/support/index.php?q=qualitysuite) and +Eric Grange SamplingProfiler (https://www.delphitools.info/samplingprofiler/).

But in this FastDateTime code the test project uses TStopWatch (GetTickCount in FPC) to compare speed

–jeroen

Source: A slightly optimized TDateTime functions (YearOf, MonthOf, DayOf) …

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

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

BorCon 97, 20 years ago, Star Wars, 40 years ago

Posted by jpluimers on 2017/07/13

Marco Cantu (right) and Jeroen Pluimers (left) in 1997

Marco Cantu (right) and Jeroen Pluimers (left) in 1997

The BorCon 97 opening – today 20 years ago – was so much fun: the a Star Wars like opening crawl about a tiny company fighting the – then regarded – Evil Empire called Microsoft.

It was back in the days when lots of new things in the Delphi world were happening: Delphi 2 – the first 32-bit version – came out half a year before and the upcoming Delphi 3 was going to be a game changer as well. New features were rock solid and sales were booming.

Personally, I was much slimmer (yes, that’s me in the Tie-Dye), and could do a pre-conference tutorial on CORBA and VisiBroker (The ORB by Visigenic which was about to be acquired by Borland – which now is owned by Micro Focus only after spinning of the CodeGear which got acquired by Embarcadero that is now owned by Idera which feels like the Inprise story all over again).

I got triggered to this after watching the Opening Night Excitation episode 194 of the Big Bang Theory:

Read the rest of this entry »

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

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

https://www.youtube.com/watch?v=INzECItF6ew Delphi, where are you? 

Posted by jpluimers on 2017/07/12

Edit: in the mean time, the author took his video off-line. The G+ thread however is still interesting.

From a while ago:

[WayBack] https://www.youtube.com/watch?v=INzECItF6ew
Delphi, where are you? – Jacek Laskowski – Google+

 

YouTube video C++ Cool Debugging Tips and Tricks

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in C++, Delphi, Development, Software Development | 4 Comments »

MarcoDelphiBooks on GitHub

Posted by jpluimers on 2017/07/04

Just in case I need any of them: now in chronological order.

MarcoDelphiBooks – http://www.marcocantu.com

  • ObjectPascalHandbook
  • MasteringDelphi3
  • MasteringDelphi4
  • MasteringDelphi5
  • MasteringDelphi6 
  • MasteringDelphi7
  • MasteringDelphi2005
  • Delphi2007Handbook
  • Delphi2009Handbook
  • Delphi2010Handbook
  • DelphiXEHandbook

Source: MarcoDelphiBooks

–jeroen

Rate this:

Share this:

  • Share on Mastodon (Opens in new window) Mastodon
  • Share on Bluesky (Opens in new window) Bluesky
  • Share on Tumblr
  • Share on Reddit (Opens in new window) Reddit
  • Share on Threads (Opens in new window) Threads
  • Tweet
  • Share on Telegram (Opens in new window) Telegram
  • Share on Nextdoor (Opens in new window) Nextdoor
  • Share on WhatsApp (Opens in new window) WhatsApp
  • Print (Opens in new window) Print
  • Email a link to a friend (Opens in new window) Email
Like Loading...

Posted in Delphi, Delphi 2005, Delphi 2007, Delphi 2009, Delphi 2010, Delphi 3, Delphi 4, Delphi 5, Delphi 6, Delphi 7, Delphi XE, Development, Software Development | Leave a Comment »

« Previous Entries
Next Entries »
 
Blog at WordPress.com.
  • Subscribe Subscribed
    • The Wiert Corner - irregular stream of stuff
    • Join 717 other subscribers
    • Already have a WordPress.com account? Log in now.
    • The Wiert Corner - irregular stream of stuff
    • Subscribe Subscribed
    • Sign up
    • Log in
    • Report this content
    • View site in Reader
    • Manage subscriptions
    • Collapse this bar
  • Privacy & Cookies: This site uses cookies. By continuing to use this website, you agree to their use.
    To find out more, including how to control cookies, see here: Cookie Policy
  • %d