Is the DLLImport you want to use supported by the Store?

I know I’m going to forget this within the next 10 mins, so I thought I’d write it down. If you are using DLLImport in your UWP project and you’re not sure if the Store will allow it, then you can check for yourself by looking at the Supported API XML files in the certification kit folder. For me that’s;

C:\Program Files (x86)\Windows Kits\10\App Certification Kit

The files depend on the target architecture but you probably only need to check one of them, e.g. SupportedAPIs-x86.xml

 

 

Problem hosting a LAN game in Unreal Tournament?

Just installed the classic UT from Steam and discovered that LAN gaming doesn’t work. When you try and host a game you get;
Your network configuration may not be compatible with
hosting matches. Please check your router’s manual for
instructions on setting up “Port forwarding” or a “DMZ
server”.

The easiest way around this is to get the Host to write down their IP address. Then they should start a LAN game as normal, ignore the dumb error message. Then the other players start UT open the console (F10) and type; open {Host IP Address}

NB if you the client gets an error complaining that they don’t have Steam Authentication then they should close UT, go to Task Manager and kill any Steam processes and try again.

I checked, it is almost 2016 and we’re having to do this :s

Text sizing, symbols and icons

Consider the following XAML;

<TextBlock Text="W" />

; – displays the letter ‘W’ using the text semantics

<SymbolIcon Symbol="Accept" />

– displays the accept tick symbol

<FontIcon FontFamily="Candara" Glyph="& #x3A3;"/> 

– displays the sigma sign as an font icon

<FontIcon FontFamily="Segoe MDL2 Assets" Glyph="& #xE001;"/>

– displays the accept tick again, but as a font icon from the MDL2 assets font family

<TextBlock FontFamily="Segoe MDL2 Assets" Text="& #xE001;" />

– displays the accept tick again but as a text element.

The above all basically do the same. They differ by the semantics, e.g. a screen reader can make different choices based on a text block vs. font icon. However, a not so obvious difference is how they react to the user changing the text size. The following image shows the above rendered with text set to largest and then back to normal text.

image

As you might be able to see, the TextBlock happily resizes the characters, be it a ‘W’ or the tick. The other mechanisms keep the original size. This is important if you want to create buttons in your app. Should your buttons resize with the text or not? Your choice of how you render the symbol/icon will decide the behaviour. IMO it becomes a question of resize vs. element semantics. ‘You make’s your choice’.

XAML TextBlock Performance gotcha

I’ve been using this.DebugSettings.IsTextPerformanceVisualizationEnabled = true to check on the text performance of my app and noticed this little gotcha. Consider the following code;

    <StackPanel>
        <TextBlock Text="Using text property" />
        <TextBlock>Using text content</TextBlock>
    </StackPanel> 

When you run the app you’ll see the ‘Using text property’ is a pleasing shade of bright green but ‘Using text content’ is not using the optimised text rendering. Cheeky little gotcha. More info (including this) TextBlock

Missing battery indicator icon in Windows 10?

I like to have the remaining battery indicator show in my task bar but after upgrading to Windows 10 I could only see it in the system trays secondary menu. To put it back onto your task bar; Right-Click the task bar->Properties->Notification Area: Customize ->Turn System Icons On/Off

In my case the battery icon was already on. Toggle it off and then back on again. Voila, battery indicator is back on the task bar.

Is there room for Estimates and Forecasting?

Recently I attended the Lean Kanban UK conference and was interested to hear peoples opinions on estimating.

Estimating vs. Forecasting

Dan Brown’s (@KanbanDan) session, ‘Forecasting delivery, with oranges’ (see his blog post). The essence of session was that estimating the cost is in itself an expensive business an can be avoided. If you capture the facts about your deliveries then you can use this for future forecasting. I also believe in this idea as you are now dealing with the facts of the delivery, something that is promoted through the use of Kanban. Sure this still presents the problem that a forecast is not a fact, and as much as you scream the word ‘forecast’ the customer may only ever interpret this as a promise. But at least this way you are not burning the teams time drawing up guesses about the cost. A quote from a client with agile growing pains related to concentrating on cost estimates, ‘we’ve spent all this time talking about the process (estimates), and nothing on the features’. In my experience of software development this is not unusual, and is one of the reasons agile approaches are abandoned.

Estimating cost vs. Estimating Value

The same argument can also be re-written as cost vs. value as highlighted by Allan Kelly (@allankellynet), ‘No Projects, Beyond Projects’. Estimating cost, i.e how long will this take, is the wrong angle to take, estimating the true reason for the development is where the focus should be. At a simple level this is about prioritising what is really required, similar to the approach of the ‘five whys’. This is at the heart of agile but is often lost in the process, we need to deliver value, not just working software.

Ignoring requests for Estimates

So if estimating is bad then why should we do it? We have seen that forecasting can be used, but since that is evidence based it is not always possible or deemed accurate to use. I talked to a number of attendees about this issue and one of the common themes was, ‘we ignore the request’. One technique was to literally ignore the request and just keep delivering until trust was established. Another was to ignore it for the first delivery and then substitute forecasting. I also asked this question to a very well known developer and author, who I’ll think I keep their name secret (ask me directly and I’ll say), that they would provide a completely fabricated Microsoft Project Gantt chart which is then thrown away once the trust in deliveries is established.

Small one off fixed-priced projects

When you are bidding for a small project where there are a number of unknowns, including the customer, then you are left with choosing between finger in the air gut feelings or attempting a forecast based on categorising the project against previous deliveries for other customers.  Larry Maccherone (@LMaccherone ‘The impact of agile quantified‘) and Dimitar Bakardzhiev (@dimiterbak) (amongst other interesting points) both championed using statistics to aid in decision making. In terms of forecasting Monte Carlo Simulation (Intro with Excel, Dimitar’s SIP Monte Carlo & High Level Project Planning) looks to provide a relatively simple way to provide a worst-best forecast. However, has Dimitar pointed out it is best suited to when you can successfully match the project variables against previous statistics, including; solution type, technologies and team.

Conclusion

For me the conclusion is that estimating value is generally a bad idea. The ideal is to establish trust via deliveries, backed up with forecasting if necessary.

Custom Audio notifications with ToastNotificationManager

I struggled to find documentation for this, so I’ve blogged it here for future reference

    ToastTemplateType toastTemplate = ToastTemplateType.ToastText02;
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

    XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
    toastTextElements[0].AppendChild(toastXml.CreateTextNode(title));
    toastTextElements[1].AppendChild(toastXml.CreateTextNode(message));

    var audio = toastXml.CreateElement("audio");
    audio.SetAttribute("src", "ms-appx:///MyAudio/CustomNotificationSound.mp3");
    audio.SetAttribute("loop", "false");

    toastXml.DocumentElement.AppendChild(audio);

    toastXml.DocumentElement.SetAttribute("launch", deepLink);
    ToastNotification toast81 = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier(MyAppId).Show(toast81);

Inspiron 15R SE 7520 fan always on?

Recently I’ve been getting worried about my Dell Inspiron overheating. The fan was noisy and air expelled was very hot. Looking at the processes running there didn’t seem to be any culprits. Looking at the device manager I noticed that after a recent Windows Update the AMD driver was no longer running. I went to the Dell support site and installed the latest Intel HD followed by (the order is important) the latest AMD drivers – note that these drivers are older than the ones Windows will install. Once installed the device manager showed they were both happy and the overheating seems to have been resolved. I’m guessing this is related to the horribly bungled dual video card implementation on the Inspiron. A more wild guess is that the AMD GPU was probably running all the time and the joint CPU/GPU cooler was probably struggling and hence the overheating problems.

Getting Value out of Agile Retrospectives

Getting Value out of Agile Retrospectives

Nice read that had the pleasure of reviewing

Windows 8 and the Light Blue Screen of Stuck

I’m not exactly sure how I managed this, perhaps because a cancelled a restart, but I ended up with Windows 8 showing me a blank light blue screen. I had a mouse but that’s it. No text, no chasing dots around a circle, nada. After watching it for while, after-all interrupting an ‘update & restart’ is not something I do lightly, I decided action was needed. So here’s the advice. CTRL+ALT+DEL->Task Manager->New Task->”Explorer”. The desktop sprang to life and I was able to re-ask for ‘update and restart’ which it duly did.