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

Archive for February, 2017

Apple ][ history – Nibble magazine

Posted by jpluimers on 2017/02/16

I recently found some old magazine issues of my early programming escapades. It reminded me of the really old days where – as a school kid – I tried to buy Nibble magazine at a regular base. It was expensive (I think it was around 8 Dutch Guilders (or NLG) – close to EUR 4 – which was a lot for me, though less expensive than diskettes that were like NLG 10 each).

But it was fun as the magazine focussed at computer programs and programming transitioned my life. From Integer Basic via AppleSoft Basic (and various smaller attempts in FORTH, MuSimp, LISA Assembler and LOGO) to Turbo Pascal on CP/M.

Recently I learned that all issues (16k pages total!) have been scanned and OCR-ed and can be obtained on DVD for a modest price. Even better: all their software is available for free.

Just follow these links:

For some history:

–jeroen

Posted in //e, 6502, Apple, Apple ][, Development, History, Pascal, Power User, Software Development, Turbo Pascal | Leave a Comment »

How-To: Create a free Apple developer account for sideloading apps | 9to5Mac

Posted by jpluimers on 2017/02/16

Interesting: Starting with Xcode 7, Apple made it possible to sideload apps on the iPhone, iPad, and Apple TV using a free Apple ID. Although a paid developer account is still required to deploy apps to the App…: How-To: Create a free Apple developer account for sideloading apps | 9to5Mac

Posted in Apple TV, Development, iOS, iOS Development, iPad, iPhone, iPod touch, Mobile Development, Power User, Software Development, xCode/Mac/iPad/iPhone/iOS/cocoa | Leave a Comment »

Intel SSD back to life success story (using Lin… |Intel Communities

Posted by jpluimers on 2017/02/15

As many of other guys who have experienced that, I woke up one morning with “Operating system not found” and BAD_CTX as serial number. I was thousands miles from home and I only had the laptop itself and Ubuntu Live CD. I immediately started reading this forum and found the following: – the

[WayBack] Intel SSD back to life success story (using Lin… |Intel Communities

–jeroen

Posted in Uncategorized | 1 Comment »

HashLib4Pascal is a Delphi/FPC compatible library that provides an easy to use interface for computing hashes and checksums of strings (with a specified encoding), files, streams, byte arrays and untyped data to mention but a few.

Posted by jpluimers on 2017/02/15

One day I will need lots of hashing in Delphi: Xor-el/HashLib4Pascal: HashLib4Pascal is a Delphi/FPC compatible library that provides an easy to use interface for computing hashes and checksums of strings (with a specified encoding), files, streams, byte arrays and untyped data to mention but a few. [WayBack]

via: Hello all,I made a port of “HashLib” (http://hashlib.codeplex.com/) “with some fixes, additions and modifications” for Delphi (2010 ( I hope ) and above)… – Ugochukwu Mmaduekwe – Google+ [WayBack]

It’s a port of the C# HashLib – Home [WayBack]

Another fork is at https://github.com/bonesoul/HashLib

–jeroen

Posted in .NET, C#, Delphi, Delphi 10 Seattle, Delphi 10.1 Berlin (BigBen), Delphi 2010, Delphi XE, Delphi XE2, Delphi XE3, Delphi XE4, Delphi XE5, Delphi XE6, Delphi XE7, Delphi XE8, Development, Encoding, FreePascal, Pascal, Software Development | Leave a Comment »

Firebird – adjusting Delphi stored TDateTime (or OLE Automation date) fields that contain Dates, Times or DateTimes

Posted by jpluimers on 2017/02/15

Delphi programmers often store TDateTime (be it date, time or date+time values) as floating points in the database. They take the easy way out basically because TDateTime is nothing but a typed alias for the Delphi Double type (which is equivalent to the IEEE 754 double-precision binary floating-point format: binary64 type) .

Actually, TDateTime is equivalent to the OLE Automation date (which is described in the remarks of  DateTime.ToOADate Method (System)) which has an epoch of  midnight at 1899-12-30 (to be compatible with Lotus-123 including its leap-year-bug, background on that is at Why are the Microsoft Office file formats so complicated? (And some workarounds) – Joel on Software).

Anyway: the definition is this:

An OLE Automation date is implemented as a floating-point number whose integral component is the number of days before or after midnight, 30 December 1899, and whose fractional component represents the time on that day divided by 24. For example, midnight, 31 December 1899 is represented by 1.0; 6 A.M., 1 January 1900 is represented by 2.25; midnight, 29 December 1899 is represented by -1.0; and 6 A.M., 29 December 1899 is represented by -1.25.

The base OLE Automation Date is midnight, 30 December 1899. The minimum OLE Automation date is midnight, 1 January 0100. The maximum OLE Automation Date is the same as DateTime.MaxValue, the last moment of 31 December 9999.

The sample values are remarkably the same as the ones for TDateTime:

Value Description
0 December 30, 1899; 12:00 A.M.
2.75 January 1, 1900; 6:00 P.M.
-1.25 December 29, 1899; 6:00 A.M.
35065 January 1, 1996; 12:00 A.M.

The below SQL example uses the Firebird date/time/timestamp casting shortcuts:

select date      '1899-12-30'              + 42452.670590278 as Date20160323,
       timestamp '1899-12-30 00:00:00.000' + 42452.670590278 as DateTime20160323160539,
       time       '00:00:00'                + 60*60*24 * 0.5 as Noon,
       timestamp '1899-12-30 00:00:00.000' + 0          as DateTime18991230Midnight,
       timestamp '1899-12-30 00:00:00.000' + 2.75           as DateTime190001011800,
       timestamp '1899-12-30 00:00:00.000' + -1.25          as DateTime189912290600,
       timestamp '1899-12-30 00:00:00.000' + 35065          as DateTime19960101Midnight
from   rdb$database

Which – using DMY date format and 24 hour clock format settings – results in:

DATE20160323 DATETIME20160323160539 NOON       DATETIME18991230MIDNIGHT DATETIME190001011800 DATETIME189912290600 DATETIME19960101MIDNIGHT CONSTANT
---------------------------------------------------------------------------------------------------------------------------------------------------
24-3-2016    23-3-2016 16:05:39     12:00:00   30-12-1899               1-1-1900 18:00:00    28-12-1899 18:00:00  1-1-1996

Which basically taught me a new thing about firebird: Times are calculated in seconds, so date fractions need to be multiplied by 60 * 60 * 24.

You can see this in the following query and results:

select (cast('Now' as time) - cast('00:00:00.000' as time)) / (24 * 60 * 60) as DelphiTime,
        cast('Now' as time) - cast('00:00:00.000' as time) as SecondsSinceMidnight,
        cast('Now' as date) - cast('1899-12-30' as date) as DelphiDate,
        cast('Now' as timestamp) - cast('1899-12-30 00:00:00.000' as timestamp) as DelphiDateTime,
        24 * 60 * 60 as SecondsPerDay,
        cast('Now' as date) as "Date",
        cast('Now' as time) as "Time",
        cast('Now' as timestamp) as "TimeStamp"
from rdb$database
DELPHITIME           SECONDSSINCEMIDNIGHT DELPHIDATE  DELPHIDATETIME       SECONDSPERDAY        Date       Time         TimeStamp          
------------------------------------------------------------------------------------------------------------------------------------------------
0,4366               37722,284            42835       42835,436600509      86400                10-4-2017  10:28:42     10-4-2017 10:28:42      

Note this post is complementary to Date format converter from Text or Unix/Mac/Filetime/Microsoft to virtually any readable form (which mentions the wrong Microsoft epoch as it should be 1899-12-30 midnight): the above shows how to do the conversion to readable dates in Firebird (might work in InterBase as well, but I’ve not used that for a long time).

–jeroen

PS: for Microsoft SQL Server: passing dates to the sql server: pass it as float – 2. -2 is the difference between delphi tdatetime start date and mssql start date.

 

Posted in Algorithms, Database Development, Development, Firebird, Floating point handling, Software Development | 2 Comments »

MahdiSafsafi/delphi-detours-library: Delphi Detours Library

Posted by jpluimers on 2017/02/14

I didn’t know about the MahdiSafsafi/delphi-detours-library: Delphi Detours Library [WayBack] until this question turned up:

Does anybody have a version of Delphi Detours (https://github.com/MahdiSafsafi/delphi-detours-library) that works with Delphi 2007?  – Primož Gabrijelčič – Google+ [WayBack]

No need for it yet, but it will be useful one day.

–jeroen

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

How to speed up Count(*) in InterBase/Firebird – Stack Overflow

Posted by jpluimers on 2017/02/14

The drawback of how the multigenerational architecture is implemented:

Even when an index is available on the column or columns included in the COUNT, all records must be visited in order to see if they are visible under the current transaction isolation.

The benefits of the MGA (multi-generational architecture) having far less locking than other architectures means you need to be careful using the COUNT operator on large result-sets.

In many systems the exact result of a COUNT isn’t very important, so you can use the workaround referred from How to speed up Count(*) in Interbase/Firebird – Stack Overflow

See also:

–jeroen

via: Select count(*) is slow

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

Want for birthday or X-mas: “The Lamp” and “BBS: The documentary”

Posted by jpluimers on 2017/02/13

Via KansasFest 2009 Keynote with Jason Scott | KansasFest [WayBack] I bumped into these documentaries by Jason Scott Sadofsky:

The BBS Documentary DVDs are No Longer for Sale [WayBack] though “There will be digital copies sold in the future!” and there is “BBS The.Documentary Part 1 – Baud – YouTube”

There are upcoming documentaries as well, including one on the 6502.

–jeroen

Posted in 6502, History | Leave a Comment »

GSM/3G/4G/LTE/… enable or disable caller ID when calling

Posted by jpluimers on 2017/02/13

When testing the setup of a Fritz!Box 7490 with fiber connection, routing anonymous/withheld ISDN calls to a new answering machine I needed to test if only Caller ID calls were getting through.

The easiest was to do this from my mobile phone.

Izzy explained how to in callerid – How can I make anonymous calls for everyone but contact list? – Android Enthusiasts Stack Exchange.

Basically all cellular networks based on GSM or derived technologies allow you to prefix any phone numbers with:

–jeroen

Posted in Cellular telephony, ISDN, LifeHacker, Power User, PSTN, Telephony | Leave a Comment »

Gitkraken – free and commercial edition to raise funds for diabetes

Posted by jpluimers on 2017/02/10

This is a good idea. This software company has a free and commercial edition of their product. The paid version helps to raise funds for Diabetes… – Warren Postma – Google+

I didn’t know about this. When SourceTree doesn’t improve, I might try it one day.

–jeroen

Posted in Development, DVCS - Distributed Version Control, git, GitKraven, Mercurial/Hg, Source Code Management, SourceTree | 1 Comment »