appendTo Sponsors STL ALT .NET

appendToLast month I started working for an amazing software development company called appendTo. My co-workers are a tight, talented, distributed group of amazing individuals who inspire and motivate me with the awesome work they do.

Though a small company, appendTo plays a major league game. Our front-end developers recently worked with Time Magazine developers to launch a responsive redesign of Time.com, company founder Mike Hosteler presented at the MS Build 2012 conference last week on writing Windows Store apps with jQuery, and many of our team members are core contributors and/or owners of popular open source projects written in many different programming languages.

appendTo offers a wide variety of services, most of which center around web and mobile development. Because appendTo has a strong commitment to open source software, many of the core libraries that were developed internally have been released on Github.

As an addition to the appendTo Portfolio of Awesome™, appendTo has graciously offered to sponsor STL ALT .NET by covering the (non-trivial) cost of our meetup site. I am happy to welcome appendTo as a sponsor and want to personally thank the company for its investment in the St. Louis developer community!

Infragistics Sponsors STL ALT .NET

developer toolsI am pleased to announce that Infragistics, a leading .NET UI control vendor, has donated a number of free package licenses to STL ALT .NET to give away as raffle prizes during our monthly meetings:

Infragistics is well respected as a leading UI control vendor, and has a formidable array of control packages for any .NET development need, whether it be Windows Forms, WPF, ASP.NET or Windows Phone, Infragistics has packages for all of these and more.  Infragistics also offers a free beta controls download for its newest toolset, the Windows 8 App Store controls.  Designed to run in the new Windows 8 Modern UI, these controls are ideal for either desktop or Surface development.  Because they take advantage of both the C# and JavaScript WinRT APIs, both desktop and web developers will be in familiar territory while developing.

We are glad to welcome Infragistics as a sponsor and thank them greatly for their generosity!

Why I Voted Libertarian

This is not a political blog, but I am breaking rank today to talk about a political matter in light of our most recent bout of national elections. I want to explain why I vote Libertarian. My goal is not to convince you to vote as I do, but rather to give you a different perspective to consider. I don’t claim to speak for all Libertarians–these are my personal beliefs–but I do think that most Libertarian-minded voters would agree with my position here.

Consider the following slogans, all of which I have seen in some form on bumper stickers here in St. Louis:

  • I own guns… and I vote.
  • I am a woman… and I vote.
  • I love animals… and I vote.
  • I am a vegetarian… and I vote.
  • I am a Christian… and I vote.

I’m sure you have seen similar bumper stickers, as these tend to be quite popular, especially during election years.

What is interesting about each of these slogans is that they convey something that, deep down, most people understand about politics and law, but which they don’t verbalize or even conceptualize very well, and that is the fact that law (government) is force.  Each of these slogans is actually a thinly veiled threat. The hidden meaning is: I have specific personal beliefs, and I am prepared to use my voting power to force you to comply with those beliefs. Think about that. Every time you vote for some proposition or support some political figure who pushes particular laws, you are agreeing that it is acceptable to compel your family, friends, and neighbors to obey those laws, and that if they disagree they should be forcibly punished.

Every human being is (sub)consciously aware that their life is being shortened every day, and so seeks to maximize the benefit they get from living while they can. There are only two ways to achieve this: by compelling others to provide them with the necessities of life (as thugs, tyrants, slave owners and cult leaders do), or by joining in a voluntary society with others who are all willing to specialize their labor and trade voluntarily, increasing both the standard of living and the leisure time of all involved. These are contradictory methods, and laws are created in civilized societies to prevent people from exercising the former. The only way that everyone who participates in society benefits is by prohibiting the initiation of force. Generally, people seek to spend the least amount of time procuring the necessities of life and the most amount of time pursuing the things they love and value. Self-realization — the development and pursuit of values — is a defining characteristic of our humanity. But compulsory laws, rather than providing a safe environment in which values can be discovered and pursued, prescribe values and prohibit alternatives.

This method of aggression by-proxy is not only harmful to society  but destructive to our very humanity. American society continues to fragment into “tribes” of people who all wage a war of compulsion in our political system. Whether it is the 1% or the 99%, the Christians or the Muslims, the gays or the straights, the feminists or men’s rights advocates, each group wants to use government as a cudgel to compel the other to behave in particular ways.

The reason I vote Libertarian is because I believe that the answer to social problems is not more compulsion or force, but the restraint of compulsion and force by laws that protect all individuals. I vote Libertarian because I believe that people must be free to be different, and to live their convictions regardless of whether I like them or not; and should their convictions move them to violence against me, the society that we’ve created checks that and protects my peaceful behavior. I vote Libertarian because I believe it is time that Americans become adults and solve their problems, person to person, without threatening bumper stickers or political pull. I vote Libertarian because I believe that the only way humans can reach their full potential is to be completely free.

Alexis Ohanian and the Open Internet

On Tuesday this week I went downtown to hear Alexis Ohanian speak at the StartLouis monthly meetup. His presentation was part of the Internet 2012 bus tour — a trip from Colorado to Kentucky in which Ohanian and Reddit general manager Eric Martin are documenting stories about the economic success of small businesses and startups that rely heavily on an open internet for their existence.

Ohanian’s crusade comes on the heels of some very bad internet legislation, SOPA and PIPA, that met tremendous resistance from the internet community because they sought to apply stringent regulation to internet providers in the name of protecting intellectual property, specifically copyrighted material, from being distributed without permission on the internet. In ignorance lawmakers crafted bills that required costly, drastic, or impossible changes to the structure of the internet itself in (what many believe to be) a futile attempt to curb piracy — changes that would necessarily limit freedom and destroy the open exchange of ideas, goods, and services that has yielded the richest economic bounty in modern times.

Alexis spent well over an hour talking about the people he had met on his tour: people who are using the internet to be producers, not consumers. He talked about family farms that are using the internet to coordinate sales and design new livestock feed; craftmakers who sell their hand-worked wares on Etsy; a robotic toymaker in Colorado that exports to a ravenous market in Austria; an auto manufacturer that builds cars designed on the ineternet at a fraction of the cost and time that it takes traditional automotive manufacturers to bring a car to market. Each story was a fascinating and powerful example of individual initiative and voluntary cooperation, and the common factor, the glue between each story, was the open internet. Armed with these amazing stories, Alexis hopes to show lawmakers that internet regulation is a horrible idea because for what little good it might do, it will necessarily destroy the free flow of information on which these emerging businesses depend.

Perhaps more important than his message about internet freedom (and it is a very important message) is his message about the most effective means to achieve this end, and it is: innovate, don’t legislate. By creating value on the internet, and by demonstrating the powerful returns that open exchange and open information can produce, we can convince large corporations that it is in their best interest to participate and promote the free flow of information. We use the carrot, not the stick; persuasion, not force. (This is, incidentally, part of why I oppose Net Neutrality laws.)

Though the topic was heavy, the evening was peppered with a great deal of humor. In what may only be called a heroic attempt, Alexis attempted to draw a corallary between the open internet and “flabongos”.

And in what may be the only known recording of a room full of nerds singing a Nelly song, Alexis invited us to help him “drunk dial” a tour donor as a thank-you for their generous donation.

That the internet matters now, more than ever, cannot be doubted. The Internet 2012 message is important. Freedom, voluntary cooperation, and individual initiative are the foundations of a civial and prosperous society. And more importantly, they are the paths to self-realization. All of us can be awesome; the internet has given us a glimpse of what that can look like. Politicians talk a great deal about “fixing the economy”, especially now that we are so close to a presidential election, but the truth is that legislation and force and silver tongues full of promises don’t create wealth or jobs. We do. And it is our great moral, life-affirming obligation to support and protect our freedom to do so.

Fun with C# and Node.js

A co-worker was looking for a nodejs module to generate UUIDs the other day, and it inspired me to write one that leverages C# to generate guids.  I wrote a simple C# class and compiled it with Mono as an executable.  It takes a single argument which is the number of guids to generate.  This executable is executed with the ‘child_process’ module that comes packaged with node, and receives its arguments from my node module.  The console output is then read and parsed, and returned to the calling JavaScript code.

I am definitely interested in further exploring a possible bridge for C# mono assemblies in node.  It seems that others are as well.

The community on STL ALT .NET

STL ALT .NET members were recently given the chance to win free tickets to the St. Louis Days of .NET conference in August by writing (and tweeting) a blog post about the group, what they have learned, and why they enjoy attending.  Here are the winners!

Maintainable JavaScript (book review)

Maintainable JavaScriptJavaScript has, it seems, finally come into its own, and with its new immense popularity, attracted the attention of opinionated writers of every ilk.  The latest book in O’Reilly’s growing collection of excellent books on all things JavaScript – Maintainable Javascript by Nicholas Zakas — is a worthy addition to the cannon, not because it brings anything new to the table per se, but because it consolidates a lot of different source material into a roadmap of sorts, useful for two primary target audiences: 1) developers who are new to JavaScript development but are otherwise familiar with traditional software practices such as unit testing, continuous integration, structured builds, etc., and 2) casual JavaScript developers who have probably hacked some jQuery in the browser but are really interested in what all the cool kids are doing now.

Zakas, a former Yahoo employee with blood, sweat and tears invested in YUI, has divided his work into three parts, two of which are augmented by detailed appendixes.

The first part covers JavaScript style guidelines, and is really a cross-section of The Gospel According to Douglas Crockford (a.k.a., The Good Parts), and YUI, jQuery and Dojo recommended coding conventions.  The JavaScript community is anything if not opinionated, and the division over minutia really shines in this section.  Zakas stresses that, “[r]ather than trying to force my preferences upon you, this [section] highlights important aspects that should be covered in your style guidelines.”  He notes that his own personal heresies can be found in Appendix A in case the official dissension isn’t enough.  Though I troll, the material in section one is still pretty important.  Zekas is right when he claims that teams should make an effort to follow consistent guidelines (regardless of which guidelines they happen to prefer).  Style variations in big projects can be a source of confusion at best, and costly bugs at worst.  There are many conventions on which JavaScript community leaders agree, and when they differ, it is often obvious that preference, not actual danger, is the driver.  Seasoned developers will feel at home reading about formatting, commenting, proper statement and expression structure, and how to property declare variables and functions.  For junior folk, or those new to the language, these conventions can be invaluable specifically because JavaScript behaves in ways that are occasionally surprising (e.g., variables are scoped at the function level, not the block level, so variable declarations can be trickier than most other languages).

In part two, Zakas examines some best practices for writing JavaScript code.  There is less subjective material here, mostly because “best practices” in JavaScript are like guard rails on a highway.  They are not there for aesthetic appeal, they are there to save your life.  Veteran JavaScript developers know how malleable JavaScript code can really be and prefer to prevent accidents rather than recover from them.  Zakas discusses the dangers of global objects, the problems with type coercion and equality checks, when and how to safely modify objects, best practices for throwing and handling errors, and several other topics (like separation of concerns) that, while not particular to JavaScript, remain treasured as received wisdom.

Part three is not so much about JavaScript code as it is about structuring and running a JavaScript project.  Most developers first experienced JavaScript as a second-hand language used to manipulate web pages but otherwise, considered it inconsequential.  JavaScript is now a first class citizen among languages, though, and as projects increase in size and complexity, a number of tools and practices have emerged to make managing those projects easier.  Zakas starts this section by discussing a build process, for which he chose the well-known tool Ant as a demonstration candidate.  The build process forms the backbone of each chapter in this section, as each topic relates to the build process in some way.  A few salient chapters cover common browser needs, such as file concatenation and minification, and several others cover universal concerns such as automated documentation and  automated testing (both unit and integration).  Zakas covers a primary technology in each chapter (e.g., JSDoc toolkit for automated documentation) but provides a very useful, fairly comprehensive list of alternatives in an appendix.  The final chapter in this section looks at the total build configuration with all moving parts — a very useful ten-thousand foot view of a large-scale JavaScript project setup.

Maintainable JavaScript is fairly short, and quite enjoyable, although I feel that it does repeat a great deal of content from Crockford, et al, especially in the first two sections.  This is not necessarily bad, but if the reader is already familiar with the opinions of these community leaders, it would be acceptable (and beneficial) to forego the first two sections and jump straight to section three.  The appendices are also useful for all readers, regardless of previous exposure.  JavaScript virgins would do well to pay attention to all sections, however, and would also do well to read Crockford, if only for his more esoteric explanations of JavaScript’s quirks and goods. Zakas does a good job making this information accessible and concise, and his inclusion of alternative perspectives provides a wider view of the community as a whole.

If you’re new to JavaScript, or you’re looking to stand up your first significant JavaScript project, invest in this book.  It is money well spent.

Browsers on Twitter

I combined screenshots of the four major browsers on Twitter.  The results are very interesting from a social media perspective:

  • IE tweets the most (followed by Firefox, which tweets about 1/3 less than IE)
  • Firefox by far follows the most tweeps
  • Firefox has the most followers (followed by Chrome and IE, which are comparably close)

Browsers on Twitter

(Click on the image for a hi-res version.)

Mindscape sponsors STL ALT .NET

Mindscape

Code Monkeys love their tools.

From the gruffest Unix hacker who can outperform a concert pianist in Emacs keystrokes, to the coolest Metro vegan hippy in Redmond, developers will go to religious lengths to prove their undying affinity for the software that makes their lives, their jobs, easier.

Mindscape is no novice on the field of tools and controls.  Not only does Mindscape produce an impressive suite of standalone development products, they offer an assortment of helpful Visual Studio plugins, many free of charge, to the Microsoft community.  Want to dress up WPF or Silverlight?  How about design an NHibernate persistence solution?  Interested in Windows Phone 7, or maybe SimpleDB?  Mindscape has tools for all of these, and more.

Mindscape has generously offered to donate one standalone product license each month to raffle at STL ALT .NET, as well as one Mega Pack license for any group member who delivers a full presentation!   In addition, in July we will be raffling one additional license for the WPF Elements 5.1 launch this month.

Follow @MindscapeHQ on Twitter for additional product information and release announcements.