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.

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.

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.

Monday, March 12, 2012

SQL-Server 2012 New Features of Interest : Newest Microsoft RDMS

Microsoft SQL-Server 2012 New Features

SQL-Server 2012 Upgrades and Enhancements of Note

As any of my tech-blog readers know, I am a huge fan of Microsoft SQL-Server for my own database applications as well as for software I develop for others.  And, it is that time again: a major update of SQL-Server is available and I am busy upgrading my existing databases while also experimenting with the latest features that SQL 2012 has to offer.

Microsoft SQL-Server 2012 continues the SQL-Server line of enterprise-class databases by extending the SQL Server 2008 & 2008R2 through additional modern features and functionality, including the following items that I considered noteworthy enough to mention here (*Note: keep in mind that some features may not be available in all versions of the product):

  • New and enhanced spatial features — this is a significant evolution of spatial data support in SQL Server including support for full globe spatial objects and for circular arcs on the ellipsoid.
  • FileTables — extends FILESTREAM technology and allows you to now store files and documents in special tables in SQL Server, but access them from Windows applications as if they were stored in the file system, without making any changes to the Windows applications. File and directory data is exposed through a Windows share.
  • Sequences — these should be familiar (in concept) to anyone that has worked with Oracle. A sequence object is a user-defined schema-bound object that generates a sequence of numeric values according to the specification with which the sequence was created. It operates similar to an identity column, but sequence numbers are not restricted to use in a single table.
  • Statistical Semantic Search — provides deep insight into unstructured documents stored in SQL Server databases by extracting statistically relevant key phrases (allowing you to query the meaning of a document);
  • Full-Text Search has new abilities for property-scoped searching and customized proximity searches;
  • Availability Enhancements including AlwaysOn SQL Server Failover Cluster Instances, AlwaysOn Availability Groups and enhancements to Online Operations for online index builds (where index columns contain LOB data);
  • Scalability and Performance Enhancements including a new data warehouse query acceleration feature based on a new type of index called the columnstore;
  • SQL Server Express LocalDB — a new lightweight edition of Express that has all its programmability features
  • New built-in T-SQL functions: Conversion functions now include PARSE, TRY_PARSE, TRY_CONVERT; Date and time functions now include DATEFROMPARTS, DATETIME2FROMPARTS, DATETIMEFROMPARTS, DATETIMEOFFSETFROMPARTS, EOMONTH, SMALLDATETIMEFROMPARTS, TIMEFROMPARTS; Logical functions now include CHOOSE (gets item at the specified index from a list of values), IIF (a shorthand if-then construct already common in other languages); and String functions now include CONCAT and FORMAT;
  • ORDER BY clause improvements using OFFSET and FETCH (limit result set rows to a range) — this feature should come in very handy for all sorts of ad-hoc queries and/or web-applications that implement "paging" through data! Finally, less custom-code for this!
  • THROW statement can be used to raise an exception and transfer execution to a CATCH block of a TRY…CATCH construct;
  • OVER clause has been extended to support window functions which will reduce the need for custom code to compute things like moving averages or cummulative totals;
  • additional analytic functions like: FIRST_VALUE, LAST_VALUE, , LAG (previous rows access without self-JOIN), LEAD (subsequent rows access without self-JOIN), CUME_DIST, PERCENTILE_CONT, PERCENTILE_DISC, PERCENT_RANK
  • EXECUTE statement can now specify the metadata returned from the statement by using the WITH RESULT SETS argument;
  • New and Enhanced Query Optimizer Hints: FORCESEEK includes further options and a new FORCESCAN hint;
  • ...and more.
I really look forward to putting some of the new programming features to use! The windowing enhancements to the OVER clause are very interesting to me, since I have previously written custom code to perform moving-averages, running subtotals, and other interesting algorithms that should now be MUCH easier to implement using the new abilities of the OVER clause.

If you happen to need "windowing" functions but are unable to upgrade to SQL-Server 2012, search this blog for my source code for SQL-Server for moving-averages, running-subtotals, and so on: implemented as pure SET-BASED algorithms too!!

I have not yet tried the LocalDB version of SQL-Server 2012, but I definitely can think up some uses for it.  And, it's free, which is always a good thing, though it does have somewhat low limits for memory and total database size.

Breaking Changes in SQL-Server 2012

As with any major version upgrade, there is the potential for "breaking changes" that will affect your existing SQL-Server code base (Transact-SQL) and/or your database designs, options, and the like. Obsolete features are the most critical, but you should also consider deprecated features, since it is much easier to get ahead of the curve with regards to planning for future releases.

  • Native XML Web Services (SOAP/HTTP endpoints) is Removed;
  • Finally! ANSI JOIN syntax is required! No more "*= and =*" join syntax, which hopefully you migrated away from years ago;
  • FASTFIRSTROW (query hint) is replaced with OPTION (FAST n);
  • COMPUTE / COMPUTE BY (T-SQL) — use ROLLUP instead;
  • SET ROWCOUNT for INSERT, UPDATE, and DELETE statements are deprecated and will not be supported in the next version of SQL-Server. Use the TOP keyword instead;
  • And a host of other changes — See the Microsoft SQL-Server 2012 Backward Compatibility site for details;

Enjoy the new SQL-Server 2012 features! Download the free trial editions and/or consider the Developer version once it is available.