Archive for the ‘C’ Category
Posted by jpluimers on 2025/08/20
With the constant influx of JavaScript programmers, it keeps worth repeating that you should always run JavaScript in strict mode via "use strict"; (like in the past Visual Basic 6 developers should use option strict and option explicit) to forget risky JavaScript syntax like implicit ocal constants (which were removed from the documentation in the 2009 ECMAScript 5 specification for JavaScript), and every codeline should have a test code covering it, especially for comparisons involving non-strict behaviour like the use of leading zeros.
As of the succeeding 2015 standard (ECMAScript 6), octal numbers in JavaScript start with 0o or 0O followed by a series of octal digits.
Oh, and the history of octal in computing of course has to do with 6-bit systems and also lead to 6-six bit character codes including BCD character encoding..
My tweet back earlier this year: [WaybackSave/Archive] Jeroen Wiert Pluimers @wiert@mastodon.social on X: “@_ObomheseR Since JavaScript is in the group of curly based programming languages influenced by the B programming language, integer constants starting with zero are tried first in octal base. 017 octal is 15 decimal 018 octal is not possible, so becomes 18.”
Inhteritence:
Read the rest of this entry »
Posted in B, BASIC, C, Development, JavaScript/ECMAScript, MarkDown, Retrocomputing, Scripting, Software Development, VB6, Visual BASIC | Leave a Comment »
Posted by jpluimers on 2025/07/16
I originally missed this as back then I was in the midst of managing trouble in my parental family, unaware I was already having rectum cancer. Then things went fast, not even including the Covid-19 years, so I was glad last year I got reminded of this mid-2019 article:
[Wayback/Archive] Alan Turing Wrote Object-Oriented Code In C And Ran It On BEAM – De Programmatica Ipsum writes a lot of interesting things on programming paradigms, starting with
In his rare 1994 book “Object-Oriented Programming In C” Axel Tobias Schreiner explains how to do inheritance, class methods, class hierarchies, and even how to raise exceptions using nothing else than pure, simple, pointer arithmetic-filled, ANSI C.
then arguing basically most of not all modern languages share the majority of programming paradigms and all these paradigms are repeats of the past:
But none of this is new. Smalltalk, arguably the precursor of object orientation, had collect and select methods which were the grandparents of our more common map and filter functional friends.
What sets modern languages apart is that they the majority covers all the paradigms you might need, just differing in how well they support the paradigm-du-jour.
It means programming language wars should have been a thing of the past for about two decades now.
Please let that sink in.
Oh: if you look for that ANSI C book, here it is: [Wayback/Archive] https://www.cs.rit.edu/~ats/books/ooc.pdf [Wayback PDF View/PDF View]
Via: [Wayback/Archive] De Programmatica Ipsum: “”In his rare 1994 book “Object…” – mas.to
--jeroen
Posted in .NET, C, C#, C++, Cloud, COBOL, Containers, Design Patterns, Development, Docker, Erlang, F#, Go (golang), Haskell, Infrastructure, Java, Java Platform, Kotlin, Kubernetes (k8n), ObjectiveC, OOP (Object Oriented Programming), Perl, Scala, Scripting, Software Development, Swift, VB.NET | Leave a Comment »
Posted by jpluimers on 2025/06/25
The manual process of getting back to the earliest commit of a GitHub repository is easy for small repositories, but for a large one it is very tedious.
TL;DR: there are various ways, but the easiest was the INIT Bookmarklet below.
Note: 2 weeks before the scheduled post made it to the front of the queue, I got a report¹ that it started to fail. Here it still works.
It’s hard to debug because of the functional programming approach taken.
Read the rest of this entry »
Posted in Bookmarklet, C, Conference Topics, Conferences, Development, DVCS - Distributed Version Control, Event, git, GitHub, Go (golang), JavaScript/ECMAScript, Power User, Scripting, Software Development, Source Code Management, Web Browsers | Tagged: 1, 18, 7 | Leave a Comment »
Posted by jpluimers on 2025/04/16
Just in case I ever think “oh, I might try want to go the Variadic function arguments way in Delphi” again, I must remember “maybe not a good idea” and re-read these posts:
- [Wayback/Archive] Variadic function – Wikipedia which in C is implemented with in [Wayback/Archive]
varargs.h – Wikipedia (now in [Wayback/Archive] stdarg.h – Wikipedia) with the identifiers va_list, va_start, va_arg, and va_end.
- [Wayback/Archive] Delphi “array of const” to “varargs” – Stack Overflow with great insights from former Delphi compiler developer [Wayback/Archive] Barry Kelly.
- [Wayback/Archive] E2591 Only
cdecl functions may use varargs (Delphi) – RAD Studio (I already knew this, but it is good to have that bit linked here as well)
- [Wayback/Archive] gmp-wrapper-for-delphi/gmp_lib.pas at master · EricGrange/gmp-wrapper-for-delphi · GitHub with an example how
varargs support got introduced in Delphi 6: for external cdecl functions.
- [Wayback/Archive] Rudy’s Delphi Corner – Pitfalls of converting (still *the* reference article on translating C/C++ headers to Delphi) has this on
varargs:
Fortunately, since Delphi 6, you can declare external functions like wsprintf using the varargs directive.
- [Wayback/Archive] How to create a Delphi variadic method similar to Write/Writeln without requiring brackets for arguments? – Algorithms, Data Structures and Class Design – Delphi-PRAXiS [en] has a nice 64-bit Delphi example using the undocumented Delphi identifiers
TVarArgList, VarArgStart, VarArgGetValue, and VarArgEnd.
Note that this example, despite the description indicates it is, it is actually not varargs by array of const (which requires using TVarRec as under the hood it is an open array of TVarRec): [Wayback/Archive] How to create functions that can accept variable number of parameters such as Format().
Then some Free Pascal links, which is different from, but also similar to Delphi:
Queries:
--jeroen
Posted in .NET, C, C#, Delphi, Development, FreePascal, Pascal, Software Development | Leave a Comment »
Posted by jpluimers on 2025/03/13
From a while back, but still interesting:
- [Wayback/Archive] Counting the leading zeroes in a binary number with C#
- [Wayback/Archive] c# – Getting the number of leading 1 bits – Stack Overflow (thanks [Wayback/Archive] Barry Kelly and [Wayback/Archive] SoapBox)
Especially the first link explains the algorithm very well and is similar to links referred to from the Stack Overflow question as it is based on counting ones (and leading ones are basically leading zeros but bit-inverted).
It also explains a cool thing for leading zeros: modern CPU have instructions which .NET Core.
Read the rest of this entry »
Posted in .NET, AArch64/arm64, Algorithms, ARM, Assembly Language, C, C#, C++, Delphi, Development, Software Development, x64, x86 | Tagged: csharp, dotnet, dotnetcore | Leave a Comment »
Posted by jpluimers on 2025/01/01
I wrote a two earlier blog posts around puns in programming book indices before:
- the 1992 Turbo Pascal 7.0 Language Guide having both entry in the manual about Recursion (“recursive loop, see recursive loop”) which of course is similar to “infinite loop” and entries for “infinite loop See loop, infinite” and “loop, infinite See infinite loop”.
- infinite loop in “LaTeX: A Document Preparation System” by Leslie Lamport, printed in 1994.
In the last one, I promised to list more occurrences which I now finally had time for to do.
But let me first elaborate more on the observation that modern computer books (like for instance on C# and Delphi beyond version 1) lack these kinds of index pun.
On the Delphi side, the index entry joke for recursion got removed no later than Delphi 3 (I am still looking for a Delphi 2 version of the Object Pascal Language Guide, see further below) even before the book being fully redone electronically and the index pages generation being automated in
I think I even understand why that is: the process of creating of indices. By the start of this century, more and more indices were automatically being generated and for the last 2 decades or so, all of them are. Back in the days however, indices were mostly done by hand. Nowadays, with everything automated, it is actually pretty tricky in most environments to add such an “infinite loop” index entry like in the Turbo Pascal book, as it would require two things at once:
Read the rest of this entry »
Posted in .NET, C, C#, C++, Conference Topics, Conferences, Delphi, Delphi 1, Delphi 2, Development, EKON, Event, History, LaTeX, LifeHacker, LISP, Mathematics, Pascal, Perl, PL/I (a.k.a. PL/1), Power User, science, Software Development, Turbo Pascal, Typesetting | Tagged: 1, 7 | 4 Comments »
Posted by jpluimers on 2024/12/12
Simple (but fully working) code for NPLogonNotify(). The function obtains logon data, including cleartext password.
[Wayback/Archive] PSBits/PasswordStealing/NPPSpy at master · gtworek/PSBits has been used in the wild since about 2022 (the code is from 2020).
The code is a ~100 line C file resulting in a DLL exporting the NPGetCaps() and NPLogonNotify() functions.
Background/related:
Read the rest of this entry »
Posted in .NET, Blue team, C, CommandLine, Development, Power User, PowerShell, PowerShell, Red team, Scripting, Security, Software Development, Windows Development | Tagged: NPPSPY | 1 Comment »
Posted by jpluimers on 2024/11/07
Some work to do replacing dead IETF RFC and draft links in my blog posts.
From the accepted answer on [Wayback/Archive.is] Links to HTML versions of RFC’s need to move from “tools” to “datatracker” – Meta Stack Exchange:
[http/https]://tools.ietf.org/html/[rfc/RFC] became https://www.rfc-editor.org/rfc/rfc network-wide
[http/https]://tools.ietf.org/html/draft- became https://datatracker.ietf.org/doc/html/draft-
>Both of these should conform to the reply we received from IETF.
Read the rest of this entry »
Posted in C, C++, Carbon, Development, Power User, SocialMedia, Software Development, Web Development, WordPress, WordPress | Leave a Comment »