Tuesday, September 07, 2010
Enjoying my iPhone
Since then, I have to say I have really been enjoying my iPhone, although, fear not dear reader, I am not about to become yet another Mac fanboi... At least not that easily.
There are some really nice things about the iPhone, but at the same time, some things that could be improved.
The Good
The focus on user experience is really where the iPhone (and indeed apple) really shine. It is quite obvious that this is a device designed to be used while traveling on a train with one hand full of groceries, and you texting arm wrapped around a grab rail for support. The different context sensitive keyboards, the size of the keyboards, the auto-word prompt when you mistype a word, the ability for applications to switch orientation all add up to a great user experience when inputting and reading text, as is evident from the fact that I can type up this whole blog post using my iPhone. The concentration on more natural user interfaces is very welcome.
The hardware is fast becoming the minimum spec for smart phone manufacturers that want to compete on the modern market, which I think signifies that apple really nailed it.
The proliferation of iPhone apps has seen the platform become an instant hit, and overall, I am extremely happy with it, to the point where I will not be going back to a windows mobile 6.* device. The overall consistency of "most" applications in the app store, and the new device friendly controls that apple have encouraged developers to use are on the whole really good, however, that could become a double edged sword.
The bad
Battery life sucks. Also coming from a palm is background, I do miss graffiti as a form of input, but I guess there were so few people that bothered to learn it that I'm probably on the minority here. The 20MB download limit when not on a wifi network I see as an affront to my free market rights to purchase the bandwidth I want and how I want it delivered.
I will be getting a Windows Phone 7 device when they come out, because I really want to get into the WP7 development space. I'll have to wait and see how well then WP7 performs
Before I make a choice as to which device I want to use on a day to day basis... May the best phone win.
Sunday, March 07, 2010
Saturday, March 06, 2010
Speaking at Victoria.Net SIG
Just a quick note to let everyone know that I will be talking at the Victoria .Net SIG on the Microsoft Sync Framework this coming Tuesday http://www.victoriadotnet.com.au/vic-victorianet-dev-sig-formed/vic-victorianet-dev-sig-events.aspx
Hope to see you there.
Saturday, January 30, 2010
More bad luck
As my attempts to learn Sync Framework continue, I find even more issues along the way, this time with the SQLCE runtime. The basic scenario boils down to attempting to fill a Detail view from a dataset linked to a SQL Compact Edition datasource. When the application is run, an error message to the effect of
Unable to load DLL 'sqlceme35.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E).
is displayed, and the application crashes. After trying many different things to solve the problem, a simple google search on the exact error yields the solution. Basically it is a problem on Vista and Win7 x64 environments, and simply requires you to install SQl Compact Edition SP1 found here http://www.microsoft.com/downloads/details.aspx?FamilyId=DC614AEE-7E1C-4881-9C32-3A6CE53384D9&displaylang=en#filelist.
I guess I was just surprised that it was not included as part of Visual Studio 2008 SP1.
A colleague of mine Mitch Denny has told me that “If I was going to pick a person to clear a minefield you would be that person”, I replied that I was hoping it meant he believed I had special unique skills for finding and defusing mines, and not just that I am expendable.
Wednesday, January 27, 2010
TFS 2010 Console Application and the .Net 4.0 Client Profile
One little frustration that has caught me twice now (and so it’s time to blog it so I remember it), is that when you create a Console Application and then start adding references to any of the TFS API libraries to it (such as Microsoft.TeamFoundation.Client.dll), if yoiu just accept all the defaults for a Console Application in Visual Studio 2010 Beta 2, you get this warning
Warning 1 The referenced assembly "Microsoft.TeamFoundation.Client, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" could not be resolved because it has a dependency on "System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" which is not in the currently targeted framework ".NETFramework,Version=v4.0,Profile=Client". BasicEventListener
and the application will not compile.
The issue is the .Net 4.0 Client Profile does not contain the reference to System.Web, which is required by the TFS API. This is simple to fix, just go to the Properties of your project, and for the Target Framework, select “.Net Framework 4” instead of the “.Net Framework 4 Client Profile”.
The unluckiest developer alive
Sometimes I think I should be a tester for developer tools. For some reason I have the uncanny knack of stumbling onto the most obscure bugs in Visual Studio.
I am currently trying to learn Microsoft Sync Framework, and decided (after watching a good video on how to do it) to set up an ADO.Net Sync Services Local Database Cache. I went through the process step by step, the only 2 differences between my environment and the one demonstrated in the video was that I was running SQL Server 2008, and I was using the AdventureWorks2008 database.
The procedure I followed was this…
- Create a new Winforms Application
- Add A new Local Database Cache (this starts the wizard)
- select the AdventureWorks database
- Select the Production.Products, Production.ProductDescription, Production.ProductPhoto tables to add to the cache.
- Click OK.
Everything else I left as the default configuration. The result:
So I figure it’s something to do with my environment. I spent about half an hour Googling and looking at forums before I decided that I must be the first person ever to hit this bug. Next I tried to see if it was because of something in my environment, I checked my setup
Windows 7 64 bit; SQL Server 2008 SP1; Visual Studio 2008 SP1; Sync Framework 2.0 x64;
The only thing I could think might be an issue was the Sync Framework 2.0 x64, so I uninstalled and installed the x86 version. Still the same problem.
I then opened SQL Profiler and tried to see if anything was obvious there, but concluded that it was all OK (I later discovered that I didn’t look closely enough at this).
I then cracked open the wizard dlls in reflector to see if there was any help there, but alas, theat was pretty much a dead end too.
I even posted an article on the Sync Framework Forum.
Frustrated, I decided that it had to be my own environment that was causing the problem, so I set about creating a virtual environment on GoGrid. Once I had managed to get everything installed, I tried just the Production.Products table this time, and got the exact same error.
I then tried creating a completely new table in a completely new database, and, surprise surprise, it actually worked… well, almost. It got past the wizard, but the code it generated would not compile. It appears that I stumbled on yet another bug in the Sync Framework wizard, if you use a table called “SyncTable”, the generated code is broken.
Encouraged by the “success”, I pressed on undeterred. I finally got everything working by creating a table called “MyTable”.
Not satisfied that I had made it work (finally), I decided to try and track down the bug. After about an hour or so of playing around and not having any success, I finally cracked open SQL Profiler again and found that the last statement executed before it died when trying to create a local database cache for the Production.Product table was the following
SELECT * FROM [Product]ion.[Product]
Obviously the code that works out the schema and table name needs some reworking.
Saturday, January 09, 2010
Using the TFS 2010 SDK (Beta 2)
With significant changes to the way TFS 2010 works, especially in relation to Team Build and the new concept of Projects Collections, the API has necessarily adapted to account for these changes. For developers wanting to use these new API’s, there is currently very little in the way of documentation. The TFS SDK code gallery site has a small amount of examples, as well as the beginnings of the API documentation, which although sparse, because of reasonably clear naming conventions actually offers users some guidance when attempting to write integration software for TFS 2010. There are also a few other bloggers around who have some posted code examples.
I have been looking at re-writing TFS Dependency Replicator for TFS 2010, and in so doing have created a very simple application to enumerate some of the objects I am interested in.
In the interests of helping other developers, here is my source code. You can also download the full solution from here.
To run it, you must have .Net 4.0 beta 2 and TFS 2010 Explorer Beta 2 installed on your machine.
class Program
{
static void Main(string[] args)
{
// Get a list of all registered Project Collections
Console.WriteLine("Project Collections");
var collections = RegisteredInstances.GetProjectCollections();
foreach (var collection in collections)
{
Console.WriteLine("Connecting to TFS Server {0} at {1}", collection.Name, collection.Uri.ToString());
// connect to tfs
using (var tfs = new TeamFoundationServer(collection.Uri))
{
tfs.EnsureAuthenticated();
Console.WriteLine("Successfully connected to {0}", tfs.Uri.ToString());
// Get items of interest from TFS
EnumerateServer(tfs);
}
}
Console.ReadLine();
}
private static void EnumerateServer(TeamFoundationServer tfs)
{
// Get all of the Team Projects
var structureService = tfs.GetService();
var teamProjects = structureService.ListAllProjects();
Console.WriteLine("Team Projects");
foreach (var teamProject in teamProjects)
{
Console.WriteLine("\tName: {0}", teamProject.Name);
}
// extract all the work items
// NOTE: this uses wiql to query the work item store
Console.WriteLine("Work Items");
var workItemStore = tfs.GetService();
var workItems = workItemStore.Query(
"SELECT [ID], [Title] FROM WorkItems");
foreach (WorkItem workItem in workItems)
{
Console.WriteLine("\tID: {0}\tTitle: {1}", workItem.Id, workItem.Title);
}
// Get the build servers
Console.WriteLine("Build Servers");
var buildServer = tfs.GetService();
var buildControllers = buildServer.QueryBuildControllers(true);
// Get all the build controllerrs
foreach (var buildController in buildControllers)
{
Console.WriteLine("\tController: {0}", buildController.Name);
// Get all the build agents
foreach (var agent in buildController.Agents)
{
Console.WriteLine("\t\tAgent: {0}, Team Project: {1}", agent.Name, agent.TeamProject);
}
}
foreach (var teamProject in teamProjects)
{
// Get each build definition for this Team Project
var buildDefinitions = buildServer.QueryBuildDefinitions(teamProject.Name);
foreach (var buildDefinition in buildDefinitions)
{
Console.WriteLine("\tBuild: {0}", buildDefinition.Name);
// Get all build Details for this build definition
var buildDetails = buildDefinition.QueryBuilds();
foreach (var buildDetail in buildDetails)
{
Console.WriteLine("\t\tBuild Number: {0} Build Status: {1}", buildDetail.BuildNumber, buildDetail.Status);
}
}
}
}
}
Sunday, December 27, 2009
Broken Angels book review
In his first book, "Altered Carbon", Richard Morgan sets up a universe in which human consciousness has been digitized, and can be transported over inter-planetary distances, re-sleeved (placed into another human body), and backed up. Broken Angels follows the main character Takeshi Kovacs, into another "Subjective" life on another colonized planet.
The exploration of the digitized consciousness concept is great. I particularly love the graphic description of the "Soul Market". He also does reasonable job of describing the not so subtle links between greedy corporations and wars, but I feel he could have gone further. This time Aliens make an appearance (although long extinct), and there are some interesting explorations of the academic attempts to explore alien culture, and the parallels with our attempts to understand ancient earth cultures is fairly obvious.
The development of some of the characters was good enough to understand their motives, but still allowed for some surprises in the end. Other characters I feel weren't really developed as well as they should have been.
I feel that the books main problems revolve around the central character Kovacs. At times it can feel very much a "One man takes on the world", "Alpha Male" stereotype. I think this was also the first books main problem as well. It also uses the created universe of digitized consciousness and technological advances to allow for more graphic violence, but I think that is an acceptable exploration of the ideas the universe is based on.
As with the first book, the general outlook is bleak, basically accepting that technology will never be a panacea for human ills, but it does leave the reader with the slightest glimmer of hope at least for some of the characters you have met along the way.
I will definitely be reading the third in the series.
Thursday, December 17, 2009
Linq2SQL Bug with derived classes and Calculated fields
Today I discovered a bug in Linq2SQL. When you define a class hierarchy in dbml, where you derive a class from a base Class, and both use the same underlying table, and a discriminator property, as shown below:
If you then wish to expose a calculated field in the derived class, (and trust me I have come across situations where this is a requirement), you will find that Linq2SQL throws an exception when you attempt to insert or update items of the derived class to the database.
The exception is as follows
Test method DerivedClassTest.DerivedClassTest.TestInsert threw exception: System.ArgumentException: Property 'System.String CalculatedField' is not defined for type 'DerivedClassTest.BaseCLass'.
This bug occurs deep within the Linq2SQL logic, and is to do with the AutoSync functionality where Linq2SQL attempts to create a select statement to return the values of AutoSync fields at the same time as it performs the insert.
You may be able to work around this by setting the AutoSync property on the Column Attribute to “Never” as shown below
[Column(Storage="_CalculatedField", AutoSync=AutoSync.Never, DbType="NVarChar(61)", IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
public string CalculatedField
And note that setting this in the designer doesn’t seem to work either, it just removes the AutoSync parameter all together, but still fails. You manually have to set it in the generated code (another bug perhaps?).
Of course this means that you won’t get the new value of the field after an insert or update to the table, and you’ll have to re-query the table if you need it.
The alternative workaround is to ensure that all calculated fields are placed on the base class.
Saturday, December 12, 2009
I have joined the e-Book Revolution
I have finally bitten the bullet and purchased a kindle. I had been tossing up between the kindle and the nook, and even though in many respects the nook is a superior device, there were really 2 “features” that persuaded me in the end. The first was Text To Speech, the second was availability.
The Nook does not have Text To Speech, and I could not find any evidence that they were thinking of adding it in a firmware upgrade. Also I wanted it before Christmas, and the earliest anyone can get there hands on a Nook is 15th of January.
I’ve had my kindle for 2 days now, and so far I am really happy with my purchase, but there are certainly some negatives, so here is my review.
The positives.
- Great looking device, thin and light.
- reasonable 3G coverage (in most major Australian cities).
- Text to speech rocks.
- Latest firmware upgrade (2.3) adds native support pdfs.
- Good reading experience (eInk is cool).
- Support for converting files of many different formats such as html, mobi pocket, rtf, etc…, although native support for these document types would be better.
- Can sync your personal documents via your own PC.
The negatives
- No Wifi. I have been amazed at how Amazon have actually sold this as a feature “You don’t have to hunt around for a wifi hotspot”, actually Amazon, I have one of them at home, as do many people, also many of the cafe’s I would go to read have them as well.
- No Australian news content. This really infuriates me, I would love to get The Age delivered to my kindle, but alas I’ll have to go on killing trees to get my news.
- Proprietary DRM format. It really annoys me that if I do eventually decide to go for another ebook reading device, I will potentially lose my entire book collection.
- Not all books come with Text To Speech switched on. I got caught out on this on my first purchase, not checking the information thoroughly enough. I feel a bit cheated, as I feel the publisher has no right to determine how I choose to consume their content. Are they going to dictate that I cannot have another human being read it to me? No, then why draw the line at a computer?
My particular reason for wanting the Text To Speech feature is that I am a very slow reader, and Text To Speech would drastically increase the amount of books I could “read”. In future I will be making purchasing decisions based heavily on whether or not Text To Speech has been allowed by the publisher. Having said that, I wouldn’t be surprised if the problem with Text To Speech rights lies more with audio book retailers than with publishers, but that’s one for the conspiracy theorists to argue about.
Thursday, December 03, 2009
Visual Studio Help Integration Wizard and Continuous Integration
As .Net developers we are constantly using msdn and the Visual Studio help system. One of the most powerful features of Visual Studio is the ability to hit the F1 key on a class, property or method, and have it whisk you away to the correct msdn entry for the item of interest. When using third party libraries, it is great when they are able to provide you with the same ability to search API documentation from within Visual Studio. This is all possible, but I recently discovered, not necessarily trivial, and there is a really big gotcha if you want to add it to your Continuous Integration process.
To start with you need to ensure that all developers of your API are meticulous about putting XML Summary comments on ALL public facing entities. This is a good practice whether or not you intend to distribute the API.
The second step is to use a tool like sandcastle to build compile the xml comments into a usable format. Sandcastle has a number of different outputs including the classic .chm (Compressed html) output that is easy to read and can be distributed with your project, however, if visual studio integration is what you are really after, then you need the Html2 help output (*.hxs). As there are a lot of different settings for sandcastle, it is good to use the SandCastle Help File Builder that provides a nice settings based interface as well as a command line utility to aid you in building your help files.
The third step is to create an installation package (.msi or .msm) to distribute your documentation to the millions of developers who will be using your API to write the next killer application. There are a few ways of achieving this, to do this from scratch you could follow these intructions, however, in the Visual Studio 2008 SDK, there is a project type called the Help Integration Wizard that attempts to automate this process for you. This very simple project template works great right up to the point where you try to integrate it into your Continuous Integration Process.
The first problem is that the solution created contains 2 vdproj files, which means that you can’t build them with MSBuild, and are forced to pollute your build server with Visual Studio and compile it using the devenv command line. However, even after you have taken this hit, the pain doesn’t stop there.
The reason is because of 2 files that are included surreptitiously in the project path but not added to the solution. The executable FixRegTables.exe, and a merge module called MSHelp2_RegTables__RTL_---_---.msm get added to the CollectionFiles folder for the merge module project that is created. If you fail to check these in to your source control solution, your CI build will break with an error about a post build step. However, if you do add them to your source control repository, then chances are when you perform a “Get Latest” operation, these files may well be marked as “Read Only” as this is standard practice for many source control systems to ensure that source files are not modified during a build. In this case, the build will work as expected and produce an msi file, however, the resultant msi file will not install anything when run. The issue is that the Post Build step mentioned above needs to modify the merge module.
The solution is to either check the 2 files in to your source control system, and make the merge module writable as part of a pre build step, or to copy the two files from their location in the visual studio sdk into the Collection Files folder as a prebuild step.
Sunday, November 08, 2009
Bragging time
On Friday, I successfully passed Microsoft Certification exam 70-561. This now makes me a MCTS: .Net 3.5, ADO .Net Applications.
I am going to do a few more exams over the coming year, but I’ve yet to decide what the next one will be.
Saturday, November 07, 2009
One small gripe about my laptop
I absolutely love my new laptop, especially since I put an SSD in it. I have one small gripe however, and that is with the keyboard, or rather the lack of one key that I have become very reliant on, that is the “Right Mouse Key”.
I am often too lazy to plug in my mouse, or often (like now) not in a position to do so (reclining in a comfortable chair with my Feet up, and the laptop on my lap), and I have become quite used to the keyboard shortcuts for all the applications I use, which is why I have always loved the right mouse key, but alas on the Dell Precision M4400 laptop, no such key exists.
Having said that, just in doing my research for this rant, I have in fact discovered that Shift+F10 does the same thing, problem solved! Still would be nice to have a single button for this though.
Monday, October 05, 2009
Laptops, SSD’s, vhd’s and Hyper-V
I recently splurged and purchased one of these for my new laptop. I was finding hard to justify the extra expense for the 128GB over a 64GB SSD, knowing full well, that if I was careful I could run an OS and all the applications I normally use on 64GB, but I thought… what the hell. This weekend I discovered the “boot from vhd” feature of Windows 7, and I can say I am so glad I spent the extra money.
I have successfully created a dual boot for Windows Server 2008 R2 running on a 25GB vhd stored on my SSD. It is a bit of work, mucking around with DISKPART and BCDEDIT, but once it’s set up, it just works a treat, and thanks to my SSD, the speed is awesome. My main reason to do this was to play with Hyper-V as I have been charged with setting up a build server and test server at the client I am currently engaged to.
Saturday, May 16, 2009
New Laptop
having recently gone back to work after returning from a year in Buenos Aires, I have been tooled up. One of those tools as you may already have seen from my previous post is a new laptop, and just by way of showing off, I thought I’d post the specs up.
- Mobile Workstation AW-M4400n - Dell Precision M4400n-series Base
- Intel(R) Core(TM)2 Duo Processor T98002.93GHz, 6M L2 Cache, 1066MHz FSB
- 8GB (2x4GB) 800MHz DDR2 SDRAM
- 15.4 " Ultrasharp(TM) WUXGA (1920x1200) RGBLED Display with TrueLife(TM)
- NVIDIA Quadro FX 770M, 512MB dedicated memory
- 8X DVD + /-RW Drive
- 2nd Hard Drive 120GB SATA (5400RPM) Hard Drive (External)
- Integrated 0.3 Megapixel VGA Webcam with Single Digital Mic for WUXGA LCD
- Wireless Network Cards -Intel WiFi Link 5300 (802.11 a/g/n 3X3) MiniCard
I have also made the decision (as many other Readify people have) to install Windows 7 RC on it. So far there have been no serious problems, but there are a few things I have found and I will blog about them as I find and (hopefully) fix them.
The first one was Google Chrome not working, but there are many posts about this, however even after this, Chrome does seem to be a little unstable from time to time, the end result of which is I end up spending half my time in IE8 which I have no real problem with.
The second problem was the bluetooth issue I talked about in my previous post.
I do get a little bit of instability from Visual Studio 2008 from time to time. I think it has something to do with Team Member Presence information in VSTS Team Explorer, and so I turned off this feature and it now seems to be a lot more stable.
Windows 7 and Bluetooth Issues on DELL M4400
Since yesterday evening I have been trying to get Internet connection sharing happening between my new brand HTC Touch HD, and me brand new Dell Precision M4400 running Windows 7 RC.
as could be expected, there were some issues. In fact, I still haven’t managed to get it working, but I am 1 step closer to a solution. The first and most overriding problem was that the device drivers on my DELL weren’t working properly. A quick google search and a few clicks later, and I found this discussion on notebookreview.com from someone having the same problem as me with their M6400.
http://forum.notebookreview.com/showthread.php?t=340326
So I tried it, and sure enough it worked. I decided to do the right thing by the community and reply to the thread, thanking them and adding the DELL M4400 to the list of laptops that it works with, as well as adding a link to the right driver downloads for the M4400, but alas, even after registering with the website, it appears as though I don’t have the necessary privileges to reply to the forum. So I will disseminate the information here on my blog.
So if you have a DELL Precision M4400 and are trying to get your bluetooth to work, you need to
- Download these drivers from DELL
- Open the folder where the downloaded executable resides
- Right Click and select “Troubleshoot Compatibility”
- Select “Troubleshoot Program”
- Select “The Program worked in earlier versions of windows, but won’t install or run now” and Click “Next”
- Select “Windows Vista” from the top of the list and select “Next”
- Click “Start the Program”
At this point the bluetooth drivers should install no problems.
I have now successfully created a bluetooth connection between my phone and my PC, and can happily use some of the bluetooth networking features. Unfortunately, Active Sync doesn’t quite seem to connect properly over bluetooth, I think it’s a problem with “Windows Mobile Device Center” on Windows 7 RC, and of course I still haven’t been able to get Internet connection sharing working. Any help or suggestions would be greatly appreciated.
Thursday, May 14, 2009
New phone, was happy, then… suddenly… not
A few days ago I was the happy owner of a new HTC Touch HD phone which I have been happily playing with. Sure it might not be as trendy as the iPhone, but I was pretty impressed. It has a 5 Megapixel camera, as well as a lower res camera for video conferencing. It has WM 6.1, plus HTC’s own Touch Flo home screen which gives you some of the iPhone look and feel that Windows Mobile is seriously missing. I was starting to really enjoy it, downloading all the applications I wanted on it, connecting it up to my WiFi network and watching You-Tube videos on it, etc… then it came time to change my SIM card. I opened the back, took the battery out, replaced the SIM card, replaced the battery, and then this.
The phone would not boot, the OS would not load. I tried 20 different things, changing the SIM card back, doing a soft reset, without SIM card etc… nothing helped. The only thing that did eventually fix the problem was a hard reset. This means wiping ALL your data. So I am currently trying to re-install all the software I had up and running. Not very happy, starting to loose confidence in the device, and starting to wonder whether I should’ve purchased an iPhone.
Saturday, March 07, 2009
CityRail not just biased towards iPhone
It seems that a number of mobile application developers have fallen foul of CityRails timetable copyright antics. At one stage CityRail even went to the extent of scrambling their website in order to stop people screen scraping. I repeat, it may be true that they legally own the copyright to this information, but that is in no way helpful to the people who want (and dare I say have a right to) this information. It’s not that hard, really. Other governments have managed to do it, what is wrong with the NSW Government.
Friday, March 06, 2009
Government 2.0
Reading an article in The Age about CityRail’s attempts to stifle a very useful iPhone application reminded me of a seminar I attended at Web Directions North 2008 on Government 2.0. The thrust of the seminar was basically for governments to encourage this sort of effort. They are the sacred holders of the information that the public need, they should release this information and let the general population use it in the way they see fit. Governments don’t always have the best ideas, or even if they have great ideas, they don’t always have the necessary resources to realise them. In the past forward thinking governments have found abundant creativity and resources if they simply provide the information and let the community do what is needed with it. Sure you may need to provide some disclaimers for legal purposes, something like “While <insert name of government agency here> supports development of third party applications based on the data we provide, we cannot vouch for the accuracy of the program, nor it’s suitability for any particular use” I’m sure every application developer would be happy to include this in there terms of service.
In this specific incident, CityRail has used the copyright argument saying we own the timetable information. Which is probably legally true, but at the same time totally unhelpful. People like Alvin Singh should be rewarded for there creativity and effort, not threatened. He has even offered to give CityRail the source code on which to build a better application. CityRail should take up his offer, or at the very least, bring out a competing application that is more accurate (ie includes the latest information about service disruptions, etc…), and has better features, that will quite naturally defeat Alvin Singh’s application.
Saturday, January 24, 2009
Conficker and Password Advice
I was just reading an article in The Age today about the Conficker virus, and the article was pretty straight forward… bad virus, infected lots of machines, uses brute force to crack passwords. Some of the advice that was given was obvious, use stronger passwords, make sure your OS is up to date, and any anti virus software you use is also up to date. However, the last sentence really bothered me
"Go get a notebook, keep it next to your computer and record your password in it. No hacker in the world can hack the written page locked away in your office."
This is a quote from David Perry a “Software Security Specialist” from Trend Micro.
I have not heard worse advice regarding password security in many many years. Sure a virus can not leap out of the computer file through your notebook and try everything written down, but what about anyone who uses your office. Your cleaner, your spouse, your kids, their friends etc…. It’s the same basic principle with you bank card PIN number. If you write it down, then another person can potentially see it and use it, and if you follow the other advice in the article about using numbers and special characters (which you should) it makes it quite easy for a human to pick out a password from a heap of other random scribbling on your desk-side notepad. You may well say, but it’s only my spouse and my kids that use my office, and I trust them. Sure, but I’ve never seen it as an issue of trust in these cases, I see it as an issue of protection. I trust my spouse implicitly, but will never tell her my password. The reason being that if there is ever a security violation using my account, and my company asks me who else may have been able to find out my password, I can honestly and confidently say no-one, not even my spouse, there-by protecting her from any suspicion.
So what’s the solution. We know for a fact that username and password is a flawed security model, and we often talk about three-factor security, ie username, password and hardware key like a smartcard, as being more desirable. However, the reality is that the vast majority of systems are still protected by the humble username and password (two-factor security), so how do you choose a password that will protect your computer without the dreaded fear of forgetting it?
My tips are as follows. Pick something from your life that is obscure enough that other people wouldn’t be able to guess. As an example you may be into 70’s rock music, and in particular you may love the album from WHAM called “Make it Big”. That’s pretty obscure (not to say quite sad), or you may have just finished reading Dostoyevsky’s “The Brothers Karamazov” which is in itself an achievement worth remembering long after. Pick something from this aspect of your life, a phrase or a name, so in the first instance you might pick “Guilty feet have got no rhythm”, in the second case lets say one of the characters names “Dimitry Fyodorovich”, although a minor character may work even better, now adapt this to a password. Leave out some words and leave out spaces (if you want), then replace certain letters with numbers, capitalize others, and replace others with special characters like this “gui1tY#eeTn0rhythM”. In the second case something like this might would work “d!m!trYfY0d0r0v!ch”. Make sure the password length is greater than say twelve characters, and satisfies any other constraints your Systems Administrators want to put on your corporate network. Now you have a password that is, for you, fairly easy to remember without the necessity of writing it down, and extremely hard for a brute force crack to guess, or (and this is where the obscure thing comes in), no one who knows you will be able to guess either.
The other good thing is you now have a scheme for creating really interesting passwords, and it means that you can change the password regularly, and each time it is a game to see just how creative you can get in picking your new password. The more creative you get, the harder it will be for anyone or anything to break it, and the easier it will be for you to remember what it is.
