Sunday, September 23, 2012

Home debugging, part 2: can't create a new user account on windows 7, 'the user profile service service failed the logon'.



The next home network maintenance task took a little longer to solve. My mother wanted to create her own user account on the shared PC. She knew how to do this, but the new account kept giving an error when she tried to log on with it: 'the user profile service service failed the logon'. Cryptic.

It sounded easy. I was confident that I'd solve it in minutes. I googled it, and found several recommendations to delete the corrupt user profile/reg key and boom. But why would the newly created profile be corrupt? Turns out, it's not: it's not even created until you log on with it for the first time. So there was no profile to delete.

I tried turning off UAC, and creating a new account with admin rights instead of standard, but none of this worked. Eventually, I found this Microsoft Answers thread: http://answers.microsoft.com/en-us/windows/forum/windows_7-security/i-cannot-create-a-new-user-account-windows-7-the/dee340f7-5da9-402b-9e99-293dbd249a53?page=2 which pinpointed the problem as an access failure while copying data to the new user profile. I felt a little silly for not thinking to look through the event logs earlier in the process, but here is the step by step guide to fixing this error if you're having the same problem:

- open the Event Viewer (Start->Run->type "Event Viewer") and look at the Application logs


-  Now find any Warnings (the Error messages are likely telling you that the user profile didn't work, which you already know) and click on each of them to read the details about it

 
 
 
- You should be able to find a warning message that says 'Windows cannot copy file x to location C:\Users\Temp...' 
 
- Find the file mentioned by typing in the full directory location given to the address bar of Windows Explorer. (You can't browse to it because it will be hidden). 
 
WARNING: deleting or changing some files will break your computer. If you don't know what the file mentioned is, you should find someone who knows more than you do.
 
- If you know what you are doing, now go ahead and delete or give universal write access on the file. Et voila, your new user account should log on successfully.

Home debugging, part 1: hacked wifi?

And now for something completely different!

I'm at home in Australia for a few weeks* visiting my parents, so obviously I've been doing a little home PC maintenance. Between my dad, sister and brother they are able to pretty well manage everything, so it hasn't been too bad.

My most stunning accomplishment has been setting up a Windows Homegroup so that they can all send documents to the printer from their laptops and the second desktop, instead of kicking off anyone currently using the PC with the printer for a minute.

More interestingly, a couple months ago, my sister rang me early in the morning to say that she thought the wifi had been hacked. I rolled my eyes and asked what was happening, and she said that overnight, all the phones (which get carried in and out of the house, and therefore off the wireless network) had stopped connecting to the local wifi and said the password was incorrect. The laptops which had stayed in the house were still connected, but the laptop that had left the house that day was also unable to connect. When I directed her to the router admin page, which according to Dad's notes still had the default password, she was unable to log in. It appeared that she was right, and someone had indeed managed to change the password on their wifi network. I gave her instructions for resetting the router and setting the network back up, and left her to it.

Fast forward: I've been home for about a week. I'm testing some phone stuff on two different phones. As each phone sits idle, it disconnects from the wireless network, then seamlessly reconnects when I wake it up. Until one doesn't. It says the password is wrong. Then the other phone won't reconnect either. I go find my sisters iPhone and it also won't connect - password incorrect. (I have no interest in disconnecting my laptop to test it as well.) It appears that whatever happened before, has happened again.I go find my sister's documentation from that incident: she didn't change any of the passwords involved, including the router sitting on the default password. So yea, I guess it's not inconceivable that someone got into it again? I reset the router, set back up the network and the voip line, and this time change the router password.

I still find it a little unbelievable that someone would have gotten into their wireless network twice, in this random corner of the suburbs, but I can't come up with another explanation.


*Yes, it was incredibly inconvenient for my house to flood days before I left on an international trip. 

Conflicts and setbacks


So, ran into a few challenges recently.

I have mentioned that I work at Microsoft, but here it becomes relevant that I specifically work on the Windows Phone marketplace: the experience you have when you install an app as a user. As part of my job, I was involved in investigating and diagnosing <a href="http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2012/08/14/can-t-download-an-app-here-s-why.aspx">the recent problem installing app updates</a>, and I also know the team involved in managing app certification, so I was well aware of the subsequent <a href="http://windowsteamblog.com/windows_phone/b/wpdev/archive/2012/08/14/app-publishing-temporarily-on-hold.aspx">delays in app publishing</a>.

This was pretty inconvenient for me personally, as I submitted the PAX Digital Assistant update for Prime to the marketplace only the day before certification was temporarily halted. I waited for my app to make its way through certification once everything resumed, and kept waiting. I checked at work and knew there were major delays catching up with the queue of apps that had built up, and so it wasn't unbelievable that mine hadn't made it through yet. I knew that I could contact the guys who ran the process and have my app fast tracked, but I couldn't decide if that was reasonable or not. In hindsight, I think it would have been: I had a good justification with the event actually happening, and other developers do contact a developer evangelist for similar deadlines. However I decided that it felt a little unfair to use my internal position like that, so I didn't do anything, and my app didn't make it through publishing until September 6, well after the useful moment had passed. Now I feel like I inconvenienced a bunch of people and made myself look flaky and unreliable, all for no good reason. Damn.

On the worse side, four days before PAX my apartment was flooded by a burst pipe, and my laptop was destroyed. As detailed in my last post, I did have a remote backup for the PAX app - but I hadn't done incremental uploads to the server of the last couple days of work I'd done before finishing it for Prime, so that work is now gone forever. The Flashcard app I'd created is also completely gone, as I hadn't bothered backing it up to the server at all (not a huge loss, but a foolish mistake). Could have been worse, of course: a month earlier the entire PAX app was stored only on my local machine and would have been gone. But could have been better as well. I need to make the incremental backup to the server as easy as the local incremental backup.

Sunday, August 5, 2012

Success: a 7.1 app backed up on a remote server!


I've spent a bit of time now trying to get the upgraded 7.1 version working, however the app crashes on loading the schedule pivot page containing the jumplist.  I decided to try and put a plain list of the items in order to get a functioning 7.1 app - but  found that the crash wasn't caused by the telerik controls at all.

I tried to get the minimal list going with this:
        <controls:Pivot
           
 x:Name="schedulePivot"
           
 HeaderTemplate="{StaticResource pivotTitleTemplate}">
            <controls:PivotItem>
                <ListBox
                   
 ItemsSource="{Binding events}"
                   
 ItemTemplate="{StaticResource eventTemplate}">
                </ListBox>
            </controls:PivotItem> (line 64)
        </controls:Pivot>

I got this XAML parse error: AG_E_UNKNOWN_ERROR [Line: 64 Position: 34]


        <controls:Pivot
           
 x:Name="schedulePivot"
           
 HeaderTemplate="{StaticResource pivotTitleTemplate}">
            <controls:PivotItem>
                <TextBlock Text="hello" />
            </controls:PivotItem> (line 61)
        </controls:Pivot>

Gives me the same error on line 61, so it isn't about the lists at all.

It turns out I got this error as soon as I add any PivotItem to the pivot, even an empty one.

Ok...looked into the exception stack trace and it included this detail:


            at System.Windows.UIElement.UpdateLayout()
            at Microsoft.Phone.Controls.Pivot.OnItemsChanged(NotifyCollectionChangedEventArgs e)
            at System.Windows.Controls.ItemsControl.OnItemCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
            at System.Windows.Controls.ItemCollection.NotifyCollectionChanged(NotifyCollectionChangedEventArgs e)
            at System.Windows.Controls.ItemCollection.NotifyCollectionReady()
            at System.Windows.Controls.ItemsControl.NotifyAllItemsAdded(IntPtr nativeItemsControl)
            at MS.Internal.XcpImports.Application_LoadComponentNative(IntPtr pContext, IntPtr pComponent, UInt32 cUriStringLength, String uriString, UInt32 cXamlStrLength, Byte* pXamlStr, UInt32 cAssemblyStrLength, String assemblyStr)
            at MS.Internal.XcpImports.Application_LoadComponent(IManagedPeerBase componentAsDO, String resourceLocator, UnmanagedMemoryStream stream, UInt32 numBytesToRead, String assemblyString)
            at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
            at PAX7.View.SchedulePivotView.InitializeComponent()
            at PAX7.View.SchedulePivotView.OnNavigatedTo(NavigationEventArgs e)
            at Microsoft.Phone.Controls.PhoneApplicationPage.InternalOnNavigatedTo(NavigationEventArgs e)

So I thought perhaps the exception was something to do with the pivotitems I was creating not working with the data I'm assigning to it? I removed the PivotItems and set DataTemplates on the Pivot itself, like this:


        <controls:Pivot x:Name="schedulePivot"
                       
 HeaderTemplate="{StaticResource pivotTitleTemplate}"
                       
 ItemTemplate="{StaticResource pivotListTemplate}">
                        
        </controls:Pivot>

Referring to existing templates like this:
        <DataTemplate x:Key="pivotListTemplate">
            <ListBox
               
 ItemsSource="{Binding events}"
               
 ItemTemplate="{StaticResource eventTemplate}">
            </ListBox>
        </DataTemplate>

Magic! Finally I have a working app built on the 7.1 SDK :) Obviously I committed it straight away. Then I remembered that I hadn't got a backup on a separate machine yet, so I googled remote repository hg nearlyfreespeech, and found this awesome page:

Before sending it up to my new remote repository,  I thought I'd make sure it wasn't including all my generated files. I found a couple relevant Stack Overflow questions  (e.g. http://stackoverflow.com/questions/3426231/mercurial-hgignore-some-questions-on-how-to-ignore-a-single-file) that led me to the help page (http://www.selenic.com/mercurial/hgignore.5.html). Although when I look at 'all files' in the repository it doesn't list the bin/obj directories now, when I ran the clone it still did because it was looking at the history of the repository, which obviously still mentioned them.

Then cloning failed anyway with an 'invalid argument' error. Google told me there was a known issue with clone/push/pull of large filesets on windows? Lame! (http://mercurial.808500.n3.nabble.com/TortoiseHG-Large-File-Commit-only-40Meg-is-size-td2140178.html) 
So I tried creating a bundle of just the latest revision (http://tortoisehg.bitbucket.org/manual/0.9/changelog.html#revision-context-menus) and cloning it, but tortoise just went ahead and tried creating a stupid huge bundle again when I hit clone, instead of pulling from the bundle. So I turned on the server option, but couldn't figure out what the url should be - when I tried hg pull <url listed in serve ui> I got an error that the hostname wasn't recognised.
I uploaded the bundle I'd created through ssh, and tried pulling from it locally (inspired by http://weblogs.java.net/blog/kohsuke/archive/2007/08/mercurial_trans.html) but got an error that the parent wasn't recognised. However import/export also didn't work, saying it couldn't find files to patch. So I created a backup bundle as listed here (http://www.southampton.ac.uk/~fangohr/computing/hg.html#use-mercurial-without-access-to-server-using-bundles) and copied that to the server, pulled from that and finally had a repository. Done!

I think the whole rigmarole indicates that I don't have a strong enough grasp on how hg is supposed to work.  Let's see how it goes when I try and just copy over a changeset...

Saturday, July 21, 2012

Source control/backup and testing.

So for most of my projects I have a Mercurial repository for version control (totally saved my ass when I found a bug in the submitted version of Pax while halfway through unsuccessfully updating the code to 7.1), but no backup. I thought about setting up remote repositories (I have hosting with Nearly Free Speech), but I also remembered that GitHub had recently released their Windows client. I was unable to download/install the client over the coffeeshop wifi so had to set that up at home later - now you can see the code at https://github.com/jacalata/FlashCards. If that works nicely I'll put my Pax code up there as well.

I have created a test project for my Pax app in the past, but...a long time in the past. So I found this guide (http://blogs.msdn.com/b/amit_chatterjee/archive/2011/06/26/unit-testing-the-windows-phone-7-applications.aspx) as a reminder, and also found that the dll's I had were all 7.0 projects, so updated them. Added the first couple of unit tests, more to go.  Does feel better knowing I have a test framework though :)

Thursday, July 19, 2012

Flashcards app

I recently got the Telerik controls for Windows Phone (free in a deal for MS employees) and plan to use that to improve my Pax app - specifically I need the jumplist to replace the third party implementation I have now, which doesn't work for a 7.1 app. Before going in to replace everything in my Pax app, I thought I'd create a new app to get used to working with them.  

I have vague aspirations of doing a little more concentrated data structures and algorithms revision this year, and working on my french/icelandic, so I thought I could build myself a flashcard app. I used one of the Telerik default app options, which was nice and clean. I found the couple of controls I added quite simple to use: the basic info is all easily available at http://www.telerik.com/products/windows-phone/overview/all-controls.aspx,  but  I'd love that page to contain the dll each control is in, rather than looking through the 6 options. Or ideally to link to a page for each control with the full docs for it (I'm sure I found full docs, but I've forgotten where - I mostly worked by looking controls up in the Object Browser in VS). 

The first version of the app is super basic: one set of cards, can add/delete only, can move through sequentially or randomly. No option to enter the answer to keep yourself honest, no option to edit cards. What took the most time was creating the icon, which is still totally crap - all Paint no talent. Overall it took me two evenings, (probably about 8 hours) to get a working minimal version ready to submit to the app store. I didn't actually write any tests, which is bad. But it was pretty satisfying to get that done.  

I also set up a Trello board for the app (https://trello.com/board/flashcards-app/4ffb6ccacb4f94632522f9970), which I'm finding to be a really easy way to track projects. To keep myself honest, the next two tasks are tests and version control (I can't believe I forgot to do that).

Thursday, May 24, 2012

Upgrading to 7.1


I upgraded my app project to 7.1 back in late March, but it didn't go smoothly. 

Immediately after upgrading, I wanted to run the project and make sure upgrading hadn't broken anything. Unfortunately the first thing I got was a cryptic runtime Exception: 'WrappedException' with details 'Unspecified Error', breaking when I initialised a boolean for the first time. I googled the exception and found other people complaining that upgrading their projects gave them these errors as well - http://forums.create.msdn.com/forums/t/88547.aspx - the problem seemed to be running the old version of the Silverlight Toolkit or the CodingForFun toolkit. I have both of these, so time to upgrade them through nuget.
But...it turned out I have the most recent version? Crap. Try rebuilding from clean - didn't help. 

I searched again and found two articles both mentioning this error in relation to template bindings - http://www.wirebear.com/blog/2010/10/21/windows-phone-7-unspecified-error/ and http://www.telerik.com/community/forums/windows-phone/databound-listbox/unspecified-error-on-databoundlistbox-for-mango.aspx  so I guess I went through my project and checked the templates on that page.
  1. Commented out both the headertemplate and the jumplist itemtemplate - the app ran fine
  1. Put back in just the header template - app ran fine. So I guess it is /sigh/ somewhere within my horrible nested jumplist template.
  1. Just for fun, put them all back in - fails! The exception detail:

MS.Internal.WrappedException was unhandled
  Message=Unspecified error
  StackTrace:
       at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
       at MS.Internal.XcpImports.UIElement_UpdateLayout(UIElement element)
       at System.Windows.UIElement.UpdateLayout()
.....
 InnerException:
       Message=Unspecified error
       StackTrace:
            at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
            at MS.Internal.XcpImports.UIElement_Measure_WithDesiredSize(UIElement element, Size availableSize)
            at System.Windows.UIElement.Measure_WithDesiredSize(Size availableSize)
            at System.Windows.Controls.VirtualizingStackPanel.MeasureChild(UIElement child, Size layoutSlotSize)
            at System.Windows.Controls.VirtualizingStackPanel.MeasureOverride(Size constraint)

 
And I've narrowed it down to this template:
  <DataTemplate x:Key="pivotJumplistTemplate">
            <l:JumpList
               
 ScrollDuration="400"
               
 ItemsSource="{Binding events}"
               
 ItemTemplate="{StaticResource eventTemplateByDay}"
               
 JumpButtonStyle="{StaticResource AccentColoredButtonStyle}">
                <l:JumpList.CategoryProvider>
                    <l:DistinctPropertyValueCategoryProvider PropertyName="StartTime"/>
                </l:JumpList.CategoryProvider>
            </l:JumpList>
        </DataTemplate>

If I replace this one with the non-jumplist, it works.

        <DataTemplate x:Key="pivotListTemplate">
            <ListBox
               
 ItemsSource="{Binding events}"
               
 ItemTemplate="{StaticResource eventTemplate}">
            </ListBox>
        </DataTemplate>

Aha - and now adding Jumplist to my search,  I get this article from the guy who wrote the control I'm using - 
All the comments say they are seeing this error. Turns out the control is now distributed as part of http://wp7contrib.codeplex.com/, which has been updated for 7.1. Installed the new package with nuget and swapped out my assembly references….and got the same exception.  And so were other people since September - I can't find an indication that he's updated it since then. I left a comment on the post asking if it had been updated. He's responded a couple of times since then saying he is planning to update, but hasn't had time recently.

Fortunately Telerik recently had a special for Microsoft employees, so I got their Windows Phone suite free - I can insert their jumplist instead.