Cool App Contender: Rain in Denmark

Embarcadero Cool App ContestA few years ago my wife and I flew to Denmark to meet Jens Fudge and I had the great opportunity to speak at the annual DAPUG 2 day event. My first trip to Denmark was a great treat. This brings me to the next contender in the Embarcadero Cool App Contest: Rain in Denmark by DHI Group.

Rain in Denmark

A complete (Windows , OS X, iOS &  Android) cross platform suite of apps to access the Local Area Weather Radars installed here in Denmark by DHI Group. “This app provides you with up to date information on rain in parts of Denmark using DHI’s Local Area Weather Radar (LAWR). You can animate the radar images, load data from specific period, see plots of mean area precipitation for selected calculation areas and more.”

Rain in Denmark is built with RAD Studio using Delphi, FireMonkey, TMS WebGMapsRemObjects SDK and AppAnalytics with support for Windows, OS X, iOS & Android.

Check out the video, or download the app and check it out!

Download on the App StoreDownload on the Mac App StoreGet it on Google Play

Windows download coming soon!

Built with RAD StudioPowered by FireMonkey

 

 

Posted in News | Leave a comment

Cool App Contender: BriskBard

Embarcadero Cool App ContestI’ve been a convert to Chrome for a while now, but BriskBard may just be the browser to convert me. It is written in Delphi, and is a contender for the Embarcadero Cool App Contest. BriskBard is a complete Internet suite capable of doing the most common tasks in Internet with only one program.

BriskBard

BriskBard is the new web browser for Windows that includes an email client, a media player, a news aggregator, a contact manager, an FTP client, a newsgroups reader, instant messaging, and several web developer tools. BriskBard has all the features most of the people use and some advanced features for web developers. Its user interface is easy, fast and intuitive with many configuration options.

Powered by Embarcadero DelphiBriskBard is built with Embarcadero Delphi for Windows using Indy, VCL, OpenSSL, SQLite and Hunspell.

It has an impressive list of features. Check out the video or download the fully featured 30 day trial in English and Spanish. Other languages can be added via the language manager.

Posted in News | 2 Comments

Cool App Contender: AtlasBuilder

Embarcadero Cool App ContestThe next contender for the Cool App Contest that I am highlighting is AtlasBuilder by Kollányi Péter from Hungary.

Atlas Builder
AtlasBuilder makes it easy to create an atlas and pack it into an encrypted db. Then generate a ‘viewer’ app. Built with Delphi

Built with Delphi for Windows using VCL, the Parallel Programming Library, FireDAC, DevExpress and TatukGIS DK.

Check out the video (no audio) for a quick demo, or follow them on Facebook for updates.

 

Posted in News | Leave a comment

Cool App Contender: HOP (Hunger Obesity Prevention) App

Embarcadero Cool App ContestThere were a lot of amazing apps submitted for the Embarcadero Cool App Contest. Last month’s winner was 1Password for Windows. Any entries that don’t win one month, are automatically eligible for the next month. We will have our next winner shortly.

In the meantime I thought I would highlight a few of the entries that caught my attention. They are all very cool apps.

Sherwood Middle SchoolThe first one I want to highlight is by two sixth grade girls, Suresh and Safalta, from Sherwood Middle School in Shrewsbury, Massachusetts. They created an app to help tackle two big problems at the same time: Hunger and Obesity.

The idea is brilliant: Educate users on lowering their caloric intake to reduce obesity, and then provide a way for them to donate the money they would have spent on junk food to those who are hungry.

One thing I really liked about this entry is they didn’t start with Delphi. Their school taught them to use Java and Python, and they tried a few different tools. They found they were difficult to use, hard to understand and took a lot more code than they wanted. Then they tried Embarcadero Delphi and found it really easy. As they put it, “Embarcadero provided [an] easy button tool for compiling codes for multiple devices including android, iOS etc. which helped us to develop app quite faster. We are planning to recommend the use of Embarcadero [Delphi] to other kids interested in developing apps.”

They used Delphi with FireMonkey, LiveBindings, FireDAC and SQLite to build their app for iOS and Android. Watch their video as they explain obesity and how their app works.

I’ll share some of what they wrote in their entry too.

Obesity in children and young adults is a global health problem among developed countries. United States ranks first in the world with 35% of male, 39.5% female children, and young adults suffering with obesity. Obesity in children affect an estimated 41 million children worldwide, as per World Health Organization (WHO) and United Nations Children’s Emergency Fund (UNICEF). Obesity leads to major health problems including, type 2 diabetes, high blood pressure, high cholesterol levels, fatty liver disease, gallstones and heart diseases.

Similarly, malnourishment and hunger in poor countries affect 159 million children causing nearly 3.1 million children to die each year in the entire world, as per WHO and UNICEF.

Our goal is to help and motivate kids from developed nations by encouraging them to lose weight by eating less, and use the money saved, to help feed hungry and malnourished children living in poor countries. To achieve this goal, our objective is

  1. To provide a free to all Hunger and Obesity Prevention (HOP) App to help children with obesity, encourage them to lose weight through making conscious efforts to engage in physical activity, avoid junk food and promote eating healthy foods.
  2. Then provide an opportunity for HOP participants to celebrate their achievement, by pledging to donate 25 cents/pound lost to UNICEF for feeding hungry children, as a motivation to lose weight for greater cause.

Purpose: Overeating and genetic reasons are important factors in causing obesity. Eating more food, particularly junk food and lack of physical activity leads to accumulation of excess calories to store as body fat, which then results in weight gain and obesity. Obesity is preventable or reversed by consciously taking control of what you eat, and burning excess calories from the body by exercising regularly.

Our long-term goal is to make an advanced version of HOP with ability to take pictures of food/snacks/drinks and estimate calorie contents, select meals and retrieve calorie information from restaurant menus to keep track of calories consumed each day. In addition, we plan to integrate activity-monitoring apps like “Fitbit” or “Pacer” and precisely monitor the progress with physical activity in fighting obesity.

This basic version of HOP is intended to determine if the user is obese, then set goals to lose weight, track physical activity, dieting plans (such as healthy eating, avoiding junk food and salty snacks), record weight over a period of time. When the participant succeeds in losing 1 pound of their body weight, it means they have cut or burned 3500 calories.

Now we ask the participants to make a pledge to donate the unused calories for saving the lives of starving children. By pledging to do so, it gives a cause for participants with obesity to lose weight and hope for hungry children fighting to survive.

UNICEFOur HOP App designed to pledge 25 cents to UNICEF on their behalf as a way to celebrate their achievement. However, in future users will have options to donate to any charitable organizations that are associated with feeding hungry children. Our mission is to help ending obesity and hunger in children and give them the gift of life, through motivating obese children to SHARE CALORIES with hungry children.

I’m really excited to see their app develop, and it is great that they chose RAD Studio and Object Pascal / Delphi to build this. Especially with 10.1 Berlin it includes easy components to connect with health devices like scales, heart rate monitors and cadence sensors.

Good luck to Suresh and Safalta!

Posted in Android, Internet of Things, iOS, Mobile, News | Leave a comment

More on 1Password’s Components

Stefan van AsStefan van As of 1Password fame sent me a more exhaustive list of the libraries and tools used in 1Password. I thought I would share it with everyone. He also recently started blogging about security, software development and Delphi.

Here is an overview of the 3rd party components used in 1Password:

  • 1PasswordBrowser Helper Objects (BHOs) — this is what powers 1Password inside Internet Explorer.
  • Bonjour — this is what powers Wi-Fi Sync. (here is an unrelated Delphi
    implementation
    )
  • ChilkatCrypt — this is what powers some of our crypto
  • MS Crypto — this is the Pseudo Random Number Generator (PRNG)
  • DISQLite — Some of 1Password’s features – such as Watchtower, for example – are utilizing SQLite. Because 1Password 4 is in Delphi 2007, we use DISQLite for that (today, it would be using FireDAC for that)
  • dxgettext — this is used to localize 1Password. It works nicely with Crowdin, a localization project management platform
  • GraphicEx and Graphics32 — this gives (alpha channel) transparency
  • HyperString — super fast string handling routines. (no longer available)
  • OpenSSL — this is what powers PBKDF2 (among other crypto routines)
  • sgcWebSockets — The WebSockets are used with the Chrome and Firefox browser extensions
  • StreamSec — another crypto library, mostly for SSL/TLS
  • zlib and LibTar — for OS X-compatible compression routines

Also uses the following tools:

A lot of great tools and libraries there.

Posted in Article, News, Tools | 10 Comments

FireMonkey and the Android Misconception

FireMonkey(300px)When it comes to Delphi, C++Builder and FireMonkey’s support for Android, there are 5 caveats.:

  1. ARM Cortex-A series CPU (not Intel Atom)
  2. ARMv7 Instructions
  3. NEON Technology
  4. GPU
  5. Specific versions of Android

At one point there was some attempts made to make a list of devices that were supported either completely or partially, but new devices were coming to quick to track. This lead to the misconception that FireMonkey apps only run on a very small subset of Android devices.

Since that time there have been a number of improvements to the compiler and the FireMonkey framework. Also the landscape of Android devices continues to evolve and change. Yet I still run into people who believe that FireMonkey still only runs on a small subset of devices. I thought I would provide an update and set the record straight.

Tegra 2 and NEON

Shortly before Android support was added, the Tegra 2 processor was in use. It was ARMv7 and Cortex-A, but lacked the NEON SIMD extension. So what is NEON? NEON is a SIMD (Single Instruction Multiple Data) instruction set. When it was introduced it was an option that some ARMv7 processors included to improve performance. Since it was optional, the Tegra 2 excluded it.

Intel i487 SXIt seems kind of uncertain to have some processors with some features, and others missing them, especially if you require them for your application to run. This isn’t some crazy thing that only happened with Android and ARM. Back in the time of the Intel 486 CPU (right before things went Pentium) some systems had an optional 487 math co-processor. This co-processor introduced some additional x87 instructions that accelerated some floating point operations. Some programs would be faster on a machine with x87 support, and others required it. When the Pentium came out, it incorporated the x87 instructions into most of the CPUs (there are always exceptions).

Pentium MMXThe Pentium didn’t end up being the “One CPU to rule them all” though. Along came MMX Instructions. MMX is a is a single instruction, multiple data (SIMD) instruction set that was optional for some CPUs (where have I heard that before?) Some programs were faster on an MMX enabled CPU, and others required it to run at all. After a few years, most all CPUs, even those made by AMD included MMX instructions. It didn’t end there. New CPU instruction sets are introduced all the time, but it is rare that they get the same publicity that MMX or the x87 set did.

What does all of this have to do with NEON, besides perspective? Well, Neon is now part of the ARM standard. The new ARM chips in modern Android devices include Neon. They don’t even both listing it as a feature because it is assumed. The R&D team bet on NEON and they won. Since the compiler takes advantage of Neon instructions it is faster than it would be if they hedged their bets and ignored Neon.

Enter the GPU

NVidia 6600GT GPUMuch like the x87 was a separate processor that augmented the system performance, there are many other processors in your computer, specifically around audio and graphics. The big thing about the GPU is that it not only beefed up the existing graphics co-processors, but it took on the 3D and texture operations and ran them through a massively parallel architecture. The original GPU that I had was actually a separate board in addition to my graphics card. Today they are mostly integrated.

On Android they typically go with a System on a Chip (SOC) that includes the CPU, GPU and a number of the other electronics.

The Rise and Fall of Intel Atom

ARM logoARM is an open standard CPU manufactured by many different chip makers, often times under their own brand. A few manufactures include Qualcomm, Texas Instruments, Samsung and even Apple (for their mobile devices). ARM logoIntel wanted a piece of the mobile processor action, but instead of just implementing ARM they introduced the Atom processor. It still used the x86 instruction set of the desktop CPUs, but was designed to be more energy efficient. They put them in Windows tablets and Android devices.

This introduced another division in the Android landscape. There were two different processor architectures. Since most Android apps were written with Java and ran in a virtual machine, it wasn’t a huge deal. Except for games. Most games use native code for performance reasons, so that required either the game to include both ARM and Atom code and libraries, or the game just wouldn’t work on Atom.

Harry Houdini 1899Enter libHoudini. Intel realized that mobile gaming was a big part of Android, and the fact that you couldn’t play a lot of popular games on Atom devices wasn’t good. So they created libHoudini, a proprietary ARM translation layer that translates ARM instructions into x86 instructions for the Atom processor.

libHoudini was around for a while, but around Jelly Bean or KitKat it became standard on Atom based Android devices. This resulted in ARM native apps just working on Atom devices.

Embarcadero was actually in discussions with Intel. There was talk of making an Atom targeted compiler for Android, but work was also done to improve compatibility with libHoudini. Atom was never officially supported (mostly because the market share was too small) so the Android app packager includes a check to say it didn’t work with Atom processors. But you can remove that checker and your app will probably run great on most Atom devices.

While Atom never had a huge share of the market, it looks like it is going to have even less as Intel has cancelled their next Atom processor line.

Android Versions

Unlike Apple, new version updates don’t tend to roll out as fast on Android devices. This means you typically encounter a few different versions of Android running in the wild. It isn’t all that bad though. In my opinion, Ice Cream Sandwich (API 15) was really when Android came into its own. It was Honeycomb (API 14) that finally gave tablets some serious love, and ICS merged those new features back to phones. Anything before ICS is really legacy at this point (at least in my opinion). Android tracks the popularity of Android versions on their Developer Dashboard.

Android Platform Versions Chart

As of May 2, 2016

Ice Cream Sandwich and older only account for a total of 4.3% of Android devices. While there are feature differences between the top 3, nothing is too revolutionary as to make the others obsolete yet.

A Thousand Flowers

Unlike iOS, where Apple is the only company to make devices that run it, Android is EVERYWHERE! I guess I’m kind of a collector of Android devices. I owned the first Android powered watch by WIMM and even created a 6 sided dice app for it. Now that Delphi supports Android I love testing it on different Android devices. Here is a list of my findings

  1. Android Wear – I’ve tested 4 or 5 different Android wear devices, including the Moto 360, and they all worked flawlessly with FireMonkey.
  2. Google Glass – Again, worked out of the box with FireMonkey. We even later added official support. Unfortunately Google is reimagining Glass right now, but I suspect when then new version comes out it will work great.
  3. Epson Moverio BT-200  – Similar to Google Glass, but has two independent translucent lenses so it can do 3D. Runs Android Jelly Bean and works with FireMonkey right out of the box. There is a BT-300 coming soon.
  4. Ouya – This was the Android gaming console that was going to change the world. It ended up under delivering, and then not evolving fast enough. It does however run FireMonkey just fine, and I know a few developers who used it for creative projects.
  5. Amazon FireTV and Fire TV Stick –  Designed to work with your TV and running Amazon’s own version of Android. Again worked like a charm with FireMonkey.
  6. Amazon Fire Phone – I think this is a pretty cool device, a shame it didn’t catch on. Also runs FireMonkey apps fine.
  7. Amazon Kindle Tablets – I’ve not tested these, but I know people who have. Again it runs a different flavor of Android. From what I hear some people had to update their OS to get it to work with FireMonkey, but it did work.
  8. BlackBerry Phone – Yeah, I went there, and so did FireMonkey. It worked too, although there are some idiosyncrasies about the OS that show up when you invoke the share sheet. I originally tested it on the BlackBerry OS, which supports Android apps, but now they’ve gone full Android.
  9. Windows Phone 10 – My Windows Phone wouldn’t install the right preview of Windows 10, but Marco had better luck than I and got FireMonkey apps running on Windows 10 Phone under the Astoria bridge. Then Microsoft discontinued it. Windows Phone never had much market share, and continues to dwindle.
  10. Huge collection of tablets and phones, including one with an Atom processor – they all worked (except that one old Tegra 2 tablet that ran Gingerbread).

Since Android is everywhere I’d wager that there is no Android app that actually runs on every single Android device out there, I don’t care what you wrote it with. Now if someone wants to prove me wrong, that is fine, I suspect different Android devices will be released faster than we can test them.

Conclusion

Let’s run through those requirements again and see how big of an impact they really represent.

  1. ARM Cortex-A series CPU – Atom was never big, and is on its way out. Most everything else is ARM Cortex-A (or newer / compatible).
  2. ARMv7 Instructions – ARMv6 is either really old, or used in a micro device like a beacon or some other IoT device. Not in any Android devices. Oh, and ARMv8 is the big thing now. It is 64-bit and runs FireMonkey apps fine.
  3. NEON Technology – Like I said, it is part of the standard now, so unless you have an old Tegra 2 tablet (I still have one) then nothing to worry about.
  4. GPU – All of the GPU compatibility and performance issues I know of have been fixed, and GPUs are standard on Android devices (at least ones with a screen).
  5. Specific versions of Android – Only 2.3% of devices have an unsupported version of Android.

So while FireMonkey apps may not run on every single Android device in existence, most apps don’t and no app needs to. FireMonkey apps to run on the vast majority of them, and that is what matters.

Posted in Android, Article, Mobile, News | 5 Comments

What is Delphi’s DNA?

I was chatting with someone today who was less familiar with Delphi. He asked what is it about Delphi that makes so many people continue to love it. I thought I would share my answer and see what everyone else thinks.

  1. Developer productivity – When Delphi was first introduced it was going head to head with Visual Basic in getting things done fast, and most of the time Delphi was faster for getting things done, and the rest of the time it was still really fast. That continues today. I’ve done presentations for people and they are just blown away with how fast I can do things with Delphi.
  2. Fast native apps – When it comes to app performance Delphi was way faster than VB, and is competitive with Visual C++ and any other compiler out there. This is because it is builds native apps that run fast.
  3. Database access – One of the original goal of Delphi was first class database connectivity. That is something Delphi continues to deliver. BDE was ahead of its time, but FireDAC is a whole new breed. And the great thing is there are so many 3rd party data access libraries to choose from, to give you just the right set of features you need.
  4. Platform API access – I remember the first time I needed to access some Windows messages and a Windows API that wasn’t exposed through the RTL. I kind of expected it to be a lot of work. I was pleasantly surprised with how easy and natural it was to add that to my program. I love that Delphi let’s you work at the nice high productive level, and then reach down to “touch the metal” and access the APIs.
  5. Visual form designers – I’ll admit it, Delphi has spoiled me. I’ve checked out a number of other programming tools, and it is rare to find one that works as good. The ability to design your user interface and preview what it will look like so easily is so useful.
  6. Reliable applications – I’ve heard stories about when they demonstrated Delphi’s ability to handle exceptions and people were falling out of their chairs. I don’t know what it is about Delphi, it might just be that the developers who use it are amazing, but I am frequently impressed with how reliable programs are that are developed with Delphi.
  7. Good strong community – All the Tech Partners, MVPs, authors, trainers and developers make the Delphi community amazing. It is always great to see all the amazing projects everyone is working on. So many people willing to help and just be fantastic. It is a great community to be part of.

I made this graphic a while ago to explain why developing with Delphi was so awesome. I call it the three levels of development. The idea is each level builds on the one beneath it. The higher levels provide great productivity benefits.

3 Levels of Development

The great thing about Delphi is it lets you easily move between these levels. You can do so much in code, even at design time, but it doesn’t keep you at that high level. When you need it you can move down to a lower level, even to the point of writing in-line assembly code on Win32.

Most other development tools are stuck at just one level, or with just bits and pieces of the other levels. Delphi gives you all 3 working together. This is really amazing, especially for a cross platform development tool.

What did I miss? What else is in Delphi’s DNA? What is the one thing that makes Delphi the tool of choice for you?

Update: A few more characteristics of Delphi’s DNA from the comments

  1. Readability and Maintainability – This is really important since most programs spend way more time being maintained than in the initial writing. Code that is easier to read is easier to maintain. This is aided by the fact Delphi is easy to read and has a strong type system.
  2. Backwards Compatibility – This is something Delphi really spoils us with. Even when there are breaking changes they are typically minor and easy to work around when compared to other development technologies.
  3. Speed – Delphi has this in spades: Speed of development, speed of compilation, and speed of execution. Sure, you may be able to find some situations where something is faster in one area, but over all Delphi is very well rounded in the speed department.

Delphi DNA Wordcloud

Posted in Article | 9 Comments

MVP of the Week: Alister Christie

LearnDelphi.TVAlister Christie of New Zealand is our MVP of the Week. Alister is the master of Delphi video trainings with his site at LearnDelphi.tv. He has over 100 free videos, and then over 30 more hours of premium videos. A great resource for people new to Delphi development, or anyone who wants to take their skill to the next level.

When I was in New Zealand I got a chance to sit down with Alister and Damien Bootsma for a short interview.

Alister has a lot of great content on his YouTube channel, including more interviews and technical trainings. Here are a few of his recent CodeRage sessions for you to check out too.

Flexible and Supercharged Key Hashing with TDictionary
TDictionary in Delphi is an extremely useful container, however the default method by which your ‘keys’ get hashed might be undesirable. Being able to alter this can give you far greater flexibility when taking advantage of the Generic Dictionary collection.

Common Delphi Coding Anti-Patterns
During this session you’ll either be thinking “I do that” (and hopefully you’ll stop) or “I remember doing that” (while cringing at the memory). There are certain coding patterns that all Delphi programmers seem to use at some stage – some of them sub-optimal, some weird, and some just plain wrong. Collectively I’ve called them Anti-Patterns, and in this session you’ll get to see some of my favorites (or, anti-favorites).

Escaping the Try..Finally..Free Nest
We all want to do the right thing with memory management and make sure we tidy up after ourselves. However as our code gets buried in successive layers of object allocation, try, finally, free “nests” it all becomes a bit onerous and, well, resembling a pterodactyl nest. In this session, we look at a technique to flatten out your code so that it will look less attractive as habitation for a friendly pterosaur, and as a side benefit, improve readability. Along the way we use interfaces, generics and anonymous methods to build our over-engineered object de-allocation artifice.

Become Your Own Art Department
Finding suitable and consistent images for buttons, menus and splash screens can be a difficult task – why not make your own?

Alister is a brilliant developer and great instructor. He always does great work. We are very pleased to have him as our MVP of the week.

Posted in MVP, News | Leave a comment

1Password for Windows is Written in Delphi!

1Password just won the Embarcadero Cool App Contest. It is a really cool app, and written in Delphi. You can check out the press release or the article about it. I also have a little video I made with the Stefan van As (the Developer) and Mark Eaton (QA).

I’ve been using LassPass, EverNote, Google Authenticator, Authy and Chrome’s identity management previously, but wasn’t completely happy with that. After looking at 1Password I am switching. It is really fantastic, and includes all the features I need.

Who will win next month? Maybe your cool app. Enter today!

Embarcadero Cool App Contest

Posted in News | 2 Comments

More New MVPs

I’ve got another large group of MVPs that have just signed up. They will appear in the MVP directory soon, but until then you can discover more about them here:

For those of you keeping count, that puts the total number of MVPs over 100.

Posted in MVP | 1 Comment