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

Archive for the ‘Algorithms’ Category

Naming is hard so look at this list when you will name things: Approved Verbs for Windows PowerShell Commands

Posted by jpluimers on 2020/04/29

Naming is number # in the Programmers’ hardest tasks so when you have to name things, read [WayBack] Approved Verbs for Windows PowerShell Commands.

It is guidance on naming schemes and lists of appropriate nouns and verbs to use in names.

–jeroen

From twitter:

$PARAMETERS = get-command | where-object {$_.CommandType -eq "Cmdlet" } | select Parameters
$PARAMETER_KEYS = foreach ($P in $PARAMETERS)
{
  foreach ($K in $($P.Parameters | select keys))
  {
    $K.Keys
  }
}
$PARAMETER_KEYS | sort-object -unique

Resulting in this list with PowerShell 5.1.18362.752 on Windows 10.0.18363.815:

AccessMode
Action
Activity
Add
AddToHistoryHandler
Adjust
After
Alias
AliasDefinitions
AliasesToExport
All
AllMatches
AllowClobber
AllowRedirection
Amended
AnsiEscapeTimeout
Any
AppDomainName
Append
AppendPath
ApplicationArguments
ApplicationBase
ApplicationName
ArgumentList
Arguments
As
AsBaseObject
AsCustomObject
AsHashTable
AsHtml
AsJob
AsSecureString
AssembliesToLoad
Assembly
AssemblyName
AsString
Attachments
Attributes
Authentication
Author
Authority
AutoRemoveJob
AutoSize
Average
BackgroundColor
BaseDirectory
Bcc
Before
Begin
BellStyle
BinaryPathName
BindingVariable
Body
BodyAsHtml
Bound
BreakAll
Breakpoint
BriefDescription
BufferSize
CancelTimeout
CanonicalName
CaseSensitive
Category
CategoryActivity
CategoryReason
CategoryResourceFile
CategoryTargetName
CategoryTargetType
Cc
CContains
CEQ
Certificate
CertificateThumbprint
CGE
CGT
Character
ChildJobState
ChildPath
Chord
CimNamespace
CimResourceUri
CimSession
CIn
Class
CLE
CLike
ClrVersion
CLT
CMatch
Cmdlet
CmdletsToExport
CNE
CNotContains
CNotIn
CNotLike
CNotMatch
CodeDomProvider
Colors
Column
Command
CommandLine
CommandName
CommandType
CommandValidationHandler
ComObject
CompanyName
CompatiblePSEditions
CompilerParameters
Completed
CompletionQueryItems
Component
Compress
ComputerName
ConfigurationName
ConfigurationTypeName
Confirm
ConnectionUri
Container
ContainerId
Contains
Content
ContentType
Context
ContinuationPrompt
Copyright
Count
Credential
CssUri
Culture
CurrentOperation
Date
Day
Days
DcomAuthentication
Debug
Debugger
DefaultCommandPrefix
DefaultDisplayProperty
DefaultDisplayPropertySet
DefaultKeyPropertySet
Definition
DefinitionName
DefinitionPath
Delay
Delimiter
DeliveryNotificationOption
DependentServices
DependsOn
Depth
Descending
Description
Destination
DestinationPath
Detailed
DifferenceObject
DingDuration
DingTone
Directory
DirectRead
DisableKeepAlive
DisableNameChecking
DisplayError
DisplayHint
DisplayName
DomainCredential
DomainName
DotNetFrameworkVersion
Drive
DriveLetter
DscResourcesToExport
EditMode
EnableAllPrivileges
EnableNetworkAccess
Encoding
End
EntryType
EnvironmentVariables
EQ
ErrorAction
ErrorId
ErrorPopup
ErrorRecord
ErrorVariable
EventArguments
EventId
EventIdentifier
EventName
Example
Examples
Exception
Exclude
ExcludeDifferent
ExcludeProperty
ExecutionPolicy
Expand
ExpandProperty
Expression
ExtraPromptLineCount
File
FileList
FileName
FilePath
FileVersionInfo
Filter
FilterScript
First
For
Force
ForegroundColor
Format
FormatsToProcess
FormatTypeName
Forward
Fragment
From
FromSession
Full
FullyQualifiedModule
FullyQualifiedName
Function
Functionality
FunctionDefinitions
FunctionsToExport
GE
Global
GroupBy
GroupManagedServiceAccount
GT
Guid
HasMoreData
Head
Header
Headers
Height
HelpInfoUri
Hidden
HideComputerName
HideTableHeaders
HistoryNoDuplicates
HistorySavePath
HistorySaveStyle
HistorySearchCaseSensitive
HistorySearchCursorMovesToEnd
HostProcessInfo
Hour
Hours
IconUri
Id
IdleTimeout
IdleTimeoutSec
IgnoreWarnings
IgnoreWhiteSpace
Impersonation
In
Include
IncludeChildJob
IncludeEqual
IncludeExtent
IncludePortInSPN
IncludeScriptBlock
IncludeTotalCount
IncludeUserName
Independent
Index
InDisconnectedSession
InFile
InformationAction
InformationVariable
InheritPropertySerializationSet
InitializationScript
InputObject
InstanceId
Is
IsAbsolute
IsNot
IsValid
ItemType
Job
JobName
Keep
Language
LanguageMode
Last
LastStatus
LE
Leaf
LicenseUri
Like
Line
List
ListAvailable
ListenerOption
ListImported
LiteralName
LiteralPath
LoadUserProfile
LocalCredential
Locale
Location
LogName
LT
Match
MaxConcurrentCommandsPerSession
MaxConcurrentUsers
MaxConnectionRetryCount
MaxIdleTimeoutSec
Maximum
MaximumHistoryCount
MaximumKillRingCount
MaximumReceivedDataSizePerCommand
MaximumReceivedDataSizePerCommandMB
MaximumReceivedObjectSize
MaximumReceivedObjectSizeMB
MaximumRedirection
MaximumSize
MaximumVersion
MaxMemoryPerSessionMB
MaxProcessesPerSession
MaxSessions
MaxSessionsPerUser
MaxTriggerCount
MemberDefinition
MemberName
MemberType
Message
MessageData
MessageResourceFile
Method
Millisecond
Milliseconds
Minimum
MinimumVersion
Minute
Minutes
Mode
Module
ModuleInfo
ModuleList
ModulesToImport
ModuleVersion
Month
MountUserDrive
Name
Namespace
Native
NE
NestedModules
NewerThan
Newest
NewName
NoClobber
NoCommonParameter
NoCompression
NoElement
NoEncryption
NoEnumerate
NoMachineProfile
NoNewline
NoNewScope
NoNewWindow
NoQualifier
NoRecurse
NoServiceRestart
NotContains
NotePropertyMembers
NotePropertyName
NotePropertyValue
NotIn
NotLike
NotMatch
NoTypeInformation
Noun
NoWait
Object
Off
OlderThan
Online
OnType
OpenTimeout
OperationTimeout
Option
Options
OUPath
OutBuffer
OutFile
OutputAssembly
OutputBufferingMode
OutputMode
OutputModule
OutputType
OutTarget
OutVariable
OverflowAction
Paging
Parameter
ParameterName
ParameterResourceFile
ParameterType
Parent
ParentId
PassThru
Path
PathType
Pattern
PercentComplete
Persist
PipelineVariable
Port
PostContent
PowerShellHostName
PowerShellHostVersion
PowerShellVersion
PreContent
Prefix
PrependPath
Priority
PrivateData
Process
ProcessIdleTimeoutSec
ProcessName
ProcessorArchitecture
ProjectUri
Prompt
PromptText
Property
PropertyNames
PropertySerializationSet
PropertyType
Protocol
Proxy
ProxyAccessType
ProxyAuthentication
ProxyCredential
ProxyUseDefaultCredentials
PSDrive
PSEdition
PSHost
PSProvider
PSSession
PSVersion
PutType
Qualifier
Query
Quiet
Raw
RawData
ReadCount
ReadOnly
RecommendedAction
Recurse
RedirectStandardError
RedirectStandardInput
RedirectStandardOutput
ReferencedAssemblies
ReferenceObject
Refresh
Registered
Relative
ReleaseNotes
RemainingScripts
Remove
RemoveFileListener
RemoveListener
Repair
RepeatHeader
Replace
RequiredAssemblies
RequiredGroups
RequiredModules
RequiredServices
RequiredVersion
Resolve
Restart
RestorePoint
RestorePointType
RetentionDays
ReturnResult
Role
RoleDefinitions
RollbackPreference
Root
RootModule
RunAs32
RunAsAdministrator
RunAsCredential
RunAsVirtualAccount
RunAsVirtualAccountGroups
Runspace
RunspaceId
RunspaceInstanceId
RunspaceName
SchemaVersion
Scope
Script
ScriptBlock
ScriptsToProcess
Second
Seconds
SecondsRemaining
SecondValue
SecurityDescriptorSddl
Sender
Separator
SerializationDepth
SerializationMethod
Server
Session
SessionName
SessionOption
SessionType
SessionTypeOption
SessionVariable
SetSeed
ShowCommandInfo
ShowError
ShowSecurityDescriptorUI
ShowToolTips
ShowWindow
SimpleMatch
Skip
SkipCACheck
SkipCNCheck
SkipLast
SkipNetworkProfileCheck
SkipRevocationCheck
SmtpServer
Source
SourceId
SourceIdentifier
SourcePath
Stack
StackName
Start
StartupScript
StartupType
State
Static
Status
Step
Stream
Strict
StringData
StringSerializationSource
Subject
SubscriptionId
Sum
SupportedCommand
SupportEvent
SyncWindow
Syntax
System
Tags
Tail
TargetObject
TargetTypeForDeserialization
TemplateContent
TemplateFile
TextFormatType
ThreadApartmentState
ThreadOptions
ThrottleLimit
Timeout
TimeoutSec
TimeToLive
Title
To
ToSession
TotalCount
Trace
TransactedScript
Transcript
TranscriptDirectory
TransferEncoding
TransportOption
Type
TypeAdapter
TypeConverter
TypeData
TypeDefinition
TypeName
TypesToProcess
UFormat
UICulture
Unbound
Unique
UnjoinDomainCredential
Unsecure
UpdateTemplate
Uri
UseBasicParsing
UseCulture
UseDefaultCredential
UseDefaultCredentials
UseNewEnvironment
UserAgent
UserDriveMaximumSize
UserName
UseSharedProcess
UseSSL
UseTransaction
UseUTF16
UsingNamespace
Value
ValueOnly
Variable
VariableDefinitions
VariablesToExport
Verb
Verbose
Version
View
ViMode
ViModeIndicator
Visibility
VisibleAliases
VisibleCmdlets
VisibleExternalCommands
VisibleFunctions
VisibleProviders
VMId
VMName
Wait
WarningAction
WarningVariable
WebSession
WhatIf
Width
WindowStyle
Word
WordDelimiters
WorkgroupName
WorkingDirectory
Wrap
WriteEvents
WriteJobInResults
WsmanAuthentication
Xml
XPath
Year

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

Bipartite matching algorithm in Delphi… John Kouraklis – Google+

Posted by jpluimers on 2020/04/23

In the thread is an actual implementation: [WayBack] I am looking for an implementation of Bipartite matching algorithm in Delphi or Pascal. Does anyone have a suggestion? Thanks – John Kouraklis – Google+

As I probably need it one day (:

–jeroen

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

Hashes and their uses – The Isoblog.

Posted by jpluimers on 2020/04/09

A nice introduction to [WayBackHashes and their uses – The Isoblog covering:

  • Checksums
    • Digit sums as simple, weak checmsums
    • Better checksums: ISBN-10 as an example
    • Proper CRC checksums
  • Hashes for storage
    • Building dictionaries
    • Breaking dictionaries
    • Handling collisions
  • Cryptographic hashes

Via [WayBack] I needed to explain Bitcoin. In order to explain Bitcoin, I needed to explain Proof-of-Work and Hash structures. In order to explain Proof-of-Work and H… – Kristian Köhntopp – Google+

–jeroen

 

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

Why TimeZone and leap periods are such a pain

Posted by jpluimers on 2020/01/30

A cautionary tale on time zones, and the big warning on using a unix timestamp (only 18 years to go on that one…)

–jeroen

Read the rest of this entry »

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

Ubiquity: The End of (Numeric) Error

Posted by jpluimers on 2019/10/03

Interesting read: [WayBackUbiquity: The End of (Numeric) Error

Crunching numbers was the prime task of early computers. The common element of these early computers is they all used integer arithmetic. John Gustafson, one of the foremost experts in scientific computing, has proposed a new number format that provides more accurate answers than standard floats, yet saves space and energy. The new format might well revolutionize the way we do numerical calculations.

via:

–jeroen

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

Calculating CRC with a tiny (32 entry) lookup-table | Lentz family blog

Posted by jpluimers on 2019/06/27

For my archive:

I happened to notice that the Arduino OneWire library uses a 256 entry lookup table for its CRC calculations.

I did some research on this topic in 1992-1993, while working on Bulletin Board Systems, FidoNet code and file transfer protocols.

These days memory is not at a premium on most computers, however on Arduino and microcontroller environments it definitely is, and I happen to know that table-lookup CRC can be done using two 16-entry tables!

So I’ve dug up my documentation and code from the time, and applied it to the CRC-8 calculation for the Maxim (Dallas Semiconductor) OneWire bus protocol.

I think this provides a neat trade-off between code size and speed.

License For any of the below code, apply the following license (2-clause “simplified” BSD license), which should suffice for any use. If you do require another license, just ask.

Source: [WayBack/Archive.isCalculating CRC with a tiny (32 entry) lookup-table | Lentz family blog

The example on the page is for the CRC-8 implementation used in the [WayBack] 1-Wire Communication protocol – Wikipedia.

The generator works for CRC-8, CRC-16 and CRC-32 polynomials and can be downloaded here:

–jeroen

 

Posted in Algorithms, C, Development, Software Development | Leave a Comment »

Scheduled jobs and jitter…

Posted by jpluimers on 2019/05/23

Too bad G+ doesn’t allow the WayBack machine or Archive.is to archive the whole thread at [WayBack] [Archive.isDas es inzwischen fast überall Standard ist die Uhren mit einem guten Zeitsignal zu synchronisiseren (NTP, DCF-77, GPS etc) ist eigentlich eine gute Sache… – Kristian Köhntopp – Google+ so here are a few quotes below.

The generatel conclusions seem to be that:

This was the start:
Nils Ketelsen originally shared:

Guckt man live sieht es schon anders aus: Während die RunQueue meist so bei 4-5 liegt (bei 21vCPUs kein Problem) springt sie jede volle Minute einige Sekunden lang auf 20. Bei durch 2 Teilbaren Minuten auf ca. 40. Bei durch 10 Teilbaren Minuten auf 70, bei durch 15 teilbaren Minuten auf 150…. Ich habe eben durch einen schlecht getimten Toilettenbesuch die volle Stunde verpasst, das muss ich gleich mal anders hinbekommen, aber ich gehe davon aus, daß es da noch schlimmer ist.

And these some of the comments:

Read the rest of this entry »

Posted in *nix, *nix-tools, Algorithms, cron, Development, Power User, Software Development | Leave a Comment »

Fast inverse square root – Wikipedia

Posted by jpluimers on 2019/01/24

Cult code via [WayBack] Fast inverse square root – Wikipedia part of [WayBack] Quake-III-Arena/blob/master/code/game/q_math.c:

float Q_rsqrt( float number )
{
    long i;
    float x2, y;
    const float threehalfs = 1.5F;

    x2 = number * 0.5F;
    y  = number;
    i  = * ( long * ) &y;                       // evil floating point bit level hacking
    i  = 0x5f3759df - ( i >> 1 );               // what the fuck? 
    y  = * ( float * ) &i;
    y  = y * ( threehalfs - ( x2 * y * y ) );   // 1st iteration
// y  = y * ( threehalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

    return y;
}

It is a really fast way to approximate the square root for 32-bit IEEE754 calculations having origins around 1986:

  • [WayBackSymplectic Spacewar » Cleve’s Corner: Cleve Moler on Mathematics and Computing:

    Cleve Moler replied on June 27th, 2012 9:35 pm UTC :

    Jotaf — Thanks very much for your comment, and for reminding me about the fast inverse square root hack. I didn’t realize that the trick had attained a kind of cult status in the graphics community. The trick uses bit-fiddling integer operations on a floating point number to get a good starting approximation for Newton’s iteration. The Wikipedia article that you link to describes the trick in great detail, and also links to an article by Rys Sommefeldt about its origins. Sommefeldt goes back to the late ’80s and to me and my colleague Greg Walsh at Ardent Computer. I actually learned about trick from code written by Velvel Kahan and K.C. Ng at Berkeley around 1986. Here is a link to their description, in comments at the end of the fdlibm code for sqrt. http://www.netlib.org/fdlibm/e_sqrt.c . — Cleve

  • [WayBack] http://www.netlib.org/fdlibm/e_sqrt.c 

By now there is also a constant for 64-bit IEEE754 calculations 0x5fe6ec85e7de30da by [WayBack] 2003 research from Chris Lomont who also found a better 32-bit constant 0x5f375a86.

Note you need to be careful with boundary values like zero and infinity. This holds for approximations in general: [WayBackperformance – Why is SSE scalar sqrt(x) slower than rsqrt(x) * x? – Stack Overflow

–jeroen

Posted in Algorithms, C, Development, History, Software Development | Leave a Comment »

How to automatically choose a label color to contrast with background | TrendCT

Posted by jpluimers on 2018/11/14

Choosing label colours other than black or white is like making a dynamic mouse cursor that inverts the colours underneath it: it fails horribly in the low contrast regions, and looks very strange on pink-noise backgrounds.

This approach is uses black and white depending on the perceived brightness:

[WayBack] How to automatically choose a label color to contrast with background | TrendCT:

What would data viz be without labels? Just viz, that’s what. This guide aimed at web designers discusses how to choose a label text color with enough contrast.

Via: [WayBack] For all those people incapable of choosing the right color combinations. – Thomas Mueller (dummzeuch) – Google+

–jeroen

Posted in Algorithms, Color (software development), Development, Software Development, Usability, User Experience (ux) | Leave a Comment »

To help understanding combinations of boolean operators: Truth table – Wikipedia

Posted by jpluimers on 2018/10/04

Most software developers know they exist, but some (including me) find them hard to visualise, especially for combinations of operators, or for less common operators: the Truth table – Wikipedia.

The common operators that everyone seems to understand are these:

  • logical true
  • logical false
  • logical negation
  • logical and
  • logical or
  • logical xor

It becomes harder with a series of combinations, for instance series of and (not ...) and (not ...) and (not ...) – not to be confused with nand, similarly or (not ...) or (not ...) or (not ...) – not to be confused with nor, which both can be transformed according to the De Morgan’s laws – Wikipedia:

In set theory and Boolean algebra, these are written formally as

{\displaystyle {\begin{aligned}{\overline {A\cup B}}&={\overline {A}}\cap {\overline {B}},\\{\overline {A\cap B}}&={\overline {A}}\cup {\overline {B}},\end{aligned}}}

Using truth tables

Read the rest of this entry »

Posted in Algorithms, Conference Topics, Conferences, Development, Event, Software Development | 2 Comments »