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

Archive for the ‘Development’ Category

x86 assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Posted by jpluimers on 2024/12/25

This brought back memories of some 40 years ago during my first steps learning x86 assembly language, realising the first comment: [Wayback/Archive] assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Q

In x86 assembly code, are JE and JNE exactly the same as JZ and JNZ?

C

Long answer: yes.

C

TL:DR: same machine operation, different semantic meaning. Just like jb / jc / jnae all testing CF=1. See felixcloutier.com/x86/jcc

Merry X-mas everyone!

And thanks [Wayback/Archive] Daniel Hanrahan for asking, [Wayback/Archive] Hans Passant and [Wayback/Archive] Peter Cordes for commenting.

Be sure to read the rest of the comments and answers to read on the WHY these instructions are the same. That insight made me realise I was finally understanding the x86 architecture at a deeper level.

Related:

  • [WaybackSave/Archive] Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes 2A, 2B, 2C, and 2D: Instruction Set Reference, A-Z
  • [Wayback/Archive] Jcc — Jump if Condition Is Met

    Sorted by Opcode column (with a little bit of help from Excel, Notepad++ and [Wayback/Archive] HTML Tables generator – TablesGenerator.com; then bolded or italicised the Description column of equivalent entries:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.

    Original table from the above Jcc link:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).

--jeroen

Posted in Assembly Language, Development, Software Development, x86 | Leave a Comment »

Test Automation Code Smells – Angie Jones

Posted by jpluimers on 2024/12/25

Cool presentation: [Wayback/Archive] Test Automation Code Smells – Angie Jones.

A recording is at [Wayback/Archive] What’s That Smell? Tidying Up Our Test Code – YouTube (and embedded below the signature).

The code is at [Wayback] code_smells_workshop.zip.

Read the rest of this entry »

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

“Incompatible parameter lists” when using Types.T*DynArray? – VCL – Delphi-PRAXiS [en]

Posted by jpluimers on 2024/12/24

Reminder to self: Delphi 11.3 (Alexandria update 3), mid-product added a compiler changing kind of deprecating using types of this form (including ones defined in the System, System.Types and other RTL/VCL units):

Overview of “deprecated” * and alternative array types
“deprecated” alternative: write it all out
TBooleanDynArray TArray<Boolean>
TByteDynArray TArray<Byte>
TCardinalDynArray TArray<Cardinal>
TStringDynArray TArray<string>
  • technically not deprecated, as deprecated is a hinting directive and despite these having existed for almost 25 years now**, hinting directives like platform, deprecated, or library cannot be used on array types:a bug has been filed for this in 2017 but still has not been addressed, see my earlier blog post Delphi Declarations and Statements: Hinting Directives.

Read the rest of this entry »

Posted in Delphi, Delphi 11.0 Alexandria (Olympus), Development, Software Development | Leave a Comment »

Beyond Compare 5 – out since mid 2024, and not many bug fixes needed so far: be sure to upgrade

Posted by jpluimers on 2024/12/19

Being back in the field after quite a long time made me notice I missed the Beyond Compare 5 release mid this year.

It did not need many upgrades so far which is a really good sign. Unlike many other places that release software way too early, Scooter Software seems to have focused on quality first, which nowadays is rare. Great!

Below are some links to get you up to speed, especially since it is available on Home Brew, Chocolatey and various other package installers:

Read the rest of this entry »

Posted in Development, Software Development | Leave a Comment »

Hasan • Digital Writer on Twitter: “I made JavaScript Arrays Methods cheat sheet🔥 I hope it can helps you https://t.co/6KoWtagj13” / Twitter

Posted by jpluimers on 2024/12/19

[Wayback/Archive] Hasan • Digital Writer on Twitter: “I made JavaScript Arrays Methods cheat sheet🔥 I hope it can helps you”, a visual representation covering map, filter, find, findIndex, fill, copyWithin, some, every, reduce:

Read the rest of this entry »

Posted in Development, JavaScript/ECMAScript, Scripting, Software Development, Web Development | Leave a Comment »

How to extract playlists (list of file locations) from iTunes using python – Stack Overflow

Posted by jpluimers on 2024/12/18

While migrating from iTunes on one machine to Apple Music on another one, I needed to migrate part of the (disorganised) playlists.

I knew there was a binary ~/Music/iTunes/iTunes Library.itl file, but that is encoded or encrypted, making it hard to parse.

Luckily there is also ~/Music/iTunes/iTunes Music Library.xml which I found via the links below.

Read the rest of this entry »

Posted in Apple, Development, iTunes, Mac OS X / OS X / MacOS, Power User, Python, Scripting, Software Development, XML, XML/XSD | Leave a Comment »

den on Twitter: “Kubernetes.” portrayed by Seinfeld characters (Engineering Festivus)

Posted by jpluimers on 2024/12/18

At the end of 2020, in the midst of the Covid-19 crisis, [Wayback/Archive] den (@DennisCode) / Twitter started [Wayback/Archive] Engineering Festivus

The only thing 2020 needed is Seinfeld making a career change and getting into tech.

It is a series of IT parodies that at the time of writing just had its’ 35th episode: [Wayback/Archive] den on Twitter: “Kubernetes.”

Kubernetes

Kramer decided to use Kubernetes for his website. Jerry tries to explain what that entails. Kramer is adamant to do it all himself.

Read the rest of this entry »

Posted in Amazon.com/.de/.fr/.uk/..., AWS Amazon Web Services, Cloud, Cloud Development, Containers, Development, Docker, Infrastructure, Kubernetes (k8n), Software Development | Leave a Comment »

As a tribute to their @isotopp handle history, Kris now changed its name to Köhntopp

Posted by jpluimers on 2024/12/17

[Wayback/Archive] Jeroen Wiert Pluimers: “LOL, just saw @isotopp changed…” – Mastodon

LOL, just saw @isotopp changed his name to Köhntopp

Well done, Kris. Well done.

ftfy.vercel.app/?s=ö

( the history of the iso isotopp handle is so great, that I was glad I captured it from Twitter before that content got deleted; it is now at wiert.me/2022/06/09/how-isotop )

This Vercel app cannot be archived in the Wayback Machine properly as it then returns a HTTP 500. The Archive.is save succeeded though: [Wayback/Archive] https://ftfy.vercel.app/?s=ö:

Read the rest of this entry »

Posted in Development, Encoding, ISO-8859, ISO8859, Mojibake, Software Development, Unicode, UTF-8 | Leave a Comment »

Markdown has been the Internet’s lingua franca for documentation. Microsoft finally the documentation format with markitdown: Python tool for converting files and office documents to Markdown.

Posted by jpluimers on 2024/12/17

Finally an easier way to convert Office documents (and other formats) to markdown: [Wayback/Archive] GitHub – microsoft/markitdown: Python tool for converting files and office documents to Markdown. (after Google added a Markdown export feature to Google Docs about half a year ago, and basic Markdown formatting about 2 years ago – see below):

There are quite a few dependencies in [Wayback/Archive] markitdown/pyproject.toml at main · microsoft/markitdown · GitHub, so be prepared for that.

Supported formats (added links for clarity):

The MarkItDown library is a utility tool for converting various files to Markdown (e.g., for indexing, text analysis, etc.)
It presently supports:
  • PDF (.pdf)
  • PowerPoint (.pptx)
  • Word (.docx)
  • Excel (.xlsx)
  • Images (EXIF metadata, and OCR)
  • Audio (EXIF metadata, and speech transcription)
  • HTML (special handling of Wikipedia, etc.)
  • Various other text-based formats (csv, json, xml, etc.)

Google was first though:

  1. [Wayback/Archive] Google Workspace Updates: Compose with Markdown in Google Docs on web
  2. [Wayback/Archive] Google Workspace Updates: Import and export Markdown in Google Docs

There is speculation on why Microsoft introduced it just now ranging from “they need it for AI training” to “just late to the game”. I’m with the latter. Apple is even later, so if you want to convert Apple Notes to markdown, then you can use [Wayback/Archive] Import from Apple Notes – Obsidian Help.

Via various sources, including:

Read the rest of this entry »

Posted in CSV, Development, Excel, HTML, HTML5, JSON, Lightweight markup language, MarkDown, Office, PDF, Power Point, Power User, Software Development, Word, XML/XSD | Tagged: , | Leave a Comment »

Some links and notes as I want to write a Bookmarklets to help resize HTML images

Posted by jpluimers on 2024/12/17

Probably not fully the direction I need to search to (main goal is to interactively edit img tag attributes (basic and style) to manipulate the appearance of pictures in my blog), but should do for now:

Read the rest of this entry »

Posted in Bookmarklet, CSS, Development, HTML, JavaScript/ECMAScript, Power User, Scripting, Software Development, Web Browsers, Web Development | Leave a Comment »