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).

Categories
MVP News

Meet the Tokyo Engineers & MVP

I got to sit down with some of the engineers in Tokyo to talk about C++Builder, RAD Studio and Delphi. C++Builder is big in Japan. Maybe even bigger than Delphi (which is saying a lot.) It was great to put faces with the names of these great guys who I’ve only corresponded with over email or social media before.

Aiso-san, Mohri-san & Inoue-san are all software consultant engineers. Aiso-san and Inoue-san where part of the presentation #0315inTokyo with Fujii-san and I. The 4th engineer in the back of the photo below is Kenji Umeda, a support engineer that isn’t on Twitter for me to link to.

Kazutaka Aiso Haruyuki Mohri Kazuhiro INOUE
Kazutaka Aiso Haruyuki Mohri Kazuhiro Inoue
Tokyo Engineers

And here is a picture of Fujii-san and myself . . . . in the back you can see HOSOKAWA Jun, our MVP in Japan.

Fujii-san

Here is a couple better pictures . . .

HOSOKAWA Jun and Me

Including one from when we went to dinner . . . with Fujii-san and Aiso-san.

HOSOKAWA Jun

Here are a few more pictures of our fantastic dinner too, if you are into that sort of thing . . .

Dinner in Tokyo Dinner in Tokyo  Dinner in Tokyo
Dinner in Tokyo Dinner in Tokyo