Firebird News: Report of the 10th FDD is now on-line
TPersistent: Delphi Packaging and Pricing a Mystery
If you already upgraded to XE4, but didn’t buy the mobile pack, it appears that EMBT penalizes you if you then want to upgrade to the mobile pack. According to this pricing page, the mobile pack AddOn is $499 if you already own XE4 or not. Seems to me it should be $449 to reflect the upgrade cost from XE3 to XE4 if you bought the special, or whatever you paid for your upgrade.
What is also baffling is that there appears to be no way to experiment with the iOS mobile pack. The trial says it contains “Trial includes Delphi, C++Builder and HTML5 Builder. Instant Trial includes Delphi and C++Builder.”. There is no mention of the mobile pack which for many would be the primary incentive for buying an upgrade over XE3, and the reason EMBT is reporting year over year growth.
Behind the connection: Delphi XE5 to develop Android applications
Te Waka o Pascal: Are Embarcadero Really Interested in New Users ?
The Podcast at Delphi.org: Sneak Peek of Delphi XE5: Android DataSnap
Quick demo of a DataSnap client on Android with a preview of Delphi XE5. Shows how easy it is to visually bind your data with design time preview, and how easy it is to move your mobile database client app from iOS to Android.
- 6 months maintenance free with new user purchases
- 2009 users get the upgrade price when buying with 1 year maintenance
- bonus pack of extras free
Lazarus Team Anouncements: Lazarus team members present at Dutch Pascon
These Delphi, Fr...
The Wiert Corner - irregular stream of stuff: 20130822-Embarcadero-MVP
It has been in the queue for a really long time. In fact, all started when chatting with Anders Ohlsson during the inception of the Embarcadero MVP program.
But then the paper work (you know, the thing with written signatures, fax machines, etc) got buried under some projects that lasted both a lot longer than initially anticipated, and were far more consuming also meaning I could not make it to the developer conferences I originally planned.
Recently, I dug out the paper work, then found out that Jim McKeeth - now leading the MVP program at Embarcadero– could lessen the paperwork substantially.
A few manual steps were still involved on both sides, but now I am on the MVP Directory | General.
There is more to it. This fall, I will not only be making it to, but also speaking during at least 3, maybe more Delphi related events in Europe:
- 20130907 – Leiden, The Netherlands: RAD Studio in Action Live with Dutch Pascon (in English or Dutch depending on the audience mix).
- 20130921 – Leipzig, German: Delphi Tage (this will be in German with English slides).
- 20131104-20131106 – Köln, Germany: EKON 17 | Die Konferenz für Delphi & More (this will be in German with English slides).
Given the time frame, and increase of information about a Delphi for Android product, it might be out or available for beta blogging by then. You can sign up for the beta here, and according to the roadmap it is estimated for release later this year. I hope to be able to play with that soon enough to at least demo a few bits and pieces of it using my Nexus 4 and HTC Sensation on some of those events.
Hope to see some of you there!
–jeroen
Filed under: Delphi, Delphi XE4, Development, Software Development
Te Waka o Pascal: Sharing Code Across Platforms in Oxygene
DelphiTools.info: DWS WebServer Guide – part 1 – Getting Started
The road to Delphi: Delphi Dev. Shell Tools New features
I just added a set of new features to the Delphi Dev. Shell Tools like support for Lazarus, a new owner draw panel to the shell menu that shows information about the selected Delphi project file (.dpr, .dproj) like target platforms, framework (FMX, VCL), current configuration (debug, release) and Application Type (library, package, application)
Check the next screenshots
Remember that you can check for new versions of the tool using the check for updates button en the About option.
Te Waka o Pascal: An Exclusive Club and Reassuringly Expensive
The Wiert Corner - irregular stream of stuff: jpluimers
I like this Delphi program very much: it is one of the database tools with the widest support of back-ends, and friendliest user interface I know.
Oh, and it is by a great Dutch company too: UpScene (:
So this is their release information:
2013-08-19:
Database Workbench 4.4.1 released
This new release of Database Workbench brings new features and fixes for issues reported by our users.
The free Lite Editions will be released later.
Multi-DBMS developer tool
Database Workbench works natively with:
- Oracle Database
- Microsoft SQL Server
- Sybase SQL Anywhere
- MySQL
- Firebird
- InterBase
- NexusDB
More information about Database Workbench is available at the Database Workbench page, download your copy today via our downloads page, pricing information is available.
This release includes fixes for the InterBase, Firebird, MySQL and Microsoft SQL Server modules, as well as general fixes and small new features.
The full details and list of changes in 4.4.1 is available here.
–jeroen
via: News @ Upscene Productions.
Filed under: Database Development, Delphi, Development, Firebird, InterBase, MySQL, OracleDB, Software Development, SQL, SQL Server, SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, Sybase
twm’s blog: How to waste hours with computer problems
I just wasted several hours with yet another computer problem.
Some Background: We are using a Ubuntu based server which runs Samba as a file server for Windows computers. It also is a local name server and mail server. Yesterday it was that time again that I had to reboot it because of some Linux kernel update. I waited until everybody had gone home, the box rebooted, everything seemed fine.
Until this morning: The first problem was that there was no e-mail telling me about the automatic backup last night. Then my web browser (which uses a proxy running on the server) did not work. Also there were suspiciously no spam emails.
So I investigated and found that the name service did not work, but only on the server itself. All clients could use the service and got the expected answers. But fetchmail and lots of daemons running on the server itself did not work.
Many minutes later I put our Internet provider’s into
/etc/resolv.conf
and name resolution started to work again for external addresses. E-mail was still broken, and I became desperate so I went to
serverfault.com hoping that somebody much more knowledgeable than me might know this problem.
I got quite a few hints on what to check but no luck.
The solution was absolutely unexpected (at least to me):
The loopback interface was not started!
Starting it with …
ifup -v lo
… fixed the problem.
TPersistent: XE5 World Tour Smaller than XE4?
I just checked out the World Tour for XE5, and despite the buzz about iOS development with Android support just around the corner, it appears as if the XE5 tour has fewer stops than the XE4 tour.
EMBT is no longer stopping in Calgary, Alberta, Canada (the IT capital of the west) where I reside. In fact in Canada the map shows only a single stop in Western Canada, but when you click on it the dialog shows two stops; in Montreal and Toronto.
Apparently the map is based on a JPG image file rather than demonstrating Delphi google map integration, and there is no single source of truth, so something has gotten out of sync.
I certainly hope this is not another indicator of the decline of Delphi users.
Lazarus-Dev: Threads with Lazarus
Here's a more complete tutorial to read.
Threads are a great way to do a large amount of processing in your program while allowing the visual part of your program to remain responsive. If you can split up the processing into several threads you can take advantage of modern processors multi core capability and complete a job in a fraction of the time.
Lazarus programs can use threads in GUI and Console programs. If you use threading in your program you should define the compiler option
-dUseCThreads
. This can be done in Project->Options->Compiler Options->Other - Custom Options. This does nothing under Windows but on any *nix it includes a needed threadmanager. If your program crashes with the first use of thread.Start; then this is probably your problem.Now that your program is thread enabled here's some basic information about threads. You must subclass the
TThread
type and make your own thread type and override the Execute
method.The
Execute
method is never called directly in your program. It is the method the thread will run on it's own when it is started. If you are using MyThread.Execute
then you are making a mistake.Here's a basic example of a new thread type
type
TFooThread = class(TThread)
protected
procedure Execute; override;
end;
...
implementation
procedure TFooThread.Execute;
begin
// do stuff
end;
To create an instance of your thread you can use
FooThread := TFooThread.Create(True);
The argument
True
creates the thread in suspended state, meaning the OS thread is created but not yet run. If you use False
then the thread begins and Execute
is called immediately. You can of course make your own constructor with whatever parameters you need and use inherited Create(False)
there.To start a thread you should use
FooThread.Start
. FooThread.Resume
is deprecated as well as .Suspend
which is not reliable on *nix's and can cause your program to hang.Now your thread is running and working and making your life easier. Your program is snappier and you decide that you need to make your program display the progress your thread is making processing some data.
So in TFooThread.Execute you add Form1.ProgressBar1.Position := SomeValue.
Bad idea. It may work or your program could immediately crash or it might cause some other harder to find error that happens later. Never ever do this.
The reason this is so bad is because the GUI part of your program is run in a separate thread (duh!) and has it's own memory area. Changing the memory in one thread from another needs to be coordinated carefully. You should never change a LCL control value from a thread other than the main process.
A way to update the main thread from another thread is the
Synchronize(@SomeProc)
method. The Syncronize
method, which is called within a created thread, causes the thread to pause and wait for the main thread to call a procedure. Also see CritialSections from the link at the beginning of this articleWhen your thread terminates you should assume that any code in it's destructor may be called a thread other than your main process thread, especially if you set
FreeOnTerminate
to True
. If you assign a handler for the OnTerminate property then that procedure will be run in the main thread.After all the code in the
Execute
method is run your thread cannot be restarted. You will have to free and create another instance of the thread type you need. It's common to include while not Terminated do begin ... end
around the code inside the Execute
method in order to use a thread multiple times without having to recreate it.Most of the basic stuff I have run into is now covered. Go code, or read some more: Threading Tutorial on the Wiki
TPersistent: Second Impression of Lazarus/FPC
I finally had a few hours to work on hcOPF support for FreePascal which I had started some time ago. I downloaded the Lazarus 1.0.10 installer and ran it in my development VM. Then I continued creating new FPC projects, attempting to mirror the Delphi ones. What I found, is that as a Delphi developer, the combination of Lazarus with FreePascal is far from a seamless transition if you are trying to migrate a framework. There are numerous unit differences and the FreePascal compiler has significant differences from Delphi’s compiler even in Delphi compatibility mode. The way Lazarus handles package projects is different, as are all GUI dialogs for the compiler paths and conditional defines, and even the IDE windowing. It all takes a little getting used to.
The compile cycle seems to be longer using Lazarus, and the debugging tools are IMHO much more primitive than Delphi. For instance, you cannot evaluate expressions such as Person.AttributeByName(’FirstName’).Value like you can in Delphi. The debugger visualizers are also quite a bit different from Delphi. Due to an incomplete port, the IDE crashed while tracing the code with a 219, resulting in an empty LPI file for subsequent runs. On the plus side, it loads SO much faster than XE4, being almost instantaneous, that such crashes aren’t a real impediment and I’m sure are an unusual situation.
Of course I miss having GExperts and cnPack functionality. It’s unfortunate that no other IDE exposes the same OpenTools API interfaces used by such projects, so a developer could take them along. I also really liked the CompBar substitute for the D7 component palette, and if I could install CodeRush for D7 in Lazarus I would be sold .
There are a lot of little differences, but a lot of the time, it’s simply an issue of getting familiar with the IDE. For instance, it took me a while even to figure out that Delphi’s Browse Back/Forward is called “Jump Forward/Back” in Lazarus and was mapped to different keys. I remapped them (try that in Delphi) to use Alt+Left Arrow/Rt. Arrow and I was happily drilling through the code again.
The demo I am working on porting uses a Firebird database with the IBX connectivity layer. After looking at all the Lazarus database examples I had decided that it was going to be a longer porting effort until I ran across the IBX port from MWA Software. I downloaded and installed it, and suddenly I could use my datamodule from Delphi without a problem. I thought I was home free, until I found I needed to install some design-time code into the IDE and I couldn’t resolve “Designer.GetComponent(Value)” in a TComponentProperty editor.
I will continue working on my FPC port as time permits. Lazarus is truly an impressive IDE with some nice features such as closing All Other Pages in the editor. I am sure as I spend more time, I will discover many other tools made by developers for developers (not a marketing department), and I really like the back to basics, no fat approach. It’s as close to having an open source version of D7 as we will ever get. It is also nice to be able to choose your UI Widgetset instead of being locked into a proprietary vendor solution. What is equally as impressive is how the open source community is developing viable technologies for iOS and Android in addition to the impressive OS list that the Lazarus/FPC combination could already target.
If you are interested in learning ObjectPascal, or targeting Linux or Mac OS/X with 64 bit native code, or even considering Android/iOS development, the no cost, open source, Lazarus/FPC combination is worth a look.
Firebird News: IBSurgeon FBDataGuard 2.8: Update of monitoring and database protection tool
Lazarus Team Anouncements: Lazarus 1.0.12 release available for download
This is a bug fix release, built with fpc 2.6.2.
The previous releases 1.0.8 and 1.0.10 were built with fpc 2.6.2 too, while release 1.0.6 was built with fpc 2.6.0.
Here is the list o...
twm’s blog: jiggling the mouse
Did you ever want to prevent the screen saver to start because your program is displaying something and you didn’t want to force the user to move the mouse every now and then?
Until Windows XP it was possible to prevent the screen saver from becoming active by just handling the WM_SYSCOMMAND message with wParam = SC_SCREENSAVE like this:
procedure Tf_MeasurementGraph.AppMessage(var _Msg: TMsg; var _Handled: Boolean); begin if FIsRecording then // prevent screen saver from starting if ((WM_SYSCOMMAND = _Msg.Message) and (SC_SCREENSAVE = _Msg.wParam)) then _Handled := True; end;
This apparently stopped working with Windows Vista. Other options introduced then only work if there was no password protection on the screen saver. So I asked the Google oracle and found this answer on Stack Overflow.
My solution then is this procedure:
procedure JiggleMouse; var Inpt: TInput; begin Inpt.Itype := INPUT_MOUSE; Inpt.mi.dx := 0; Inpt.mi.dy := 0; Inpt.mi.mouseData := 0; Inpt.mi.dwFlags := MOUSEEVENTF_MOVE; Inpt.mi.time := 0; Inpt.mi.dwExtraInfo := 0; SendInput(1, Inpt, SizeOf(Inpt)); end;
Call it in regular intervals and the screen saver will not start.
This is now (or soon will be) in the u_dzOsUtils unit which is part of my dzlib utility library.