The Wiert Corner – irregular stream of stuff

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

  • My badges

  • Twitter Updates

  • 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

Turbo Pascal 7 compatible compiler for 8051 microcontrollers…

Posted by jpluimers on 2019/08/21

I had seen this before, but was glad about the reminder to put it in my blog: [WayBack] OMG, there is Turbo Pascal 7 compatible compiler for 8051 microcontrollers! http://turbo51.com – Primož Gabrijelčič – Google+:

[WayBack] turbo51.com: Full-featured free Pascal compiler for 8051 microcontrollers, Borland Turbo Pascal 7 syntax, multi-pass optimizer, generates bin, hex, OMF-51 and asm source.

Program Turbo51;
 
Uses FastCompiler, AdvancedOptimizations, SmartLinker, AseemblerFileGenerator;
 
//  Turbo51 is released as freeware. You can download it and use it for FREE.
//  However, if you like Turbo51 you can donate some small amount via PayPal.
//  Donations are a great way to show your appreciation for my software.
 
begin
  InstallAndConfigure;
  Repeat
    CreateProject;
    CompileProject;
    TestProject;
    While ThereIsAProblem do
    begin
      CheckCode;
      CheckDocumentation;
      TryAgain;
      Case ProblemSolved of
        True: Break;
        else  AskForHelp;
      end;
    end;
    If InstalledVersion < '0.1.3.17' then Update;
    If Satisfied then Donate ($20);
  until NoMoreProjects;
end.
a

–jeroen

Posted in Development, History, Pascal, Software Development, Turbo Pascal | Leave a Comment »

Some Markdown links on phrasing more difficult markdown for correct rendering

Posted by jpluimers on 2019/08/20

After blogging on Markdown notes in 2014, Markdown support has come a long way. It also means that the documents written in Markdown has become more complex, and that more tools can render it.

Given the vague aspects of many Markdown dialects, rendering can be troublesome (see my post Babelmark 2 online Markdown checker), so below are some links on some aspects I had trouble with getting right.

Note that there are two markdown linters:

Sometimes, issues are present in one, but not in the other; see:

The command line interface to the Ruby version is easier to install than the JavaScript version as everything is in one gemmdl, unlike the npm, where the cli is in markdown-cli and the library in markdownlint.

–jeroen

Related:

Read the rest of this entry »

Posted in *nix, *nix-tools, Development, Lightweight markup language, MarkDown, pandoc document converter, Power User, Ruby, Software Development | Leave a Comment »

Python line continuation: only use backslash if it gives cleaner code

Posted by jpluimers on 2019/08/20

Since Python is a [WayBack] line-oriented programming language, sometimes you want to wrap longer lines into more readable shorter ones.

Many people struggle with this, see for instance these questions (and excellent answers!):

This struggle is likely why it made it to the [WayBack] style guide. Relevant sections are below.

I had this struggle wile passing multiple parameters to a method creating a very long line, but found I did not need a line continuation as the Python language understands this construct perfectly fine:

    threadManager.append(
        UrlMonitorThread(monitor, "http://%s" % targetHost),
        SmtpMonitorThread(monitor, targetHost, 25),
        SmtpMonitorThread(monitor, targetHost, 587),
        SshMonitorThread(monitor, targetHost, 22))

You could use the line continuation backslash to do this, but often that is not needed or a better way exists (for instance wrapping an expression in parentheses), so here are are the relevant style guide sections:

Code lay-out

Indentation

Use 4 spaces per indentation level.

Continuation lines should align wrapped elements either vertically using Python’s implicit line joining inside parentheses, brackets and braces, or using a hanging indent[7]. When using a hanging indent the following should be considered; there should be no arguments on the first line and further indentation should be used to clearly distinguish itself as a continuation line.

Maximum Line Length

Limit all lines to a maximum of 79 characters.

For flowing long blocks of text with fewer structural restrictions (docstrings or comments), the line length should be limited to 72 characters.

Limiting the required editor window width makes it possible to have several files open side-by-side, and works well when using code review tools that present the two versions in adjacent columns.

The preferred way of wrapping long lines is by using Python’s implied line continuation inside parentheses, brackets and braces. Long lines can be broken over multiple lines by wrapping expressions in parentheses. These should be used in preference to using a backslash for line continuation.

Backslashes may still be appropriate at times. For example, long, multiple with-statements cannot use implicit continuation, so backslashes are acceptable:

with open('/path/to/some/file/you/want/to/read') as file_1, \
     open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Make sure to indent the continued line appropriately.

Should a line break before or after a binary operator?

For decades the recommended style was to break after binary operators. But this can hurt readability in two ways: the operators tend to get scattered across different columns on the screen, and each operator is moved away from its operand and onto the previous line. Here, the eye has to do extra work to tell which items are added and which are subtracted:


To solve this readability problem, mathematicians and their publishers follow the opposite convention. Donald Knuth explains the traditional rule in his Computers and Typesetting series: “Although formulas within a paragraph always break after binary operations and relations, displayed formulas always break before binary operations” [3].

Following the tradition from mathematics usually results in more readable code:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

In Python code, it is permissible to break before or after a binary operator, as long as the convention is consistent locally. For new code Knuth’s style is suggested.

–jeroen

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

… compare two JSON structures and pin-point … the differences – – Nicholas Ring – Google+

Posted by jpluimers on 2019/08/20

I’ve added a few WayBack/Archive.is links to the interesting comments by Zoë Peterson from Scooter Software (of Beyond Compare fame) at [WayBack] … compare two JSON structures and pin-point … the differences – – Nicholas Ring – Google+:

Beyond Compare 4 has an optional “JSON sorted” file format that uses jq to pretty print and sort JSON data before comparing it. It’s not included out of the box yet, but you can get a copy here:

If you’re interested in an actual algorithm and not just an app, I don’t have a suggestion handy, but could dig one up. Tree alignment is more complicated than sequence alignment and we did do research into it, but it was quite a few years ago and didn’t get incorporated into BC. XML alignment algorithms were being actively researched back in the aughts and they should trivially transfer to JSON.

It looks like our research mostly ended around 2002, and I wasn’t personally involved in it, so I don’t know how helpful this will be, but here’s what I have:

The general idea in the thread is that JSON – though not as formalised as XML – does have structure, so if you can normalise it, then XML ways of differencing should work.

Normalisation also means that you need to normalise any floating point, date time, escaping, quoting, etc. Maybe not for the faint of heart.

–jeroen

Posted in *nix, *nix-tools, Beyond Compare, Development, diff, JavaScript/ECMAScript, jq, JSON, Power User, Scripting, Software Development, XML, XML/XSD | Leave a Comment »

Enable/Disable Windows 10 “tray” notification area icons

Posted by jpluimers on 2019/08/19

It looks like they reorganised the way you can enable/disable the Windows Notification Area icons (often called “Icon Tray”) in Windows 10.

Up until Windows 8.1, you could run this:

%SystemRoot%\System32\rundll32.exe shell32.dll,Options_RunDLL 5

There you would end up editing the application specific icons.

As of Windows 10, you need to:

  1. Run %SystemRoot%\System32\rundll32.exe shell32.dll,Options_RunDLL 6
  2. Click on “Select which icons appear on the task bar” (or Dutch “Selecteren welke pictogrammen op de taakbalk worden weergegeven”)

So both the index changed, and you need an extra click to get at the application specific icons.

Further more, you can now only turn them on or off, where up until Windows 8.1, you could also choose only show notifications. I think on means only show notifications as for instance the Java Updater with a setting on on Windows 10 disappears after a Java Update has been installed, whereas on Windows 8.1 it would stay unless you switched from on to only show notifications.

The above commands are based on [WayBack] Create Direct Shortcut for “Notification Area Icons” in Windows Vista and Later – AskVG and

–jeroen

Posted in Power User, Windows, Windows 10 | Leave a Comment »

THE PRINT VERSION

Posted by jpluimers on 2019/08/19

Conference Call Bingo, the viral meme created by E Gilliam. Designed to bring hilarity to your daily drudgery.

Cool: [WayBackTHE PRINT VERSION – PDF

Other versions:

–jeroen

Via: [WayBack] This is one game I hate playing. – Steven Vaughan-Nichols – Google+

Read the rest of this entry »

Posted in Fun, LifeHacker, Power User, Quotes, T-Shirt quotes | Leave a Comment »

Windows: running “mklink” as Administrator “You do not have sufficient privilege to perform this operation.”

Posted by jpluimers on 2019/08/19

Via “mklink” “You do not have sufficient privilege to perform this operation.”:

The [WayBackmklink tool can create NTFS links so multiple directory entries point to the same object.

It requires the [WayBackSeCreateSymbolicLinkPrivilege (in English Windows versions [WayBack] “Create symbolic links”) which is by default not granted to users as it can expose security vulnerabilities.

Even if a user in the Windows Administrators group has the privilege, it still cannot be executed from a regular command-prompt:

C:\Users\Develope>mklink "%temp%\Recycler" c:\$RECYCLE.BIN
You do not have sufficient privilege to perform this operation.

If you grant a regular user the privilege you can execute if from a regular command prompt.

However, as member of the Administrators group, you have to run this from an elevated command-prompt:

C:\Windows\system32>mklink "%temp%\Recycler" c:\$RECYCLE.BIN
symbolic link created for C:\Users\Developer\AppData\Local\Temp\Recycler <<===>> c:\$RECYCLE.BIN

The reason is that members of the Administrators group get two security tokens when they logon: an elevated full-access token and a regular filtered access token.

They key here are the words full-access and filtered: the elevated token gets more access permissions than the account is configured for, but the regular token gets less access permissions than the account is configured for.

This means that a standard command prompt will not get all the access you might exec, as the regular token is the access permissions minus the filtered permissions.

By now you probably guessed that – despite the documentation [WayBack] Windows Vista Application Development Requirements for User Account Control Compatibility leaving out SeCreateSymbolicLinkPrivilege – that is actually part of the filter. So the regular command-prompt lacks the SeCreateSymbolicLinkPrivilege permission and gives you an error message when executing mklink.

This is opposite to a regular user: if you grant it the “Create Symbolic Links” any command-prompt will get the SeCreateSymbolicLinkPrivilege permission.

–jeroen

via:

Posted in Power User, Windows | Leave a Comment »

When archiving in the WayBack machine returns error 400: clear your cookies

Posted by jpluimers on 2019/08/16

When archiving pages in the WayBack machine, despite Privacy Badger having set to “save no cookies”, it still managed to set truckloads of cookies.

So I used the Chrome settings in chrome://settings/content/cookies to disable cookies and now everything is fine.

–jeroen

Read the rest of this entry »

Posted in Chrome, Google, Internet, InternetArchive, Power User, Privacy, WayBack machine | Leave a Comment »

Excel on Mac OS X: Insert, move, or delete page breaks in a sheet

Posted by jpluimers on 2019/08/16

Since I always get confused by the differences in Excel versions (not just between Mac OS X  and Windows):

In Excel for Mac, you can adjust where automatic page breaks occur, add your own page breaks manually, and remove manual page breaks.

Source: [WayBackInsert, move, or delete page breaks in a sheet.

–jeroen

Read the rest of this entry »

Posted in Excel, Office, Office 2011 for Mac, Power User | Leave a Comment »

Is This the Life We Really Want? : Roger Waters : Free Download & Streaming : Internet Archive

Posted by jpluimers on 2019/08/16

I forgot it was released, but then found back an old note to check it out:

[WayBackIs This the Life We Really Want? : Roger Waters : Free Download & Streaming : Internet Archive

I quick listen to a few tracks reminds me of The Wall.

jeroen.

Read the rest of this entry »

Posted in LifeHacker, Music, Power User | Leave a Comment »