Tuesday, 19 July 2011

Asus EeePad Transformer TF101 Tablet PC Review

 I have just taken delivery of my new Asus Transformer - the name is cool btw!
Thought I would test out the keyboard docking module by writing a quick blog review of the Tablet.

First Impressions.

Upon opening the packaging you can't help but notice how well made the tablet is.
The bronze finish is very nice.
As an Ipad owner also I could not fail to compare the 2 devices.
The Transformer is more shiny on the screen area and this does admittedly make it a bit harder to view and you do indeed find yourself angling the screen for the best position.

I also had a slight problem in that when docking the first screen into the keyboard module the pressuer of actually having the tablet docked must have caused some sreen distortion which manifested itself as a disturbance in the lcd beneath the screen.

I was in the lucky situation of having 3 Transformers to choose a new keyboard dock from.
You however may not be so lucky!

One of the first things I tried was inserting a USB stick into the side of the Transformer.

Once the fiddly cover was moved the usb went in ok. A notification icon came up to tell me I had a USB device available and a file manager app gave me access to it.
All Good!

I added my MS Exchange account with no problems, since my mail, calendar and contacts fine.
Then also added my Hotmail as a second exchange account giving me a combined inbox!
Integrated with my Picasa account too and added all my web albums to the photo gallery.

The 2 cameras, front and back are totally acceptable, however, Skype really needs to get video calls onto Android.

My 9 year old was very impressed with the Movie Studio App and made a really funny little movie with soundtrack in no time!

Working in i.t. as I do I was still looking for additional windows type functionality exactly as I did with the iPad.
Wyse PocketCloud was my next stop.

So Windows 7 on a Transformer was ok, just couldn't quite get the resolution right.

The mouse controller is very responsive but the buttons can be a bit hit and miss!

All in all a very capable and versatile piece of kit, no speed related issues.


At the price of a high spec laptop is this the correct device?

If it fits your needs then yes but as far as I'm concerned it is an expensive gadget and not a line of business piece of kit!

That said and preparing for the fallout from the Apple Fanboys I do prefer it to the iPad, mainly because no itunes!

Monday, 14 March 2011

Adding a Driver to a Netboot Image

At our organisation we use Ghost to image our workstations.
This is done in conjunction with PXE Boot.
From time to time a hardware manufacturer will incorporate a new network card.
This can cause problems with PXE Booting!

Quick Overview of PXE Boot in Windows Environment;
(further info here http://netbootdisk.com/pxeboot.htm )
  Setup TFTP Server on DHCP Server
  Add Scope options to DHCP
    066 Boot Server Host Name - TFTP Server Name
    067 Bootfile Name - pxelinux.0

Get Netboot Files from http://netbootdisk.com/.
Get Winimage from http://www.winimage.com/download.htm
Get WinUHA from http://www.klaimsoft.com/winuha/
Download latest NDIS drivers for your network card

Our boot image file is test.imz

Open test.imz with winimage

Right click extract \NetBoot\files.uha

Open files.uha with WinUHA and extract

Replace the relevant ndis driver file with the latest version (in our case Broadcom Driver B57.dos)

Re-archive files.uha with WinUHA (make sure files are compressed into correct directory structure)

Now back in Winimage select Image, Inject and re-inject the files.uha into the NetBoot folder.

Save the image file


All Done!

Nicey Cake!

Thursday, 3 February 2011

CS1000 Capturing CDR data

At our site we have a Nortel CS1000 handling all our telephony. We were looking into a solution for calculating call costs for billing purposes.

3rd Party solutions are expensive.

So I decided to look at an in-house solution.

The first issue was how to capture the data.

We have a dedicated PC which runs our TM software (and also does our FreeWMI – see previous blogs!).

Connecting this pc’s serial port to the 25 pin connector at the back of the CS1k (Com RS232 port) labelled port 2 should capture CDR data.

This will pump out raw CDR data at 9600 7/N/1 (Note the 7 Data Bits!)

To capture this data on the PC I used PuTTY (Serial Port Version).

Available here http://www.putty.org/

Here is a screenshot of the config.


This gives an output like this;


I now needed to log this to a file, again this was a setting within PuTTY…


This basically meant all CDR data was now being captured to the cdr.log file.

The next step was to decipher this raw data into something meaningful.

Upon investigation I found that the relevant data ie outgoing calls, was in data lines starting with a “D”.

A typical data line was….

D 013 00 22XX    A001012 02/03 13:31:48 00:03:44.0  9077852XXXX

the 4th section of this line was the Extension Number

the 6th section was the Date, “mm/dd” excluding year interestingly enough.

the 7th section was Time “hh:mm:ss”

The 8th was duration in “hh:mm:ss.s”

The 9th section was number dialled in our case with a leading 9 for outside line.

I then wrote the following script to get meaningful info from the cdr.log into a csv file.

Obviously there are settings specific to my system in here but this can be adapted to suit.


'##### SCRIPT FILE FOR Processing CDR Data :  31/01/11 by Kevvo######

Set Shell = WScript.CreateObject("WScript.Shell")
Set FileSys = CreateObject("Scripting.FileSystemObject")
Set Network = WScript.CreateObject("WScript.Network")
'On Error Resume Next

CDRFileName = "cdr.log"
CDRLocalRate = 2.5
CDRNationalRate = 2.5
CDRInterRate = 15
CDRMobileRate = 9.9
CDRPremiumRate = 6.39

Set OpenLogFile = FileSys.OpenTextFile(CDRFileName,1,True)

Do While OpenLogFile.AtEndOfStream <> True
sLine = OpenLogFile.ReadLine
LeftChar = left(sline,1)
if left(sline,1)="D" then
  ExtTest = mid (sline,10,1)
    if mid (sline,10,1)<>"T" and mid (sline,10,1)<>"A" then

     '###### SPLIT LINE INTO AN ARRAY ######
     aLine = split(sline, " ",-1,1)
     '######  CHECK FOR HEADER ######
      if left(aline(0),1)="D" then
        if mid(sLine,55,1) <> "7" then
      '######  GET VARIABLES ######
        reccount = reccount+1
        LineLength = len(sLine)
        CDRext2 = mid(sLine,10,4)
        CDRdate2 = mid(sLine,27,5)
        CDRDay = mid(sLine,30,2)
        CDRMonth = mid(sLine,27,2)
        CDRYear = "11"
        CDRdate2 = CDRDay &"-"& CDRMonth &"-"& CDRYear
        CDRtime2 = mid(sLine,33,8)
        CDRduration2 = mid(sLine,42,8)
        CDRHrs = left(CDRduration2,2)
        CDRMins = mid (CDRduration2,4,2)
        CDRSecs = right (CDRduration2,2)
        CDRHrs2 = left(CDRtime2,2)
        CDRMins2 = mid (CDRtime2,4,2)
        CDRSecs2 = right (CDRtime2,2)
        CDRDateTime = "20"&CDRYear&"-"&CDRMonth&"-"& CDRDay &" "& CDRHrs2 &":"& CDRMins2 &":"& CDRSecs2
        AddCDRmins = 0

        if CDRSecs > 0 then
          CDRSecs = CDRSecs / 100
          AddCDRmins = Int(CDRSecs + 1)
        end if
        CDRMinCount = (CDRHrs*60)+CDRMins+AddCDRmins
        CDRdialled2 = mid(sLine,56,(LineLength-56))
        CDRdialled2 = Replace(CDRdialled2," ","")

        CDRDialledL3 = left(CDRdialled2,3)
        CDRDialledL4 = left(CDRdialled2,4)
        if len(CDRdialled2) > 4 then
            if CDRDialledL3 <> "111" or  CDRDialledL3 <> "112" or CDRDialledL3 <> "116" or CDRDialledL4 <> "0800" or CDRDialledL4 <> "0808" or CDRDialledL4 <> "0500" then
            CDRStartDigit1 = left(CDRdialled2,1)
            CDRStartDigit2 = left(CDRdialled2,2)
            if CDRStartDigit1 <> "0" then
             CDRCost = CDRMinCount * CDRLocalRate
               if CDRStartDigit2 = "07" then
                  CDRCost = CDRMinCount * CDRMobileRate
                     if CDRStartDigit2 = "09" then
                       CDRCost = CDRMinCount * CDRPremiumRate
                       CDRCost = CDRMinCount * CDRNationalRate
                     end if
               end if
            end if
            CDRCost = FormatNumber(CDRCost / 100,2)
            Set FileSys = CreateObject("Scripting.FileSystemObject")
            if FileSys.FileExists(LogFileName) then
                set LogFile = FileSys.OpenTextFile(LogFileName, 8)
                LogFile.WriteLine CDRext2 &",'"&CDRdate2&","&CDRtime2&","&CDRduration2&","& CDRMinCount&",'"&CDRdialled2&","&CDRCost
                set LogFile = FileSys.CreateTextFile(LogFileName, true)
                set LogFile = FileSys.OpenTextFile(LogFileName, 8)
                LogFile.WriteLine CDRext2 &",'"&CDRdate2&","&CDRtime2&","&CDRduration2&","& CDRMinCount&",'"&CDRdialled2&","&CDRCost
            end if

            end if
        end if   
    end if
    end if
end if
end if
StrNow = Day(Date)&"-"&Month(Date)&"-"&Year(Date)&"--"&Hour(Now)&"-"&Minute(Now)&"-"&Second(Now)
FileSys.MoveFile CDRFileName, StrNow&"-"&CDRFileName
wscript.echo "All Records Processed : "&reccount

I have also adapted this script further to inject the data into a MYSQL database and then the information was presented on a per user basis within our corporate intranet.

Thursday, 18 February 2010

Auto Attendant Greeting / Menu Prompts

OK here we go again....

Microsoft in their wisdom thought it would be a good idea to disable a feature that most people would find very useful!

In trying to set up a site wide auto attendant I went through the relevant steps to add custom greeting and menu prompts to an auto attendant.

Got a decent Microphone.
Found a quiet room.
Got a staff well spoken member.
Recorded Greetings and Menu Prompts
Saved them as the appropriate type of WAV file (PCM 8kHz 16Bit mono)
Uploaded them via Exchange Management Console
Checked them on the phone system (Nortel (Avaya?) CS1000)
Sounded dreadful - hissing and cracking and quiet!
Not suitable at all!

So I then trawled the Microsoft Technet and the rest of the whole Internet and came across this command;

set-umdialplan -id -TUIPromptEditingEnabled $true

The relevant term is Telephone User Interface Prompt Editing......

And guess what, you can now record Auto Attendant prompts through a telephone handset!

Clear and crisp and the correct volume!

Wait for the voice prompts to start and press #*
supply the UM number of an admin level user (must be in Exchange Org Admin Group) and off you go recording prompts to your heart's content!

Here is a link to the page where I found the relevant information;

And a Technet Article...

Many Thanks Microsoft!

Wednesday, 4 November 2009

MS Exchange 2007 and Nortel CS1k UM Auto Attendants

Here is the scenario.......

Nortel CS1K
MS Exchange 2007
UM Auto Attendants Required

Main switchboard number was set to forward on busy to a UM Auto Attendant which would present a menu of available options for the caller to select as per the usual business call centre type.

The user would be forwarded to the UM Auto Attendant and if the UM Auto Attendant option selected was a phone number the phone would ring and if answered the call would continue as expected......
if the call was forwarded to an Exchange Voicemail number specifically or if the extension selected was busy or did not answer the caller would be asked to leave a message.
The caller would put on their best telephone voice and start to leave their message when after 10 seconds they would hear "Are you still there?"

Exchange could not hear the caller!

We ran traces....
We checked switch configuration.....
We Patched and Service Packed Exchange.....
We Patched and Service Packed CS1K.....
We stood on one leg with a knotted handkerchief on our heads at midnight....

Nothing worked....

We raised a call with Nortel....

This was the reply.....

"On initial investigation this appears to be a codec negotiation issue between the CS1K and EXUM ( although the contact information also appears strange to me) . Would it be possible to confirm that the EXUM is patched current , also can you send me the wiredcodeclist registry key info (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Speech Server\2.0\WireCodecList) for review. Lastly from EXUM are there any event logs generated when this occurs ?"

The content of
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft Speech Server\2.0\WireCodecList


Sent this to Nortel and the reply was....

"Also would it be possible to try reordering the wirecodeclist to insert A law before MU law ? Once updated you will need to restart the MS Exch Speech Engine Service. I have seen this also resolve some UEXM codec issues."

Changed the Codec order to....


Restarted MS Exchange Speech Engine Service
And all worked fine!

An obscure entry in a seemingly non relevant registry key!
Thank you Microsoft for making life so simple!

Friday, 18 September 2009

MS Exchange 2007 Service Pack 2 Install with Language Packs

I recently installed Service Pack 2 onto my Exchange 2007 server but had a few problems which I will try to explain here......

Download Location.....

When running the Setup program the server failed pre-requisite checks on the Unified Messaging because apparently Microsoft only want you to have "en-US" Language Packs installed.

So I needed to remove the "en-GB" Language Pack.

This would be done using the command;

Setup.com / RemoveUmLanguagePack: en-GB

BUT here is what I got.....

The following Unified Messaging language packs will be removed:

Um Language Pack for en-GB
No Unified Messaging Language Pack is installed for the culture 'en-GB'.
No Unified Messaging Language Pack is installed for culture 'en-GB' on this

So the Exchange Server thinks it does not have 'en-GB' installed!

Found an obscure post on a german site
Subject: MSX2007: Uninstall problem UMLanguagePack
From : "Willmar Heinrich"

who pointed me in the right direction, mentioning the registry key;
HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Exchange \ v8.0 \ UnifiedMessagingRole \ Language Packs

I checked this reg key and found only an entry for 'en-US'

So I backed up the
registry settings

and copied the data form the



then I re-ran the
Setup.com / RemoveUmLanguagePack: en-GB
command and it worked.

The language pack was removed and SP2 passed all pre-requisite checks and installed quite happily.

The only hickup was that Microsoft Exchange Speech Engine Service would not start because it was a bit confused about the "rigged" language pack reg fix. This meant Voicemail and Auto Attendents were off for the interim.

Once SP2 was installed all was fine again.

All that was left was to re-install the language packs using;
Setup.com /AddUmLanguagePack:en-GB /s:d:\UM

Tuesday, 12 May 2009

Exchange 2007 and Nortel CS1K Message Waiting Indicator - The Cheap Way

Geomant MWI Software would have cost around £2000

Looked for an alternative and came across Freemwi

The Developer Justin was a great help.

Below is the communication we had.......


Sorry for the delay in response. Don't know if you have figured it out yet, but it will be hard to help you with out more information.

My initial guess is that you are using the email address instead of the UPN. e.g. the users UPN is bobs@domain.local, but email is bob@domain.com

If you can send me a copy of the user CSV, screen shots of the General, and Account tabs, in Active Directory Users and Computers, what your impersonation account user is and the print out of this command: "Get-MailboxPermission -Identity bob@domain.local fl" I will be in a better position to help you.

One other trouble shooting tip, in a browser you should be able to go to the OWA site and impersonate the user:


then login with you MWI user: e.g. mwi@domain.local, it should open his mailbox.


As mentioned earlier, I have now tried to roll freemwi out to more users but am getting strange results.....
For some users I am getting
Cannot impersonate: does user exist?

Whereas others are fine.

The users are in the same active directory ou, have the same Mail Store, are in the same groups,
Cannot find a difference that would cause this problem.I have re-run the extended rights impersonate ps command and the impersonate rights seem to have already applied

If you can shed any light it would be much appreciated.
I know this is pretty much unsupported but I do appreciate the help you have given so far.


Glad to hear you got it working.

Assuming you are following this:

There are two additional things you need to do
First you have to run the service as a user:

and second most importantly you must run the service with the application path of the exe:
Note the AppDirectory key

That is how I got mine running as a service.

When I have more time I will write up some detailed instructions. Let me know if that is enough or if you need me to elaborate.


Good News!

We have successfully installed freewmi and it is now working.

The instructions you supplied were spot on and easy to understand and follow.

The only thing we did have to do was install .net 2.0 (might be worth putting into your documentation)

The only problem we had was with proxy authentication not being passed thru freewmi.
We added a non authenticate rule to our isa server and this did the trick.

We currently have it configured and working for about 20 users.

I plan to expand this to a further 100 within the week.

The one thing I did try was to get freewmi running as a service using instsrv.exe and srvany.exe but it did not run the freemwi.exe.

I will try to work on this and let you know if I have any progress.

Have you come across this request from anyone else?

Other than that an excellent application.

Many thanks for all your help


Thank you for contacting me. I look forward to hearing how you make out, and if you are willing to provide me with notes on the integration with the CS1k that would be greatly appreciated.

I have had a few other people inquire about the CS1K but none have implemented it yet, they were in the pre-testing phase.

This is what I sent them:

Note: this it is not tested, and is based on my reading of the documentation on Nortel's website.


Here are a few tips that might help you to implement it with the CS1K:

Note: I am not very strong on the Nortel side of things, so this might not be fully correct.

Since you can’t run this on a server running the Exchange UM Role, you will have to run it on another box, e.g. Another non-um Exchange Server, File Server, Domain Controller, etc. (I have mine running in a Hyper V machine); You will have to allow it to send SIP UDP messages to Sip Proxy Server (SPS) (Assuming you are doing Direct SIP), When you create a Gateway Endpoint for Exchange, you will also want to create a Gateway Endpoint for the MWI Server, except you will want to choose SIP UDP, it should look something like

Endpoint Name FreeMWI (Unique Name)
Endpoint authentication enabled Authentication Off
Static endpoint address
SIP support Static SIP endpoint
SIP UDP transport enabled Checked
SIP UDP port 5060

You will also need to steer traffic down the Gateway Endpoint See page11, and then 21 of the next link for RLB and Steering Code setup and for adding a route entry. See Below
for the MWI DN

This is based on this document

User telephones should be configured with MWA (Message Waiting Allowed) Class of Service to receive MWI Lamp notification.

The Node configuration page (in Element Manager) needs to be configured with information for both the MWI Application DN and the MWI Dialing Plan. The configured MWI DN and MWI Dialing plan should be administered as a valid DN on the Call Server to ensure routing back to the SIP gateway; this is required if the ISDN Facility Response is to be sent back to the SIP gateway.
You can find this under Element Manager: System -> IP Network -> Nodes: Servers, Media Cards.
Click to expand the Microsoft Unified Messaging tab as illustrated in the diagram above.
If MWI application is used for Lamp Status Update, configure the properties:
MWI Application DN See above
MWI Dialing Plan CDP (I am assuming)
Note: FreeMWI sends out the MWI as coming from the person it is sending it to, e.g. if Lamp should be turned on for 4501 then it shows it is coming from 4501 to 4501, this should not be a problem but if it is I can always recompile a version that sends from your Subscriber Access Number, just let me know if you want to try this.

This has some MWI configuration information

Hopefully the above makes sense as I was mainly trying to get my thoughts out, but basically you need to mirror the configuration for Exchange except with a different DN, Gateway Endpoint, and SIP UDP.

Hopefully that is all the configuration you need on the CS1K.

When troubleshooting I would first make sure FreeMWI is properly configured and monitoring the Mailboxes (as I know this works), then I would configure the CS1K, and use Wireshark on the MWI server to see that FreeMWI is sending out the MWI packets to the CS1K and see the response. Feel free to send me packet captures if you wish.


I don't see any reason we can't get my program to work. I am willing to help out where I can, and I look forward to hearing how this work out.

Thank you,


Was very pleased to find your application out there and am hoping to implement here at our college.

Our set up is as follows;

Nortel CS1000 server
MS Exchange 2007 with UM Voicemail

I will let you know how we get on.

If you have any further info regarding configuration on the CS1000 I would be grateful if you could pass it on.