Wednesday, August 14, 2019

[Solved] Windows Update BSOD

One of my device could not install latest Windows updates. It was always crashing with a BSOD:
ATTEMPTED SWITCH FROM DPC
I spent many hours trying to solve the problem.
  • Running Windows Troubleshoot for Windows Update could repair Windows Update Database but this was not enough.
  • Running the command below did not help either :
    sfc /scannow
  • I tried all steps in this driver easy knowledge post :
    • Memory check
    • Disk check
    • Updating all drivers
    • Full Windows Reset
Manually updating all drivers is fairly easy with drivereasy : the free version lets you download all drivers. Then you just need to manually update drivers with the Device Manager. Just browse to drivereasy AppData folder when selecting whre to look for driver update.

Anyway, all these attempts failed to solve the problem. Running Windows Update after a full reset still crashed with a BSOD.

Other ideas I tried :
  • Retrying with most services and scheduled tasks disabled with msconfig.
  • Download and install windows10.0-kb4507435-x86_05aa394fcfdd3dbc72e2da2f41ae96b30d9496b9.msu
A few weeks later, I tried Window Update again. Windows cumulative update was now KB4512501. No more BSOD but installing updates still failed:
Some update files are missing or have problems.
We'll try to download the upgrade again later. Error code: (0x80073712)
I eventually found out Errors in C:\Windows\Logs\CBS\CBS.log. It seems many manifests were corrupted in WinSxS folder. Then I found and launched the following command (in an elevated shell) :
dism /online /Cleanup-Image /StartComponentCleanup
A couple hours later, I also run this command:
dism /online /Cleanup-Image /RestoreHealth
The first time, this command caused a reboot after a BugCheck. Second attempt succeeded.

In the end, I retried Windows Update and August 19 cumulative update passed successfully.

HTH

Saturday, November 1, 2014

[Solved] Galaxy S3 Not Charging

I applied technobezz first solution and it just worked :
  • *#9900#
  • Low Battery Dump : On
What does *Low Battery Dump* does BTW ?

Thursday, July 10, 2014

[Solved] Scm-Manager high cpu load

We use git. Our repo size is 2 GB with 60 K files and 14 K commits.

Suddenly, scm-manager (1.38) was using all the CPU.

And we had strange failures in TeamCity checkouts like :
remote: internal server error
fatal: protocol error: bad pack header
The problem was that our central bare repository had never been garbage collected (with git gc). Even running git gc was failing with the error
warning: packfile ... cannot be accessed
fatal: failed to read object ...: Too many open files
error: failed to run repack
Here is what I did :
  • bare clone the repo on another machine
  • run git gc
  • bare clone the previous repo to the original machine
  • run git gc
  • switch last repo with the broken one (et voilà)
HTH

Ref : https://groups.google.com/forum/#!topic/git-users/6XChKIqdG_U

Sunday, June 15, 2014

Test Driven FizzBuzz

Here is my solution when I apply TDD on FizzBuzz using C# :
class FizzBuzz
{
    private readonly List<Tuple<int, string>> rules;
    public FizzBuzz()
        : this(new Tuple<int, string>[0])
    {
    }
    public FizzBuzz(IEnumerable<Tuple<int, string>> rules)
    {
        this.rules = rules.ToList();
    }
    public string Convert(int i)
    {
        var label = string.Join("", rules.Where(r => i % r.Item1 == 0).Select(r => r.Item2));
        return label.Length > 0 ? label : i.ToString();
    }
}

[TestFixture]
public class FizzBuzzTest
{
    [TestCase(1, "1")]
    [TestCase(2, "2")]
    [TestCase(3, "3")]
    public void TestNoRule(int i, string value)
    {
        Assert.AreEqual(value, new FizzBuzz().Convert(i));
    }
    [TestCase(1, "1")]
    [TestCase(2, "2")]
    [TestCase(3, "Fizz")]
    public void TestFizz(int i, string value)
    {
        Assert.AreEqual(value, new FizzBuzz(new[] { new Tuple<int, string>(3, "Fizz") }).Convert(i));
    }
    [TestCase(1, "1")]
    [TestCase(2, "2")]
    [TestCase(3, "3")]
    [TestCase(4, "4")]
    [TestCase(5, "Buzz")]
    public void TestBuzz(int i, string value)
    {
        Assert.AreEqual(value, new FizzBuzz(new[] { new Tuple<int, string>(5, "Buzz") }).Convert(i));
    }
    [TestCase(15, "FizzBuzz")]
    public void TestFizzBuzz(int i, string value)
    {
        var rules = new[] {
            new Tuple<int, string>(3, "Fizz"),
            new Tuple<int, string>(5, "Buzz"),
        };
        Assert.AreEqual(value, new FizzBuzz(rules).Convert(i));
    }
    [Test] public void TestFizzBuzz1_100()
    {
        var rules = new[] {
            new Tuple<int, string>(3, "Fizz"),
            new Tuple<int, string>(5, "Buzz"),
        };
        var fizzBuzz = new FizzBuzz(rules);
        for (int i = 1; i < 100; i++)
            Console.WriteLine(fizzBuzz.Convert(i));
    }
}
See also :

Saturday, April 12, 2014

Samsung vs Google Calendar

On my Samsung Galaxy S3, I have two calendar applications : Google Calendar and S Planner (S Calendrier in French). Both applications are able to display all phone calendars :
  • My Calendar : To display contact birthdays
  • Samsung calendar
  • Google calendar(s) : your own Google calendar(s) and your contacts'
If you sync these calendars, this will only keep in sync your phone calendars with the various clouds (Google, Samsung, Facebook, etc.). But this will not sync calendars between one another.
Sometimes, Samsung Calendar becomes the default when you create new events. I have seen lots of people on the web looking for ways to import/export from Samsung Calendar to Google, or to sync them...
Once an event is created, AFAIK, it is not possible on my phone to move the event to another calendar.
I have found a solution : with Kies Air opened in your computer browse, you can move events to another calendar.
How to proceed :
  • (phone) Open Samsung Kies Air app
  • (computer) Open Kies Air in your browser : http://phone.ip:8080
  • (computer) Enter PIN displayed on your phone
  • (computer) Open Calendar and edit events to move them to other calendars
HTH

Saturday, August 17, 2013

GitExtensions ContextMenuHandlers

Here is a thread about duplicated menu entries in GitExtensions Explorer handlers.

Saturday, August 3, 2013

Move User Profile Folder

I had to move my user profile folder to another drive (because I could'nt wait for gparted to move my data). I am using Windows 7 Professionnal (in French). Context :
  • Moved profile : ded
  • Current (old) profile path : c:\Users\ded
  • Future (new) profile path : D:\ded
Here is what I did :
  • Create an(other) admin account (for example: root)
  • Close current ded session
  • Create d:\ded
  • Fix d:\ded ACL (you would need to uncheck include parent security)
My profile folder security is :
  • Administrators : Full Control, recursively
  • System : Full Control, recursively
  • ded : Full Control, recursively
  • root : Full Control, recursively
  • HomeUsers : see below
(It seems that root what added automatically under the hood)

HomeUsers permissions are :
  • Traverse folder / execute file
  • List folder / read data
  • Read attributes
  • Read extended attributes
  • Read permissions
HomeUsers permissions only apply to this folder only (not sub-folders nor files). French translation :
  • Parcours du dossier/exécuter le fichier
  • Liste du dossier/lecture des données
  • Attributs de lecture
  • Lecture des attributs étendus
  • Autorisations de lecture
Let's continue :
  • Copy all files with robocopy (keep permissions, etc.)
robocopy c:\users\ded d:\ded /e /copyall /sl /xj /np /nfl /r:1
  • Restart robocopy to find what failed
robocopy c:\Users\ded d:\ded /e /copyall /sl /xj /np /nfl /ndl /r:1 /w:1 /x
In my case I only had problems with :
  • junctions (not handled by robocopy)
  • Some tmp files (ignored)
  • Cardspace files (access denied!)
  • Google drive folder (denied)
To find junctions run :
dir c:\users\%username% /al /s
I used the following script to create junctions in my new profile folder. *BEWARE !* This script is for a French O/S.
@echo off
:: é = ‚
:: è = Š
setlocal
set new_home=d:\%username%
call :mk_junction "Application Data" "AppData\Roaming"
call :mk_junction "Cookies" "AppData\Roaming\Microsoft\Windows\Cookies"
call :mk_junction "Local Settings" "AppData\Local"
call :mk_junction "Menu D‚marrer" "AppData\Roaming\Microsoft\Windows\Start Menu"
call :mk_junction "Mes documents" "Documents"
call :mk_junction "ModŠles" "AppData\Roaming\Microsoft\Windows\Templates"
call :mk_junction "Recent" "AppData\Roaming\Microsoft\Windows\Recent"
call :mk_junction "SendTo" "AppData\Roaming\Microsoft\Windows\SendTo"
call :mk_junction "Voisinage d'impression" "AppData\Roaming\Microsoft\Windows\Printer Shortcuts"
call :mk_junction "Voisinage r‚seau" "AppData\Roaming\Microsoft\Windows\Network Shortcuts"
call :mk_junction "AppData\Local\Application Data" "AppData\Local"
call :mk_junction "AppData\Local\Historique" "AppData\Local\Microsoft\Windows\History"
call :mk_junction "AppData\Local\Temporary Internet Files" "AppData\Local\Microsoft\Windows\Temporary Internet Files"
call :mk_junction "AppData\Roaming\Microsoft\Windows\Start Menu\Programmes" "AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
call :mk_junction "Documents\Ma musique" "Music"
call :mk_junction "Documents\Mes images" "Pictures"
call :mk_junction "Documents\Mes vid‚os" "Videos"
endlocal
goto :eof

:mk_junction
set link=%1
set target=%2
set link="%new_home%\%link:~1,-1%"
set target="%new_home%\%target:~1,-1%"
echo %link% -^> %target%
if exist %link% (
  echo found %link%, skipped
  goto :eof
)
mklink /J %link% %target%
::icacls %link% /deny Everyone:(S,RD) /L
icacls %link% /deny "Tout le monde":(S,RD) /L
icacls %link% /setowner SYSTEM /L
attrib +H +S +I %link% /L
goto :eof
For cardspace files, I suspected a mismatch between Administrateurs (French, unknown group) and Administrators (English, valid group) accounts. I managed to move or copy the files with cygwin mv or cp. Afterwards, I just did *attrib +h* on cardspace folder and files (CardSpaceSP2.db and CardSpaceSP2.db.shadow).

I ignored Google Drive, Google recreate it automatically (it wouldn't use a copy of the original folder).

Final step :
move c:\users\ded c:\users\ded.old
mklink /j c:\users\ded d:\ded
And fix d:\ded permissions (same as above).

Now I reopen a session with ded users with my new user profile folder.

HTH