- PC shipments will continue to decline, and the PC will become a tiny niche that represents about 10% or less of the overall computing world's annual sales.
- Microsoft will continue to control the WinTel/PC desktop world, but the significance of that will shift almost entirely upstream to the Enterprise and large Corporate markets.
Delphi Code Monkey: Windows as a Legacy System
Firebird News: Database Workbench 4.4.1, free Lite Editions released
Te Waka o Pascal: Hands Off My Application! (Another DPR Trick)
Te Waka o Pascal: VCL Threading – Indeterminate Lifetimes
The Podcast at Delphi.org: Things I Learned from Delphi CodeRage 8
Mostly from CodeRage 8, but some is from my time working for Embarcadero. I believe I’ve presented at every CodeRage, but this is my first time on the other side. It is also the biggest CodeRage by a significant margin. I’m sure the two events are unrelated, but it is still exciting.
- Delphi can do functional programming, and it is really cool.
- Cary Jensen is really excited about FireDAC– and so is everyone else, because FireDAC is really cool. He’s so excited he might cut his hair off . . .
- There are a lot of really smart and very nice people working for Embarcadero.
- No matter how easy you find it to understand someone, there is somebody else who has a hard time with their accent, speed, or terminology.
- There is still more that I don’t know about Delphi then I do. And I think that is a good thing.
- You really shouldn’t use “with” in your code, especially during a presentation that occurred afterAlister Christie‘s session on “anti-patterns.”
- The Tag property is useful, but no one wants to admit it.
- Delphi makes it easy to make nice UI and ugly UI. I like that it is flexible.
- If you use something wrong it will be slow. If you test you can probably find a faster way.
- Two people can present on the same thing and have different sessions while two other people can present on two different things and have surprising overlaps.
- REST and JSON are great, but XML and SOAP are still around and in use.
- If you want to scroll it, use a TListView. Otherwise use a TListBox.
- When it comes to making custom controls, in any framework, Ray is still the guy.
- It is a lot more work than I expected to run CodeRage, but also a lot more fun.
- If you know what you are doing, it is pretty easy to access any iOS or Android API from Delphi.
- You can use FireMonkey to make a pretty good mobile game, but it still isn’t recommended.
- Encrypt your customer’s data, or you can get a huge fine.
- Everyone always likes a good benchmark or comparison, but they don’t really tell you anything.
- David I. really is as great of a guy as everyone says he is, but even 3 days of CodeRage will wear him out.
- The Android Emulator is really slow and unresponsive, and no one seems to know why.
- There usually is more than one way to do something. And just when I think I realized a smart way to do something, someone else will point out an easier way.
- Replay videos are never online fast enough.
- Making a good video to explain a technical topic is way more work than anyone realizes, even people who have done it a hundred times. And when you are done you are rarely satisfied with it.
- GoToWebinar is a pain, but so far it seems to be the best option.
- Even in a pre-recorded video, people will still help you find the typos in your code.
- Questions can take longer than the session the questions are about.
- Delphi developers really are amazing!
And some answers to frequently asked questions:
- The code will usually be on the presenters blog.
- Replays will be a couple weeks.
- Turn on “Use Host GPU” in your Android emulator and don’t run your VM in an Emulator. Better yet, buy an Android device. The emulator is slow for everyone, which is why most Android developers don’t use it.
I learned a lot more, but those were the memorable bits that came to mind.
What did you learn?
DelphiTools.info: Time-stepping for Games and Simulations
Delphi Code Monkey: TurboPascal PCODE compiler implemented in JavaScript
It's a mostly-complete TurboPascal compiler written in JavaScript that compiles to a UCSD-PCODE equivalent bytecode instead of native X86. The resulting code runs in a UCDS-PCODE vm also implemented in JavaScript.
Now that's what I call a killer Blog Post. Read the blog post and try this over here.
Oh yea, and he posted to code on GitHub. Anybody want to implement Pascal RAD IDE in their web browser? Should only take a few weekends here and there. I kid, I kid. A desktop IDE, and a real compiler do a lot more, and take a lot longer to build, than this Just For Kicks thing did. But if this person had realized that they could just download the real DOS TurboPascal from the Embarcadero/Borland Museum, and done that, then there wouldn't be a new JavaScript pascal parser out there. Which is inherently a cool thing.
The Podcast at Delphi.org: Wireless Android Debugging with Delphi xE5
Previously I blogged about how to connect to an emulator on a remote (or the host) machine. That also works for hardware connected to remote machines. But sometimes you want to work with hardware that isn’t even connected at all. Not to worry, here is how to wirelessly connect and debug with your favorite development tool. One note though, WiFi slower than a USB connection, so you will see a little delay sometimes.
Requirements:
- A machine (Mac or PC) you can connect the Android device to that has ADB (Android Debug Bridge) installed. This is part of the Android SDK. As well as necessary ADB USB Drivers (required on Windows). This can be your development machine, or another machine.
- A non-segmented wireless network that both your development machine and Android device are connected. (Segmenting prevents two connected devices from connecting to each other).
These commands work with ADB (Android Debug Bridge). It is easiest if you add it to your path. By default it is found in the following location, but you can install it anywhere on your system (Select the “Use An Existing IDE” option when downloading).
C:\Users\Public\Documents\RAD Studio\12.0\PlatformSDKs\adt-bundle-windows-x86-20130522\sdk\platform-tools
First you need to connect your Android device to any computer. With USB debugging turned on, verify you have access to the device via ADB with the following command:
Command:
adb devices
Output:
List of devices attached 8605fa72 device
If the list is empty, then you need to enable USB debugging and make sure you have the USB ADB Bridge driver for your device installed.
Once ADB is setup, you can get the IP address with the following command:
adb shell netcfg|grep wlan0
Which should give you output like:
wlan0 UP 10.20.5.88/24 0x00001043 2a:32:11:42:aa:3c
Then put the device in TCPIP mode with the command:
adb kill-server adb tcpip 5555
Then on your machine that is running Delphi XE5 go to the command window and type (with the IP address from above):
adb connect 10.20.5.88
Then you can verify it worked from that same command prompt
Command:
adb devices
Output:
List of devices attached 10.20.5.88:5555 device
And now you can connect to that device wirelessly from Delphi. Like I mentioned before, this is slower, so expect some delays on deploy and responding to breakpoints.
There is some more information on Stack Overflow, including some different options if you have a rooted Android device.
twm’s blog: headless server fun
A new Ubuntu based server I have set up recently had a power failure which unexpectedly resulted in the box not booting again. There were actually two problems:
- fsck failed on the data mount because one of the data drives apparently had failed. It took forever but eventually prompted for user input “S” to skip or “M” to fix manually.
- The first time this happened I just tried powercycling the computer again hoping it would just come up. Unfortunately Grub detected a failure and disabled the timeout for the boot menu. So the box was sitting there in the Grub boot menu.
Unfortunately this server is supposed to be headless (and is mounted to the wall 4m above ground), so there was not even a keyboard where somebody could blindly press one of these keys or press return to select an option in the Grub menu. But sshd wasn’t started yet, so I could ping the server (the IP stack was working) but not ssh into it to fix the problem. So I got myself a really long VGA cable and an USB extension cable to connect a monitor and a keyboard to look at the actual console.
The second issue can be solved easily:
In /etc/default/grub add an the following entry:
GRUB_RECORDFAIL_TIMEOUT=5
This lets Grub show the boot menu for 5 seconds and then tries to boot normally. I used 5 seconds rather than 0 so I could actually use that menu if need arises.
The first issue is a bit more involved. I want the box to at least boot to the state where I can access it through ssh even if the data drives fail. That means I have to remove the mount point from /etc/fstab but have to put the mount command somewhere later into the boot process. One option is to mount it in /etc/rc.local like this (suggested here):
fsck -n UUID=...
if [[ $? != 0 ]]; then
logger -p user.warning "/etc/rc.local: fsck fail $?"
else mount ....
fi
I’ll not be going that way because the system is not that critical. If it doesn’t come up, we will notice and just ssh into it and fsck and mount the data volume manually.
Delphi Haven: New Delphi blog Dave Nottages Delphi Worlds
I’ve just realised Dave Nottage (TeamB, and now MVP) has a blog, currently focusing on Delphi for iOS – hopefully it will get syndicated by DelphiFeeds.com soon, but until then, check it out directly.
Delphi Haven: StackOverflown
So… I was finally broken: I created a StackOverflow account. Annoyingly, a certain individual in particular is waaaayy too fast in answering most Delphi questions (genuine expertise + quick on the button = cheating, surely?)… so I started picking off Access ones instead (easy points there – write three lines of trivial SQL, and bingo). Alas, but even for a subject area in which one would expect to find a fair few novices asking novice questions, there remains a certain… priggishness about the fact.
(Actual picture of self-appointed SO prefect moderator.)
[PS: to the literal-minded, no I don't actually think David is a 'cheat' any more than I think Eric Cartman actually patrols StackOverflow ]
Firebird News: Update of .NET Provider for OLEDB. Support of schemas implemented.
Delphi Code Monkey: Embarcadero MVP list updates
To prevent misunderstandings let me just point out that an MVP is an independent community member, not an employee of Embarcadero, I am not an employee or sub-contractor.
I believe very much in the importance of the product, and its value to the development world. I blog about Delphi related topics, on my own time, and I don't get paid to do that. Why? You wouldn't see me doing that with Java or with C++, although they are good enough tools in their own ways.
Delphi has passionate users, because it's offering something unique. I believe in that something unique that it offers, even though there might be some tools out there that cost zero dollars. So am I a corporate shill? No, definitely not. And is everything always roses around here? No. But I've always been clearly pro Delphi, and I'm grateful for the recognition that the people who believe in and love this language, and IDE can make contributions to the future of programming, too.
How do I do that? I think I do that by teaching, consulting, by working with other Delphi people, by building little helpers, add-ons, components, and tools that people can use. By showing that this is a really great way to build software.
There are some great folks on the MVP list. Zarko Gajic, who wrote about Delphi on About.com for many years. Francois Piette, who has built a startling and fantastic quantity and quality of components, classes, tools, and frameworks in Delphi and made them open source. Nick Hodges, a well known Delphi Blogger, who did a stint as Delphi Product Manager, and has had many many other fun adventures in the community, a great guy. Ray Konopka, Delphi component book guy, owner of Raize Software, builder of my favorite logging tool (CodeSite), and the guy who taught me to write design-time component code with his Delphi component book, back in the Delphi 3 era. I could go on and on. Primoz Gabrijelcic... Alister Christie... you guys rock! Lots more people on that list deserve a shout out, but I'll keep it short.
Anyways, all of these people, myself included, think Delphi is awesome, and that it has a bright future ahead of it.
Firebird News: Converging and Cyclic Cascades with Firebird
Firebird News: LibreOffice Embedded Firebird/HSQLDB performance comparison
Firebird News: go-fb: A #golang package for the Firebird database updated
Firebird News: eHealth system demo up and running (powered by Firebird)
DelphiTools.info: MapFileStats v1.3 update
Delphi Haven: TAndroidPreferencesIniFile fix
Just a small note to say, if anyone has downloaded my Android SharedPreferences wrapper (more info here), I’ve just put up a small fix for the ReadBool method, so you might want to update from the trunk. Thanks goes to Orren Grushkin for reporting the bug.