Categories
FireMonkey MVP News VCL

Why I Keep Choosing Delphi

Turbo Pascal

Early on I learned Turbo Pascal, which was a huge step up from the Basic and Batch File programming I cut my teeth on. When Delphi came along I thought it was brilliant and fell in love immediately. I had no interest in learning other programming languages or tools. Delphi did it all, and that was great. I found myself plenty of work and enough to keep my interest.

C++Builder

I was curious about other programming languages, from an academic point of view. I took a night school class in Assembly. I had a smattering of C & C++. Looked at some Ruby (back before it was hip), Java, JavaScript, etc. Eventually, I found myself spending a few years debugging laser printers, which ran a combination of C/C++/COM all on a Linux platform.

C#

From there I went back to full-time Delphi programming, but the new company I was working for bought into the “there aren’t enough Delphi developers” myth and decided to move to C# & WinForms. We immediately were able to hire some new C# developers, but as we got to know them we found out they had more Delphi experience than C#, but they bought into the “there are no Delphi jobs” myth and rebranded themselves as C# developers. (This is what we call a circular argument or self-fulfilling prophecy.) In the end, the project took 4 times longer than it should have, despite having more developers, and “more modern developer tools.” They really should have stuck with Delphi.

Ruby

I moved to a new job doing Delphi development full time, and then that company bought into the C# & Silverlight are the future. Since I had C# experience, I started working on the new Silverlight front end. The back end and the desktop app remained in Delphi (with a little C++). We all know what happened with Silverlight (if you even remember it . . .)

JavaScript

From there I ended up really branching out. I did a lot more work with C#, Xamarin, Java, JavaScript, Objective-C, and Oxygene (known as Delphi Prism at the time). There was still some Delphi mixed in too. I taught a few classes and workshops on Android development with Java. I learned to appreciate some of the benefits, strengths, and qualities of each. I found things about all of them I liked (less so about Objective-C).

It was at this point I could see that most developer skills work across languages, tools, and platform. There is value in knowing and using multiple languages. The basic tenants of each language influence the way you do things in other languages, in a positive way, helping you to look at problems in a different way. There are some projects, platforms, and problems that are best suited to certain programming languages and tools. For example, if you are working with the web, you need to know at least some JavaScript, HTML & CSS (the latter two not being programming languages, but I digress), even if you are using some sort of abstraction layer.

Delphi Helmet

Throughout all of this, I still found myself choosing to Delphi for personal projects. Occasionally I’d try personal projects in other tools and languages as a way to get to know them better, but I still found Delphi to be a better solution for most general purpose projects. One of the defining characteristics of Delphi for why I keep coming back to it is that it makes the common tasks really, really easy while keeping the rest simple and possible.

Other tools that focus on productivity, make a small subset of tasks as easy as Delphi does, but also make anything beyond those tasks, or the that “ideal” scenario, hard or impossible. While other general purpose tools don’t do anything to optimize common scenarios, which makes simple tasks more complicated than they need to be.

Now with multi-platform development Delphi is more important than ever. The approach Delphi and FireMonkey provide make it quick and easy to do the most common tasks, while also keeping all the platform APIs and features within reach.

Delphi really invented the 3rd party component market as far as I am concerned. From the beginning, it shipped with all the source code for the VCL and also included a robust OpenTools API and component model making easy for others to extend the IDE, and build reusable components and libraries. All the technology partners are a huge part of why I choose Delphi.

Delphi also has a huge commitment to the code we as developers develop. I attend a lot of general software developer groups, and it is common to hear developers complaining about how they just finished porting their code to support a new version of their tools, only to have it all break again because a new release of their non-Delphi programming language or framework just came out. Often times they just throw it all out and rewrite to support a new version. Sure, Delphi it isn’t perfect, and sometimes there are incompatibilities or breaking changes from version to version, but by comparison, Delphi is so much better at this than any other language or platform out there that I have seen.

I started out choosing Delphi because it was what I knew. Now I choose Delphi because it gets the job done better than the alternatives. The fact it is faster for development is nice, but only part of the equation. I used to have a hat that said “Delphi does it all, especially Windows” and that is truer than ever today.

So why do you Choose Delphi? Share your reasons in the comments or on your blog #WhyIChooseDelphi

Categories
News

4 Years at Embarcadero Technologies

This week I am celebrating my 4 year anniversary at Embarcadero Technologies. Time has flown by and a lot has happened. Mostly a lot of good milestones. One of my favorite things is experimenting with developing on new devices, so I thought I would list some the new platforms and devices I’ve developed for with Delphi since joining Embarcadero.

  • Android support was released shortly after I joined Embarcadero. This was and is a huge deal. I think when Embarcadero started down the path to add mobile support iOS was much bigger than Android, but now that has decidedly tipped. iOS is still very popular, but Android is the more popular platform, especially for line of business type development.
  • Google Glass is just an Android platform, but the fact it worked out of the box with Delphi is a pretty big deal. I still have my Glass and use them from time to time. If I had prescription lenses or didn’t need my regular glasses I would probably wear them more. I am a big fan of wearable technology and the Android platform.
  • Android Wear is another Android device, but still great to work with and develop for. This just worked with Delphi. I’ve tried with a few different Android watches, but different manufactures, round and square displays, and they all worked great. Despite the much lower power on Android Wear devices Delphi apps still performed great thanks to the native compiled binaries.
  • Amazon Fire TV, FireTV Stick, Ooya, and other Android set top boxes all just worked with Delphi’s Android support. I even made a simple game to play to play with them. Sometimes when I see these new devices I wonder if it will require some effort to make it work, but typically it just works.
  • Emotiv EPOC EEG Headset is a Brain-Computer Interface that reads your thoughts and interfaces them directly to the computer. I toured a number of software developer conferences, including some keynotes, with my Delphi developed thought controlled Parrot AR Drone.
  • Bluetooth Heart Rate Monitors, Scales, etc. the scale was extra of fun because it didn’t have a GATT standard, so David and I spelunked it to get it to work. Found out the measurement was in some unusual metric measurement like decagrams, and had the high bit and low bit used to indicate something else.
  • Linux is the newest official platform to be added. Out of the box it is Linux server, but thanks to FMXLinux by KSDev you can build Linux GUI applications on it as well. Again it officially supports Redhat and Ubuntu, but most other common Linux distributions are reported as working as well.
  • Beacons are a cool new technology that provide proximity information, and thanks the triangulation between multiple Beacons you can do indoor location as well. The BeaconFence technology make it all even easier to work with too.
  • Raspberry Pi3, Beaglebone Black, and other Single Board Computers were fun to work with. Since they have ARM CPUs it is simple a matter of loading Android on and they work like a charm. Sometimes installing Android was the most challenging part.
  • Arduino isn’t a target directly for running a Delphi app on it, but when I used Boian Mitov’s amazing Visuino and then his Communication Lab components it is really easy to build an app on the Arduino and then talk to it from an app running on Delphi.
  • Latte Panda is an Intel + Windows 10 based SBC with an embedded Arduino chip. This is like the best of both worlds when it comes to SBC projects. It is a full fledged Windows 10 computer, but you can dual boot Linux (which I did). In theory you could install and run Delphi on it, but I wouldn’t recommend it. I did install Visuino though, and it could talk to the embedded Arduino just fine. A real thing of beauty.
  • REST Services aren’t really a device, but a lot of devices expose their data via REST Services. The built in REST Client Library and the new RAD Server REST Server solutions make it really easy to talk to pretty much any REST Server you encounter.
  • Chrome OS is Google’s entry into the OS market running on Chromebooks, which are halfway between a tablet and a laptop. Google recently started rolling out Android support on the latest Chromebooks, so I picked up Samsung Chromebook Pro and sure enough, Delphi Android apps work great on it. While I was in there poking around I discovered Chrome OS is running on Linux at the core, and since the Samsung Chromebook Pro has an Intel CPU I decided to try targeting it from Linux support, and it worked too. Now I am thinking this might be my new favorite laptop!

That is a lot of new devices and platforms in four years. And I know I didn’t get all of them (like the Chromecast, the Kinect, Philips Hue Lights, etc.) Just take a look at our supported IoT Device list. I am looking forward to what the next 4 years holds in store for Delphi, C++Builder and RAD Studio.

What is your favorite new platform for Delphi? Or maybe you are a big fan of the fact we now have the free Starter edition?

Categories
iOS News

The April 2017 Tokyo Hotfix Works with the new Xcode & iOS

Apple pushed out a new Xcode and iOS this week with WWDC. Naturally I updated and tried it. Xcode version 8.3.3 (8E3004b) and iOS version 10.3.2 (14F89). I’m running 10.2 Tokyo with the April 2017 Hotfix and it all worked as expected. I deployed to my iPad and the iPhone simulator (I don’t have an iPhone anymore, upgrade to a Pixel XL!)

Are you running Toyko 10.2 with the April 2017 Hotfix? There are updates coming too. Check out the roadmap to see what is planned for 10.2.1 & 10.2.2. Great new features and a lot of fixes too!

Categories
News

Rapid Prototyping Mobile Projects with Arduino and Open Hardware

These are the slides from my Mobile Dev and Test session on Rapid Prototyping Mobile Projects with Arduino and Open Hardware in San Diego. I’ll update later with links and more resources.

slides download (v0.9)

SlideShare

Visuino Links

Categories
News

Some Great Women of Programming

It frequently puzzles me that programming seems to be dominated by men when the founders of programming and many of the greatest programmers were women. I read an article that this may be contributed to by early home computers being advertised as game systems for boys, which tipped the scales temporarily.

Here are a few amazing women who pioneered the computer programing field.

Ada LovelaceLady Ada Lovelace (1815 – 1852) Invented the idea of programming. Her father Lord Byron was known for his poetry. Lovelace was a poet of mathematics.

[The Analytical Engine] might act upon other things besides number, were objects found whose mutual fundamental relations could be expressed by those of the abstract science of operations, and which should be also susceptible of adaptations to the action of the operating notation and mechanism of the engine…Supposing, for instance, that the fundamental relations of pitched sounds in the science of harmony and of musical composition were susceptible of such expression and adaptations, the engine might compose elaborate and scientific pieces of music of any degree of complexity or extent. –As quoted by Menabrea, Luigi (1842).

Grace Hopper“Amazing” Grace Murray Hopper (1906 – 1992) invented the idea of human readable programming languages, then created COBOL. She achieved the rank of Rear Admiral in the US Navy, then had a Missile Destroyer and Cray Supercomputer named after her. The term debugging was attributed to her discovering a moth in a computer at one point. She carried around a nanosecond worth of wire to help people understand the relation between size and speed of computers.

Humans are allergic to change. They love to say, “We’ve always done it this way.” I try to fight that. That’s why I have a clock on my wall that runs counter-clockwise.

Adele Goldstine (1920 – 1964) wrote the complete technical description for ENIAC, the first electronic digital computer. And the original programmers for ENIAC were also all women: Kay McNulty, Betty Jennings, Betty Snyder, Marlyn Meltzer, Fran Bilas, and Ruth Lichterman.Betty Jean Jennigs & Fran Bilas, ENIAC Programmers

Jean E. Sammet (1928 – ) developed the FORMAC programming language, a variation of FORTRAN.

Margaret Hamilton (1936 – ) Margaret Hamilton was the Director of the Software Engineering Division for the MIT Instrumentation Laboratory during the time that her division developed the on-board flight software for the Apollo space program. Also, in 1986 she became the founder and CEO of Hamilton Technologies, Inc. in Cambridge, Massachusetts, a company based around the Universal Systems Language.

Margaret Hamilton during the Apollo program
Margaret Hamilton during the Apollo program

My daughters have as much, if not more, interest in computer programming than my boys. I hope we will continue to see more amazing women in computer programming!

Categories
News

Keep Threading in Mind

In my interview with Martin he talked a lot about the importance of performance, which is one of the reasons he uses Delphi for his real-time lighting control systems. He said something along the lines that if you are not programming with threading in mind then you are never going to get good performance. That is good advice. Even cell phones have quad-core processors in them these days.

Keep Threading in Mind

 

Delphi includes a great Parallel Programming Library which I really like. There is also the ever popular OmniThreadLibrary. They both make parallel programming much easier. I just learned about a new helper library to make parallel programming even easier.

CocinAsync: A Delphi library to simplify coding and improve performance of asynchronous and multithreaded applications.

It includes a number of different units and helpers. According to Jason Southwell, the developer, he has found a “100 to 150% improvement in performance over equivalent generic container wrapped in a critical section.” So how does it do this? If you look at the page the first thing you see is a brilliant couple helpers: QueueIfInThread & SynchronizeIfInThread.

We all know it is important to make sure certain code is synchronized into the main thread, unfortunately we end up with multiple code paths some and some code could be executed in the main thread via one call, and a background thread in another call. Using this helper only performs the synchronization if the code was called from a background thread.

That is just one of the helper classes included in CocinAsync. Take a look at it and keep threading in mind.

Categories
Source Code

Advanced HTTP Hacking Webinar Code

You can find all the code from my HTTP webinar in my special HTTP folder.

[Project source code] [YouTube Replay]

This is the script I use to demonstrate HTTP Range requests through Telnet. Just copy and paste each block of code (including the trailing blank line) into a command window and it will run telnet and make the HTTP request. You can view the test file here. Read HTTP Status Codes (including 418), Methods, Headers, and Access Control (CORS).

telnet delphi.org 80
HEAD /http/httptestfile.txt HTTP/1.1
Host: delphi.org
Connection: close
telnet delphi.org 80
GET /http/httptestfile.txt HTTP/1.1
Host: delphi.org
Connection: close
telnet delphi.org 80
GET /http/httptestfile.txt HTTP/1.1
Host: delphi.org
Range: bytes=0-77
Connection: close
telnet delphi.org 80
GET /http/httptestfile.txt HTTP/1.1
Host: delphi.org
Range: bytes=115-154
Connection: close
telnet delphi.org 80
GET /http/httptestfile.txt HTTP/1.1
Host: delphi.org
Range: bytes=78-113
Connection: close
telnet delphi.org 80
GET /http/httptestfile.txt HTTP/1.1
Host: delphi.org	
Range: bytes=115-154,127-127
Connection: close

This last one stopped working because of a change on the web server.

Here are the images. They all are available as both JPG and BMP and are 640×472 in resolution.


original.jpg

blue.jpg

green.jpg

red.jpg

purple.jpg

teal.jpg

yellow.jpg

Here is the code I used to stream all 7 images into one image. HTTPClient is a TNetHTTPClient and HTTPReq is a TNetHTTPRequest on the form. The reason it uses Bitmap images is that they are an uncompressed stream of pixel data, so are easier to recombine into one image.

const
  baseurl: string = 'http://delphi.org/http/';
  files: array[0..5] of string = ('red.bmp','green.bmp','blue.bmp',
    'yellow.bmp','purple.bmp','teal.bmp');

procedure TForm34.Button1Click(Sender: TObject);
var
  resp: IHTTPResponse;
  chunk: Integer;
  mem: TMemoryStream;
  I: Integer;
begin
  resp := HTTPReq.Head(baseurl + 'original.bmp');
  chunk := resp.ContentLength div 12;
  ProgressBar1.Max := resp.ContentLength;
  resp := HTTPReq.Get(baseurl + 'original.bmp');
  mem := TMemoryStream.Create;
  try
    mem.LoadFromStream(resp.ContentStream);
    for I := 5 to 11 do
    begin
      ProgressBar1.Tag := chunk*i;
      if I < 11 then
        httpreq.CustomHeaders['Range'] := 'bytes=' + IntToStr(chunk*i) +'-' + IntToStr(chunk*i+chunk-1)
      else
        httpreq.CustomHeaders['Range'] := 'bytes=' + IntToStr(chunk*i) +'-';
      HTTPReq.MethodString := 'GET';
      button1.Text := files[i mod 6];
      HTTPReq.URL := baseurl + files[i mod 6];
      resp := HTTPReq.Execute();
      mem.Position := chunk*i;
      TMemoryStream(resp.ContentStream).SaveToStream(mem);
    end;
    Image1.Bitmap.LoadFromStream(mem);
  finally
    mem.DisposeOf;
  end;
end;

 

 

Categories
REST Source Code Tools

FireDAC MemTable Editing – New in 10.2 Tokyo

One of my favorite new features (beyond Linux) is the ability to edit the data in a TFDMemTable at design time. You could already edit the field defs, to set it up. This makes the TFDMemTable, which was already super flexible and powerful, even more flexible. You can use it to capture some small data at design time and then use visual live bindings or data binding to connect it to visual controls.

Edit TFDMemTable

Holger Flick has a great blog post on the topic too. Here is a video I made with Sarina that shows it in action.

What is your favorite new feature in Tokyo?

Categories
News Tools

Delphi Tokyo 10.2 Wallpaper

I’ve had a few requests for my Delphi Tokyo 10.2 wallpaper that I made. I found out that while this is a picture of Mt. Fuji in the background, this photo is from the Kyoto side, not the Tokyo side. I got the photo from Pixabay, which is a great free clip art site. They have many more Tokyo, Japan and Mt Fuji themed images if you want to make your own wallpaper.

Delphi Tokyo 10.2 WallpaperI purchased the sunglasses wearing spartan penguin from a different clipart site. The tattoo and scary eyes came from our internal creative team. I forget which one, but I’ve gotten a lot of mileage out of him. You can download my Photoshop file for this wallpaper if you want to tweak it.

Here is another collection of logos I put together for the T-Shirt contest. Pixabay also has pictures of speed, power, and success. I especially like this one:

Code Monkey Need BananaWhat terms do you use to describe Delphi, C++Builder, RAD Studio and the new 10.2 release? I’d love to see your wallpapers too!

Categories
News

What’s In a Name and Advocacy Defined

When I started at Embarcadero, David I. asked me what I wanted my title to be. I went with Developer Evangelist since that was David’s title, and then he added Engineer on because of my years as a Software Engineer. I traveled the world and The cool thing is I’ve gotten to contribute a few pieces of code to the best development tool on the planet since joining too, so I made good on the Engineer title.

Lead World Wide Developer Evangelist and Engineer

As a Developer Evangelist I’ve alway described my job as mostly education related. My job is to help developers be awesome by educating them on our tools and the craft of software development. I figure if I can help our developers be awesome then the rest will take care of itself.

I find I am frequently educating both ways though. Sure, I focus on creating educational content for our developers, but also I’ll be in a planning meeting and I bring feedback from all the developers back to the product management and R&D teams.

So I was thinking, Evangelism is kind of a one-way thing. Sure, it is an important part of what I do, but I want to focus more on conversations and the two-way communication. So to that end I am changing my title.

Chief Developer Advocate and Engineer

In my mind Advocacy is a better description of what I do.  I’ll continue to play the Embarcadero Drum like I always have (even before joining Embarcadero) but I’ll also focus on being an advocate for our developer community within Embarcadero. The more I can do to improve that two way communication the better it is for everyone.

Luckily I’m not alone in my advocacy role though. All of our Software Consultants and Support Engineers spend their days talking to you, our community, more than I do. They are regularly bringing your feedback to meetings and making suggestions. Our Product Management team is also out on the front lines, talking to customers and doing what they can to incorporate the needs of developers into our products.

A few other titles that were suggested:

  • Agent of Awesome Developer Technology
  • Master Chief Advocate
  • Geek Guru
  • Developer Rockstar
  • King of the Geeks
  • Top Nerd
  • Community Coordinator
  • He Who is Always Online
  • Mr. Overflowing Inbox

All of which I love, and are fairly accurate (especially the last two).