My blog site, thecave.com, is a static HTML site generated by Jekyll and hosted on Github Pages. I love that the site is static HTML as it means I can host the site virtually anywhere. But, unlike dynamic blog sites, like those powered by WordPress, I haven’t been able to publish new posts from my iPhone. And with the upcoming release of micro.blog, creating new micro-posts for thecave.com from my iPhone is something I want to do, but how? How can I update my Jekyll site, with its source code hosted on Github and custom plug-ins that can’t run on Github Pages, using my iPhone?
I find I am using TextExpander more and more these days. It’s an awesome productivity tool that saves me time by inserting snippets of text into whatever I’m writing, be it code or words. What I didn’t know about TextExpander, that is, until today, is that it can run shell scripts to generate the text snippets.
A couple Vermont-based software developers recently asked me how to get started with Swift and writing apps for iOS. I emailed them individually, but when I was asked again today, I thought, time to write a blog post.
I recently came across this question about searching using the Parse SDK for iOS. Simon asks:
Over the summer I updated a number of apps to iOS 9. A common tasks for me was replacing the deprecated
UIAlertView with new
UIAlertController class. Generally this is easy to do, but there is one scenario that
UIAlertView handles well that
UIAlertController doesn’t support at all: displaying an alert view from parts of your code without a reference to the current view controller, for instance, displaying an alert view from the app delegate.
I’ve been doing a bit of tinkering here at thecave. I realized I was using categories as if they were tags and for one simple reason. I didn’t have a way to support tags. That is, until now.
I’m excited to be one of the speakers at the upcoming 360idev-min conference in Greenville, SC. In my talk I’ll share the things you need to know about when writing a share extension for your iOS app.
A well known global company is using some open source code I wrote in one of their apps (yay!). Like a good company, they included my name and licensing information in app’s about screen. Now I’m getting emails from one of the app’s users seeking help with the app. The person thinks I wrote the app because my name appears in the licensing section.
I’ve been working on a Mac app lately, and while some things are similar to iOS, something are definitely different. One thing that is different are modal windows and run loops.
This past Wednesday I had a chance to attend NSHappyHour. It’s was my first time attending since moving to Vermont two years ago. I had a great time catching up with everyone, and I was reminded just how awesome the Mac and iOS developer community is in the Boston area.
I’m preparing to roll out a new Jekyll website, but unlike with my other Jekyll sites, I want each web page served up on
http. This means telling the server to redirect
http request to
Last year I posted an article that talks about why I stopped using Interface Builder in favor of writing code to create views. There are some who disagree with me, and to them I say, “To each his own.” And there are some who agree with me, but choose not to publicize it. No matter. Every programmer has tricks that make them more productive, and creating views in code just happens to be one trick that works well for me.
I started organizing developer related meetups in 2001 starting with a weekly happy hour for dev friends and co-workers. Over the years I ended up organizing different types of events, from monthly meetings that included speakers to parties and happy hours to annual snowboarding trips. I even started NSHappyHour for Mac and iOS developers, which is still going on each month in Salem, MA.
Brent Simmons talks about for-in loops in a recent post. In it he says:
Before doing some work today I decided to make some improvements to my blog site. I thought I would be playing with the site for only an hour or so, but instead it took most of the day. Typical when dealing with programming issues in an unfamiliar environment.
A few weeks back I said I would be buying the iPhone 6, not the 6 Plus. The 6 Plus is simply too large for me. But I have since changed my mind.
Recently Manton Reece has been talking a lot about microblogging in an open web world using RSS. He has touched on points that are important to me, specifically content ownership. Like many people I post regularly to App.net, Facebook, Twitter, and other social networks, but I’ve always had one big problem with these networks. My micro-posts do not appear on my web site, and if these networks were to disappear in the future, then my content disappears too.
Xcode 6 changes how you export a .ipa from an archive for adhoc distribution. It used to be that you could export the archive to a .ipa as long as you had the right provisioning profile and distribution certificate on your machine. Starting with Xcode 6 you need to be a team member of the particular Developer Program account and you need to have the rights to make a distribution build. This means you need to be a team agent. However, I work with a number of clients who don’t have the clue what Xcode is much less are willing to make distribution builds, so I need to way to make distribution builds within this new limitation from Xcode 6.
Yesterday I talked about options for reporting errors (and statuses) from the server back to the Cross Post app. Later I came up with a third option, which I like the best…hosting the error reports on Cloud Files.
A friend sent me suggestions on handling error reporting for Cross Post. I decided write up my current thinking here to see if my approach makes sense. Besides, trying to explain it in a set of 140 character tweets is less than ideal.
I printed out this iPhone 6 and 6 Plus paper template. I cut out each template and taped cardboard to the back. Then I did a pocket test with each one. I tested each template with different pants and shorts that I wear often. I found that both the iPhone 6 and iPhone 6 Plus fit in all my pockets, but a corner of the iPhone 6 Plus cutout does stick out of the pocket on my gym shorts. I also found that while the iPhone 6 Plus does fit in the pockets of my Levis 501, my jeans of choice, the cutout was annoyingly noticeable when I sat down.
My friend Justin wrote a post explaining why he thinks you should use Interface Builder with Auto Layout. It was in response to my post about why I don’t use Interface Builder these days thanks to Auto Layout. Justin’s post is good with plenty of valid points. Justin and I also agree iOS and Mac developers should be using Auto Layout. But he said something that got me wondering…does Justin agree with me more than he realizes. Regarding writing layout constraints in code, Justin says:
The subject to this post might suggest I don’t like Auto Layout, but on the contrary I really like Auto Layout. I didn’t always like Auto Layout. For the longest time Auto Layout was a major pain in my ass, but it turns out it was Interface Builder that was causing me the majority of headaches when I used Auto Layout. So I stopped using Auto Layout in IB and I started using it in code only.
There are times when it is tough being a developer. But you can help make a difference in a developer’s life by simply giving him or her a hug.
Here’s a great video by DevShop that shares some of the pains we developers go through on a regular basis. Watch the video then give a developer a hug.
Recently I moved my CVS and Subversion repositories to a VPS that is running the server edition of Ubuntu Hardy. As part of the move I installed ViewCV enabling me to view my repositories via a web browser. Problem was when I viewed a Subversion repository I got the following error message:
An Exception Has Occurred
Traceback (most recent call last):
File "/usr/local/viewcvs-1.0-dev/lib/viewcvs.py", line 3194, in main
File "/usr/local/viewcvs-1.0-dev/lib/viewcvs.py", line 258, in run_viewcvs
File "/usr/local/viewcvs-1.0-dev/lib/vclib/svn/__init__.py", line 27, in ?
from svn import fs, repos, core, delta
ImportError: No module named svn
I could view CVS repository just not Subversion repositories. This left me scratching my head. I did a couple of google searches but no solution found. Then I thought to myself, “I wonder if there is anything Python specific for Subversion.” This prompted me to try searching for packages using the aptitude command.
Sure enough the command aptitude search subversion returned a few items including python-subversion, which is the Python binding for Subversion. Bingo! I ran the command aptitude install python-subversion then checked ViewCV again in my browser. Error gone. I’m now able to view both CVS and SVN repositories.
I’m planning to move a web site from ASP.NET to PHP. My primary development machine is a MacBook Pro. I use VMware Fusion for hosting a number of different OSes including Windows and Linux (mostly Ubuntu). So now I’m wondering what type of development environment I should setup for working with this new PHP based web site.
Should I develop directly within OS X? It’s definitely convenient. But I don’t need services such as Apache, Postgres, etc running on my laptop all the time. Also, I’m concerned that it might introduce my laptop to additional security risks.
Should I develop within a Linux guest OS? This is not as convenient as doing development within my host OS but it does mean my LAMP development environment is not running all the time wasting system resources when I’m not doing development work. And it is also more secure because I can restrict access to the guest OS.
So my latest thinking is to use a hybrid approach. I’ll setup a Ubuntu LAMP server as a guest OS using VMware Fusion. Then use a file share so I can edit the web site files within the host OS. It seems like this approach gives me the best of both worlds. I can edit files in OS X using an editor like TextMate while hosting and testing the web site on a LAMP server. Hmmm, I think maybe this is the right approach for me.
For grins I decided to see if Killink CSV will run under Linux using the latest version of Wine. I tried a few months ago and it didn’t work. So imagine my surprise today when I upgraded the version of Wine installed on my Ubuntu machine, installed Killink CSV, and saw it run under Linux for the very first time. All functionality works as expected. I’ll post more about this soon.
I’ve been a Mac user for a little more than 6 months now, and while I’m still writing software for the Windows platform, I’m toying with the idea of targeting OS X for an upcoming product. The use of version control software is part of the software methodology used at White Peak Software, and the version control software I used is CVS (Concurrent Versioning System).
Why CVS instead of Subversion? Simple. I have been using CVS since early 2000. It works for me and I see no reason for moving to Subversion. If I were starting from scratch I would most likely select Subversion for versioning control, but that’s a different story for a different blog post. This blog post is about my review of the various CVS clients available for Mac OS X.
TortoiseCVS is the CVS client I use on Windows and is by far, in my opinion, the best Windows CVS client out there. This of course is what I used as a baseline for finding a CVS client for the Mac. The CVS client I use needs to be as good as, or close to, TortoiseCVS. My preference for a CVS client for the Mac would be one that provides a Finder like user interface and uses right-click popup menus to interact with the CVS repository. That’s what I went searching for and here is what I found:
Xcode from Apple has an SCM repository feature that works with CVS, Subversion, and Perforce. I like the approach used in Xcode but I wasn’t able to get it working with my CVS repositories. The first problem I encountered was the lack of sserver support. The workaround for this is to use CVSNT instead of CVS, which comes installed by default on OS X. Unfortunately Xcode has a problem with sending the password to CVSNT and since CVS doesn’t support sserver Xcode was quickly off my list of CVS clients to consider.
For grins I decided to enable pserver on one of my CVS repositories to test Xcode with CVS. Unfortunately I ran into more problems. For starters, there is no way (that I can find) for specifying a module. Secondly, when I was finally able to get Xcode to checkout a complete repository it would crash Xcode. I was testing with a rather large repository and the crash happened after about 20 minutes of download time. I tried this 3 times and the crash happened all 3 times. So even if Xcode did work with CVSNT and I was able to use sserver, I still could not use Xcode as my CVS client.
The next CVS client I tried was MacCvsX (version 3.3 beta 2). This client has no problems accessing my CVS repositories but I found the UI to be a bit cumbersome. Also, I didn’t like the fact that when I wanted to add lots of new files to the repository I had to select each and every file individually. There is no “Add Content” feature like that found in TortoiseCVS. While I can do everything I need to using MacCvsX, I found it UI to be inefficient. Thus my search for a CVS client for Mac OS X continued.
I looked at MacCVS Pro next, but I never downloaded it. The revision history shows the last update to be March 27, 2000. That’s nearly 8 years without an update. I doubt it will run on my Intel-based MacBook Pro so I didn’t bother to download it.
After more searching I discovered that the MacCVS Pro website at maccvs.org is out of date and no longer maintained, but the project lives on at SourceForge.net. The up-to-date MacCVS Pro can be found at http://sourceforge.net/projects/maccvspro/. The latest update at the time of this writing is January 14, 2007. Ah, much better. I did download it but I never ran it. According to the release notes in the readme file the latest build of MacCVS Pro “will only run on PPC machines (and Intel machines via Rosetta).” And the readme goes on to say “This is likely the last version that will be built using CodeWarrior, since CodeWarrior is no longer commercially available.” So MacCVS Pro is not the CVS client for me.
The next CVS client I looked at was MacCVSClient version 1.10. Now this product is more to my liking especially after looking at the other options. It works well with my CVS repositories and I like the concept of opening a sandbox to get a hierarchical view of the files. I also really liked how the hierarchical view automatically refreshed to reflect the most recent changes to the sandbox area and files within the sandbox. What I didn’t like was the diff viewer. While usable it wasn’t what I have become accustom to. I prefer the split window approach when viewing differences between files. Still, MacCVSClient is an excellent choice for those looking for a free CVS client for the Mac.
My search to find the ideal CVS client for Mac OS X lead me to SmartCVS from Syntevo. SmartCVS as a very clean, modern looking user interface. It provides different views of the sandbox. It allows me to easily checkout specific modules instead of the complete repository. As a matter of fact, SmartCVS has a project manager that allows me to save the settings for a particular module. I found this feature to be really cool and handy. And even though it does not have the “Add Contents” feature found in TortoiseCVS, SmartCVS does make it easy to add large sets of files to a repository even when the files are contained within subdirectories.
SmartCVS comes in two favors, Foundation and Professional. Foundation is free but it does not include all the features found in the Professional version (click here for the features comparison chart). The Professional version is affordable costing only $79 USD for a single user license and discounts for multi-user licenses.
My only complaint with SmartCVS at the moment is that Syntevo needs to improve its SEO. I didn’t find SmartCVS in my initial searches and had I not spent a few nights in a row looking for CVS clients I probably would have never found it.
In my opinion and based on my needs, SmartCVS is the best CVS client available for the Mac. It lacks some features that I have come to expect with TortoiseCVS
such as the ability to use the diff and merge tools of my choosing, but it definitely has unique features that I like such as the Project Manager. So if you are looking for a good CVS client for the Mac, give SmartCVS a test drive.
\[Update\] Turns out SmartCVS does allow users to specify external file diff and merge tools. The options are found under Preferences.
I love my MacBook Pro. It’s an awesome machine and OS X is a great operating system. However, I have encountered 2 problems when dealing with my Windows-base network. First problem is accessing Windows 2003 file shares and the other problem is resolving machine names on the local network.
I still haven’t solved the second problem but today I came across the solution for the first. This blog posting by Drew McLellan gives the step by step instructions for accessing Windows 2003 file shares from Mac OS X. Thanks Drew!
After resolving the Windows Server 2003 file share access problem I turned my attention to fixing the DNS issue I’m having. I’m able to ping the IP address of machines on my Local Area Network but I’m not able to resolve the machine names. I have a local DNS running on Windows Server 2003 but for some odd reason OS X is not using it to resolve names. So I decided to use a stop-gap approach for the time being.
I modified the /etc/hosts file to include the address of the machines with a static IP address. After all, these are the only machines I need access to from OS X. Here are the steps I followed:<ul>
<li>Sign in as an administrator (or an account belonging to the sudousers group)</li>
<li>Launch a terminal shell (Applications > Utilities > Terminal if you are using Finder or type terminal in Spotlight)</li>
<li>Run the command sudo vi /etc/hosts</li>
<li>Scroll to the end of the file</li>
<li>Type i to enter insert mode</li>
<li>Press the enter key to start a new line (my vi skills are weak as it has been years since I have used it - there is probably a better way to append to the end of a file)</li>
<li>Enter the IP address, press the tab key, then enter the name machine</li>
<li>Press the esc key to get out of insert mode</li>
<li>Press :wq to save the changes and quit vi</li>
</ul>That’s is. The machine name will now resolve to the IP.
Earlier this week CodeGear released Update 1 for Delphi 2007. I run Delphi 2007 on my laptop in a VMware virtual machine with XP as the guest OS. Update 1 installed without a problem. It took longer than expected, about 45 minutes, but the wait was worth the update.
There are many fixes and improvements in Update 1 but the one I noticed right away was the improvements to the online help. In March I complained that many Delphi routines were not indexed in the online help. Update 1 fixes this problem which means I no longer need to refer back to BDS 2006 help.
Other Delphi news this week…CodeGear as published the Delphi Roadmap. Highlander is still scheduled for release later this year. Highlander will combine Delphi.NET, Delphi Win32, and C++ Builder into the 2007 RAD Studio, and .NET 2.0 support be provided.
Most interesting to me, however, is the release of Tiburon, which is planned for release during the first half of 2008. This release will provide Unicode support throughout. This is huge for me since I need to provide Unicode support in my native Windows based application.
Last month I mentioned Windows automatic update was maxing out the CPU on my computer after I installed PowerPoint 2007. It seems I’m not the only one dealing with the annoying issue. Here is a suggested workaround to the infamous svchost issue.
Also, here is another newsgroup thread talking about the issue that might be helpful to some.
Update: The workaround mentioned above does not prevent wuauclt and svchost from using 100% of the CPU but it does make the computer responsive again. Prior to applying the workaround the computer would be unusable for long periods of time.
I received an email today from a person interested in my opinion about Delphi 2007 and CodeGear. In his email he said he felt the Delphi 2007 release is not going as planned. He wasn’t sure if that was because the software sucks, support sucks, or what.
I know experience and opinions can vary person to person, but I think Delphi 2007 rocks and I feel the CodeGear team is doing an amazing job despite a hiccup here and there. And to show more love towards CodeGear and Delphi 2007, here is my reply to the person’s email:
I personally think CodeGear’s Delphi 2007 is one of the best releases of Delphi in years. I use the product on a daily basis and I have not experienced any major problems. This latest release makes me excited to use Delphi again.
The only serious problem I encountered was the ordering process but the problems were the fault of Digital River, not CodeGear or Delphi 2007. The CodeGear staff responded quickly to the email I sent informing them of the problems. Not only that, Loreen Fornshell of CodeGear went above and beyond to assist in correcting the problems caused by Digital River.
There is still room for improvement with Delphi. For example, the help system can use a bit more work. But this initial offering from the newly formed CodeGear is not only rock solid (in my opinion) but shows that CodeGear is heading in the right direction.
Note: It occurs to me as I type this blog entry that the person might be referring to Delphi for PHP. I admit I do not share the same love towards Delphi for PHP as I do for Delphi 2007, but it is after all a version 1.0 product. Visual Studio 2002 and .NET 1.0 wasn’t that great either.
I posted a new version of the Connection Tool for SQL Server. This free tool provides an easy way to test and build connection strings for SQL Server databases. This latest version has improved support for Windows 98/ME and Windows Vista.
One unfortunate side effect with this release is you must delete the ConnectionToolForSQLServer.exe.config file if you used the previous version. This file is found in the same directory as the ConnectionToolForSQLServer.exe program file. If you don’t you will get an error message similar to this:
This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.
I explain the reason for this here.
I learned a valuable lesson today about naming configuration files for my programs. When I started building.NET applications I followed the .NET convention for naming program configuration files: MyProgram.exe.config
These days I write less .NET applications and more native Windows applications using Delphi. I continue using the .NET naming convention for configuration files for all my programs even native Windows applications. This hasn’t been a problem until today.
Today I embedded a manifest into a program and when I ran the program I got the following error message:
This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.
Without the manifest the program ran fine, but the program failed each time the manifest was included. I first thought a problem was with the manifest. I review the manifest over, and over, and over again. I even used a manifest from another application that does not have the problem. After banging my head on the wall for a couple of hours I found the source of the problem, and it wasn’t the manifest at all.
Like all my programs, this particular program creates a configuration file using the .NET naming convention MyProgram.exe.config. But in this one case the configuration file is stored in the same directory as the program file, and here in lies the problem.
Apparently Windows XP, and I assume Vista as well, expects the program configuration file to be based on some specific config file schema when the manifest is embedded in the program file even if the program is a native Windows program. I knew this to be true with .NET applications but I didn’t realize the same is true for native Windows applications.
I have not spent time figuring out the expected schema. I suspect it is the .NET config file schema, but I now follow a new naming convention. I do not name my config files MyProgram.exe.config any more. Instead I use MyProgram.config, which does not have any negative side effects when stored in the same directory as the program file.
Update: If you want to use the .NET config file naming convention for your native Windows application, your .config file must be an XML, and the root element must be . Other root elements might be allowed but I know works.
Writing code while listening to Led Zeppelin puts me into the zone especially when I’m making bug fixes.
I’m adding a new feature to Killink to allow the user to integrate the application with Windows Explorer. Not a difficult task. Just involves making some registry settings. But one registry setting I need to make must go under HKEY_CLASSES_ROOT, and this hive is under administrative control in Vista.
This isn’t such a big deal if I am using an installer. Installers will typically ask for elevated permissions to perform the install. But I’m trying to provide a version that does not require an installer. This means my application will have to ask for elevated permissions when the user clicks the option to integrate with Explorer. It also means I need to display the shield icon indicating that elevated permissions are required to perform the task.
This really has me bummed out because it means more work (and learning). Now I have to learn up to ask for elevated permissions within the application.
The 7th thing I like about Delphi 2007 is the “non-breaking” release. In a nutshell this means DCU and packages compiled for BDS 2006 will work with Delphi 2007. I initially had problems with some of the 3rd party packages I manually installed in Delphi 2007 so I didn’t list this as one of the 5 things I like about Delphi 2007. But after resolving the issues (caused by me) I’m finding NO problems using 3rd party packages built for BDS 2006 in Delphi 2007.
<li>Things I Like About Delphi 2007 #1-5</li>
<li>Things I Like About Delphi 2007 #6</li>
The number 6 thing I like about Delphi 2007 is the new message output for compiles. It provides detailed information about the compile including the dcc32.exe command line. It’s nice to see this level of detail especially when odd things start to happen.
In my posting 5 Things I Like About Delphi 2007 I mentioned debugging problems I experienced after installing 3rd party packages. The source of the problem was in fact the use of certain 3rd party packages, more specifically the DevExpress VCL packages. However the problem wasn’t with the DevExpress directly.
I installed all packages found in the DevExpress library/delphi10 directory. This was a mistake made by me. Only certain design time packages need to be installed in the IDE, not all packages in that directory. Lucky for me I still have BDS 2006 installed.
I launch BDS 2006 and Delphi 2007. I went to the installed package list in BDS 2006 (Component > Install Packages…) and manually added each DevExpress package listed in BDS 2006 to Delphi 2007. This resolved the debugging issues I experienced yesterday. And now I’m able to make use of Delphi 2007 for existing projects.
Bloggers in the Delphi community have been tagging each other to post 5 things they like about the Delphi 2007. I wasn’t tagged but I want to play so here are my 5 things.
1) Speed - The IDE loads and shutdowns so much faster then BDS 2006. There seems to be other performance enhancements too such as switching between the form designer and code window. The IDE is so much faster that I don’t like going back to BDS 2006.
2) Vista Support - This is a wonderful enhancement. I especially like how existing projects using dialogs and routines such as MessageDlg automatically have a Vista look simply by re-compiling the project.
3) Application.MainFormOnTaskbar - I really like this new property. I’m working on an SDI application that manages windows in a similar way as Microsoft Word and Outlook. Overriding CreateParams and setting the ExStyle isn’t a big deal but having the MainFormOnTaskbar property helps to reduce some code.
Update: Steve Trefethen posted a nice overview of Application.MainFormOnTaskbar.
4) Online Help - I like the new look of the help system and the new navigation between pages is really nice. But I do have one major complaint. Help indexes found in the BDS 2006 help system are missing. For example launch the help system, go to Index, and enter “CreateDir routine” in the “Look for” textbox. The routine is not indexed in the new help system but it is indexed in the previous help system. And this is not the only routine not indexed. It sucks that this sort of information is no longer indexed in the help system.
Update:Delphi 2007 Update 1 fixes my complaint about the online help. Routines such as CreateDir are now indexed.
5) Improved Tool Palette Search - I really like how the tool palette search has been improved to find all matches containing the search word, not just matches beginning with the search word. This is a great improvement for me given that I use a number of 3rd party VCL components that are prefixed (i.e., TcxComboBox).
So that’s my list of 5 things I like about Delphi 2007. But what about the things I do not like about Delphi 2007.
1) “Non-breaking” Release - Well, sort of. The idea is that DCUs and packages from BDS 2006 can be used in Delphi 2007. In general this is true. However, I have encountered a number of problems. For starters Delphi 2007 is having trouble loading certain DevExpress packages at startup. And I have read in the newsgroups there is a painting issue too although I have not personally experienced it.
Update: Turns out the problem was me. I was installing DevExpress packages that weren’t meant for the IDE. After installing the correct set of DevExpress VCL packages my IDE problems went away.
2) Trouble Debugging - This problem has me scratching my head and for the life of me I cannot figure it out. All BDS 2006 projects I have opened in Delphi 2007 will not run under the interactive debugger. I haven’t logged this issue in QC yet because I’m still trying to figure out what is happening. Simply saying “Cannot debug project opened from BDS 2006 project file” does not give CodeGear enough information to troubleshoot the problem. But the problem still remains. I cannot debug existing projects. (Note: I suspect this issue might have something to do with the 3rd party packages such as the ones I’m using from DevExpress.)
3) More Issues with Debugging - From time to time I get a weird error message when I press F9. The message says the debugger cannot create the process. I launch Sysinternal’s Process Explorer and notice the application to debug is running under the bds.exe process and yet the debugger cannot attach to it. To make matter worse I cannot kill the spawned process. I have to close down the IDE to kill it. (Again, I suspect this issue might have somethign to do with some of the 3rd party packages I have manually installed.)
Update: Fixed my Delphi 2007 debug issues.
4) No Support in FinalBuilder (yet) - I use FinalBuilder for all my projects and unfortunately FinalBuilder does not support Delphi 2007 (yet). But according to the newsgroups a new compiler action for Delphi 2007 is in the works.
Update: FinalBuilder now has a Delphi 2007 compiler action.
5) No Support in EurekaLog (yet) - EurekaLog is another 3rd party tool I use, and unfortunately support for Delphi 2007 is not there yet. But good news is EurekaLog should have support in about 2 weeks.
Update: EurekaLog now has Delphi 2007.
I know some of these dislikes are not directly Delphi 2007 but they do prevent me from completely moving from BDS 2006 to Delphi 2007 right now. So Delphi 2007 is still an experiment for me at the moment while I wait for 3rd party support. Meanwhile I’m still using BDS 2006 for production work.
Update: I now use Delphi 2007 daily. Best Delphi IDE in a long time.
The CodeGear folks are awesome. They were quick to respond to my pre-order issue. CodeGear’s Loreen Fornshell worked directly with me. She was able to sort through the mess and correct the mistakes made by Digital River. It did take a few days but based on my phone calls with Digital River I suspect the delays were caused by DR and not CodeGear.
Thanks to CodeGear folks like Loreen my pre-order mess has finally been cleaned up and I should have my license for Delphi 2007 later today.
I installed Vista the other day preparing the Delphi 2007. I don’t have much of an opinion on Vista yet because I haven’t spent much time playing with it other than to say you better have a beefy machine with lots of RAM if you want the best UI experience. I ordered more RAM for my laptop so I can run Vista’s Aero theme. I’m not 100% sure if this will meet the minimum requirements needed to use the Aero theme but based on what I have read it should. I’ll know in a couple of days after the new RAM arrives.
Borland announced last year the spin off of CodeGear, their Developer Tools Group. Since that time CodeGear has done things to improve not only their products but communication with the developer community. I have been so excited about this new energy that I pre-order a license for Delphi 2007 back in February.
Last week CodeGear announced a 25% discount for pre-orders of Delphi 2007. I had already placed my order so I sent an email to CodeGear asking if it were possible to apply the discount to my current order. The recommendation from CodeGear was to cancel my original order and place a new one. And this is where the problems began.
CodeGear uses Digital River for their order processing (when purchasing through the Borland Store in the U.S.) and the experience has been awful. First, I attempted to submit a request to cancel the original order via the Borland Store. I received no confirmation on the cancellation request even after waiting more than 24 hours. So I called customer support and spoke with a customer service rep.
The customer service rep told me my order could not be cancelled, but long story short she could apply the 25% discount manually to the order. I thought all was good.
Friday at the CodeRage event an announcement was made about the release of Delphi 2007. Download instructions and license keys were being sent out. Heck, customers in Germany were able to start downloading Friday afternoon.
I waited all weekend for my email. Unfortunately it never arrived. And today I received an email from Digital River telling me my order has been cancelled. Yep, it took almost a week for Digital River to receive the original request sent through the web site.
On top of that, the email I received this morning acknowledged the fact that I had spoken with a customer service representative last week. Yet even though the customer service rep has already worked out the issues with the original order, Digital River still cancelled the order today. (And yes, I mentioned the cancellation request sent via the web to the customer service rep I spoke with last week and I was told not to worry about it.)
So I’ve been on the phone with Digital River (again) and I have spoken with 2 separate customer service reps today. The story I’m told now is that my order has been cancelled and the only option I have is to replace a new order. But here’s where it gets crazier.
As part of the original order I subscribed to the annual support and maintenance, also known as software assurance. I was charged for this last month when the original order was placed. I asked since my order was cancelled and I’m now forced to replace a new order will I need to reorder the software assurance option or will the original request be honored (meaning I will receive future releases free during the term of the subscription). (Note: The subscription has already been “fulfilled” and cannot be cancelled.) Digital River has no clue and the order issue is being escalated to someone higher up (this will be the second escalation today).
Meanwhile, people who purchased Delphi 2007 on Friday have most likely already received their license key and download instructions. People in the Delphi newsgroups are already talking about downloading and installing the product.
I, on the other hand, placed my order almost 1 month ago and as of right now have no idea when my order will be fulfilled. I will never again pre-order from CodeGear.
CodeGear, I love your products. I love your team and the new energy coming out of Scotts Valley. But you need to seriously reevaluate your ordering and fulfillment system and the use of Digital River, which seems to only make matters worse.
Update: I received responses from CodeGear and the mess will hopefully be cleaned up soon.
Update 2: The issues have been resolved.
Earlier today I made a rant posting about how my Delphi 2007 order had been cancelled. It is my opinion that Digital River is the source of the problem, although some blame has to be put on CodeGear for using Digital River.
That said, I am amazed at the response I have received from CodeGear. I sent an email sharing my story to key individuals at CodeGear. The purpose of my email was to let them know about the issues I am having and the mess that is getting messier with Digital River. I wasn’t expecting any action from CodeGear because ultimately the order was messed up by Digital River and their enability to process requests in sequential order.
Soon after sending my story to CodeGear I got a couple of email responses including responses from Nick Hodge and Michael Swindell. I even received a phone call. Wow! Talk about customer service. This sort of action would never happen if the Developer Tools Group remained as Borland.
CodeGear is helping as much as they to resolve this mess, and I for one am very impressed. Now if only Digital River shared the same passion and devotion this mess would already be cleaned up.
It’s cheesy to say, but developers really DO matter at CodeGear.
Day 2 at CodeRage is underway and the technical problems are far fewer than yesterday. As a matter of fact I have not experienced any technical issues today. Everything appears to be running fine.
Dr Bob’s session Using AJAX to Extend Delphi Web Applications just ended. By far the best session so far because I learned a lot in this one session that I can begin using today. While the focus of the talk was AJAX, Delphi’s WebBroker techology was used. I have heard of WebBroker but have never used it. I have to say I was very impressed with this technology gem, and I’m kicking myself for not looking at it sooner.
CodeRage Day 1 is over and overall I thought it was a great day. Unfortunately Day 1 got off to a rough start. Bandwidth issues caused video and audio outages throughout the morning but the problems were, for the most part, resolved later into the day.
The number of spam messages received through blog comments at thecave.com has increased to a point where I finally had to do something about it. So today I implemented a CAPTCHA field required to make a blog comment. The code is a partial C# port of the CAPTCHA Server Control for ASP.NET, which is written in VB.NET.
My next step will be removing the 400+ spam comments posted. Joy, joy.
Update: The CAPTCHA implementation has eliminated 100% of blog comment spam on this site. I wish email spam could be eliminated just as easily.
CodeGear made a couple of announcements this week that have generated a excitement and some confusion.
Here are a few Delphi (BDS) Live Templates I created for writting SQL Server script:
Create SQL Server Table
Create table for SQL Server.
Create |TableName| table.
PRINT 'Create |TableName| table'
IF (EXISTS (SELECT name FROM sysobjects WHERE (name = N'|TableName|') AND (type = 'U')))
DROP TABLE [dbo].[|TableName|]
CREATE TABLE [dbo].[|TableName|] (
|*|CONSTRAINT [PK_|TableName|_1] PRIMARY KEY CLUSTERED
|*|)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GRANT SELECT ON [dbo].[|TableName|] TO [public]
Create Foreign Key Reference
Create foreign key constraint for SQL Server.
<![CDATA[ALTER TABLE [dbo].[|PrimaryTableName|] WITH CHECK ADD
CONSTRAINT [FK_|PrimaryTableName|_|SecondaryTableName|] FOREIGN KEY([|ColumnName|])
REFERENCES [dbo].[|SecondaryTableName|] ([|ColumnName|])
TechnologyReview.com has a very good interview with Bjarne Stroustrup, the creator of C++. In the interview Bjarne talks about what is wrong with software development. One quote that really stuck a cord with me is:
“Looking at “average” pieces of code can make me cry. The structure is appalling, and the programmers clearly didn’t think deeply about correctness, algorithms, data structures, or maintainability. Most people don’t actually read code; they just see Internet Explorer or Windows “freeze,” have their cell phone drop a call, read the latest newspaper story about viruses, and they shudder.”
So true, so true.
Many programmers today are only worried about getting a feature out the door as quickly as possible ignoring the fundamentals of software development. This is typically driven by demands from management. I for one have been guilty of taking shortcuts just to meet unrealistic demands. This is one of the reasons I left the corporate IT world. I was losing pride in my work and I felt I was starting to forget the fundamentals of software development.
Bjarne also says (towards the end of the interview):
“A lot of thinking about software development is focused on the group, the team, the company. This is often done to the point where the individual is completely submerged in corporate “culture” with no outlet for unique talents and skills. Corporate practices can be directly hostile to individuals with exceptional skills and initiative in technical matters. I consider such management of technical people cruel and wasteful.”
I am by no means the best programmer nor do I consider myself an expert, but this is something I have definitely experienced first hand on more than one occasion and with more than one employer. In a way it was good for me (I worked with good companies) because I got to do a lot of R&D; work inventing new things, which was a lot of fun, that never went into production but aided in completing production systems. I have been called everything from a maverick to a hero to a lose cannon. And all because I insisted on being myself, an individual with a passion for software development. It wasn’t that I was against the team or company. I just wanted our software to be the best it could be. I wanted time to think about proper algorithms and data structures, and most importantly maintainability. I knew as I do today that the right amount of up front time can have huge payoffs in the long run. Unfortunately too many in the software industry think only of the next 6 months and not of the next 6 years.
It’s official. Borland’s Developer Tool Group, aka DTG, aka DevCo, has spun off. The new company is called CodeGear.
Here are various links about CodeGear and today’s announcement:<ul>
<li>CodeGear blog posting by Allen Bauer, CodeGear Chief Scientist
</li><li>Letter from Ben Smith, CEO CodeGear
</li><li>Borland Spins Off Its Tools Unit
</li><li>Borland Launches CodeGear to Supply Developers with Tools of the Trade
</li><li>Borland forms CodeGear - FAQ
Yesterday Nick Hodges announced that the Delphi 2006 Survey is online. Share your feedback by filling out this year’s survey.
Recently there have been some good postings about using namespaces in Delphi such as the ones here, here, and here. I like how namespaces are implemented in Delphi but I have been slow to adopt them in my Delphi code (especially Win32 code). The problem I have is that the BDS Project Manager has no collapsible view, or grouping for namespaces. Instead, Project Manager lists the unit names. My namespaces tend to be wordy which means I cannot easily see the unit name without making the Project Manager window very wide.
It will be great if the next release of BDS provides some sort of grouping of namespaces within the Project Manager. For example, each segment in the namespace could be represented as a folder that can expand and collapse. And the contents of the folder would be the final unit name or additional namespaces contained within. In other words, the Project Manager would look something like this when the following units are included:
There is already a feature request in the QC that asks for namespace grouping. Please vote for this feature if you are using namespaces in Delphi and you would like to see some type of namespace grouping.
The wpsCsvParser has been updated to support parsing Tab Separated Value files. You can specify the value separator type by setting the new ValueSeparatorType property to either vsCsv or vsTab. Or you can set the ValueSeparator property to any character you wish to use as the separator. The default is vsCsv for CSV parsing.
A new version of the wpsCsvParser has been posted to the White Peak Software web site. Thanks to Stephan Hilchenbach for providing the fix to the bug that caused the parser to ignore the last field on a line if the field is empty.
Nick Hodges, Delphi Product Manager, has been busy for the last 22 days piecing together the Thirty Camtasia Demos in Thirty Days for Delphi. These short videos are the perfect tutorials for those new to Delphi.
My first approach was to set the innerHTML property of the TBODY element from the results table to a zero-length string. For example:
ctrl = document.getElementById(‘searchTBody’);
ctrl.innerHTML = ‘’;
To remove each child node from an element, get a reference to the element and pass it to the removeChildNodes function. For example:
ctrl = document.getElementById(‘searchTBody’);
This approach works for IE and Firefox.
I updated my Delphi CSV Parser to include .NET support. TwpsCsvParser can now be compiled for Win32 and .NET applications using Delphi. To download the code with sample Win32 and .NET applications, visit the Delphi CSV Parser page at the White Peak Software web site.
Don’t have Delphi? Visit http://www.turboexplorer.com/ and download the FREE Turbo Delphi Explorer or Turbo Delphi for .NET Explorer.
You have BDS 2006 right? Did you see the latest marketing campaign that includes the following 3rd party applications (full versions, not trial)?
Beyond Compare Differ
Registered users of BDS 2006 are also entitled to the FREE bundle. Just go to the download site and click FREE 3rd party tools.
I’ve been a Beyond Compare user for years. It’s a great piece of software. Not only can you compare files, but you can compare directories, and, get this, compare FTP sites. The ability to compare with FTP sites is awesome.
Thanks for the 3rd party bunlde DevCo!
I remember when I first started working with C#. A friend at Microsoft showed it to me at PDC in 2000. He just happened to be the same guy who introduced me to Delphi a few years earlier, and I remember him saying “You’re going to love this.” And I did. C# made programming fun again for me after being stuck in the VB world for a couple of years. That fun feeling I had with C# was similar to the fun feeling I had when I was programming with Delphi during the mid-90s.
I enjoyed C# for the years that followed. Of course all the work was web-based. After starting White Peak Software a customer asked me to develop a prototype version of a desktop application. The customer also asked that I use VB.NET, so I gave VB.NET a try. However I stepped away from the project after completing the prototype. Working in VB.NET was an awful experience for me and I now refuse to write any programs using VB.NET.
What was equally as awful was writing a desktop application in .NET (and I have written my fair share of them as well). Sure, it can be done but not with the speed and easy found with Delphi and the VCL. I bought and used Delphi 2005 for the next desktop application I wrote and I haven’t looked back. Delphi is back as my language of choice, and the Borland Developer Studio is my IDE of choice for both Delphi and C# development.
The VCL is the magical piece that makes writing Windows desktop application so easy. Sure I love Delphi as a language. Pascal has always been my favorite. I cut my programming teeth on Pascal back in the early 80’s. C# is a nice language too especially if you prefer C-style languages, and it’s my second programming language of choice. But VCL features such as TFrame and TAction make writing a Windows desktop application make easier compared to .NET.
Today I do more Delphi programming than C# and I couldn’t be happier. My customers are happier too.
Microsoft recently announced .NET 3.0 which is basically the .NET 2.0 Framework with the WinFX library. This has caused a lot of confusion in the software developer community and is in my opinion a stupid move by Microsoft. Turns out I’m not alone in thinking this was a bad move. A petition has been started to reverse the WinFX .NET naming.
The Delphi Oktoberfest video is a funny video from the 1995 Borland Developer Conference. The message still applies today.
Earlier this year I ranted about Borland not offering a free personal edition of Borland Developer Studio, and more specifically Delphi. A few months later a trial version was made available for download. But the new DevCo is going one step further with the upcoming release of the Turbo editions of Delphi, Delphi.NET, C++, and C#.
The single language Turbo editions come in two flavors, Explorer and Professional. Explorer is FREE while Professional will be less than $500 (and less then $100 for students). The only restriction in the Explorer addition is the fixed component palette. In other words, the Explorer edition, which comes with hundreds of pre-built components will not allow you use to 3rd party components. But that’s okay because it is FREE.
The return of single language Turbo editions is exciting news. Now all those others developers who hear me preach about the wonders of Delphi will have a chance to give Turbo Delphi a spin at no cost. And once they discover the power they will be able to buy the professional edition at a reasonable price.
For me, I plan to stick with Borland Developer Studio because I need to multi-language support. But I’m still excited about the new opportunities the Turbo editions will create.
Here is the BDS Live Template I wrote to create an NUnit test method shell for a C# class.
Unit test method
Kirby Turner - White Peak Software Inc
public void $name$()
The template will generate the following C# code:
public void MyUnitTest()
According to the Microsoft blogger Somasegar, Windows Vista will support more than 7,000 new native APIs.
Here is a trivia for you. We have added more than 7,000 new native APIs for Windows developers in Windows Vista. Examples of some of the exciting new areas where we have exposed new APIs include the new integrated search capability and the new peer-to-peer functionality. To get the whole story, please check out the Windows Vista Developer Story at the Vista Developer Center.
Further proof the native windows code is here for a while.
I spent most of my day today fighting browser capibility problems. The AJAX heavy web page I’m working on functions great in FireFox but not so great in IE. After ranting to a friend, he sent me the following picture. So true, so true!
Kevin Downs, of NDoc fame, has decided to stop work on NDoc. One reason is the lack of love from the .NET community. This widely used open source tool for generating source code documentation from .NET applications has received very few community contributions and from what I gathered even less financial support. And to make matter worse Kevin was the victim of a mail-bomb attack believed to be directed at him for not providing .NET 2.0 support fast enough.
I’m not surprised at the lack of community support but the mail-bomb attack is just plan insane. I don’t blame Kevin for stepping down.
In this recent article on eWeek, Tod Nielsen said Borland is close to naming the buyer for DevCo. He also said the process should be complete by the end of September. Exciting time indeed for software developers.
Many people thing Delphi is dead, but they are dead wrong. I’ve been hearing the same time for 10 years now from people who have never even tried Delphi. “Delphi is dead.” “There is no future for Delphi.” And so on. Not only is this wrong, but the future of Delphi is brighter than ever.
I jumped onto the .NET C# bandwagon in the early days. My first C# work started right after the Summer 2000 PDC, and I worked with C# exclusively from 2001 through most of 2004.
Soon after starting White Peak Software I realized I needed a “secret weapon” not only for custom software development work but for the products White Peak Software plans to publish. That secret weapon is Delphi. I have been able to do so much more for our customers, in less time and at a lower cost beacuse Delphi.
Corporations and uppper management will never get it. Microsoft development tools are a safe choice, and in many cases .NET within the enterprise makes the most sense. But for those developers who need a tool that allows them to do many things, Delphi or rather Borland Developer Studio is perfect. The ability to write native Win32 application and .NET applications from the same IDE is priceless.
A good read about one person’s opinion on why Delphi is less risky compared to Microsoft development tools. I concur with this opinion. Heck just the other day I incorporated some Delphi code that I wrote some 10 years ago into a customer application.
The last few weeks have been very busy for me so I haven’t had time to post as many blog entries as I would like. SO here’s a quick list of random thoughts I have had recently.
<li>Microsoft acquires SysInternals and WinInternals. Big news in my opinion. I’m curious to see what Microsoft will do with the excellent SysInternal tools like Process Explorer.</li>
<li>Speaking of SysInternals, Mark Russinovich has an interested take on .NET managed application. I agree with him that client only applications shouldn’t be managed applications.</li>
<li>Foxit Reader is awesome. It is a PDF reader but unlike Adobe’s PDF reader Foxit loads fast and doesn’t require an install. The single Foxit exe has made its way into my bin directory of useful tools.</li>
<li>Allen Bauer points out that Foxit has an SDK that allows you to embed a PDF reader into your application. And best of all it supports Delphi.</li>
<li>Four grand to remove a tree? Makes me question whether home ownership is worth the trouble and unexpected expenses.</li>
<li>DevCo is one step closer.</li>
<li>I recently started some new work in Visual Studio 2003 and I immediately started missing features from Borland Developer Studio 2006. Most noticeable was the lack of built-in support for unit test projects and creating unit test cases. BDS simplifies the setup of unit tests.</li>
One of the items on my never ending to-do list is to install a wiki for internal use at White Peak Software. It’s been on my list for over a year to do but it seems I never have the time. Last week I saw the internal wiki of another small software company and thought to myself, “I need to do the same.” So today I decided to take a break from my normal work to install a wiki.
There are a lot of different wiki software options available so I started by reviewing the popular ones at WikiMatrix. This site even has a Wiki Choice Wizard that helps find a wiki software package based on requirement needs.
The selection criteria was simple. I need something that will run on a Windows server under IIS and does not require a database. The content should be stored in the file system in case a need arises that requires access to the data outside of the wiki software. The software I settled on is DokuWiki.
DokuWiki is written in PHP so my first step was to download the latest version of PHP. A Windows installer is provided that will not only install PHP but configure IIS to use PHP. The installer ran without a problem, which made me very happy.
Next I downloaded the DokuWiki software and un-archived the tar file. I setup a wiki folder and copied the DokuWiki to the new folder. I created a new web site using the IIS management console and pointed the web site to the wiki folder. Within a few minutes, from installing PHP to copying the DokuWiki files to setting up the web site, the wiki site was up and running.
The more time consuming part has been adding content to the wiki site. I started by creating a new start page with links to various White Peak Software resources. I also setup a “Clients” wiki page. From there I started adding content about each client and client project. Even after 3 hours I haven’t made it very far. There’s too much information to add. I imagine I will be adding content off and on for the next few weeks.
The great thing about having the wiki is that White Peak Software now has single point of reference for accessing WPS information. When a new sub-contractor comes on board, or even if I am looking for information about a particular project, the wiki site provides easy access to the needed information. I’m glad I finally took the time to get this started.
I often rave about BDS2006 but not today. Today this fine IDE is really annoying me. I’m editing some ASP.NET User Controls (.ascx) using the markup editor. Every time I save the changes the editor reformats the HTML to unformatted HTML. Not only that it is inserting new HTML into the file such as empty <p></p> tags! It’s annoying me so much I’m considering re-installing Visual Studio 2003.
I don’t recall having this problem with BDS2005 and admittedly this is the first time I have done any major ASP.NET work in BDS2006. Anyone know of a way to turn OFF HTML formatting in BDS2006?
I’m one of those rare developers who have moved from .NET managed code to native Windows code over the last year. After living in the managed code world for years, I’ve returned to native windows coding and I find I am doing more and more native Win32 work each month for customers. Sure the products White Peak Software is writing are native Windows applications but recently customers have been asking White Peak Software to develop native Win32 custom software. The most common reason? The desire to eliminate the dependency on the .NET Framework.
I often hear, “We don’t know if the server hosting your program will have the .NET Framework installed,” or “The end users do not have .NET installed on their desktops so we need something that will run without .NET.”
Now don’t get me wrong. I love .NET. It’s a great framework, but there is something to be said for native Windows applications. And there are still many cases where a native Windows application should be written instead of a .NET equivalent. For instance, I feel .NET applications are ideal for in-house development typically found in corporations, and I feel commercial applications are typically better served as a native Windows application. Of course there are always exceptions to my general thinking, hence the recent resurgence seen at White Peak Software in customer requests for custom native Windows applications.
Don’t believe me? Think everything running on the Windows platform should be managed code? Well, individuals at Microsoft know that native Windows applications are staying around for a while. When the IE Lead Project Manager Christopher Vaughan was recently asked if components of the new IE7 would be implemented in managed code his response was, “No, IE7 remains purely native code throughout. I think as we develop future versions of IE you’ll see a larger focus on managed code, most likely to enable great plug-ins of that type for our platform. One thing people shouldn’t expect is that IE8 be re-written in managed code. For a variety of reasons, native code is where we’ll stay for a while.”
I have been doing more QuickBase work lately. I really like QuickBase but the HTTP API can be a bit hairy. Intuit provides various language specific SDKs for the QuickBase API but Delphi is not included. So I’m writing my own. [I’ll post the code to the White Peak Software site as soon as it is done.]
Ever wish you could contribute to the Visual Studio and .NET Framework documentation? Now you can through the MSDN Wiki. The Wiki is already growing with a number of community contributed edits.
Sounds like the new Hot Fix 5 for BSD 2006 is a good one for those looking to improve IDE performance.
Update: I installed hot fix 5, and now switching between design mode and code is lighting fast! Thanks DevCo.
I planned to attend the Delphi Road Show today hosted in NYC, but it seems other forces had other plans for me. I’m bummed not to be in attendance. For one, I want to show my support for Delphi and the new DevCo. I also wanted to hear David I talk about the future. And lastly, I was hoping to network with other Delphi developers. But it didn’t happen for me. I can only now hope that they add another NYC date, or better yet a Boston date. Or even provide a webcast of the road show once the tour as ended.
Update: A web cast date has been added.
A customer recently asked White Peak Software to design and implement custom software for generating large batches of temporary user accounts. The purpose of these temporary user accounts is to market a subscription based web site in much the same way AOL used to market its services. Here’s how it works.
DevCo wants your input. Michael Swindell, DevCo Director of Product Management, has posted a blog entry asking you to send your suggestions, comments, and questions regarding DevCo to the appropriate email addresses listed below.
Send a message to [email protected] for your company name ideas.
Send a message to [email protected] for your ideas and suggestions.
Send a message to [email protected] with any questions and concerns.
This blog posting by Daniel Wischnewski really caught my attention. He has successfully ported an ASP.NET application written in Delphi.NET to a Linux environment running Mono and Apache. This really doesn’t surprise me because I have in the past run .NET assemblies under Mono without a problem. But at the same time I find it very cool that it is an ASP.NET application written in Delphi, which is something I haven’t yet tried. Awesome stuff.
Someone on the Joel on Software forum asked “how many ISVs are using Delphi?” If you’re using Delphi, share the love and post a reply. White Peak Software is using Delphi and Borland Developer Studio 2006 for its products and custom software.
Registration for the Borland 2006 Road Show is now open for the U.S. dates. I have reserved my spot for the June 8 NYC event.
Here is a useful link for those who want to run a Linux LiveCD under VMware Workstation or VMware Player. What’s neat about this hack is it allows you to run the LiveCD without needing to reboot your host OS. [Hats off to Mike for sharing the tip with me.]
John Kaster has posted tips on using ASP.NET 1.1 and 2.0 on the same machine. It’s a quick read and has references to utilities that will easy the work.
For years I believed the Professional Edition of Delphi did not provide any database access to SQL Server. I assumed if you wanted db access you would need to import the type library for ADO included in MDAC. But raw COM access to ADO is sometimes a pain (think BSTR and SafeArray). So 15 minutes of googling and reading the BDS help file I discovered a gem called dbGo. From the help file, “The dbGo components provide data access through the ADO framework.” Go figure, or should I say “dbGo figure”? [Geek humor, haha]
Here’s another rant I have about SQL Server 2005.
SQL Server 2005 has been out for some time now but I have only recently made the move to it. I’ve been in the SQL Server 2000 world because of customers but my customers are finally making the move 2005.
Overall I really like SQL Server 2005 and the new Management Studio is nice. However, I’m really annoyed that the SQL Server 2005 team decided to do away with the database scripting feature found in SQL Server 2000.
In SQL Server 2000, you can script out each database object into individual files. I do this so I can commit the DDL source for each into CVS, or to do revision comparisons, or to do a number of other tasks. But you cannot easily script out each object in a database with SQL Server 2005. Apparently this is a known limitation as seen here.
One option I found is to write a programming using .NET 2.0 and the SQL Management Object (SMO). Unfortunately time is not a luxury I have and I have an immediate need to script out the each object in a database into individual files. So I started down the path of script out each object individual.
Guess what? It has its own set of problems. First starters, there is not an option to generate a script that contains both the DROP and CREATE statements. Instead what I do is generate the CREATE statement to a query window. Next I generate the DROP statement to the clipboard followed by pasting the clipboard content to the query window. Needless to say, this is a painful process, and I have hundreds of database objects to script out.
I can’t believe the model used for generating scripts in previous versions of SQL Server did not make it into SQL Server 2005. I would have expected the same functionality at a minimum, and possibly an improvement on past versions. But I would never have guess it was removed completely.
Work on White Peak Software’s next product, WS-Workbench (also called Swirl internally) is coming along nicely as you can see from this screen shot. The first beta should be ready soon. Post a comment or send me an email if you are interested in beta testing WS-Workbench once it is ready.
Some days I find it hard to stay focused. There are many new technologies to play with and I want to spend time with them all. I’m itching to install the latest version of DotNetNuke and see what has changed in the last year. I also want to port a web part I wrote for SharePoint from C# to Delphi and make it a DNN module. There’s also a few Ajax frameworks I want to experiment with, and GData (Google Data API) is something I’m really, really anxious to play with.
The fun doesn’t stop there. Microsoft’s Windows Workflow Foundation and SQL Server Integration Services (SSIS) are peaking my interest too. /n software isn’t helping my focus problem either by releasing a new workflow and SSIS. Just more fun stuff to play with.
Maybe I need a new White Peak Software company policy allowing 8 hours per week to “technology play time”.
I upgrade my server install of VMware GSX Server with VMware Server, a free virtualization product for Windows and Linux currently in beta. The VMware Server install went smoothly. It detected the GSX install and uninstalled it for me. It copied the appropriate settings over to VMware Server and my virtual machines were up and running again in a matter of minutes.
VMware Server is an improvement on GSX Server. Most notable improvement is that it works with virtual machines created with VMware Workstation 5.x. No more hacking the .vmdk file to make it work with GSX.
I’ve been working away the last few weeks on a new web service SOA testing tool. However, today I decided to take a break and see what else is happening in the world. One of the things I played with today is Google Calendar. It’s pretty cool and I think I will try it out for the next few weeks.
Google Calendar got me thinking about synchronizing my calendar, which is currently stored in Outlook, with Google Calendar. This lead me to the Google API at http://code.google.com/. The API uses REST principals with Atom and RSS feeds. Now I have even more fun things to play with.
Bruce McGee made a newsgroup posting listing some great examples of interop between Delphi and the .NET world. Two that really caught my attention are:
Unmanaged exports. Run .Net code from Win32 applications without COM interop. Delphi and managed C++ support these, but C# doesn’t.
Virtual Library Interfaces (VLI). Run Win32 code from .Net
applications without PInvoke. Not sure if any of the other .Net
languages support something similar.
I’m working on a new project and have a need to parse XML Schemas found inside WSDL documents. After a few google searches I discovered the concept of a Schema Object Model (SOM). The .NET Framework has a SOM parser as does MSXML. There’s also a SOM parser for Java as well. Because I’m writing a Win32 application, I started learning the ins and outs of MSXML’s SOM parser. As a learned more I did additional google searches and discovered Delphi has its own SOM parser.
Interfaces such as IXmlSchemaDoc and functions such as LoadXMLSchema and LoadXMLSchemaStr are undocumented but the source can be found in source\win32\xml\XMLSchema.pas. There is also sample code for parsing an XML Schema available BDN. With the aid of the sample code I was able to get my sample project working.
And in case you are wondering, the VCL library has a component called TXMLSchemaDoc that wraps Delphi’s SOM parser into a handy component. You will not find it in the tool pallet though. For what it is worth, I found working with the interface (IXmlSchemaDoc) easy and I have not tried the TXMLSchemaDoc component.
CNet news is reporting that Apple has announced Boot Camp, a new software package that makes it possible to run Microsoft Windows on the new Intel-based Macs. How awesome is that! It’s one step closer to making me want to buy a Mac. Now what would be really awesome and close the deal for me is to have “Devco” create a Delphi compiler for the Mac OS and make it easy for me to port my VCL applications to Mac.
Borland has released a trial version of the Borland Developer Studio 2006. It’s a 30-day trial of the Architect Edition and it can be downloaded from the Borland web site.
The blogosphere is buzzing with the latest Borland news, and one common theme is “Who keeps the Borland name and branding?” It looks like the Borland name will stay with the ALM company while the development tools will be branded under the new company.
My first reaction to this was that the development tools should keep the Borland name. After all, most people in the development community associate the Borland name with the development tools such as Delphi and JBuilder. But after thinking about this a bit longer I’m starting to favor a new name. Brand X Delphi might spark new interest in people who have given up on the Borland name.
eWeek.com reports Borland to Divest Dev Tools with Segue Buyout. This is definitely not a move I expected from Borland’s new CEO Tod Nielsen. Borland made the announcement yesterday saying it plans to seek a buyer for the Borland IDE product lines, which include Delphi, C++ Builder, C# Builder, JBuilder, InterBase, Kylix, and more.
Although I didn’t expect it, I think it is a good move. Borland’s focus the last couple of years has been on its ALM business, which is no interest to me. The idea that a new spin-off company will be created that will focus on development tools such as Delphi sounds like the right move to me. And I was happy to read that David Intersimone, aka David I, will be joining the new dev tool company.
Last week I posted a few remarks on the lack of a free Personal or Trial Edition of Borland Developer Studio. A friend of mine wanted to give Delphi a try but unfortunately he cannot because Borland does not provide a way for him to do this.
As it turns out on the same day Marco Cantu made a newsgroup and blog posting on the exact same topic. And there were a number of replies from both sides regarding the issue, which I have included below.
Still I think it is a mistake for Borland to not have a Personal or Trial version available for download available today.
More of the topic from Marco Cantu.
And a differ point of view.
I received an email today regarding an immediate need for 3 to 4 Delphi consultants with XML experience to work on a client project in Omaha, Nebraska. Let me know if you are interested and I will put you in contact with the right person.
The January 2006 issue of the online magazine Bitwise Magazine has a good review of Borland Developer Studio. The reviewer makes some very good points, although I do not complete agree with one point, C# programmers will prefer Visual Studio. As someone who also writes code in C# I prefer BDS over Visual Studio. I’m more productive using a single IDE then using two separate IDE. Using two separate IDE means I have to remember two sets of the hotkeys, how-to’s, and so on.
A good friend of mine is interested in doing some Delphi programming for personal projects. Unfortunately he has no way of using the latest release of Delphi without spending money on a new user license. On the contrary, the hobbyist programmer who wishes to learn C# can download and use Microsoft’s Visual C# Express free of charge.
I’m always talking up the benefits of Delphi to my friends and I’m constantly telling other developers to give it a try. But the sad reality is that those interested in looking at Delphi for the first time or the hobbyist slash student who wants to use Delphi for personal projects and to learn cannot without spending lots of dollars for a new user license.
Get a clue Borland! Make a Personal Edition free for those programmers who wish to learn more about Delphi or use it for personal projects. And make it downloadable from your web site. You will have more Delphi customers in the long run if you do.
As for my friend, Borland has just lost a potential customer by not providing a freeware version Delphi.
Update: Seems I’m not the only one talking about the lack of a Personal Edition or trial version of Delphi. What about Delphi 2006 Trial and Personal?
After installing FinalBuilder for the first time, I looked through the list of actions to see what 3rd party tools were supported. I was pleasantly surprised to see an action for every tool I use in software development except one, DUnit. I thought this was odd but I soon realized that DUnit is supported, just not as a custom action.
Follow these steps to use DUnit in FinalBuilder:
1) Add a Compile Delphi Win32 Project action to your FinalBuilder project.
2) Point the Compile Delphi action to your DUnit project and configure it as needed to compile the project.
3) Add an Execute Program action to the FinalBuilder project. This action is found under the Windows OS action group.
4) Point the action to the compiled bits from the Compile Delphi action. In other words, point it to your DUnit program.
5) Mark the Log Output option, which should be marked by default.
That’s it. FinalBuilder will run your DUnit unit tests as part of the build process and the output from the tests will be captured by FinalBuilder. And of course you can configure the FinalBuilder project to act accordingly based on the pass/fail result of your unit tests.
Some people might think FinalBuilder should have a custom action for DUnit. However, the action would only be a direct copy of the Execute Program action. Or maybe it would combine the Compile Delphi and Execute Program actions into a single action. But as you can see a custom action is not needed. DUnit unit tests are support through the Execute Program action and a custom action specific to DUnit would just be a waste of time for the folks at Vsoft Technologies. Their time is better spent adding support for more tools and adding more features to an already great product,
I spent the day migrating various Visual Studio projects to Borland Developer Studio 2006. For the most part the projects easily moved over but I did have some problems with one project group.
This project group contains multiple C# library projects and an ASP.NET C# web application. The BDS converter for the project group did not set the parent reference for some of the .aspx and .ascx files. However, I was able to quickly fix this using a text editor.
One Visual Studio feature I do miss since moving to Borland Developer Studio is Copy Web Project. I really like this feature to xcopy an ASP.NET web application to a new directory that contains only the files needed for runtime. The Professional Edition of BDS does not have this feature. However, I was able to quickly clone this feature using FinalBuilder.
Right now I’m very happy with the move to Borland Developer Studio. Using one IDE for all my development work (Delphi, C# and ASP.NET 1.1) is making me a more productive software developer.
Nick Hodges has created a set of Delphi Live Templates for VB developers who have moved to Delphi. This templates work with the latest version of Borland Developer Studio. The developer to type VBish code and the templates spit out Delphi code. For instance, type “MsgBox” and you get “MessageDlg”.
For years I have relied on custom built build processes for software I develop. For instance, on a recent large-scale .NET solution I used a combination of NTScheduler, VMware Workstation, CVS, NAnt, and the .NET SDK (along with other tools) to build an automated build environment. However, doing something similar for every one of my software projects is time consuming, and I have to rely on different tools for different projects. For example NAnt is useless for a Delphi Win32 project. So I finally decided to give FinalBuilder a try.
FinalBuilder is the ultimate tool for constructing a build process. Within minutes I was able to automate a build process for a box inventory program I am working on. Of course projects with a more complex build process will take more than a few minutes to setup, but you should be able to automate a build process in minutes and not hours or days for most projects.
I’m amazed at the flexibility provided by FinalBuilder. It supports a wide array of compilers and tools. And it has an easy-to-use GUI for construction of the build process for every time of project I’m working on.
I decided to see how long it would take to setup a build process for SMTP Diagnostics. Although SMTP Diagnostics is a simple product, its build process involves a number of steps. It is the perfect product to evaluate FinalBuilder with.
Here are the steps in the build process that I wanted to automate through FinalBuilder:
- Create a build directory sandbox
- Retrieve the latest source code from CVS
- Compile the GUI program (using Delphi 2006 compiler)
- Compile EurekaLog into the GUI program
- Compile to console program (using Delphi 2006 compiler)
- Compile the licensing framework into the GUI and console programs (using Armadillo)
- Generate the help file system (using Help&Manual;)
- Generate the installer (using Inno Setup)
- Generate a zip file containing the generated installer
- Update and commit build number changes to CVS
- Tag release in CVS
In less than 30 minutes I was able to setup the SMTP Diagnostics build process in FinalBuilder. I can now make a complete build of SMTP Diagnostics in under a minute with a click of a button.
My next step in exploring FinalBuilder will be to generate the online help as HTML files and upon successful build of the product push the HTML files and the installer out to SMTP Diagnostics web site. Given the time I spent playing with FinalBuilder, I’m confident I will be able to automate these steps as well.
Okay, I probably shouldn’t post this screenshot because it is ugly and far from the final Vertigo UI. But what the heck. I have been talking about Vertigo for a year now and this screenshot shows the world I’m actually working on it (finally).
Click the image to view full size.
For those wondering, Vertigo is a desktop email client that is being developed by White Peak Software and will be released later this year. Feel free to post your comments, suggestions, and questions to the Vertigo forum area.