Archive for the ‘Event’ Category
Posted by jpluimers on 2020/05/21
From [WayBack] Why would the compiler generate a "E2018 Record, object or class type required" helper when I use a ToUpperInvariant (or any TStringsHelper call) on t… – Jeroen Wiert Pluimers – Google+:
Why would the compiler generate a "E2018 Record, object or class type required" when I use a ToUpperInvariant (or any TStringsHelper call) on the Text property of a TEdit?
Full failing code is at [WayBack] https://gist.github.com/jpluimers/b5e3684f725216622bdcb80bf5f10698
Failing line is this:
Edit1.Text := Edit1.Text.ToUpperInvariant;
// the above line generates this error:
// [dcc32 Error] MainFormUnit.pas(29): E2018 Record, object or class type required
This fails as well:
Edit1.Text := TStringHelper.ToUpperInvariant(Edit1.Text);
Why would the compiler (in this case XE8) throw this error?
Note the workaround is simple:
var
lText: string;
begin
lText := Edit1.Text;
Edit1.Text := lText.ToUpperInvariant;
My suspicion is that the Edit property is of type TCaption which is type string.
Could it be that simple?
To which David Heffernan responded:
Yup, the issue is TCaption has no helper. Pretty distressing.
Typed types are indeed different types. They have been there for a long time (to facilitate generating different type information so you can for instance hook up different property editors to TCaption (a typed string) or TColor (a typed integer).
It is explained at [WayBack] Declaring Types. but has existed since Delphi 1 or Delphi 2.
More on the implications is at [WayBack] pascal – Delphi Type equivalence and Type equality syntax – Stack Overflow.
–jeroen
Read the rest of this entry »
Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »
Posted by jpluimers on 2020/04/14
I’ve used these excellent posts to find out which youtube-dl version started to exhibit troublesome NPO downloads, then later find the actual failing commit:
Why the effort? I needed an as recent as possible youtube-dl working on as many sites as possible because of some work preparation.
The first link is very important because brew versions and alternatives have stopped working some 6 years ago, even though they turn up high on Google searches for brew install specific version. Hence the quote from the first link:
Installing software packages on Mac is very easy with homebrew. You typically get the latest version, however often in production you do not have the latest version of a software package. Another use case is when you upgrade to the latest and you find out there is bug which blocks you doing something. In this case you would like to downgrade to the previous version until the bug is fixed.In both cases you need to install a specific version of a software package with homebrew on your Mac, which tends to be not that trivial. There is a lot of discussion about this on stackoverflow but some of them are outdated based on brew versions which is not available anymore.
Read the rest of this entry »
Posted in Apple, Conference Topics, Conferences, Development, DVCS - Distributed Version Control, Event, git, Home brew / homebrew, Power User, SocialMedia, Software Development, Source Code Management, YouTube | Leave a Comment »
Posted by jpluimers on 2020/03/26
Often when you send large emails the only reply you get is a non-descriptive message like 552 5.3.4 Message size exceeds fixed limit from the SMTP server without an indication what the limit actually is.
Most SMTP servers however implement extensions in the EHLO greeting that returns a SIZE mail parameter. You can query it by hand using this:
telnet aspmx.l.google.com smtp
Trying 108.177.119.27...
Connected to aspmx.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP 32si3005669edb.510 - gsmtp
EHLO example.org
250-mx.google.com at your service, [80.100.143.119]
250-SIZE 157286400
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-CHUNKING
250 SMTPUTF8
QUIT
221 2.0.0 closing connection 32si3005669edb.510 - gsmtp
Connection closed by foreign host.
There you can see the maximum message size at the time of writing is 157286400 bytes which is about 150 megabytes.
There is a nice Python script showing how to obtain it at [WayBack] Getting Information from EHLO | Erle Robotics Python Networking Gitbook Free (note this one does send an email, so you might want to trim the example if you just want to see the size).
More background reading:
Trimming down the Python script so it queries message size for each mail server of a domain
This turns out to be a tad more complex, because DNS functionality isn’t part of core Python, and the rdata part of DNS records ends with a dot, which might not be usable with the SMTP library.
References for me when trimming down:
–jeroen
Posted in Communications Development, Conference Topics, Conferences, Development, Event, Internet protocol suite, Power User, SMTP | Leave a Comment »
Posted by jpluimers on 2020/03/17
A few notes from my response to [WayBack] [Fatal error] F2084 Internal error : AV101E53EB-R0000000C-0 I’m getting this when trying to do some code completion. Any idea ? – Stéphane Wierzbicki – Google+:
This compiler related error usually made it go away for me either when it occurs during project compilation or when using code completion: Close the IDE. Delete your DCU files. Then restart the IDE.
Starting fresh gives a high chance if fixing this unless it is indeed a compiler related error in which case it returns. For that you need to trim down your code to see under which circumstances.
Reasoning (please shoot at it when things are wrong/missing):
Both the IDE code completion and the project compilation use the compiler. The DCU cache is shared between these compiler instances. The DCU cache depends on internal memory structures. Various pointer related errors (both from the IDE, compiler and 3rd party extensions) can damage this cache.
Especially weak IDE uses of the compiler are the find symbol and rename symbol functionalities. I’ve stopped using those about a decade ago.
Sometimes the F2084 (which I often mistype as F2048) is indeed an error in the compiler. Over the years, some of them have been fixed too. See my earlier articles on F2084.
–jeroen
Posted in Conference Topics, Conferences, Delphi, Development, Event, F2084, Software Development | Leave a Comment »
Posted by jpluimers on 2020/02/25
I missed this one, so I was glad I archived it because I was curious for Daan van der Werf – Delphi op de werkvloer “Groothandel & Magazijn”.
So here it is: [WayBack] Delphi Conference 2018 – Barnsten.com, with fixed and archived links where possible.
Presentations and code from the Delphi Conference 2018
…
- 09:30-10:30 – Keynote: Marco Cantú – Product Manager Delphi – “Delphi 10 for Windows 10 and beyond”
- 10:30-11:30 – Brian Long – Creative Delphi Debugging Techniques
- 11:50:12-40 – Brian Long – How to Access the Android API
- 11:50:12-40 – Bruno Fierens – A RADically new way to develop modern web applications
- 13:30-14:20 – Roald van Doorn – Continuous delivery with existing VCL Applications
- 13:30-14:20 – Daan van der Werf – Delphi op de werkvloer “Groothandel & Magazijn”
- 14:30-15:20 – Danny Wind – Micro Services and Progressive Web Apps (PWA) Delphi
- 14:30-15:20 – Bob Swart – Delphi en FireDAC Enterprise Connectors
- 15:40-16:30 – André Mussche – De opkomst van spraakherkenning
- 15:40-16:30 – Marco Cantù – RAD Server In Depth
–jeroen
Posted in Conferences, Delphi, Development, Event, Software Development | 2 Comments »
Posted by jpluimers on 2020/02/12
[WayBack] Alex Thissen @ Techorama Netherlands 2018: Building real world production-ready Web API’s with .NET Core
Follow [WayBack] Alex Thissen(@alexthissen) on Twitter
Pictures taken during session (likely in reverse order; needs cleanup of duplicates/blurs).
Many more [WayBack] Techorama 2018 Netherlands stuff at:
More pictures I took during sessions:
They are in reverse order of the what I attended of the [WayBack] Techorama Netherlands 2018: Schedule: Pathé, Ede, The Netherlands – See the full schedule of events happening Oct 2 – 3, 2018 and explore the directory of Speakers & Attendees.
Sessions I could archive, or find recordings of:
--jeroen
Read the rest of this entry »
Posted in .NET, .NET Standard, ASP.NET, Conferences, Development, Event, Software Development | Leave a Comment »
Posted by jpluimers on 2020/02/05
I could not find any official place where ReturnAddress is documented even though it is used at quite a few places in the RTL, VCL, FMX and 3rd party libraries like DUnitX, Spring4D, JCL, ReportBuilder, TeeChart.
I tried searching it in the contexts of Delphi 2007, Delphi 2009, but there is only a [Archive.is] different System.ObjAuto.TParameters.ReturnAddress documented in XE2 and higher.
procedure Abort;
begin
raise EAbort.CreateRes(@SOperationAborted) at ReturnAddress;
end;
There is a (usually broken*) ReturnAddr function used in various places of the RTL/VCL/FMX and (therefore wrongfully copied) in many other peoples code.
function ReturnAddr: Pointer;
// From classes.pas
asm
MOV EAX,[EBP+4] // sysutils.pas says [EBP-4], but this works !
end;
- See the above link; I think this was fixed in Delphi XE, but the issue is still open.
Related to the above is the documented ExceptAddr.
I’ve used this in my ExceptionHelperUnit to build a GetStackTrace function in the example gist below.
I found these posts documenting the behaviour of the above intrinsic functions and more:
–jeroen
Read the rest of this entry »
Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »
Posted by jpluimers on 2020/01/28
Last week in Delphi developer switching to C# – Stack Overflow « The Wiert Corner – irregular stream of stuff I wrote about having a broad toolset.
Having such a toolset however does not mean you should stuff your project with dependencies. Choosing a limited set of tools is a very important part of building solid projects.
It does not mean you should avoid dependencies, just that you need to be aware on them and how they add up.
To get a feel for that, the comics on the right and below.
Sources:
Read the rest of this entry »
Posted in Comics, Conference Topics, Conferences, Development, Event, Fun, Software Development | Leave a Comment »
Posted by jpluimers on 2020/01/21
For my link archive in case I ever need to do Delphi generic type matching on intrinsic types. This will be tricky as you can have typed types like [WayBack] type TDate = type TDateTime since the early Delphi ages.
[WayBack] Hi, by using compiler intrinsics, is it possible to check if a generic type parameter is an unsigned integer? – Malcon X Portela – Google+
It will probably come down to fast intrinsic type mapping and slower typed type mapping.
The above WayBack link contains the most important bits of the Google+ post:
Hi, by using compiler intrinsics, is it possible to check if a generic type parameter is an unsigned integer? I have the following code:
function TChecker<T>.CheckIsUnsigned: Boolean;
begin
if GetTypeKind(T) = tkInteger then
begin
if SizeOf(T) = 4 then
begin
// TODO: Check if it is an unsigned 32-bit integer
Result := True;
end else if SizeOf(T) = 2 then
begin
// TODO: Check if it is an unsigned 16-bit integer
Result := True;
end else
begin
// TODO: Check if it is an unsigned 8-bit integer
Result := True;
end;
end else
begin
Result := False;
end;
end;
The code should return True only if the ‘T’ generic type parameter is an unsigned integer. I remember that +Stefan Glienke posted here some code that can do this trick, however, I am not able to find that now.
Thanks!
Hi +Jeroen Wiert Pluimers, my answer can be a bit disappointing, sorry :( Some time after writing this question here, I just realized which for the things I was originally trying to do, being signed or unsigned would not change anything on the final result hehehehe :D But from this amazing project https://github.com/d-mozulyov/Rapid.Generics (entire credits goes to Dmitry Mozulyov for the magic), it is possible to write the check to the generic type parameter in order to identify if it is a 32-bit/64-bit signed or unsigned number.
LTypeData := PTypeInfo(TypeInfo(T)).TypeData;
case GetTypeKind(T) of
tkInteger:
begin
{case LTypeData.OrdType of
otSLong: Writeln('32-bit signed');
otULong: Writeln('32-bit unsigned');
end;}
// the above code does the same thing
if LTypeData.MaxValue > LTypeData.MinValue then
begin
Writeln('32-bit signed');
end else
begin
Writeln('32-bit unsigned');
end;
end;
tkInt64:
begin
if LTypeData.MaxInt64Value > LTypeData.MinInt64Value then
begin
Writeln('64-bit signed');
end else
begin
Writeln('64-bit unsigned');
end;
end;
end;
The [WayBack] Rapid.Generics project is indeed cool, but unmaintained and has no unit tests. The main code is in some [Wayback] 30k lines Rapid.Generics.pas unit with some cool ideas and implementations. Hopefully people will find time to integrate some of the ideas there into basically the only well maintained Delphi generics library Spring4D.
A big limitation might be that the code is Delphi XE8 and up only, whereas Spring4D supports older Delphi versions.
–jeroen
Posted in Conference Topics, Conferences, Delphi, Development, Event, Software Development | Leave a Comment »