|
 Thursday, February 28, 2008

Free Conferencing Utilities

confCallPhone
Photo By: just_skizo

 

Being a consultant has its challenges and conference calls can be one of them. If your company does not offer a conference line for you, or perhaps you're a consultant or freelancer yourself, hosting conference calls can be a challenge and costly if you're not aware of how long the call is going to be.

Thankfully there are other options. Below is a small list of some of the free conferencing utilities available on the net. Each offer their own set of unique options.

Update 2008-02-29: Rondee's founder contacted me and wanted everyone to know:

I'll be happy to provide a demo of Rondee to any of your readers.  They can reach me at andre [at] rondeeinc [dot] com.

Andre D. Vanier
Founder, Rondee

Thanks Andre!

 

Free Services

  • Rondee.com
    • Free Services Offered:
      • Scheduled Call: Conferences are scheduled ahead of time.
        • Web Based Caller Management (viewable to all)
        • Automated Email Invitations
        • Organizer can opt to record the call and all attendee's can download later - oh man, this would be so helpful in those situations where this happens: Client: "I never said that." You: "Um.. yes you did, I have it recorded." OH SNAP! I WIN!
  • FreeConference.com
    • Free Services Offered:
      • Web-Scheduled - Conferences are scheduled ahead of time.
        • Maximum Callers: 150
        • Max Length of call: 4 hours
        • Automated Email Invitations
        • Outlook/Lotus calendaring
      • Reservationless Standard - You get a phone number to call with an access code. As many people as you want can call in and conference.
        • Maximum callers: 150
        • Max Length of call: 3 hours
  • FreeConferenceCall.com
    • Free Services Offered
      • No need to schedule ahead of time.
      • Available 24/7
      • Up to 96 callers
      • Up to 6 hours for a conference call
      • Free recording
        • Distribute Via RSS/Podcast
  • FreeAudioConferencing.com
    • Free Services Offered
      • 100 Callers per conference
      • Available 24/7
      • No need to schedule ahead of time
  • Freenet.com
    • Free Services offered
      • Available 24/7
      • 100 callers per conference
      • 3 Hour conference length
      • Toll Free Dial in number
  • InstantConference.com
    • Free Services Offered
      • Dedicated dial-in number and
        access codes; never expires
      • Additional access codes available
      • Free recording
      • No reservations needed
      • Up to 150 callers on each call
      • Post call and monthly reports
  • Foonz.com (Group calling - See site for more info)
    • Free Services Offered
      • Instant or scheduled calls
      • Leave group messages
  • The Basement Ventures
    • Free Services Offered
      • 250 callers per conference
      • Reservation-less, on demand calling
      • MP3 Call recording

Then there's Mobivox. Its not really conferencing but it does allow you to call anyone in the world, FOR FREE. The only thing is, both users (caller and and receiver) must be a member of Mobivox. Not a bad deal if you ask me. You can call members via Land Lines and mobile phones. There are restrictions to locations, so check out the free section of the site here.

Hopefully this helps some of you out there who are in a bind for conference lines. :)

#    Comments [4] |
 Monday, February 25, 2008

Creating .NET Event Sources with PowerShell

I use Enterprise Library for Logging and I use different event sources for each app. I've noticed that creating event sources is kind of a pain sometimes. Either you have to write an app that does it for you, or you have to write some logic in your code that checks for the event source. Either way, I think that's too bloated for in-house software. Now for software that has to be deployed, then ok, no problem I see the use. But we're talking bout non-released code here. Code that is used on an internal site or externally facing site.

Or you can use PowerShell, simple as pie. :)

This one liner will check for the Event Source and if it does not exist, it will create it for you. Real easy. Gotta love PowerShell.

 

if (![System.Diagnostics.EventLog]::SourceExists("MySourceName")) { [System.Diagnostics.EventLog]::CreateEventSource("MySourceName", "Application") }

Now if we write an event to the event log, it will show up because the source now exists. :)

You HAVE TO love one liners that can replace entire applications. :) Albeit, not a big app, but an app, none the less.

#    Comments [0] |
 Thursday, February 21, 2008

Notepad? THE PowerShell IDE? Please, Save Me - Give Me Some IntelliSense

As of lately I've been tasked with more and more work with process automation. As usual, automation is usually found to be best suited for a scripting language and therefore I've been working with PowerShell a lot lately.

I'll admit - I have a problem with scripting languages the IDE's for Scripting Languages. What's the problem? The problem is that the IDE is usually Notepad. Don't get me wrong, I LOVE Notepad, so much that I use Notepad++ as my primary text editor. Adding it to the context menu has been one of the productivity boosters in my day to day work.

The real issue comes down to productivity. I don't write a .NET Enterprise app in Notepad, I use Visual Studio. Could I? Yes. I don't write a Professional Letter in Notepad, I do it in Word. Could I write it in Notepad? Yes. This list could go on and on. I could use MS Paint to create a nice 3D Image, but I wont. But why? Simple... its not productive to. Its not productive to write letters, enterprise applications, or create a billion dollar proposal in Notepad.

Millions of dollars have been put into productivity tools. The industry has put a bounty on productivity so high that entire companies are based around developer productivity. Tools and libraries such as ReSharper, DevExpress, Telerik, Infragistics, etc. help forge the way for developers to increase productivity in their day to day work. In this instance I'm talking about Windows development, there are MANY other companies that create productivity tools for many different industries, such as - graphic design, engineering, medial, etc. The point here is that time is money.

Tools, are exactly that - tools. We've come from the stone age where a wheel was an innovational tool to help move items easier. So please, this is 2008 , and in computer years that puts Notepad into the stone age. So, please don't code in Notepad if you don't have to. Using Notepad as a tool to edit files on the fly is priceless, but using the tool as a primary editor, is, well... ludicrous and crazy. There are many IDE's for almost any environment out there. As new languages are developed, new IDE's soon follow. Unfortunately, one of the worst parts about being bleeding-edge/an-early-adopter and using a new language is waiting for the tool support. Look at VS 2008, the third party companies couldn't even keep up with VS2008 release date. When PowerShell came out, the only IDE was Notepad. Unfortunately, most IT folks still seem to use Notepad for most of there PowerShell scripts. This drives me nuts. This is like driving across country when  you could fly. But hey, if you're into long, over drawn out processes, maybe driving across the country will suit you. I'll see you in NYC when you get there, I'll already have gone sight-seeing for 3 days prior to your arrival.

powerguibig This brings me back to PowerShell. There are many IDE's out there, some free, some not. The one I've seem to use on a regular basis is PowerGUI. Its simple, yet effective. Features include, IntellSense, built in help, debugging, watch window. You can also get more libraries from the downloads as well. For me, being able to debug into a script is worth its weight in gold. I don't know how many times back in ASP Classic I wrote:

Response.Write "In The If"

Man, I don't miss those days at all.

So let me say it again... if you're walking around in the stone age, its time to step out, get a IDE and start enjoying life again. Not reliving the "Response.Write" memoirs. :)

#    Comments [2] |
 Tuesday, February 19, 2008

Is Your Network Slow?

Don't you hate it when the network is slow? So do I. Unfortunately I cannot wait ~32 YEARS for this to finish. Bummer.

There's nothing agile about waiting 32 years. Sorry guys. :)

SlowNetwork

#    Comments [1] |

A FREE Remote-Collab Tool From Microsoft? (And a list of others)

sharedviewBeta Microsofts SharedView has been around for awhile now and at this point is in Beta. Scott Hanselborg posted about the tool just recently and I finally gave it a spin yesterday with another coworker.

sharedviewBeta-2

I was very impressed with the smoothness of the application and I really loved how each user was given their own mouse cursor with their name attached. They were not controlling the session, but they were allowed to move their cursor around. This is very nice to have because you can see what everyone is looking at when they're talking. Very nice.

I know there are many other tools out there, but I think this one might be a one for Development teams to embrace. I've used RealVNC before for Pair Programming sessions at previous clients, but sometimes I found it choppy and the display was horrendous at times (depending on network latency). I didn’t encounter these issues with SharedView at all.

If you're looking for a new remote tool, or maybe you're just trying to show Mom how to burn a CD of photos, check out SharedView.

If you realize SharedView is not for you, check out some of these other collaboration Tools (some free, some not-so-free):

g2a_logo_small LogmeIn
GoToMyPc  yugma
 GoToMeeting  webex_logo
 RealVnc CoPilot
#    Comments [0] |
 Sunday, February 17, 2008

Frustrated... Party of 1! MSBuild ... PLEASE JUST WORK!

pullinghairout
Photo by: mistyeiz

A couple of weeks ago I had one hell of a time with an MSBuild script. I felt like I was going crazy, I couldn't figure out what was going on. I was following all of the examples on the net and I still couldn't figure it out.

The Internet has tons of sites about how to capture a list of files to delete or copy.  I'm used to working with NAnt so grabbing a list of files was pretty easy for use in the copy or delete. Moving to the MSBuild version was not that difficult. Until I introduced TeamBuild to the build process.

How to Capture a list of files in MSBuild

You can then use the Item like this:

<ItemGroup>
    <TestFiles Include="C:\Binaries\Release\_PublishedWebsites\WebApplication123\**\*.*" />
</ItemGroup>

<Message Text="@(TestFiles)" />

This will print the list of files to the screen. You can also use this in the delete or copy task to work with them.

Caveat

Normally this works, except when you're using TeamBuild and the $(OutDir) property. Aaron Halberg has posted about the issues with $(OutputPath) and $(OutDir) here.

In a nutshell $(OutDir) is overwritten by the Team Build targets. Please read those links for some more in depth background.

The Problem

When utilizing the $(OutDir) property within a list while utilizing Team Build we have to create the List with CreateItem in a target because of a  known limitation with emitting properties.

The issue has to do with not being able to access items and properties that are created within a target until the target execution actually completes.

So, if you were to run CreateProperty or CreateItem and immediately execute the CallTarget task to invoke another target that needed access either an item or property that was just created, you will be out of luck.  We don't publish dynamic properties or items until the target that created them is done executing.  This is a known issue for Whidbey.  Fortunately the workaround is simple:  have one target emit the items/properties and finish execution before you run the next target that uses them.  You can sequence the execution of these two targets via a DependsOnTargets attribute on a master target - alternatively the master target can use CallTarget to invoke both the targets sequentially.

Author:  Faisal Mohammood

So what does this mean? We have to create a Target that creates the list, then call that target prior to using the list.

The Solution

To understand this correctly, lets take a look a task that DOES NOT WORK, then we'll look at one that does work:

Does Not Display Files

The example below will NOT display a list of output files.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets"/>
    <ItemGroup>
        <SolutionToBuild Include="$(SolutionRoot)\development\webapplication8\webApplication8.sln" />
    </ItemGroup>
    <ItemGroup>
        <ConfigurationToBuild Include="Release|Any CPU">
            <FlavorToBuild>Release</FlavorToBuild>
            <PlatformToBuild>Any CPU</PlatformToBuild>
        </ConfigurationToBuild>
    </ItemGroup>
    <PropertyGroup>
        <PublishedOutputFolder>_PublishedWebsites\WebApplication8\</PublishedOutputFolder>
    </PropertyGroup>

    <PropertyGroup>
        <TestFolder>$(OutDir)$(PublishedOutputFolder)</TestFolder>
    </PropertyGroup>
    <ItemGroup>
        <TestFiles Include="$(OutDir)$(PublishedOutputFolder)**\*.*" />
        <!-- Uncomment the line below to see that it will actually work if you supply a full path -->
        <!--<TestFiles Include="C:\Binaries\Release\_PublishedWebsites\WebApplication8\**\*.*" />-->
    </ItemGroup>
    <Target Name="AfterCompile">
           <CallTarget Targets="PrintText" />
    </Target>
    <Target Name="PrintText">
        <Message Text="test: $(OutDir)$(PublishedOutputFolder)" />
        <Message Text="Test Files: @(TestFiles)" />
    </Target>
</Project>

 

Displays Files

This example msbuild file (nearly identical to the one above - with a few minor changes) will display a list of files.

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="DesktopBuild" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\TeamBuild\Microsoft.TeamFoundation.Build.targets" />
    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets"/>
    <ItemGroup>
        <SolutionToBuild Include="$(SolutionRoot)\development\webapplication8\webApplication8.sln" />
    </ItemGroup>
    <ItemGroup>
        <ConfigurationToBuild Include="Release|Any CPU">
            <FlavorToBuild>Release</FlavorToBuild>
            <PlatformToBuild>Any CPU</PlatformToBuild>
        </ConfigurationToBuild>
    </ItemGroup>
    <PropertyGroup>
        <PublishedOutputFolder>_PublishedWebsites\WebApplication8\</PublishedOutputFolder>
    </PropertyGroup>

    <PropertyGroup>
        <TestFolder>$(OutDir)$(PublishedOutputFolder)</TestFolder>
    </PropertyGroup>

    <Target Name="CreateProperties">
        <CreateItem Include="$(OutDir)$(PublishedOutputFolder)**\*.*">
            <Output TaskParameter="Include" ItemName="ActualFiles"/>
        </CreateItem>
    </Target>
    <Target Name="AfterCompile">
        <CallTarget Targets="CreateProperties" />
        <CallTarget Targets="PrintText" />
    </Target>
    <Target Name="PrintText">
        <Message Text="test: $(OutDir)$(PublishedOutputFolder)" />
        <Message Text="Actual Files: @(ActualFiles)" />
    </Target>
</Project>

Conclusion

If you're using the $(OutDir) property with Team Build and you need to create a dynamic list of files, you will need to create the list through a target using CreateItem task. This also applies to MSBuild properties as well. For a full understanding of why you have to call a target to create the properties prior to use them, read these two links - MSBuild Blog - Sayed Ibrhim Hashimi.

Notes: If you're using a normal MSBuild property such as $(OutputFolder) - and not using TeamBuild - you can use the following to get the list of files:

<ItemGroup>
    <TestFiles Include="$(OutputFolder)**\*.*" />
</ItemGroup>

#    Comments [0] |
 Saturday, February 09, 2008

VS2008 HotFix Posted Yesterday

vslogo Phoenix, we have had a problem... not anymore though... :) The web dev tools team posted a note about the release here.

The fix includes Html Source View Performance fixes, Design View Fixes, Html Editing Fixes, Javascript Editing Fixes, Web Site Build Performance improvements. Read the full post here.

Download the fix here.

#    Comments [0] |
 Friday, February 08, 2008

Podcast for PowerShell - PowerScripting.net

In a previous post I wrote about staying up to date and how I do it. I included Blogs, Podcasts, Screencasts, etc.

This is one more Podcast to add to the list. The podcast covers all things PowerShell and I must say, its pretty good!

If there is one thing to add to your toolbelt this year, its PowerShell - even Jeffrey Snover agrees. I guess he doesn't count though ... he is one of the architects of it. :)

Apple ITunes Link For Podcast

#    Comments [0] |

The FooTheory Community

I'm very happy to announce that I was recently invited to join the the Foo Theory community. This is something I'm very excited about as I respect the other Foo-Theorians that also post here. This does not mean that Ill stop posting on my regular blog - I will be cross posting all content to my personal blog as well. You can think of that site as a mirror to this site (or vice versa) from here on out.

 

Feeds To Add

While taking a look around Foo Theory be sure to check out two of my favorite blogs on this site:

Trust me, they're two of the smartest guys out there - be sure to add them to your feed catcher.

Look forward to some great content in the near future. :)

#    Comments [0] |
 Thursday, February 07, 2008

Gleaning Clarity Through Unit Test Names

You're unit testing, right? .... right? (If not... shame on you... ) It's known that TDD/nDD types of development dramatically increase the ability to refactor with confidence, increase code readability and help define and enforce business rules (in the tests). Unit testing helps with TONS of things in development (literally the list could go on and on), but what about the unit test names? What do those do for us as developers? 

Predecessors In The Name Game

Roy Osherove has a good post on Unit Test names. Jean-Paul also has tons of good info about unit test names on his blog. I tend to follow these same guidelines. Also - awhile back on the altnet list there was a thread which spawned this post, but unfortunately I could not find it. If I do run across the post I'll augment this thread with the link.

Background

But what about when a bug report comes in? In my work I've used an alternative method so I thought I'd post it here.

  • Lets say the bug report says that "CalculatePayment" is returning the wrong value when the system is in a certain state. This kind of test was completely missed during development. Heck, it happens! Your task is to implement a solution for this bug.
  • Most likely you're going to write a unit test to assert that the solution you specified has been implemented as expected.

 

Naming Convention

When naming these unit tests I will add the word FIX_<WorkItemNumber>_<MethodName>_<StateUnderTest>_<ExpectedBehavior>() as the method name.

Example:

FIX_186_CalculatePayment_WhenRateLessThan1000_ThrowPaymentException()
{ ... }

From this test fixture name I can glean that this is a fix for bug 186, for the CalculatePayment method, for the state when a rate is less than 1000, the method should throw an exception. I've now documented my code as well as created a very readable and understandable unit test name.

I know this is not something everyone wants to do or would do, but in certain companies I've worked at this has helped with work item issue resolution and tracking.

#    Comments [0] |