Toy Adobe AIR Apps, Social Media Gets a Kick

Outlook and the team responsible for said product, are really pushing hard for the 2010 release.  Of course, I can't talk about it, but yes, I have seen it and it looks & plays awesome!  However, social media got a slight extra kick from Microsoft recently with the Outlook Social Connect.  The Webtrends blog has an entry up Outlook's Social Connect:  Social isn't just AIR toys anymore! by Michelle Anderson.

This got me thinking about various efforts that I know are going on to bridge a lot of this social media deluge.  I get the feeling there are going to be some truly breathtaking applications hit the scene in the later part of the year or even early 2011.  My curiosity hangs around what will they bridge?  Outlook is a prime example of bridging data points that become truly useful information.  With all the addins that Outlook encompasses, one truly becomes a powerhouse power user with a tool like Outlook.

I have been working on some things myself, including proposing a new open source library to bring together services into a centralized library for ease of use.  Anyone got any ideas on that?  Interested?  Thoughts on which services should be brought together first?  The following are the services I am thinking about providing libraries for initially.

The reasoning behind these of course, is purely selfish.  I want to have easy access via an API to these services because I use them.  In addition, I figured there are others out there that may like a centralized library.  So toss me some ideas of other services, if anything, I can maybe create a starting point.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 2/19/2010 at 5:39 PM
Tags: , , ,
Categories: My Projects | Discussion Points or Ideas
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

My Agile Efforts

I recently watched a video presentation of Alistair Cockburn, who is a fairly major name in the Agile Development Community.  It pushed me to put this entry together for future discussion that I intend to kick off (at least on this blog & the few readers I have).  I have worked on the following Agile Projects:

  • My most recent project utilizing Agile Processes was at Webtrends for my stint in Engineering late 08 and earlier 09.  I worked on a team to build web services for Webtrends data access for customers.
    • The team consisted of three people, one being a team lead.  Our primary use of Agile was somewhat limited as it was a new process for the team.  We performed continuous builds via Team Foundation Server and test driven development when feasible.  We were limited in using TDD to some degree as a large part of the work was configuration based for server configuration and required a large degree of integration tests more than isolated unit tests.  In addition to TDD we also utilized user stories, burn down charts, and to some degree kanban style prioritization.  The project was a rocking success, and is now offered as a Webtrends offering and documented, discussed, blogged and continuously maintained and advanced.  Even though I am on a different team now working directly with customers to implement integrations with these REST based web services, the engineering team continues forward with more Agile practices being used daily, including paper prototyping, furthering the unit testing majority of the teams, and more.
  • After* and before* the Webtrends engagement I helped to initiate Agile in a development group of 4 people at Axiom Group (now Axiom EPM) to build a Excel UI to SQL Server for accounting data storage, manipulation, analysis, trending, and retrieval.  I helped get the group kick started, and the software that was released is now called Axiom Planning.
    • The team of 4, split into two pairs, and we did pairing & individual development.  Other agile software methods used were rapid learning, extensive test driven development, continuous integration (w/ TeamCity), unit tests in builds w/ good coverage (the logical kind), mocking (for databases), self organizing team, paper prototyping, and direct daily communication with customer representatives.  We also as pairs and as a team used refactoring heavily.  In addition heavy utilization of design patterns and domain driven-design was used in close collaboration with the customer.
  • In 06 & 07' I worked with Centerstance Consulting on a project which started Waterfall and moved to Agile during the course of the engagement.  We started off a team of 5 developers, grew to about 16 at one point, and shrunk down toward the completion of the overarching architectural design to about 8-12 again.
    • The teams ranged from 4-5 people per team with a team lead, to two teams with two sub-teams split with a team lead each doing their own respective stand ups (SCRUM style), a continuous integration was setup, unit & integration testing was eventually put into place across a wide spectrum of the code base.  Mocking, faking where appropriate, and general unit testing took place, with business analysts acting as customers.
  • For Ghallt Enterprises I served as CTO with a business partner, leading efforts among remote teams, utilizing Agile practices (yeah, remotely, I know, it seems crazy) to develop social media software.  Methods included continuous integration, build management, pair development, code review & refactoring on a regular basis, and other practices.  Even though this is a company that a friend and I started, it served to provide a catalyst for me to push forward extensively into Agile Processes.  The level of progress, quality of code, and other characteristics that are inherent to effective Agile Processes were of a level that left no reason to endeavor toward traditional style project planning or Waterfall style approaches.

I?ve worked with others to mentor and experiment with pair development, continuous integration, unit testing, and other processes to enhance and streamline the software development life cycle.

* I write after and before Webtrends because I left Webtrends in 08' to work the Axiom effort, upon kicking that off, I then headed back to Webtrends to work on the then new Web Services with REST Architecture Project.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

ASP.NET MVC Story Application

NOTE:  This is not forgoing my other project:  Cockatoo & HighBall.

The story starts like this.  I've been using some, what will go unnamed, Agile Project Management Software that I just wasn't digging.  It was too restrictive and focused on the tool over the developers.  Several times the tool literally got in the way of development and forward progress.  Whenever this happens one should see a MASSIVE RED FLAG that the core manifesto concepts are broken.  When those are broken in such a brash and obvious way then the project is in threat of serious risks.  So I set out to fix this with simpler, more versatile, easy to use software that could replace the need for this tool.

I started out writing this software with the standard user story concept, to keep track of user stories.  That sounds kind of odd that I'm creating user stories to describe an app that will track user stories as a story.

:o  wowzerz!

So here we go.  Here are the initial user stories for minimally functional and working software.

  1. A user can write a story.
  2. A user can read the stories that have been written.
  3. A user can change a story.
  4. A user can throw away a story.

Those simple stories make sense to me.  With that I?ve started and ensuing entries will be forth coming.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: adron
Posted on: 4/25/2009 at 4:42 PM
Tags: , ,
Categories: My Projects | MyStoryList
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Test Driven Development Built Name Generator Part 2

Alright, time to tear into getting that name data imported into the database.  To review the previous entry check out part 1.

Next I set the Windows App Project I added in part 1 to be the startup project.  After that I created a screen that looks like the image below (click to see larger image).

Also add an open file dialog control.  Next double click on the Process button and add the following code.  Make sure not to miss the instantiation of the names list property in the initialization.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.IO;
   4:  using System.Text.RegularExpressions;
   5:  using System.Windows.Forms;
   6:   
   7:  namespace TextFileImporter
   8:  {
   9:      public partial class Form1 : Form
  10:      {
  11:          public Form1()
  12:          {
  13:              InitializeComponent();
  14:              Names = new List<string>();
  15:          }
  16:   
  17:          private List<string> Names { get; set; }
  18:   
  19:          private void buttonProcessFile_Click(object sender, EventArgs e)
  20:          {
  21:              if (openFile.ShowDialog() == DialogResult.OK)
  22:              {
  23:                  if (File.Exists(openFile.FileName))
  24:                  {
  25:                      TextReader tr = new StreamReader(openFile.FileName);
  26:                      textProcessedFile.Text = tr.ReadToEnd();
  27:                      tr.Close();
  28:                      // Cleanup text.
  29:                      textProcessedFile.Text = ProcessName(textProcessedFile.Text);
  30:                  }
  31:                  else
  32:                  {
  33:                      MessageBox.Show("Select a file that exists.", "File doesn't exist.", MessageBoxButtons.OK,
  34:                                      MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
  35:                  }
  36:              }
  37:          }
  38:   
  39:          private string ProcessName(string textBody)
  40:          {
  41:              var regex = new Regex("[^A-Z']+");
  42:              textBody = regex.Replace(textBody, " ");
  43:   
  44:              foreach (var s in textBody.Split(Convert.ToChar(" ")))
  45:              {
  46:                  Names.Add(s);
  47:              }
  48:   
  49:              return textBody;
  50:          }
  51:      }
  52:  }

With the beauty of those regular expressions the files will parse appropriately in about 1-5 seconds.  Next we need a way to write this data into the database.  I did this by adding a Class Project named Generator.Core and added a folder called Model.

In the Model Directory I added a new ADO.NET Entity Framework Model.  The images below show my steps through the wizard.

At the end I also deleted the Class1.cs file from the project.

I then added a reference to the Generator.Core Project in the TextFileImporter Application Project.  Next add an application configuration file to the TextFileImporter Project with the following configuration section.

   1:  <?xml version="1.0" encoding="utf-8"?>
   2:  <configuration>
   3:    <connectionStrings>
   4:      <add name="GeneratorEntities" connectionString="metadata=res://*/Model.Data.csdl|res://*/Model.Data.ssdl|res://*/Model.Data.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\carriage;Initial Catalog=Generator;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
   5:    </connectionStrings>
   6:  </configuration>

At the last minute, and to make sure anyone following along with these instructions is really paying attention, I made a minor change to the database table.  I changed the column Type to a data type of nvarchar(50).  I then updated the Data.edmx file in the Generator.Core Project.  To do this open up the file and right click anywhere in the white space around the model.  Then click on Update Model from Database....  Now, as things go, the stupid model didn't update for me.  This is something that seems to occur very frequetly with the ADO.NET Entity Framework Model Files.  Since it didn't update I had to manually right click on the Type Property and then set the Type of the Type (yes I know, redundant naming) to String.

So if anyone from Microsoft is reading this, the entity model files are STILL broken for some reason.  It's been about 6 months since the entity framework and such where in beta and they still behave in many ways like they're in beta, please fix this.  k thx bye.

Next I double clicked the Save (buttonSaveToDb) button and entered the following code to write the file data into the database.

   1:  private void buttonSaveToDb_Click(object sender, EventArgs e)
   2:  {
   3:      if (comboNameType.Text == string.Empty)
   4:      {
   5:          MessageBox.Show("Select a type of name.", "Select Name", MessageBoxButtons.OK,
   6:                          MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
   7:      }
   8:      else
   9:      {
  10:          // TODO Write to DB.
  11:          var generatorEntities = new GeneratorEntities();
  12:          foreach (var name in Names)
  13:          {
  14:              var newName =
  15:                  new Names
  16:                      {
  17:                          NameId = Guid.NewGuid(),
  18:                          Name = name,
  19:                          Type = comboNameType.Text
  20:                      };
  21:              generatorEntities.AddToNames(newName);
  22:          }
  23:          generatorEntities.SaveChanges(true);
  24:      }
  25:  }

Then a quick reference and that finishes up the TextFileImporter Project.

   1:  using Generator.Core.Model;

Now mind you, I broke TDD principles because this app was merely a utility, would be used a few times, and above all breaks isolation and crosses boundaries.  A good rule is to not write tests for a project like this.  Unless you feel it absolutely necessary then I wouldn't even think of it.

Now run the application and open and import each of the three files into the database.  This will give us the data we need for the next step of our random name generator.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: adron
Posted on: 2/5/2009 at 7:18 AM
Tags: , ,
Categories: How-To, Samples, and Such | My Projects
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (3) | Post RSSRSS comment feed

Test Driven Development Built Name Generator Part 1

This is going to be a multi-part series on building a straight forward database driven name generator.  I’ve tried the random name generator thing and it generally isn’t so great.  I’d tried in the past this idea with the database table of census names and it works great.  So this is part 1.  I’ll post these entries consecutively over the next few days so stay tuned.

First I started a new clean solution and added a test project.  I figured I wasn’t even going to add the actual assembly project yet, just jump right in and start writing a test, get red, and go to the next step.

I added a test file and wrote the following test.

   1:  [TestMethod]
   2:  public void VerifyFullNameObjectInstantiatesWithNames()
   3:  {
   4:      FullName fullName = new FullName();
   5:      Assert.IsTrue(fullName.FirstName.Length == 0);
   6:      Assert.IsTrue(fullName.LastName.Length == 0);
   7:  }

After that I used ReSharper Alt+Enter Shortcut plus a little additional keying in myself to flesh out the skeletal class and get a green light.  I ended up with the class below.

   1:  public class FullName
   2:  {
   3:      public string FirstName { get; set; }
   4:      public string LastName { get; set; }
   5:  }

Next I wanted to enforce a contract so I could create a factory to build my FullName objects with.  With that change the interface and class I had now looked like this.

   1:  public interface IFullName
   2:  {
   3:      string FirstName { get; set; }
   4:      string LastName { get; set; }
   5:  }
   6:   
   7:  public class FullName : IFullName
   8:  {
   9:      public FullName()
  10:      {
  11:          FirstName = string.Empty;
  12:          LastName = string.Empty;
  13:      }
  14:   
  15:      public string FirstName { get; set; }
  16:      public string LastName { get; set; }
  17:  }

That gave me a green light on my first test.  After that I built a test for the factory that could build the names.

   1:  [TestMethod]
   2:  public void VerifyFullNameObjectReturnsFromFactory()
   3:  {
   4:      IFullName name = NameFactory.Build();
   5:      Assert.IsTrue(name.FirstName.Length > 0);
   6:      Assert.IsTrue(name.LastName.Length > 0);
   7:  }

I then took the NameFactory object and fleshed it out so I could build, run the test, and get green lighted.  Below is the NameFactory Class.

   1:  public class NameFactory
   2:  {   
   3:      public static IFullName Build()
   4:      {
   5:          return new FullName { FirstName = "TestFirst", LastName = "TestLast" };
   6:      }
   7:  }

So now I have a green light on the name factory.  But even though I have a green light, it doesn’t exactly do what it needs to do, which is get some good unique and random names.  Next step, write a test for getting back some random names.

   1:  [TestMethod]
   2:  public void VerifyFullNameIsRandom()
   3:  {
   4:      IFullName nameOne = NameFactory.Build();
   5:      IFullName nameTwo = NameFactory.Build();
   6:   
   7:      Assert.AreNotEqual(nameOne.FirstName, nameTwo.FirstName);
   8:      Assert.AreNotEqual(nameOne.LastName, nameTwo.LastName);
   9:  }

After creating this test, I have to dive a little deeper.  First I grabbed the census names for first and last names off of the Internet.  After that I added two projects to my overall Visual Studio Solution.  One is a database project and one is Windows App to use to manipulate the text file data and get it into our database.

Next I created the Generator Database a table to store the names that are stored in the files.

The SQL create script is shown below.

   1:  IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Names]') AND type in (N'U'))
   2:  BEGIN
   3:  CREATE TABLE [dbo].[Names](
   4:      [NameId] [uniqueidentifier] NOT NULL,
   5:      [Name] [nvarchar](50) NOT NULL,
   6:      [Type] [smallint] NOT NULL,
   7:   CONSTRAINT [PK_Names] PRIMARY KEY CLUSTERED 
   8:  (
   9:      [NameId] ASC
  10:  )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  11:  ) ON [PRIMARY]
  12:  END

I also added an extended property to outline how I intended to use the “Type” column.

   1:  IF NOT EXISTS (SELECT * FROM ::fn_listextendedproperty(N'MS_Description' , N'SCHEMA',N'dbo', N'TABLE',N'Names', N'COLUMN',N'Type'))
   2:  EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'1 = Male, 2 = Female, 3 = Last Name' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Names', @level2type=N'COLUMN',@level2name=N'Type'

My intention is for the “Type” column to have a 1 for the male first name, a 2 for a female first name, and a 3 for the last name.

I’ve covered creating the initial tests and objects to use.  Also the database table that is needed and the create scripts have been provided.  Next steps are to build a quick app to get the names imported into the database table.  Stay tuned and that will be posted tomorrow.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: adron
Posted on: 2/4/2009 at 7:20 AM
Tags: , , , , ,
Categories: How-To, Samples, and Such | Design Patterns | My Projects
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (2) | Post RSSRSS comment feed

TFS Fight and Some TDD

I started working on a new project a few days ago that has been dubbed Cockatoo, which isn?t published yet, but will be eventually on Codeplex, by the team I'm working with.  For those that are curious who these 3L173 d3\/3L0P3r$ are I'll run through the names;  Jason Mauer, Josh Wisely, Erik Mork, Kelly White, and...  we might have more.  Want to join the team?  Send me a message at adronhall at symbol gmail [.] com...  If you?re interested in jumping into the project or even starting a new project, let me know.

?that is all.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: adron
Posted on: 1/30/2009 at 10:33 PM
Tags: , , , , ,
Categories: PDXUX.NET | My Projects
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

PDXUX.NET

Attended PDXUX.NET tonight.  The idea behind the group is primarily UX topics, generally for developers, based primarily but not limited to .NET Technologies.  We broke out into teams tonight and will be working on 2 application paths.  I?m looking forward to it, got a coworker and a few other people I know working on the projects.

So stay tuned, and if you want to jump aboard and get in on the project message me.  We?ll be meeting as a team (all 4-5 of us) to get this project going, and I don?t see any reason why others couldn?t join the effort.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: adron
Posted on: 1/20/2009 at 9:58 PM
Tags: , ,
Categories: My Projects | PDXUX.NET
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (2) | Post RSSRSS comment feed

WCF, Certificate Issues, and Stackoverflow

I've been working on getting certificates setup for development with the WCF Web Services I'm building for the High Ball Project.  On a few topics I'm just completely new, like messing with the Certificates, X.509 and SSL and such.  I'm getting there, but road blocks are stopping me every once in a while.  One of my recent issues was how to view the values that the certificate has.  I searched and searched, for some reason I couldn't find something on MSDN or via Google that would do what I wanted it to do.  In addition to that, the reason I was looking for this application to begin with, I was having issues with getting my web.config settings correct for finding the local certificate I had created with makecert.exe.

Stack Overflow!

That's when it clicked in my head, hey, I should try this stackoverflow site out!  So I shot over there and posed these two questions and within less than a 24 hr period on the WEEKEND, I got some solid answers.  I gotta say the guys over at stackoverflow are onto something here!

My first question, "Cannot find the X.509 Certificate using the following search criteria:..." and second question "Tool for Viewing X.509 Certificates?" have two great answers.  So check em' out, and if you aren't signed up with an OpenID get one and go log into the site!  It rocks.  In addition, for you dot netters out there like me, know that the site is built on ASP.NET MVC!  It's solid and FAST!

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 10/19/2008 at 11:50 AM
Tags: , , , ,
Categories: Highball | My Projects | Website and Application Write-Ups
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Twitter, .NET, C#, and LINQ

Codeplex and Google Code I've found has numerous projects pertaining to Twitter, my new found obsession these days.  Not sure if it will be an ongoing obsession, but having tools, code, and frameworks to work with it definitely help the prospect.

Some of the projects that I've found useful include;

  • LINQ to Twitter - What more could one want in a .NET world than a LINQ provider!  ROCKZ!
  • Witty - A Twitter client made with WPF.  Looks sweet, haven't played with it enough to know if it is truly awesomeness or not.
  • GEO Twitter - I've been wanting to get into map & GIS related matters more.  This should enable just that.  I'll be looking into this more over the coming weeks.

Over the next few months, along with the other fifty zillion projects I'm always working on, I think I'll be playing with ways to filter, increase readability, and overall make twitter a bit more useful.  In addition that that I'd like to figure out a way to add twitter feeds and RSS into a useful desktop or web based application that would allow me to keep them all in one place.  Yahoo Pipes is a start, but there is a still a bit lacking, and if anything it needs a nice WPF interface for Windows Based PCs.  If anyone is interested in teaming up on some of these efforts, let me know.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 10/13/2008 at 11:56 AM
Tags: , , , , , , , ,
Categories: Just Stuff | My Projects
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed

Solution Layout for High Ball

I added a graphic of the solution layout of the High Ball Application with some basic descriptions of the various sections.  I do want to however reduce the number of projects inside the solution, but for now I've left it in the very separated out way I initially created the solution.

My next idea is to get some initial views done to use as a starting point for functionality.  I'd like to complete the security administration section soon, so the other parts of the application can be further fleshed out.  I will admit though, I'm not 100% sure how I want to setup the security, and am currently brain storming the idea.  If anyone would like to jump in on that lemme know.

Digg It!DZone It!StumbleUponTechnoratiRedditDel.icio.usNewsVineFurlBlinkList

Posted by: Adron
Posted on: 9/21/2008 at 7:34 PM
Tags: , , , ,
Categories: My Projects | Transit Engine | Highball
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comments (0) | Post RSSRSS comment feed