Saturday, November 16, 2013

Google Dart Programming Language Milestone: Version 1.0 Released

Google Dart Reaches Stable 1.0 Release


Exciting times for web-developers frustrated by JavaScript!

I have been following the Google Dart language and associated software development APIs / Libraries since very early in the Dart life-cycle.  My early Dart-related blog postings began over a year and a half ago, and as impressed as I was with Dart and its objectives back then, I am even more impressed by Dart and the software development ecosystem that has emerged since.

The Dart language itself is but a small part of the story here.  In addition to the class-based object-oriented modern programming language, one of the greatest things about Dart is the included libraries for things like Collections, Asynchronous operations, and much more — just check out all the available standard Dart API libraries for common web software development tasks.  In addition to those, there are a growing number of community-sourced projects and libraries available on Github or the Dart "Pub" Package repository.

I have published my own open-source Dart / SVG Widgets on Github, and just finished updating them to be compatible with the 1.0.0 release of Dart.  These are only "experimental" or "alpha" stage UI Widgets, and require more work to make use of some of the newer features of Dart that were not around when I first wrote this code (e.g., Streams and such).  But, writing that open-source proof-of-concept SVG-UI-Framework in Dart definitely provided good experience and helped maintain my interest in Dart while the product made its march toward "stable 1.0" release.

The down-side of Dart...

After using Dart for web development work, I simply cannot stand to code JavaScript!  That is the biggest "down-side" or Dart for me... it has further eroded my ability to tolerate the (normal) hideous and unmaintainable JavaScript that usually accompanies any substantial web applications these days.  I am spoiled now!  And, any time I look at the source-code behind large JS libraries, I can barely stand it. Dart is just so fantastically better designed for building modern robust web functionality than JS.  Give it a try, you'll like it.

[NOTE: Dart can *output* JS code that runs on any modern browser, and the code runs fast!  So, why subject yourself to the typical maintenance nightmare of working directly in JS when you do not have to?]

There is also always Microsoft TypeScript if you prefer their approach to improving JS.

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, October 14, 2013

SQL Moving Average Query Techniques and Performance Comparison

SQL-Server Solutions to Moving-Average Query Requirements


Moving-Averages Overview

This article references future blog posts which present the source-code for several additional SQL-Server queries, functions, and stored procedures — these used to be hosted on my external Free SQL code library, which was migrated here in 2016/17. Among this set of SQL queries are a few pieces of code that address the topic of moving averages and approaches to calculating moving average values using only SQL.

Moving averages — and/or rolling averages, moving means, sliding averages, running averages, temporal averages, etc.  — are a common data requirement in these problem domains:
  • financial instrument pricing, and especially the analysis of financial time-series values and information: e.g., stock prices, commodity prices, interest-rates, etc. where it is very common to look at indicators like a 30-day or 90-day moving-average-price
  • operational indicators at a business: production and sales volume trends, error/defect rates trends, and so forth
  • economic indicators like unemployment and jobless claims, new home construction rates
  • environmental indicators like seasonal temperature trends, rainfall, snowfall, and so forth
  • and countless other applications where "smoothing" or "trending" or "momentum" is to be included in some analysis or reporting or charting.
Whether your moving-average needs are best served by SQL-only algorithms, as opposed to perhaps client-side number-crunching and/or non-SQL Server-side code (like .NET CLR procedures), is for you to decide, but with the techniques I have demonstrated, at least you can consider a Transact-SQL-only solution if you choose (and one that is set-based as opposed to relying on cursors).

SQL-only Solutions Compared

See my Set-based Moving-Averages SQL Example 1 page, as I will reference the techniques on that page in my discussion here.

That page and example includes execution-speed / performance comparisons between techniques also (run against the AdventureWorks sample database).  That page demonstrates three different approaches to solving (using only SQL-Server T-SQL) the moving average challenge using:
  1. my own custom approach to calculating a rolling average that takes advantage of some interesting features of Transact-SQL that, although may not work "forever" with every future release of SQL-Server, have worked fine from SQL-Server 2005 through SQL-Server 2008 and 2008r2 and SQL-Server 2012.

    The technique relies on CASE statements and a (so far, so good) predictable order-of-processing the values-assignments within the UPDATE statement where I use local-variables to maintain a "queue" of values as well as break-level-reset tracking information.  This code is quite speedy and flexible and easily adapted to related problem domains.

  2. an example of solving the same problem using a CTE (Common Table Expression) coupled with APPLY (CROSS APPLY / OUTER APPLY that are Microsoft SQL-Server specific extensions to ANSI SQL).  This approach is SLOW!

  3. A newer ANSI-SQL compatible solution that is available to you if you have SQL-Server 2012 or newer that implements the windowing functions using OVER and PARTITION BY.  This method is the simplest solution, is the fastest running, but requires SQL2012+ and also lacks the ability to easily change the "window size" (i.e., number of data-points the moving-average is based upon) without dynamic SQL.

Performance Results / Limitations Examined 

I have been very pleased with the performance of my custom solution to this problem and have used this approach (#1 above) for years now.  Sure, I could simplify my code using SQL-Server 2012's new OVER / PARTITION BY abilities while also gaining a performance boost.  But, until SQL-Server makes the PARTITION window-size (in the "ROWS BETWEEN integer_value_here PRECEDING AND CURRENT ROW" portion of the command) able to utilize a variable instead of a hard-coded integer value, this newest SQL method has limited value in my opinion.

My custom approach comes amazingly close to the native speed of the newer SQL-2012 windowing features, while also having the advantage of being able to handle a variable-window-size (which is perfect for requirements where you want to pass a moving-average-window-size value as a parameter to the procedure).

Notice that I hardly give the APPLY / CTE "solution" much thought.  I presented it as an "option" for a set-based solution to this problem, but its performance is awful and the APPLY is Microsoft-specific as well.  So, I might as well use my own custom approach that may rely on the specifics of MS T-SQL processing-order while gaining the advantage of speed and a rather simple-to-understand approach (as compared to the CTE/APPLY which I find not-readable or easily understandable by comparison).

Conclusion

There are certainly multiple ways to solve the rolling-average / moving-average problem using only SQL, and the choice is yours as to which approach best fits with your needs and situation.  I'd say that if you have a static-window-size and are using SQL-Server 2012 or newer, then the obvious choice is the newest OVER / PARTITION approach.  But, I personally have not run into rolling-average requirements that did not include a variable "window" (e.g., allowing a user to choose how many data-points, periods, etc to include in the average, as specified in a run-time query parameter).

Check out the other SQL queries, functions, and stored procedures I have in provided here on my blog for other related problems and solutions like running subtotals and much more.  I have made it all available as open-source-software (OSS) under a very permissive MIT License.  If you want to learn how to compute moving averages using only SQL, and solve other interesting problems within Microsoft Transact-SQL, this resource should provide some very useful information and ideas. 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.

Tuesday, September 17, 2013

Guaranteed 3.6% Savings Yield - Simple, Safe, Long-Term with EE Bonds

Guaranteed 3.6% Compounded Interest? Where!?
Look to EE Bonds

[Note that as of January 1, 2012 banks and other financial institutions terminated their sales of bonds, in case you were only familiar with the old way of buying them at a Bank.  Go to Treasury Direct instead.]

Seriously, consider EE Savings Bonds!

Yes, savings bonds... those "old fashioned" instruments for putting money away for the future. Why is it you never hear "investment advisers" or "financial advisers" talking about how USA Government Savings Bonds are still a damn-good option for long-term saving, especially for people that are not otherwise financially savvy or blessed with "extra" time to manage their investments? Simply put: there is no money in it for the advisers!

I argue that savings bonds should make up a portion of almost every investor's financial portfolio.  You should never have to worry about them... just put your money in and wait.  For anyone that wants to argue about hypothetical situations like "what if the US Government goes under",... well, if it does, do you really think ANY investment is going to be worth squat? (and that includes gold; chaos will make that useless too... you would be better off having stockpiles of food and oil)

So, read on, and give EEs some consideration...

3.6% Annual Interest Rate? That sure beats the bank!

Not only does the 3.6% EE yield potential beat anything (of recent) you could get in the bank — and that includes long-term products like 5-year CDs — it nearly matches the current 30-year US Treasury Bills rate (3.86% as quoted currently on Bloomberg US Government Bonds rates).  So, what is the catch?

Patience is required to obtain this yield!

If you visit the Treasury Direct website page on EE Bond Rates, you may first be scared by the currently posted quoted rate of 0.2% (as stated in the paragraph titled "What interest will I get if I buy an EE Bond now?").  But, have no fear and keep reading... you can get the 3.6% rate I am referring to if you are patient and buy these EE-bonds with a 20-year investment horizon in mind.

Now, look further down the page for the section / paragraphs with a heading of "When will my paper bond be worth its full value?".  This is where the IMPORTANT INFORMATION is contained that leads to the 3.6% minimum guaranteed annual compounded interest rate if you hold the bonds for 20 years.  Quoted from that section:
"Electronic bonds are sold at face value (not half of face value). They start to earn interest right away on the full face value. Treasury guarantees that for an electronic EE Bond with a June 2003 or later issue date, after 20 years, the redemption (cash-in) value will be at least twice the purchase price of the bond. If the redemption (cash-in) value is not at least twice the purchase price of the electronic bond as a result of applying the fixed rate of interest for those 20 years, Treasury will make a one-time adjustment at the 20 year anniversary of the bond's issue date to make up the difference."
So, if you HOLD the EE Bonds for full 20yrs, you can forget that "0.2%" stated current rate, as you are guaranteed a minimum of 3.6%-annual-compounded-interest (using rule of 72), since your money has been guaranteed to double in that 20yrs.

Briefly, the "rule of 72" helps us compute the approximate annual interest-rate over a period of time by dividing the interest-rate into 72 in order to obtain the term (length in years) in which that interest rate will cause an investment to double.  So, in this case: 72 / 3.6 (rate) = 20 (year term).  I.e., basically 3.6% annual interest has been guaranteed in one of the most historically safe investment options ever, so long as you can think long-term!

You think you can do better elsewhere?

Sure, you may obtain higher (historical) yields elsewhere — perhaps in the stock markets, commodities, or corporate bonds.  But, you had best know what you are doing and have 1) the time to actively manage such investments, and/or 2) the nerve to ride out massive downturns like what we saw occur during the Financial Crisis that really shredded most investments in 2008 (to the point it took years to get back to pre-crash levels).

And, if you consider putting money in "the bank" as a savings strategy, consider the fact that for over 5 years now, interest rates in the bank have been terrible!  And, think about it,... 5 years is a full quarter of the duration you would have have to leave your money in the EE Bonds (toward that 20-year term to get the doubling of EE funds).  In the current preceding 5 years, banks have paid essentially ZERO interest while you could have been getting 3.6% in your EEs.

Bank rates may ultimately rise, but I would not count on it changing quickly or holding higher rates for any length of time.  And, keep in mind: interest on savings accounts and CDs is taxed every year whereas savings-bond interest compounds pre-tax (i.e., you are only taxed on the interest when you redeem the bonds).  This can make a substantial difference in compounded returns.

The bottom line is this: If you think you can maintain a higher-average-annual-return elsewhere, go for it. I simply look at EE's as just a very simple "no brainer" hands-off way to save some money for retirement in about as safe of way as possible.  And, you do not need to hold paper bonds anymore: use the TreasuryDirect electronic bond-buying system (in fact, paper bonds have nearly gone extinct and I have no idea why anyone would want paper to have to place in a safe deposit box or whatever).  Signing up at TreasuryDirect is super-simple and can be done in just a few minutes.

There is perhaps the issue of what happens if you die within the 20-year term (I'd rather not think about that), but even that is covered by way of beneficiary-designations and survivorship terms.  A survivor beneficiary does not have to cash in the bond right away, so they can continue to hold the bond until that 20-year term is met if they choose (and, income taxes on the interest remain deferred until redemption just like they would have been for the original holder).

Give those EE bonds a look.  You never know, it may turn out to be a very wise long-term investment to hold.  FYI: also note that the government currently limits annual savings bonds purchases to $10,000 per individual, so it is not like you are going to be able to take the proceeds from selling a house and put them into savings bonds all at once. Feel free to consult with your "adviser" or accountant on any of this, as I am NOT acting in either capacity here... I am just putting forth an opinion for you to consider.

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, September 06, 2013

Windows Server 2012R2 Free Book Download (PDF, MOBI, EPUB)

Get a FREE Microsoft Windows Server 2012R2 Book


LEARN WHAT'S NEW IN Windows Server 2012 R2

If you are considering migrating from Microsoft Windows Server version 2008, 2008r2, or 2012 to the latest Windows Server 2012 R2 release, you may wish to see what's new in this operating system before making the move.

MICROSOFT PRESS MAKES PDF / MOBI / EPUB AVAILABLE FOR FREE

Microsoft Press was good enough to provide a downloadable Free ebook — Introducing Windows Server 2012 R2 — to help you catch up on their latest upgrade to the Windows Server product line.

I quickly read through the Introducing Microsoft Windows Server 2012 R2 (Preview Release) book, and as you may expect, a lot of it reads like marketing material, in my opinion, as the authors will try among other things to convince you that this latest Windows Server is ideal for all your "cloud" operating system needs.  Regardless, the book is fine for getting an overview of what's new in Windows Server 2012 R2, by major areas of interest within the product — like virtualization, cloud computing, networking, etc.

Just because the book exists (in some part for sure) to help promote Windows 2012R2, that does not mean there is not reason to truly be excited by new features in Windows 2012 R2 — there are!  I for one was especially impressed by the recent SMB 3.0 enhancements in Windows Server 2012; in particular, I was amazed by the performance improvements demonstrated with SQL-Server 2012 run against a database hosted on this new SMB 3.0 platform.  Win2012R2 builds on that...

Basically, Win Server 2012 implements SMB 3.0 File Servers that can support SQL-Server databases on file shares without a performance hit (with hardware config of course)!  This is a great alternative to dedicated and costly SAN (Storage Area Network) devices.  If SQL-Server on Windows 2012 SMB 3.0 is of interest to you, here is a link to a technet blog page full of useful information.  And, I expect the further updates to SMB 3 within Windows Server 2012R2, like the following items (as quoted from this e-book), will be quite useful for SQL-Server applications and more:

  • ...the performance of SMB Direct has been enhanced to provide a 50 percent improvement for small IO workloads when used with RDMA-capable network adapters...
  • ...increased efficiency and density of hosting workloads with small I/Os, for example when running an online transaction processing (OLTP) database workload inside a virtual machine...
  • ...SMB connections can also now be managed per share on SoFS instead of per file server as in Windows Server 2012...
  • ...Another new feature of SMB 3.0 in Windows Server 2012 R2 is SMB Bandwidth Management. Because SMB now has so many different functions in a network and storage infrastructure built using Windows Server 2012, it now represents a common infrastructure component in many environments. That means it’s important to be able to control how much bandwidth SMB uses when it’s performing many different tasks within an infrastructure...

The book also offers some decent discussion of enhancements to the data-deduplication features, Hyper-V enhancements, IIS 8.5 new features, and more.  Hey, the book is FREE, so there is not too much to lose other than some time spent perusing it for useful content.  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.

Thursday, September 05, 2013

VMware Workstation 10.0 New Features

VMware Desktop Virtualization Products Updated


NEW VMWARE WORKSTATION 10 AND FUSION 6

Another year, another set of "new product releases" (new versions of VMware products).  And, by now it should be very clear that VMware's software marketing goals, presumably to help product predictable and continual cash-flow, are to push annual full-product (read: paid) version releases of their core products, regardless of how significant the new features are in those products. Last year around this time, I wrote about the new features in VMware Workstations 9.0, and just a year before that I wrote about the new features in VMware Workstations 8.0.

There is a definite pattern forming here with regards to both timing and the fact that each release is a paid version upgrade (as opposed to a perhaps free "point upgrade"). It is not just VMware doing this — it is an industry-wide norm now that tries to force customers to keep pumping cash out for small features and bug-fixes that probably should have been included for free. Oh well, time to give up and take it (because this trend is NOT going away).

New Features in VMware Workstation 10.0

I am having a difficult time getting overly excited about this latest version of VMware workstation, especially since it is a paid release and I do not see many changes that I care about or plan to use.

Key New Features: Windows 8.1, tablet sensors, and expiring VMs (do you care?)

Windows 8.1 Features

Seeing that I have yet to even use Windows 8, I do not care about Windows 8.1 support from VMware Workstation either.  But, I will admit, I find it more likely I will perhaps actually take time to evaluate Microsoft Windows 8.1 final — as soon as Microsoft releases it and makes the trial download available — but that alone gives me little reason to consider paying for Workstation version 10.0.

I personally hope to stretch as many years out of Windows 7 (a very solid product) as possible until I can migrate everything to Linux.  Had Microsoft not turned Windows into what looks like some goofy smart-phone UI (that I am not to force upon desktop users and/or that I have to learn a whole new application-development and programming model for), perhaps I would think differently about this.

But, if you use Windows 8.1, the features of interest in this Workstation 10.0 release are bound to be handy for you: Unity mode has been enhanced to seamlessly work with Windows 8.1 UI changes and Workstation 10 can now convert a Windows 8.1 physical PC to a virtual machine.  Yay, I would expect that even in a "point release", but whatever.

Tablet-Sensor Support (in Virtual Machines)

Next, there is the new tablet-sensor (pass-through) to virtual-machines — accelerometer, gyroscope, compass, and ambient light sensor data available to VMs.  Great! (sarcasm... again, I do not care).  Call me old-school: I do not use a tablet, nor a smart-phone or whatever, for my daily applications... I still prefer a desktop with a big monitor for everything from email to spreadsheets to programming and so forth.

I do not currently need to pass tablet touch-sensor-data or gyroscope-data to a virtual machine.  But, I can see how tablet-software-developers would like this new tablet-sensor-virtual-machine-pass-through feature for testing their varied "apps" under different operating systems, web browsers, and other configurations.

Expiration Dates for Virtual Machines — something useful!

This feature got my attention. As a custom software developer, the ability to set an expiry-date on a virtual machine has quite a bit of potential. Consider the case of demonstrating a custom application to a client where the entire application may reside in a virtual-machine.  The client wants to evaluate it for a period of time, but you (the developer) wants at least some level of assurance the software will not function in perpetuity without you receiving some compensation for your product.

I will need to experiment with this feature in detail.  I want to see whether, in combination with other virtual-machine administrative-lockdown options, this will provide the security I need in order to leave an entire Virtualized application "stack" (an app, fully self-contained in a VM) with a client or potential client "safely".  Since the new expiration date can even require synchronization with a specified time-server (which should prevent the old "set the clock back" circumvention methods), this sounds like a good start for securing one's intellectual property.

Next, I would think that by locking down the VM hardware configuration (and any contained-operating-system's administrative rights, etc), I could prevent someone from gaining access to files via network-copy and such.  Coupled with diligent use of code obfuscation and so forth, this may all add up to a nice way to help guard intellectual property while giving clients a great way to evaluate a software product for a limited amount of time.

Other New Features in VMware Workstation 10

Some other miscellaneous features were mentioned in the VMware Workstation 10 release information, like:
  • Power Off Suspended Virtual Machines — at least, I hope that made the cut from the 2013 technology preview version of Workstation 10; that can be quite handy.
  • Support for 16 vCPUs, 
  • 8 TB SATA disks and 64GB of RAM
  • New Virtual SATA (vSATA) disk controller 
  • Now supporting 20 virtual networks 
  • USB3 streams support for faster file copying, which provides the following, per release notes:
USB 3 Streams have been implemented to enable high speed transfer of files from USB 3 external storage devices that support this technology. For customers running Workstation 10 on laptops with small hard disks, large data files, video files etc., can be stored on an external USB 3 storage device and accessed quickly from within the virtual machine.
  • VMware has also addressed issues Intel, NEC, AMD, TI and Linux Kernel host xHCI drivers to improve overall USB 3 compatibility and performance.
  • Improved application and Windows VM startup times 
  • SSD Pass through
  • Multiple monitor set-ups are easier than ever, whether you are using 2, 3, or 4. 
  • VMware-KVM provides a new interface for using multiple virtual machines
I need to find more information about the SSD Pass-through, as I wonder if that will help with both speed and SSD longevity; I believe this is limited to operating systems (inside a VM) like Windows 8 that can optimize themselves for running from an SSD.  I am also interested in speed-testing any USB3 devices; in the past, there seemed to be a lot of restrictions on USB3 use, and perhaps this is no longer an issue?  Time will tell.

New Operating System Support for:

  • Windows 8.1
  • Windows 8.1 Enterprise
  • Windows Server 2012 R2
  • Ubuntu 13.10
As well as for the latest Fedora, CentOS, Red Hat and OpenSUSE releases.


BOTTOM LINE: As always, the choice is yours as to whether the upgrade price (around $119) is worth it or not.  I have learned (the past few years) to wait for "Cyber Monday" sales that tend to knock $20 or $30 off this price via VMware's online store.  Since I am in no hurry, I plan to do that this year again if I decide to invest in this version to gain the expiring-virtual-machines feature or one of the other smaller updates.  The full release notes are available online at VMware site (took me a while to locate, too).

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 06, 2013

Martin Marietta Space Shuttle External Tank Photo

Space Shuttle External Tank by Martin Marietta


Vintage Advertising / Promotional Photo Image

Not my usual software and programming post today, but still something from the science and technology field. I happened across an old advertising and promotional photograph of the Martin Marietta external fuel-tank for the Space Shuttle as I was cleaning out some old folders I had.  So, I scanned it for all to see / share if anyone wants such a digital image.

Space Shuttle External Tank by Martin Marietta company
Space Shuttle External Tank by Martin Marietta company
When I was considerably younger, a friend's father worked at Martin Marietta and sent this photo to me and I have had it ever since.  It amazes me that the Space Shuttle program (and this photo) are 30+ years old now and the United States does not really have a true shuttle "replacement" even with all the technological advancements since (materials, computing, design, etc).

Yes, there are some neat technologies coming along from places like SpaceX and others, but regardless it seems that the USA really lost its ability to keep pushing the space-mission envelope over the past couple decades for lack of focus, funding, and/or a combination of things.  I remember when I first received this space shuttle tank picture in the early 1980s -- and, at the time, I would have thought that by now (2013!) space-travel would have been nearly "routine" had we stuck with our pace of achievement.  Oh well, I doubt I will ever be going to space as I had once hoped.  And, I don't think Matt Damon's need to get to Elysium is going to be a scenario I face. lol

Well, enjoy the photo and here's hoping some neat new technological advancements get our space program back on track.

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, July 17, 2013

Bountysource Open-Source Crowd-Funded Software : Mini-Review

Bountysource : Show me the Bounties!

Crowdfunding for OSS : Where are the "funds"?

Bountysource, which is being promoted as "the first crowdfunding platform dedicated to supporting open-source software" (OSS) in news releases today (about their seed round funding), is perhaps a semi-interesting concept, though from my quick look at the site has me questioning its merits on a few levels.  Being "first" does not mean it will succeed or even be useful.

The whole point of this site is supposedly to "accelerate open-source development" by offering "bounties" to get desired OSS project(s) or project-feature(s) implemented or OSS-issues/bugs fixed quicker.  Well, what I saw when quickly perusing the "projects" is that there is a large list of "projects" (where Bountysource probably just loaded a database with a list of popular OSS projects from Github and other places), but hardly any "funding" available for any of them.


No Global Search-Available-Bounties Feature?

Maybe I just cannot locate such a feature (if it exists), but it seemed like for a site called "BOUNTYsource" (key word: bounty) you'd be able as a site-user (potential developer) to quickly search all projects to see which ones had active bounties so that if you had skills to apply in hopes of being rewarded by those bounties that you could find such projects quickly and see if any were a "fit" for your skills. I could find no such search-by-bounty feature on Bountysource.  Seems quite odd.

Sure, you can "search" an individual-project for a bounty, but what is the point?... any bounties on a project are easy to see at an individual level, but the time to go through a bunch of projects one-by-one is just ridiculous (especially when that list of "projects", is like I mentioned earlier -- and apparent "dump" of popular project names, where most have no issues to work on listed anyhow).  I'd go further: what would really "accelerate development" of OSS projects would be the ability for a potential developer to search for all projects with bounties that required certain skill(s), but good luck with that for now -- such functionality apparently does not exist.

Not Much Bounty-Money Available

I suspect the reason for this (apparent) lack of search functionality is a simple one: they (Bountysource) do not want you being able to quickly see that there are VERY LOW TOTAL BOUNTY dollars available (in total) for all these supposed "bounties".   Maybe that will change over time, maybe not.  But, quickly perusing the most popular "featured fundraisers", the highest bounty amount I could find for anything was just under $10K USD, and that is a *standout*.

The Bigger Issues with this Concept

Aside from the bounty money thing, the site itself was super-slow (perhaps due to the press-release today?  search speed was terrible and/or timed-out for me) and the "chat" feature was useless... I saw a list of (supposed) logged-in people (perhaps 20 or 30) and asked a question or two... waited... waited... NOTHING.... useless.

But, the biggest issue has to do with whether this "bounty" approach to accelerating open-source-software development is even a "good thing" to begin with.  I understand that many OSS developers could sure use any funding they could get to help offset their invested time/cost (I for one develop OSS for "free" otherwise), but I can also see this leading to Bountysource becoming the next eLance or oDesk or such in its own right: i.e., pure garbage! Don't over-analyze that comparison too much as I realize this will be a bit different, but I do think it could end up with similar issues.

For one, I think there is likely to be a group of people that search the web for existing-code to simply copy/paste (with perhaps minor alterations) where possible to make a submission toward a bounty (in hopes of quick cash), and bring into question all sorts of copyright mess.  Hopefully I am wrong about that, but it seems inevitable.  There is going to have to be some code-plagiarism-detection of sorts or this will likely happen (and the day other developers find their code posted as a "solution" to a Bountysource item without their consent, things will get ugly).  The bottom line is that I can see how simple it will be for money to "corrupt" the entire open-source-software paradigm; hopefully that is not the case.

Either way, you may want to check the new service out and decide for yourself whether it is "good or bad" for OSS software development.  Who knows... maybe Bountysource will implement a useful search feature for developers to locate projects that may be something they'd consider working on for money, and in tandem maybe they will find a way to (try to) ensure that submissions are not substantially-copied-source-code/fixes/etc that others have published or own already.  I will admit there are times where I would gladly pay a "bounty" to get an issue in certain OSS software fixed, or a feature implemented quickly, if I could... but, most of the time I am able to fix things myself, submit the fixes, and/or simply be patient and wait for a reported issue to be fixed or implemented by the developer(s).

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, July 10, 2013

Google Dart vs. JavaScript Debate

Dart vs. JS : Objective Reactions?


Google Invests in Dart to Improve Upon JavaScript.
Brendan Eich tries to Reason Why Dart is Not "Right" Approach

I was just reading Brandon Jones's blog entry titled "A Tale of two Web Technologies" today where Brandon put forth a nice call for discussion about Dart vs. JavaScript (JS).  I liked how Brandon summarized his position on this subject as follows:
"For my part I think they're both [Dart and asm.JS] awesome technologies with different use cases. If I were building a new web app from scratch I'd want to code it in Javascript or Dart but would prefer Dart due to its cleaner syntax, built-in libraries, and potential speed."
I am with Brandon all the way on this — there is no comparison between the cleanliness of Dart code and the equivalent (current) JS code (or asm.JS-infused mess): Dart makes writing large-scale, object-oriented, performant applications for the web so simple compared to JS!  Sure, it is not "perfect" and has some areas that need attention (as I have blogged about recently: see areas that Dart needs to improve upon to further adoption).  But, Dart solves a LOT of the issues that exist with JavaScript.

As expected, I noticed that Brendan Eich  (of Mozilla CTO and JS-inventor fame) was quick to jump in to represent and defend the JS camp (by commenting on Brandon's posting), while a few others expressed a mix of opinions about JS and/or Dart.  But, as of right now when I am writing this, I really didn't see anyone aside from Brendan (who has a serious vested interest in being a proponent of JS over most any "competition") really making any substantial arguments for sticking with JavaScript over Dart.  I think that alone says something.

An utterly huge number of JS developers are out there, but I cannot help wondering how many are at least in some part annoyed by the promise of what "ES6" or "ES7" will bring when the wait for such things has seemed infinite.  I personally gave up on waiting (for EcmaScript to get to where I wanted it) when I saw the difficulties the ES parties had even try to agree on how to implement classes (objects) and inheritance, etc.  Ugghhhh.  Like there is anything to "invent"??  How many languages do we need as a reference for a decent object system (plenty exist)?  Well, thankfully Google decided NOT to wait forever and instead created a language (Dart) that included the modern constructs and features I expect in a development language.  And, coming from Delphi, C#, C++, and other programming, Dart felt as natural as anything could be... and now I can code for the web much like how I write desktop applications.

Dart is FREE! Dartium (browser) Exists Now. Why knock it?

Maybe I am just unusual in my thinking.   Personally,  I do not see any problem at all with requiring a variety of Browsers (that may have varied VMs within them — Dart, JS, whatever) in order to access content that relies on applications / scripts written in a variety of languages.  E.g., "Dartium" (Chromium with the Dart VM in it) exists currently and works fine for viewing both Dart-based web applications as well as JS-based pages. We have all seen the "best viewed with XYZ browser" on sites at one point or another, so would it be that big of deal to see "runs faster with Dart" indicators too perhaps? And, what do I care if I need multiple browsers on my system to interact with various sites/services or to have an optimal experience?

Customers (i.e., users) don't seem to mind installing tens (or hundreds) of "apps" on their devices, so why would users care if the "app" called "Dartium" (or FireFox, Safari, etc) is required in order to access some other functionality/content? What I am getting at is that I don't think users care one iota about how their various apps/content are built, etc., so long as all are relatively stable, responsive, and simple enough to use. The rendering-engines in the browsers are what should be important (to users), and that's about it. So long as a browser renders the content of a site/app correctly, I doubt if any user could care less if the underlying scripting language (that augments the HMTL/CSS layout engine and standards) is Dart, JS, Forth, Modula-2, or Assembler... it is irrelevant to me and to most users. As a developer, I can choose whatever works best for me so long as the user has a simple way to use my site/app.

I think that arguing for "backwards compatibility" with JS is also nearly a pointless endeavor.  Users will not care so long as they are appropriately prompted to access content with the required "app" (Dartium, etc) and provided with a way to get that app.   Think about all the websites of old that had links for downloading the Adobe Flash Player that was needed to view content: and, guess what... people did, and did so in a huge way!  Flash became ubiquitous on the web.  Flash provided people with an improved user experience (well, "improved" if you like all those animations that is).  So, if Dart (or some yet-to-be-known technology) offers such an improvement, trust me: people will download Dart, Dartium, whatever in order to experience it! Games certainly come to mind: give gamers a higher frame refresh-rate that is only available through native Dart apps, and a whole group of Dart-aficionados will emerge.  Gamers could give a crap about whether their web-UI or app is "backwards compatible" with JS.  And, do you really think business-applications will be much different?  The only substantial challenge I see is mainstream public-facing web sites, but so what... that will come later.

Is Dart the Future of Web Programming?

Maybe.  I personally think JavaScript is likely ALREADY DEAD (its fate sealed), though there will undoubtedly be many people that will argue til the end that it is not (even beyond Brendan E.), as efforts like asm.js try to keep it alive.  And, regarding asm.JS, I like the comment left by an "EricomGuy" on Brandon's blog, stating:
"[...] I have two concerns regarding asm.js: 
1. JavaScript developers, in particular the "jsPerf crowd" will manually write asm.js code in an attempt to squeeze a few extra cycles out of the VM. This may end up pushing JS usage patterns in the wrong direction
2. JS VM manufacturers will focus on improving asm.js performance rather than on JS in general. I know V8 already stated they will not do it, but they may be forced to once they start falling behind in performance comparisons. 
If both #1 and #2 happen it can create a vicious loop that feeds itself, to the detriment of JS."
I think those are valid points, but moreover I think asm.js is a ridiculous attempt to decorate JS in such a way as to bring Dart's formal language features and benefits into JavaScript instead of simply admitting Dart is the correct way to truly "fix" JS.  I am amazed how long the JS language has held on, and it is starting to remind me of M (alternatively "MUMPS") or other such languages.  Like M, it is bound to hold on a long, long time, but I expect Dart, TypeScript, or some other languages/approaches to start whittling away JS's ubiquity, and soon.  In a way, I see asm.js as a JS version of Intersystems Cache's answer to the shortcomings of MUMPS (and, a way to extend the life of a language and technology that needed a major overhaul.  Don't analyze this comparison too deeply — I realize there are many differences — but, some similar history may come to pass.

Thinking a bit further ahead...

I suspect the Dart-vs-JS discussion is just a total myopic distraction that may obscure us from recognizing the emergence of much more substantial and possible paradigm-shifts (much more disruptive than Dart, asm.js, etc.) that could hit "browsers" and web-based apps in general.  Dart is a welcome nice natural step forward, and one that should have come much sooner.  But, as I contemplate the incredible growth in network bandwidth and processing power and then extrapolate what things may look like in perhaps a mere 10 years or less,... this Dart vs. JS language-choice discussion may look ridiculous in hindsight.  Some company is going to upend things in a way that a simple browser-language/VM change cannot.

I put forth part of a vision of things to come, as I saw it, in a 2006 blog of Software Prognostications (my upcoming sentences will perhaps be more meaningful after reading that), and part of what I foresaw then has come to be since, but things are not yet completely to where I envision them going.  I saw "apps" coming a long time ago.  And in a way, the modern browser(s) have become, to a lesser extent, the "virtualization" environments that I was expecting on the client — they offer at least some degree of sand-boxing and isolation for security (though hackers still find these too easy to break out of) — and, with the advent of the Dart-VM in a browser, or the V8-JS engine in a browser, or SpiderMonkey or any other language-processor in that browser-encapsulated-virtual-environment-for-rendering-HTML/CSS, things are getting closer to what I had hoped for.  I want the option to deploy my web apps using whatever tech-stack makes the most sense, and I want it to be super simple to do.

As I see it, the only thing the distributed client device needs is a hypervisor / hardware abstraction layer and the ability to interact with and "navigate" the web (i.e., find a URL to pull a VM from) and a way to very nicely isolate/sandbox this stuff.  Essentially, I am waiting for the day when end-users have the equivalent of a bare-bones VMware ESXi-like Web-Meta-OS on their devices and that each "site" or connected "app" is pushed down as a VM image immediately when someone navigates to it (perhaps persisted and used by multiple sites too, where it makes sense — as would a common "basic backwards-compatible JS/Dart web browser VM" would be for a while. heh),... and each VM may contain the "optimal software stack" (as determined by the creator/publisher) for its purpose, and that stack may be a minimalist-Linux with Dartium or Firefox or FutureFox or whatever, or perhaps a proprietary OS with custom apps written in god-knows-what.

Cloud-hosting may minimize what all "needs" to be downloaded to the client like this, and for applications that absolutely must run "on the client", my vision may well require a network backbone based on quantum entanglement and zero-latency-at-arbitrary distances, but I suspect that is coming too.  Fact is, Intel and other hardware makers are going to have to figure out some way to keep distributed computing-power a "must have" thing.   So, I have to bet on the further increase in computing power coupled with every-cheaper and ample storage too.

But, I can picture the day where particular to a website/app, the user gets a VM fully loaded and optimized for that site/app, be it browser-based (or maybe even an entire Windows 12 or OSX-15 application), ready-to-go, fully-isolated/secure, and so on.  If that VM is running a Delphi XE5 app on Windows 9, so be it.  If it is a browser-based app written in Dart that requires Dartium, great.   If it is asm.js or JS "classic", fine.  So long as users don't have to know anything the internals of the app, and so as a developer I can choose to write my sites/content/apps in whatever language/stack I choose, great!

In the mean time....

Bottom Line: Embrace Dart (or even TypeScript)

For now: Dart wins, hands down over JS!  TypeScript is a fine improvement too.  And, I'll be darned if I am going to waste time on asm.js — that just sounds nuts (my opinion).  I see asm.js as nothing but a workaround for embracing something like Dart and the DartVM in browsers in order to prop up the JS "side" of this debate.  But, maybe that asm.js code will be more easily and automatically converted to proper Dart-language or TypeScript code by automation tools down the road?  (perhaps there will be value in it after all).

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, June 27, 2013

SQL-Server 2014 New Features of Interest : Newest Microsoft Database / RDMS

Microsoft SQL-Server 2014 New Features

SQL-SERVER 2014 UPGRADES AND ENHANCEMENTS OF NOTE

It seems like the pace of SQL-Server releases is picking up! SQL-Server 2014 CTP1 is just now available for download and it does not seem like that long since I wrote my blog about the previous version and SQL Server 2012 New Features. In general, I think I was more excited about SQL 2012 than I am about SQL-Server 2014, since there were more Transact SQL enhancements in that version, and I tend to focus quite a bit on programming stored procedures and user-defined functions.

But, SQL-Server 2014 definitely has some nice new features that deserve looking at, especially when it comes to "cloud" deployment on Microsoft Azure.

  • Microsoft's codename "Hekaton" in-memory OLTP engine.
  • Column store (columnstore in-memory indexes from SQL 2012) become update-able in SQL2014 by way of updateable clustered columnstore indexes — there are some limitations and restrictions (compared to non-updateable, non-clustered version), but these new indexes should lead to faster query speeds and greater data compression for certain data-warehousing and real-time analytics needs.
  • Buffer-pool-extension support for solid-state drives — enabling faster paging by extending the SQL Server in-memory buffer pool to SSDs.
  • Windows Azure — automatic or manual back-ups to Azure will allow you to keep your on-site data backed up to "the cloud" at a DB-instance-level (for disaster-recovery); restore to an Azure VM if needed too. Also, a new SSMS Migration Wizard for Windows Azure Infrastructure Services makes migrating your on-site SQL-Server to "the cloud" much simpler.
  • SQL 2012 "AlwaysOn" technology extended — SQL Server 2014 gets more "mission critical" availability with up to 8 readable secondaries and no downtime during online indexing operations; in addition, a new SSMS Wizard helps you deploy AlwaysOn secondaries to a Window Azure VM.
  • When used with Windows Server 2012 R2, Greater scalability of compute, networking and storage — including: Scaling up to 640 logical processors and 4TB of memory in a physical environment and up to 64 virtual processors and 1TB of memory per VM; Network Virtualization that abstracts networking layer allowing easy migration of SQL Server from one data-center to another; Storage Virtualization with Storage Spaces where you create pools of storage and storage tiers to prioritize "hot" data to access premium storage (e.g., SSDs) and "cold" data to access standard storage.
  • New security features — these enhancements should simplify administration, auditing, and some application requirements: new CONNECT ANY DATABASE Permission, IMPERSONATE ANY LOGIN Permission, SELECT ALL USER SECURABLES Permission, and ALTER ANY DATABASE EVENT SESSION Permissions;
  • The SELECT … INTO statement is improved and can now operate in parallel;
  • Compiled Transact SQL (compiled T-SQL) Stored Procedures using "WITH NATIVE_COMPILATION" directive — Expensive T-SQL stored procedures (SPs) that reference only In-memory OLTP ("Hekaton") tables can be natively compiled into machine code for further performance improvements. There are some additional requirements for compiling T-SQL that include:
    • Native compiled stored procedures must be schema-bound (use SCHEMABINDING directive);
    • Execution context is required (e.g., "EXECUTE AS OWNER");
    • Must be in an atomic block context — BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'us_english') ... statements here ... END;
    • NOTE: While these "native compiled" stored procedures are written using Transact-SQL, they do not support the full Transact-SQL surface area.

SQL-SERVER 2014 : Initial Thoughts

When I first read about "compiled T-SQL procedures", I was excited, but... that quickly faded as I learned about all the limitations.  If I am correct (I think I am), these new compiled stored procedures are only available for the "Hekaton" related data, and even then it sure sounds like further limitations will abound.  I need more time to play with this feature.

Next, I think the simplified deployment to Azure makes sense (certainly for Microsoft, as they can sell you yet another product / service), but it seems a bit much for me to pay for another software upgrade to get feature(s) that enable me to spend more money on their other products.  

Bottom line: I think the reason SQL-Server 2014 showed up on the scene so quickly (relative to the release-cycle windows between SQL2005, 2008, and 2012) has a lot to do with Microsoft freaking out about Amazon and other "cloud" providers landing hosting gigs for SQL-Server databases on a platform they do not own or collect subscriber-cash from.  So, Microsoft had to throw together whatever it could for a new "SQL 2014" release and get it out there to encourage users to adopt Azure as their preferred "cloud" deployment option for SQL-Server.

The new features that accompany SQL2014 pretty much all fit with this analysis.  Sure, the "compiled stored procedures" may not be 100% to do with Azure, but I cannot help wondering if the reason they only work with Hekaton stuff is that they are really "half baked" (and were perhaps intended to apply to all procedures, but there was no "time" to make that happen while rushing to shore-up Azure sales).  Just my thoughts.

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, June 14, 2013

Google Dart Language Status / Popularity 2013

Google Dart Language Progress 2013


Time Flies: Dart, one year later...

In May of 2012, I wrote a blog about how Google's Dart Language ranking / usage was on the rise. I was watching the Github language-popularity rankings for Dart quickly move from 70th position to 55th ranking between May 2012 and October 2012. Now I just took another look today, and one year later Dart is showing up in 56th position on Github. So, Dart's Github rank has essentially gone nowhere since October of 2012. So, what does that mean?

Well, I believe some of the early excitement over Dart wore off as developers (including myself) have been waiting for the Dart language and APIs to stabilize. I switched from heavy-development mode to "just keep code working with latest Dart SDK / APIs" mode for much of the past year (not to mention the fact the Dart team destroyed my ability to have standalone SVG-docs using Dart for interactivity - which previously worked).  In addition, I think a lot of people are waiting for projects like the Dart Web UI (Web Components) stuff to mature so it can be put to use in projects without heavy re-working later.

It is worth noting that the free Dart Editor has come a long way since last year, if you use it.  I personally use JetBrains WebStorm / PHPStorm product (which has a nice Dart plugin), but I can certainly appreciate the effort Google is putting into creating a free editor.  Though, I cannot help thinking that some of the time spent working on the editor would be better spent getting the language features, APIs, and libraries completed and stabilized.

In addition, Dart's code execution-speed / performance is fantastic now!  This is certainly worth noting, and keeps my interest in Dart.  When Dart is running twice as fast as JS (in V8 engine, which is quite speedy JS to begin with), that is impressive, which is partly why...

Dart Language is Getting Noticed Yet

I just took a look at the TIOBE Programming Community Index (June 2013) site (FYI, the TIOBE Programming Community index is an indicator of the popularity of programming languages), were I encountered this (quoted material) in their monthly summary, which notes Dart's progress / presence:
...there are also some threats for JavaScript. The JavaScript language is generally regarded as a programming language in which it is easy to make mistakes. It is interpreted, so most errors show up only at run-time. That's why Google designed Dart (currently at position 80) as JavaScript's successor. But also other programming languages were designed to generate JavaScript code instead of writing it manually. Examples of this are CoffeeScript (position 139) and TypeScript (position 207).
Yes, Dart is more than holding its own compared to Microsoft's own Dart-like language, TypeScript.  But, it is nowhere near the well-entrenched JavaScript (which was in 10th place this month).  Google has done a decent job of talking Dart up at developer conferences and so froth, but much more will have to change before Dart truly threatens Javascript...

What is needed for Dart Language adoption to increase?

Now, that sure is an open question subject to all sorts of debate.  As I mentioned, I want/need the language features and APIs and libraries to stabilize before I commit much more heavy development time into Dart projects.  Furthermore, Google needs to really embrace Dart (internally) in such a way the shows us developers that we are not investing in something that is going to just fade away.  And, I mean more than just *talk*.

I find it frustrating that projects like the (native, not js-interop) Dart-based Google Visualization API / Google Charts projects have just stalled out and appear, essentially, abandoned (if anyone can even find these anymore).  What's up with that?  For a while, it looked like the Dart team was going to produce native Dart-language layer for products like Google Visualization, which I'd love to see.  I recently needed to use Google-Viz / Charts with some Google Table data, and I looked everywhere for native Dart stuff.  In the end, I just gave up and used JavaScript for the project, and hated every minute of it (I find Dart coding productivity to be much higher than JS, as I really enjoy class-based OOP as natively implemented in Dart).

There there is always the question about: when will Google's cloud (Google App Engine) support native Dart-based hosted web applications?  Seems like a very popular topic/question that remains as yet open. Or, how soon will the Dart VM be included in Chromium / Blink browser?

Until more "core" and "mainstream" libraries exist natively in Dart (starting with Google's own various public libraries and APIs), I just do not see how Dart's adoption will surge.  Sure, it will slowly grow, but it would grow a LOT faster if there were some substantial popular libraries and APIs out there that were written in native Dart.  Dart's execution speed is fantastic, but that alone is not quite enough for me to commit fully to Dart.  That's my opinion for now at least.  I remain a Dart developer, but a software developer that is also waiting for signs that I will not be investing my time into something that becomes the next Delphi (i.e., technically superior, fast, but low market adoption niche language/product).


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, May 25, 2013

Is Delphi Software Development Dead?

[Additional discussion update: see my October-2014 blog about Delphi programming popularity, which references this article.]

I was a long-time user of the Embarcadero Delphi (formerly Borland, Inprise, and Codegear branded Delphi) RAD (Rapid Application Development) IDE, programming language (which is object-pascal) and VCL (Visual Component Library) -- having used it since the Delphi 2 days in the mid 1990's.  I have written about Delphi on this blog before, including my thoughts about Delphi XE2.   Since then, Delphi XE3 has been released, as has the newest Delphi XE4 variant (which, seems to me as XE3 with additions almost solely focused on iPhone/iPad/iOS targets.

With recent releases of Delphi (like XE4), one could assume that Delphi was still going strong and holding market share.  But, think again!  If you happen to read the TIOBE Programming Community Index (as of May 2013) site (FYI, the TIOBE Programming Community index is an indicator of the popularity of programming languages), you will encounter this (quoted material):
May Headline: Delphi is on its way out
Delphi/Object Pascal was once far ahead of its time. The Delphi development environment supported software engineers to create cool applications in a fast way. Moreover, since the underlying language of Delphi was Object Pascal, the "generated" applications were scalable and relatively easy to maintain. This in contrast to its competitor of that time, the rapid application environment Visual Basic of Microsoft. 
Delphi's major market is development of applications for the Windows platform (although they tried to get some Linux market share as well, remember Kylix). As a result they have to fight against the fierce competition of Microsoft's Visual Studio. A battle that inevitably has been lost.
Well, that certainly does not sound good for anyone that wants to make a career of developing Delphi applications!  Delphi has just dropped to 17th position (popularity) in this index after previously being at 14, and it is teetering on dropping out of the "A" category of Status/Relevance as a programming language. [Feb-2017 update, and a shocker at that: currently Delphi stands at a respectable 9th position, just behind VB.Net at 8th, and JavaScript at 7th position! Though, I am still not seeing any matching uptick in job advertisements for Delphi gigs, so I have no idea what is driving this ranking unless it is people like me posting my old Delphi code on blogs like this as OSS software, or if it is the cross-platform apps-development market now.]   Even these latest updates to Delphi (XE2, XE3, XE4) are unable to stop Delphi's slide into obscurity.  Instead, the TIOBE index puts Delphi at .7% usage-popularity as compared to C# at 6%, C++ at 9%, Java at nearly 17%, and C at nearly 19%.   Needless to say, when I search for jobs requiring Delphi expertise, I see these numbers play out in real economic sense -- i.e., there are "no jobs" (essentially) for Delphi developers as compared to C, C++, C# or even Python for that matter.

Time will tell if Embarcadero can dream up some way to increase market share, but I personally have my doubts given the trends I am observing (jobs, etc) and the trends that places like TIOBE are reporting.  In addition, Delphi can be a rather costly development tool/environment compared to all the open-source options out there for working with the leading popular languages.  That is not helping things... especially when Embarcadero thinks that I will be forking out $1000-$3000 year after year (per license) to keep getting "upgrades".  Sorry, I am past the point where I can justify purchasing new versions of the product year after year with little chance of having paying software development gigs that demand Delphi expertise.

I cannot help thinking Embarcadero has simply priced their way out of the market and into further obscurity.  With all the free and open-source software out there (including things like Microsoft's "Express" version of Visual Studio 2012 and so forth), coupled with the fact that I need to also pay extra for all sorts of Delphi 3rd party components (for functionality I can find for free in other languages/platforms), the management at Embarcadero really seems to not understand the macro-movements in the software development market.

IF they did understand, perhaps they'd release a very capable Delphi version that can compare to the Visual Studio "Express" line... but, I can nearly guarantee they will not, and it probably does not matter at this point as all the numbers are pointing to Delphi having secured its own fat: obscurity and an inevitable death.  I'd be nice if I was wrong and Delphi experienced a resurgence, as I really would like to put my nearly 20yrs of Delphi experience to use for paying gigs!).

Friday, January 11, 2013

Windows 7 IIS 7.5 + PHP 5.4 Install the AUTOMATIC way - using MS Web Platform Installer!

Install PHP 5.4 (5.x) on Windows 7 IIS 7.5 the EASY way!


Microsoft Web Platform Installer for PHP 5.4 / 5.x to the rescue!

I generally develop my websites in Microsoft technologies: ASPX / DotNet C# with SQL-Server databases. But, I do have a few smaller sites I work on that are build using PHP. Since my normal desktop for website development and software development is a Windows 7x64 Pro machine, I use the built-in Internet Information Services (IIS) 7.5 web server for testing my ASPX sites using localhost (127.0.0.1).

Well, what about testing my PHP Hypertext Preprocessor based applications locally on Windows 7 with IIS 7.5?  Thankfully, you can forget all the overly-complex installation instructions that appear all over the web and install PHP 5.4 on IIS 7.5 the SUPER EASY WAY: use Microsoft's very nice "Web Platform Installer 4.0" to do this!  [Update: you can also use Web Platform Installer 5.0 for PHP 7.0 now, and this will work on Windows 10 / IIS 10.  PHP 7.0 can also be then be updated / upgraded to PHP 7.1 using the PHP for Windows downloads at php.net]

PHP 5.4 on IIS 7.5 step-by-step instructions
using Microsoft Web-Platform-Installer 4.0

Here are the basic steps, and I included screen images showing visual feedback you can expect during the process. And, this whole process is only going to take a few minutes (depending on your download speed).

  1. Get the the Microsoft web page for the Web Platform Installer for PHP 5.4 ("WPI").  You will see a large button on that page saying "Install Now"... click it to download a PHP54.exe (small) program that you run to launch the WPI install process. Note: if you already have the MS WPI installed, you should be able to just use that interface directly to add PHP 5.4 -- WPI should be accessible via your start-menu, and you can find it here too: "C:\Program Files\Microsoft\Web Platform Installer\WebPlatformInstaller.exe"

    [Update] as of 2017-Jan: I noticed that Microsoft no longer has the PHP 5.4 Installer at the link location which formerly existed (above), and that in its place you can get Version 5.0 of the Microsoft Web Platform Installer for PHP 7.0 and/or PHP 7.1is now here.  You will probably need to manually enable CGI (in IIS, under WWW Services, App Dev Features). Once you install WPI 5.0, use its Products-search-feature to find all things "PHP", and you should see the newer 7.x PHP WPI options to select; and, if using PHP on IIS with SQL-Server, be sure to install the Microsoft Drivers 4.0 (x64) for PHP v7.0 for SQL Server in IIS for database connectivity.
  2. Run that PHP54.exe program you downloaded.  This will start the platform-installer and proceed with PHP 5.4 on IIS7.5 installation.  The program will download some more content, then present you with this screen:
    PHP 5.4 on IIS 7.5 Microsoft Web Platform Installer 4.0 Screen 1
    Initial Screen once ready.

  3. Next, click the "Options" link to see the following screen, from which I chose "IIS" for the "Which Web Server would you like to use?", since I have Win7x64 Pro with IIS 7.5 running (versus IIS Express 7.5).  Then, click "OK" to go back to the screen shown in step 2, from which I chose to click the "Install" button...
    PHP 5.4 on IIS 7.5 Microsoft Web Platform Installer 4.0 Options
    The IIS / PHP Install Options
  4. You will be presented with the following screen showing what PHP 5.x.x version is going to be installed on your IIS 7.5 setup along with any other supplemental packages for managing PHP on Windows / IIS.  I just went with the defaults and chose "I Accept"...
    PHP 5.4 on IIS 7.5 Microsoft Web Platform Installer 4.0 Prereqs
    Various Prerequisites :  You can opt out of defaults here
  5. The installation for PHP 5.4 on IIS 7.5 will now take place, and when it completes you will see the following screen.
    PHP 5.4 on IIS 7.5 Microsoft Web Platform Installer 4.0 Finish
  6. Now, once you are done, you will see the Web Platform Installer's menu system that will display some very interesting additional packages you may want to install this way!  There are a lot of very useful packages setup for the super-easy / automatic installation process. See the "Products" and "Applications" tabs for a list.  And,  you will notice how your "PHP 5.4.9" (or whatever version you just installed) shows up in the list of products as "Installed" now:
    Microsoft Web Platform Installer 4.0 Products List

    Microsoft Web Platform Installer 4.0 Applications List
  7. Lastly, if you want to see exactly what was installed and see that these WPI-installed products can be removed via the "normal" way (Control Panel, Programs and Features), here is a screen-shot after using the WPI to install PHP 5.4 on Windows IIS 7.5.  I clipped the screen to show only those items that were installed with PHP for Windows via WPI auto-installer:
PHP5.4 in IIS 7.5 MS Windows Control Panel Installed Programs



I hope you find this all useful and see how super-simple it can be to run PHP on Windows 7 / IIS7.5 for local PHP website development on a Microsoft Platform! And, this even installs some SQL-Server 2012 drivers and PHP connectivity to SQL-Server.

Final Note: Web Platform Installer for PHP does not always keep the PHP installer packages as current as you would prefer.  If you need to update to a newer version, or the most recent version, of PHP, i.e., something newer than what is available in the WPI products list like PHP 7.1.x or whatever, there are some rather lengthy notes about one manual approach to do this exist at this website (though, I have not tried them yet).


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.