Archive

Posts Tagged ‘Developer’

VirtualBox 3.2.0 Beta 1 Released!

May 3rd, 2010 No comments

Finally downloaded the latest 3.2.0 release of VirtualBox today and gave it ago!

From the forum post for this pre-release.

VirtualBox Version 3.2.0 is a major update. The following major new features were added:

  • Following the acquisition of Sun Microsystems by Oracle Corporation, the product is now called Oracle VM VirtualBox and all references were changed without impacting compatibility.
  • Experimental support for Mac OS X guests
  • Memory ballooning to dynamically in- or decrease the amount of RAM used by a VM (64-bit hosts only) (see the manual for more information)
  • CPU hot-plugging for Linux (hot-add and hot-remove) and certain Windows guests (hot-add only) (see the manual for more information)
  • New Hypervisor features: with both VT-x/AMD-V on 64-bit hosts, using large pages can improve performance (see the manual for more information); also, on VT-x, unrestricted guest execution is now supported (if nested paging is enabled with VT-x, real mode and protected mode without paging code runs faster, which mainly speeds up guest OS booting)
  • Support for deleting snapshots while the VM is running
  • Support for multi-monitor guest setups in the GUI (see the manual for more information)
  • USB tablet/keyboard emulation for improved user experience if no Guest Additions are available
  • LsiLogic SAS controller emulation
  • RDP video acceleration
  • NAT engine configuration via API and VBoxManage
  • Guest Additions: added support for executing guest applications from the host system
  • OVF: enhanced OVF support with custom namespace to preserve settings that are not part of the base OVF standard

In addition, the following items were fixed and/or added:

  • VMM: fixed crash with the OpenSUSE 11.3 milestone kernel during early boot (software virtualization only)
  • VMM: fixed OS/2 guest crash with nested paging enabled
  • VMM: fixed Windows 2000 guest crash when configured with a large amount of RAM (bug 5800)
  • VMM: fixed massive display performance loss (AMD-V with nested paging only)
  • Linux/Solaris guests: PAM module for automatic logons added
  • GUI: guess the OS type from the OS name when creating a new VM
  • GUI: added VM setting for passing the time in UTC instead of passing the local host time to the guest (bug 1310)
  • GUI: fixed seamless mode on secondary monitors (bugs 1322 and 1669)
  • GUI: added –seamless and –fullscreen command line switches (bug 4220)
  • Settings: be more robust when saving the XML settings files
  • Mac OS X: rewrite of the CoreAudio driver and added support for audio input (bug 5869)
  • Mac OS X: external VRDP authentication module support (bug 3106)
  • Mac OS X: Moved the realtime dock preview settings to the VM settings (no global option anymore). Use the dock menu to configure it.
  • Mac OS X: added the VM menu to the dock menu
  • 3D support: fixed corrupted surface rendering (bug 5695)
  • 3D support: fixed VM crashes when using ARB_IMAGING (bug 6014)
  • 3D support: fixed assertion when guest applications uses several windows with single OpenGL context (bug 4598)
  • 3D support: added GL_ARB_pixel_buffer_object support
  • 3D support: added OpenGL 2.1 support
  • 3D support: fixed Final frame of Compiz animation not updated to the screen (Mac OS X only) (bug 4653)
  • Added support for virtual high precision event timer (HPET)
  • LsiLogic: Fixed detection of hard disks attached to port 0 when using the drivers from LSI
  • NAT: fixed ICMP latency (non-Windows hosts only; bug 6427)
  • Keyboard/Mouse emulation: fixed handling of simultaneous mouse/keyboard events under certain circumstances (bug 5375)
  • Shared folders: fixed issue with copying read-only files (Linux guests only; bug 4890)
  • OVF: fixed mapping between two IDE channels in OVF and the one IDE controller in VirtualBox

Bootilicious! Download links are on the site (updated for BETA2).

  • Share/Bookmark

Multi-tasking in style on the Android Platform

May 2nd, 2010 No comments

An interesting article posted on the Android Developer Blog from Dianne Hackborn (born to hack!) who discusses the way multi-tasking works on Android. Recommended reading as it goes beyond how it works (and why!) and offers some suggestions on how to make the most of it!

  • Share/Bookmark

Sunshine of summer: Java EE6, Glassfish 3 and Netbeans 6.8 plus TeamCity 5!

December 12th, 2009 No comments

What a whopper of a weekend, Sun has ratified Java EE 6 and also released Glassfish 3 and NetBeans 6.8 to celebrate. If that wasn’t enough JetBrains has also released TeamCity 5!

You can read all about the Sun releases on InternetNews and catchup with whats new in Java EE 6 Overview from Suns site.

Next weekend its time to move Confluence & Jira (Glassfish 2) and TeamCity 5 (Tomcat) to Glassfish 3 in a opensolaris zone and see how things progress. Did I mention I love the zones in OpenSolaris?

  • Share/Bookmark

DailyWTF: WHAT.THE.FOR LOOP STOOGE.

December 3rd, 2009 No comments

There’s no way to explain this apart from WTF!

I’m speechless.

  • Share/Bookmark

Some changes in .NET BCL 4.0

November 21st, 2009 1 comment

I’ve been porting a few products to .NET 4.0 and came across some cool new additions in .NET 4.0 which will be quite useful for developers.

Strings

Streams

Remember writing this before to copy one stream to another?

public static void CopyTo(this Stream input, Stream output)
{
byte[] buffer = new byte[2048];
while (true)
{
int read = input.Read (buffer, 0, buffer.Length);
if (read <= 0)
return;
output.Write (buffer, 0, read);
}
}

Now you don’t need to, just use the Stream.CopyTo() method.

inputStream.CopyTo(output);

Checking for 64bit-ness

Previously to detect a 64bit operating system you would either P/Invoke out and call the IsWow64Process in Kernel32, looked at the “PROCESSOR_ARCHITECTURE” environment variable or even easier (and completely managed code) way of checking the size of a Pointer.

public static bool IsWin64
{
return (IntPtr.Size == 8);
}
public static bool IsWin32
{
return (IntPtr.Size == 4);
}

Now you can simply use the Environment class that comes with two new properties.

WPF 4.0 Improvements

There are simply too many to list, see the article on ScottGu‘s blog about WPF4 and VS2010/.NET 4.0.

One very important tweak are the Text Rendering improvements that TextBlock‘s now have a new TextOptions.TextFormattingMode that greatly improves the quality of text rendering.

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<TextBox TextOptions.TextFormattingMode="Ideal" FontSize="11">ThushanFernando.com - Ideal</TextBox>
<TextBox TextOptions.TextFormattingMode="Display" FontSize="11">ThushanFernando.com - Display</TextBox>
<TextBox TextOptions.TextFormattingMode="Ideal" FontSize="16">ThushanFernando.com - Ideal</TextBox>
<TextBox TextOptions.TextFormattingMode="Display" FontSize="16">ThushanFernando.com - Display</TextBox>
</StackPanel>
</Grid>
</Window>

Here’s a pretty picture showing the difference between using Ideal and Display. The difference is noticable for text sizes below 15.

MainWindowAlternatively you can place it in the Window so all child controls will render nicely.

<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow - Display" Height="350" Width="525"
TextOptions.TextFormattingMode="Display">
<Grid>
<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
<TextBox FontSize="11">ThushanFernando.com</TextBox>
<TextBox FontSize="16">ThushanFernando.com</TextBox>
</StackPanel>
</Grid>
</Window>

There are LOTS more coming in .NET 4.0 that will make anyone doing .NET development today just wet their pants over, just read the article on MSDN by Justin Van Patten about Whats new in the BCL in .NET 4.0 and also posted on the BCL team blog.

  • Share/Bookmark

Thunderbird 3.0 Beta 4 fixes corrupted summary files!

October 6th, 2009 No comments

Since ditching Outlook after Outlook 2003 (Outlook 2007, 2003 was fine in comparison) came around I’ve been using Mozilla Thunderbird as my ever faithful email client. Its fast, lightweight and not as bloated as Outlook is – couple it with Lightning and you’ll be laughing!

Thunderbird 3 brings some cool features for users with the biggest being tabbed message windows (and calendars etc). If you downloaded the new 3.x betas make sure you get Beta 4, the long standing issue with the Messagebox Summary file being corrupt has been finally addressed. Its been a pet hate for a long time now, sometimes searching a folder can corrupt an MSF (means having to go and remove the MSF so it rebuilds the index!), no more! Thunderbird will now fixup any problematic MSF files in the background, yay!

The search in Thunderbird 3 is a massive improvement over the other clients I’ve used, give it a go!

After you download Thunderbird, make sure you get the latest nightly for Lightning Calendar Addon and Google Provider and use them.

  • Share/Bookmark

Learning Scala from a Java perspective

October 1st, 2009 No comments

I’ve been reading up and keeping abreast of both the .NET world and Java world this year, both have some mighty exciting advancements coming – teaser: its all about the Pentiums! I’ll try and cover some of my research into parallel work later.

One of the other areas I’ve been keen on (after hearing from the leader of our pack, Mr Wolfe) was Scala and came across a incredibly useful resource by Daniel Spiewak on looking at Scala from a Java developers perspective.

The linked article is a ’roundup’ of the many posts he’s done on the topic and covers the many facets of Scala and gives it in a Java developers perspective. Highly recommended reading if your just starting out in understanding Scala and functional programming general. I have to admit, Scala is growing on me.

F# is the key functional programming language in .NET and whilst I’ve seen them being compared quite frequently, I feel they target to different areas. From a n00bish-functional-programming perspective, it feels like Scala is all about the OO and F# is more about writing in a functional perspective. But here’s an article from 2007 that may give you a better idea or Brandon Werner‘s article comparing the functional languages.

By the same token, there’s a great introduction to F# that will cover the historical and core language.

I remember messing about 10 years ago with Delphi, VB, Java, C/C++ and thinking this is RAD, but the world seems to be morphing into the functional programming paradigm now.  What better time to start musing with it?

  • Share/Bookmark

Free ApexSql Code code

September 22nd, 2009 No comments

Request your free copy of ApexSQL Code by following the directions below!

We are launching a new promotion for the new Online Template Library of ApexSQL Code 2008.

UPDATE – ApexSQL Code for FREE! A $249 value

In an effort to really jump start the ApexSQL Code community and get more templates we are temporarily offer for free, no strings attached, full licenses of ApexSQL Code 2008 w/ 1 yr Maint to anyone who requests one.

The license will be for ApexSQL Code w/ 1 yr Maintenance for Support and Upgrades.

To request it email sales@apexsql.com and include “Free ApexSQL Code” in the subject header. We will process the request and send you your own individual key within 1 business day. These will be fullfilled via the same process as people who purchase them – the only difference is the cost is $0.

We encourage people to post feedback on our forums (bugs, feature requests etc) and post templates.

My goal is to continue this until we get a good number of user posted templates on our Online Template Library.

You will be able to continue to use your key and ApexSQL Code 2008 ad infinitum. To upgrade to ApexSQL Code 2009 (when it is released) would only require a renewal fee of 25% of purchase price. Currently $50.

This promotion could end at any time so get your request in ASAP. The keys will be viable though after the promotion ends.

Note: If you don’t receive a key in 2 business days, please send a second request (third, call etc). We have gotten a lot of requests and it is inevitable that some might get missed on the first time around.

Hurry hurry hurry!

Get Apex SQL Code for free!

We are launching a new promotion for the new Online Template Library of ApexSQL Code 2008.

UPDATE – ApexSQL Code for FREE! A $249 value

In an effort to really jump start the ApexSQL Code community and get more templates we are temporarily offer for free, no strings attached, full licenses of ApexSQL Code 2008 w/ 1 yr Maint to anyone who requests one.

The license will be for ApexSQL Code w/ 1 yr Maintenance for Support and Upgrades.

To request it email sales@apexsql.com and include “Free ApexSQL Code” in the subject header. We will process the request and send you your own individual key within 1 business day. These will be fullfilled via the same process as people who purchase them – the only difference is the cost is $0.

We encourage people to post feedback on our forums (bugs, feature requests etc) and post templates.

My goal is to continue this until we get a good number of user posted templates on our Online Template Library.

You will be able to continue to use your key and ApexSQL Code 2008 ad infinitum. To upgrade to ApexSQL Code 2009 (when it is released) would only require a renewal fee of 25% of purchase price. Currently $50.

This promotion could end at any time so get your request in ASAP. The keys will be viable though after the promotion ends.

Note: If you don’t receive a key in 2 business days, please send a second request (third, call etc). We have gotten a lot of requests and it is inevitable that some might get missed on the first time around.

Get your developers the tools they need to do the job fast and right – ApexSQL Developer Studio is the ultimate combat multiplier for SQL Developers. 7 Best of Class tools – one download, install and discounted price. Click Here for more info.

  • Share/Bookmark

I’ve made a huge mistake: To be a computer tech or not to be a computer tech.

June 29th, 2009 No comments
I've made a huge mistake

I've made a huge mistake

An article in The Age about computer techs and their chosen lifestyle made me realise just what a mistake we’re making.

Long story short: now I run a computer repair business.

Babes, parties, status, wealth – these are just some of the things you’ll be missing out on by becoming a computer tech.

But that’s OK. If you have what it takes to be a computer tech, you will have a genetic predisposition to driving away members of the opposite sex. In fact, members of any sex.

I’m just kidding.

Oh darn, I was just about to enjoy being a techie. But wait he’s just kidding.

How do you know if you have this personality type? If you have more computer magazines than girlie magazines, and if the thought of an Intel Core 2 Quad Q9550 with 12mb L2 cache running at a clock speed of 2.83GHz and a bus speed of 1333 MHz stirs the kind of feelings usually associated with procreation, you are well on your way to a career in computing.

Uh-oh, this one time, at band-camp LAN camp I was talking about the new Intel i7‘s coming up and oh noooooo! Just remembered I also have far too many developer mags lying around and no Womens Weekly nor Cosmopolitan‘s. Doom is imminent, it was also a kick-ass game made by those clever folks at id Software who just the other day got bought out by Zenimax Media, they’re also working on Doom 4 powered by the RAGE engine did you know? Doh, I’m digging my own grave aren’t I by going on? I better stop, you just go and read the article yourself before I start admitting to something like my crazy adventures in Linux.

But if your a hottie and you see a computer-techno-nottie, just go and give them a hug. They need it, those tradies, they’ve got their stuff together, so do the sparkies. We programmers, gamers who resort to online dating and wierdly obsessed facebook/twitter stalkers need love too. Who knows, we might even get around to fixing that problem with the mouse moving around the screen all by itself one day.

One things for sure, the future is not set, there is no fate but what we make for ourselves.

  • Share/Bookmark

.NET Tools: NDepend static analysis tool, leave T-Pain behind.

June 1st, 2009 5 comments

The release of Visual Studio 2008 brought along Code Metrics to the IDE‘s ‘out-of-the-box’ functionality (I’ve been overusing that phrase thanks to our resident CRM Consultant at work!). This was a major boon for .NET developers to get a clear idea of health of what they write, Visual Studio 2005 gave FxCop integration that provided much needed static code analysis for .NET assemblies. Together these tools provide a peek into the deep depths of the project your working on, it benchmarks the correctness, performance and security implications, localisation, design issues amongst other metrics. Damn useful if you’ve inherited – as I often do in my consultancy life – someone else’s code base with little or no documentation. They say code is the best documentation right? (oh gosh, not one of those projects!)

Whilst both the metrics in VSNET and FxCop give you a low level understanding of your code – based on framework guidelines, what if you want more in depth understanding of what your ‘working with’ rather than how you use the .NET framework? How many methods derive from a certain control – remember we’re doing static analysis here, no Resharper loving! Or how maintainable the assemblies are. What are the methods with more than 30 lines of code? (hint: need to refactor!)

This is where NDepend comes in. NDepend is a static code analysis tool on steroids – and I’m not exaggerating here. You will love NDepend long time as I do right now.

Load up NDepend, point to your assemblies, then let NDepend think a little and it will spit out a plethora of information for you to take in.

The NDepend UI – VisualNDepend

There is however one caveat, the first time you use it – and I know this will happen to the majority of users, you’ll probably get overwhelmed with what you’ll be displayed with:

NDepend Paint.NET Analysis

NDepend Paint.NET Analysis

So you can reproduce this with the trial of NDepend, I’m looking at the latest Paint.NET release. But once you get over your initial sense of wonder and disbelief you can start to demystify the UI and the beauty of NDepend. Dont worry, theres plenty of documentation and help to get you on your way, I’ll cover those later :-)

First, we have a Class Browser to the left that lists all the assemblies that are being anaylsed – this includes the assemblies you selected (black!) and the assemblies that were added automajically by NDepend as dependencies (blue).

To the right of the class browser is our Metrics visual representation (those black balls actually mean something – Marty!). We can tell NDepend to show us (visually via the Code Metrics display) the top 10,20,50-5000 methods. Double click on any item in the view and it will automatically jump to the source (in the working VS.NET instance if available) for you to inspect further. Theres also deep integration with Visual Studio too – again later!

Underneath the Metrics window we have the Dependency Graph on the left and the Dependency Matrix on the right. This view gives us an idea of the coupling between the assemblies in our list.

The World of CQL

Then we have – what makes me get jiggy wif it, the CQL Query window. CQL is Code Query Language, and its just as your thinking, its SQL for Code. Armed with a basic understanding of CQL you can get some really useful information about your project – infact the report that gets generated by NDepend already contains a bunch of metrics for you and comes with over 85 metrics to begin with in a heavily documented specification – with examples. Writing a simple bit of CQL like the one below, will give you a representation of all public methods that contain more than 30 lines of code.

SELECT METHODS WHERE NbLinesOfCode > 30 AND IsPublic

Neat huh? Thats only an example from the features page, there’s lots more. We can even setup a constraint to notify us when we exceed a threshold.

WARN IF Count > 0 IN SELECT METHODS WHERE NbILInstructions > 200 ORDER BY NbILInstructions DESC

This will warn us when we have methods that exceed 200 IL instructions. You can even combine a bunch of them and workout a metric to benchmark which methods you need to refactor, heres one from the report that gets autogenerated by the VisualNDepend tool:

WARN IF Count > 0 IN SELECT TOP 10 METHODS /*OUT OF "YourGeneratedCode" */ WHERE 

                                           // Metrics' definitions
     (  NbLinesOfCode > 30 OR              // http://www.ndepend.com/Metrics.aspx#NbLinesOfCode
        NbILInstructions > 200 OR          // http://www.ndepend.com/Metrics.aspx#NbILInstructions
        CyclomaticComplexity > 20 OR       // http://www.ndepend.com/Metrics.aspx#CC
        ILCyclomaticComplexity > 50 OR     // http://www.ndepend.com/Metrics.aspx#ILCC
        ILNestingDepth > 4 OR              // http://www.ndepend.com/Metrics.aspx#ILNestingDepth
        NbParameters > 5 OR                // http://www.ndepend.com/Metrics.aspx#NbParameters
        NbVariables > 8 OR                 // http://www.ndepend.com/Metrics.aspx#NbVariables
        NbOverloads > 6 )                  // http://www.ndepend.com/Metrics.aspx#NbOverloads
     AND 

     // Here are some ways to avoid taking account of generated methods.
     !( NameIs "InitializeComponent()" OR
        // NDepend.CQL.GeneratedAttribute is defined in the redistributable assembly $NDependInstallDir$\Lib\NDepend.CQL.dll
        // You can define your own attribute to mark "Generated".
        HasAttribute "OPTIONAL:NDepend.CQL.GeneratedAttribute")

Whats more, because NDepend is language neutral you can query any managed assembly. Theres so much goodness you can get from CQL, most of your needs are already documented in the specifications.

Healthy coder == healthy code right?

NDepend also gives us a representation of what state the code is in with the generated report.

Paint.NET Abstractness vs Stability

Paint.NET Abstractness vs Stability

This metric – based on Robert C Martin’s Abstractness vs Stability paper. To quote the paper’s Abstract directly:

This paper describes a set of metrics that can be used  to measure the quality of an object-oriented design in terms of the interdependence between the subsystems  of  that design.   Designs which are highly interdependent tend to be rigid, unreusable and hard to maintain.
Yet interdependence is necessary if the subsystems of  the design are to collaborate.  Thus, some forms of dependency must be desirable,
and other forms must be undesirable.   This paper proposes a design pattern in which all the dependencies are of the desirable form. Finally, this paper describes a set of  metrics that measure the conformance of a design to the desirable pattern.

In the case of Paint.NET we can see that we’re all over the bottom corner of the image. What does this mean?

First we have the two ends of the scale.

  • Y – Abstractness
    This measures how abstract the assembly is, can it be extended without recompiling? Lots of interfaces and base classes help here.
  • X – Instability
    Measures how much this assembly is utilised by its public interface. For most third party component (from vendors) they’ll fall into the less instability area, so you have to ensure that any changes are properly managed to avoid breaking clients.

Then we have two zones.

  • Zone of uselessness
    This is when an assembly is very abstract and extensible but no-one uses it you’ll find it closer to this area.
  • Zone of Pain
    This is when an assembly is referenced (or have lots of dependants) and is not very extensible – no abstract implementations.

One thing to note though, the words ‘Pain’ and ‘Uselessness’ may be a bit harsh in its wording. If you – like me – have a core ‘framework’ that you write have it locked down and reference it muliple projects then they should indeed fall into the ‘Zone of Pain’ assuming that you have ensured its stability and realise the consequences of breakages later on. Most third party products will fall into here – we’re talking your UI Controls, Sharp components etc.

Ideally you’d want to be hovering in the green area cosey with the line in the middle for your core product.

Would you like Documentation with that?

As mentioned earlier, NDepend comes with lots of help, firstly we have – what I used, the Getting Started screencasts, tutorials, CQL Documentation with *actual* usable examples.

Scott Hanselman has also released a nice cheatsheet for NDepend that will go well hanging next to your PC.

Integrating NDepend to Integration Server

At home (and at work) we use Jetbrains TeamCity, you can easily integrate NDepend into TeamCity by following Laurent Kempé directions.

If you use CruiseControl.NET, you’ll find Robin Curry‘s guide on integrating NDepend to NAnt and CruiseControl.NET useful.

Integration with your favourite tools

NDepend fully integrates with Visual Studio and Reflector.

NDepend Options Integration

NDepend Options Integration

The integration in Reflector – which reflect that of Visual Studio integration.

NDepend Reflector Integration

NDepend Reflector Integration

Gives you one click access to some common metrics.

Conclusion

If you want to get a good understanding of your project – or someone elses, metrics will help you greatly to give you an impression of the health of the project and NDepend will come in quite handy for you. We only _barely_ scratched the surface with this blog post, I’ve spent a good chuck of a week using NDepend and find it ubber useful in my work life – partly because it involves reparing the mess others have left – but it also serves as a good reminder of how you should write code.

References

Fine Print: Full Disclosure

I was offered a license to NDepend by Patrick Smacchia and given the chance to write my thoughts on this product, I was not paid to review this product – feel free to send some moola if you want to though ;-)

  • Share/Bookmark