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

Friday, May 10, 2013

Saving OLEObject Content To File

It is possible with OLE to embed files in Excel workbooks and saves them back to disk (I know OLE is not cutting edge technology). To embed some file :
  • Insert ribbon menu
  • Object (in Text)
  • From file tab
  • (Browse to file)
If your file is another Office document, saving it back to disk is trivial. But here I want to embed any file (e.g. txt, xml). Anton post gave me the directions. I pushed further the analysis and eventually reversed engineered the OLEObject MemoryStream content :
0x2 0x0header
string\0file name
string\0file path
0x0 0x0 0x3 0x0(native header ?)
inttemp file path length
string\0temp file path
intcontent length
bytescontent
inttemp file path utf16 length
bytestemp file path utf16
intfile name utf16 length
bytesfile name utf16
intfile path utf16 length
bytesfile path utf16
Note : header is different for non Package OLE objects like Office documents or pdf.

In this sample program, I load some excel workbook and for each embedded ole object, I display its name and its content :
[STAThread]
static void Main(string[] args)
{
    var excel = new Application();
    try
    {
        Workbook workbook = excel.Workbooks.Open(@"D:\Classeur1.xlsx");
        foreach (Worksheet worksheet in workbook.Worksheets)
        {
            foreach (OLEObject ole in worksheet.OLEObjects())
            {
                Console.WriteLine("name : {0}", ole.Name);
                if (ole.progID == "Package")
                {
                    string content = ole.GetContent();
                    if (content != null)
                        Console.WriteLine(content);
                }
            }
        }
        workbook.Close();
    }
    finally
    {
        excel.Quit();
    }
    Console.Write("Press a key...");
    Console.Read();
}
The progID has "Package" value when the embedded content is not standard OLE content. The GetContent extension method gets a MemoryStream from the OLEObject and loads the content from the stream :
static class OLEExtensions
{
    public static string GetContent(this OLEObject ole)
    {
        ole.Copy();
        System.Windows.Forms.IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
        object obj = data.GetData("Native");
        System.Windows.Forms.Clipboard.SetDataObject("");
        var ms = obj as MemoryStream;
        if (ms != null)
            return ms.GetOLEContent();
        return null;
    }
}
We copy the OLE object to the clipboard to get the MemoryStream. The STAThread attribute is required in Main method to avoid some NullReferenceException when calling GetData method. The GetOLEContent extension method extracts the content from the stream thanks to the reverse engineered stream structure :
static class OLEStreamExtensions
{
    public static int ReadHeader(this MemoryStream ms)
    {
        var header = new byte[2];
        int read = ms.Read(header, 0, header.Length);
        if (read != header.Length)
            throw new FormatException("End of stream while reading header");
        if (header[0] != 2 || header[1] != 0)
            throw new FormatException("Bad header");
        return read;
    }
    public static string ReadString(this MemoryStream ms)
    {
        var sb = new StringBuilder();
        while (true)
        {
            int b = ms.ReadByte();
            if (b == -1)
                throw new FormatException("End of stream while reading string");
            if (b == 0)
                return sb.ToString();
            sb.Append((char)b);
        }
    }
    public static int ReadInt(this MemoryStream ms)
    {
        var bytes = new byte[4];
        int read = ms.Read(bytes, 0, bytes.Length);
        if (read != bytes.Length)
            throw new FormatException("End of stream while reading int");
        return BitConverter.ToInt32(bytes, 0);
    }
    public static byte[] ReadBytes(this MemoryStream ms, int count)
    {
        var bytes = new byte[count];
        int read = ms.Read(bytes, 0, count);
        if (read != count)
            throw new FormatException("End of stream while reading bytes");
        return bytes;
    }
    public static string GetOLEContent(this MemoryStream ms)
    {
        ms.ReadHeader();
        string name = ms.ReadString();
        string path = ms.ReadString();
        int reserved = ms.ReadInt();
        if (reserved != 0x30000)
            throw new FormatException(string.Format("Unexpected reserved bytes : got {0} but expected {1}", reserved.ToString("x"), 0x30000.ToString("x")));
        int tempLength = ms.ReadInt();
        string tempPath = ms.ReadString();
        if (tempPath.Length + 1 != tempLength)
            throw new FormatException(string.Format("Mismatch between temp length {0} and temp full path length {1}", tempLength, tempPath.Length + 1));
        int contentLength = ms.ReadInt();
        byte[] content = ms.ReadBytes(contentLength);
        int delta = sizeof(int) * 3 + (name.Length + path.Length + tempPath.Length) * 2;
        if (ms.Length != ms.Position + delta)
            throw new FormatException("Unexpected end of file");
        return UTF8Encoding.UTF8.GetString(content);
    }
}
This code uses Excel but it might work with any Office document (Word, Powerpoint...). Of course, you should have installed the PIA. I have validated this code with xml and txt files. I use Excel 2007 SP3 MSO.

Edit : You can refactor this code to extract the name and the bytes of each embedded object to be able to save the contents to files :
class OLEContent
{
    #region Fields
    private readonly string name;
    private readonly byte[] content;
    #endregion
    public OLEContent(string name, byte[] content)
    {
        this.name = name;
        this.content = content;
    }
    public string Name { get { return name; } }
    public byte[] Content { get { return content; } }
}
...
public static OLEContent GetOLEContent(this MemoryStream ms)
{
    ...
    return new OLEContent(name, content);
}
...
OLEContent content = ole.GetContent();
if (content != null)
    File.WriteAllBytes(Path.Combine(tempPath, content.Name), content.Content);
...
This new version can also save images (like jpg) to disk.

Sunday, March 31, 2013

From Google Reader To Tiny Tiny RSS

In early 2000s, I migrated from FeedReader application to Google Reader. Now it's time to move on, again.
I have chosen Tiny Tiny RSS because :
  • It was in Slashdot comments
  • It has both a Web interface and an Android app
  • It is a very active project
  • I can host it myself (it's not in some cloud)
  • Articles will not be marked read after 30 days
  • I can disable article purge
Hosting
Tiny Tiny RSS works fine with WampServer but I do not allow connections from internet to my local home private network.
I could not use the following web hosting providers :
  • free.fr : no support for PHP 5.3
  • olympe : doc is dead, do not know how to upload files
  • 000webhost : ftp is deadly slow, tt-rss does not work (uname, not writable errors)
  • byethost : dojo not defined error, could not load feeds
  • Toile Libre : dead
I have chosen hostinger :
  • ttrss works ! (PHP 5.3.20 and you can enable PHP 5.4)
  • small .p.ht url suffix
PHP has open_basedir restrictions but :
  • you can use this patch
  • You must use the 'resolved' url once all redirections have been resolved
Sample feeds resolved by firefox :
  • The Daily WTF : http://thedailywtf.com/rss.aspx gives http://syndication.thedailywtf.com/TheDailyWtf
  • PC Inpact : http://www.pcinpact.com/rss/news.xml gives http://pcinpact.com.feedsportal.com/c/35178/f/652880/index.rss
Edit 2013.04.01 : hostinger lets you add cron jobs to update feeds.
Edit 2013.04.11 : 10 days later, I got an official answer from hostinger support saying that cron jobs only support PHP 5.2. Too bad...

Saturday, January 26, 2013

InvalidCastException in AddInToken.Activate

If you're playing with System.AddIn (also called MAF for Managed Addin Framework not to be confused wief MEF which is Managed Extensibility Framework), you might get an InvalidCastException when calling Activate<T> method on some AddInToken instance : unable to cast transparent proxy to type ...

First of all, try to rebuild your pipeline folder from scratch, check with AddInUtil.exe that there are no warning.

If you still get the error, ensure that the program you are running has no dependency on any pipeline assembly. Your main project should not depend on the following assemblies : addin, addin adapter, addin view, contract. Otherwise, the token activation will get completely mixed up.

HTH

Friday, December 30, 2011

Clean Code

Clean Code (A Handbook of Agile Sortware Craftmanship) by Robert C. Martin is a must-read. Here are a few notes about it (filtered).

Friday, November 18, 2011

Regasm : insufficient system resources

Got this error at work :
Regasm : error RA0000 : Insufficient system resources exist to complete the requested service
I played a little with procmon (Thanks a lot Mark !) I looked for "INSUFFICIENT RESOURCES" in the events. This event was due to a RegCreateKey in HKCR/Wow6432Node/CLSID. It turned out that it was not possible to create a subkey with regedit. HTH

Saturday, July 2, 2011

How To Really Reset Folder Settings in Windows 7

Sometimes, Windows 7 automatically updates explorer's columns. For example, if a folder has a mp3 file, columns headers will be artist, song, etc. This is really annoying for all other files of the same folder. Configuration is stored in registry. Deleting and creating again such a folder will not reset its configuration. You have to delete keys in registry. Here is the .reg file found on sevenforums.com :
Windows Registry Editor Version 5.00

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\BagMRU]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags]

[-HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags]
[-HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\BagMRU]

[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU]
[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags]

[-HKEY_CURRENT_USER\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\Bags]
[-HKEY_CURRENT_USER\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU]

Friday, May 27, 2011

Révolution... 6 mois plus tard

Reçu ce jour (6 mois et 12 jours après la demande effectuée le 15 décembre) :
Free Haut Débit Bonjour, Nous avons le plaisir de vous annoncer que votre nouvelle Freebox pour votre ligne ******** est en cours d'expédition au point relais KIALA. [...]. Vous serez informé par email et SMS de l'arrivée de votre colis au point relais KIALA choisi. Sincères salutations, L'équipe Free

Saturday, March 12, 2011

Windows 7 sp1 [Solved]

Windows update fails to install service Windows 7 sp1. After downloading the 900 MB of windows6.1-KB976932-X64.exe (I also downloaded Windows_Win7SP1.7601.17514.101119-1850.AMD64CHK.Symbols.msi and Windows_Win7SP1.7601.17514.101119-1850.AMD64FRE.Symbols.msi, almost 300 MB each but I am still not sure about the requirement of these two), I tried to update manually. But this failed again : "L'installation n'a pas réussi", "l'assembly n'a pas pu être trouvé". "Détails" do not give a lot more info : "Erreur : ERROR_SXS_ASSEMBLY_MISSING(0x80073701)". There is a link to get more info ("Se connecter pour en savoir plus sur ce problème"), but this does not help me solve this problem.

Found the same problem here and here.

Looking deeper in C:\Windows\Logs\CBS\CBS.log (>250 MB) :
2011-03-12 22:11:26, Info                  CBS    Exec: Resolving Package: Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1, Update: 976098-91_neutral_LDR
2011-03-12 22:11:26, Info CBS Exec: Resolving Package: Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1, Update: 976098-91_neutral_LDR, PinDeployment: amd64_8c41fc7eb0dbe2daefc621237184c0e3_31bf3856ad364e35_6.1.7600.20561_none_e8d566dacff1f5ff
2011-03-12 22:11:26, Error CSI 0000000c@2011/3/12:21:11:26.177 (F) d:\w7rtm\base\wcp\componentstore\csd_locking.cpp(324): Error STATUS_SXS_ASSEMBLY_MISSING originated in function CCSDirectTransaction::LockComponent expression: (null)
[gle=0x80004005]
2011-03-12 22:11:37, Error CSI 0000000d (F) STATUS_SXS_ASSEMBLY_MISSING #1573632# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 2[gle=0xd015000c]
2011-03-12 22:11:37, Error CSI 0000000e (F) HRESULT_FROM_WIN32(ERROR_SXS_ASSEMBLY_MISSING) #1573517# from Windows::ServicingAPI::CCSITransaction::ICSITransaction_PinDeployment(Flags = 0, a = 8c41fc7eb0dbe2daefc621237184c0e3, Version = 6.1.7600.20561, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture neutral, VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral, cb = (null), s = (null), rid = [77]"Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1.976098-91_neutral_LDR", rah = [1]"2", manpath = (null), catpath = (null), ed = 0, disp = 0)[gle=0x80073701]
2011-03-12 22:11:38, Info CBS Failed to pin deployment while resolving Update: 976098-91_neutral_LDR from file: (null) [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
2011-03-12 22:11:38, Info CBS Failed to resolve item[0] in Package: Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1, Update: 976098-91_neutral_LDR [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
2011-03-12 22:11:38, Info CBS Failed to resolve execution update. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
2011-03-12 22:11:38, Error CBS Failed to resolve execution package: Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]
2011-03-12 22:11:38, Info CSI 0000000f@2011/3/12:21:11:38.370 CSI Transaction @0x34c280 destroyed
I think the important part is Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1. So I tried to download KB976098 for x64 and install it manually, but windows tells me it is already installed.I eventually managed to install SP1 thanks to Kris post : I had to remove 4 KB : KB976098, KB979306, KB981793 and KB979916. Problem solved !

Sunday, February 20, 2011

Argotic Syndication Framework Desillusion

When I discovered Argotic Syndication Framework a few hours ago, I thought : One to rule them all. They say on their web site that I don't have to speak the syndication langage. But, I failed to make it work on the first syndication feeds I tried : blog.free.fr atom feeds generated with dotclear raise the following exception :
   at Argotic.Common.Guard.ArgumentNotNullOrEmptyString(String value, String name)
   at Argotic.Syndication.AtomPersonConstruct.set_Name(String value)
   at Argotic.Syndication.AtomPersonConstruct.Load(XPathNavigator source)
   at Argotic.Syndication.AtomPersonConstruct.Load(XPathNavigator source, SyndicationResourceLoadSettings settings)
   at Argotic.Data.Adapters.Atom10SyndicationResourceAdapter.FillFeedCollections(AtomFeed feed, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings)
   at Argotic.Data.Adapters.Atom10SyndicationResourceAdapter.Fill(AtomFeed resource)
   at Argotic.Data.Adapters.SyndicationResourceAdapter.FillAtomResource(ISyndicationResource resource, SyndicationResourceMetadata resourceMetadata)
   at Argotic.Data.Adapters.SyndicationResourceAdapter.Fill(ISyndicationResource resource, SyndicationContentFormat format)
   at Argotic.Syndication.AtomFeed.Load(XPathNavigator navigator, SyndicationResourceLoadSettings settings, SyndicationResourceLoadedEventArgs eventData)
   at Argotic.Syndication.AtomFeed.Load(Uri source, ICredentials credentials, IWebProxy proxy, SyndicationResourceLoadSettings settings)
   at Argotic.Syndication.AtomFeed.Create(Uri source, ICredentials credentials, IWebProxy proxy, SyndicationResourceLoadSettings settings)
   at Argotic.Syndication.AtomFeed.Create(Uri source, SyndicationResourceLoadSettings settings)
   at Argotic.Syndication.AtomFeed.Create(Uri source)
It fails to parse publication dates in Univers Freebox syndication feeds or Slashdot feeds. Well, it seems I have to learn this langage anyway... Edit : After failing again on slashdot feeds with .NET 3.5 classes, I found Peter's blog. Actually my code was getting closer to his solution.

Tuesday, February 1, 2011

Merci à la TVA !

Les opérateurs profitent de la hausse de la TVA pour augmenter les tarifs des téléphones. Il y a deux semaines, on pouvait avoir un forfait Bouygues Telecom Evasio 1h+1h à 34 € (engagement d'un an), avec un HTC Desire pour :Voleurs ! Mais bon, il suffit de se détendre ! 51 € en blanc :^( chez Virgin Mobile avec le code promo DESIRE et le forfait E-Devine à 31 €.

Sunday, January 30, 2011

Recover Acer Aspire 1650

Useful keys :
  • F2 : Enter BIOS Setup
  • F12 : Choose boot device (if F12 key enabled in BIOS)
Notes :
  • You definitely need a backup DVD where Acer eRecovery has burnt the content of the hidden partition. Unfortunately, this DVD might not include everything (like Acer eRecovery for example - as if this restore process should be a one-time thing).
Steps :
  • Boot on backup DVD and wait for restore process to end. This will ovewrite the first partition with the content of the DVD big file. It takes about 12 min. Then the laptop reboots on the DVD to finish copying files. It seems that the real copy happens at 40 % (see HD activity). If I kept some linux partitions, it would froze at 40 % doing nothing (HD led off)
Then, if you reboot, Windows would use the following partitions :
  • C: : old hidden partition (hda1)
  • D: : old C: (hda2)
  • E: : old D: (hda3 or hda5)
IMHO, having two C:-like partitions is really messy. That's why I want to hide the first partition again. This can be done in a few steps :
  • Hide the first partition
  • Copy the first partition (hda1) to the second (hda2)
  • Eventually reboot
Linux comes to the rescue. I use the Gentoo Minimal Install dvd (iso) for x86. So the detailed steps are :
  • Burn Gentoo minimal dvd
  • Reboot on this dvd (F2 or F12 can help)
  • Hide hda1 : (this commands sets hda1 type to Compaq Diagnostics, disables boot on hda1, enables boot for hda2 and save)
fdisk /dev/hda
t 1 12
a 1
a 2
w
  • Mount hda1 and hda2 :
mkdir /mnt/win/c
mkdir /mnt/win/d
mount /dev/hda1 /mnt/win/c
mount /dev/hda2 /mnt/win/d
  • Optional : save hda2 content :
mkdir /mnt/win/d/old
mv /mnt/win/d/* /mnt/win/d/old
  • Copy hda1 to hda2 :
cp -a /mnt/win/c/* /mnt/win/d
  • Reboot to windows
reboot
Then your fresh new WindowsXP will start using second partition. Acer sucks, try Asus. Edit :
  • Radeon X300 does not work after reboot. ATI driver fails to install.
  • Intel 2200BG wifi card does not work either.
  • Keyboard is not recognized and locks the Touchpad.
  • Startup desktop.ini file is opened automaticaly when XP starts ? Might be because the linux copy did not take into account the hidden attribute...
Edit : Merging the two first partitions to get 30 GB on C:\ fixes them all. No more post-install copy step. No more problem with ATI driver, etc.

Monday, November 8, 2010

TechEd 2010

I am currently in Berlin for Microsoft TechEd 2010. It is a first-time Tech Ed and a first time in Berlin. Unfortunately I fear I will not have time to discover the city as there is a lot to do at the conference. I attended the Silverlight pre-conference as Visual Studio's was dedicated to beginners. Funny thing : they use a lot of penguin images in their example. The infrastructure in place is quite impressive. Lots of machines everywhere, with wireless network, that's great ! The keynote was a lot about aaS (as a service) stuff : infra/platform/app as a service, with clouds everywhere. Well even the newest private cloud seems quite far away for day to day real life problems.

Wednesday, October 27, 2010

New UE46B8000 firmware

Samsung has just issued a new firmware for the UE46B8000 models. This is version 3002. If you still have version 3000, you must upgrade to version 3001 first. Changes :
  • DLNA browsing speed has been greatly improved.