Wednesday, June 27, 2012

Password reset on a Windows system?

Give the Offline Windows Password and Registry Editor a try. There are probably a bunch of handy Linux live cds that do the same thing, but Google lead me to this one last night and it got the job done rather quickly and without too much fuss.

Wednesday, June 6, 2012

The importance of implementation details

Today, after years of odd threading bugs, I learned that creating a DataView and various other reads on a DataTable are actually write operations. E.g. from the first link
However, creating a DataView on a DataTable is a write operation on a DataTable. Most people don't know this, and its not very intuitive so I don't blame them for not knowing this. What happens when you create a DataView on a DataTable is the DataView will create an index on the DataTable and this index is stored in the DataTable. The reason for this is performance, for example if you create a DataView saying "F1=1" as the criteria, this creates an internal index on the DataTable to locate this information. Later on if you create another DataView with the same criteria, the index is reused, so this improves performance. However the fact that these indexes are stored inside the DataTable means that these are write operations to the DataTable and thus they are not thread safe.
Just goes to show you, when an object doesn't say it's threadsafe, don't assume that it's threadsafe, even if it's "just a read".