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 ‘Software Development’ Category

Still looking for base64url decoding tools, both on-line and for MacOS homebrew

Posted by jpluimers on 2021/02/11

Remember the screenshot on the right from yesterdays post Kristian Köhntopp explaining theories?

In the end, I:

  1. saved that tweet
  2. in archive.is
  3. then took the screenshot image from there (see below)
  4. cut out the grey parts, then posted the middle part

I much more would have used the screenshot functionality of Google as described here by Terence Eden:

[WayBack] twitter – How to convert a tweet to image – Stack Overflow

Google has a secret screenshot API

For example, you can use it to get a screenshot of a tweet like this

https://www.googleapis.com/pagespeedonline/v1/runPagespeed?screenshot=true&strategy=mobile&url=https%3a%2f%2ftwitter.com%2fedent%2fstatus%2f661570680253755392

At the bottom of that JSON response, you’ll see

"screenshot": {
     "data": "_9j_4AAQSkZJRgAB.....=",
     "height": 569,
     "mime_type": "image/jpeg",
     "width": 320
 }

You will need to Base64 decode it using the URL and Filename safe alphabet.

That will give you a JPG screenshot of the Tweet.

I was hoping for an on-line way, so I followed [WayBack] Google’s Secret Screenshot API – Terence Eden’s Blog.

The blog post pointed me to a Python based script ([WayBack] Python-Twitter-Hacks/websiteScreenshot.py at master · edent/Python-Twitter-Hacks · GitHub) but had no online way.

So I tried out a few on-line things myself that failed:

Then I found out the script was just a proof of concept with hard coded URL and filename.

So I forked the repository, and fixed the script basing it on Python 3.

More on that next week.

Related:

  • [WayBack] RFC 4648 – The Base16, Base32, and Base64 Data Encodings: Base 64 Encoding with URL and Filename Safe Alphabet:
       The Base 64 encoding with an URL and filename safe alphabet has been
       used in [12].
    ...
       An alternative alphabet has been suggested that would use "~" as the
       63rd character.  Since the "~" character has special meaning in some
       file system environments, the encoding described in this section is
       recommended instead.
    ...
       This encoding may be referred to as "base64url".  This encoding
       should not be regarded as the same as the "base64" encoding and
       should not be referred to as only "base64". 
    ...
       This encoding is technically identical to the previous one, except
       for the 62:nd and 63:rd alphabet character, as indicated in Table 2.
    ...
             Table 2: The "URL and Filename safe" Base 64 Alphabet
    
         Value Encoding  Value Encoding  Value Encoding  Value Encoding
             0 A            17 R            34 i            51 z
             1 B            18 S            35 j            52 0
             2 C            19 T            36 k            53 1
             3 D            20 U            37 l            54 2
             4 E            21 V            38 m            55 3
             5 F            22 W            39 n            56 4
             6 G            23 X            40 o            57 5
             7 H            24 Y            41 p            58 6
             8 I            25 Z            42 q            59 7
             9 J            26 a            43 r            60 8
            10 K            27 b            44 s            61 9
            11 L            28 c            45 t            62 - (minus)
            12 M            29 d            46 u            63 _
            13 N            30 e            47 v           (underline)
            14 O            31 f            48 w
            15 P            32 g            49 x
            16 Q            33 h            50 y         (pad) =
    

–jeroen

Read the rest of this entry »

Posted in Apple, Development, Encoding, Home brew / homebrew, Mac OS X / OS X / MacOS, Power User, Software Development, Web Browsers | Leave a Comment »

One second code: Do YOU know how much your computer can do in a second?

Posted by jpluimers on 2021/02/11

[WayBack] One second code: Do YOU know how much your computer can do in a second? is a quiz version of the [WayBack] Numbers Every Programmer Should Know By Year.

[WayBack] About this game revealed it was made by 3 people curious in the speed of their hardware which – not surprisingly – has been relatively stable over the last decade or so.

Source code is at [WayBack] GitHub – kamalmarhubi/one-second: Fun performance game!

I bumped into it via these tweets:

I like games like this (ever played the The Deadlock Empire multi-threading game?), so I played the computers-are-fast.github.io tests, and learned a lot:

Read the rest of this entry »

Posted in Conference Topics, Conferences, Development, Event, Hardware, Power User, Software Development | Leave a Comment »

F2084 Internal Error: MA1263 – no relevant results

Posted by jpluimers on 2021/02/11

I tried searching for F2084 Internal Error: MA1263 – Google Search which happened on a complete up to date Delphi 10.1 Berlin installation.

It came from a large unit testing application using truckloads of generic language constructs, and large unit uses cycles.

Could not find anything useful. The error disappeared after recompiling the same application:

–jeroen

Posted in Delphi, Delphi 10.1 Berlin (BigBen), Development, Software Development | Leave a Comment »

Some LCID links and notes

Posted by jpluimers on 2021/02/10

Document locations changed, so here are some links to newer and older documentation on LCID related things:

More Delphi related links:

 

–jeroen

Posted in Development, Internet, link rot, Power User, Software Development, Windows Development, WWW - the World Wide Web of information | Leave a Comment »

The Delphi interface reference counting compiler bug that will never get fixed as it is marked “as designed”

Posted by jpluimers on 2021/02/10

A long time ago, I write a question [WayBack] delphi – Should the compiler hint/warn when passing object instances directly as const interface parameters? – Stack Overflow in 2010.

It was marked by (now former) compiler engineer Barry Kelly [WayBack1/WayBack2] as bug:

It’s a bug. The conversion from instance to interface reference in RunLeakCrash should be to a temporary variable, keeping it alive for the duration of RunLeakCrash.

Added to that was a comment that this has happened since at least Delphi 6, so I filed a bug WayBack QualityCentral Report #: 90482 The compiler should keep a hidden reference when passing freshly created object instances directly as const interface parameters.

Just for years later, it was marked with “As Designed” which means it is never going to be fixed, especially since in the mean time Embarcadero got rid of most the senior Delphi R&D team members and went down the path of hiring contractors.

The problem is that I run into the two manifestations every now and then, and it usually takes a long time debugging to zoom into the actual location of the spots.

First manifestation: crash

This is the bug in the first manifestation (by now the root interface is IInterface instead of IUnknown, and you usually have an interface derived from it):

Read the rest of this entry »

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

ApexSQL Refactor – Free SQL formatter | ApexSQL

Posted by jpluimers on 2021/02/09

The below configuration file haves [WayBack] ApexSQL Refactor – Free SQL formatter | ApexSQL produce quite OK formatted SQL, even for complex queries, not just for SQL Server.

So this is the second free tool I use from ApexSQL. The first one was ApexSQL, a free tool (SSMS add-in) for analyzing the execution plan of a SQL server query…

–jeroen

Read the rest of this entry »

Posted in Database Development, Development, Software Development, SQL, SQL Server | Leave a Comment »

A few links on Raymond Chen

Posted by jpluimers on 2021/02/09

I linked to [WayBack] the Old New Thing a lot from my blog, but never put in a few links to the author of all those posts: Raymond Chen.

So here you go:

Recurring topics on his blog:

He is on some videos to, for instance [Archive.is] One Dev Question with Raymond Chen – Why Are There 4 Functions for Converting Strings to GUIDs | One Dev Minute | Channel 9 (the actual mp4 video file through Archive.is).

You can find many more via raymond chen site:channel9.msdn.com – Google Search

jeroen

Posted in Development, Windows Development | Leave a Comment »

How do I pretty-print JSON in Delphi? – Stack Overflow

Posted by jpluimers on 2021/02/09

For my archive: the [WayBack] How do I pretty-print JSON in Delphi? – Stack Overflow answer by [WayBack] Bob:

If you do not want to use any external library, and you’re using a Delphi XE5 or newer, there is a very handy TJson.Format() function in the REST.Json unit.

uses json, REST.Json;

{ ... }    

function FormatJSON(json: String): String;
var
  tmpJson: TJsonObject;
begin
  tmpJson := TJSONObject.ParseJSONValue(json);
  Result := TJson.Format(tmpJson);

  FreeAndNil(tmpJson);
end;

–jeroen

Posted in Delphi, Development, JavaScript/ECMAScript, JSON, Scripting, Software Development | 2 Comments »

Twitter @Nick_Craver: “I’ve talked with so, so many new devs over the years and far too many are afraid to try because they’re afraid to fail. So do me a favor, share your failures […]”

Posted by jpluimers on 2021/02/04

Every now and then it is good to read back this [WayBack] thread by @Nick_Craver: “

I’ve talked with so, so many new devs over the years and far too many are afraid to try because they’re afraid to fafavor, share your failures.

So do me a favor, share your failures. Not just the successes. It’s not just about learning from them. Sometimes it’s just about people knowing they happen.

Reminder: you see the successes people are proud of and want to shout from the rooftops for all to see. Far, far fewer people share all the failures leading up to those successes. Yet those missteps are almost always far more numerous.

Hi, I’m a dev. I’ve caused more production outages that I can count. I’ve deleted a production database by accident. I’ve missed hundreds of bugs in code reviews. I try my best. I try to not repeat mistakes. It still happens sometimes. I still think my impact has been a net good.

[…]”

The thing about mistakes is that they do happen, and we need to learn from them. Almost always, it is useless to blame, but do your best to prevent them from happening again by doing blameless post-mortem.

We do however need to become better engineers, so this thread is relevant as well, because the impact of some is not been a net good:

[Cached] WayBack: thread by @www_ora_tion_ca: “This is wildly disingenuous, I speak as a flight instructor and major IT incident investigator. Modern software authors have the professional discipline of a cute puppy in comparison to aviation practitioners. […]”. quoting [WayBack] Alex Stamos on Twitter: “I agree with Chris. This is the kind of thinking that leads to “Why can’t we just have building codes for software? It worked to protect against earthquakes and fire!” Earthquakes and fire aren’t conscious adversaries. Try writing a standards document on how to win at chess.”

My biggest faults:

Read the rest of this entry »

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

delphi – Faster DirectoryExists function? – Stack Overflow

Posted by jpluimers on 2021/02/04

From a while back: [WayBack] delphi – Faster DirectoryExists function? – Stack Overflow:

Q

I use

DirectoryExists (const PathName : String);

to check if a directory is reachable from a computer or not. But if the directory does not exist and the path name is a network path, i.e.

\\computer1\Data

the method takes a very long time to return.

There must be a faster way to determine that a network folder is not reachable. Or can I configure some timeout parameter that DirectoryExists uses internally (I looked at the source code but it just delegates to GetFileAttributes which is defined in kernel32)?

Any ideas?

A

There is no faster way:

any function accessing anything on a remote share will timeout when that share is not available.

If the cause of your timeouts is automatic disconnecting of shares, then these link may help you:

If the application can continue without the completion of the check, then you can put the check in a separate thread, and upon completion of the check, you can update your status in the UI.

Be aware that when you try a multi-threading way, that you have to disprove your code is free of race-conditions and memory leaks. Time-outs in combination with exceptions usually make that a hard task.

Related:

–jeroen

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