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

Archive for the ‘Software Development’ Category

compiling – Where do executables look for shared objects at runtime? – Unix & Linux Stack Exchange

Posted by jpluimers on 2019/04/30

Thanks Gilles for answering [WayBackcompiling – Where do executables look for shared objects at runtime? – Unix & Linux Stack Exchange.

Abstract:

In a nutshell, when it’s looking for a dynamic library (.so file) the linker tries:

  • directories listed in the LD_LIBRARY_PATH environment variable (DYLD_LIBRARY_PATH on OSX);
  • directories listed in the executable’s rpath;
  • directories on the system search path, which (on Linux at least) consists of the entries in /etc/ld.so.conf plus /lib and /usr/lib.

–jeroen

Posted in Development, Software Development | Leave a Comment »

Does anyone have the source from the book: The Tomes of Delphi: Algorithms and Data Structures…

Posted by jpluimers on 2019/04/25

Since I need this one day: [WayBack] Does anyone have the source from the book: The Tomes of Delphi: Algorithms and Data Structures by Julian Bucknall? – John Kouraklis – Google+

–jeroen

Read the rest of this entry »

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

Getting rid of bugs: mark them as “new feature” – as cancelling a  THTTPClient.BeginGet() does not work as intended

Posted by jpluimers on 2019/04/24

I have seen this happen before, but it seems to be a habit on the Quality Portal: getting rid of bugs by marking them as “new feature”:

[WayBack] I’m using THTTPClient.BeginGet() to create an async get request to a webservice that holds a connection open until it has data to return (sort of like a… – Brian Ford – Google+. which basically was another person finding out about [RSP-20827] THTTPClient request can not be canceld – Embarcadero Technologies, which got marked (a month after submission!) as “Issue is reclassified as ‘New Feature'”.

I get why it happens (there was something exposed, but some of the functionality is missing a feature which needs to be added).

Marking it as such however sends the wrong signal to your users: we do not see bugs as bugs, so they get on the “new feature” pile with no estimate on when the feature will be done.

–jeroen

Posted in Delphi, Development, Issue/Bug tracking, Software Development | Leave a Comment »

Firefox 29 and up: “The connection has timed out”

Posted by jpluimers on 2019/04/24

A few years ago, Firefox changed the default “network.http.response.timeout” value from zero to 300 seconds (5 minutes).

Display style systems that show refreshing web pages, this can be a problem as when the connection to the web-server is unavailable for more than 5 minutes, then the page will show “The connection has timed out” and stop refreshing.

The solution – apart from fixing each and every connection problem – is to either restore the value or make it very long:

  • network.http.response.timeout=0
  • network.http.response.timeout=30000

Changing this works similarly like in A way to skip the Firefox “Well, this is embarrassing” during a sudden reboot « The Wiert Corner – irregular stream of stuff:

  • Open Firefox
  • Type about:config in the addressbar
  • Confirm the
    This might void your warranty!
    by clicking
    I accept the risk!
  • Search for network.http.response.timeout
  • Double click it so the value changes from the default value 0 to the user set value 0

–jeroen

Via:

Posted in Development, Firefox, Power User, Scripting, Software Development, Web Browsers, Web Development | Leave a Comment »

Fixed by Code: Match of the Day

Posted by jpluimers on 2019/04/24

Interesting use of OpenCV: archiving the web comics.

–jeroen

 

 

Posted in Development, Software Development | Leave a Comment »

Should you convert your Visual Basic .NET project to C#? Why and why not… | Tim Anderson’s IT Writing

Posted by jpluimers on 2019/04/23

Since I get this question every now and then: [WayBackShould you convert your Visual Basic .NET project to C#? Why and why not… | Tim Anderson’s IT Writing.

Via [WayBack] Should you convert your Visual Basic .NET project to C#? Why and why not… https://www.itwriting.com/blog/11089-should-you-convert-your-visual-basic-net-… – Ondrej Kelle – Google+

–jeroen

Posted in .NET, C#, C# 6 (Roslyn), Development, Software Development, VB.NET | Leave a Comment »

On my research list: Event Sourcing

Posted by jpluimers on 2019/04/23

On my research list: [WayBackEvent Sourcing

Capture all changes to an application state as a sequence of events.

I got there via a very interesting thread [WayBack] A foreword===Hello everybody, the two major things that were recently introduced into my software architecture which led to significantly better main… – Edwin Yip – Google+

–jeroen

Posted in Design Patterns, Development, Software Development | Leave a Comment »

InterBase/Firebird divisions: use E0 syntax to force floating point calculations

Posted by jpluimers on 2019/04/23

I was a bit baffled at the below results because in other other databases.

You need to use this kind of notation ####.0E0 to force an integer to be evaluated as floating point, which is an extra .0 than explained by [WayBacksql – Why does Firebird truncate decimal places when dividing? – Stack Overflow

I’m not the only person confused by this: [WayBack] [#CORE-2849] Simple mathematics gone wrong – Firebird RDBMS Issue Tracker.

I know that as of Firebird 2.1 you can use the [WayBackdateadd() function for calculations on timestamps, date or time values (hence the confusing name dateadd), but you don’t always have the delta readily available in one unit (second, minutes, etc) and for a mixed Firebird/InterBase deployment having one kind of logic is often preferred.

select 
        cast('now' as timestamp) as NowTimeStamp 
      , (15.0*(1.0/24.0/60.0)) as A15MinutesInDays 
      , (15.0/24.0/60.0) as B15MinutesInDays 
      , (15.0E0/24/60) as C15MinutesInDays 
      , cast('now' as timestamp) + (15.0*(1.0/24.0/60.0)) as AIn15MinutesTimeStamp 
      , cast('now' as timestamp) - (cast('now' as timestamp) + (15.0*(1.0/24.0/60.0))) as ADifferenceInDays 
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0*(1.0/24.0/60.0)))) * 24 as ADifferenceHours 
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0*(1.0/24.0/60.0)))) * 24*60 as ADifferenceMinutes 
      , cast('now' as timestamp) + (15.0/24.0/60.0) as BIn15MinutesTimeStamp  
      , cast('now' as timestamp) - (cast('now' as timestamp) + (15.0/24.0/60.0)) as BDifferenceDays  
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0/24.0/60.0))) * 24 as BDifferenceHours  
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0/24.0/60.0))) * 24*60 as BDifferenceMinutes  
      , cast('now' as timestamp) + (15.0E0/24/60) as CIn15MinutesTimeStamp  
      , cast('now' as timestamp) - (cast('now' as timestamp) + (15.0E0/24/60)) as CDifferenceDays  
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0E0/24/60))) * 24 as CDifferenceHours  
      , (cast('now' as timestamp) - (cast('now' as timestamp) + (15.0E0/24/60))) * 24*60 as CDifferenceMinutes  
      -- Firebird 2.1 and up: use dateadd , dateadd(minute, 15, cast('now' as timestamp)) as DIn15MinutesTimeStamp , cast('now' as timestamp) - dateadd(minute, 15, cast('now' as timestamp)) as DDifferenceInDays , (cast('now' as timestamp) - dateadd(minute, 15, cast('now' as timestamp))) * 24 as DDifferenceHours , (cast('now' as timestamp) - dateadd(minute, 15, cast('now' as timestamp))) * 24*60 as DDifferenceMinutes from rdb$database /* Transposed results are below. Excected values for: A15MINUTESINDAYS 0.0104166666666667 B15MINUTESINDAYS 0.0104166666666667 Transposed results: NOWTIMESTAMP 20-9-2017 20:31:40 A15MINUTESINDAYS 0 B15MINUTESINDAYS 0.01 C15MINUTESINDAYS 0.0104166666666667 AIN15MINUTESTIMESTAMP 20-9-2017 20:31:40 ADIFFERENCEINDAYS 0 ADIFFERENCEHOURS 0 ADIFFERENCEMINUTES 0 BIN15MINUTESTIMESTAMP 20-9-2017 20:46:04 BDIFFERENCEDAYS -0.01 BDIFFERENCEHOURS -0.24 BDIFFERENCEMINUTES -14.4 CIN15MINUTESTIMESTAMP 20-9-2017 20:46:40 CDIFFERENCEDAYS -0.010416667 CDIFFERENCEHOURS -0.250000008 CDIFFERENCEMINUTES -15.00000048 DIN15MINUTESTIMESTAMP 20-9-2017 20:46:40 DDIFFERENCEDAYS -0.010416667 DDIFFERENCEHOURS -0.250000008 DDIFFERENCEMINUTES -15.00000048 */

–jeroen

Posted in Database Development, Development, Firebird, Software Development | Leave a Comment »

Where do you place your unit uses?

Posted by jpluimers on 2019/04/18

Over the years, I have had the question of where to put uses list entries a lot.

Last year, there was one again from a very experienced developer: [WayBack] Where do you place your unit uses? Over the years, I’ve come to preferring to place my uses in the Interface section only, even if its types, constants… – Lars Fosdal – Google+

The answer is really simple, and comes down to this:

  • use only the units you need (Law of Demeter)
  • use the units as close as possible to where you need them (this helps Minimizing Scope which is related to Information Hiding and the Proximity Principle)

Besides these Clean Code and Code Complete arguments, there is another very important argument:

The larger the scope of a unit, the more resources it takes to compile your project.

This gets worse when you have cycles in your unit dependencies.

I think it gets more than progressively worse; I have seen ~5 million line projects use close to 2 gigabytes of RAM during compilation when they had deep/long cyclic dependencies, forcing a full project build with DDevExtensions configured correctly in order to avoid out-of-memory at all.

For the above question, the poll seems to indicate the public at large gets it right:

References

A few tips from the thread:

Read the rest of this entry »

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

The Fallacy of DRY – Entropy Wins

Posted by jpluimers on 2019/04/18

A must read post on why “Do Repeat Yourself” can be a good thing [WayBack/Archive.isThe Fallacy of DRY – Entropy Wins by Jeroen de Dauw (of WikiMedia Germany fame).

Ultimately, you want code to be easy to understand. This that when you apply the “Don’t Repeat Yourself” principle you need to ask yourself if the resulting code is still easy to understand.

He did some great talks too, for instance bit.ly/econ-cleancode, aan almost half our talk with open source slides which he [WayBackpresented during Source Code Berlin 2016

–jeroen

Read the rest of this entry »

Posted in Design Patterns, Development, DRY - Don't Repeat Yourself, Software Development | Leave a Comment »