Tag Archives: C#

Job: .NET Software Developer – Edinburgh

Sigma Seven Limited are looking for a .NET software developer to work out of their Edinburgh office, near Holyrood, beside the Scottish Parliament.

Job Description
This vacancy has arisen from increased demand from our customers and forms a key part of our continued expansion plans. As a part of our development team here at Sigma Seven you have the chance to make a real impact on the growth of the business, working on our industry-leading mobile mapping product “GeoField” – for tablets and ultra-mobile PCs.

This role involves working on a variety of projects, both implementing customer solutions and developing core product enhancements using the latest development tools, targeting leading-edge mobile technologies.

Our development team works collaboratively to deliver innovative solutions to our customers, working closely with customer project teams, and adhering to defined project plans. As part of this talented team, you will be involved in making decisions throughout the software development process from initial concept and design, through coding and operational handover, with an emphasis on using your own initiative to push the boundaries of our product and solution capabilities. The nature of our work requires excellent communication skills and an enthusiastic approach to problem solving and team work.

Desired Skills & Experience
Candidates will ideally have 3 or more years of commercial software development experience, and should be passionate and able to demonstrate expertise in the following:

  • .NET 4.0, C#
  • Experience of the full software development lifecycle, from requirements gathering and design through to solution testing and operational support
  • Working closely with clients and end-users

The following skills and experience would be an advantage:

  • A degree in software engineering, computer science or a related subject
  • Experience of GIS and spatial databases
  • WPF
  • LINQ
  • XML

Further information and the application process can be found here.

Event – UK – 16/07/2010 – Bournemouth Pier! #nxtgenug

NxtGenUG are pleased to announce their annual conference Fest10 will be taking place on Bournemouth Pier this year on Friday the 16th July 2010. It’s a great opportunity to take the family to the Seaside for the weekend, and catch up on technology. The best thing is attendance to the conference is free to members and just £59.95 for non-members.

Speakers
We have a great speaker line up this year, Google’s Jon Skeet will be talking about C#, Microsoft’s Glenn Block is coming over from Redmond to talk about MEF, Ryan Simpson will be giving us the lowdown on F#. We’ll also be having NxtGenUG veterans Mike Taulty, on OData and Chris Hay on Azure, Plus Marcus Perryman will be talking about one of the hottest technologies this year Windows Phone 7.

You can find a list of speakers and their sessions here:
http://www.nxtgenug.net/fest10/Sessions.aspx

To register simply click here and follow the instructions on screen.

Parking, Hotels and Timings
Full details about parking, hotel accommodation and timings for the day can be found on the Fest10 site. The nearest parking for Bournemouth Pier is either in the Bournemouth International Centre (BIC – 20) car park, the Bournemouth Pavilion car parks (19/24) or the car park next to the Royal Bath hotel (18). However, there is also further car parking available at Eden Glen car park (21), Winter Gardens car park (22) and Beacon Road car park (25).

For Hotels, the RusselCourt is where the evening entertainment will be. Quote: NxtGenUG when booking, otherwise Bournemouth has a large amount of hotels, including the Best Western Hotel Royale.

Geek Dinner
It’s the Fest10 geek dinner – normal rules apply – pay for your own food/drink, and engage in great conversation, and eat fish and chips at Harry Ramsden’s. To register for the geek dinner, click here.

Post Fest Party
We’ll also be having a post Fest Party at the RusselCourt Hotel – If you’ve brought your family down for the weekend feel free to bring them along. Just register on the site and drop us an email on how many people you’ll be bringing with you to enquiries@nxtgenug.net

Sponsorship
NxtGenUG would like to thank DevExpress, our gold sponsor, along with Microsoft, RedGate, PluralSight and Apress for their support in making this event possible.

4 * job openings in Edinburgh C# Dev, UX, SQL Server, SysAdmin

Money Dashboard are looking to fill four positions: C# Developer, UX Designer, SQL Svr DBA,
and SysAdmin.

I have the job specification for the C# Developer role, you can read it below. If you are interested in the other roles, please contact Money Dashboard direct – there’s an e-mail address at the end of the post, or there’s a jobs link on their web-site. Similarly, if you need to know more about the salary and benefits, please contact Money Dashboard directly.

C# .NET Senior Developer
We are looking for a pro-active experienced senior C# .NET developer, programmer, engineer and guru to help take our B2C application to masses and beyond. Our application uses the latest in development methodologies, technologies and infrastructure and is leading the way in Silverlight-based Rich Internet Applications. You will work with the rest of the team on rapidly developing our front end application as well as its complex framework, middleware and supporting systems while utilising input from product management and design. This is a lead role involving extensive collaboration with the rest of the business and with an opportunity to contribute to all stages in the development process.

This is a focused development role with an opportunity to get involved in all a broad range of technologies including the core Silverlight GUI as well as mobile, desktop and offline components.

You will be involved in…

  • Lead developer for GUI, application, business and data systems.
  • XAML and Silverlight 3+ integration with .Net and SDS for RIA solutions.
  • C# and .Net 3.5+ using the latest WPF and WCF technology to build business and data solutions.
  • Develops stored procedures, SQL and SSIS/SSRS as needed.
  • Works closely with business and technical teams to understand, document, design and code processes.
  • Works closely with technical and business teams to understand, document and design and code integration.
  • Will lead the translation of concepts, requirements and source mapping documents into solutions.
  • Design, develop, test, optimize and deploy .Net applications and SQL data components and related functions.
  • Develop online, mobile, desktop and offline applications, controls and gadgets in support of the core application.

You should have…

  • Candidate must have a deep understanding of application design, development, layout and presentation.
  • 5+ years experience of .Net development, .NET web services and .Net principles and architectures including the concepts, designs and usage of software components, deployments and packages.
  • Experience developing C# applications
  • Extensive experience and sound understanding of in ASP.NET, XML (with some XAML experience highly desirable), Linq, Windows Forms, WCF, Silverlight and Windows Services and SQL/Stored procedures
  • General experience with Javascript, CSS, xHTML and DOM.
  • Must be able to Analyze requirements, design and specification documents, and provide instructions to other team members.
  • Responsible for version and release management in development, testing, staging and production environments.
  • Manage change control and configuration management for deliverables.
  • Must demonstrate strong verbal and written communication skills and be able to interface with all levels of business and IT.
  • Work well in a team-oriented environment managing multiple priorities, following a project plan and meeting project delivery dates.
  • Highly organized individual with excellent decision making, analytical, problem solving and presentation skills.
  • Excellent communication skills. Must be able to talk and understand clear English.
  • BS degree in Computer Science or equivalent professional experience

Money Dashboard is an easy to use, secure and free online personal finance service that helps people manage their money more effectively.

We will soon be launching our service to the general public and are looking for a few key individuals to join our ambitious team who believes in excellence and hard work. What we offer is involvement in a cutting edge proposition, a great working environment, challenges and just rewards. If you think you’re up for the challenge why don’t you email us at jobs@moneydashboard.com

Programming Challenge – Original Pascal Submission

Earlier this week I set a Programming Challenge using an example from my first year in academia. So far it has attracted 60 or so comments and solutions!

I’m particularly impressed with the range of languages that have been used.

Regular day-to-day offerings in C# are there, C# with LINQ, PowerShell and VBScript. “Vanilla” C, C++, Perl, Ruby and Python aren’t left out; neither are Smalltalk, Haskall, Lisp, clojure, Scala, F#, T-SQL, Informix SQL, SyBase SQL, APL, APL2 and A+. 6502 machine code and Excel are in the submission pot to – extreme diamond plotting!

There are even submissions in Octave and J (references here and here)!

I’ve had offers of solutions in JavaScript and jQuery, hopefully they’ll arrive soon!

I haven’t verified it yet, but here’s one of the J solutions, stunningly terse:

It is written in Iverson’s J programming language.

3 :'(],|.@}:)(|.@}.”_1,.])(AB{~i.Y)(_2<\2#i.Y)}'' ''$~2#Y=.>:y(=i.1:)AB=.a.{~65+i.26′”0

by Tracy Harms

That won me “most cryptic” tweet from Stuart!

Naturally I’m pleased, I wasn’t expecting it to be so popular! Huge thanks to all involved so far!

For the sake of completion, I’ve scanned in the original Pascal submission. Here it is:

Oh dear: notice the scandalous indentation after the FOR loop. Cringe.

If I was to write a C# version of the Pascal code, I might end up with something similar to this:


using System;

namespace diamond
{
class Program
{
static void Main(string[] args)
{
char widest_char;
int next_char, finish_char, wide, range, direction, position, spacelength, loop;

widest_char = Console.ReadKey().KeyChar;
Console.WriteLine();

wide = (int)widest_char;
direction = 1;
spacelength = 1;
position = 1;

next_char = 66;
finish_char = 65;

range = 2 * (wide - finish_char);

// Calculate initial left indent
int mid = wide - 65 + 1;

String firstLetter = Char.ToString((char)finish_char);
firstLetter=firstLetter.PadLeft(mid+1);
Console.WriteLine(firstLetter);

for (loop = 1; loop < range; loop++) { Console.Write(" ".PadLeft(mid - position)); Console.Write((char)next_char); Console.Write(" ".PadLeft(spacelength)); Console.WriteLine((char)next_char); next_char = next_char + (1 * direction); position = position + (1 * direction); spacelength = spacelength + (2 * direction); // Flip direction when the middle of the diamond is reached if (next_char == wide) direction = -1; } Console.WriteLine(firstLetter); Console.ReadLine(); } } }

Back in 1988, I was reasonably pleased with the Pascal solution. Looking at it now, there are a few things I'd probably change, however hindsight with experience is a wonderful thing.

I can't remember how long it took me to write the Pascal version, probably not very long as I had prototyped the solution using BBC Basic V - a programming language that I had been using since I was 13...some five years before I set eyes on the diamond plotter task! I can't recall exactly, but I'm reasonably sure that the BBC Basic version took me about an hour to get working...

Of course, throwing readability, etc. out of the window, were I thinking about writing a similar solution today in 2009, I might find myself writing something similar to this:


using System;

namespace ConsoleApplication5
{
class Program
{
static void Main()
{
int range = Console.ReadKey().KeyChar - 65;
Console.Clear();

Console.WriteLine(String.Format("{0}A", "".PadLeft(range)));
int r = 1, dir = 1;
while ((r > 0) && (range>0))
{
char c = Convert.ToChar(r + 65);
Console.WriteLine(String.Format("{0}{1}{2}{3}", "".PadLeft(range - r),
c, "".PadLeft(r + (r - 1)), c));
if (r == range) dir = -1;
r = r + dir;
}
Console.WriteLine(String.Format("{0}A", "".PadLeft(range)));

Console.ReadKey();
}
}
}

How long did it take me to write a solution today? 30 minutes. 10 minutes of which were spent strangely refactoring for fewer lines of code and terseness. It was interesting writing this version, readability and ability to follow the work-flow came through in the initial version. Then the desire to strip it back to the very basics caught up with me. It's still not perfect, but it does the job. That said, I'm not sure my original Pascal tutor would be hugely happy with it! C'est la vie!

I'll write another post that brings together all the submissions that I've received so far - keep them coming!

052 – Guy Smith Ferrier on Internationali[s|z]ation, VS2008, .net 3.5, C# language features

Tenth the in the Twelve Podcasts of Christmas 2008!

Heroes Happen Here

Stealing a show naming scheme from the NxtGenUG chaps, this is “The One With The Semi-naked man in…”

Luckily it wasn’t our guest, esteemed Internationalisation expert and Microsoft MVP Guy Smith-Ferrier. Andy Westgarth, myself and Guy sat down on the most comfortable seat at this event and chatted about Guy’s session, his user group DotNetDevNet and a host of other things. I decided to edit out the semi-naked man scene in order to keep the flow, however I put it back in near end of the show…every podcast should have a man clad only in boxer shorts, yes?

Despite what it might sound like in this recording, no money changed hands…there will be no cash for questions here, no sir.

I reviewed Guy’s book, .NET Internationalization, over here.

Photos of the event can be found here.

Podcast feed – subscribe here!

This podcast: http://www.craigmurphy.com/podcasts/052-Guy-Smith-Ferrier.mp3

Resources
Guy’s user group, DotNetDevNet
Guy’s blog

The Twelve Podcasts of Christmas 2008
01 – Kyle Baley on ALT.NET and Brownfield Development in .NET
02 – Aaron Parker on Microsoft Application Virtualisation
03 – Caroline Bucklow from IT4Communities: charitable software development
04 – Eileen Brown on IT Professionals, TechNet, Women In Technology & Girl Geek Dinners
05 – Stephen Lamb on security, community, Linux and Twitter
06 – Cristiano Betta on Geek Dinners
07 – David Yack and Jonathan Carter on ALT.NET, MVC and Community
08 – Andrew Fryer on SQL Server 2008 and “upgrade”
09 – Viral Tarpara on Collaboration, SharePoint, Open Source (Port 25) and Community
10 – Guy Smith Ferrier on Internationali[s|z]ation, VS2008, .net 3.5, C# language features
11 – Matt Dunstan on event management, “engagement” and life as an Application Platform Manager
12 – Stephen Lamb on his new role in marketing / PR

Technorati Tags: , , , , , , , , , , , ,

Excel Interop – killing Excel.exe

This posting over at ScottishDevelopers got me thinking, especially since I’ve used Excel and Word from a number of Delphi applications over the last eight years. I have come across this problem in the past (Win32), so I thought it should be fairly easy to chase.

After a bit of research, The Code Project suggested that the Excel process be killed off through code:

Process[] pProcess; 
pProcess = System.Diagnostics.Process.GetProcessesByName("Excel");
pProcess[0].Kill();

Well, that would work, but it might kill off the wrong instance, or kill off the user’s precious ‘expenses’ spreadsheet instead of the one we created.

To help me trace the problem, I used the following code:

using System.Diagnostics;
using System.Runtime.InteropServices;

Excel.Application	excelApp = null;
Excel.Workbook	excelWorkbook = null;
Excel.Sheets	excelSheets = null;
Excel.Worksheet	excelWorksheet = null;
Excel.Workbooks	excelWorkbooks = null;

private void button3_Click(object sender, System.EventArgs e)
{
  excelApp                 = new Excel.ApplicationClass();
  excelApp.Visible  = true;
  excelWorkbooks   = excelApp.Workbooks;
  excelWorkbook = excelWorkbooks.Add(System.Reflection.Missing.Value);
  excelSheets = excelWorkbook.Worksheets;
  excelWorksheet = (Excel.Worksheet)   excelSheets.get_Item(1);
  excelWorksheet.Cells[1,1] = "42";
}

private void button4_Click(object sender, System.EventArgs e)
{
  excelWorkbook.Close (false, System.Reflection.Missing.Value,System.Reflection.Missing.Value) ; 

  excelWorkbooks.Close();
  excelApp.Quit();

  Marshal.ReleaseComObject(excelWorksheet);
  Marshal.ReleaseComObject(excelSheets);
  Marshal.ReleaseComObject(excelWorkbooks);
  Marshal.ReleaseComObject(excelWorkbook);
  Marshal.ReleaseComObject(excelApp);

  excelWorksheet = null;
  excelSheets = null;
  excelWorkbooks = null;
  excelWorkbook = null;
  excelApp = null;

  GC.GetTotalMemory(false);
  GC.Collect();
  GC.WaitForPendingFinalizers();
  GC.Collect();
  GC.GetTotalMemory(true);
}

This code creates an Excel application, populates it, then lets us close it. Invoking the button3 code creates it, button4 removes it.

Now, without the calls to the garbage collector, excel.exe hung around if the code behind button3, button4, button3, button4 is invoked.

In the short-term, I would suggest adding the additional calls to the garbage collector (although, and this confirms it, memory reclamation is not guaranteed). It’s time to read up on the garbage collector and COM Interop.

I used Visual Studio 2003 and Office 2003 to test this.

Technorati Tags: , , ,