Background
Project dashboarding - viewing the progress of a software development project from different viewpoints - has been an interest of mine ever since I started developing software. After one particularly difficult project involving issues with requirements, development and operations deployment and environmental difficulties, with no shortage of fingerpointing going on, I thought it would be good to step back and see the project from a linear timeline perspective and gain some objectivity. Additionally and especially for long running projects, viewing time linearly helps us as humans see the scope of events.
Simile Timeline + Google Calendar
I'd already had a calendar that was a great repository of significant events, which meetings I'd scheduled, etc. in Google Calendar. The data originally came from the corporate Outlook, synced up to Google Calendar with the Google Calendar Sync application.
Using the Simile Timeline Javascript widget, I wrote a quick export from Google Calendar using the Google Calendar Data API to format the calendar events into the Simile Timeline json format. Since the events were hand coded Client Requirements (grey), Impediment (red) and Success (green), viewing the events linearly helped clear up the discussion around where the issues were in deploying the application. This quick web application was very well received and project managers in both development and operations, as well as other non-project related developers and managers, were able to see the timeline of events that occurred for this particular project. I hadn't fully automated the import from Google Calendar to the Project Timeline page, and that's what led to the next step.
Dynamic Timeline Generation
The timeline view of the project was very useful and I thought it'd be a great perspective for other projects. Most of the projects at the organization use codeBeamer by Intland as an issue tracker and document repository. CodeBeamer has a much richer ability to code tasks / tracker items with statuses as well as start dates, end dates, and changed dates. Being able to dynamically pull project info via tracker lists and view them in a linear timeline looked to be a great start for a project dashboard.
The Timeline Builder was constructed with two picklists, one that displayed the lists of projects available and the second picklist that was contextual to the project's actual tracker lists. The codeBeamer repository is organized such that every project has multiple "tracker lists" such as Business Requirements, Change Requests, Production Releases, and Defects. Project administrators can also add tracker lists as needed. When a project is selected from the first picklist, an AJAX call is made to the codeBeamer services, returning the project-specific tracker lists. When a user selects a tracker list, the application issues an AJAX query and retrieves the list of tracker events and then displays them as a timeline. The timeline has three horizontally scrollable bands: a weekly view, a monthly view and a yearly view. Each of them can be dragged left or right and the display of events will be synchronized. The display is "coded" by status: tems with a status of "closed" are represented as a solid blue ribbon, individual events have a circle icon, "in progress" events are a slightly transparent blue ribbon, "open" items are represented by a slightly transparent red ribbon with a solid red circle icon. Selecting a timeline event yields a link to the original codeBeamer tracker item as well as a short description along with the open and closed/last updated information. Below the timeline is a tabular representation of all the event data.
Technology Decisions
The organization uses .NET predominantly so I decided on using WCF and the codeBeamer .NET SDK to serve up the Simile Timeline JSON and ASP.NET (without WebForms) and jQuery to make AJAX requests to the WCF codeBeamer services. Additionally, the organization is standardized on Windows 2003 and IIS6, so I passed on using ASP.NET MVC on IIS6. Each Codebeamer project can have multiple task trackers ("tracker lists"), so there were three total JSON services: GetAllProjects, GetTrackerListsForProject, and the last, GetTimelineForTrackerList, which retrieved all tracker items for a particular tracker list as Simile JSON events. Additionally, I used two jQuery plugins - jTemplates to populate portions of the page, and flexigrid to show the same events in a table below the timeline.
Findings and Stumblings
Looking at the variety of projects that we have in a linear format brought some interesting insights, the first of which is that almost no two projects use Tracker lists the same way. Not every project uses codeBeamer the same way, even though we have default tracker lists for Business Requirements, Change Requests, Production Releases, and Defects. Not every Task Lead uses the default statuses the same way - some close all tracker items only when a project has deployed, and create a separate status - "development complete" - for developers to use. Tracker items stay open throughout the iteration. For long-running, multi-year projects, cyclicality was shown quite well in a linear timeline - periods of project activity were clearly mapped to variety of business cycles.
With the differences in usage of codeBeamer trackers, the high level of ability to customize tracker item templates, and the variability in conforming to the SDLC in the organization, comparing project-to-project is difficult in general, not just with a linear timeline.
The decision to use .NET WCF and a jQuery-driven front-end separated the codeBeamer Tracker List JSON generation service from the UI application, creating two projects which may or may not have been a good idea - although service-oriented, it's two distinct codebases to maintain. Another interesting challenge was the codeBeamer API documentation for .NET - there isn't really any, for either Hessian C# or the codeBeamer Remote API. Using Reflector and referring to the codeBeamer Java SDK Javadocs did help, but a Sandcastle generated documentation set would've been useful. Thankfully, the Java and .NET API's are extremely similar, so it wasn't a problem interpreting what should've happened.
Project Next Steps / Directions
For the current iteration of this timeline builder I have a few minor technical issues I'd like to address. I'm planning on having better integration between the flexigrid table of events and the simile timeline so that when you select an item from the table, it scrolls the timeline to the relevant event. Another enhancement would be to allow stacking timelines of multiple projects for juxtaposition.
The organization also uses VersionOne's on-line agile project tracking application which has similar data to codeBeamer. A future rev to this application may include pulling from VersionOne project data dynamically in a similar manner (choose a project, see a timeline). Similar "coding" issues occur with VersionOne as with codeBeamer use, but since VersionOne is more focused on an agile project management lifecycle, I expect representing the variety of task types to be somewhat easier. A first version is pictured below (using jstree to visualize the project hierarchy, at the left). Coding (designating the display of open, closed, in progress, etc.) is a bigger issue, and relates more to the choice of software project management structure - agile, etc. - but is something that's greatly needed to get a consistent level of display. Other project tracking software, which I'm familiar with from a user standpoint, that may be usable include Redmine and Assembla/Trac.
From the technical framework, I may experiment with ASP.NET MVC next (which would remove the need for a separate WCF project) and then GWT (with the codeBeamer Java SDK) to see which one is more code-efficient.
In honor of my upcoming TOGAF 9 certification, I've put together a
Timeline of Enterprise Architectures - Zachman FEA, TOGAF, Gartner EA, from 1987 to today.
All you need in this life is ignorance and confidence, and then success is sure.
- Mark Twain
Letter to Mrs Foote, Dec. 2, 1887
Feel free to apply to coworkers, consultants, management, work, politicians, etc.
10:09 AM Ed: How do you suggest I get this woman to shut up
me: Lol
Ed: She has interupted everyone for 2hrs straight
me: Where are you?
Ed: I'm gonna stab her in the neck with a pen
10:10 AM In meeting
me: Sounds like you need to write a meeting haiku involving a pen and her neck
[I couldn't help myself...]
10:11 AM
interrupting bitch
my pen would fit in your neck
let speech flow freely
I received my SQL Azure CTP1 code yesterday (which you can register for here) and finally got around to plugging it in. Upon entering your code and entering a admin username and password, MSFT creates a database server for you fixed to the USA_Northwest region with a randomly assigned name (such as "q57qq26s2c") and in the project "SDS-only CTP Project". The UI on sql.azure.com for managing the database server includes a method to reset your admin password, functions for creating and dropping databases and generation of ADO.NET, ODBC, and OLE DB connection strings. That last one's handy to get the full dns name of the database, in the form of servername.ctp.database.windows.net, which can be used later in sqlcmd or SQL Server Managment Studio. That's it, though, no other db management features. According to the welcome e-mail, this CTP will limit use to 1 SQL Azure server and 5 databases.
Full SQL Server Managment Studio (SSMS) support isn't all there - you can't view databases, but you can connect and execute queries. The "USE" statement doesn't work, so you can't flip your query to another existing database. Guidelines and Limitations (SQL Azure Database)
Microsoft has a workaround on the forums (just start a new query in SSMS, connect to your specific database via the Options and you're good, except for an 'ANSI_NULL' error message which can be ignored). SSMS does time out quite quickly, so don't leave that query window idle too long (A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An established connection was aborted by the software in your host machine.)) Also there's sqlcmd, which, not being a "database person," I didn't know existed.
Ok, but, really, is it just a SQL database out there, in the cloud? Yes, it totally is.
I created a DB via their UI and then opened an existing Windows desktop app I had which uses Castle ActiveRecord, modified the config.xml connection.connection_string property and ran one of my test methods (you use TestDriven, right?) that creates a schema and then F5'd to fire up the UI. Add, Update, Delete, like a charm. I'll probably do a few more tests where I have a db schema created from scratch over the next few days.
Creating a database is easy (especially if you have Subsonic or Castle ActiveRecord do schema management for you), but what about existing databases? Can I restore a backup to the cloud?
After looking around, SSIS seems the only way to go. Use an existing db to generate the create scripts for the schema, then use SSIS to push over the data. I've never used SSIS so this should be fun.
Summaries from the forum postings, etc:
First off, please note that "SQL Azure" used to be called "SDS" - SQL Data Services - so some of the postings may not look like they apply, but it's the "SQL Azure - Getting Started" forums - they apply. The name changed on 07/09.
"Cursors will be IN, XML data type will be IN (but no schema collection support), Local temp tables are IN (#employee), Global temp tables are OUT (##employee), CLR integration is OUT This is also our current plan for v1.
" - Stan Kitsis, Program Manager, SQL Data Services, 07/30/2009
"TSQL Support in SQL Data Services," 07/07/2009, Stan Kitsis, SQL Azure Team Blog
Forums postings
As I was getting ready for work today, I had the Kindle read to me the top article in today's WSJ, "U.S. Courts Former Warlords in Its Bid for Afghan Stability". I had also been contemplating also writing another "Six Degrees of Bin Laden" with the Haqqanni movement as that's making some news and it's a game I invented but then I heard Kindle robot TTS voice read this quote* and it struck me.
"Every politician in Afghanistan is a thief, but our governor doesn't take all the money for himself. He is building our city," says Shafeeq Azizi, a 37-year-old shop owner in Jalalabad. "Why does it trouble me if he gets rich?"
Mr. Azizi was lounging with friends in one of the Jalalabad parks restored by Mr. Shirzai's administration. Across the street is a park Mr. Shirzai built for women. A few miles away stands Shirzai Stadium. There's a new mall, new stoplights and refurbished mosques in many neighborhoods.
Critics say the governor's strengths and weaknesses are often one and the same. "He wants something and he says, 'Build it.' There is no plan," said Haji Wahid, who owns a construction company. He says he sees no long-term vision behind Mr. Shirzai's rebuilding efforts.
Parts of the US Government are tribal.
And not in any good connotation. Particularly our government's IT divisions. They're not just protected, entitled fiefdoms, an analogy whose European roots softens the devastation and criticism that it should bring, but actual tribal land grabs by people who have no idea what effective IT means but think they do because they can use a Blackberry like Obama or love their iPhone.

Here's how it should run. And by "it" I mean the Afghan situation and not our government IT's situation, since that's well in hand by people who think they know what they're doing, puls Web 2.0 ftw, data transparency and Vivek Kundra's back on the job. (Petty "warlords" watch out.)
When analysing situations like this a review of history's always helpful. Here's one slice of history that looks like it might be applicable: The aftermath of the British Raj and the subsequent upheaval in India and Pakistan eventually leading to an India where large wealthy families (Tata, etc) control multiple industries in a monopoly grip. The latter half of that statement resembles the US with our monopoly-families, too, which should give some indication where I'm going here. Granted, in both Iraq and Afghanistan (and most elsewhere), we - America - are not colonialists like the Brits, French, Germans, Dutch, etc and I'd argue our methods are less damaging, but that's another debate and another post.
The process at hand is this:
Tribal succession -> Tribally appointed, Elections -> Elections where Tribal relationships may still have sway -> "Free and Fair" Elections.
In the western world we may think we're so far advanced that we don't deal with fiefdoms anymore - we're beyond that process and that management style is retrograde or deprecated. It's not, we (westerners) just don't do it any more nor do we do it well. They (middleasternerners) do. There may be a value judgment in saying one style is better than another and I'll leave that up to someone's masters/phd thesis, but one fact is true: "Democracy" and "tribal consensus rule" don't interface well at an economic point. It's much better to have two democracies (or political structures loosely framed around democratic principles) interacting than disparate political systems (china-us, etc.). To this point, if we or for that matter Afghanistan, themselves, want to get to a more "democratic" style of political system, they'll have to go through the above transitional phases and we'll have to honor and recognize that those phases will happen. Whining (from western governments and western NGO "democracy watch dogs") does not and will not help phase transitioning, it'll just be annoying.
Currently tribal succession is in play. We'll have to let it happen. For example, the Jamal Baba Construction Co., part owned by Mr. Shirzai's son, Jaan Agh mentioned in the article will have to undergo economic pressure and engagement to become a company that has influence in the region. That'll allow external democratic organizations (whether external to Kandahar and Nangahar provinces or external to Afghanistan) exert some influence. The influence could be democratic-leaning or possibly Talib-leaning. That pressure, if properly exercised, will lead to another political round wherein the region'll be able to assess the benefits of a more open economic and political model and then continue down the tribal-democratic spectrum. Note India's example - Tata, Mittal, etc are all still in place, mostly unregulated from a monopoly stance - India's still not at "free and fair." One could also argue that Japan's kiretsus haven't reached the fullness of the "democratic" spectrum yet, either, after their rebuilding. Some countries don't want to go all the way and we should recognize and accept that. Will we, though?
* Here's the quote (wav format) using my Say This app.
With Bonus: LINQ to SQL!
I deal with many Microsoft Dynamics CRM servers that are in many different states of configuration and I often want a quick view of those configuration settings. This version of CRM, 4.0, appears to be in a bit of a philosophical transition with regards many things, including as to where to store their configuration settings - in the registry or in the CRM configuration database - a quandary that provides a huge challenge to their internal code when it comes to precedence for SDK calls vs client calls, etc. It's very helpful to look at these two places at once when determining if plug-in or client javascript sdk calls are failing.
I came up with the "CRM Environment Check" app that displays both and also saves the output to XML. Nothing special - it took me about 10 minutes last night to think of it, 10 minutes to fire up the VM and get halfway done, and 10 minutes this morning to polish it to what you see here.
Works as promised, with XML output.
I like to add a few techniques to my toolbox so I figured I'd put in LINQ to SQL for the access to the MSCRM deployment properties table. I did, it was pretty easy and I was aglow.
At least, that's what I thought.
Crowing about my success - sorry blog, I couldn't wait - I told Chris who immediately and cruelly started mocking me about the death of LINQ to SQL and my poor choices in life.
I read this on my favorite tech website, InfoQ, Is LINQ to SQL Truly Dead?, dated yesterday.
Glad I didn't do much more with LINQ to SQL other than a "select" statement.
This experience has been a quick lesson in Microsoft technologies - the newest stuff looks easy to use, has lots of promise, and delivers (when I get around to using it), but inevitably, has some, shall we say, "scaling" issues.
// Define a data object class
[Table(Name="DeploymentProperties")]
public class DeploymentProperty
{
[Column(Name="NVarCharColumn")] public string Value;
[Column(Name="ColumnName")] public string Property;
}
...
using System.Data.Linq;
...
DataContext db = new DataContext(configDbConnect);
Table DeploymentProperties = db.GetTable();
var query = from p in DeploymentProperties
where p.Value!= null
select new { p.Property, p.Value };
foreach (var row in query)
deploymentPropertiesValues.Add(row.Property, row.Value);
Update: Version 1.1.0.4
Now includes ADSI to display Microsoft Dynamics CRM IIS website info and the hosts file, needed for determining the workaround for the hardcoded 'localhost' in RTM's services. (There is a hotfix for the hardcoded 'localhost' particular issue.)
The Quotes Manager for the Dune Chronicles is nothing exciting from a content perspective, really. It's a simple table structure with books and quotes that belong to them. The semi-interesting part is the use of ActiveRecord, and with help from Chris, a bit of Linq, there's a winform I can use to manage quotes from the chapter headers of the Dune books.
Finally, tleilax'll have some content.
The client where I work has a set of analysts, a majority subset of whom are used to looking at a software application as “database-driven,” meaning they need to see the database table schema in order to understand the flow of the application. They’re technical enough that they can use the “language” of a database’s table diagram, its glyphs, to understand the business logic that it represents. They’re familiar with a database’s Entity-Relationship Diagram (Database ERD). They consider themselves masters of creating a database ERD and using that to communicate to a DBA what sort of database to create and to give that to a .NET developer to tell what to build around.
With Microsoft Dynamics CRM, as with other Enterprise-class software applications and many ORM-driven applications, the underlying database schema isn’t the “language” the business is written in – that underlying table schema is the representation of the CRM framework’s data store. The CRM Database ERD doesn’t contain only the business’s logic but also CRM’s. If CRM’s power is enabling business processes, then when these types of analysts look at a reverse-engineered database ERD of CRM’s organization database for insight, they come away bewildered, not understanding how such a different schema could even manage to encapsulate their business, or worse, irritated that it’s so difficult to read the database table ERD and can’t see how CRM would make application development any faster than if they just created a custom ASP.NET application.
One of the major issues they have is with a classic CRM Design Pattern – the Denormalized Attribute Pattern. This pattern provides one way of solving the need to display information on an entity from one or many related entities – copying them to the main entity in question. From a database ERD standpoint, it appears that there’s duplication of information, a major red flag from a database design perspective. Even when not using this design pattern, looking directly at a CRM database with its two tables per entity on custom entities and its attributes for related “foreign keys” for N:1 and N:N relationships tend to confuse analysts who aren’t familiar with the CRM framework.
What’s the solution to satisfy an analyst who feels like they’ve lost their primary means of communicating business data storage and logic via a db ERD? A better “language” or glyph system would be UML, a notational representation of an object model, or a more abstract (actual) Entity-Relationship Diagram.
In some following posts, I’ll describe communicating business and technical analysis via UML and a custom CRM ERD language and how it relates a traditional database ERD, particularly one reverse-engineered from a CRM organization.
Claudio Ciborra's
The Labyrinths of Information relates these problems with constant continuous process improvement in the IT field:
- Excessive
idealism - encouraging disillusion, frustration, and cynicism
- Speed
and oblivion - "new" endlessly supplants the "incompletely implemented"
- Carbon copy projects - followed "disgruntingly" as bureaucratic
procedure
- Narcissism - "strong actors" become the main driving force,
creating a double bind: is this systemic rigor or forceful
leadership?
- Technical bias - creativity is evicted by the "concern for
the careful management of the means"
- Totalitarian bias - drastic
simplification of reality
- Ideological drift - preaching
encapsulates science
Claudio Ciborra claims that his research concludes that
"Painful and slow alignment of people, methods, and systems
is the stuff of which actual implementation processes are made."
One of the biggest gaps in knowledge and education out there with regards to agile methodologies, a process improvement framework, is the area of introducing agile methodologies successfully to an organization which is either mired in self-hate or has a culture of resistance to change. People claim successes with small teams, and that's not to be denied, but that's clearly the "happy path" where (smaller) companies realize they have to align with the improvement process and try something new or cease to exist or a pilot team of 5 or less can "show successes" and then evangelize to the larger organization. (I'd argue that if the larger organization is resistant, no matter how successful the smaller canary team is, they'll be ignored.)
Further, constantly looking for process improvements and grasping for leadership seem to have similar appearances of desperation.
In my experience with attempting to improve the processes at my work, I find these symptoms to be prevalent as well as the conclusion to be true: it's painful and slow and aligning people and methods is not easy.
Shut up. Be professional.
That's what I've learned from
So You Think You Can Dance. I'm not a dancer, but the meltdowns of the dancers with potentials have lent some insight into my daily life. I'm a software architect and manager (albeit without authority, but that's for another post) and have opinions about a whole lot of things. I'm pretty confident about what I know and about what I don't know and where I can improve. And I have opinions about other people, processes, and systems as well. All that's well and good, but in the thick of it, I have definite opinions on what needs to be done and will express that. Sometimes, though, it's best to keep quiet and let other people have their say and let ideas have some space to air. Humility and silence can be your friends.
Here's Lizz Plott's audition:
http://www.youtube.com/watch?v=JOZNsaXnLc8&feature=relatedOnce someone puts up her mouthing off and subsequent denial in the top 20, I'll put that up here.
I'm a
Certified ScrumMaster! Yay for agile, yay for me! Comparing this with the PMI training I took from CSU last year, there's no question that Rally's CSM training was far more applicable and useful in my day-to-day.
These people aren't kidding. It's cutting-edge use of a CRM engine, bleeding-edge, really.
Commentary by consultant Warren Suss questions
whether SOA is ready for prime time.
Some people think a technical interview is for asking tricky pseudo mathematical questions ("can you fit your hand under a string tied tight around the circumference of the world if I increased it by 5 inches?") or making a person draw UML on the whiteboard ("diagram how you'd make a class model for a '3d rectangle'").
It's not. It's not for softballs either, but my preferred method is to see their level of professional committment to and excitement about their craft. I can figure out how you think just by talking to you about something you like. Ref. Malcom Gladwell's Blink.
I ran across this the other day and one other data point justifies my interview style as fact.
From notgartner blog:
As with all discussion with technical interviewing it seems to come back to build lists of questions, but answering questions is not what a technical interview is about. I believe it is all about:
- Finding out if the candidate is passionate about technology.
- Finding out the depth of the candidate by asking questions.
For what it's worth, it's probably best to have an actual introverted ex-math team nerd (fie, scratch that, since that was me) in the room asking those other types of questions, since a 'get up on the board and write' scenario forces the candidate to expose their presentation and interaction skills. Yes, I know, I just undermined the 'technical' part by saying it was good for psychological assessments. Again.
Sue me.
Some things are just too surreal to not talk about - my 10 hour day yesterday broke down as follows:
- 2 hours - 2 interviews with extremely poor candidates
- 6 hours - 3 meetings (2, 1, and 3 hours, respectively) with almost the same people, about the same topic: how disfunctional the organization is and how we can attempt to align our actions
- 2 hours - This was at the beginning of the day where I actually got in a revision to a specification and deployed a latest code build, that might I add, no one looked at
Sure, Stephen Cohen's #1 thing for avoiding project failure is talking to each other and #2 thing is to have some sort of leadership, but we don't have any leadership, or that which we do have is inconsistent and more often than not, not empowered to Lead (with a capital "L"). If I were following his #3 thing, "Be honest with yourself and everyone else," I would quit.
There's a behavior pattern that's infectious in our organization - we've a core group of people that pay lip service to trusting other people, but continually undermine trust by blaming and and demanding that their irrelevant personal whims be met before they participate, simply to fall back into blaming mode.
Fiona Charles has an article about how to rescue "troubled projects," Pack Up Your Troubles , where she mentions some characteristics of a troubled project, such as
- Team abuse, working mindless overtime
- Lack of support of least empowered team members
- Dropping bombs on colleagues during meetings
I ended the day thinking I was watching a looping video reel of the "best of" trainwrecks. I didn't have lunch, so I was probably a bit on edge. In every one of the 3 meetings about how to get everyone on the same page to make the project proceed in a positive direction, the same few people lashed out and threw random people on our team under the bus for their personal disengagement problems. In one of the meetings, we had our off-site consultants on the phone and they were briefly exposed to some of this, but they didn't see that progress wasn't being made. In fact, we appeared to agree with the consultant's facilitator that talking was helping the process. It appeared that, although disgruntled, our team was grudgingly willing to attempt to align forces and make a positive impact.
The instant the conference call was over, the same few people proceded to throw them under the bus, on their hours, on their progress, and their individuals. With that feeding frenzy over, they went back to our own team. In one horribly childish (but consistantly typical) moment, there was screeching about the lack of a "system architecture" from a person who doesn't understand either word let alone those two together.
We've already had two of our most senior people leave and I think we're beyond talking about how this project is a death march. The project is a death march. Even if we manage to turn the heel-draggers and nay-sayers around, their attitudes have permeated and poisoned our team dynamic.
In November, when I went through a horrible process almost all by myself (one never goes through any painful process alone, there's always a bunch of people holding you down), I wrote a "post mortem" and lessons learned document and passed that around to the people whom I saw as stakeholders in the project. I've been working my way through the pages on retrospectives.com, in particular trying to internalize the retrospective prime directive.
Regardless of what we discover, we must understand and truly believe that everyone did the best job he or she could, given what was known at the time, his or her skills and abilities, the resources available, and the situation at hand.
It's a bit morbid of me to be reminiscing about a project before the time of death has been called, but watching this group flog, viciously, a gasping dying project-horse is close to the best I can do at the moment. It's the fantasy that the constant surrealism of my day forced me into. My initial reaction was that certain people, including myself, haven't done the best job they could've on this project, but then I realized that's not wholly true - while my heart may not have been completely in it all the time, it's more than clear that the best job that some people in particular could do was what they did, actually do - they sat back and sniped, bitched and looked smug continued to be resentful. For some people, that's their forte - those are their skills and abilities.
The Prime Directive and it's correllary the Second Directive seem like self-help for the software management set and, to some degree, it is. Circling back to the interviews during the day, the people we met with have a glaring lack of social skills which is par for the course in engineering-oriented people. It's worth repeating some basic interaction skillsets within the context of software management. I find the reading and the discussion around retrospectives with it's mediation-like angles to be a refreshing distraction from technical issues allowing people to focus on people-issues. (ie it is "pretend" to some degree, but it has purpose - to attempt to ignore the base hateful and spiteful nature of some people)
What's sad, though, is that most of the people in our "information technology" division are not software people, they're just people with poor social skills and the inability to cope with change except by considering it a threat. The common wisdom and foresight of the Prime Directive and Second Directive (and, for that matter, Dr. Phil and Oprah) are probably lost on these people made comfortable by years of patronage. Peter Principling someone is not the answer, either forced retirement or firing someone is. "Reupping" someone's "trust level" just to watch it be frittered away in a next meeting gets emotionally draining. At some point, someone has to realize the individuals that aren't engaged aren't because they're useless.
For the last few months, I've put aside my Java ways and have dove headfirst into the ever expanding vastness of the Microsoft pool. At first, it was dark and unfathomable, overly verbose documentation and what appeared to be poorly connected components, but now, I'm starting to understand the Way. In doing so, I'm sort of still amazed Microsoft can't get it together, what with all the things they have going for them.
I've been a long time fan of Google Docs and still use Google services on a regular basis, but Microsoft now has
Office Live (hello web based SharePoint Services) and a whole slew of "live" offerings (not even mentioning CRM live):
Windows Live Messenger - a major upgraded version (8.5) of msn messenger that has aspects of Skype or GTalk (audio, video), plus shared synchronizable folders between contacts- It's configurable, via a third party tool called A-Patch, a great way to remove ads, etc.
- A beta of 9.0 has been leaked, too, which has multi-location sign in, per contact sounds, SPIM filters and more
SkyDrive Live - a beta of a storage service (Amazon S3?)
SharedView - another beta that does person-to-person shared desktops or apps, like LiveMeeting or WebEx, but personal
What's strange to me is that I hadn't heard of these things before and that to me means a few things: they either aren't pushing the integration of all these things enough (and they all seem to have hooks into each other) and there's no vision for it or the net they've cast is woven so wide, they're not catching anything.
It's exciting that not only are web-based products getting mature, but the approach to using and developing for them is maturing as well.
I'm expecting great things from both Microsoft and Google over the next year.
The best commentary on government contracting agency transition can be summed up by the hypochonriac post-modern poet Thom York on his album
Eraser
, with the track,
Black Swan
. (
preview
)
rearranging auto-generated reverse-engineered uml class diagrams is architect sudoku.
A while back, I made some odd grumbles about Java vs. NET and, in doing some early spring cleaning of code, I realized I didn't really bother to explain.
I'd made a NASA WorldWind placename converter - it read in WorldWind placename files (which were generated by NET) and displayed them as text, as shown here:
Since then, the latest version of WorldWind, 1.4 (which is in beta right now) has switched to using WFS (streaming, from the network) for placename display instead of reading from local files, cutting down on 215 mb of installation size.
A year ago I was stabbing blindly at SWT and will probably update this code since I'm so smrater to JFace and/or an RCP editor, but if anyone wants to see the current code (and JUnit test case!), feel free to let me know.
The t-shirt of snake oil's is overshadowed by the description of it:
Web 2.0 Shirt
Fresh out of gamma and filled with Ajaxy goodness, our buzzword-compliant Web 2.0 Tee tells the world you’re ready to be acquired by Google. Or if need be, by Yahoo. Or AOL, if it comes to that. Nothing says, “I might be a billionaire tomorrow (so come home with me tonight)” like this funky, twin-sleeved wonder. Did you lose your shirt during Web 1.0? Wear this one, and pretend you have a future!
This is what I'm reading, watching, thinking and obsessing about now:
- The new season of Sleeper Cell and the debate about whether I should pay more for HD premium cable channels or rely on my uncle BT
- Enterprise Service Buses and the old EDI VAN model, mule and spring
- becoming less opaque about personal finances and how single-stock trades within an understood industry is more manageable than other random stocks outside a known sector and how that's still less useful to me (at this time) than just indexes and four-square mutual funds
- getting my Actiontec GT701W to restart itself by making it monitoring for an active connection (I don't know how to do this and would really, really like to)
- accumulating certificates to prove to myself that i care about software vs. reconciling how i think certificates are wholly worthless and have no tracking to actual ability
- getting more memory for my ailing desktops (see next)
-
unearthing a reasonable budget vs. whether i should fix my very cool tree lights by spending more money and the diminishing returns for the season
- when i'm going to get motivated to work on worldwind and uDig, if ever
It happened again, this time, closer - in my cube. This morning, a coworker I'll call "Eric" and I were watching the groundskeeper on his riding mower callously cut down mushrooms as he executed orderly, patterned grooming manoevers. "Eric" likes mushrooms so there was some discussion of whether a rescue op should be mounted or a protest flash mobbed.
Neither happened and, after an appropriate amount of hobnobbery regarding the oppression of mycelium, we went to our workspaces and began what passes for "work" around here.
There's another coworker who starts his workday at noon and when he arrives, he provides an opportunity for everyone to rehash their morning conversations about the night before or the weekend, on Mondays. He'll be called "Frank." I was in the middle of something, so "Frank" walks over to "Eric"'s cube and begins the process of re-recounterment. (That's French and is pronounced with the same expression that one has on their face while saying "second breakfast.")
"Eric" starts off with: "Saddam and I were watching the mushrooms..." and they both get quiet immediately, realizing the error. Hearing the silence, I back process the what's-just-been-said buffer (thanks, evolution!) and decide that it's time for lunch.
I will say this, though, in their defense: The longer I've been here in Colorado the more I'm treated like an insane dictator who appears to think that everything he says is right and denies the truth of reality.
When I was young, my father told me that people's names mattered. In particular, their names mattered to them. It's what they call themselves and that I should strive to get remember and get it right. It's a sign of respect. I'm not sure, but I think he got that from Dale Carnegie's How to Win Friends and Influence People. I'm horrible at remembering names, but I'm great at recognizing when people make mistakes in remembering someone's name, are outright getting it wrong because they don't care, or are making fun, harmlessly. This incident, and the previous example, wasn't malicious, but it's another example of how powerful a name and it's association really is. The realization I struggle with is that when people associate a thing with a name, the attributes of that thing are sublimated into that name. I wonder if I'm trying harder because of my nature or the passive background of distrust? And so on. Lunch was fun.
Matt Nolan posed a question to the panel that'd been hanging in the air since the first day of the Virtual Globes conference : What do data exchange formats look like for 3d globes? Hard core open source GIS users and standards advocates would immediately say OGC's GML. The popular wave, on the other hand, which has really enlightened people to the usefulness of geospatial data would back KML as a de facto universal standard.
My answer went something like this (although this entry's probably clearer): The analogy and history of HTML is probably quite instructive. Before HTML, prior to 1993/1994, there was this beautiful trainwreck called SGML that was used for document "exchange." HTML was widely adopted as a document markup language to the chagrin and much gnashing of teeth from the SGML crowd, but without HTML, there would've been no web or internet as the masses know it. Sorry, but gopher and wais do not Al Gore's internet make. Then, mutations happened.
Netscape came along and introduced blasphemy: the IMG tag. Where would the web be without images? That didn't come from TBL. Microsoft, not to be outdone, introduced their "innovation:" the blink tag. Some mutations are good for evolution, some lead down a null path. C'est la innovation.
By 1998, the SGML crowd had not gone quietly into that good night and fought back with XML. Back then, I recall the years 1993 - 1998 to be eons. Crazy things were happening then that started with the word "Dot" and eventually ended with the word "Boom." Looking at it, that's a scant 5 years. Five years later, SGML had gone more or less by the wayside and we had a robust HTML 4 standard and XML, daddy of WebServices, SOA, and AJAX.
Geospatial interop? My prediction is by 2007, KML will be even more different than the neatness that's in KML 2.0 and probably a GML profile, while GML, itself, will also be something different.
So, if you're new to GML 3.1.1, take my advice from my experience with SGML & HTML - Learning EBNF might be fun for parties, but ya' ain't gonna use it - learn KML inside and out and why it needs to grow.
My frustration with programming is most probably derived from the multitudes of ways to do things that are out there. It’s choice that’s stifling me. I know how to do "something" in Java, but it’s inefficient and takes too long. Converting a .NET generated binary data file from hex to float, for example: Big-endian or little-endian? How about making a UI for testing purposes? The same issue with Ruby is one line, but there’s no Ruby in my paid-work; only Java. Spin. Or, really, maybe I don’t know how to do things in Java. Again, spin.
Java’s Integer object has a MAX_VALUE on it that’s smaller than what the primitive int can hold. Also, long is 64 bits, and float’s 128, so, for my purposes of converting an unsigned int from hex to float, I can’t really use Long, either, but I will. Sorry extra Microsoft data. Or, in Java, does the data lose you?
The answer, of course, is that I should choose to just *know* the restrictions of each language and not be frustrated when the API documentation says "do this and things'll happen (caveat: read the design guidelines)." And that's the problem with software. No, I really, really shouldn't have to know the useless jank of languages.
make little-endian .NET bytes into big-endian ones, convert to hex string...
int i = new Long(Long.parseLong(hexString.toUpperCase(), 16)).intValue(); // yes, two Longs make an int
Ruby did it in one line, .NET has methods in their BinaryReader to generate primitives from source bytes with one call, and, sadly, Java's ByteArrayInputStream is inadequate.
But really, who cares, anyway?
cackling ladies
whisper and whoop, orgasm
slip into ipod bliss
old fat women pass
monochromatic two-piece
slow Bantha shuffle
She's on vacation tomorrow until the 16th and it couldn't've come sooner. Except, today, all day, she's been talking and talking and talking. I absolutely loathe listening to music when I work - I like it quiet - since I find it very distracting yet, today, I have earbuds firmly (not firmly enough, really) in my ears attempting to control the constant innundation of loggarhea coming from just over my cube wall. Yes, everyone knows that you're going on vacation, it's for your birthday, you think Oprah's great (dispite what she whispers), your husband coaches volleyball, you've been married 38 years, you love flowers, you love even more giving out advice, and you love even more than that if the advice is about flowers. Shut up, seriously. Work? Do some. If you're going on vacation tomorrow, do not use today as a little launching pad.
I hate working in a cubefarm.
“I've done all I can do, I'm disgusted” - Overheard comment on the state of refridgerator affairs. I'm wondering, who put her in charge of the refridgerator / break area of the 2nd floor of this building, in this state? Poor rest of [Unnamed Federal Agency] who have to deal with her e-mail zingers of frustration.
Yesterday, she went on a loudly whispered rant about how “power corrupts absolutely and all that” with regards to... ready?.. Oprah. Yes, that's right, Oprah: “She's dangerous.” This was a whispered conversation. Fear not, her conspiratorial blaspheme extendes to one Miss Marth Stewart as well. Brought up as an example of unChristian behavior, Stewart is a prime example of what happens vis a vis “Power“ and the subsequent fall. “Oprah, she's just dangerous.”
Someone do a preemptive HarpoLand Security alert before the e-mails start flying!
No, not Tom DeLay, someone much more ethically challenged. This e-mail came across the ether, striking fear into many a cubefarmer's heart:
--
Good afternoon,
who ever had sodas in the refrigerator on the second shelf, they exploded and made a mess. Please remove cans and clean the mess
thank you
--
We're DOOMED.
- “Spring Creek Nursery is having a sale, but they don't have unique plants. For that, you have to go to Fort Collins Nursery... or Bath, they have really unique plants.”
- Pasque flower- “I got two in pots ready to go, just gotta find a good site for it... it's a wildflower“
It's come to my attention that people might have gotten the wrong idea about my opinion of the KIA Sect'y's actual expertise. There's no doubt that she is a blooming cornucopia of gardening knowledge - even I'm continually floored by the depth and breadth of her advice and her ability to dispense it. When I say “continually,” I do mean in a constant and ongoing fashion. What's amazing about her passion is that it's here, at work, where it's expressed (and, assumedly, in the garden, as well) - It has made me reflect on the whole bygone era where your hobby was also your work. Here, for her, work is simply the downtime from her hobby where she gets to talk about said avocation. But, dear readers, worry not - gardening's not the only thing her loquaciousness encompasses.
At this very moment, she's talking about the gas prices, middle east and how Bush is finishing up all the dirty stuff that his dad did and doesn't care, because once he's gone “he's got his, he don't care!” Apparently, the big businesses are running the country and all our jobs are going elsewhere. Recall, she's firmly ensconsed in the .gov. No matter the topic, she's got an armchair / soapbox for it.
She's now transitioned on to how cold water breaks down oatmeal in a cup in the sink, since people keep coming by her desk to talk to her about the e-mail she sent out yesterday (which, in my opinion, is simply encouraging her self-righteous meddling): “Cold water! A few minutes, that's it! Breaks down oatmeal like that! Not hot water! Cold water!” She's a non-stop common sense elevator music soundtrack.
KIA Sect'y read off the e-mail she was sending to everyone to a passer by - not for approval, but ostensibly to hear herself say it in a derisive and patronizing tone she uses for, well, everything.
While getting a cup of coffee I noticed that there was 1 bowl in the sink, when I returned there were more dirth dishes growing like weeds. Please claim your dishes or they will be disposed by the COB. The sink is for washing dishes not storing, and please do not leave paper towls in the sink, we do not want to have the sink clogged.
Later, she comes walking into the area laughing with her peers about how she lit a fire under peoples ass and that dirty dishes were growing like weeds.
I work in a cube farm now, which I've tried to internalize and become one with. This is how most of the information workers work, so I should be able to master the art of cubefarming, right? The most unavoidable and annoying feature of this particular plot of cubes is the Know It All Secretary who stands watch at the entrance. On my first day, I was introduced to everyone but her (due to her absence at the time) and I've never bothered to talk to her since. We make eye contact some times, but no words. Over the months, I've grown to realize that she has an "expert" opinion on everything (she's always right, regardless of reality) and will literally talk anyones ear off if they let her. And they let her. Right next to my cube. Honestly, I don't know if she does any work. Granted, this is .gov, so I'm not sure that's a legitmate question to ask.
Today, though, in response to someone's question - "How was your weekend?" - she spent
46 minutes talking about gardening. Gardening is one of KIA Secty's favorite subjects. So that I don't go mad, I wrote down some of the points and topics she went off on:
- In response to a follow up question about what bushes to plant that would require minimal watering she said:
- hydrangia
- coldflower - very little water, orangy flowers
- redrocks
- butterfly milk - blue flowers, blooms like crazy, not tall
- golden rod
- poppies
- choriopsis
- she keeps a garden journal with the year she planted which flower, etc.
- squirrels will eat your bulbs, so plant deep, 16“ deep if possible
- daffodils
- tulips -2 types, darwin apple darts
- lillies - grow tall
- dahlias
- chicken grid + soil + bulb food = excellent drainage
- WalMart & Home Depot - plants for “bare roots“ techinique (an advanced technique)
- In response to another follow up: how to get rid of mosquitos
- mosquito plants
- citronella - for evenings
- plant during the day, they don't like the heat of day
- worms!
- making compost - 32 gal. trash cans, chopped up leaves, peat, manure
- formulas for compost in a book she claims that allow her to grow things in this environment that people say that can't be grown
- divides her garden into mini-gardens
- bleeding heart bushes - two types
- big ears - does not self-seed, beautiful flowers, expensive plant
- her intention is to become a Master Gardener with a specialty in lillies
- this weekend, she started on her miniature roses and planted tulips