Welcome to blog.chinoy.com Sign in | Join

Every so often, I get it in my teeny little head that I can write code.  This is probably due to the fact that I once, in ye olden times, wrote what then passed for as code.  So, my wooly brane says: Write some code!  These thoughts come to said head over the weekends and I figured I should at least write aboot what I've done this weekend so it doesn't, as so many others have, fall into disuse in a lonely directory of my harddrive.  At least the embarrassment of having shown it to the 2 people who read my blog (hi mom!) will motivate me to continue messing with it.

This weekend is "CRM Helper" - a windows forms application to help CRM Developers restore, import, publish, build, deploy, and load data into an organization so that they can develop and test.  A big fat caveat here is that this app draws heavily from the command-line only versions of these applications created by one Mr. Jack Hand.  So, with that said, you can take whatever this is with a grain of salt.

This was my design process: Wake up at 8:30a on Caturday, think & draw until about 9:30a, go hang out with WSJ on Kindle, Rocky Patel and Abigail, then come back and program for a few hours.  Sunday, repeat, with some variation.  This is what I ended up with:

Goals of this weekend's project were to:
  • Create a one-stop-shop app that could do all steps involved in a full restore to deploy to create a test/dev-ready organization
    • Restore a CRM Organization from a database backup
    • Import & Publish CRM Customizations
    • Build the CRM project, deploy to the server, register plugins
    • Load in Sample data
  • Refine each step into a more wizard-like process so that the intricacies of the various steps aren't a knowledge prerequisite
Future goals are to:
  • Have one big red button that does it all (chains all steps) for a non-developer audience
  • Use the Crm Deployment API to restore orgs
  • Allow remote usage in addition to on-server usage
  • Create libraries out of the command-line code
Parts that are working (but I'm not happy with) are:
  • Preferences - this is actually fairly good, but it's missing organization (and a "Microsoft" style), and persistence
  • Restore Database - calls an osql command as expected, could use some threading
  • Import & Publish - calls crmimportpublish.exe, and needs to be turned into a library and threaded properly; too many windows, can shorten
I always learn a whole lot more about .NET and winforms programming along the way, so my major challenge is to keep on focus and not spin off into how to best thread a process or best persist settings.  For me, once the core of the app is done (all features work, maybe not as expected, but work) the I can go back and refactor and optimize.  Refactoring and optimizing before the first cut of the full scope of the app has been done has, in my experience, tended to slow me down and discourage me from completing something, feeling like I have to go back and add in the latest thing I've learned.  Granted, that's not always completely true - if I find something compelling enough, I will refactor, it's just a risk to the first-cut scope being completed.

Next steps here are to make sure all parts work and then persist settings.  Major refactoring comes in right after that.
0 Comments
Added lightbox2 (finally).  Since I'm still using a fairly old edition of CommunityServer, I keep forgetting where various settings are.  I had to add css and js's for lightbox as well as modify the LayoutTemplate.ascx (in the Themes dir) and the communityserver.config (in the web root) to accommodate for the "rel" attribute in the anchor tag.  Without the setting to allow "rel" attributes in "a" elements, CS was stripping the necessary annotations for lightbox to function.

Completely boring non informative post.
0 Comments
0 Comments

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.

1 Comments
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.
1 Comments
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=related
Once someone puts up her mouthing off and subsequent denial in the top 20, I'll put that up here.
0 Comments
This is a sordid tale of my first bad technical experience with Dell.

I bought a refurbed XPS 420 Quad core for a VM server.  It arrived on Thursday, heavy, packed with stuff I didn't expect (earphones, chamois, lcd status-y deal, media card reader); then again, it's an XPS, as Jack pointed out (who got one, too).  We were Dell buddies, except I got shat upon.  Here's how it went:

Jack opens his, plays around with it, has some trepidations about Vista x32.  With the box able to handle 8gb of RAM and the general instability that I've had with Vista x32, he wanted x64.

I wait a day to open mine because So You Think You Can Dance becomes more important and pay the price.  It only reboots itself on first turn on.  I speak with Elizabeth (tech support, incident 19636455) who asks for my phone number then tells me to reseat the memory and then promptly gets cut off.  The XPS's indicators are nice - apart from the LCD (which seems to be useless at this stage) there are 4 blue leds placed vertically next to the LCD and they light up as the boot process occurs, doing a diagnostic check.  When I mentioned to Elizabeth that 1, 2, and 4 came on she knew it was a memory issue.  That seems handy.

That gets the machine to boot, but then it shuts down during Vista install.  She gets disconnected.

I speak with Davidson (tech support, incident 19636455) who asks for my phone number tells me to remove the memory and reseat it.  It boots, but only into Windows Error Recovery.  Trying to restore to factory Dell settings bombs and the computer doesn't even power on after a reboot.  I mention this. Then he gets disconnected. 

I speak with Amith (tech support, incident 19637936) who tells me to take out all the memory and the power cord hold the power button down for 10 seconds then restart.  That apparently resets the motherboard or discharges any held charges on it, who knows.  Promptly after asking how it's going, he gets disconnected.

I speak with Kiran (tech support, incident 19638312) who tells me that the diagnostics LEDs (1 2 3 ) indicate Hard cables not properly connected to System board.  He thinks the motherboard is fine and wants to disconnect the drives, the cpu, and various other items to determine what's bad about it.  By this time I'm really hating the whole process since my whole objective for buying a Dell was that I'd receive a machine that was well put together and quiet - having to reseat things, although trivial, is beyond my tolerances.  No. 

I'm on hold with customer support to return the thing.  Luckily, Dell allows a return within 21 days of invoice.
0 Comments
President Carter is again saying things that no one wants to hear - Israel's a human rights abuser (the irony) and they have nuclear weapons.  Never mind that he pointed out the first middle east oil crisis and people ignored that, more or less.  They'll do the same with these two nuggets of obvious.  All he has left to point out is that Israel's been destablizing the middle east since it got there, and he'll probably disappear from the press without even a *poof*.

Israel has '150 nuclear weapons', BBC
0 Comments
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.


0 Comments

More Vista woes. For a while now, I've been unable to launch apps from the Start menu's shortcuts. I can go into the All Programs and then nav to the app and launch it, but from the dynamic shortcuts immediately available from the start menu, no go.

After Googling a bit, I found out that some third party shell extensions can interfere with launching from the Start menu. Way annoying. After downloading ShellExView, I went, one-by-one, through the non-MS extensions and eventually came to the shell extension for Hex Editor 3. Disabling that returned Vista's start menu to functionality. Whee!

What a start to Caturday!

0 Comments

These people aren't kidding. It's cutting-edge use of a CRM engine, bleeding-edge, really.
0 Comments
Commentary by consultant Warren Suss questions whether SOA is ready for prime time.
0 Comments

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.

1 Comments

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.

 

0 Comments
I'm taking a stand right here and right now - if you exhibit prominant thibilant "s"'s you are either:
  • 13 years old
  • a girl
  • gay
.. or some combination of the above.
0 Comments