MBC Computer Solutions Ltd.

  • Subscribe to our RSS feed.
  • Twitter
  • StumbleUpon
  • Reddit
  • Facebook
  • Digg

Friday, 3 February 2012

An Experiment with Google Services & Page Speed

Posted on 08:40 by Unknown

When building eCommerce sites, we deal a lot with performance.  Not just ensuring that our sites respond quickly, but also working with customers to explain what makes up the overall performance characteristics of a site, and what might be impacting theirs.  Unfortunately, performance tends to be misunderstood among both technical and non-technical persons.  Frequently we receive reports about “slow sites” with customers assuming the problem lies within our services and obviously looking for a solution.  In most cases, the slow-downs on the sites actually tend to come from external factors like 3rd party scripts, yet it seems like every service out there wants you to drop one of their tracking scripts on your page.

There are now a number of tools on the market which aim to give a single score metric indicating the performance of your site, the most commonly used one seems to be Google Page Speed. 

I decided to run a little experiment to see how adding Google services to a page affected both performance and Page Speed scores.

First, my setup:

  • Firefox 10.0 with Firebug 1.8.4
  • Files hosted at same datacenter facility as our eCommerce sites (not locally)
  • 100mbit internet connection at testing location
  • CPU is a Xeon X5550, 18GB RAM, 2x SAS 15K drives in RAID-0 (workstation performance definitely isn’t going to be the bottleneck here!)

To start, I created a plain-old XHTML 1.0 Transitional page with 10 paragraphs of Lorem Ipsum text. I then added Google Services to the page one at a time, starting with Google Analytics (the most commonly included script I could think of).  For each page, I reloaded it with CTRL-F5 in order to ensure I did not use any cached resources.  GZIP was disabled on the server hosting the HTML pages to ensure the compression times did not affect time-to-first-byte (TTFB).

The pages I tested with can be found at the following links:

  • Test 1: Plain-old HTML: http://www.berkovitz.org/googlepagespeedexperiment_1.html
  • Test 2: Added Google Analytics: http://www.berkovitz.org/googlepagespeedexperiment_2.html
  • Test 3: Added AdWords Conversion Tracking: http://www.berkovitz.org/googlepagespeedexperiment_3.html
  • Test 4: Added Google Plus Button: http://www.berkovitz.org/googlepagespeedexperiment_4.html
  • Test 5: Added Google Maps IFRAME: http://www.berkovitz.org/googlepagespeedexperiment_5.html

The results are interesting to say the least:

Test Description On-Load Time (ms) Size (KB) # Requests Page Speed Score
1 Plain-old HTML 82 7.2 1 92
2 Added Google Analytics 287 20.8 3 93
3 Added AdWords Conversion Tracking 366 23.7 6 92
4 Added Google Plus button 830 126.2 12 94
5 Added embedded Google Maps 6130 414.9 35 94

The most interesting part was that the more services I added and the slower the site performed, the better the Page Speed score got!  In fact, the end result was a page with a load time 75x slower than the original, 57x larger and with 35x the number of requests yet the Page Speed Score increased by 2 over the original.

It just goes to show that you cannot base your analysis of a site solely on a single tool.  Your site might have a Page Speed score of 94, but an on-load time of 6.1sec is obviously going to be perceived as very slow to users.   And don’t even get me started about Google Webmaster Tools!

Read More
Posted in | No comments

Friday, 23 April 2010

ScottGu’s Color Scheme for Visual Studio 2010

Posted on 14:46 by Unknown

ScottGu was nice enough to provide the world with his awesome Visual Studio 2008 color scheme.  I’ve been using this for many years now and I highly recommend it – after years of working on a dark background, I find a white coding background to be harsh and straining.

Visual Studio 2010 introduces some new syntax coloring options, and when importing a VS2008 settings file, will resort to defaults for these values.  The result is a pretty ugly editor when used with this color scheme.

Lucky for you, I’ve taken the time to update the file.  Download the VS2010 ScottGu Color Scheme.

Read More
Posted in | No comments

Monday, 7 December 2009

Moving the C:\WINDOWS\INSTALLER Directory

Posted on 09:42 by Unknown

Often servers or workstations will run low of disk space on the system partition.  This is especially true I’ve found with older Dell servers that shipped with a 12GB system partition.

The c:\windows\installer directory often occupies several gigabytes of storage.

While Windows does not provide a mechanism to re-point this directory via the registry, you can use NTFS junctions/reparse points to re-point the directory to a different local volume.  Re-pointing to UNC paths is not supported.

  1. Obtain junction.exe from http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx

    I found it handy to add the executable to c:\windows\system32 for easy access

  2. Create the destination Installer folder on the new volume (ie: D:\Installer)

  3. Move all content from c:\windows\installer to your new directory

  4. Make sure to close any explorer windows with these folders opened.  Junction.exe requires that there are no open file handles to these directories

  5. Create the junction

    junction.exe c:\windows\installer d:\installer
Read More
Posted in | No comments

Monday, 30 November 2009

Blackberry Enterprise Server - “The personal redirection folders are unavailable”

Posted on 14:35 by Unknown

After upgrading our corporate Blackberry Enterprise Server (BES) from 5.0 to 5.0SP1, all of our users started complaining that most if not all of their contacts were now missing.

From the Web Desktop Manager, and choosing the “Redirection Folders” section (where you configure which folders are redirected), the following error message was displayed at the top.

The personal redirection folders are unavailable. Contact your system administrator.

Great, they want me to contact myself.  Typical.

The Desktop Manager did not show any errors but also would not allow me to select any folders or my default private contact folder.

A glance through some of the BES logs showed messages like:

javax.ejb.EJBTransactionRolledbackException: org.hibernate.exception.SQLGrammarException: could not insert: [com.rim.bes.basplugin.synchronization.entity.SyncFolderListEntity]

[org.hibernate.util.JDBCExceptionReporter] [ERROR] Cannot insert duplicate key row in object 'dbo.SyncFolderList' with unique index 'IX_SyncFolderList_GUIDLoc'.

I happen to be a DBA, so I decided to dig right in.

First and foremost, before you perform any type of manual database manipulation against your BESMgmt database, TAKE A FULL BACKUP.  Did I mention you should take a FULL BACKUP?   Did you take a FULL backup? Ok good.  Also, if you are not familiar with SQL or simply don’t want to risk  bringing down your environment, I recommend you contact RIM support.

There are two database tables that control the bulk of this.  [dbo].[SyncFolderUserList] and [dbo].[SyncFolderList].  The [dbo].[UserConfig] table also contains all of the users, and you will need to reference it for this operation.

First, I looked up my user id from the UserConfig table.
SELECT *  FROM [dbo].[UserConfig]. 
I’m ID 47.

I then looked up my folder list from the SyncFolderUserList table.

SELECT * FROM [dbo].[SyncFolderUserList]
WHERE [UserConfigId] = 47

This yielded two records for me.  Note the data in the SyncFolderListId table.  For my scenario, I had two records, one with ID 60 and the other 147.

I then queried the SyncFolderList table for those rows.

SELECT *  FROM [dbo].[SyncFolderList]
WHERE [Id] IN (60, 147)

While I was expecting two entries, to my surprise there was only one entry.   Bingo, a rogue entry!

Seeing how it was only two folders, rather than deleting the rogue one and seeing if it worked, I opted to delete all of my data from both the SyncFolderList and the SyncFolderUserList tables. 

To my expectation, I was now able to select the folders again from either Web Desktop Manager or the Desktop Manager.

As a number of other users in our environment were experiencing the same issue, I decided to delete these tables all together.  All users reported they were now able to select folders to sync, and upon selecting them, their devices properly synchronized.

Drop a comment if this helped you!

Read More
Posted in | No comments

Friday, 9 October 2009

What’s in your BBIM Barcode?

Posted on 19:30 by Unknown

New with Blackberry Instant Messenger (BBIM) 5.0 is the ability to add contacts by scanning a barcode which BBIM can emit through the “my profile” feature.

It’s a cool feature, but I was obviously curious what was being sent.

The barcode is a QR Barcode, a two dimension barcode and ISO standard.  You can read all about them online.

Using the Barcode Reader for .NET library, I scanned mine in.  Here’s what I found

bbm:x07x8cce7b313673Steven Berkovitz

First, we’ve got a BBIM  identifier, “bbm”.

Followed by my PIN,”x07x8cce” (I’ve replaced a few characters).

The third set, “7b313673” I have not yet identified but it does differ between barcodes.  I’ll update this post when I find out.

At the end is my display name (not your name, I’ve verified this with some other barcodes), “Steven Berkovitz”

Read More
Posted in | No comments

Monday, 13 July 2009

C# – Converting IP’s to Numbers and Numbers to IP’s in 2 lines of code

Posted on 11:17 by Unknown

I don’t know why everywhere I searched had such complex implementation of this, but converting from a dotted IP to a number (integer) and back is quite straight forward with the help of the IPAddress and BitConverter classes.

Also, keep in mind that IP addresses are 32 bit integers; I’m not sure why people feel it’s necessary to use a decimal or double for this when a uint will work just fine!

/// 
/// Converts the IP address to an integer.
///

/// The IP address in dotted form.
///
public static uint ConvertIpToInteger(string ipAddress) {
return BitConverter.ToUInt32(IPAddress.Parse(ipAddress).GetAddressBytes().Reverse().ToArray(), 0);
}

///
/// Converts the integer to an IP address.
///

/// The IP address in integer form.
///
public static string ConvertIntegerToIp(uint ipAddress) {
return new IPAddress(BitConverter.GetBytes(ipAddress).Reverse().ToArray()).ToString();
}
Read More
Posted in | No comments

Thursday, 23 April 2009

Using SQL PIVOT with non-aggregate column

Posted on 12:35 by Unknown

I was banging my head on my desk for a while over this one, hopefully this will save you the pain…

I wanted to use SQL 2005’s PIVOT function except the data I was trying to PIVOT was a text column, not an aggregate of a column.  However, the business rule for this table was a 1:1 rule so there’d never be anything to aggregate anyways (even when the data is numeric).

What got me at first was the “Incorrect syntax near the keyword 'FOR'.” error message which didn’t make a whole lot of sense until I realized that added a SUM(1) resolved the problem (hence, the requirement for an aggregate column).

So how, might you ask, do you work around this?  Well, you don’t – the PIVOT function only takes an aggregate value after all.  That being said, our friend MAX and MIN don’t require a numeric value to be passed to them – they are perfectly happy accepting a varchar or nvarchar value.

So instead of trying

PIVOT([MyTextColumn] FOR [MyHeader] IN ([List],[Of],[Columns]))

Use

PIVOT(MAX([MyTextColumn]) FOR [MyHeader] IN ([List],[Of],[Columns]))

Read More
Posted in | No comments

Tuesday, 7 April 2009

Roomba Surgery: Replace the Bumper Articulating Arm Optical Sensor Set

Posted on 19:18 by Unknown

A few weeks ago my iRobot Roomba started spinning in circles and failing with a 9-beep error.  This error is related to the two bumper sensors located at 10 and 2 o’clock.  In some cases there might simply be debris behind the bumper interfering with the sensors.  I ruled this out with a disassembly and clean.

If your unit is under warranty you would likely be sent a replacement unit for this case, but that being said, mine was not.  Plus I was secretly looking forward to a full disassembly.

I followed a combination of instructions I found on the net to diagnose and replace the faulty part.

The problem is caused by one or two faulty “Bumper Articulating Arm Optical Sensors” in your robot.  These sensors consist of a plastic arm that swings between two IR sensors.  My readings on the working sensor showed a range of 0-5 volts.

The first sensor I tested functioned correctly switching between  0 and 5 volts.  The second sensor was fixed at 0v.  I had read about shorting out the IR to half blind your Roomba but I was not in the mood to solder fragile wires.  With that said, I managed to find a replacement part from Protech Robots. 

A week and a bit later (the item was shipped USPS ground) my part arrived and it was time to put Roomba back together again.

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 002
Remove the face plate

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 004
Remove the side brush, bottom plate, battery and the bumper (after removing the plate that holds the bumper on, the bumper gently lifts off.

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 006

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 007
This is one of the Articulating Arm Optical Sensors

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 009
Remove the top of the robot (don’t remove the screws for the handle)

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 011
Disassemble and remove the display

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 012
Gently remove the plastic sheet on top of the PCB

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 013
Disconnect all of the connections from the top of the PCB and remove the screws securing it.

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 016
Gently lift up the PCB towards you (the front of the robot) exposing the bottom connections.  Gently disconnect all of the connections including the bumper.

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 020

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 021
Gently lift out the IR sensor array

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 024
Remove the 2 screws securing each articulating arm sensor and remove the sensors from the robot.

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 027

 2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 029
Here comes the trickiest of the parts.  You need to follow all of the wires from the sensors to the connector located in the bottom right of this photo, ignoring the white wire that connects the two sensors together.  Carefully remove any material securing the cables together.  I highly suggest you draw a visual of the connector and keep track of the individual wires as you remove them.  To remove the individual wires from the connector you need to gently lift up the plastic the secures the wire, and pull at the same time.  I used a small paper clip to lift the plastic.2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 034

Once the connector is reassembled the rest of the steps are just the re-assembly of the robot and testing.

 

2009-04-07 Roomba Articulating Arm Optical Sesnsor Set Replacement 046
It works!

Read More
Posted in | No comments

Tuesday, 10 February 2009

How to query your BES database for a list of users

Posted on 12:22 by Unknown

I was asked to generate a list of all our BES users, including their name, phone number, PIN, IMEI and device number.  Sure, I could have copied/pasted this data out of the BES management utility, but what fun is that?

It turns out that it’s really easy to query the BESMGMT database for this list.

SELECT
uc.[DisplayName],
sdms.[PhoneNumber],
uc.[PIN],
sdms.[IMEI],
sdms.[ModelName]
FROM
[dbo].[SyncDeviceMgmtSummary] sdms
INNER JOIN
[dbo].[UserConfig] uc on sdms.[UserConfigId] = uc.[Id]
Read More
Posted in | No comments

Tuesday, 18 November 2008

MBC is Hiring – ASP.NET Web Developer Position available in Toronto, Ontario

Posted on 19:06 by Unknown

Description

If you enjoy working on a variety of cutting edge web applications ranging from eCommerce apps to Social Networking sites then this position might be for you! MBC is seeking to hire a talented and passionate developer with a deep understanding of ASP.NET and the .NET framework but who also likely knows their way around windbg.  Experience with standards-based XHTML, CSS, JavaScript and AJAX is a must.  The position is based out of Richmond Hill, Ontario (just outside of Toronto).  Office environment is young and casual.

Experience

Degree or certificate in Computer Science, Computer Engineering or college level application development program. Some experience developing production applications required.

Responsibilities

  1. Design and coding of features and bug fixes in a variety of .NET applications authored in C# (primarily ASP.NET)
  2. Occasionally working on VB6, PHP, ASP applications
  3. Communication with clients regarding progress, feature requests, answering general questions, support

Requirements

  • Strong object oriented design and programming using C# and ASP.NET 3.5
  • Strong knowledge of Microsoft SQL Server 2000/2005 (programming with T-SQL)
  • A desire to take part in the full development processing starting with design of features through implementation
  • Job experience working with C#, ASP.NET, .NET framework, JavaScript, AJAX
  • Experience working in a team environment
  • Excellent verbal and written communication skills

Additional Assets

  • Knowledge of COM+, Active Directory, Exchange, IIS, MSMQ
  • Team Foundation Server
  • PHP, ColdFusion, ASP
  • MySQL
  • Basic use of graphic design tools such as Adobe Photoshop

Salary

Commensurate with experience.

To apply for the job

Candidates will be required to provide sample source code that demonstrates strong knowledge of C# and ASP.NET. An application implementing an n-tier design is highly recommended. Additional consideration will be given to candidates who provide sample code using .NET 3.0/3.5 technologies such as LINQ, WCF, WPF.

Read More
Posted in | No comments

Saturday, 15 November 2008

XHTML Strict not supported by ASP.NET

Posted on 09:38 by Unknown

Back in October I opened up a MS Connect feedback item about a validation error I was receiving with a XHTML Strict site that used a ScriptManager with history support.  The site would fail W3C validation because the ScriptManager emits an IFRAME (when history is enabled) , and an IFRAME is not part of the XHTML Strict spec.  I just thought I’d provide the official word from Microsoft on this issue: XHTML Strict is not supported by ASP.NET!

XHTML strict is not supported by ASP.NET. Only transitional doctypes are supported, which enables iframes. Furthermore, the history feature can't be made compatible with IE 6 and 7 without using an iframe.

Posted by Microsoft on 11/12/2008 at 12:34 PM

Read More
Posted in | No comments

Monday, 10 November 2008

Don’t forget about the defer attribute for non-essential external scripts

Posted on 20:12 by Unknown

I was recently reviewing a customers eCommerce site and I noticed that the “Please Wait” page that occurs after completing an order but before you view the order was taking a long time to load.  Using Firebug I traced the issue down to an external script that was taking it’s sweet time to download; it was for affiliate tracking on a 3rd party site.

I’m all for tracking, but not at the expense of performance.  Though I haven’t seen an affiliate/ad partner use the defer attribute on their script tags before, there is good reason for you to add it.  Consider the following example:

Default

SlowRequest.aspx is just an ASP.NET page that after a 2 second delay, returns some JavaScript (not my finest code I might add)

SlowRequest

Sure enough, for the first two seconds, all you see is

Waiting

And finally (2 seconds later)

Done

Luckily for this example, this information isn’t overly pertinent – but if it were my order status, it would be.  Luckily a quick defer=”defer” attribute on your script tag and the wait is gone; the external script is loaded after the DOM is ready:

Defer

Read More
Posted in | No comments

Thursday, 23 October 2008

Is it really going to take that long?

Posted on 10:13 by Unknown

You have to love Microsoft dialogs sometimes:

capture

I really hope that’s not an accurate number! This was invoked by removing the Encrypted attribute on a folder of about 1GB.

Read More
Posted in | No comments

Tuesday, 21 October 2008

OrderDynamics Launches New Website

Posted on 09:00 by Unknown

October 27, 2008

TORONTO - OrderDynamics Corporation, an on-demand eCommerce solution provider, is pleased to announce its new website.

Since 2006, OrderDynamics has had a website that focused more on the technical details of their solution. The new website, and company logo and colors, is designed to provide visitors with a view to the entire OrderDynamics solution, not simply technical details.

"Our success comes from our overall approach, and we wanted this reflected in our brand and website going forward." Michael Benadiba, CEO and founder of OrderDynamics Corporation. The new website contains new content areas that describe all major aspects of the eCommerce solution. The design itself is significantly less busy, more simplistic, and easier for potential Clients to find what they need -all underlying themes meant to support the company philosophy. "The format of the website is exciting for us. Shortly, we will be providing specific content to explain to potential Client’s how we solve real problems for online merchants." Benadiba says.

About OrderDynamics Corporation

OrderDynamics Corporation is a privately owned company that provides turn-key eCommerce solutions to businesses looking to grow their online sales. The success of OrderDynamics is highly attributed to its response to real Client requirements and Dynamic Merchandising concepts which provide superior control and help drive revenue. The OrderDynamics solution is designed for online merchants and services different business such as retail, manufacturing, business-to-business, complex online retail, and more. OrderDynamics officially launched its solution in 2006 after 2 years of research and development.

For more information, please contact:

Michael Benadiba
Chief Executive Officer
OrderDynamics Corporation
1+ (866) 559-8123
news@orderdynamics.com

Read More
Posted in | No comments

Wednesday, 3 September 2008

Serving up the MS AJAX Runtime as a CompositeScript

Posted on 11:30 by Unknown

ASP.NET 3.5 SP1 introduces script combining to the ScriptManager.  To take advantage of this feature with your own scripts, you simply wrap  you <Scripts>...</Scripts> block with a <CompositeScript>...</CompositeScript> block.  This is great, but if you've spent any time analyzing your site with a HTTP tracing tool like Firebug, Web Development  Helper or Fiddler, you'll notice that the MS AJAX Runtimes (MicrosoftAjax.js, MicrosoftAjaxWebForms.js) is still served up separately.  It turns out that getting these to be served as part of the combined script is relatively straight forward and entails manually including the scripts within your <CompositeScript> block.  Since the names are unique, the ScriptManager will not re-add the runtime libraries.  The final result looks like:

<asp:ScriptManager runat="server" ID="scriptManager">
    <CompositeScript>
        <Scripts>
            <asp:ScriptReference Name="MicrosoftAjax.js" />
            <asp:ScriptReference Name="MicrosoftAjaxWebForms.js" />
            <asp:ScriptReference Path="~/scripts/YourScript.js" />
        </Scripts>
    </CompositeScript>
</asp:ScriptManager>

Read More
Posted in | No comments

Tuesday, 19 August 2008

Watch out for maxAllowedContentLength - its in bytes!

Posted on 08:14 by Unknown

I was just troubleshooting a HTTP Error 404.13 - Not Found error in one of applications that handles some large file uploads.  I had set my maxAllowedContentLength to 2097151 (which is the max allowed value for the httpRuntime maxRequestLength parameter, in KB).  Oddly, it wasn't working and I was still receiving the 404.13.

Some time later, after actually reading the MSDN documentation, it clicked to me that maxAllowedContentLength is in bytes, not kilobytes! Doh!

Read More
Posted in | No comments

Tuesday, 22 July 2008

Popup Window Manager

Posted on 13:59 by Unknown

I was just reading a post by Rick Strahl about managing popup windows in the browser.  I actually authored a mini popup window manager a while back that tracks windows, allows you to easily close them, and most importantly (for my app I suppose), can prevent the same window from being opened twice, and if encountered, will simply focus that window.

The code is for MS AJAX but could easily be adopted for other platforms.

To use it, you need to register it globally via the pages Load event:

Sys.Application.add_load(function(sender, args) {
                window.popupWindowManager = new Mbccs.Psp.Web.Manager.PopupWindowManager(); 
            });

And to open a window (using the default height and width):

window.popupWindowManager.openWindow('myPage.aspx', false);

If you want to override the width/height:

window.popupWindowManager.openWindow('mypage.aspx', false, 800, 800)

The code looks like:

Mbccs.Psp.Web.Manager.PopupWindow = function Mbccs$Psp$Web$Manager$PopupWindow(url, handle, allowDuplicates) {
    this._url = url || null;
    this._handle = handle || null;
    this._allowDuplicates = allowDuplicates;
}

Mbccs.Psp.Web.Manager.PopupWindow.prototype = {
    get_url : function Mbccs$Psp$Web$Manager$PopupWindow$get_url() {
        return this._url;
    },
    get_handle : function Mbccs$Psp$Web$Manager$PopupWindow$get_handle() {
        return this._handle;
    },
    get_allowDuplicates : function Mbccs$Psp$Web$Manager$PopupWindow$get_allowDuplicates() {
        return this._allowDuplicates;
    }
}
Mbccs.Psp.Web.Manager.PopupWindow.registerClass('Mbccs.Psp.Web.Manager.PopupWindow');

Mbccs.Psp.Web.Manager.PopupWindowManager = function Mbccs$Psp$Web$Manager$PopupWindowManager() {   
    this._windows = [];   
}

Mbccs.Psp.Web.Manager.PopupWindowManager.prototype = {
    openWindow : function Mbccs$Psp$Web$Manager$PopupWindowManager$openWindow(url, allowDuplicates, width, height) {
        var allowOpen = true;
        var previousWindow = null;
        var previousWindowIndex = -1;
        var windows = this._windows;
        // Check for existing
        for(i = 0; i < windows.length; i++) {
            if(windows[i].get_url() == url) {
                allowOpen = windows[i].get_allowDuplicates();
                previousWindow = windows[i];
                previousWindowIndex = i;
                break;
            }
        }       
        if(!allowOpen) {
            if(previousWindow.get_handle().closed) {
                Array.removeAt(this._windows, previousWindowIndex);
                allowOpen = true;
            }
        }
        if(allowOpen) {
            var _width = width || 750;
            var _height = height || 700;
            var winName = 'win' + Math.floor(Math.random() * 100 + 1);
            var curWin = window.open(url, winName, 'width=' + _width + ',height=' + _height + ',resizable=yes,scrollbars=yes');                   
            var win = new Mbccs.Psp.Web.Manager.PopupWindow(url, curWin, allowDuplicates);                       
            this._windows.push(win);
            return win;
        } else {
            previousWindow.get_handle().focus();
            return previousWindow;
        }
    },
    closeAll : function Mbccs$Psp$Web$Manager$PopupWindowManager$closeAll() {
        var curWin = this._windows.pop();
        while(curWin != null) {
            curWin.get_handle().close();
            curWin = this._windows.pop();
        }
    }   
}

Read More
Posted in | No comments

Monday, 7 July 2008

Using Virtual Machine Manager 2008 to manage Virtual Server 2005

Posted on 16:13 by Unknown

I was trying to add a Virtual Server 2005 host to a Virtual Machine Manager 2008 Beta and I kept receiving the following error:

Error (421)
Agent installation failed on MBC02.mbccs.internal because of a WS-Management configuration error. 

Recommended Action
See the Virtual Machine Manager Help for information about configuring WS-Management.

 

Of course, being a beta product, that help section didn't exist and a search for "WS-Management" didn't yield anything.  WS-Management is installed by adding "Hardware Management" from Windows Components > Management and Monitoring tools (WinRM service), and this was installed on my server so I was pretty confused as to why I was receiving this message.

It turns out that you need to install WS-Management v1.1 which is provided as a hotfix from Microsoft.  You can download it from http://www.microsoft.com/downloads/details.aspx?FamilyID=845289ca-16cc-4c73-8934-dd46b5ed1d33&displaylang=en.

 

Hope this helps!

Read More
Posted in | No comments

Wednesday, 25 June 2008

Decent online monitor calibration tool

Posted on 16:46 by Unknown

While I don't doubt that an external calibration tool is better for calibrating your monitor, I came across one online that yielded good results for my Dell 2009W 20" Wide Screen LCD's:  http://www.lagom.nl/lcd-test/

Read More
Posted in | No comments

Another MacBook hard drive bites the dust

Posted on 13:21 by Unknown

I've had my MacBook 2.16GHz for just under two years now, and I've just had to replace the hard drive for a second time (mind you, this time not under Apple's warrantee).

With most laptops, this would not be much of a surprise to me - after all, most laptops tend to take a beating, and this type of failure is somewhat normal.  The thing is, this laptop is used almost exclusively for testing; it sits on my desk 340 days of the year without moving - the power cord is tie wrapped to my desk even.

If my friends are reading this, they're probably thinking  "Steven is on one of his anti-Apple rants again," and while that might be partially true, the point I'm trying to make (or the myths I'm trying to dispel rather) is simple: MacBooks are not more reliable than Dell, HP, or Lenovo laptops.   They all use almost identical drives, mother boards, video cards and RAM (the RAM I pulled out of this recently was Samsung).

That being said, my experience with this particular MacBook is that it is actually significantly less reliable than other laptops I've owned.  My general feeling is that it suffers from a heat dissipation problem.  The vents on this unit are few and small, and under most of my use, the fan has to run at what seems to be full blast. When I compare this to similar Dell laptops that I've owned/used, they seem to have way better ventilation, and as a result, the fans seem to run less frequently.

Good thing new drives are cheap!

Read More
Posted in | No comments
Newer Posts Older Posts Home
Subscribe to: Posts (Atom)

Popular Posts

  • How to change the temperature scale on a Honeywell T6575 Thermostat
    [The complete documentation can be found at http://customer.honeywell.ca/techlit/pdf/95c-00000s/95c-10897.pdf ]   This was bugging me fo...
  • Why does iTunes setup need to close Outlook?!
    Everytime I update iTunes I remember why I left it so long - the install process is quite annoying! Can someone please explain to me why it...
  • Dell 2009W's Finally Arrive
    I had previously   written about the new Dell 2208WFP 22" Wide Screen LCD's that I had purchased and immediately sent back due to ...
  • Mac OSX 10.5.2 Freezing Intermittently
    I've been having an issue with my MacBook (you know, that computer I hide under my desk most of the time) where intermittently, the UI w...
  • Recursively finding controls - where to start?
    I love hearing about bugs and problems in components I have authored.  Most people hate hearing about bugs (I assume because they like to th...
  • ScottGu’s Color Scheme for Visual Studio 2010
    ScottGu was nice enough to provide the world with his awesome Visual Studio 2008 color scheme.  I’ve been using this for many years now an...
  • Windows Search 4.0 Released .....and searching finally works!
    I've been dealing with Outlook 2007's search problems since installing it way back then.  Most frequently, I'd search a keyword;...
  • How to query your BES database for a list of users
    I was asked to generate a list of all our BES users, including their name, phone number, PIN, IMEI and device number.  Sure, I could have co...
  • C# – Converting IP’s to Numbers and Numbers to IP’s in 2 lines of code
    I don’t know why everywhere I searched had such complex implementation of this, but converting from a dotted IP to a number (integer) and ba...
  • Using SQL PIVOT with non-aggregate column
    I was banging my head on my desk for a while over this one, hopefully this will save you the pain… I wanted to use SQL 2005’s PIVOT functi...

Blog Archive

  • ▼  2012 (1)
    • ▼  February (1)
      • An Experiment with Google Services & Page Speed
  • ►  2010 (1)
    • ►  April (1)
  • ►  2009 (7)
    • ►  December (1)
    • ►  November (1)
    • ►  October (1)
    • ►  July (1)
    • ►  April (2)
    • ►  February (1)
  • ►  2008 (36)
    • ►  November (3)
    • ►  October (2)
    • ►  September (1)
    • ►  August (1)
    • ►  July (2)
    • ►  June (6)
    • ►  May (4)
    • ►  April (1)
    • ►  March (4)
    • ►  February (7)
    • ►  January (5)
  • ►  2007 (35)
    • ►  December (1)
    • ►  November (9)
    • ►  October (3)
    • ►  September (6)
    • ►  August (7)
    • ►  July (9)
  • ►  2006 (3)
    • ►  May (3)
Powered by Blogger.

About Me

Unknown
View my complete profile