Thursday, November 08, 2007

Synchronizing AD with TFS

Just today I had the extremely frustrating task of forcing a synchronization between AD and TFS. The background of the problem was the inclusion of a user in an Active Directory group. The AD group was already associated with a TFS permission group.

After looking around on the net for a while, I came across this forum thread:
http://forums.microsoft.com/MSDN/showpost.aspx?postid=1403304&siteid=1

I invoked the web service to return the last time the ACL synchronization occurred and was a bit surprised to see that it was actually a lot longer than 1 hour ago. From what I read, if the web.config setting was not explicitly declared, it would default to 1 hour.

What I had to do was create a new TFS group, associated an Active Directory group with it, then delete the TFS group.

It's not a very elegant solution but there are many times where you must force the synchronization due to support requirements. I'm not impressed that no TFS web service exists to manually invoke the synchronization.

Sunday, November 04, 2007

TFS Custom FTP Task to Mainframe

Recently, I've had the opportunity to build a custom task to FTP code from TFS to a mainframe environment. It was quite an adventure but ultimately rewarding when it finally succeeded. I adapted code that someone had kindly written to wrap the WinInet.dll and used it to FTP code to a mainframe running ZOS. I tested the custom FTP task on my FTP server in the windows environment and it worked like a charm.



All that remained was adapting it to the mainframe, or so I thought. My first few attempts were met with dismal failure. The error that got reported was: The server has returned an extended error. 200 Representation type is Ascii NonPrint.



After doing some research, I uncovered the fact that what we take as folders and files are instead known as datasets and members on the mainframe. Mainframe datasets are dot-separated as opposed to slash-separated in the Windows environment. Thus, a dataset would look like this:

MCP.STAGE1.COBOL



The fully qualified dataset and member would then look like this:

MCP.STAGE1.COBOL(MyFile)



It took me a while to understand that the file name could not accept an extension. Thus, I had to write a parsing algorithm to strip it out.



Once that was done, everything worked until the point where it failed because the dataset ran out of space. Another quirk I had to learn about was that the dataset had an allocated amount of storage. Once it ran out, it could not expand further. On another side note, another quirk I learned about datasets was that when they were not used for some time, they got archived to tape. This took a while to track down but we finally understood after one of the mainframe experts explained why the first time things ran, it failed and always succeeded on the second attempt.



Moral of the story: respect mainframes and be flexible with your mindset. Don't automatically treat everything in the same way as Windows or the more recent flavours or Unix/Linux.

Tuesday, October 23, 2007

Team Foundation Server Role

Recently, I've been assigned to the Australian Tax Office as a Team Foundation Server administrator. It took quite a bit of adjustment and a whole lot of learning to adjust to this new role. From someone who routinely broke the build when I checked my code in, I became responsible for the code of a few hundred developers.

Software Configuration Management was never a field I dreamt of entering to be honest. I was always more focused on integration, collaboration and the user experience. As a result, I dedicated my time to learning how to use the Microsoft Smart Client Software Factory. I was very much inspired by my ex-career manager, Michael Daniels, who I hold in high esteem.

When I was first posted to the ATO, I spent a lot of time learning as much as I could about TFS and MSBuild (which is the foundation of TFS build types). Later on, I experimented with creating my own custom build tasks and learning how to integrate them into the builds.

After that transition period, I was straightaway thrust into work and had to implement an FTP task to a mainframe. The code for FTP was thankfully written by one of the architects at the ATO and he saved me the long road of having to experiment with API calls to implement FTPing up to the mainframe. There are some quirks around how the mainframe's file structure is handled and I won't go into the details.

After getting the FTP task to work, I recently adapted the build types to build both by latest and by label in a flexible and efficient fashion. My predecessor implemented a few custom Get tasks that were slow and took ages to process. The result was a timeout during the builds. The performance gain with the new build types was phenomenal! A build that used to take over an hour would take just 5 minutes. I'm still testing to see if this build type satisfies all the requirements but I'm fairly optimistic.

I'm currently enjoying my role as a TFS admin. I wouldn't thought I would ever say this but the learning experience and the responsibility satisfies me as a professional and it's a role I'd like to continue in at least in the near future.

After reading numerous blogs from experienced TFS experts such as Grant Holliday, Nagaraju Palla and from my colleague, Andrew Whitten, I discovered a community that is free with knowledge and helpful beyond expectation.

Here's to the future!

Sunday, September 17, 2006

Guild progression

After a series of disappointments, I think the guild is finally starting to progress in Zul'Gurub. Yesterday, we took down 3 bosses without too much difficulty and almost had the Bloodlord down. Venoxis was a piece of cake with no one dying.

Our strategy:
I tanked him while everyone took down the adds.
Range DPS on him until he was down to 50%
Once he changed form, I shieldwalled, popped some warlock candy and started moving around the fire.
After some time, he died. Easy as.


We also killed Jek'lik, though we had a few problems.
First time, we wiped because we allowed her to get off a heal.
Second time, about 8 people died from fire bombs but we managed to kill her.

Our strategy:
I tanked her out in the open.
The OT stayed nearest to absorb her charge.
Other warriors stayed with the casters to gather the bats together to be aoe'ed.
When the bats came, the mages frost novaed them, then aoe'ed them.
At 50% Jek'lik changes to a humanoid.
At those times, I just moved her about to avoid fire bombs getting dropped on us. The rogues , shaman and mages were then responsible for interrupting her spell casts.

Finally, we killed Gahz'ranka, the fish boss. He wasn't too hard, actually and just needed a warrior to be on him at all times as his knockback tosses you up quite a bit and takes quite a bit of health off you.

We also gave Mandokir a great attempt. We tried him about 3 or 4 times and got him down to 8%. We tried several strategies such as killing the raptor first and then off-tanking it and bringing the bloodlord down as soon as possible. It was quite successful except that the off-tank died, allowing the raptor to run around unchecked.

I'm confident that Mandokir will soon be taken down as well. Good things are on the horizon.

Monday, September 04, 2006

Platinum Storm On

We came, we saw, we conquered. Enough said.

It was a great game where we all had a lot of fun. Rob was out this week so Marc deputised for him while Veuga also filled in to cover for Christian. The first two sets saw me setting all around and it sure got tiring. Marc was playing opposite while Sym and Veuga were in charge of running in the middle.

We settled down pretty quickly and did pretty well. The passing was good while the setting was good enough to put in attacking hits. The middles got quite a few hits this time round and I think Veuga and Sym were happy chappies.

Fletch was a monster hitting outside and he definitely won us quite a few points while Chris was consistently putting the ball over the net. Midway during the first set, we got sloppy and allowed our opposition to get back into the game. At crunch time, though, we got things right and good hitting from Marc, Fletch and Veuga saw us safely take the match.

During the second set, we were all relaxed and played some great volleyball. Again, Fletch was unstoppable and I got in a few good dumps to keep the opposition on their toes. We ran a few good quicks and we easily won the match.

The final set was a formality and we just enjoyed ourselves. We ended up with a draw for that set but no one cared as we all had lots of fun.

So far, this season has been my most enjoyable by far. The team is great and we're playing some great volleyball while having fun and relaxing. I only hope that we'll continue having fun and winning when we move up to div 1.

Wednesday, August 23, 2006

Patch 1.12 Love

I love this new patch. I can finally go to Arathi Basin as and when I like and not have to worry so much about being outnumbered. This also means that those like me which are playing on a US server at an Oceanic time can finally farm the honour and rep without having to wait till the weekends.

Last night was simply fantastic. I won a few Arathi Basin matches and an Alterac Valley one. I'm really aiming to get the Defiler's set in AB. This is finally going to be possible on a server which just doesn't do enough AB.

Last night wasa good night for Shye, too. He finally got his Devout Crown which completes his set and he can go on to upgrade all the pieces. I'm STILL trying to get my valor helm after more than 40 trips to Scholomance. It just really peeves me that some guys can get it on their first go.

The guild ventures into MC for the second time this weekend and I'm keen to see what drops will be available this time.

Wednesday, August 16, 2006

Tier 0.5 Creeps Closer to the End

Yesterday night was a long and tedious session of farming the Ogre Warbeads for the Tier 0.5 quest. I finally finished the quest along with Chamankaga and Dethwytch. Defyer was kind enough to stay with us to finish the quest. Shye still has 3 or 4 beads to go so it looks as if we might do a quick farming run tonight to finish off that quest.

The next parts involve killing some ghosts in DM West and then the hard part with taking down a PVP group of NPCs in BRD.

My only regret last night was not being able to go to DM North with Linkinx. The guy was really keen on leading a tribute run and we initially were going to Scholomance until the group reversed its decision. I'll try to make it up to Link soon and go with him in the capacity as either tank or healer.