Wednesday, October 17, 2012

Google Dart Language Milestone Reached: M1

Dart Language :
Mature Enough to Invest In


Dart Language / SDK "M1" Version Released

If you have read any of my prior blog entries about Google's Dart language, you already know that I am a fan of this fantastic alternative to coding JavaScript (JS) for web-based applications. Dart can be compiled into JS code, and the gory details of writing large-scale JS-based applications are hidden behind the Dart-to-JavaScript compiler (Dart2JS) which enables you to focus on writing your applications in Dart's modern, clean, Object-Oriented, "typed" language implementation that also includes a rather decent base framework (with things like collections built in).

Check out the latest Dart Language information and get a copy of the free Dart Editor and Dart SDK and try things out for yourself.  There are quite a few emerging projects on GitHub and elsewhere now, and Dart's "pub" project package-repository has gone live too.  If you experience the same web-development productivity gains I have, you will thank yourself for checking Dart out!  I find myself incredibly more productive (feature-points implemented per hour of development time) using Dart to write applications  as compared to writing native JS code...  and, I see enormous savings multiple further as I need to add additional features and functionality to my code.  Dart is simply more maintainable, cleaner, etc.  You get the idea.  Check it out.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Wednesday, September 26, 2012

Embarcadero Delphi XE3 New Features of Interest

Embarcadero Delphi XE3 Review of New Features

Although I am leaning toward using Google's Dart language along with HTML5 / CSS for my applications development needs lately, I find it hard to ignore my 17-year history of using Delphi for native executable desktop applications development. The fact is, Delphi has been an extremely important and productive RAD OOP language and IDE for me, and I find myself longing for the equivalent features and productivity (especially a VCL-like controls hierarchy) on the web side of things.

I previously wrote a review of the new features in Embarcadero Delphi XE2 — with much excitement too — as I was thrilled by the prospect of their new FireMonkey UI controls and 64-bit advancements. But a short time later, I wrote a followup article regarding the fact that more than a few Delphi developers were finding Embarcadero Delphi XE2 / FireMonkey full of bugs and incomplete features and suffering from lack of polish — clearly it was rushed out the door in order to make Embarcadero's annual-release-schedule, whether it was deserving of a label beyond "beta" or not.  I personally am very turned off by this experience, as I feel like I am being forced to constantly pay ever-increasing prices for a product that I am forced to continually upgrade in order to keep it "viable" (i.e., pay for what are "bug fixes" and/or feature-completions).

Contrast this XE2 experience to the superb Delphi 7 and Delphi 2006 releases which I could use for many, many years as-released and with only the free included updates/patches, and develop great applications with a very stable IDE and generated-executables.  Of course the main "problem" with those super-stable releases are how they stand to impact company cash-flow if product designers cannot otherwise create compelling features to entice me to upgrade to a newer version of Delphi. But, on the flip side (note to lame management at Embarcadero!), you have only driven me away with ever-increasing prices for unfinished products that I know I will have to upgrade every year (for substantial cost) in order to get a (hopefully) "finished" product and to get bug-fixes which should be part of FREE update-packs that will never address them; and, the more time I spend away from Delphi, the less likely I am to have a future "need" for it!

Furthermore, so many Delphi "features" of recent come from including a bunch of third-party crap that I don't need or want , like:

  • Embarcadero's stripped-down modeling software (whose clear purpose of inclusion is to attempt to generate an "up-sell" opportunity to their full product),
  • InterBase DB — seriously? I have NEVER encountered a company that uses this database in a production setting, let alone for development settings! Up-Sells are not happening guys, and I find it hard to believe this product is even worth developing in an age of great open-source free database options.
  • outdated versions of third-party controls,...
  • utterly useless junk like Intraweb — statistically totally insignificant market-share and again, I have not encountered a client in the past 5 or more years that has used this (let alone even contemplated using this)...
  • and, all the while, features I need are slow to emerge and/or are being stripped from the "Pro" version and pushed up into the "Enterprise" version.

    E.g., where is the support for SQL-Server 2012 in dbExpress controls (does not show in your literature for XE3 yet), should people want that.  Next, given Microsoft's push to go ODBC (vs. ADO) for SQL-Server connectivity, I find it detestable that Delphi's dbExpress ODBC Driver is relegated to an "Enterprise" version even as nearly all other development platforms consider ODBC to be an essential entry-level database-connectivity option.  I can currently use dbGO™ for ADO connectivity for Windows (MDAC 2.8) in the "Pro" version of Delphi, but what am I to use for SQL-Server's next version when MS says "ODBC is the only way"?  Wow, I see being forced to Delphi Enterprise at 2.5-times the price of "Pro" just to keep what I have had for years with "Pro".  Perhaps you can blame this on MS, but seriously: ODBC = "enterprise" only?
That said, let me continue with the new Delphi XE3 features for anyone that wants to risk upgrading only to have to upgrade again to get what they want, and/or be forced to move from the "professional" to "enterprise" version in order to get the database-connectivity they need, etc.


New Features in Delphi XE3

Now that the official Embarcadero Delphi XE3 release is available, the first thing I wondered was: is it "ready" this time? Time will tell, but for now, here are the features in XE3 that are supposedly worth pointing out:

Windows 8 "Metro" Applications


The Delphi RAD (Rapid Application Development) IDE and Component-Set framework now targets Microsoft Windows 8 "Metro" applications.  New Metro Project Templates and Application Styles for Delphi and C++Builder exist (including VCL Metropolis project templates blank, grid, split layout, plus Office 2013 styling), but there are apparently caveats to all this Windows 8 support with regards to WinRT.  Note that Embarcadero® literature regarding what's new in Delphi XE3 states that "Embarcadero® RAD Studio is preparing for full support of the Windows® 8 Metro® user interface".

This conditionalized-wording concerned me, so I went digging, and soon found this very active and lengthy Embarcadero  discussion forums topic regarding this issue where Allen Bauer (Embarcadero Chief Scientist) states that, in response to whether Delphi will be able to "support native Metro development using the unmanaged API", the following:
"Yes. We are very keen on supporting WinRT with native Delphi & C++ code. Right now, the issues surrounding the WinRT space center around the fact that many OS-supplied APIs which are required by anyone implementing their own language RTL are actually off-limits unless you're the VC++ RTL DLL. You know, little things like RtlUnwind for exception processing and VirtualAlloc (et. al.) for memory management... Any calls to those APIs from your application will automatically disqualify your application from being an "official" WinRT application capable of delivering through the MS app store. 
Right now the VC++ RTL DLL is given special dispensation since that is the library that makes the calls to those forbidden APIs and not directly from the user's app. We're currently rattling some cages at MS to find out how or if they're going to allow third-party tools to target WinRT. Until we can get past that, targeting WinRT isn't actually possible from a deliverable product sense. We are able to build WinRT applications with Delphi that work with a developer certificate, however they all fail the application qualification checks because of the aforementioned (an other) APIs
Like the APIs I mentioned above, there are lots of changes with WinRT that make targeting it a little more tricky. For instance, you cannot merely open any file, access the registry, and even use the loopback (127.0.0.1) adaptor. LoadLibrary cannot be used to load any arbitrary DLL; you must call LoadPackageLibrary and only on a DLL that is present in the digitally signed appx package. WinRT is a seriously locked down sandbox or "walled-garden" with some extremely high walls. 
This is a little known or understood "feature" of Windows 8. I see no press that even talks about this at all. IOW, it's Windows 8's "dirty little secret." "

So, I am just not totally sure what to make of all this. I understand where Embarcadero is coming from here and why WinRT applications are a challenge due to Microsoft implementation specifics, but how can one of the more substantial features of XE3 (Windows 8 support) be subject to such conditions yet? All I got out of this was: please wait for Delphi XE4 features that really make WinRT possible. Time will tell, but this is yet again another point of potential concern with regards to a paid upgrade for a feature I may not truly be able to fully exploit.

FireMonkey Changes for Delphi XE3 (aka, "FireMonkey2")


Given the incomplete state of FireMonkey in Delphi XE2, I was looking forward to seeing what the second full incarnation of the FireMonkey controls and technology in XE3 would yield — I essentially expected them to now be worthy of a "version 1.0" designation vs. what I considered an extended technology-preview in what came with the XE2-provided FireMonkey set.  Of course, Embarcadero calls them "version 2.0" for maximum marketing effect.

The new FireMonkey2 XE3 features include:
  • Bindings: TDatasource is no longer required for LiveBindings as you can now simply link a BindSource directly to a dataset like TClientDataset.
  • Actions: FireMonkey now supports actions and action lists, features that were previously supported only in VCL.
  • Anchors: Anchored controls "stick to" the sides of containers, and also stretch, if so specified. I really thought this was a substantial missing feature in XE2, especially seeing that I implemented anchor-support in my own SVG-UI-Widgets quite easily, but what do I know.
  • Audio-video: FireMonkey offers support for capturing media data (audio and video).
  • Layout management: new FireMonkey layouts (Flow layout, Grid layout) simplify the arrangement of controls in a FireMonkey application. Text Layout features were listed, but I have yet to see details of what that involves.
  • FireMonkey 3D enhancements: not that I give a darn, since I am one of the few software developers that care about business applications versus graphical "fluff". But, I guess it is neat to know that a new materials system and shader compiler exist to make better use of modern hardware and graphics frameworks (like DX9, DX10).
  • Gestures: FireMonkey now supports the gestures that are also supported by the VCL.  This is nifty and all, but the fact is, I have not encountered any clients that want a gesture-enabled Windows application: nobody has widely-deployed touch-enabled desktops, for starters.
  • New styling abilities, including Metro-look styling. And, these same FireMonkey2 components are supposed to be Mac OS Retina display optimized.
  • FireMonkey Sensor Components: Non-visual components for using device sensors (Location / Motion) have been added, though Motion sensor is Windows-only for now. Virtual keyboard is now supported too.

Other Delphi XE3 Features of Interest


One related (to FireMonkey mainly) feature of significance is the new Visual LiveBindings Designer and LiveBindings Wizard — bringing essentially a drag-n-drop approach to designing bindings. You can now create data sources (TPrototypeBindSource or TBindSourceDBX) from within the LiveBindings Wizard. Using a TPrototypeBindSource, now you can bind multiple properties of different objects to the same data. A set of Quick Binding Components components have been introduced in order to make LiveBindings links seamless — these produce auto-generated expressions for easy linking objects. LiveBindings can now be created from one control to multiple controls, seamlessly via the LiveBindings Designer.

And, by the way, TGrid is now supported by Live Bindings (given the widespread use of this control, that surely was a "need" for this technology to be useful). There is some new ability to group various Live Bindings together to form a "layer", which seems mostly about making complex groups of bindings easier to work with (layer data is saved in .vlb files).

There really was not much else in XE3 that got my attention.  There were some changes regarding the Mac OS X builds and such, but I am not experienced at all with deploying Delphi applications to OSX, so someone else will be able to review those features. So many other listed "new features" were simply included "junk" (as mentioned elsewhere in this review) or things I'd expect of any new release: like, updates to a list of supported databases, etc.

Conclusion

I would really like to believe that Delphi XE3 / FireMonkey is making strides toward relevance that could result in a resurgence in Delphi software development, but in an age of mass migration to "web based applications" and many, many alternatives (and much more popular ones at that, not to mention many lower-cost or free / OSS alternatives), I cannot help but think that Delphi will forever remain a niche product relegated to the few. It has potential to be so much more, but until Embarcadero gets over its hangup on including totally irrelevant products (like InterBase, IntraWeb, etc) and calling them "features" while simultaneously crippling the "Professional" version (i.e., the only "affordable" version) this product is destined to further obsolescence and obscurity.  Sad. It really had such incredible potential.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Wednesday, September 05, 2012

VMware ESXi 5.1 New Features and vSphere 5.1 New Features

This blog is a followup to the VMware ESXi 5.0 New Features posting from just over a year ago. VMware has released to the public the details of new features in VMware ESXi 5.1 and vSphere 5.1 and I will cover those new 5.1 features here, though if you are new to the 5.x series, the prior blog may still be quite interesting also. Spoiler: one huge new "feature" in 5.1 is removal of the vRAM limits! Let's look at all this more...


New Features in VMware ESXi 5.1


vRAM Memory Limits Removed: the biggest non-feature "feature"!

What does it say about a product when the biggest "feature" is simply un-doing / correcting a blunder made by upper-management at a company? If you remember the fiasco surrounding the new vRAM memory limits imposed by ESXi/vSphere 5.0, you know to what I refer. VMware's attempts to squeeze more cash out of customers by imposing what amounted to a RAM-tax upon their robust server boxes backfired (i.e., irked customers, like me). And, they have now un-done that mistake. ESXi/vSphere 5.1 is supposed to now be priced (solely) on a per-CPU-socket basis rather than on a strange and ridiculous combo of sockets/virtual memory used/VMs-being-managed. That is a good thing: I actually stuck with ESXi 4.1 due to the 5.0 vRAM bull@#! So, version 5.1 is on my radar.

Support for Newer Hardware

Not surprisingly, this latest 5.1 release includes support for bigger and more recent computing hardware (both Intel and AMD). In addition, the virtualization hardware-abstraction layer has been upgraded to a new "Version 9 virtual hardware" that includes support for Intel's VT-x with Extended Page Tables virtualization assistance features and the AMD-V with Rapid Virtualization Indexing (RVI) (nee, "nested page tables"). This VT-x/EPT and AMD-V/RVI support is to partially reduce hypervisor and virtual machine (VM) guest operating system overhead imposed on the physical processors (your server's CPUs).

One nice feature that comes along with this latest 5.1 version is, unlike with the 5.0 release, it is possible to allow any VM generated on VMware ESX Server 3.5 or later to continue to run on ESXi 5.1 unchanged (i.e., without being forced to shut down, update to the version 9 virtual hardware, and restart). Of course, if you want the latest features of the VM and hypervisor that come with "version 9 virtual hardware", you will have to update your VMs to get it, but at least you have the option to postpone the virtual-hardware upgrade task until it is convenient.

New Adobe-Flash Web-Based Management Client for vSphere 5.1

Yes, you read right: a new Flash-based management client! (actually, it was written in Apache Flex, which uses Flash to run applications built with Flex). I personally am OK with this as I have worked with some very capable Flash-based applications. The old management client is still able to interact with vSphere 5.1 applications, but features that are new to vSphere 5.1 will only be available in the Flash-based web interface client. Sure, it means that you need Flash installed on whatever machine you plan to manage your virtualization setup from, but such is. I already need Flash for so many other things that this is a given.

The new UI is peppy, stable, and secure from what reviewers are saying so far. And, it offers an advantage of performing some potentially-long-running-tasks asynchronously (threaded) so as to prevent UI lockup that could occur in the previous management UIs. And, the fact is, Flash-based UIs should look and behave identically on any device that can run Flash — which surely cannot be said of HTML-based UIs!

Virtual Machine Hardware-Accelerated 3D Graphics Support

Maybe VMware read my past blog where I stated (how in ESXi 5.0) that I felt "something is amiss: where is the Nvidia CUDA / vGPU support in ESXi 5.0? Well, it turns out VMware is noticing the importance of offloading processing to GPUs after all:
With vSphere 5.1, VMware has partnered with NVIDIA to provide hardware-based vGPU support inside the virtual machine. vGPUs improve the graphics capabilities of a virtual machine by off-loading graphic-intensive workloads to a physical GPU installed on the vSphere host. In vSphere 5.1, the new vGPU support targets View environments that run graphic-intensive workloads such as graphic design and medical imaging.

Hardware-based vGPU support in vSphere 5.1 is limited to View environments running on vSphere hosts with supported NVIDIA GPU cards [well, duh] (refer to the VMware Compatibility Guide for details on supported GPU adapters). In addition, the initial release of vGPU is supported only with desktop virtual machines running Microsoft Windows 7 or 8. Refer to the View documentation for more information on the vGPU capabilities of vSphere 5.1.

NOTE: vGPU support is enabled in vSphere 5.1, but the ability to leverage this feature is dependent on a future release of View. Refer to the View documentation for information on when this feature will be available.
Hmmmm... I am not too keen on that final caveat / disclaimer (about "future release" and timeline), but it sure sounds better than the lack of information about NVidia GPU support in previous releases! I am definitely intrigued by this since I play around a bit with CUDA code, but I am not specifically seeing "CUDA" mentioned here. I wonder how far this "off-loading" goes?

Other New and Enhanced ESXi / vSphere 5.1 Features

In no particular order...
  • Windows 8 desktop and Windows Server 2012 support. Nothing I personally plan to use in production anytime soon, but support is there for the latest Microsoft operating systems. I do have intentions of trying these latest OS offerings out, and VMs are the only way I would even consider it; so, good thing they are supported.
  • ESXi 5.1 has improved CPU virtualization methods ("virtualized hardware virtualization", or VHV) that is supposed to allow near-native-access to the physical CPU(s) by your virtualized guest OS's. We all like more speed in our VMs, so this sounds like a plus.
  • ESXi now has the ability to perform a VM-live-migration between two separate physical servers (running ESXi) without the need for both machines to be attached to the SAN. I need to read up on this and fully understand what that means... like, do I need a SAN at all anymore for this?
  • CPU counter and hardware-assisted-virtualization information can now be exposed to guest operating systems (useful to developers that need to debug / tune applications meant to run in a VM).
  • New Storage Features including: read-only file sharing on a VMFS volumes have been increased to 32 (from 8); Space Efficient Sparse Virtual Disks with automated mechanisms for reclaiming stranded space plus a dynamic block allocation unit size (tune-able to storage/apps needs); 5 Node MSCS Cluster (vs. 2 node); jumbo frame support for all iSCSI adapters (with UI support too); and, Boot from Software FCoE.
  • The reliance on a shared "root" user account (for administrators) was eliminated and support was added for SNMPv3. Local users assigned administrative privileges automatically get full shell access and no longer must "su" (sudo) to root to run privileged commands. This makes for finer-grained auditing and monitoring, which is a plus in shared environments.
  • With vSphere 5.1 Guest OS Storage Reclamation feature: when files are removed from inside the guest OS, the size of the VMDK file can be reduced and the deallocated storage space returned to the storage array’s free pool (utilizes new SE sparse VMDK format available with View); but note, this feature carries with it the same disclaimer that the NVIDIA stuff did — i.e., "dependent on a future release of View". Argghh. Wonder how far in the future that may be?


Conclusion

There are a fair number of new features in this latest release of ESXi 5.1 and vSphere 5.1 that are worth checking out, even though some significant ones are "dependent on future releases of View". The timing of this ESX / vSphere release goes along with the latest VMware Workstation, which I discuss here too: VMware Workstation 9.0 New Features of Interest — if you are interested in the desktop-product side of things.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Tuesday, August 28, 2012

Google-Dart / SVG Widgets Released on Github as Open-Source

Dart-Squid UI SVG / Dart Components


SVG / Dart GUI Widgets Initial Release

I have written a couple blogs about the potential for Google's Dart language to improve browser-based software applications development. In that previous posting, I also mentioned that I was working on my first open-source software (OSS) Dart language library: a set of Dart / SVG UI Development components, controls, and framework.

2018: UPDATE

I removed the Github Repository where I had this code.
I have not had time to update my SVG/Dart Widgets to make use of the latest Dart features, but perhaps sometime in the future I will do so. 

Introducing: dart-squid

The moniker I arrived at was simply a pseudo-acronym that pulled first letters from Svg, Quick, User Interface, and Development / design: i.e., "SQUID", or as the new github repository is named, "dart-squid". I have now pushed an initial commit of these open-source widgets to my Github dart-squid SVG / Dart UI Components project site under the MIT license (for freeware).

These components work in the Dartium browser (Chromium with Dart VM). To use the normal Chrome browser (JavaScript version), you would have to have the Dart Editor installed, download the widget code from github, and launch as a JavaScript project (the editor uses dart2js compiler to make this possible).

These Google-Dart/SVG UI Widgets are my first solo open-source release to Github. They are not quite as far along as my original JavaScript-based ones, but it sure was a lot easier developing the same functionality in Dart vs. JS! Dart allowed me to completely refactor the hideous JS code (prototype-ridden ugliness, etc.) and write rather decent OO (Object-Oriented) code that looks quite a bit like Delphi (i.e., object-Pascal); always a plus for Delphi aficionados like me. And, the widgets are generally pretty functional for a mid-alpha-stage release.

Dart has been rather stable for me during development, and I have worked to keep up with the latest Dart language and VM changes that emerge as Dart moves toward its "M1" release (milestone 1). E.g., today I quickly fixed a few "breaking changes" that just hit the Dart VM including the movement of the Math.(various routines) into their own dart:math library (previously such routine were in core lib). I also renamed the XMLHttpReq to the new non-XML-prefixed version. Getters are all using the latest adopted syntax (i.e., those without parens). I will try to ensure the existing functionality remains able to execute as the Dart language progresses (with, hopefully no more than a few days delay).

Future Plans for these Dart / SVG UI Widgets

As time permits, I plan to continue work on implementing new functionality and additional widgets (sub-classes). I have yet to port all my original JavaScript widgets (that included fully-native-SVG scrollbars and checkboxes), but those should be coming in the future. I am also working on getting some documentation wrapped up (though comments in the code are somewhat in-depth already).

If you happen to try these widgets out and want to ask questions, feel free to post comments here and I will do my best to answer. And, just to be clear up front: I do not expect everyone will find these components to be of use... especially right now; they are as much of a "proof-of-concept" as anything and a demonstration of what is possible in Dart/SVG. I will try to make them useful to as many people as possible, but only time will tell whether they will ever be a logical part of any real software applications. They require optimization and much more testing for sure, and until certain browser bug(s)/issue(s) are resolved (that impact rendering in some instances), they will definitely not be production-quality. Stay tuned.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Friday, August 24, 2012

VMware Workstation 9.0 New Features

VMware Desktop Virtualization Products Updated



New VMware Workstation 9 and Fusion 5

It has only been barely a year since I wrote a blog about the new features in VMware Workstations 8.0, and now VMware is already releasing a new full-version-number increment of the product when I would have expected a VMware Workstation 8.1 in its place. This has become the norm in the software industry lately — releasing major versions yearly / frequently instead of point-updates — as it forces us to purchase a license for an upgrade instead of getting a "free" included point-release (as we may have expected if the new version was simply labeled Workstation 8.1 instead).

So, one has to ask: is VMware Workstation 9 really worthy of being a new major release, a ".0" release, and worth paying for an upgrade? Well, the answer is going to depend a lot upon your particular needs for desktop virtualization features and supported guest operating systems in your virtual machine libraries. Basically, if you are one of the (un)lucky few that have to begin supporting Windows 8 VMs any time soon, Workstation 9 might be a "must have" release for you, but otherwise, my personal opinion is that Workstation 9.0 really should have been called Workstation 8.1 (of course, I wanted it as a free upgrade since I just purchased an upgrade to 8.0 a mere 11 months ago!)

Given the historical proximity of VMware's related product releases, one has to also wonder how soon VMware vSphere ESXi 5.1 or ESXi 6.0 will emerge onto the scene too. I have not heard anything official, but I am rather certain the next version of ESX / ESXi (i.e., the server-based bare-metal virtualization platform from VMware) is well into its beta stages and will be arriving in the not too distant future. If you want to catch up on things, I also wrote a blog here about VMware ESXi 5.0 New Features and vSphere 5.0 New Features. I will certainly followup with any information I get about a 5.1 or 6.0 release in the future. By the way, VMware Player 5.0 has been released simultaneously with Workstation 9.0.

If you are an Apple user (Mac OSX) and you use VMware Fusion, that product has been updated as well — VMware Fusion 5 — and it includes much of the Workstation 9 features (like Windows 8 guest support) while adding features designed to take advantage of OS X 10.8 (a.k.a., "Mountain Lion"). I will only summarize the Fusion features here, since I am going to focus in detail on Workstation 9.0 instead. They include: performance enhancements (up to 40% faster VM performance over earlier Fusion releases), USB 3.0 support, improved support for Macs with 16GB+ of RAM, using Launchpad to search for Windows programs, using AirPlay Mirroring to stream Windows apps to HDTVs, Mountain Lion notifications center support, and yes...optimization for Retina Displays (if you have one). Oddly, VMware made the new restricted-VMs feature (from Workstation 9) only available in a new "Fusion Professional" product; perhaps they figure most Mac VM users are not using virtualization in a corporate setting or such?

New Features in VMware Workstation 9.0

IMPORTANT NOTE: as with Workstation 8.0, a relatively modern 64-bit x86 CPU is REQUIRED on your host-system for this new version of Workstation! (i.e., EM64T Intel chips or AMD64)

Key New Features: Windows 8 Guest Support, if you care.

Windows 8 Support is one of the headline new features of Workstation 9.0. The product promises an "Easy Install" that simplifies creating Windows 8 virtual machines. I can not help think that MS and VMware conspired to make a new version of Workstation necessary in order to have an "easy install" experience, but what do I know? Since I have zero immediate need for Windows 8, I am not too concerned about Win8 support in VMware. In fact, by the time I am ready for Windows 8, at the current pace of updates, they will have VMware Workstation 9.0 or VMware Workstation 10.0 on the market — i.e., I doubt I will upgrade to Win8 for at least a year or two.

Unity mode has been updated to work with Windows 8 applications. Unity allows applications running in virtual machines to appear on the host desktop as if they were running on the local OS. The Windows 8 "Modern UI" (nee "Metro-style" branding-issue) applications designed for the Windows 8 Start Screen should integrate smoothly with desktop applications on the host OS. I have not tried this (for obvious reasons: I do not have Win8 installed), but sounds like a feature I'd expect from Unity regardless; hopefully it works well. There is now multi-touch support for that "true Windows 8 experience"; again, I don't care -- I am a software developer and I prefer my keyboard and mouse for my primary development machine.

Other New Features and Improvements: Worth the Upgrade?

VMware Workstation 9.0 promises, as do most new releases of the product, to support ever more powerful virtual machines. The list of improvements include:
  • Faster startup performance — though, by how much I don't know. Personally, I have not had an issue with the VM startup times under Workstation 8. My unencrypted VMs boot nearly instantaneously on my desktop, so I do not really know how much additional performance there is to get.
  • Intel™ Ivy Bridge compatibility — this sounds nice, but really, am I going to have to update to Workstation 9.0 to get this? I have a desktop with a motherboard that can support an Ivy Bridge processor (I currently have a Sandy Bridge series in it), and I purchased it with the intention of updating once the Ivy Bridge series were out and widely available. But, if updating the processor would force me to upgrade Workstation in order to achieve compatibility, both can wait — my development desktop is peppy enough for now.
  • USB 3.0 support for Windows 8 virtual machines — great, but do I get USB 3.0 support in my other VMs? Well, it depends. Workstation 9 supports attaching USB 3.0 devices to Windows 8 virtual machines. The latest portable devices use USB 3 (SuperSpeed) to achieve faster transfer rates for data. USB 3.0 devices such as portable storage devices and video equipment can be connected directly to Windows 8 and Linux virtual machines that contain in-box drivers USB 3.0 controllers. So, aside from those situations, the answer is apparently: no. So, this feature's usefulness will depend on your environment.
  • support for OpenGL 2.1 on Linux and improved 3D graphics performance — OK, this one sounds at least moderately interesting to me. I use VariCAD for some 3D product design and idea development, and it would be nice if the already-peppy product ran even faster in VMs. There is mention of an improved Windows XP graphics driver and fundamental changes to improve performance and enable more advanced graphics capabilities in the future, each of which sounds nice.
  • Remote desktop type capability via "WSX" — although I personally have no need to access my VMs from my phone or whatever, VMware seems to think this is a big deal. They included a new Web interface called WSX that allows access to virtual machines running in Workstation or on VMware vSphere® from tablets, smart phones, laptops or desktop PCs. They claim to do this through a new high performance, Web-based interface that delivers a native desktop experience and does not require flash or browser-based plug-ins. Again, nothing I care about. And, from their release notes page, comes the following quote of concern: "WSX is currently not supported for production environments" — interesting... even as this is a highlighted key-feature of the release that I am supposed to pay for?

    Some of the reason for this not-production-ready situation has to do with device and browser support:
    This feature requires a very modern browser that supports HTML5 with WebSockets. VMware recommends using the Google Chrome 17 browser on PCs and the Apple Safari 5 browser on Mac OS hosts and iPads. Currently there are issues using this feature with Microsoft Internet Explorer 10. WSX may work with other browsers and on Android tablets running Ice Cream Sandwich with the latest version of Google Chrome installed, but more testing is required.
  • Restricted Virtual Machines — finally, a feature I can see value in! Per VMware's release announcement: "IT administrators and instructors can create virtual machines and configure them to prevent employees or students from dragging and dropping files between virtual and physical desktops, attaching devices, or tampering with the virtual machine settings. Once restrictions are configured, the virtual machines can be encrypted and distributed to run on Mac, Windows, or Linux PCs with VMware Fusion® 5 Professional, Workstation 9, or VMware Player™ 5."

    This restricted VM functionality only works on the most recent versions of the VMware products, and it is really the only "killer feature" (from my perspective) that would make me consider the upgrade. Being able to configure a virtual machine with one password to launch it and another password to change its settings should allow administrators to distribute VMs to users with much less concern that they will wreak havoc on the VM after it is deployed.
  • Downloading Virtual Machines from vSphere — OK, this would be my second feature worth considering WS9 for: Workstation 8 enabled customers to (only) upload virtual machines to vSphere, and now Workstation 9 enables downloading virtual machines from vSphere by dragging them from the remote host to the My Computer section of the Virtual Machine Library. Although nice, I can not help thinking that this should have been an 8.1 (i.e., free update) feature.
  • Disk Cleanup — this feature sounds good to me, as I currently rely on the standalone VMware Converter product to recover / shrink unused disk space. WS9 includes a new management option to easily recover disk space, and I need to play with it and compare to the capabilities of Converter. It sure would be nice to simplify this all-too-often requirement.
  • Some other miscellaneous features worth noting — views of your virtual machine on the task bar now include controls to change the power state; "quick switch" is back and hosts tabs have been included in the full screen toolbar; nested virtualization improvements allow users to run ESX as a guest OS and run a 64-bit operating system nested in ESX using less system resources.


There you have it. The choice is yours as to whether the upgrade price (around $119) or the full-product price (around $249) is justified by the features in this version of VMware Workstation 9. I am generally in no hurry to acquire the product like I have been with all prior (paid) releases. If I make the move to Windows 8 sooner than I anticipate, I will most likely update my VMware software at the same time, but for now I am just going to enter into a wait and contemplate mode until something pushes me off the fence.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Wednesday, August 15, 2012

Microsoft Office 2013 PDF / Open XML Support

Office 2013 to Finally Support Editable PDFs and Full OpenXML Standards

Open XML : FULL Support

Yes, the keyword of interest here is full. Since MS Office 2007, Microsoft has supported partial Open XML support — a la Transitional Open XML — which still allowed use of "legacy features" within those documents. Well, those transitionally-allowed legacy aspects essentially made true office-software-suite-neutral documents impossible, since proprietary functionality remained in this otherwise "open" standard.

Office 2007 could read such files, but it was not until Office 2010 before you could write these transitional Open XML formats. But, starting with Microsoft Office 2013, you will finally be able to read, edit, and write true strict Open XML document formats. It is about time! I have encountered files from Open Office / LibreOffice that I just could not fully interact with using just MS Word as I would have liked to.

Open PDF files as editable Word documents!

Woohoo! This one is a huge feature for me — the ability to open and edit the contents of PDF files (i.e., Adobe Acrobat Portable Document Format), and then save my changes as a Word document (or save again as PDF), is something I have wanted for a long, long time.

This ability to work more easily with PDF files from within Word 2013 may just be the feature that makes me upgrade to Microsoft Office 2013 when I was otherwise not planning to do so! I currently go through many extra steps to accomplish an approximation of this forthcoming capability, and having such support built into Office will be a big time saver for me.

Microsoft refers to this new feature as "PDF Reflow" and describes it as follows in this blog posting:
“With this functionality, you can transform your PDFs back into fully editable Word documents, rehydrating headings, bulleted/numbered lists, tables, footnotes, etc. by analyzing the contents of the PDF file.” The goal is not to make Word into a PDF reader or PDF editor. The goal is to help you to bring the contents of PDF files back into an editable format using Word 2013.

Microsoft Office File Format Support — PDF, ODF, Open XML

The following table is courtesy of Microsoft (from the above referenced blog posting). I like this visual chart / table / graphic for how simple it is to understand what each version of Office supports when it comes to interchangeability / interoperability by way of standard file formats.

Office 2003 Office 2007 Office 2010 The New Office
("Office 2013")
Binary format
(.doc, .xls, .ppt)
Open, Edit, Save Open, Edit, Save Open, Edit, Save Open, Edit, Save
Transitional
Open XML
Open, Edit, Save Open, Edit, Save Open, Edit, Save Open, Edit, Save
Strict Open XML Open, Edit Open, Edit, Save
ODF 1.1 Open, Edit, Save Open, Edit, Save Open, Edit
ODF 1.2 Open, Edit, Save
PDF Save Save Open, “Edit”, Save

I am now actually looking forward to Office 2013, which is definitely "news".

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Tuesday, May 15, 2012

Nvidia Parallel Nsight 2.2; CUDA Toolkit 5.0 Preview in Eclipse Version

Nvidia Parallel NSight 2.2 : Visual Studio and Eclipse Now - all editions FREE!


Nvidia Releases Unified FREE Version : No more "Professional" vs. "Standard" Editions

I was happy to read the latest news that shows Nvidia has come to the realization that the best way to further adoption of its CUDA technology is to make its productivity tools (like Nsight 2.2) easily available to all developers.  Nvidia (NASDAQ:NVDA) corporation's line of GPUs (Graphical Processing Units) provides incredibly powerful parallel computing within reach of most individual users and businesses through rather affordable Nvidia Graphics Cards, including its most recent "Kepler" GPUs that have just started hitting the store shelves. The Kepler architecture is available in the latest Nvidia graphics cards like the GeForce GTX 680.

An even wider range of developers is now within reach of simplified CUDA programming and software development thanks to the new Eclipse IDE plugin. The Microsoft Visual Studio version is still available, but now the Eclipse version will open up development of CUDA applications under Eclipse on Linux and MacOS environments (I am still not sure why support for an Eclipse version on Windows OS is not yet indicated; I cannot help wonder if Nvidia has some existing licensing agreement with MS to promote Visual Studio for Windows development — hopefully, with time, the Nsight Eclipse Edition will run on Windows Eclipse too).

New Features in Nvidia Nsight 2.2

Eclipse Edition Specific

One standout in the Eclipse edition is that it uses a preview version of the CUDA 5.0 toolkit that includes Nvidia's own C and C++ compilers. There is actually a presentation about CUDA 5.0 new features today, and I will be blogging about those new features as more details emerge.

Visual Studio Edition Specific

Some features only make sense on Windows, like the support for DirectX 9 frame debugging, frame profiling, and analysis. But, I found it odd that features like "Local CUDA debugging on a single GPU system" and "Support for the new Kepler architecture" were currently only shown as bullet-points under the Visual Studio / Windows version of Nsight and not under the new Eclipse Nsight version. I wonder if this is simply due to how new the Eclipse product is and the fact that it may still take a bit of time to push the same feature-set into both versions. I sure hope that is the case, as the single-GPU CUDA debugging and latest GPU support are both very interesting to me and other developers (especially if you only have one GPU installed in a development system).

General Nsight 2.2 Features on Interest

Nvidia has added features like automatic code refactoring (to convert sequential CPU loops into GPU kernels where parallel GPU execution is possible), syntax highlighting and autocompletion for both CPU and GPU code, and a code analysis system to help identify bottlenecks in CPU-GPU applications via a unified CPU and GPU application trace.

The Nsight Source Code Editor has new project templates and integration with the CUDA SDK samples to make getting started quick and easy — this should certainly help new developers get productive more quickly. The editor has CUDA code highlighting to make it easy to navigate heterogeneous code while CUDA-aware code completion, inline help, and refactoring are certain to improve developer productivity and code quality.

The Nsight Debugger provides seamless and simultaneous debugging of both CPU and GPU code as well as the ability to view program variables across several CUDA threads and examine execution state and mapping of the kernels and GPUs. You can view, navigate and filter to selectively track execution across threads, plus you have the ability to set breakpoints and perform single-step execution at both source-code and assembly levels. This all sounds like great improvements to a rapidly developing product that has come a long way in the past couple years.

Get Started with CUDA / Nvidia Nsight

If you want to get started with CUDA programming and development, and you have a somewhat recent CUDA-Enabled Graphics Card in your system, head over to the Nvidia CUDA Download Page to obtain the free software. I actually posted this image of the page showing how nicely organized it is (they recently updated it to make it rather clear):


Once you have the CUDA Toolkit, you can obtain downloads of the latest Nsight 2.2 at: Nvidia Nsight Visual Studio Edition or Nvidia Nsight Eclipse edition.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Monday, May 14, 2012

Dart Language Web Pages from IIS (Windows 7)

Dart Language Development on Local Windows7 / IIS


Setting proper MIME Type to Avoid 404 Errors

If you have started developing your own Dart Language web pages locally under Windows7 for testing with the Dartium browser, you may find yourself initially running into some 404 Not Found errors being thrown from IIS (Internet Information Services) when you access your local ".dart" (file extension) web pages. This happens because IIS does not know what MIME type those .dart files are by default, not that the 404 error displayed gives you any indication of this.

So, it's time to tell IIS that these .dart files are to be recognized. Note: I am using Win7x64 Pro or Ultimate that has IIS installed. Open up IIS Manager (it is under "Administrative Tools" in start-menu), and add the MIME Type. You can do this either at the connections root / server level for all sites or under the Connections "Sites" sub-tree particular to your Dart-containing web applications and pages.

On the right-hand side of the screen, you will see the "MIME Types" icon that you will double-click to open the list of configured types. Now, simply right-click anywhere in that list of existing MIME Types and choose "Add"; a popup window for "Add MIME Type" will be displayed with two fields labeled "File name extension" and "MIME type". Place the value ".dart" in the file extension field and "application/dart" in the MIME type field and click OK.

This is for Client-Side Dart Code

When you now use Dartium to navigate to a .dart web page, it should be recognized and served by IIS to your browser without that 404 error. Notice that this is simply enabling client-side dart code within the Dart-enabled Dartium browser; this is not enabling IIS for server-side Dart. I plan to discuss server-side Dart development in the future, but for now I am working primarily on client-side (code running in the browser) development as I work on some SVG/Dart components.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Wednesday, May 02, 2012

Dart Language: Rank / Popularity Increasing Daily

Dart Language Rankings Rise

Dart Language on GitHub: Climbing Quickly

As I work on getting the first "public" release of my Dart Language SVG UI-Components/Widgets set ready, I have been contemplating whether I will self-host or push the source-code to GitHub or such. And, one thing I have noticed over the past couple weeks is that nearly every day I look at the GitHub Top Languages page for Dart Language, its popularity is increasing.

As of this writing, GitHub shows: "Dart is the #70 most popular language on GitHub".
[UPDATE: as of the "M1" Dart release-date (October, 2012), Dart ranks as #55 most popular language on GitHub; not bad considering my long-time-favorite development language - Delphi - is currently #40 on that same list after many years in the market].

Although this ranking many not sound very impressive, Dart has moved upward in the ranks quickly since its initial public release.  And yes, I understand that this early rank-movement pace is partly due to the fact that the lesser-used languages are going to be easy to overtake. But, for a language that is in "alpha" stage along with "alpha" stage Editor and "developer" stage Dartium (browser), I see this early popularity increase as a good sign for Dart.

More JavaScript being ported to Dart Language

Another thing I have noticed recently is that in the daily Dart news (a la "Abridged summary of misc@dartlang.org") and on GitHub, there are ever more announcements from fellow Dart enthusiasts that are creating ports of popular JavaScript libraries, wrappers, etc in Dart. I have not had the opportunity to check each one out in detail, but there are projects that target JSON stuff, Redis.io, MySQL, and all sorts of other things.

Given my experience with many projects on GitHub, most (regardless of language) will never (statistically) survive to become mature projects, but I expect that with time, some of these Dart projects will become solid enough to use and/or build applications upon — just like some very popular JS code has emerged over time. Hopefully my own Dart/SVG components will prove to be useful enough to survive or become the foundation for something useful — though, I am not kidding myself into thinking what I am building will fit anyone's needs aside from my own. Time will tell I guess.

It will be interesting to see if Dart can keep up its programming language rank rise in the coming months and years. I sure hope so, as I detest JavaScript for any "real" applications I need to develop. Now, back to programming...

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Sunday, April 22, 2012

Dart Language for Interactive SVG Documents

Dynamic SVG Documents using Dart
(Scalable Vector Graphics files)



I am deep in the midst of migrating a Javascript and SVG UI-Components/Widgets set to Dart Language SVG / CSS. As I prepare to publish my rather experimental Dart/SVG widgets source code and examples, I figured I would start with a super-simple example of how to replace JavaScript with Dart (as used in SVG).
UPDATE: I have pushed an initial release of my Dart/SVG GUI Components to github — see my newer blog post about "Introducing dart-squid: Dart/SVG UI Controls" for details — the source-code there will much better demonstrate the potential of Dart / SVG.

Note: the easiest way to run any Dart code, from my experience, is to download the latest Dart-enabled Chromium Browser build — Dartium (from its continuous-build directory) — I use the Dartium-Win version and it is amazingly stable for this early in a development cycle.

A Simple SVG document with Dart-Language

This example is going to be perhaps way too unsophisticated to cause much excitement, but the idea is simply to get you to consider trying Dart Language (instead of JavaScript), as I believe Dart Language has fantastic potential for browser-based business applications among other things. 

Coming from a Delphi, C#, and JS development background, I find Dart to be much closer to Delphi for development productivity than JavaScript.  I.e., I can write much more functionality in the same time using Dart than I could ever do with JavaScript; and, the code quality is immensely improved, more maintainable, extensible, and polished.

Step 1: create a .SVG file — name it whatever you want... perhaps SVG-using-external-Dart.svg or something similar. Copy and paste the following into that file and save it.


<svg    xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        id="testContainer"
        width="1000"
        height="800"
        xml:space="preserve">
    <script type="application/dart" xlink:href="external-code.dart"/>
    <svg id="testSVGCanvas">
        <rect   id="MySVGRectID" x='10' y='10' width='300' height='150'
                fill='tan' fill-opacity='1' stroke='black' stroke-width='3'/>
        <text stroke='black' x='100' y='100' >Click on Rectangle</text>
    </svg>
</svg>


Step 2: create a .dart file in the same directory — name it to match the xlink:href value we specified in our SVG file — in this case, external-code.dart. Copy and paste the following dart code into that file and save it.


#library("Test");
#import('dart:html');
void setSVGAttributes(SVGElement svgEl, var attributesPairs) {
    attributesPairs.forEach((attr, value){
        svgEl.attributes[attr] = value;
    });
}


//***********************************************************
//********** MAIN FUNCTION CALLED FROM SVG ONLOAD ***********
//***********************************************************
main() {
    SVGElement rectReference = null;
    void MouseDown(Event e) {
        setSVGAttributes(rectReference, {
            'fill': 'purple',
            'opacity': '0.6'
        });
    }
    void MouseUp(Event e) {
        setSVGAttributes(rectReference, {
            'fill': 'tan',
            'opacity': '1'
        });
    }
    print("main loaded");
    
    rectReference = document.query('#MySVGRectID');
    rectReference.on.mouseDown.add(MouseDown);
    rectReference.on.mouseUp.add(MouseUp);
}


Now, you should be able to open that .SVG file using the Dartium browser and you will see a very simple demonstration of using Dart to manipulate the SVG DOM at runtime for some simple interactivity.

In this example, a rectangle will change from tan to purple (while the mouse button is depressed).  You can get a taste for how the dart:html library exposes element events and such here at least (I suggest looking at the APIs on the dart language site; even that base dart:core library is enough to get exited about with real, and quite handy and functional, built-in collections for starters).

Notice that the code I provided here is just one approach, and ridiculously simplified.  Here is another very simple variation on that code, placing the event callbacks within main() if we want.


#library("Test");
#import('dart:html');


void setSVGAttributes(SVGElement svgEl, var attributesPairs) {
    attributesPairs.forEach((attr, value){
        svgEl.attributes[attr] = value;
    });
}


//***********************************************************
//********** MAIN FUNCTION CALLED FROM SVG ONLOAD ***********
//***********************************************************
main() {
    SVGElement rectReference = null;


    void MouseDown(Event e) {
        setSVGAttributes(rectReference, {
            'fill': 'purple',
            'opacity': '0.6'
        });
    }


    void MouseUp(Event e) {
        setSVGAttributes(rectReference, {
            'fill': 'tan',
            'opacity': '1'
        });
    }


    print("main loaded");
    
    rectReference = document.query('#MySVGRectID');
    rectReference.on.mouseDown.add(MouseDown);
    rectReference.on.mouseUp.add(MouseUp);
}



Although I am not demonstrating Dart's full potential here, keep in mind that Dart is a fully object-oriented class-based development language with a very useful optional typing system that make RAD (Rapid Application Development) possible unlike anything you'll experience with JavaScript.  Try it, you may like it!

This super-basic example demonstrates how a dart application can be built within an SVG document. And, trust me, the component set I am programming goes well beyond such simplicity. Stay tuned for more about that...

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Friday, April 20, 2012

Delphi DBGrids.pas Source-Code mods for Alternating Row Color

Alternating DBGrid Row Colors in Borland / Embarcadero Delphi

As I migrate some existing internal software from Delphi to Dart Language and HTML/SVG/CSS, I figured I would post some of my soon-to-be "legacy" Delphi source code online for anyone that may want to leverage it. In this particular case, I have some code I use to rather automatically determine a reasonable color-coordinated alternating-color scheme for grid rows in a DBGrid, as well as the modifications I made to the DBGrids.pas to makes use of this color-flipping code.

UPDATE (JAN-2017): I used to host my modified Delphi DBGrids.pas source-code on another site, but I have now moved my source code onto this blog under this new entry: DBGrids.pas enhancement for automatic alternating grid row colors / highlights.  Go there for an update to all of this.

With my approach, I can have DBGrids with odd/even (i.e., alternating) rows having slightly different but yet nicely coordinated colors, and show their "selected" row as highlighted too

One approach: modify the DBGrids.pas source-code directly

I chose to modify the DBGrids.pas source code provided with Delphi, since the DBGrid.pas DrawCell (TCustomDBGrid.DrawCell method) provided no easy way to extend the routine to do what I wanted.  Fact is, I tried repeatedly to extend DBGrid via the DrawCell routines and such, but I just could not get the control I wanted.  It was so much easier to just "hack" the DBGrids.pas source code directly.

I went a bit beyond just alternating the grid-row colors, as I am also doing some other things like modifying how bookmarks work and selected-rows work and such.

I hope you can get some use of out this.  Enjoy!


Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Thursday, April 19, 2012

SQL Server 2012 Free Book Download (PDF, MOBI, EPUB)

Get a Free Microsoft SQL-Server 2012 Book


Lean What's New in SQL-Server 2012

If you are considering migrating from Microsoft SQL-Server 2005, 2008, or 2008r2 to the newly release SQL-Server 2012, you may wish to see what's new in SQL-Server 2012 before making the move. I wrote a summary blog about SQL-Server 2012 New Features of Interest last month to get you started.

In that blog, I provided bullet-points covering a few areas of interest, including: SQL2012 New and Improved Features / Enhancements, SQL 2012 Transact-SQL (T-SQL) improvements / enhancements, and an overview of Obsolete and Deprecated Features. But, perhaps you want a bit more detail...

Microsoft makes PDF / MOBI / EPUB available for Free

Microsoft Press was good enough to provide a downloadable Free ebook: Introducing Microsoft SQL Server 2012 to help you catch up on their SQL-Server product. So, is the book any good?

My Quick "Review" / Thoughts about this book

I gave the Introducing Microsoft SQL Server 2012 book a quick read-through. Perhaps no surprise: a lot of it reads like marketing material, in my opinion. Yes, the book is "OK" for getting an overview of what's new in MS SQL-Server 2012, as it provides a decent level of detail by areas of interest within the product.

Some observations:

  •  I could not help thinking this book could be a LOT shorter and accomplish the same thing or make it more clear.  This is typical of many tech-books that seem to think more pages equals more credibility.  Who has time for this?

    One example can be found on pages 12-15, where the features by edition are being compared.  Great, but why not start with Standard edition features, and then for the Business Intelligence edition and Enterprise Editions say "includes features of Standard, plus the following:" instead of repeating portions of  the list.  In fact, it gets worse... the way they presented this information is horrendous; good luck deciphering what each version of the product has based on this section of the book.  Why?  They repeat some feature enumerations, but not others. E.g., they repeat "reporting" and "analytics" in each edition's bullet-lists, but only show "spatial support" and "filetable" on the Standard Edition (which, clearly Enterprise will include too).  It's a mess!  


  • I wonder how much time the authors spend on the circular pie-with-arrows image on page 12 that is supposed to show some relation between product editions.  And, let me summarize it's value: ZERO.  What in the heck is this showing?  OK, we know the three editions, but what are the arrows?   It would make sense if the arrows went from Standard, to Business Intelligence, to Enterprise and then ended, but what is with the arrow from Enterprise back to Standard?  Bottom line: the graphic adds NOTHING.


  • The authors suffer from plump-it-up wordsmithing all too often.  E.g., ( from p76) "In addition, the following list articulates other new features associated with FILESTREAM:"; wow, what a lengthy way to say "Additional  FILESTREAM  features include:"!  ughhh.  Such verbal embellishment adds nothing of value.  And, such useless wordiness runs rampant in this book.  Too often, this verbosity makes things less clear than more clear; that is a problem.  I could list plenty of examples, but that too would add little value :)


  • Various errata found even during a quick read.  See page 87's table of "possible use cases" for a multipolygon, and the "Ccadastre"; do editors proof-read these days? They spelled it right in the previous example, but got it wrong during a copy/paste to this grid-box.  By the way, how about using the words "survey map" (one case where two words may be better than one since cadastre / cadaster is not a common term).

    While critiquing their spatial-data examples, I also question their "possible use cases" for point and multipoint where they state "Can be used to draw a tree, pole, hydrant, value"; I don't know about you, but I don't draw trees with points.  I think they want to say that a point or multipoint can be used to indicate the location of tree(s), pole(s), etc.


  • Chapter 5 is entitled "Programmability and Beyond-Relational Enhancements", but yet they did not discuss ANY of the changes to Transact-SQL that I enumerated in my previous blog entry (link above in first paragraph: recommended).   I would have expected at least some discussion of the T-SQL enhancements, e.g.,: new builtin functions, windowing functionality in the OVER clause (handy!), OFFSET and FETCH in the ORDER BY clause, and more.  Perhaps neither author writes many stored procedures or hard-core queries, and thus didn't see the value in mentioning these new features?    


In summary:

The book is certainly a nicer way to get familiar with all the changes in SQL-Server 2012 without having to bounce around all the pages within the Books Online, but the book also leaves out important details regarding functionality that is truly new in SQL-Server 2012 (like the Transact-SQL changes).    Once I got past various issues (as mentioned above), I felt the book did an OK job of presenting SQL-Server 2012, especially considering the fact it is being given away for FREE.

Download it for yourself and share your thoughts here if you have a chance.


Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Saturday, April 14, 2012

Dart Language in; JavaScript and Delphi out.

Dart Language Fills a Void

Dart Language may become my primary development language!

In a previous blog, I mentioned how Google's Dartium browser for Windows — essentially the Chromium "Chrome" browser with a Dart-Language Virtual Machine (VM) buit in — was made available to developers. Since then, I have been using the regularly-updated builds of Dartium to run my native Dart-language applications (HTML and SVG User-Interfaces with Dart for the business-logic), and I must say, I am absolutely thrilled with the productivity improvements I am seeing when developing with Dart (instead of JavaScript)! Words alone can hardly express the potential this language has for improving web-based software application development.

Dart Language: Web Pages are just the Beginning

Did you catch my use of the term "applications" a bit ago. Dynamic Web content (pages) is just the beginning of what I will be using Dart for. Sure, you can replace your JavaScript code with Dart, and realize the benefit of a much nicer OOP (Object-Oriented Programming) approach to web-development, and realize it NOW, but Dart holds more promise.

Dart's True Potential: Business Applications

I have read a quite a few anti-Dart articles recently, mostly from proponents of JavaScript (ranging from JS evangelists to simply average developers that have used JS for a long time). It has been argued that Dart cannot succeed for various reasons: e.g., concerns that Dart will simply not reach more than a certain percentage of users (if other browsers fail to adopt the Dart VM), that the current JS code base is just too big to migrate to Dart, etc. Although these points may have a bit of validity, the arguments make little sense for any business-internal applications where the browser-choice can be 100% guaranteed to include Chrome (if it remains the only browser to include Dart support). And, really, what is the big deal with installing multiple browsers IF it was needed?

There are millions of software applications that run only "internal" to a business, and many of these internal applications are either "browser-based" or are in need of a transition to "browser-based" form. And, if Dart makes developing such applications a more efficient — and perhaps all-importantly: less-costly — endeavor, then the choice to write applications in Dart will be a simple one. It is not like Dart is difficult to learn if you know JavaScript already; in fact, if you have any OOP background along with some JS experience, you are going to take to Dart Language very quickly, and find yourself incredibly productive compared to JS!

I can't emphasize this point enough: true software applications (not simply public customer-facing web pages) are perfect candidates for Dart. The productivity and re-use of object-oriented development, coupled with a Dart's wonderful core libraries (which are getting better all the time), are a huge leap forward for browser-based applications development. And, this is rather platform-agnostic development too — we're still dealing with a browser that will run on quite a few platforms. And, I have not even touched on the server-side potential (e.g., compared to the spaghetti-code mess of Node.js and 10-level-deep nested javascript closures -- eek!)

Dart: included Libraries = Huge Savings

Ah... the simplicity of instantiating a new List<> object to store references to instances of my custom classes and iterate through them! List is just one of the included Collection types. And, these collections include a nice set of methods for working with the items contained therein. The HTML library provides a somewhat nicer way to work with the DOM than standard JS method too. Overall, Dart is making my life so much simpler and more productive thanks to the language features and the libraries included.

Perhaps more important is how simple it is to create your own libraries. And, unlike JS, you should not worry about global-namespace-pollution; that should be a thing of the past. And when you start writing your libraries, you have all the benefits of a modern typed-language with solid OOP features.

Sure, JS has what is called "prototypical inheritance" and you can achieve *some* encapsulation with closures, but the fact is, for someone with C#, Java, Delphi, or C++ experience, Dart offers "real" inheritance and encapsulation in a much simpler way (i.e., REAL way). Did I mention how wonderful it is to be able to quickly test the Type of an object using "is" when I need to (class / interface testing)! And, you have polymorphic method/constructor signatures, optional parameters, etc. I am a long-time Delphi developer, and I am really taking to Dart in a hurry thanks to all these familiar OOP features.

My first Dart Library: Dart-Based SVG Widgets / Components

I had previously attempted to create a robust SVG (Scalable Vector Graphics) component library using JavaScript, and I got rather far along with it before I hit a wall thanks to JavaScript. JS was simply making my intended component-hierarchy nearly impossible to implement — surely impossible to implement as a formal, strongly-typed, class library as I had envisioned. But, using Dart, I have already surpassed (in little time) the functionality of my previous JavaScript-based SVG widgets and have seen my vision become reality. Dart has provided a much better OOP foundation for building a true software component set / library with!

I have written previously about my desire to replace desktop Embarcadero Delphi-based development with HTML5/CSS3, and I had tried to do so using JavaScript as the underlying language, but simply put: JavaScript sucks compared to Delphi (or C#). Now that I have Dart at my disposal, my transition from Delphi to HTML5/CSS3/Dart is well underway. I have that familiar high-productivity I am used to with Delphi (object Pascal), now nicely coupled with to browser UI technologies of choice (HTML5/CSS3/SVG), and I am moving forward quickly.

Stay tuned for some source-code and samples using Dart! I plan to release my Dart-language SVG Components / Widgets as open-source in the not too distant future. UPDATE: I have pushed an initial release of my Dart/SVG GUI Components to github — see my newer blog post about "Introducing dart-squid: Dart/SVG UI Controls" for details.  Those should demonstrate quite nicely what productivity can be achieved with regards to developing component sets that will run in a browser. And, perhaps people will find the SVG components useful for something I have not even imagined yet. In the meantime, check out Dartium and Dart: this is a language/framework you do not want to overlook.

Continue to read this Software Development and Technology Blog for computer programming articles (including useful free / OSS source-code and algorithms), software development insights, and technology Techniques, How-To's, Fixes, Reviews, and News — focused on Dart Language, SQL Server, Delphi, Nvidia CUDA, VMware, TypeScript, SVG, other technology tips and how-to's, plus my varied political and economic opinions.

Friday, March 16, 2012

Dartium for Windows Download : Chrome browser with native Dart-Language VM for Windows Released

Dartium for Windows Released : Initial Version Available

Chromium (Chrome) Browser with Native Dart-Language Virtual Machine (VM)

I have been anxiously awaiting Google's new Dartium for Windows browser, their version of Chrome that includes support for their new Dart Language — a very enticing alternative to JavaScript that is under heavy development now. Although you could previously run Dart-based scripts through the Dart-to-JavaScript interpreter/converter/compiler, there are obvious substantial benefits to having a Dart-language VM built right into the browser.

Downloading and Installing Dartium Browser

Note: I have done the following on Microsoft Windows-7 x64.

The first publicly available version was posted online today in this Dartium continuous-build directory. You will see a file named: "dartium-win.zip"; download that and make sure you have 7-Zip (file archiver) available to open the archive and extract the files.

When you open the .ZIP archive, you will see it contains another archive named "chrome.7z" which you will open. This file contains a single directory named "Chrome-bin". Open that directory in 7-zip to reveal the following files/directories:

Now, I suggest creating a directory on your computer where you want to run this from, perhaps something like "C:\Dart\Dartium". From 7-Zip, grab the contents (the files/dirs) shown in the image above, and drag them into your new Dartium directory. You should be done with 7-zip now.
Before you get too excited about running Dartium, you will probably find that it has issues (unless they have been resolved since I wrote this)...

Dartium Windows Installation Bug / Errors (as of 3-16-2012)

One of the first things I encountered when trying to run Dartium, by clicking on the Chrome.exe file in my new Dartium directory, is that nothing happens! There is no sign that the program even attempted to run. But, if you look at the debug.log file it creates in that directory, you may find errors like this:

[0316/124628:ERROR:client_util.cc(397)] Could not get Chrome DLL version.
[0316/124628:ERROR:client_util.cc(434)] Could not find exported function RelaunchChromeBrowserWithNewCommandLineIfNeeded

So, what is causing this? Well, I got sorta lucky in my first guess. Fixing this turns out to be rather easy. Just copy the chrome.exe file to the C:\Dart\Dartium\19.0.1071.0 subdirectory, and launch chrome.exe (aka, "Dartium") from there! That should fix the problem and you should see Dartium launch as expected.

Next, you may experience the same thing I did whereby Dartium crashed within moments of running the first time. But, re-launching Dartium resulted in a stable browsing experience so far, and I was able to test out some HTML Pages that used Dart-language scripts (instead of JavaScript!) just fine. You include such scripts like this:

<script type="application/dart" src="Clock.dart">

Which brings me to the most exciting part...

Dart, the programming Language

Although I use JavaScript quite a bit, I have felt constrained by the language and perpetually frustrated by the lack of solid OOP (object-oriented programming) features and robust libraries. And, before anyone corrects me, yes, I realize I can accomplish all sorts of OOP (or OOP-like) stuff in JavaScript using prototypal inheritance, closures, etc, but it still simply sucks compared to a real OOP language like Delphi or C#. Well, Dart is here to finally give me a real in-browser OOP scripting language with strong typing and much more, and available NOW.

I am so utterly sick of waiting for the JavaScript purists and boffins to quit arguing what is the best way to implement "syntactic sugar" for things like classes, and having to read spaghetti-code JavaScript with piles of prototype-based "inheritance", and now Dart may deliver me from this evil! Of course these same JS boffins are already trying to discredit any attempt to replace JavaScript with anything that they did not invent, even as the participants from Microsoft, Mozilla, Safari, and Webkit camps make barely a snail's pace march toward "JavaScript.next" or "JS Harmony" or whatever other half-baked next-generation Javascript standard is to be.

Well, such is... if I have to write applications that ONLY run in Chrome/Chromium/Dartium, so be it. I am rather sure I can convince any of my business-software users to install whatever browser is needed, especially when I tell them how I can build the same functionality in less time, and for less money, than it would otherwise cost to develop in JavaScript. Oh, and let's talk about how much easier this code is going to be to maintain — a lot! (based on experience working with other real OOP languages as compared to JScript). This is what is going to make Dart a success. when businesses figure out there is money to be saved by using Dart vs. Javascript, the rest will take care of itself as developers start migrating to Dart. And, I expect that server-side Dart will make a lot of sense too!

Note: I am not saying that Dart is the end of JavaScript. I guarantee JS will be around for a LONG time, as there is a huge installed based of JS code out there, and a lot of developers that work with it. But, that fact alone is not going to keep Dart from becoming an accepted language for web-development. Browser vendors that ultimately refuse to adopt a common Dart-VM may find themselves in the same position Microsoft does now as people migrate from Windows desktop applications to HTML5/CSS3 web-based alternatives running on many devices (and not just those running their proprietary Windows OS).

Now, it is time for me to get back to writing some Dart-based code for some web-applications I am working on. I will be following the Dart-language and Dartium progress closely, and I hope to post some additional articles on here with Dart-programming examples in the future.