Monday, April 13, 2009

What's New in Eclipse 3.5M5?

Eclipse 3.5 M5 is out, and as this cycle winds down, the changes are getting less significant.

I like the way they're planning on highlighting matching characters in the Open Type dialog:
It's also nice that they'll be offering an Open Implementation hyperlink:

Friday, April 10, 2009

Fixing Politics from the Grassroots Up

"Politics" and "Government" are broken.

The world has changed. Politics and government have not kept up.

Without trying to start a debate about the nature of government and politics1, I'll assert: the aim of Government should be to protect the welfare of the people2 and politics is the means through which the people influence government and thus protect their collective welfare.

And, perhaps, at some point in the distant past, that was how things worked, but those times, if they ever existed, are done. Most people don't feel that politics allows them to protect their welfare, or even to influence government. As a result, many voters are disengaged and/or jaded, voter turnout is dropping3 (Canada, US), particularly for the young. Those who aren't disengaged are often trying to exploit the system for their own gain.

This can be changed. It's already changing.

We're Ready for Change
The North American economy has taken a pounding, and that will continue for months, if not years. This causes unrest, and unrest increases the appetite for change. Everyone is keenly aware that things, as they stand now, are not working. Even Microsoft, a company that has stood to gain from the status quo for many years now, is ready to speak out in favor of change.

The people of the United States of America have voted in Barack Obama, who made change a key element of his platform. And, frankly, it isn't hard to see that simply the act of voting in an african-american as a president is a welcome sort of change. You can see from the optimism that surrounded Obama's inauguration that people haven't lost all hope that Government can change their life for the better.

There are signs of change here in Toronto as well, but we'll come back to these.

Political parties have been slow to adapt to these changes. They've been stuck in old ways and old models: Politics 1.0, which is all about lawn signs and leaflets and broadcast advertising and television debates.

We Have the Tools of Change
The past fifteen years have brought remarkable changes to the world in the ways we communicate, the ways to share knowledge, the ways we reach out to each other, network and collaborate. Although the tools of change are themselves changing, we're already far more powerful than we were, particularly in the ways in which collective effort and desire can be channelled and harnessed towards a common goal.

In the past few years, political parties and organizers have been learning, changing their ways, adopting meetups and social networks, facebook, twitter, iPhone applications and user-generated content. This is progress, but it's still coming from the same mindset. These are new ways to help political parties communicate with their loyal members. They're ways to engage those loyal members in recruiting drives and fundraising. They don't and can't scale to real two-way communication. It's a start, but isn't enough.

Be The Change
It's not enough to take new technologies and apply the same political mindset. It's great that Kerry was able to take Meetups to increase grassroots fundraising, and it's interesting that political leaders like @JackLayton are finding ways to use twitter to get their message across to more people, faster, to mobilize their supporters. But these are simply ways that we can get more involved with our political parties.

If we truly wish to, as Ghandi reputedly urged, "be the change we want to see in the world," then we're aiming too low. Rather than trying to use these technologies to stay better connected with party strategy, we should be using these to enact change directly on the world.

Here in Toronto, when the tech-savvy populace banded together to create and support #HoHoTo, we donated $25,000 and lots of food to local foodbanks. We followed that up with #ChangeCamp, where politicians and the people met to talk about practical change, like opening up government data to allow the people to add innovative value through mashups and analysis. We have @mayormiller on twitter, attending #mesh to talk about open government, and open data.

It's this kind of actions that really give me hope for change, hope for a people that is passionate about and actively engaged in helping each other to not only survive, but to thrive. Public debate and direct action are far more interesting than carefully channeled political messages. I'm hoping that these kinds of events will continue and even accelerate.

So, what does this all mean?

A Manifesto for Change
It's time for change. We have the appetite for change and the tools of change. We have the will and means to get directly involved in the the governance of our society, to make a difference. We can channel this energy through open governments, social entrepreneurship, and other channels. We don't want to support, we want to participate. We don't want to hear the messages from on high, we want to make the world a better place, directly, immediately, through our actions

Accordingly, I suggest that we value:

  • Action over politics. We need to focus on making a difference and not be distracted by supporting particular political parties and getting caught up in partisan messaging. Activism has its place, but I'd rather see that same energy go into changing the world directly.
  • Open over closed. We need open data and open government, not black-box governance with private data and closed-door sessions.
  • Grassroots action over top-down action. There are solid reasons for centralized agencies in government, but innovation happens at the fringe, and that means you. We have an engaged, civic-minded, technologically-savvy populace, so let's get out there and do something.
This is something we can act on now. Change the world, and, following the example of Jessica Jackley,"retire on happiness". Sounds good, doesn't it?




Notes
1 - Although the nature of Government and Politics are themselves subjects on which entire volumes can and have been written, and I'm sure some will disagree with the definitions I've chosen here.
2 - By balancing some definition of collective good with individual freedom; difficult to get right, but worth striving for.
3 - Although voter turnout is on a steady downward trend, the trend isn't as steep bad as the news would have you believe. It's not a good sign, but it's also not impending doom.

Wednesday, March 4, 2009

First Month as an Apple User: *%@#&$

So, on 09-Feb at 9am, I placed an order for a MacBook Pro 15".

There were a few delays in shipping the order, but it finally shipped on 14-Feb and I got it on the 17th. A little slow, but no big deal. I spent the week setting it up so that it would be ready for personal use and contract work.

On Friday (20th), the ethernet port suddenly died altogether. Wifi was still working, so I signed up for the Genius Bar Monday morning, then took it home. I tried it with some more networking equipment over the weekend to make sure the problem was the laptop, but sadly nothing worked.

On monday (23rd) the Genius Bar agreed that the ethernet port was dead, and suggested I send it back for a replacement. The joy of getting a custom-configured machine from apple (more RAM, faster HD) is that instead of doing a quick in-store exchange, they can make you wait for another few days. I returned it the next day after getting their RMA form, and they processed the return.

The order status updated to show the return processed on the 25th, and I began to wait some more. By 01-Mar, I was starting my new contract, without a good machine to do it on, which was really irritating. On 02-Mar, Apple updated their processor lineup. I checked my order status again and noticed that I was getting the 2.66GHz update, but that my hard drive was downgraded to the 5400 rpm.

After another half-hour with support, I'm back to a 7200rpm hard drive, and I've learned that the hold on the replacement laptop was never released after I returned the original, so I've been waiting for no reason. The hold is now released, and now, sometime over a month after I ordered it, I may receive a working laptop.

So far, my user experience as an Apple convert isn't working out all that well. The apple support people are nice enough, but the fact that I've had to call them several times in the first month of ownership, most of which I've spent without an actual Apple is really starting to piss me off.

This had better be the last hangup.

Tuesday, March 3, 2009

Generating Flex HTML Templates with Flex Mojos in Maven

Since I'd managed to reach a base level of comfort with Flex Mojos fairly quickly, we decided to see how hard it would be to extend it the rest of the way. As it turns out, not terrifically difficult.

I wasn't willing to disable the working FlexBuilder-integrated build that would take the results that FlexBuilder would generate from target/bin-release and include it into an assembly, so I took a little time to use a dual-profile approach to setting up the assembly:


<profiles>
<profile>
<id>flex-mojos-assembly</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>flex-mojos-assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</profile>

<profile>
<id>flex-builder-assembly</id>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>flex-builder-assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>


This gave me the freedom to continue working on integrating Flex Mojos approach without breaking what was already in place, particularly since we haven't thoroughly gone over the SWF that Flex Mojos generates. If I want to build an assembly with the SWF that flex-mojos generates, I simply run the build. If I want to use the release build from FlexBuilder, I run the same build but turn on the flex-builder-assembly profile (which automatically takes the other profile out).

Now, this approach doesn't take Flex Mojos out entirely; it just ignores the results of the flexmojo compilation process if it isn't being used. This is a little wasteful, so I may come back and revisit that approach later. For now, it's a lot less complex than trying to remove the flexmojos integration entirely, which is done through a parent POM approach.

After that, it was a matter of generating the HTML using the local custom html template by adding this to the flex-mojos-assembly profile:


<plugin>
<groupId>info.flex-mojos</groupId>
<artifactId>html-wrapper-mojo</artifactId>
<executions>
<execution>
<goals>
<goal>wrapper</goal>
</goals>
<configuration>
<targetPlayer>9.0.124</targetPlayer>
<templateURI>folder:html-template</templateURI>
<outputDirectory>${project.build.directory}/html-template</outputDirectory>
<parameters>
<bgcolor>#ffffff</bgcolor>
<!-- Defaults Follow -->
<!--
Version comes from 'targetPlayer' or '9.0.0' if no targetPlayer.
<version_major>9</version_major>
<version_minor>0</version_minor>
<version_revision>0</version_revision>
<swf>${project.build.finalName}</swf>
<width>100%</height>
<height>100%</height>
<application>${project.artifactId}</application>
<bgcolor>#869ca7</bgcolor>
-->
</parameters>
</configuration>
</execution>
</executions>
</plugin>


And setting up an assembly descriptor to pull in what I needed from the project structure and the results of the generation:


<assembly>
<id>flex</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<files>
<!-- SWF -->
<file>
<source>${project.build.directory}/${project.build.finalName}.swf</source>
</file>
</files>
<fileSets>
<!-- HTML Template -->
<fileSet>
<directory>target/html-template</directory>
<outputDirectory />
<includes>
<include>**/*</include>
</includes>
</fileSet>
<!-- Project Resources -->
<fileSet>
<directory>src/main/flex</directory>
<outputDirectory />
<includes>
<include>assets/**/*</include>
<include>images/**/*</include>
<include>*.html</include>
<include>*.mp3</include>
</includes>
</fileSet>
</fileSets>
</assembly>


This gives me a final assembly that looks a lot like the assembly the project was already generating. Now to find out if it works the same way ...