<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-720201479425440668</id><updated>2011-12-30T22:38:17.901+01:00</updated><category term='sxs'/><category term='mobile'/><category term='feeds'/><category term='linux'/><category term='annoyances'/><category term='virtualization'/><category term='yahoo'/><category term='coverflow'/><category term='agenda'/><category term='seven'/><category term='gentoo'/><category term='bsod'/><category term='bug'/><category term='tutorial'/><category term='import'/><category term='asus'/><category term='aspire'/><category term='wtf'/><category term='fringe'/><category term='samsung'/><category term='bios'/><category term='argotic'/><category term='vo'/><category term='e17'/><category term='tasks'/><category term='sysinternals'/><category term='teched'/><category term='bluetooth'/><category term='paris'/><category term='tf1'/><category term='cam'/><category term='desire'/><category term='wpf'/><category term='uac'/><category term='cut'/><category term='g310m'/><category term='search'/><category term='velib'/><category term='sp1'/><category term='services'/><category term='code'/><category term='freebox'/><category term='acer'/><category term='erecovery'/><category term='u30jc-qx010c'/><category term='nvidia'/><category term='berlin'/><category term='elixir'/><title type='text'>ded's blog</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-3412264557502574928</id><published>2011-12-30T22:36:00.002+01:00</published><updated>2011-12-30T22:38:17.912+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Clean Code</title><content type='html'>&lt;a href="http://www.amazon.fr/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code&lt;/a&gt; (A Handbook of Agile Sortware Craftmanship) by Robert C. Martin is a must-read.&lt;br /&gt;&lt;br /&gt;Here are &lt;a href="https://docs.google.com/document/pub?id=1rTYaIn4Br4tgYPx1oo8pz2I2aHT1YehOaBRM7__mxH8"&gt;a few notes&lt;/a&gt; about it (filtered).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-3412264557502574928?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/3412264557502574928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=3412264557502574928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3412264557502574928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3412264557502574928'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/12/clean-code.html' title='Clean Code'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4291609109974438333</id><published>2011-11-18T22:40:00.003+01:00</published><updated>2011-11-18T22:58:38.105+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sysinternals'/><title type='text'>Regasm : insufficient system resources</title><content type='html'>Got this error at work : &lt;blockquote&gt;Regasm : error RA0000 : Insufficient system resources exist to complete the requested service&lt;/blockquote&gt;I played a little with &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb545021"&gt;procmon&lt;/a&gt; (Thanks a lot &lt;a href="http://en.wikipedia.org/wiki/Mark_Russinovich"&gt;Mark&lt;/a&gt; !) 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.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://xkcd.com/979/"&gt;HTH&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4291609109974438333?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4291609109974438333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4291609109974438333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4291609109974438333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4291609109974438333'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/11/regasm-insufficient-system-resources.html' title='Regasm : insufficient system resources'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2903860929423013679</id><published>2011-07-02T17:43:00.005+02:00</published><updated>2011-07-02T17:57:54.241+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><title type='text'>How To Really Reset Folder Settings in Windows 7</title><content type='html'>Sometimes, Windows 7 automatically updates explorer's columns. For example, if a folder has a mp3 file, columns headers will be artist, song, etc.&lt;br /&gt;&lt;br /&gt;This is really annoying for all other files of the same folder.&lt;br /&gt;&lt;br /&gt;Configuration is stored in registry. Deleting and creating again such a folder will not reset its configuration. You have to delete keys in registry.&lt;br /&gt;&lt;br /&gt;Here is the .reg file found on &lt;a href="http://www.sevenforums.com/tutorials/15692-folder-view-settings-reset-all-default.html"&gt;sevenforums.com&lt;/a&gt; :&lt;pre name="code" class="c-sharp"&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\BagMRU]&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell\Bags]&lt;br /&gt;&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\Bags]&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\BagMRU]&lt;br /&gt;&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\BagMRU]&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\Bags]&lt;br /&gt;&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\Bags]&lt;br /&gt;[-HKEY_CURRENT_USER\Software\Classes\Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU]&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2903860929423013679?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2903860929423013679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2903860929423013679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2903860929423013679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2903860929423013679'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/07/how-to-really-reset-folder-settings-in.html' title='How To Really Reset Folder Settings in Windows 7'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2442126174280514757</id><published>2011-05-27T21:04:00.003+02:00</published><updated>2011-05-27T21:07:19.866+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='freebox'/><title type='text'>Révolution... 6 mois plus tard</title><content type='html'>Reçu ce jour (6 mois et 12 jours après la demande effectuée le 15 décembre) :&lt;br /&gt;&lt;blockquote&gt;Free Haut Débit&lt;br /&gt;&lt;br /&gt;Bonjour,&lt;br /&gt;&lt;br /&gt;Nous avons le plaisir de vous annoncer que votre nouvelle Freebox pour votre ligne ******** est en cours d'expédition au point relais KIALA.&lt;br /&gt;&lt;br /&gt;[...].&lt;br /&gt;&lt;br /&gt;Vous serez informé par email et SMS de l'arrivée de votre colis au point relais KIALA choisi.&lt;br /&gt;&lt;br /&gt;Sincères salutations,&lt;br /&gt;&lt;br /&gt;L'équipe Free&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2442126174280514757?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2442126174280514757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2442126174280514757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2442126174280514757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2442126174280514757'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/05/revolution-6-mois-plus-tard.html' title='Révolution... 6 mois plus tard'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-1479353525556144031</id><published>2011-03-12T21:09:00.022+01:00</published><updated>2011-09-28T09:55:32.164+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><category scheme='http://www.blogger.com/atom/ns#' term='sp1'/><title type='text'>Windows 7 sp1 [Solved]</title><content type='html'>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 &lt;a href="http://windows.microsoft.com/fr-FR/windows7/troubleshoot-problems-installing-service-pack"&gt;this does not help me solve this problem&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Found the same problem &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itproinstall/thread/f876c4e1-6696-48dd-851f-65203dfa9700"&gt;here&lt;/a&gt; and &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itproinstall/thread/c81f1185-e8c0-4819-8546-73bd69c01d24/"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Looking deeper in C:\Windows\Logs\CBS\CBS.log (&gt;250 MB) :&lt;pre&gt;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&lt;br /&gt;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&lt;br /&gt;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)&lt;br /&gt;[gle=0x80004005]&lt;br /&gt;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]&lt;br /&gt;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]&lt;br /&gt;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]&lt;br /&gt;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]&lt;br /&gt;2011-03-12 22:11:38, Info                  CBS    Failed to resolve execution update. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;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]&lt;br /&gt;2011-03-12 22:11:38, Info                  CSI    0000000f@2011/3/12:21:11:38.370 CSI Transaction @0x34c280 destroyed&lt;/pre&gt;I think the important part is &lt;span style="font-weight:bold;"&gt;Package_43_for_KB976098~31bf3856ad364e35~amd64~~6.1.1.1&lt;/span&gt;. So I tried to &lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=3965"&gt;download KB976098 for x64&lt;/a&gt; and install it manually, but windows tells me it is already installed.&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;sfc /scannow&lt;/span&gt; found nothing.&lt;/li&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/kb/947821/en-us"&gt;System Update Readiness Tool&lt;/a&gt; (KB947821 [v14]) does not help either (cannot install).&lt;/li&gt;&lt;/ul&gt;I eventually managed to install SP1 thanks to &lt;a href="http://www.sevenforums.com/windows-updates-activation/163526-win7-sp1-upgrade-error_sxs_assembly_missing-0x80073701.html"&gt;Kris post&lt;/a&gt; : I had to remove 4 KB : KB976098, KB979306, KB981793 and KB979916. Problem solved !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-1479353525556144031?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/1479353525556144031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=1479353525556144031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1479353525556144031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1479353525556144031'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/03/windows-7-sp1.html' title='Windows 7 sp1 [Solved]'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-6384878888921494411</id><published>2011-02-20T19:37:00.007+01:00</published><updated>2011-02-20T20:13:46.255+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='argotic'/><category scheme='http://www.blogger.com/atom/ns#' term='feeds'/><title type='text'>Argotic Syndication Framework Desillusion</title><content type='html'>When I discovered &lt;a href="http://argotic.codeplex.com/"&gt;Argotic Syndication Framework&lt;/a&gt; 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.&lt;br /&gt;&lt;br /&gt;But, I failed to make it work on the first syndication feeds I tried :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.fr/search?hl=fr&amp;source=hp&amp;q=site%3Ablog.free.fr&amp;aq=f"&gt;blog.free.fr&lt;/a&gt; atom feeds generated with &lt;a href="http://dotclear.org/"&gt;dotclear&lt;/a&gt; raise the following exception :&lt;pre name="code" class="csharp"&gt;   at Argotic.Common.Guard.ArgumentNotNullOrEmptyString(String value, String name)&lt;br /&gt;   at Argotic.Syndication.AtomPersonConstruct.set_Name(String value)&lt;br /&gt;   at Argotic.Syndication.AtomPersonConstruct.Load(XPathNavigator source)&lt;br /&gt;   at Argotic.Syndication.AtomPersonConstruct.Load(XPathNavigator source, SyndicationResourceLoadSettings settings)&lt;br /&gt;   at Argotic.Data.Adapters.Atom10SyndicationResourceAdapter.FillFeedCollections(AtomFeed feed, XPathNavigator source, XmlNamespaceManager manager, SyndicationResourceLoadSettings settings)&lt;br /&gt;   at Argotic.Data.Adapters.Atom10SyndicationResourceAdapter.Fill(AtomFeed resource)&lt;br /&gt;   at Argotic.Data.Adapters.SyndicationResourceAdapter.FillAtomResource(ISyndicationResource resource, SyndicationResourceMetadata resourceMetadata)&lt;br /&gt;   at Argotic.Data.Adapters.SyndicationResourceAdapter.Fill(ISyndicationResource resource, SyndicationContentFormat format)&lt;br /&gt;   at Argotic.Syndication.AtomFeed.Load(XPathNavigator navigator, SyndicationResourceLoadSettings settings, SyndicationResourceLoadedEventArgs eventData)&lt;br /&gt;   at Argotic.Syndication.AtomFeed.Load(Uri source, ICredentials credentials, IWebProxy proxy, SyndicationResourceLoadSettings settings)&lt;br /&gt;   at Argotic.Syndication.AtomFeed.Create(Uri source, ICredentials credentials, IWebProxy proxy, SyndicationResourceLoadSettings settings)&lt;br /&gt;   at Argotic.Syndication.AtomFeed.Create(Uri source, SyndicationResourceLoadSettings settings)&lt;br /&gt;   at Argotic.Syndication.AtomFeed.Create(Uri source)&lt;/pre&gt;It fails to parse publication dates in &lt;a href="http://www.universfreebox.com/backend.php?id_rubrique=1"&gt;Univers Freebox syndication feeds&lt;/a&gt; or &lt;a href="http://rss.slashdot.org/Slashdot/slashdot"&gt;Slashdot feeds&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well, it seems I have to learn this langage anyway...&lt;br /&gt;&lt;br /&gt;Edit : After failing again on slashdot feeds with .NET 3.5 classes, I found Peter's blog. Actually my code was getting closer to &lt;a href="http://www.eggheadcafe.com/tutorials/aspnet/9faa101f-0a1a-465f-a41a-3e52dd9f7526/everything-rss--atom-f.aspx"&gt;his solution&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-6384878888921494411?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/6384878888921494411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=6384878888921494411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6384878888921494411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6384878888921494411'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/02/argotic-syndication-framework.html' title='Argotic Syndication Framework Desillusion'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4384641838087199058</id><published>2011-02-01T22:06:00.005+01:00</published><updated>2011-02-01T22:42:42.022+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='desire'/><title type='text'>Merci à la TVA !</title><content type='html'>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 :&lt;ul&gt;&lt;li&gt;phoneandphone : 1 € - &lt;a href="http://www8.phoneandphone.com/telephonie/mobile-avec-abonnement/Htc/Desire/1-50010-99-telephone-Htc-Desire-avec-abo-.html"&gt;Aujourd'hui : 169 €&lt;/a&gt;&lt;/li&gt;&lt;li&gt;BT : 59 € - Aujourd'hui : 180 €&lt;/li&gt;&lt;/ul&gt;Voleurs !&lt;br /&gt;&lt;br /&gt;Mais bon, il suffit de se détendre ! 51 € en blanc :^( chez Virgin Mobile avec le code promo &lt;span style="font-weight:bold;"&gt;DESIRE&lt;/span&gt; et le forfait E-Devine à 31 €.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4384641838087199058?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4384641838087199058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4384641838087199058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4384641838087199058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4384641838087199058'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/02/merci-la-tva.html' title='Merci à la TVA !'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5116820167594115051</id><published>2011-01-30T10:24:00.018+01:00</published><updated>2011-03-13T22:09:41.230+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='acer'/><category scheme='http://www.blogger.com/atom/ns#' term='aspire'/><category scheme='http://www.blogger.com/atom/ns#' term='erecovery'/><title type='text'>Recover Acer Aspire 1650</title><content type='html'>Useful keys :&lt;ul&gt;&lt;li&gt;F2 : Enter BIOS Setup&lt;/li&gt;&lt;li&gt;F12 : Choose boot device (if F12 key &lt;br /&gt;enabled in BIOS)&lt;/li&gt;&lt;/ul&gt;Notes :&lt;ul&gt;&lt;li&gt;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).&lt;/li&gt;&lt;/ul&gt;Steps :&lt;ul&gt;&lt;li&gt;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.&lt;br /&gt;Then the laptop reboots on the DVD to finish copying files.&lt;br /&gt;&lt;br /&gt;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)&lt;/li&gt;&lt;/ul&gt;Then, if you reboot, Windows would use the following partitions :&lt;ul&gt;&lt;li&gt;C: : old hidden partition (hda1)&lt;/li&gt;&lt;li&gt;D: : old C: (hda2)&lt;/li&gt;&lt;li&gt;E: : old D: (hda3 or hda5)&lt;/li&gt;&lt;/ul&gt;IMHO, having two C:-like partitions is really messy.&lt;br /&gt;&lt;br /&gt;That's why I want to hide the first partition again. This can be done in a few steps :&lt;ul&gt;&lt;li&gt;Hide the first partition&lt;/li&gt;&lt;li&gt;Copy the first partition (hda1) to the second (hda2) &lt;/li&gt;&lt;li&gt;Eventually reboot&lt;/li&gt;&lt;/ul&gt;Linux comes to the rescue. I use the &lt;a href="http://www.gentoo.org/main/en/where.xml"&gt;Gentoo Minimal Install dvd&lt;/a&gt; (iso) for &lt;a href="http://mirrors.kernel.org/gentoo/releases/x86/autobuilds/current-iso/"&gt;x86&lt;/a&gt;. So the detailed steps are :&lt;ul&gt;&lt;li&gt;Burn Gentoo minimal dvd&lt;/li&gt;&lt;li&gt;Reboot on this dvd (F2 or F12 can help)&lt;/li&gt;&lt;li&gt;Hide hda1 : (this commands sets hda1 type to Compaq Diagnostics, disables boot on hda1, enables boot for hda2 and save)&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;fdisk /dev/hda&lt;br /&gt;t 1 12&lt;br /&gt;a 1&lt;br /&gt;a 2&lt;br /&gt;w&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Mount hda1 and hda2 :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;mkdir /mnt/win/c&lt;br /&gt;mkdir /mnt/win/d&lt;br /&gt;mount /dev/hda1 /mnt/win/c&lt;br /&gt;mount /dev/hda2 /mnt/win/d&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Optional : save hda2 content :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;mkdir /mnt/win/d/old&lt;br /&gt;mv /mnt/win/d/* /mnt/win/d/old&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Copy hda1 to hda2 :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;cp -a /mnt/win/c/* /mnt/win/d&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Reboot to windows&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;reboot&lt;/pre&gt;Then your fresh new WindowsXP will start using second partition.&lt;br /&gt;&lt;br /&gt;Acer sucks, try &lt;a href="http://www.prix-portables.fr/filtres/criteres/48ac99447afe6255be71a15729452fa5.html"&gt;Asus&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Edit : &lt;ul&gt;&lt;li&gt;Radeon X300 does not work after reboot. ATI driver fails to install.&lt;/li&gt;&lt;li&gt;Intel 2200BG wifi card does not work either.&lt;/li&gt;&lt;li&gt;Keyboard is not recognized and locks the Touchpad.&lt;/li&gt;&lt;li&gt;Startup desktop.ini file is opened automaticaly when XP starts ? Might be because the linux copy did not take into account the hidden attribute...&lt;/li&gt;&lt;/ul&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5116820167594115051?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5116820167594115051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5116820167594115051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5116820167594115051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5116820167594115051'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2011/01/recover-acer-aspire-1650.html' title='Recover Acer Aspire 1650'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-6929338994011383629</id><published>2010-11-08T22:31:00.010+01:00</published><updated>2010-11-08T23:44:26.070+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teched'/><category scheme='http://www.blogger.com/atom/ns#' term='berlin'/><title type='text'>TechEd 2010</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/TNhwlET5PYI/AAAAAAAAByg/VTsluLupnIo/s1600/teched2010a.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 128px;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/TNhwlET5PYI/AAAAAAAAByg/VTsluLupnIo/s200/teched2010a.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5537299523966680450" /&gt;&lt;/a&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;The infrastructure in place is quite impressive. Lots of machines everywhere, with wireless network, that's great !&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/TNhwt33di4I/AAAAAAAAByo/gHJ9DVBK_HA/s1600/teched2010b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 68px;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/TNhwt33di4I/AAAAAAAAByo/gHJ9DVBK_HA/s400/teched2010b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5537299675245022082" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-6929338994011383629?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/6929338994011383629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=6929338994011383629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6929338994011383629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6929338994011383629'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/11/teched-2010.html' title='TechEd 2010'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dCaUukYtoQk/TNhwlET5PYI/AAAAAAAAByg/VTsluLupnIo/s72-c/teched2010a.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-812687560364352650</id><published>2010-10-27T23:20:00.003+02:00</published><updated>2010-10-27T23:22:54.119+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='samsung'/><title type='text'>New UE46B8000 firmware</title><content type='html'>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.&lt;br /&gt;&lt;br /&gt;Changes :&lt;ul&gt;&lt;li&gt;DLNA browsing speed has been greatly improved.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-812687560364352650?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/812687560364352650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=812687560364352650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/812687560364352650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/812687560364352650'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/10/new-ue46b8000-firmware.html' title='New UE46B8000 firmware'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5853539969395977143</id><published>2010-08-19T23:06:00.002+02:00</published><updated>2010-08-19T23:09:23.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><title type='text'>Windows 7 Elevated Startup Shortcuts</title><content type='html'>Shortcuts in Windows 7 Startup folder configured with elevation (administrative privileges) will not be launched.&lt;br /&gt;&lt;br /&gt;You need to create a scheduled task with administrative (maximum) rights configured to start when you open a session.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5853539969395977143?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5853539969395977143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5853539969395977143' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5853539969395977143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5853539969395977143'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/08/windows-7-elevated-startup-shortcuts.html' title='Windows 7 Elevated Startup Shortcuts'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7128474128394946829</id><published>2010-08-14T15:25:00.006+02:00</published><updated>2010-08-15T20:03:01.867+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Asus U30JC-QX010X : Asus WebStorage</title><content type='html'>Asus WebStorage suddenly stopped asking for a login/password. I mistakenly clicked on the icon below Computer and it just asked for EULA agreement. Then I've been able to use the dedicated 1000 GB storage for my backups. Asus support told me a couple of months ago that U30JC-QX010X had no WebStorage offer included.&lt;br /&gt;&lt;br /&gt;But :&lt;ul&gt;&lt;li&gt;This is just a 2 months trial.&lt;/li&gt;&lt;li&gt;Asus WebStorage pollutes all synchronized folders with .awo directories.&lt;/li&gt;&lt;li&gt;You cannot disable default folders (Favorites, Documents and some BackupDemo folder on the desktop).&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7128474128394946829?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7128474128394946829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7128474128394946829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7128474128394946829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7128474128394946829'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/08/asus-u30jc-qx010x-asus-webstorage.html' title='Asus U30JC-QX010X : Asus WebStorage'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8552849814550063445</id><published>2010-07-29T15:00:00.004+02:00</published><updated>2010-07-29T15:15:27.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='cam'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Setup Gentoo on Asus U30JC-QX010X : Part 4 - Webcam</title><content type='html'>In order to use the asus U30JC-QX010X webcam on Gentoo, I needed to enable a few options in the kernel (2.6.34-r2) :&lt;pre name="code" class="CSharp"&gt;CONFIG_MEDIA_SUPPORT=y&lt;br /&gt;CONFIG_VIDEO_DEV=m&lt;br /&gt;CONFIG_VIDEO_V4L2_COMMON=m&lt;br /&gt;CONFIG_VIDEO_ALLOW_V4L1=y&lt;br /&gt;CONFIG_VIDEO_V4L1_COMPAT=y&lt;br /&gt;CONFIG_VIDEO_MEDIA=m&lt;br /&gt;CONFIG_IR_CORE=y&lt;br /&gt;CONFIG_VIDEO_IR=y&lt;br /&gt;CONFIG_MEDIA_TUNER=m&lt;br /&gt;CONFIG_MEDIA_TUNER_CUSTOMISE=y&lt;br /&gt;CONFIG_VIDEO_V4L2=m&lt;br /&gt;CONFIG_VIDEO_V4L1=m&lt;br /&gt;CONFIG_VIDEO_CAPTURE_DRIVERS=y&lt;br /&gt;CONFIG_VIDEO_HELPER_CHIPS_AUTO=y&lt;br /&gt;CONFIG_VIDEO_IR_I2C=m&lt;br /&gt;CONFIG_V4L_USB_DRIVERS=y&lt;br /&gt;CONFIG_USB_VIDEO_CLASS=m&lt;br /&gt;CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y&lt;br /&gt;CONFIG_SND_RAWMIDI=m&lt;br /&gt;CONFIG_SND_RAWMIDI_SEQ=m&lt;br /&gt;CONFIG_SND_USB=y&lt;br /&gt;CONFIG_SND_USB_AUDIO=m&lt;/pre&gt;Added use flags :&lt;pre name="code" class="CSharp"&gt;media-tv/xawtv X alsa opengl&lt;br /&gt;media-video/mplayer v4l v4l2&lt;/pre&gt;I only needed to emerge xawtv and mplayer. usbutils was already installed by hal.&lt;br /&gt;&lt;br /&gt;Then, you can test your webcam :&lt;pre name="code" class="CSharp"&gt;mplayer tv://&lt;/pre&gt;Reference : &lt;a href="http://en.gentoo-wiki.com/wiki/Webcam"&gt;Webcam - Gentoo Linux Wiki&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8552849814550063445?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8552849814550063445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8552849814550063445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8552849814550063445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8552849814550063445'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/07/setup-gentoo-on-asus-u30jc-qx010x-part.html' title='Setup Gentoo on Asus U30JC-QX010X : Part 4 - Webcam'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2430342274644806790</id><published>2010-07-28T19:17:00.003+02:00</published><updated>2010-07-28T19:22:41.643+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Filed my first Gentoo bug today</title><content type='html'>While struggling again with linux nvidia driver to use my &lt;a href="http://d3dal3.blogspot.com/2010/06/setup-gentoo-on-asus-u30jc-qx010x-part.html"&gt;Geforce 310m under Gentoo&lt;/a&gt;, I found a bug in eselect-opengl package. The patch is available in &lt;a href="http://bugs.gentoo.org/show_bug.cgi?id=330249"&gt;bugzilla&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2430342274644806790?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2430342274644806790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2430342274644806790' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2430342274644806790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2430342274644806790'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/07/filed-my-first-gentoo-bug-today.html' title='Filed my first Gentoo bug today'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5839243661779140080</id><published>2010-07-24T20:53:00.051+02:00</published><updated>2010-08-02T12:19:41.609+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sxs'/><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='annoyances'/><title type='text'>Unable to add new components in Windows 7 [Solved]</title><content type='html'>I wanted to add IIS on my asus laptop with Windows 7 Pro x64 but it keeps failing miserably. I cannot add any new component. It fails with the error :&lt;ul&gt;&lt;li&gt;French : &lt;span style="font-weight:bold;"&gt;Une erreur s'est produite. Certaines fonctionnalités n'ont pas été modifiées correctement.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;English : &lt;span style="font-weight:bold;"&gt;An error has occurred. Not all of the features were successfully changed.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;It is not linked to my tuning of windows 7 professionnal as I have enabled back again &lt;a href="http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x-tuning-windows-7-part_30.html"&gt;services&lt;/a&gt;, &lt;a href="http://d3dal3.blogspot.com/2010/06/asus-u30jc-qx010x-tuning-windows-7-part.html"&gt;tasks&lt;/a&gt;, &lt;a href="http://d3dal3.blogspot.com/2010/06/asus-u30jc-qx010x-tuning-windows-7-part_06.html"&gt;auto run&lt;/a&gt; registry keys and startup shortcuts.&lt;br /&gt;&lt;br /&gt;I have also enabled again system restore for both C and D drives. Strangely, I had to temporarily rename the C drive to its original name (OS) to avoid strange errors when validating the new configuration.&lt;br /&gt;&lt;br /&gt;I found on the net that the following command line could help :&lt;pre name="code" class="CSharp"&gt;fsutil resource setautoreset true C:\&lt;/pre&gt;But it hasn't fixed my problem.&lt;br /&gt;&lt;br /&gt;Each attempt adds five &lt;span style="font-weight:bold;"&gt;Windows Error Reporting&lt;/span&gt; events in the &lt;span style="font-weight:bold;"&gt;Application&lt;/span&gt; events log like :&lt;pre name="code" class="CSharp"&gt;Récipient d’erreurs 660181886, type 5&lt;br /&gt;Nom d’événement : CbsPackageServicingFailure2&lt;br /&gt;Réponse : Non disponible&lt;br /&gt;ID de CAB : 0&lt;br /&gt;&lt;br /&gt;Signature du problème : &lt;br /&gt;P1 : 6.1.7600.16385&lt;br /&gt;P2 : Microsoft-Windows-Foundation-Package&lt;br /&gt;P3 : 6.1.7600.16385&lt;br /&gt;P4 : amd64&lt;br /&gt;P5 : unknown&lt;br /&gt;P6 : 80073701&lt;br /&gt;P7 : Resolve&lt;br /&gt;P8 : Installed&lt;br /&gt;P9 : Installed&lt;br /&gt;P10 : Windows Optional Component Manager&lt;br /&gt;&lt;br /&gt;Fichiers joints :&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100719145300.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100720135637.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724175736.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724190432.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724202127.cab&lt;br /&gt;C:\Windows\Logs\CBS\CBS.log&lt;br /&gt;C:\Windows\servicing\Sessions\Sessions.xml&lt;br /&gt;C:\Windows\winsxs\poqexec.log&lt;br /&gt;C:\Windows\inf\setupapi.dev.log&lt;br /&gt;&lt;br /&gt;Ces fichiers sont peut-être disponibles ici :&lt;br /&gt;C:\ProgramData\Microsoft\Windows\WER\ReportArchive\Critical_6.1.7600.16385_12b152e0507da7dbac253e5d6773b3d790739076_02e58056&lt;br /&gt;&lt;br /&gt;Symbole d’analyse : &lt;br /&gt;Nouvelle recherche de la solution : 0&lt;br /&gt;ID de rapport : 48d9af65-9764-11df-89ff-9b9906ca6306&lt;br /&gt;Statut du rapport : 0&lt;/pre&gt;or&lt;pre name="code" class="CSharp"&gt;Récipient d’erreurs 1105700561, type 5&lt;br /&gt;Nom d’événement : WindowsWcpOtherFailure3&lt;br /&gt;Réponse : Non disponible&lt;br /&gt;ID de CAB : 0&lt;br /&gt;&lt;br /&gt;Signature du problème : &lt;br /&gt;P1 : 6.1.7600&lt;br /&gt;P2 : base\wcp\componentstore\csd_locking.cpp&lt;br /&gt;P3 : CCSDirectTransaction::LockComponent&lt;br /&gt;P4 : 321&lt;br /&gt;P5 : c015000c&lt;br /&gt;P6 : 0x05f3852f&lt;br /&gt;P7 : &lt;br /&gt;P8 : &lt;br /&gt;P9 : &lt;br /&gt;P10 : &lt;br /&gt;&lt;br /&gt;Fichiers joints :&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100719145300.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100720135637.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724175736.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724190432.cab&lt;br /&gt;C:\Windows\Logs\CBS\CbsPersist_20100724202127.cab&lt;br /&gt;C:\Windows\Logs\CBS\CBS.log&lt;br /&gt;C:\Windows\servicing\Sessions\Sessions.xml&lt;br /&gt;C:\Windows\winsxs\poqexec.log&lt;br /&gt;C:\Windows\System32\LogFiles\Scm\SCM.EVM&lt;br /&gt;C:\Windows\Logs\CBS\FilterList.log&lt;br /&gt;C:\Windows\Temp\WER6622.tmp.hdmp&lt;br /&gt;C:\Windows\Temp\WER66ED.tmp.mdmp&lt;br /&gt;&lt;br /&gt;Ces fichiers sont peut-être disponibles ici :&lt;br /&gt;C:\ProgramData\Microsoft\Windows\WER\ReportArchive\Critical_6.1.7600_61fd7aaf67694893e820b3fd1752ddf4faf4e84_06197a3e&lt;br /&gt;&lt;br /&gt;Symbole d’analyse : &lt;br /&gt;Nouvelle recherche de la solution : 0&lt;br /&gt;ID de rapport : 48d9af64-9764-11df-89ff-9b9906ca6306&lt;br /&gt;Statut du rapport : 0&lt;/pre&gt;Extract from C:\Windows\Logs\CBS\CBS.log (with telnet client component) :&lt;pre name="code" class="CSharp"&gt;Info    CBS    Perf: Resolve chain started.&lt;br /&gt;Info    CSI    0000000b@2010/7/24:20:44:42.885 CSI Transaction @0x69300e0 initialized for deployment engine {d16d444c-56d8-11d5-882d-0080c847b195} with flags 00000002 and client id [101]"TI1.30092144_4010074112:2/Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.1.7600.16385"&lt;br /&gt;Info    CBS    Exec: Resolving Package: Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385, Update: TelnetClient&lt;br /&gt;Info    CBS    Exec: Resolving component from existing package; passing NULL manifest path to PinDeployment and hoping things haven't been scavenged.&lt;br /&gt;Info    CBS    Exec: Resolving Package: Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385, Update: TelnetClient, PinDeployment: amd64_microsoft-windows-t..oyment-languagepack_31bf3856ad364e35_6.1.7600.16385_de-de_c3c58e4b573d9172&lt;br /&gt;Error   CSI    0000000c@2010/7/24:20:44:42.913 (F) d:\w7rtm\base\wcp\componentstore\csd_locking.cpp(321): Error STATUS_SXS_ASSEMBLY_MISSING originated in function CCSDirectTransaction::LockComponent expression: (null) [gle=0x80004005]&lt;br /&gt;Error   CSI    0000000d (F) STATUS_SXS_ASSEMBLY_MISSING #238072# from CCSDirectTransaction::OperateEnding at index 0 of 1 operations, disposition 2[gle=0xd015000c]&lt;br /&gt;Error   CSI    0000000e (F) HRESULT_FROM_WIN32(ERROR_SXS_ASSEMBLY_MISSING) #237957# from Windows::ServicingAPI::CCSITransaction::ICSITransaction_PinDeployment(Flags = 0, a = Microsoft-Windows-Telnet-Client-Deployment-LanguagePack, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_AMD64 (9), Culture = [l:10{5}]"de-DE", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral, cb = (null), s = (null), rid = [96]"Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385.TelnetClient", rah = (null), manpath = (null), catpath = (null), ed = 0, disp = 0)[gle=0x80073701]&lt;br /&gt;Info    CBS    Failed to pin deployment while resolving Update: TelnetClient from file: (null) [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Info    CBS    Failed to resolve item[0] in Package: Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385, Update: TelnetClient [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Info    CBS    Failed to resolve execution update. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Error   CBS    Failed to resolve execution package: Microsoft-Windows-Telnet-Client-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Info    CSI    0000000f@2010/7/24:20:44:45.042 CSI Transaction @0x69300e0 destroyed&lt;br /&gt;Info    CBS    Perf: Resolve chain complete.&lt;br /&gt;Info    CBS    Failed to resolve execution chain. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Error   CBS    Failed to process single phase execution. [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Info    CBS    WER: Generating failure report for package: Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.1.7600.16385, status: 0x80073701, failure source: Resolve, start state: Installed, target state: Installed, client id: Windows Optional Component Manager&lt;br /&gt;Info    CBS    Failed to query DisableWerReporting flag.  Assuming not set... [HRESULT = 0x80070002 - ERROR_FILE_NOT_FOUND]&lt;br /&gt;Info    CBS    Failed to add %windir%\winsxs\pending.xml to WER report because it is missing.  Continuing without it...&lt;br /&gt;Info    CBS    Failed to add %windir%\winsxs\pending.xml.bad to WER report because it is missing.  Continuing without it...&lt;br /&gt;Info    CBS    Reboot mark refs: 0&lt;br /&gt;Info    CBS    Enabling LKG boot option&lt;br /&gt;Info    CBS    Exec: End: nested restore point - complete.&lt;br /&gt;Info    CBS    Restored system sleep block state: 0x80000000&lt;br /&gt;Info    CBS    Client aborted the install. [HRESULT = 0x800f0821 - CBS_E_ABORT]&lt;br /&gt;Info    CBS    Exec: Processing complete.  Session: 30092144_4010074112, Package: Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~6.1.7600.16385 [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Error   CBS    Failed to perform operation.  [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;br /&gt;Info    CBS    Session: 30092144_4010074112 finalized. Reboot required: no [HRESULT = 0x80073701 - ERROR_SXS_ASSEMBLY_MISSING]&lt;/pre&gt;A few notes :&lt;ul&gt;&lt;li&gt;STATUS_SXS_ASSEMBLY_MISSING : Culture is wrong ! Why the hell is it looking for German (de-DE) packages on my French laptop ?&lt;/li&gt;&lt;li&gt;The log tells &lt;span style="font-weight:bold;"&gt;Reboot required: no&lt;/span&gt; but it asks for reboot anyway (even if nothing is installed!)&lt;/li&gt;&lt;/ul&gt;I have downloaded &lt;a href="http://support.microsoft.com/kb/947821"&gt;System Update Readiness Tool&lt;/a&gt; (100 MB) even if the ERROR_SXS_ASSEMBLY_MISSING error might not be fixed by this tool (not listed in the error table). After 25 min execution, no error were detected in C:\Windows\Logs\CBS\CheckSUR.log.&lt;br /&gt;&lt;br /&gt;Sytem File Checker tool (&lt;span style="font-weight:bold;"&gt;sfc /verifyonly&lt;/span&gt;) found nothing (aucune violation d'intégrité).&lt;br /&gt;&lt;br /&gt;Google search :&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.fr/#hl=fr&amp;q=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;fp=bf3adda36ef506cc"&gt;An error has occurred. Not all of the features were successfully changed.&lt;/a&gt; : 8.000.000 results&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.fr/#hl=fr&amp;q=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+site%3Amicrosoft.com&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;fp=bf3adda36ef506cc"&gt;on microsoft.com only&lt;/a&gt; : 3.200 results&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.fr/#hl=fr&amp;q=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+site%3Amicrosoft.com+CbsPackageServicingFailure2&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;fp=bf3adda36ef506cc"&gt;with CbsPackageServicingFailure2 event only on microsoft.com&lt;/a&gt; : 2 results&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.fr/#hl=fr&amp;q=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+site%3Amicrosoft.com+WindowsWcpOtherFailure3&amp;aq=&amp;aqi=&amp;aql=&amp;oq=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+site%3Amicrosoft.com+WindowsWcpOtherFailure3&amp;gs_rfai=&amp;fp=bf3adda36ef506cc"&gt;with WindowsWcpOtherFailure3 event only on microsoft.com&lt;/a&gt; : 1 result&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.fr/#hl=fr&amp;q=An+error+has+occurred.+Not+all+of+the+features+were+successfully+changed.+WindowsWcpOtherFailure3&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;fp=bf3adda36ef506cc"&gt;with WindowsWcpOtherFailure3 event&lt;/a&gt; : 20 results (including this blog)&lt;/li&gt;&lt;/ul&gt;Running the package manager by hand is a bit more explicit (I use the same name as in my French graphical user interface):&lt;pre name="code" class="CSharp"&gt;pkgmgr /iu:"Client Telnet"&lt;/pre&gt;Gestionnaire de package Windows&lt;br /&gt;Echec de l'opération avec 0x80073701&lt;br /&gt;L'assembly référencé n'a pas pu être trouvé.&lt;br /&gt;&lt;br /&gt;Well this is the ERROR_SXS_ASSEMBLY_MISSING error found earlier in Component Based Servicing log (CBS.log).&lt;br /&gt;&lt;br /&gt;After some research with Process Monitor, it seems that TrustedInstaller.exe fails to open the registry key HKLM\COMPONENTS\DerivedData\Components\amd64_microsoft-windows-s..oyment-languagepack_31bf3856ad364e35_6.1.7600.16385_de-de_08eb0375be2e567f. I can confirm this with regedit : the de_de key is missing, I only got these versions : el-gr, en-us, es-es, fr-fr, he-il, it-it, nl-nl, pt-pt and zh-tw.&lt;br /&gt;&lt;br /&gt;Note: HKLM\COMPONENTS might be missing on Windows 7. In this case, it would be generated completely if you launch Windows package manager UI.&lt;br /&gt;&lt;br /&gt;These keys matches files under C:\Windows\winsxs. I cannot find the de-de files in this folder. This is what &lt;a href="http://social.technet.microsoft.com/Forums/en-US/w7itproinstall/thread/8aee040a-213b-4dac-8fb1-b0d1acb73b62"&gt;Andre Ziegler told me in the forums&lt;/a&gt;. He also confirmed that I need to reinstall Windows 7 (again :( ).&lt;br /&gt;&lt;br /&gt;If I look into C:\Windows\System32\catroot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}, I can find all language files, and the German file in particular (like Microsoft-Windows-Shell-InboxGames-Package~31bf3856ad364e35~amd64~de-DE~6.1.7600.16385).&lt;br /&gt;&lt;br /&gt;As adviced in &lt;a href="http://www.out-web.net/?p=623"&gt;Win7 Inside Out - WinSxS&lt;/a&gt;, I have launched language packs setup application &lt;span style="font-weight:bold;"&gt;lpksetup&lt;/span&gt; but German pack is not installed (as expected : manifests are missing).&lt;br /&gt;&lt;br /&gt;Note: WinSxS = &lt;a href="http://en.wikipedia.org/wiki/Side-by-side_assembly"&gt;Windows Side by Side assemblies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://www.mydigitallife.info/2009/08/29/download-windows-7-mui-language-packs-official-32-bit-and-64-bit-direct-download-links/"&gt;mydigitallife&lt;/a&gt;, I have downloaded German MUI pack : &lt;a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/08/windows6.1-kb972813-x64-de-de_399ac15b2d55fd5dea0770d98825d7e75f4ad533.exe"&gt;windows6.1-kb972813-x64-de-de_399ac15b2d55fd5dea0770d98825d7e75f4ad533.exe&lt;/a&gt;. To install this pack :&lt;ul&gt;&lt;li&gt;Run pack exe to extract lp.cab file&lt;/li&gt;&lt;li&gt;Download &lt;a href="http://www.froggie.sk/download.html"&gt;vistalizator&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Choose add language&lt;/li&gt;&lt;li&gt;Select lp.cab file&lt;/li&gt;&lt;li&gt;Validate language installation&lt;/li&gt;&lt;li&gt;Make German the new display language : no !&lt;/li&gt;&lt;/ul&gt;It is now possible to add new features. Victory !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5839243661779140080?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5839243661779140080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5839243661779140080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5839243661779140080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5839243661779140080'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/07/unable-to-add-new-components-in-windows.html' title='Unable to add new components in Windows 7 [Solved]'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4862138675091078377</id><published>2010-07-05T21:31:00.004+02:00</published><updated>2010-07-06T20:38:56.170+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><title type='text'>How to read ext2 / ext3 partition under Windows 7</title><content type='html'>&lt;a href="http://www.fs-driver.org/download.html"&gt;Ext2IFS&lt;/a&gt; works !&lt;br /&gt;You must enable Vista compatibility mode (I have chosen Vista SP2).&lt;br /&gt;Then you can assign drive letters in the control panel (IFS Drives Control Panel Item in Icon mode).&lt;br /&gt;Unfortunately, it seems that you need to shutdown your computer to properly unmount the drive (hibernation improperly unmounts partitions).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4862138675091078377?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4862138675091078377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4862138675091078377' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4862138675091078377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4862138675091078377'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/07/how-to-read-ext2-ext3-partition-under.html' title='How to read ext2 / ext3 partition under Windows 7'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4576924325102419811</id><published>2010-06-27T00:15:00.006+02:00</published><updated>2010-06-27T00:51:52.186+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='uac'/><title type='text'>How to disable UAC for an application</title><content type='html'>It is possible to disable UAC consent prompt for some applications with Microsoft &lt;a href="http://technet.microsoft.com/fr-fr/library/cc507852.aspx"&gt;ACT&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;References :&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.vista4beginners.com/Disable-UAC-for-certain-applications"&gt;http://www.vista4beginners.com/Disable-UAC-for-certain-applications&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://dailyapps.net/2008/01/hack-attack-disable-uac-for-certain-applications-in-vista/"&gt;http://dailyapps.net/2008/01/hack-attack-disable-uac-for-certain-applications-in-vista/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;But unfortunately, this does not work on Windows 7 Pro x64. I failed to disable UAC consent prompt for Process Explorer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4576924325102419811?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4576924325102419811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4576924325102419811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4576924325102419811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4576924325102419811'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/how-to-disable-uac-for-application.html' title='How to disable UAC for an application'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-1000972300973067807</id><published>2010-06-24T22:07:00.022+02:00</published><updated>2010-06-26T17:30:19.052+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 8</title><content type='html'>I've been told that &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7-source.html"&gt;Part 7&lt;/a&gt; had memory leaks. In the comments, I link a blog article describing how to study memory leaks : you can watch the &lt;span style="font-weight: bold;"&gt;Private Bytes&lt;/span&gt; performance counter.&lt;br /&gt;&lt;br /&gt;We need :&lt;ul&gt;&lt;li&gt;The performance counter&lt;/li&gt;&lt;li&gt;A callback displaying the counter value&lt;/li&gt;&lt;li&gt;A timer&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="c-sharp"&gt;using System.Diagnostics;&lt;br /&gt;using System.Windows.Threading;&lt;br /&gt;&lt;br /&gt;private readonly PerformanceCounter counter = GetCounter();&lt;br /&gt;private readonly DispatcherTimer timer = new DispatcherTimer();&lt;br /&gt;&lt;br /&gt;private void timer_Tick(object sender, EventArgs e)&lt;br /&gt;{&lt;br /&gt;    long kb = Convert.ToInt64(counter.NextValue() / 1000);&lt;br /&gt;    perfLabel.Content = string.Format("{0,12} KB", kb.ToString("###.###.###"));&lt;br /&gt;}&lt;br /&gt;private static PerformanceCounter GetCounter()&lt;br /&gt;{&lt;br /&gt;    var counter = new PerformanceCounter();&lt;br /&gt;    counter.CategoryName = "Process";&lt;br /&gt;    counter.CounterName = "Private Bytes";&lt;br /&gt;    counter.InstanceName = Process.GetCurrentProcess().ProcessName;&lt;br /&gt;    return counter;&lt;br /&gt;}&lt;br /&gt;public TestWindow()&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    timer.Tick += timer_Tick;&lt;br /&gt;    timer.Interval = TimeSpan.FromMilliseconds(100);&lt;br /&gt;    timer.Start();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;Grid&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;    &amp;lt;Label Content="0 KB" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="perfLabel" VerticalAlignment="Top" Width="142" Foreground="Red" /&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/pre&gt;Here is the result in video.&lt;br /&gt;&lt;br /&gt;Current implementation always stay close to 90 KB :&lt;br /&gt;&lt;br /&gt;&lt;object style="height: 344px; width: 425px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ZmT2Ut04UcA" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/ZmT2Ut04UcA" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;If we comment out Cover Destroy method:&lt;pre name="code" class="c-sharp"&gt;public void Destroy()&lt;br /&gt;{&lt;br /&gt;    //visualModel.Children.Remove(this);&lt;br /&gt;}&lt;/pre&gt;The counter grows continuously :&lt;br /&gt;&lt;br /&gt;&lt;object style="height: 344px; width: 425px"&gt;&lt;param name="movie" value="http://www.youtube.com/v/T0zhKaf9OvQ" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/T0zhKaf9OvQ" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Note : the ThumbnailManager does not handle empty image files. Loading such a file would throw an OutOfMemoryException.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-1000972300973067807?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/1000972300973067807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=1000972300973067807' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1000972300973067807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1000972300973067807'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/wpf-cover-flow-tutorial-part-8.html' title='WPF Cover Flow Tutorial : Part 8'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7735251554862095340</id><published>2010-06-23T20:34:00.001+02:00</published><updated>2010-06-23T20:36:25.793+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='wtf'/><title type='text'>Windows Media Network Sharing Service Memory Usage</title><content type='html'>Windows Media Network Sharing Service can consume a lot of memory, like 2.5 GB. WTF ?! AFAIK, I have nothing to share. What is consuming all this memory ?&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/TCJTmUyxAiI/AAAAAAAABsE/cfrNn-pCsjM/s1600/wmnetsvc.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 162px;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/TCJTmUyxAiI/AAAAAAAABsE/cfrNn-pCsjM/s320/wmnetsvc.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5486039213972455970" /&gt;&lt;/a&gt;&lt;br /&gt;Hopefully, I still have 1 GB free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7735251554862095340?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7735251554862095340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7735251554862095340' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7735251554862095340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7735251554862095340'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/windows-media-network-sharing-service_23.html' title='Windows Media Network Sharing Service Memory Usage'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dCaUukYtoQk/TCJTmUyxAiI/AAAAAAAABsE/cfrNn-pCsjM/s72-c/wmnetsvc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-1958850022212324327</id><published>2010-06-21T08:35:00.017+02:00</published><updated>2010-06-27T23:12:20.544+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='freebox'/><title type='text'>Windows 7 fait rebooter la freebox</title><content type='html'>Depuis que j'ai acheté mon &lt;a href="http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x.html"&gt;asus u30jc-qx010x&lt;/a&gt;, la freebox ADSL (Firmware 1.6.6) reboote régulièrement.&lt;br /&gt;&lt;br /&gt;Ce soir, ça redémarrait plusieurs fois par heure jusqu'à ce que je l'éteigne.&lt;br /&gt;&lt;br /&gt;Pistes déjà éliminées :&lt;ul&gt;&lt;li&gt;Ce n'est pas lié à un navigateur en particulier (IE, Firefox ou Chrome)&lt;/li&gt;&lt;li&gt;Désactiver ipv6 sur la carte wifi &lt;span style="font-weight:bold;"&gt;et&lt;/span&gt; sur la freebox ne change rien.&lt;/li&gt;&lt;/ul&gt;Après un peu de recherche, il s'avère que désactiver les services suivants provoque un redémarrage de la freebox après avoir surfé un certain temps :&lt;ul&gt;&lt;li&gt;BFE (Moteur de filtrage de base)&lt;/li&gt;&lt;li&gt;IKEEXT (Modules de génération de clés IKE et AuthIP) : dépends de BFE&lt;/li&gt;&lt;li&gt;PolicyAgent (Agent de stratégie IPsec) : dépends de BFE&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-1958850022212324327?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/1958850022212324327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=1958850022212324327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1958850022212324327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1958850022212324327'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/windows-7-fait-rebooter-la-freebox.html' title='Windows 7 fait rebooter la freebox'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8150309805973730596</id><published>2010-06-20T10:56:00.004+02:00</published><updated>2010-06-21T08:22:44.814+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><title type='text'>Windows 7 Search</title><content type='html'>If you want to index all C: content, some folders are excluded by default :&lt;ul&gt;&lt;li&gt;C:\$Recycle.Bin&lt;/li&gt;&lt;li&gt;C:\ProgramData&lt;/li&gt;&lt;li&gt;C:\ProgramData\Microsoft\Search\Data&lt;/li&gt;&lt;li&gt;C:\ProgramData\Microsoft\Windows\Menu Démarrer&lt;/li&gt;&lt;li&gt;C:\Utilisateurs (C:\Users)&lt;/li&gt;&lt;li&gt;C:\Utilisateurs\*\AppData&lt;/li&gt;&lt;li&gt;C:\Utilisateurs\*\Favoris&lt;/li&gt;&lt;li&gt;C:\Utilisateurs\*\AppData\Local\Temp&lt;/li&gt;&lt;li&gt;C:\Windows&lt;/li&gt;&lt;li&gt;C:\Windows\CSC (hidden)&lt;/li&gt;&lt;/ul&gt;Temp folders are not listed in exclusion list.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8150309805973730596?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8150309805973730596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8150309805973730596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8150309805973730596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8150309805973730596'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/windows-7-search.html' title='Windows 7 Search'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5371890201609123388</id><published>2010-06-19T18:52:00.011+02:00</published><updated>2010-08-03T15:33:10.820+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><title type='text'>Windows 7 pictures</title><content type='html'>Default user pictures are stored in &lt;span style="font-weight:bold;"&gt;C:\ProgramData\Microsoft\User Account Pictures&lt;/span&gt;. The format is a bitmap 128x128.&lt;br /&gt;&lt;br /&gt;Default login screen backgrounds are stored in C:\Windows\System32\oobe\background.bmp and C:\Windows\SysWOW64\oobe\background.bmp. The format is bitmap 1024x768. You can change the default background if you create C:\Windows\System32\oobe\info\backgrounds\backgroundDefault.jpg. 96% quality (cf. &lt;a href="http://www.gimp.org/"&gt;gimp&lt;/a&gt;) is not supported but 85% quality is OK. Then it is possible to keep the same background for the login screen and your desktop.&lt;br /&gt;&lt;br /&gt;You might need to set &lt;span style="font-weight:bold;"&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\Background\OEMBackground&lt;/span&gt; value to 1 (dword).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5371890201609123388?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5371890201609123388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5371890201609123388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5371890201609123388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5371890201609123388'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/windows-7-pictures.html' title='Windows 7 pictures'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5450957939761879666</id><published>2010-06-15T23:07:00.015+02:00</published><updated>2010-07-27T15:57:11.769+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Setup Gentoo on Asus U30JC-QX010X : Part 3 - X</title><content type='html'>This post is greatly inspired from &lt;a href="http://www.gentoo.org/doc/en/xorg-config.xml"&gt;Gentoo Xorg How-To&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Edit 2010-07-27 :&lt;ul&gt;&lt;li&gt;Replaced vesa by intel in VIDEO_CARDS. Using vesa cannot scale X to 1366x768 and it is not compatible with vesa framebuffer.&lt;/li&gt;&lt;li&gt;nvidia is not working. It is better to remove it to avoid problems when enabling xorg-x11 opengl (conflict between lib32 and lib64 folders).&lt;/li&gt;&lt;/ul&gt;Edit /etc/make.conf and define both INPUT_DEVICES and VIDEO_CARDS :&lt;pre name="code" class="CSharp"&gt;INPUT_DEVICES="evdev synaptics keyboard mouse"&lt;br /&gt;VIDEO_CARDS="nvidia intel"&lt;/pre&gt;Edit use flags for a couple of packages needed for X. You can group these settings in /etc/portage/package.use/X :&lt;pre name="code" class="CSharp"&gt;media-fonts/corefonts X&lt;br /&gt;media-fonts/dejavu X&lt;br /&gt;sys-apps/dbus X&lt;br /&gt;sys-apps/hal laptop X&lt;br /&gt;x11-base/xorg-server hal&lt;br /&gt;x11-drivers/xf86-input-synaptics hal&lt;/pre&gt;Emerge Xorg :&lt;pre name="code" class="CSharp"&gt;emerge xorg-server&lt;br /&gt;env-update &amp;&amp; source /etc/profile&lt;/pre&gt;Select xorg-x11 (this might be not necessary) ;&lt;pre name="code" class="CSharp"&gt;eselect opengl set xorg-x11&lt;/pre&gt;Emerge hal :&lt;pre name="code" class="CSharp"&gt;emerge hal&lt;br /&gt;rc-update add hald default&lt;/pre&gt;Update keymap if needed :&lt;pre name="code" class="CSharp"&gt;mkdir -p /etc/hal/fdi/policy&lt;br /&gt;cp /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi /etc/hal/fdi/policy&lt;br /&gt;&lt;br /&gt;&amp;lt;merge key="input.xkb.layout" type="string"&amp;gt;fr&amp;lt;/merge&amp;gt;&lt;br /&gt;&lt;br /&gt;/etc/init.d/hald restart&lt;/pre&gt;Add yourself to the &lt;span style="font-weight:bold;"&gt;video&lt;/span&gt; group (maybe not needed).&lt;br /&gt;&lt;br /&gt;Nvidia (I fail to use Nvidia and the Geforce 310m for now. No better result with 256.35) :&lt;br /&gt;&lt;br /&gt;/etc/portage/package.keywords/X :&lt;pre name="code" class="CSharp"&gt;~sys-kernel/gentoo-sources-2.6.33-r2 ~amd64&lt;br /&gt;~sys-kernel/gentoo-sources-2.6.34-r1 ~amd64&lt;br /&gt;~x11-drivers/nvidia-drivers-195.36.24 ~amd64&lt;br /&gt;~x11-libs/libvdpau-0.3-r2 ~amd64&lt;/pre&gt;Emerge kernel, nvidia-drivers, glx tools (like glxgears) :&lt;pre name="code" class="CSharp"&gt;emerge gentoo-sources-2.6.33-r2&lt;br /&gt;emerge nvidia-drivers-195.36.24&lt;br /&gt;emerge mesa-progs&lt;/pre&gt;module-rebuild will rebuild the necessary packages when upgrading your kernel :&lt;pre name="code" class="CSharp"&gt;emerge module-rebuild&lt;br /&gt;module-rebuild populate&lt;br /&gt;module-rebuild rebuild&lt;/pre&gt;Configure Xorg :&lt;pre name="code" class="CSharp"&gt;Xorg -configure&lt;/pre&gt;Copy /root/xorg.conf.new to /etc/X11/xorg.conf. You need to comment the Nvidia section to keep only vesa (Nvidia fails).&lt;pre name="code" class="CSharp"&gt;#Section "Device"&lt;br /&gt;# Identifier  "Card0"&lt;br /&gt;# Driver      "nvidia"&lt;br /&gt;# VendorName  "nVidia Corporation"&lt;br /&gt;# BoardName   "Unknown Board"&lt;br /&gt;# BusID       "PCI:1:0:0"&lt;br /&gt;#EndSection&lt;/pre&gt;Emerge enlightenment. It is also a good idea to add xterm and some font packages. Set enlightenment default :&lt;pre name="code" class="CSharp"&gt;emerge enlightenment corefonts dejavu xterm&lt;/pre&gt;~/.xinitrc :&lt;pre name="code" class="CSharp"&gt;exec /usr/bin/e16&lt;/pre&gt;At this point, once the new kernel has been installed, you should be able to start enlightenment safely (with intel driver only for now).&lt;br /&gt;&lt;br /&gt;For info, small kernel updates :&lt;pre name="code" class="CSharp"&gt;diff config-2.6.33-r2.0 config-2.6.33-r2.7&lt;br /&gt;&lt;br /&gt;&amp;lt; CONFIG_ACPI_VIDEO=y&lt;br /&gt;&amp;gt; CONFIG_ACPI_VIDEO=m&lt;br /&gt;&amp;lt; CONFIG_I2C_ALGOBIT=y&lt;br /&gt;&amp;gt; CONFIG_I2C_ALGOBIT=m&lt;br /&gt;&amp;lt; CONFIG_AGP=y&lt;br /&gt;&amp;lt; CONFIG_AGP_AMD64=y&lt;br /&gt;&amp;lt; CONFIG_AGP_INTEL=y&lt;br /&gt;&amp;gt; CONFIG_AGP=m&lt;br /&gt;&amp;gt; CONFIG_AGP_INTEL=m&lt;br /&gt;&amp;lt; CONFIG_DRM=y&lt;br /&gt;&amp;lt; CONFIG_DRM_KMS_HELPER=y&lt;br /&gt;&amp;gt; CONFIG_DRM=m&lt;br /&gt;&amp;gt; CONFIG_DRM_KMS_HELPER=m&lt;br /&gt;&amp;lt; CONFIG_DRM_I915=y&lt;br /&gt;&amp;gt; CONFIG_DRM_I830=m&lt;br /&gt;&amp;gt; CONFIG_DRM_I915=m&lt;br /&gt;&amp;lt; CONFIG_VIDEO_OUTPUT_CONTROL=y&lt;br /&gt;&amp;lt; CONFIG_FB=y&lt;br /&gt;&amp;gt; CONFIG_VIDEO_OUTPUT_CONTROL=m&lt;br /&gt;&amp;gt; CONFIG_FB=m&lt;br /&gt;&amp;gt; CONFIG_FIRMWARE_EDID=y&lt;br /&gt;&amp;lt; CONFIG_FB_CFB_FILLRECT=y&lt;br /&gt;&amp;lt; CONFIG_FB_CFB_COPYAREA=y&lt;br /&gt;&amp;lt; CONFIG_FB_CFB_IMAGEBLIT=y&lt;br /&gt;&amp;gt; CONFIG_FB_CFB_FILLRECT=m&lt;br /&gt;&amp;gt; CONFIG_FB_CFB_COPYAREA=m&lt;br /&gt;&amp;gt; CONFIG_FB_CFB_IMAGEBLIT=m&lt;br /&gt;&amp;lt; CONFIG_FB_TILEBLITTING=y&lt;br /&gt;&amp;lt; CONFIG_FB_EFI=y&lt;br /&gt;&amp;gt; CONFIG_FB_UVESA=m&lt;br /&gt;&amp;lt; CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64&lt;br /&gt;&amp;gt; CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=256&lt;br /&gt;&amp;lt; CONFIG_FRAMEBUFFER_CONSOLE=y&lt;br /&gt;&amp;gt; CONFIG_FRAMEBUFFER_CONSOLE=m&lt;br /&gt;&amp;gt; CONFIG_LOGO_LINUX_MONO=y&lt;br /&gt;&amp;gt; CONFIG_LOGO_LINUX_VGA16=y&lt;/pre&gt;Nvidia errors :&lt;pre name="code" class="CSharp"&gt;NVRM: failed to copy vbios to system memory.&lt;br /&gt;NVRM: RmInitAdapter failed! (0x30:0xffffffff:868)&lt;br /&gt;NVRM: rm_init_adapter(0) failed&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5450957939761879666?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5450957939761879666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5450957939761879666' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5450957939761879666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5450957939761879666'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/setup-gentoo-on-asus-u30jc-qx010x-part.html' title='Setup Gentoo on Asus U30JC-QX010X : Part 3 - X'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7167112063408031279</id><published>2010-06-12T22:13:00.002+02:00</published><updated>2010-06-12T22:23:34.685+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Asus FastBoot</title><content type='html'>Asus FastBoot delays the start up of applications configured to start automatically in the registry through Microsoft/Windows/CurrentVersion/Run keys.&lt;br /&gt;&lt;br /&gt;It is handled by the AFBAgent service.&lt;br /&gt;&lt;br /&gt;Keys are moved from Microsoft/Windows/CurrentVersion/Run keys to HKLM/SOFTWARE/Microsoft/Shared Tools/MSConfig/startupreg.&lt;br /&gt;&lt;br /&gt;Application delayed by default on an Asus U30JC-QX010C :&lt;ul&gt;&lt;li&gt;Adobe Reader Speed Launcher ("C:\Program Files (x86)\Adobe\Reader 9.0\Reader\Reader_sl.exe")&lt;/li&gt;&lt;li&gt;ASUS Screen Saver Protector (C:\Windows\AsScrPro.exe)&lt;/li&gt;&lt;li&gt;CLMLServer ("C:\Program Files (x86)\CyberLink\Power2Go\CLMLSvc.exe")&lt;/li&gt;&lt;li&gt;RtHDVCpl (C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe -s)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7167112063408031279?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7167112063408031279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7167112063408031279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7167112063408031279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7167112063408031279'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/asus-fastboot.html' title='Asus FastBoot'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8400180108402282636</id><published>2010-06-06T22:32:00.033+02:00</published><updated>2010-08-14T15:30:00.035+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><title type='text'>Asus U30JC-QX010X : Tuning Windows 7 Part 4 : Auto Run</title><content type='html'>Many programs are configured to start automatically. Note that a couple of x86 applications are configured in the x64 registry. I prefer to remove the keys and keep the application installed, just in case... It is still possible to reset the keys afterwards.&lt;br /&gt;&lt;br /&gt;You must disable &lt;a href="http://d3dal3.blogspot.com/2010/06/asus-fastboot.html"&gt;Asus FastBoot&lt;/a&gt; to find some applications listed below.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Keys than can be removed safely :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run :&lt;ul&gt;&lt;li&gt;Sidebar (C:\Program Files\Windows Sidebar\sidebar.exe /autoRun)&lt;/li&gt;&lt;/ul&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run :&lt;ul&gt;&lt;li&gt;AmIcoSinglun64 (C:\Program Files (x86)\AmIcoSingLun\AmIcoSinglun64.exe) : Alcor Micro USB Card Reader. Not needed to read USB of SD cards.&lt;/li&gt;&lt;li&gt;ASUS WebStorage (C:\Program Files (x86)\ASUS\ASUS WebStorage\SERVICE\AsusWSService.exe MySyncFolder) : No free 20 GB account is available for this Asus.&lt;/li&gt;&lt;li&gt;IgfxTray (C:\Windows\system32\igfxtray.exe) : Intel Graphics Tray Icon. I rarely need to modify these settings.&lt;/li&gt;&lt;li&gt;NvCplDaemon (RUNDLL32.EXE C:\Windows\system32\NvCpl.dll,NvStartup) : NVidia startup utility. Does not prevent the NVidia control panel to start. Seems useless ?&lt;/li&gt;&lt;/ul&gt;HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run :&lt;ul&gt;&lt;li&gt;Adobe Reader Speed Launcher ("C:\Program Files (x86)\Adobe\Reader 9.0\Reader\Reader_sl.exe")&lt;/li&gt;&lt;li&gt;ATKMEDIA (C:\Program Files (x86)\ASUS\ATK Media\DMedia.exe) : To configure a media key to launch Windows Media Player but no such key exists on my laptop.&lt;/li&gt;&lt;li&gt;ATKOSD2 (C:\Program Files (x86)\ASUS\ATKOSD2\ATKOSD2.exe) : Driver for the missing fingerprint reader. Also provides pretty UI for Fn function keys. When disabled, Fn keys still work, but with a classic UI.&lt;/li&gt;&lt;li&gt;CLMLServer ("C:\Program Files (x86)\CyberLink\Power2Go\CLMLSvc.exe") : Cyberlink Media Library.&lt;/li&gt;&lt;li&gt;HControlUser (C:\Program Files (x86)\ASUS\ATK Hotkey\HControlUser.exe)&lt;/li&gt;&lt;li&gt;RemoteControl9 ("C:\Program Files (x86)\CyberLink\PowerDVD9\PDVD9Serv.exe") : DVD Remote Control.&lt;/li&gt;&lt;li&gt;Setwallpaper (c:\programdata\SetWallpaper.cmd) : Batch is missing !&lt;/li&gt;&lt;li&gt;UpdateLBPShortCut ("C:\Program Files (x86)\CyberLink\LabelPrint\MUITransfer\MUIStartMenu.exe" "C:\Program Files (x86)\CyberLink\LabelPrint" UpdateWithCreateOnce "Software\CyberLink\LabelPrint\2.5") : DVD printing startup utility. WTF ?&lt;/li&gt;&lt;li&gt;UpdateP2GoShortCut ("C:\Program Files (x86)\CyberLink\Power2Go\MUITransfer\MUIStartMenu.exe" "C:\Program Files (x86)\CyberLink\Power2Go" UpdateWithCreateOnce "SOFTWARE\CyberLink\Power2Go\6.0") : DVD burning startup utility. WTF ?&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Other keys :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run :&lt;ul&gt;&lt;li&gt;ETDWare (C:\Program Files\Elantech\ETDCtrl.exe) : Smart-Pad.&lt;/li&gt;&lt;li&gt;HotKeysCmds (C:\Windows\system32\hkcmd.exe) : Hot Key Commands from Intel graphics driver.&lt;/li&gt;&lt;li&gt;Persistence (C:\Windows\system32\igfxpers.exe)&lt;/li&gt;&lt;li&gt;RtHDVCpl (C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe -s)&lt;/li&gt;&lt;/ul&gt;HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run :&lt;ul&gt;&lt;li&gt;ASUS Screen Saver Protector (C:\Windows\AsScrPro.exe)&lt;/li&gt;&lt;/ul&gt;When playing with these settings, the ELAN Smart-Pad can be disabled. Actually, it was running until I enter my password to open a session. Then, it was disabled. I needed to open the mice parameters in the control panel, open ELAN tab and enable the device. The laptop might also fail to detect the usb mouse. In this case, open the Device Manager, right click (with the touchpad) on the mouse section and scan for hardware changes.&lt;br /&gt;&lt;br /&gt;Edit 2010.08.14 : &lt;a href="http://d3dal3.blogspot.com/2010/08/asus-u30jc-qx010x-asus-webstorage.html"&gt;Asus Web Storage&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8400180108402282636?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8400180108402282636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8400180108402282636' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8400180108402282636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8400180108402282636'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/asus-u30jc-qx010x-tuning-windows-7-part_06.html' title='Asus U30JC-QX010X : Tuning Windows 7 Part 4 : Auto Run'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7581362761198054210</id><published>2010-06-06T19:37:00.020+02:00</published><updated>2010-07-25T13:33:19.554+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='tasks'/><title type='text'>Asus U30JC-QX010X : Tuning Windows 7 Part 3 : Tasks</title><content type='html'>More than 40 scheduled tasks are configured under Windows 7 Professional on my Asus laptop. Task scheduling has been greatly improved. It is now possible to configure a task so that it starts when some user open a session. These tasks are responsible for many processes running in the background. Task are also organized hierarchicaly.&lt;br /&gt;&lt;br /&gt;Some of these tasks are configured with the Administrators group which does not exist on my French laptop. I must fix the task user first to be able to disable the task.&lt;br /&gt;&lt;br /&gt;The following tasks can be disabled :&lt;ul&gt;&lt;li&gt;\ACMON (bad user) : Asus Splendid Video Enhancement Technology&lt;/li&gt;&lt;li&gt;\ASUS Live Update (bad user)&lt;/li&gt;&lt;li&gt;\ASUS SmartLogon Console Sensor (bad user) : Face identification with webcam&lt;/li&gt;&lt;li&gt;\ASUSControlDeck (bad user) : Asus Control Deck application&lt;/li&gt;&lt;li&gt;SidebarExecute : Might be the nuisance responsible for automatically resizing (some) windows by reserving the right of the screen.&lt;/li&gt;&lt;li&gt;\WC3 (bad user) : Asus Wireless Console 3&lt;/li&gt;&lt;/ul&gt;Requirements :&lt;ul&gt;&lt;li&gt;\ASUS P4G (bad user) : Power 4 Gear. This task must be running to launch Power 4 Gear (BatteryLife.exe). But this task can be annoying : it automatically disable transparency and force some white asus wallpaper when running on battery.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7581362761198054210?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7581362761198054210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7581362761198054210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7581362761198054210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7581362761198054210'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/06/asus-u30jc-qx010x-tuning-windows-7-part.html' title='Asus U30JC-QX010X : Tuning Windows 7 Part 3 : Tasks'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-1125639934699553109</id><published>2010-05-30T20:05:00.046+02:00</published><updated>2010-07-27T20:52:12.919+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='services'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><title type='text'>Asus U30JC-QX010X : Tuning Windows 7 Part 2 : Services</title><content type='html'>More than 70 services are started by default on my Asus laptop with Windows 7 Professional.&lt;br /&gt;&lt;br /&gt;Many services can be disabled.&lt;br /&gt;&lt;br /&gt;Home Group management :&lt;ul&gt;&lt;li&gt;FDResPub (Publication des ressources de découverte de fonctions)&lt;/li&gt;&lt;li&gt;HomeGroupListener (Écouteur HomeGroup)&lt;/li&gt;&lt;li&gt;HomeGroupProvider (Fournisseur HomeGroup)&lt;/li&gt;&lt;li&gt;p2pimsvc (Gestionnaire d’identité réseau homologue) : Remote assistance and Home Groups&lt;/li&gt;&lt;li&gt;p2psvc (Groupement de mise en réseau de pairs)&lt;/li&gt;&lt;/ul&gt;Network :&lt;ul&gt;&lt;li&gt;BITS (Service de transfert intelligent en arrière-plan) : required for Windows update.&lt;/li&gt;&lt;li&gt;CscService (Fichiers hors connexion) : usefull to synchronize files between computers.&lt;/li&gt;&lt;li&gt;Dnscache (Client DNS)&lt;/li&gt;&lt;/ul&gt;Network security :&lt;ul&gt;&lt;li&gt;BFE (Moteur de filtrage de base)&lt;/li&gt;&lt;li&gt;IKEEXT (Modules de génération de clés IKE et AuthIP)&lt;/li&gt;&lt;li&gt;MpsSvc (Pare-feu Windows)&lt;/li&gt;&lt;li&gt;PolicyAgent (Agent de stratégie IPsec)&lt;/li&gt;&lt;li&gt;WinDefend (Windows Defender)&lt;/li&gt;&lt;/ul&gt;Security : &lt;ul&gt;&lt;li&gt;wscsvc (Centre de sécurité)&lt;/li&gt;&lt;li&gt;wuauserv (Windows Update)&lt;/li&gt;&lt;/ul&gt;Window manager :&lt;ul&gt;&lt;li&gt;Themes (Thèmes)&lt;/li&gt;&lt;li&gt;UxSms (Gestionnaire de sessions du Gestionnaire de fenêtrage)&lt;/li&gt;&lt;/ul&gt;Others :&lt;ul&gt;&lt;li&gt;AFBAgent (AFBAgent) : &lt;a href="http://d3dal3.blogspot.com/2010/06/asus-fastboot.html"&gt;Asus FastBoot&lt;/a&gt; agent&lt;/li&gt;&lt;li&gt;DPS (Service de stratégie de diagnostic) : Might be usefull to ease automatic network reconfiguration.&lt;/li&gt;&lt;li&gt;iphlpsvc (Assistance IP) : IPv6&lt;/li&gt;&lt;li&gt;LanmanServer (Serveur) : Share file and print resources, Home Groups&lt;/li&gt;&lt;li&gt;PNRPsvc (Protocole PNRP) : Required for remote assistance and Home Groups&lt;/li&gt;&lt;li&gt;SeaPort (SeaPort) : Microsoft Search Enhancement Applications&lt;/li&gt;&lt;li&gt;ShellHWDetection (Détection matériel noyau) : Autoplay hardware events&lt;/li&gt;&lt;li&gt;Spooler (Spouleur d'impression)&lt;/li&gt;&lt;li&gt;SysMain (Superfetch)&lt;/li&gt;&lt;li&gt;TrkWks (Client de suivi de lien distribué) : Maintain shortcuts for moved NTS items accross the network&lt;/li&gt;&lt;li&gt;upnphost (Hôte de périphérique UPnP) : Manage hosted upnp devices&lt;/li&gt;&lt;li&gt;WerSvc (Service de rapport d'erreurs Windows) : Error reports.&lt;/li&gt;&lt;li&gt;wlidsvc (Windows Live ID Sign-in Assistant)&lt;/li&gt;&lt;li&gt;WMPNetworkSvc (Service Partage réseau du Lecteur Windows Media) : Share windows media player libraries with upnp&lt;/li&gt;&lt;li&gt;WSearch (Windows Search)&lt;/li&gt;&lt;/ul&gt;Two more services could have been disabled :&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;NlaSvc&lt;/span&gt; (Connaissance des emplacements réseau) and &lt;span style="font-weight:bold;"&gt;netprofm&lt;/span&gt; (Service Liste des réseaux) but they must be enabled for the Scheduled Task Manager to work properly (if they are disabled, opening the Conditions tab of a scheduled tasks crashes as it throws an exception.)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;lmhosts&lt;/span&gt; (Assistance NetBIOS sur TCP/IP) is said to be legacy support for NetBIOS over TCP/IP, but I do not known how to access other shares (e.g. NAS) with this service disabled.&lt;/li&gt;&lt;/ul&gt;References :&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.speedyvista.com/windows7/services5min.php"&gt;http://www.speedyvista.com/windows7/services5min.php&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.blackviper.com"&gt;http://wiki.blackviper.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Todo :&lt;ul&gt;&lt;li&gt;ASLDRService (ASLDR Service) : Asus ...&lt;/li&gt;&lt;li&gt;ATKGFNEXSrv (ATKGFNEX Service) : ATK Generic Function Service.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-1125639934699553109?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/1125639934699553109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=1125639934699553109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1125639934699553109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/1125639934699553109'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x-tuning-windows-7-part_30.html' title='Asus U30JC-QX010X : Tuning Windows 7 Part 2 : Services'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-355975443796768236</id><published>2010-05-16T18:37:00.006+02:00</published><updated>2010-05-21T19:38:49.373+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bios'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><title type='text'>Asus U30JC-QX010X Boot Keys</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;F2&lt;/span&gt; : Enter BIOS&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Suppr&lt;/span&gt; : same as F2, but F2 is more reliable&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;F9&lt;/span&gt; : Restore with AI Revovery&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;F10&lt;/span&gt; : Configure booting options&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Esc&lt;/span&gt; : Choose boot device&lt;/li&gt;&lt;/ul&gt;These keys do not work upon leaving hibernation. And Windows 7 boot menu is not shown either.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-355975443796768236?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/355975443796768236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=355975443796768236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/355975443796768236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/355975443796768236'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x-boot-keys.html' title='Asus U30JC-QX010X Boot Keys'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7499622532423970143</id><published>2010-05-16T18:22:00.009+02:00</published><updated>2010-05-17T22:26:23.944+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='g310m'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Lost Nvidia Geforce 310M</title><content type='html'>My &lt;a href="http://www.google.fr/#q=graphic+card+disappeared"&gt;graphic card disappeared&lt;/a&gt; from my &lt;a href="http://d3dal3.blogspot.com/2010/05/setup-gentoo-on-asus-u30jc-qx010x-part_14.html"&gt;asus&lt;/a&gt;. I was trying to load latest linux nvidia drivers (with &lt;span style="font-weight:bold;"&gt;modprobe nvidia&lt;/span&gt;) to use the Nvidia Geforce 310m under linux but it told me &lt;span style="font-style:italic;"&gt;no such device&lt;/span&gt;. The card is also missing in lspci output when I boot Gentoo. And it is not showing anymore in Windows device manager. I only got the Intel HD video driver. Actually, I am not sure anymore about seeing Nvidia driver there... This started to drive me crazy until I read my previous post and saw the line I was looking for :&lt;pre name="code" class="CSharp"&gt;01:00.0 VGA compatible controller: nVidia Corporation GT218 [GeForce 310M] (rev a2)&lt;/pre&gt;I did not find anything disabled in the BIOS. As far as I remember, I only switched boot devices (well using Esc key let you choose the booting device).&lt;br /&gt;&lt;br /&gt;Well I am currently restoring the four AI Recovery backup DVD and I will see if it helps...&lt;br /&gt;&lt;br /&gt;The card is still missing after recovery.&lt;br /&gt;&lt;br /&gt;I just filed a case on Asus support web site... Follow up in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7499622532423970143?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7499622532423970143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7499622532423970143' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7499622532423970143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7499622532423970143'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/lost-nvidia-geforce-310m.html' title='Lost Nvidia Geforce 310M'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-3271232203183398411</id><published>2010-05-15T22:35:00.009+02:00</published><updated>2010-07-31T22:21:00.568+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><title type='text'>Asus U30JC-QX010X : Tuning Windows 7 Part 1</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Bluetooth&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Disable bluetooth :&lt;ul&gt;&lt;li&gt;Panneau de configuration / Centre réseau et partage / Modifier les paramètres de la carte / bluetooth (F5 might be necessary)&lt;/li&gt;&lt;li&gt;Désactiver&lt;/li&gt;&lt;li&gt;Propriétés / Bluetooth / Paramètres Bluetooth / Désactiver la carte Bluetooth&lt;/li&gt;&lt;li&gt;(elevated) net stop btwdins&lt;/li&gt;&lt;li&gt;(elevated) net stop bthserv&lt;/li&gt;&lt;li&gt;(elevated) sc config btwdins start= disabled&lt;/li&gt;&lt;/ul&gt;Enable Bluetooth :&lt;ul&gt;&lt;li&gt;(elevated) sc config btwdins start= auto&lt;/li&gt;&lt;li&gt;(elevated) net start btwdins&lt;/li&gt;&lt;li&gt;(elevated) net start bthserv&lt;/li&gt;&lt;li&gt;Bluetooth tray icon / Activer l'adaptateur&lt;/li&gt;&lt;li&gt;Panneau de configuration / Centre réseau et partage / Modifier les paramètres de la carte / bluetooth (F5 might be necessary)&lt;/li&gt;&lt;li&gt;Activer&lt;/li&gt;&lt;/ul&gt;More coming soon...&lt;br /&gt;&lt;br /&gt;Edit 2010-07-31 : It is also possible to enable and enable bluetooth device with devcon utility from &lt;a href="http://www.microsoft.com/whdc/devtools/WDK/default.mspx"&gt;Windows Driver Kit (WDK)&lt;/a&gt; :&lt;pre name="code" class="CSharp"&gt;devcon find *|sort&lt;br /&gt;devcon enable "USB\VID_0B05&amp;PID_1788"&lt;br /&gt;devcon disable "USB\VID_0B05&amp;PID_1788"&lt;br /&gt;devcon status "USB\VID_0B05&amp;PID_1788"&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-3271232203183398411?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/3271232203183398411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=3271232203183398411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3271232203183398411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3271232203183398411'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x-tuning-windows-7-part.html' title='Asus U30JC-QX010X : Tuning Windows 7 Part 1'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4747719856000046615</id><published>2010-05-15T20:51:00.021+02:00</published><updated>2010-07-25T15:51:42.261+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='search'/><category scheme='http://www.blogger.com/atom/ns#' term='annoyances'/><category scheme='http://www.blogger.com/atom/ns#' term='uac'/><title type='text'>Digging into Windows 7 (Professional)</title><content type='html'>When you are used to Windows XP and you do not really know Vista, you got a few surprises as you start browsing folder in Windows 7.&lt;br /&gt;&lt;br /&gt;Windows 7 annoyances :&lt;ul&gt;&lt;li&gt;Contextual menu of folders has no &lt;span style="font-weight:bold;"&gt;Search&lt;/span&gt; entry. You are encourage to use &lt;a href="http://d3dal3.blogspot.com/2010/06/windows-7-search.html"&gt;Windows Search&lt;/a&gt; and the input box in the toolbar.&lt;/li&gt;&lt;li&gt;Access to many (hidden) items in your personal folder (jonction folders) is denied (like Application Data, Cookies, Local Settings, Start Menu, Models, Recent, SendTo...) Well, actually, you have access to the target folder (somewhere in AppData like AppData\Local\Microsoft\Windows or AppData\Roaming\Microsoft\Windows).&lt;/li&gt;&lt;li&gt;You realize that the folder tree in the Explorer is not the underlying folder tree on your hard drive. In French version, the Explorer shows you a C:\Utilisateurs folder whereas it is C:\Users actually.&lt;/li&gt;&lt;li&gt;Window manager ignore elevated Windows (when arranging windows with Tile, Cascade, etc.). Same problem with Alt-Tab.&lt;/li&gt;&lt;li&gt;No dock tool bar for your shortcuts. You must attach your programs in the task bar. Nevertheless, you cannot attach two copies (as a normal user and elevated) of the same program. Cygwin entry is conflicting with command prompt. There is no option to run attached applications as elevated.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4747719856000046615?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4747719856000046615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4747719856000046615' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4747719856000046615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4747719856000046615'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/digging-into-windows-7-professional.html' title='Digging into Windows 7 (Professional)'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8868719271113761777</id><published>2010-05-15T00:52:00.007+02:00</published><updated>2010-05-15T21:31:18.177+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seven'/><category scheme='http://www.blogger.com/atom/ns#' term='bsod'/><title type='text'>Windows 7 : 2 days to get first BSOD</title><content type='html'>I do not have Windows 7 Professional for &lt;a href="http://d3dal3.blogspot.com/2010/05/commande-materielnet.html"&gt;a long time&lt;/a&gt; and it took me only 2 days to get my first BSOD.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ma-config.com/"&gt;ma config&lt;/a&gt; info :&lt;ul&gt;&lt;li&gt;Bug Check Code : 0x000000C2&lt;/li&gt;&lt;li&gt;Bug Check String : &lt;a href="http://www.google.fr/search?q=bad_pool_caller"&gt;BAD_POOL_CALLER&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Date du crash : 14/05/2010 22:38&lt;/li&gt;&lt;li&gt;Source du crash : fltmgr.sys+8F0B&lt;/li&gt;&lt;li&gt;Chemin : C:\Windows\system32\drivers\fltmgr.sys&lt;/li&gt;&lt;li&gt;Description : Gestionnaire de filtres de système de fichiers Microsoft&lt;/li&gt;&lt;li&gt;Version du produit : 6.1.7600.16385&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://secunia.com/vulnerability_scanning/personal/"&gt;Secunia PSI&lt;/a&gt; might be to blame.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8868719271113761777?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8868719271113761777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8868719271113761777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8868719271113761777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8868719271113761777'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/windows-7-2-days-before-first-bsod.html' title='Windows 7 : 2 days to get first BSOD'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5867472055890758800</id><published>2010-05-14T22:46:00.005+02:00</published><updated>2010-05-14T23:09:48.632+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Setup Gentoo on Asus U30JC-QX010X : Part 2</title><content type='html'>Here is common hardware info about Asus U30JC-QX010X :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;lspci&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;00:00.0 Host bridge: Intel Corporation Core Processor DRAM Controller (rev 12)&lt;br /&gt;00:01.0 PCI bridge: Intel Corporation Core Processor PCI Express x16 Root Port (rev 12)&lt;br /&gt;00:02.0 VGA compatible controller: Intel Corporation Core Processor Integrated Graphics Controller (rev 12)&lt;br /&gt;00:16.0 Communication controller: Intel Corporation 5 Series/3400 Series Chipset HECI Controller (rev 06)&lt;br /&gt;00:1a.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)&lt;br /&gt;00:1b.0 Audio device: Intel Corporation 5 Series/3400 Series Chipset High Definition Audio (rev 06)&lt;br /&gt;00:1c.0 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 1 (rev 06)&lt;br /&gt;00:1c.1 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 2 (rev 06)&lt;br /&gt;00:1c.5 PCI bridge: Intel Corporation 5 Series/3400 Series Chipset PCI Express Root Port 6 (rev 06)&lt;br /&gt;00:1d.0 USB Controller: Intel Corporation 5 Series/3400 Series Chipset USB2 Enhanced Host Controller (rev 06)&lt;br /&gt;00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev a6)&lt;br /&gt;00:1f.0 ISA bridge: Intel Corporation Mobile 5 Series Chipset LPC Interface Controller (rev 06)&lt;br /&gt;00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 06)&lt;br /&gt;00:1f.3 SMBus: Intel Corporation 5 Series/3400 Series Chipset SMBus Controller (rev 06)&lt;br /&gt;00:1f.6 Signal processing controller: Intel Corporation 5 Series/3400 Series Chipset Thermal Subsystem (rev 06)&lt;br /&gt;01:00.0 VGA compatible controller: nVidia Corporation GT218 [GeForce 310M] (rev a2)&lt;br /&gt;03:00.0 Network controller: Atheros Communications Inc. AR9285 Wireless Network Adapter (PCI-Express) (rev 01)&lt;br /&gt;04:00.0 Ethernet controller: Atheros Communications AR8131 Gigabit Ethernet (rev c0)&lt;br /&gt;ff:00.0 Host bridge: Intel Corporation Core Processor QuickPath Architecture Generic Non-core Registers (rev 02)&lt;br /&gt;ff:00.1 Host bridge: Intel Corporation Core Processor QuickPath Architecture System Address Decoder (rev 02)&lt;br /&gt;ff:02.0 Host bridge: Intel Corporation Core Processor QPI Link 0 (rev 02)&lt;br /&gt;ff:02.1 Host bridge: Intel Corporation Core Processor QPI Physical 0 (rev 02)&lt;br /&gt;ff:02.2 Host bridge: Intel Corporation Core Processor Reserved (rev 02)&lt;br /&gt;ff:02.3 Host bridge: Intel Corporation Core Processor Reserved (rev 02)&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;cat /proc/cpuinfo&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;processor : 0&lt;br /&gt;vendor_id : GenuineIntel&lt;br /&gt;cpu family : 6&lt;br /&gt;model  : 37&lt;br /&gt;model name : Intel(R) Core(TM) i5 CPU       M 430  @ 2.27GHz&lt;br /&gt;stepping : 2&lt;br /&gt;cpu MHz  : 2267.000&lt;br /&gt;cache size : 3072 KB&lt;br /&gt;physical id : 0&lt;br /&gt;siblings : 4&lt;br /&gt;core id  : 0&lt;br /&gt;cpu cores : 2&lt;br /&gt;apicid  : 0&lt;br /&gt;initial apicid : 0&lt;br /&gt;fpu  : yes&lt;br /&gt;fpu_exception : yes&lt;br /&gt;cpuid level : 11&lt;br /&gt;wp  : yes&lt;br /&gt;flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid&lt;br /&gt;bogomips : 4521.00&lt;br /&gt;clflush size : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;br /&gt;&lt;br /&gt;processor : 1&lt;br /&gt;vendor_id : GenuineIntel&lt;br /&gt;cpu family : 6&lt;br /&gt;model  : 37&lt;br /&gt;model name : Intel(R) Core(TM) i5 CPU       M 430  @ 2.27GHz&lt;br /&gt;stepping : 2&lt;br /&gt;cpu MHz  : 2267.000&lt;br /&gt;cache size : 3072 KB&lt;br /&gt;physical id : 0&lt;br /&gt;siblings : 4&lt;br /&gt;core id  : 2&lt;br /&gt;cpu cores : 2&lt;br /&gt;apicid  : 4&lt;br /&gt;initial apicid : 4&lt;br /&gt;fpu  : yes&lt;br /&gt;fpu_exception : yes&lt;br /&gt;cpuid level : 11&lt;br /&gt;wp  : yes&lt;br /&gt;flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid&lt;br /&gt;bogomips : 4521.75&lt;br /&gt;clflush size : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;br /&gt;&lt;br /&gt;processor : 2&lt;br /&gt;vendor_id : GenuineIntel&lt;br /&gt;cpu family : 6&lt;br /&gt;model  : 37&lt;br /&gt;model name : Intel(R) Core(TM) i5 CPU       M 430  @ 2.27GHz&lt;br /&gt;stepping : 2&lt;br /&gt;cpu MHz  : 2267.000&lt;br /&gt;cache size : 3072 KB&lt;br /&gt;physical id : 0&lt;br /&gt;siblings : 4&lt;br /&gt;core id  : 0&lt;br /&gt;cpu cores : 2&lt;br /&gt;apicid  : 1&lt;br /&gt;initial apicid : 1&lt;br /&gt;fpu  : yes&lt;br /&gt;fpu_exception : yes&lt;br /&gt;cpuid level : 11&lt;br /&gt;wp  : yes&lt;br /&gt;flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid&lt;br /&gt;bogomips : 4521.75&lt;br /&gt;clflush size : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;br /&gt;&lt;br /&gt;processor : 3&lt;br /&gt;vendor_id : GenuineIntel&lt;br /&gt;cpu family : 6&lt;br /&gt;model  : 37&lt;br /&gt;model name : Intel(R) Core(TM) i5 CPU       M 430  @ 2.27GHz&lt;br /&gt;stepping : 2&lt;br /&gt;cpu MHz  : 2267.000&lt;br /&gt;cache size : 3072 KB&lt;br /&gt;physical id : 0&lt;br /&gt;siblings : 4&lt;br /&gt;core id  : 2&lt;br /&gt;cpu cores : 2&lt;br /&gt;apicid  : 5&lt;br /&gt;initial apicid : 5&lt;br /&gt;fpu  : yes&lt;br /&gt;fpu_exception : yes&lt;br /&gt;cpuid level : 11&lt;br /&gt;wp  : yes&lt;br /&gt;flags  : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm sse4_1 sse4_2 popcnt lahf_lm ida arat tpr_shadow vnmi flexpriority ept vpid&lt;br /&gt;bogomips : 4521.75&lt;br /&gt;clflush size : 64&lt;br /&gt;cache_alignment : 64&lt;br /&gt;address sizes : 36 bits physical, 48 bits virtual&lt;br /&gt;power management:&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;cat /proc/acpi/battery/BAT0/info&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;present:                 yes&lt;br /&gt;design capacity:         84000 mWh&lt;br /&gt;last full capacity:      80700 mWh&lt;br /&gt;battery technology:      rechargeable&lt;br /&gt;design voltage:          15000 mV&lt;br /&gt;design capacity warning: 8400 mWh&lt;br /&gt;design capacity low:     840 mWh&lt;br /&gt;capacity granularity 1:  840 mWh&lt;br /&gt;capacity granularity 2:  840 mWh&lt;br /&gt;model number:            UL50-56&lt;br /&gt;serial number:            &lt;br /&gt;battery type:            LIon&lt;br /&gt;OEM info:                ASUSTek&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5867472055890758800?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5867472055890758800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5867472055890758800' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5867472055890758800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5867472055890758800'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/setup-gentoo-on-asus-u30jc-qx010x-part_14.html' title='Setup Gentoo on Asus U30JC-QX010X : Part 2'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2058835526224185308</id><published>2010-05-14T20:20:00.040+02:00</published><updated>2010-07-04T23:32:36.943+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Setup Gentoo on Asus U30JC-QX010X : Part 1</title><content type='html'>Here is how to setup &lt;a href="http://gentoo.org"&gt;Gentoo&lt;/a&gt; on my &lt;a href="http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x.html"&gt;brand new asus&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Summary :&lt;ul&gt;&lt;li&gt;Resize partitions with gparted.&lt;/li&gt;&lt;li&gt;Setup minimal gentoo&lt;/li&gt;&lt;li&gt;Update Windows 7 boot loader&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Partitioning :&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Burn last &lt;a href="http://gparted.sourceforge.net/"&gt;GParted&lt;/a&gt; live iso (current is 0.5.2-9).&lt;/li&gt;&lt;li&gt;Enter BIOS (&lt;span style="font-weight:bold;"&gt;sup&lt;/span&gt; key)&lt;/li&gt;&lt;li&gt;Switch boot devices&lt;/li&gt;&lt;li&gt;Launch GParted&lt;/li&gt;&lt;li&gt;Remove 30 GB from D: (/dev/sda5)&lt;/li&gt;&lt;li&gt;Add &lt;span style="font-weight:bold;"&gt;/&lt;/span&gt; partition : 25 GB (/dev/sda6)&lt;/li&gt;&lt;li&gt;Add &lt;span style="font-weight:bold;"&gt;/home&lt;/span&gt; partition : 5 GB (/dev/sda7)&lt;/li&gt;&lt;/ul&gt;I don't think I need a swap partition.&lt;br /&gt;&lt;br /&gt;To install Gentoo, I followed both &lt;a href="http://www.gentoo.org/doc/fr/handbook/handbook-amd64.xml"&gt;x64&lt;/a&gt; (last updated in 2008) and &lt;a href="http://www.gentoo.org/doc/fr/gentoo-x86-quickinstall.xml"&gt;x86&lt;/a&gt; (updated in 2010) guides.&lt;ul&gt;&lt;li&gt;Boot : &lt;span style="font-weight:bold;"&gt;gentoo&lt;/span&gt; with &lt;span style="font-weight:bold;"&gt;fr&lt;/span&gt; keymap.&lt;/li&gt;&lt;li&gt;Set root pasword : &lt;span style="font-weight:bold;"&gt;passwd ...&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Load wifi : &lt;span style="font-weight:bold;"&gt;modprobe ath9k&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;ln -s /etc/init.d/net.lo /etc/init.d/net.wlan0&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Edit /etc/conf.d/net and /etc/wpa_supplicant/wpa_supplicant.conf&lt;/li&gt;&lt;/ul&gt;Copy them from another box through a usb key or edit them from scratch with nano.&lt;br /&gt;&lt;br /&gt;/etc/conf.d/net :&lt;pre name="code" class="CSharp"&gt;modules=( "wpa_supplicant" "!iwconfig" )&lt;br /&gt;wpa_supplicant_wlan0="-Dwext"&lt;/pre&gt;/etc/wpa_supplicant/wpa_supplicant.conf :&lt;pre name="code" class="CSharp"&gt;ctrl_interface=/var/run/wpa_supplicant&lt;br /&gt;ctrl_interface_group=0&lt;br /&gt;eapol_version=1&lt;br /&gt;ap_scan=1&lt;br /&gt;fast_reauth=1&lt;br /&gt;network={&lt;br /&gt; ssid="freebox_essid"&lt;br /&gt; key_mgmt=WPA-PSK&lt;br /&gt; psk="secret"&lt;br /&gt; priority=20&lt;br /&gt;}&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Start network : &lt;span style="font-weight:bold;"&gt;/etc/init.d/net.wlan0 start&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Mount partitions :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;mount /dev/sda6 /mnt/gentoo&lt;br /&gt;mkdir /mnt/gentoo/home&lt;br /&gt;mount /dev/sda7 /mnt/gentoo/home&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Set date&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Stage3 :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;cd /mnt/gentoo&lt;br /&gt;links http://www.gentoo.org/main/en/mirrors.xml&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Links keys : &lt;span style="font-weight:bold;"&gt;D&lt;/span&gt;ownload / &lt;span style="font-weight:bold;"&gt;Q&lt;/span&gt;uit.&lt;/li&gt;&lt;li&gt;releases/amd64/current-iso/stage3-amd64-20100408.tar.bz2&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;tar xvjpf stage3-*.tar.bz2&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;snapshots/current/portage-latest.tar.bz2&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;tar -xvjf /mnt/gentoo/portage-latest.tar.bz2 -C /mnt/gentoo/usr&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;make.conf :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;nano -w /mnt/gentoo/etc/make.conf&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Got &lt;span style="font-weight:bold;"&gt;CFLAGS&lt;/span&gt; and &lt;span style="font-weight:bold;"&gt;CXXFLAGS&lt;/span&gt; from &lt;a href="http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Core_i7_and_Core_i5.2C_Xeon_55xx"&gt;Gentoo wiki&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;MAKEOPTS&lt;/span&gt; is cpu count plus one.&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;CFLAGS="-march=core2 -msse4 -mcx16 -mpopcnt -msahf -O2 -pipe"&lt;br /&gt;CXXFLAGS="${CFLAGS}"&lt;br /&gt;MAKEOPTS="-j5"&lt;/pre&gt;mirrorselect (free.fr) :&lt;pre name="code" class="CSharp"&gt;emerge mirrorselect&lt;br /&gt;mirrorselect -i -o &gt;&gt; /etc/make.conf&lt;br /&gt;mirrorselect -i -r -o &gt;&gt; /etc/make.conf&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Chroot :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;cp -L /etc/resolv.conf /mnt/gentoo/etc/&lt;br /&gt;mount -t proc none /mnt/gentoo/proc&lt;br /&gt;mount -o bind /dev /mnt/gentoo/dev&lt;br /&gt;&lt;br /&gt;chroot /mnt/gentoo /bin/bash&lt;br /&gt;env-update &amp;&amp; source /etc/profile&lt;br /&gt;export PS1="(chroot) $PS1"&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Portage :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;emerge --sync&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;USE="-fortran -ipv6 mmx nptl nptlonly sse sse2 unicode"&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;locale &amp; time :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;nano -w /etc/locale.gen&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;en_US ISO-8859-1&lt;br /&gt;en_US.UTF-8 UTF-8&lt;br /&gt;fr_FR ISO-8859-1&lt;br /&gt;fr_FR@euro ISO-8859-15&lt;br /&gt;fr_FR.UTF-8 UTF-8&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;cp /usr/share/zoneinfo/Europe/Paris /etc/localtime&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Kernel (2.6.32-r7) :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;emerge gentoo-sources&lt;br /&gt;make menuconfig&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Default &lt;a href="http://philippe.vianney.free.fr/asus/config-2.6.32-r7.default"&gt;.config&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Changes :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;    Device Drivers  ---&amp;gt;&lt;br /&gt;[*]   Network device support  ---&amp;gt;&lt;br /&gt;[*]     Wireless LAN  ---&amp;gt;&lt;br /&gt;[*]       Wireless LAN (IEEE 802.11)  ---&amp;gt;&lt;br /&gt;&amp;lt;M&amp;gt;         Atheros Wireless Cards  ---&amp;gt;&lt;br /&gt;&amp;lt;M&amp;gt;           Atheros 802.11n wireless cards support&lt;br /&gt;    File systems  ---&amp;gt;&lt;br /&gt;&amp;lt;*&amp;gt;   The Extended 4 (ext4) filesystem&lt;br /&gt;[*]     Ext4 extended attributes&lt;br /&gt;[*]       Ext4 POSIX Access Control Lists&lt;br /&gt;[*]       Ext4 Security Labels&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;CONFIG_ATH_COMMON=m&lt;br /&gt;CONFIG_ATH9K=m&lt;br /&gt;CONFIG_EXT4_FS=y&lt;br /&gt;CONFIG_EXT4_FS_XATTR=y&lt;br /&gt;CONFIG_EXT4_FS_POSIX_ACL=y&lt;br /&gt;CONFIG_EXT4_FS_SECURITY=y&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;make -j5 &amp;&amp; make modules_install&lt;br /&gt;cp arch/x86_64/boot/bzImage /boot/kernel-2.6.32-gentoo-r7&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;nano -w /etc/modules.autoload.d/kernel-2.6&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;ath9k&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;fstab :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;nano -w /etc/fstab&lt;/pre&gt;&lt;pre name="code" class="CSharp"&gt;/dev/sda6 / ext4 defaults,noatime 1 1&lt;br /&gt;/dev/sda7 /home ext4 noatime   0 2&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;network : copy net and wpa_supplicant.conf (you can use alternate console with Alt-F2)&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;cd /etc/init.d&lt;br /&gt;ln -s net.lo net.wlan0&lt;br /&gt;rc-update add net.wlan0 default&lt;br /&gt;emerge dhcpcd wpa_supplicant&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;System configuration :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;emerge syslog-ng vixie-cron&lt;br /&gt;rc-update add syslog-ng default&lt;br /&gt;rc-update add vixie-cron default&lt;br /&gt;rc-update add sshd default&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Set root password (do not skip this step!) :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;passwd&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Config files :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;nano -w /etc/conf.d/clock&lt;br /&gt;&lt;br /&gt;TIMEZONE="Europe/Paris"&lt;br /&gt;&lt;br /&gt;nano -w /etc/rc.conf&lt;br /&gt;&lt;br /&gt;EDITOR="/usr/bin/vim"&lt;br /&gt;XSESSION="e16"&lt;br /&gt;&lt;br /&gt;nano -w /etc/conf.d/rc&lt;br /&gt;&lt;br /&gt;RC_PARALLEL_STARTUP="yes"&lt;br /&gt;&lt;br /&gt;nano -w /etc/conf.d/keymaps&lt;br /&gt;&lt;br /&gt;KEYMAP="fr-latin9"&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;grub :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;emerge grub&lt;br /&gt;&lt;br /&gt;nano -w /boot/grub/grub.conf&lt;br /&gt;&lt;br /&gt;default 0&lt;br /&gt;timeout 50&lt;br /&gt;splashimage=(hd0,0)/boot/grub/splash.xpm.gz&lt;br /&gt;title Gentoo&lt;br /&gt;root (hd0,5)&lt;br /&gt;kernel /boot/kernel-2.6.32-r7 root=/dev/sda6&lt;br /&gt;&lt;br /&gt;grub&lt;br /&gt;&lt;br /&gt;grub&amp;gt; root (hd0,5)&lt;br /&gt;grub&amp;gt; setup (hd0,5)&lt;br /&gt;grub&amp;gt; quit&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Save boot sector (to some usb key):&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;dd if=/dev/sda6 of=boot.grub bs=512 count=1&lt;/pre&gt;&lt;span style="font-weight:bold;"&gt;Reboot :&lt;/span&gt;&lt;pre name="code" class="CSharp"&gt;exit&lt;br /&gt;umount /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo/home /mnt/gentoo&lt;br /&gt;reboot&lt;/pre&gt;&lt;strong&gt;Update boot loader :&lt;/strong&gt;&lt;ul&gt;&lt;li&gt;Steps based on &lt;a href="http://www.mail-archive.com/gentoo-user@lists.gentoo.org/msg98973.html"&gt;this post&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Copy boot.grub to C:\&lt;/li&gt;&lt;li&gt;Open a cmd as administrator :&lt;/li&gt;&lt;/ul&gt;&lt;pre name="code" class="CSharp"&gt;C:\&gt;bcdedit /export bcdedit-export-100513&lt;br /&gt;L'opération a réussi.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit /create /d Gentoo /application BOOTSECTOR&lt;br /&gt;L'entrée {4bd6ad4c-7c0c-11de-baef-deb9d273c9fa} a été correctement créée.&lt;br /&gt;L'entrée {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa} a été correctement créée.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit /set {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa} device boot&lt;br /&gt;L'opération a réussi.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit /set {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa} path \boot.grub&lt;br /&gt;L'opération a réussi.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit /set {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa} locale fr-FR&lt;br /&gt;L'opération a réussi.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit /displayorder {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa} /addlast&lt;br /&gt;L'opération a réussi.&lt;br /&gt;&lt;br /&gt;C:\&gt;bcdedit -v&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Secteur de démarrage en mode réel&lt;br /&gt;---------------------------------&lt;br /&gt;identificateur          {4bd6ad4d-7c0c-11de-baef-deb9d273c9fa}&lt;br /&gt;device                  boot&lt;br /&gt;path                    \boot.grub&lt;br /&gt;description             Gentoo&lt;br /&gt;locale                  fr-FR&lt;/pre&gt;Now you should be able to select &lt;strong&gt;Gentoo&lt;/strong&gt; on next reboot.&lt;br /&gt;&lt;br /&gt;Not seen in &lt;span style="font-weight:bold;"&gt;amd64&lt;/span&gt; guide :&lt;pre name="code" class="CSharp"&gt;ccache&lt;br /&gt;emerge -vuD --newuse world&lt;br /&gt;emerge --oneshot libtool&lt;br /&gt;dispatch-conf&lt;br /&gt;perl-cleaner all&lt;br /&gt;python-updater&lt;/pre&gt;Notes :&lt;ul&gt;&lt;li&gt;grub menu is not visible ?!&lt;/li&gt;&lt;li&gt;A lot of packages need to be emerged, still.&lt;/li&gt;&lt;/ul&gt;Some hardware info is available in &lt;a href="http://d3dal3.blogspot.com/2010/05/setup-gentoo-on-asus-u30jc-qx010x-part_14.html"&gt;next post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2058835526224185308?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2058835526224185308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2058835526224185308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2058835526224185308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2058835526224185308'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/setup-gentoo-on-asus-u30jc-qx010x-part.html' title='Setup Gentoo on Asus U30JC-QX010X : Part 1'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-6530508249632158222</id><published>2010-05-10T22:56:00.008+02:00</published><updated>2010-05-13T00:26:19.062+02:00</updated><title type='text'>Commande materiel.net</title><content type='html'>&lt;span style="font-weight:bold;"&gt;0 %&lt;/span&gt; jeudi soir : paiement (produit en stock)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;30 %&lt;/span&gt; vendredi : demande de justificatifs pour justifier mon identité (1ère commande?) sur mon mail perso non consultable depuis le boulot :(&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;50 %&lt;/span&gt; lundi : en cours d'approvisionnement (suite à l'envoi des documents pendant le week-end). Plus de stock ?!&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;60 %&lt;/span&gt; lundi soir : commande complète : en cours de traitement&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;85 %&lt;/span&gt; mardi matin : commande complète : préparation&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;100 %&lt;/span&gt; mardi midi : commande expédiée&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPS&lt;/span&gt; mardi après midi : infos facturation reçues&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPS&lt;/span&gt; mardi soir : enlèvement&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPS&lt;/span&gt; mercredi matin : livraison refusée à cause d'un naze&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;UPS&lt;/span&gt; mercredi soir : re-livraison et &lt;span style="font-weight:bold;"&gt;réception&lt;/span&gt; ! Yes !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-6530508249632158222?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/6530508249632158222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=6530508249632158222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6530508249632158222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/6530508249632158222'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/commande-materielnet.html' title='Commande materiel.net'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7936974009094536786</id><published>2010-05-09T23:33:00.003+02:00</published><updated>2010-05-14T20:57:18.193+02:00</updated><title type='text'>Update wampserver apache version</title><content type='html'>Here is a batch that would do the work. It is based on a &lt;a href="http://www.wampserver.com/phorum/read.php?1,61254,printview,page=1"&gt;thread in the forums&lt;/a&gt;. Provided as is without any warranty.&lt;pre name="code" class="CSharp"&gt;@echo off&lt;br /&gt;set dest_root=E:\usr\wamp\bin\apache&lt;br /&gt;set source_root=%~dp0&lt;br /&gt;&lt;br /&gt;set apache_zip=&lt;br /&gt;for /f %%f in ('dir /b/ogn %source_root%httpd-*') do set apache_zip=%%f&lt;br /&gt;if "%apache_zip%"=="" goto :eof&lt;br /&gt;set unzip_dir=%apache_zip%&lt;br /&gt;set unzip_dir=%unzip_dir:~0,-4%&lt;br /&gt;if "%unzip_dir%"=="" goto :eof&lt;br /&gt;if exist "%unzip_dir%" rd /s/q "%unzip_dir%"&lt;br /&gt;e:\usr\7-Zip\7z x -o%unzip_dir% %apache_zip% &lt;br /&gt;&lt;br /&gt;echo %unzip_dir%&lt;br /&gt;&lt;br /&gt;set ver=%unzip_dir:~6,-14%&lt;br /&gt;set dest_dir=%dest_root%\Apache%ver%&lt;br /&gt;echo %dest_dir%&lt;br /&gt;&lt;br /&gt;if exist "%dest_dir%" rd /s/q "%dest_dir%"&lt;br /&gt;&lt;br /&gt;set previous_ver=&lt;br /&gt;for /f %%f in ('dir /b/ogn/ad %dest_root%\Apache*') do if not "%%f"=="%ver%" set previous_ver=%%f&lt;br /&gt;set previous_ver=%previous_ver:~6%&lt;br /&gt;set previous_dir=%dest_root%\Apache%previous_ver%&lt;br /&gt;echo %previous_dir%&lt;br /&gt;&lt;br /&gt;mkdir %dest_dir%&lt;br /&gt;robocopy /NP /MIR /NFL "%unzip_dir%\Apache2" "%dest_dir%" /XD lib /XD include /XD manual&lt;br /&gt;copy %previous_dir%\wampserver.conf %dest_dir% &gt;nul&lt;br /&gt;copy %previous_dir%\conf\httpd.conf %dest_dir%\conf &gt;nul&lt;br /&gt;&lt;br /&gt;rd /s/q %unzip_dir%&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7936974009094536786?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7936974009094536786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7936974009094536786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7936974009094536786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7936974009094536786'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/update-wampserver-apache-version.html' title='Update wampserver apache version'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-3697812792078340616</id><published>2010-05-09T01:13:00.008+02:00</published><updated>2010-05-14T20:59:12.018+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e17'/><category scheme='http://www.blogger.com/atom/ns#' term='gentoo'/><category scheme='http://www.blogger.com/atom/ns#' term='freebox'/><category scheme='http://www.blogger.com/atom/ns#' term='elixir'/><title type='text'>Elixir setup</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/S-cttWxTNFI/AAAAAAAABoE/tUwp9Z5wvsw/s1600/elixir_logo.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 124px; height: 123px;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/S-cttWxTNFI/AAAAAAAABoE/tUwp9Z5wvsw/s320/elixir_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5469390529694479442" /&gt;&lt;/a&gt;&lt;br /&gt;Free a lancé le projet &lt;a href="http://elixir.freebox.fr/?section=documentation"&gt;elixir&lt;/a&gt; poru développer des jeux pour freebox. Ce toolkit se base sur &lt;a href="http://www.enlightenment.org/"&gt;enlightenment&lt;/a&gt; mon window manager par défaut quand je retourne sur la banquise.&lt;br /&gt;&lt;br /&gt;Pour éviter d'installer Elixir n'importe où sur ma babasse en suivant le tutorial de noob plein de ./configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install, j'ai préféré utiliser la méthode gentoo en utilisant l'&lt;a href="http://trac.enlightenment.org/e/wiki/Gentoo"&gt;overlay officiel d'enlightenment&lt;/a&gt;. De l'aide supplémentaire est disponible sur le &lt;a href="http://en.gentoo-wiki.com/wiki/E17"&gt;wiki gentoo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Quelques notes :&lt;ul&gt;&lt;li&gt;Installation de &lt;span style="font-weight: bold;"&gt;portage-2.2&lt;/span&gt; (mise à jour nécessaire de &lt;span style="font-weight: bold;"&gt;package.keywords&lt;/span&gt; et &lt;span style="font-weight: bold;"&gt;package.unmask&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;Pour chaque package du set, ajout d'une ligne &lt;span style="font-weight: bold;"&gt;=category/package-9999 **&lt;/span&gt; dans &lt;span style="font-weight: bold;"&gt;package.keywords&lt;/span&gt; pour &lt;a href="http://forums.gentoo.org/viewtopic-t-643655-start-100.html"&gt;éviter l'erreur missing keyword.&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;SpiderMonkey&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;package.use : dev-lang/spidermonkey threadsafe&lt;br /&gt;&lt;br /&gt;Last version of &lt;span style="font-weight: bold;"&gt;SpiderMonkey&lt;/span&gt; in current portage tree is 1.7.0-r1. This version does not support JSVERSION_1_8. We need to &lt;a href="http://en.gentoo-wiki.com/wiki/Writing_Ebuilds"&gt;create our own ebuild&lt;/a&gt; for version 1.8.0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create a local &lt;a href="http://en.gentoo-wiki.com/wiki/Overlay"&gt;overlay&lt;/a&gt; to host this ebuild :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mkdir -p /usr/local/portage/profiles/&lt;br /&gt;echo "local_overlay" &gt; /usr/local/portage/profiles/repo_name&lt;br /&gt;Add at the end of /etc/make.conf :&lt;br /&gt;PORTDIR_OVERLAY="${PORTDIR_OVERLAY} /usr/local/portage/"&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Create spidermonkey ebuild :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;mkdir -p /usr/local/portage/dev-lang/spidermonkey&lt;br /&gt;cp /usr/portage/dev-lang/spidermonkey/spidermonkey-1.7.0-r1.ebuild /usr/local/portage/dev-lang/spidermonkey/spidermonkey-1.8.0.ebuild&lt;br /&gt;cp -R /usr/portage/dev-lang/spidermonkey/files /usr/local/portage/dev-lang/spidermonkey/files&lt;br /&gt;Edit ebuild :&lt;pre name="code" class="CSharp"&gt;SRC_URI="ftp://ftp.mozilla.org/pub/mozilla.org/js/${MY_P}-rc1.tar.gz"&lt;br /&gt;...&lt;br /&gt;#epatch "${FILESDIR}/${PN}-1.5-build.patch"&lt;br /&gt;epatch "${FILESDIR}/${P}-build.patch"&lt;br /&gt;#epatch "${FILESDIR}/${PN}-1.6-header.patch"&lt;br /&gt;epatch "${FILESDIR}/${P}-threadsafe.diff"&lt;/pre&gt;spidermonkey-1.8.0-build.patch :&lt;pre name="code" class="CSharp"&gt;diff -rupN js.ref/js/src/Makefile.ref js.new/js/src/Makefile.ref&lt;br /&gt;--- js.ref/js/src/Makefile.ref  2009-02-25 14:24:29.000000000 +0100&lt;br /&gt;+++ js.new/js/src/Makefile.ref  2010-05-09 00:02:50.000000000 +0200&lt;br /&gt;@@ -363,3 +363,16 @@ TARFILES = files `cat files`&lt;br /&gt;SUFFIXES: .i&lt;br /&gt;%.i: %.c&lt;br /&gt; $(CC) -C -E $(CFLAGS) $&lt; &gt; $*.i&lt;br /&gt;+&lt;br /&gt;+DESTDIR :=&lt;br /&gt;+PREFIX := /usr&lt;br /&gt;+BINDIR := $(PREFIX)/bin&lt;br /&gt;+MY_LIBDIR := $(PREFIX)/$(LIBDIR)&lt;br /&gt;+INCLUDEDIR := $(PREFIX)/include/js&lt;br /&gt;+INSTALL := install -g 0 -o root&lt;br /&gt;+install:&lt;br /&gt;+ $(INSTALL) -m 755 -d $(DESTDIR)$(INCLUDEDIR) $(DESTDIR)$(MY_LIBDIR) $(DESTDIR)$(BINDIR)&lt;br /&gt;+ $(INSTALL) -m 755 $(SHARED_LIBRARY) $(DESTDIR)$(MY_LIBDIR)&lt;br /&gt;+ $(INSTALL) -m 644 $(LIBRARY) $(DESTDIR)$(MY_LIBDIR)&lt;br /&gt;+ $(INSTALL) -m 755 $(OBJDIR)/js $(OBJDIR)/jscpucfg $(DESTDIR)$(BINDIR)&lt;br /&gt;+ $(INSTALL) -m 644 $(HFILES) $(DESTDIR)$(INCLUDEDIR)&lt;/pre&gt;ebuild spidermonkey-1.8.0.ebuild digest&lt;br /&gt;package.keywords : ~dev-lang/spidermonkey-1.8.0 **&lt;br /&gt;emerge -va spidermonkey&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elixir setup :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Appliquer le patch basé sur les indications du &lt;a href="http://zigazou.wordpress.com/2009/11/21/installer-freebox-elixir-sous-ubuntu-9-04/"&gt;blog de zigazou&lt;/a&gt; :&lt;pre name="code" class="CSharp"&gt;diff -rupN elixir-0.1.24.ref/src/modules/bindings/ecore/ecore_module.c elixir-0.1.24.new/src/modules/bindings/ecore/ecore_module.c&lt;br /&gt;--- elixir-0.1.24.ref/src/modules/bindings/ecore/ecore_module.c 2010-05-09 00:36:48.000000000 +0200&lt;br /&gt;+++ elixir-0.1.24.new/src/modules/bindings/ecore/ecore_module.c 2010-05-09 00:37:37.000000000 +0200&lt;br /&gt;@@ -905,7 +905,7 @@ elixir_ecore_thread_run(JSContext *cx, u&lt;br /&gt;&lt;br /&gt;   elixir_function_stop(cx);&lt;br /&gt;&lt;br /&gt;-   result = ecore_thread_run(_elixir_func_heavy, _elixir_func_end, new);&lt;br /&gt;+   result = ecore_thread_run(_elixir_func_heavy, _elixir_func_end, new, NULL);&lt;br /&gt;&lt;br /&gt;   elixir_function_start(cx);&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;Setup elixir :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;./configure&lt;br /&gt;make&lt;br /&gt;# sudo make install&lt;br /&gt;# ldconfig&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Il est toujours possible de supprimer elixir en faisant :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;# make uninstall&lt;br /&gt;# rm -rf /usr/local/lib/elixir&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Tester :&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;elixir &lt;a href="http://freebox-elixir.googlecode.com/svn/trunk/exemples/ecore_evas/Simple.js"&gt;Simple.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Liens / Références :&lt;ul&gt;&lt;li&gt;&lt;a href="http://elixir.freebox.fr/?section=documentation"&gt;http://elixir.freebox.fr/?section=documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/freebox-elixir/"&gt;http://code.google.com/p/freebox-elixir/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://zigazou.wordpress.com/2009/11/21/installer-freebox-elixir-sous-ubuntu-9-04/"&gt;http://zigazou.wordpress.com/2009/11/21/installer-freebox-elixir-sous-ubuntu-9-04/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Notes sur gentoo :&lt;ul&gt;&lt;li&gt;L'overlay installe &lt;span style="font-weight:bold;"&gt;media-libs/edje-9999&lt;/span&gt; qui contient &lt;span style="font-weight:bold;"&gt;edje_player&lt;/span&gt; (qui remplace edje_viewer)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;Avertissement&lt;/span&gt; : edge ne semble pas fonctionner avec cette installation :( Seuls les exemples basiques passent. Il est peut être finalement préférable d'utiliser l'image virtualbox...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-3697812792078340616?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/3697812792078340616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=3697812792078340616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3697812792078340616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/3697812792078340616'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/elixir-setup.html' title='Elixir setup'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dCaUukYtoQk/S-cttWxTNFI/AAAAAAAABoE/tUwp9Z5wvsw/s72-c/elixir_logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2971933733188766614</id><published>2010-05-08T00:07:00.011+02:00</published><updated>2010-05-14T23:05:42.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asus'/><category scheme='http://www.blogger.com/atom/ns#' term='u30jc-qx010c'/><title type='text'>Asus U30JC-QX010X</title><content type='html'>Quick &lt;a href="https://www.materiel.net/ctl/PC_Portables/54330-U30JC_QX010X.html"&gt;summary&lt;/a&gt; :&lt;ul&gt;&lt;li&gt;&lt;a href="http://ark.intel.com/Product.aspx?id=43537"&gt;Intel core i5-430M&lt;/a&gt;&lt;/li&gt;&lt;li&gt;4 GB memory DDR3 1066 MHz&lt;/li&gt;&lt;li&gt;13.3" WXGA 1366 x 768 TFT LED&lt;/li&gt;&lt;li&gt;nVidia® GeForce™ G310M 512 MB&lt;/li&gt;&lt;li&gt;320 GB SATA 5400 rpm&lt;/li&gt;&lt;li&gt;Webcam 0.3 MP 640x480&lt;/li&gt;&lt;li&gt;RJ 45, 3 USB, VGA, HDMI, wifi n, bluetooth, card reader&lt;/li&gt;&lt;li&gt;DVD burner&lt;/li&gt;&lt;li&gt;8 cells battery 5600 mAh&lt;/li&gt;&lt;li&gt;Windows 7 Professional 64 bits&lt;/li&gt;&lt;li&gt;2 years warranty&lt;/li&gt;&lt;/ul&gt;Can't wait !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2971933733188766614?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2971933733188766614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2971933733188766614' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2971933733188766614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2971933733188766614'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2010/05/asus-u30jc-qx010x.html' title='Asus U30JC-QX010X'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7554834203597504255</id><published>2009-10-13T20:25:00.012+02:00</published><updated>2009-10-13T21:47:39.469+02:00</updated><title type='text'>voyage-prive.com : Attention !</title><content type='html'>Les offres de &lt;a href="http://www.voyage-prive.com/"&gt;voyage-prive.com&lt;/a&gt; ne sont pas toujours intéressantes. Assurez-vous de toujours bien vérifier les prix en direct sur les hôtels proposés !&lt;br /&gt;&lt;br /&gt;En ce moment, est proposé le prestigieux &lt;a href="http://warwickparis.com/"&gt;Warwick Champs Elysées&lt;/a&gt;. Si on essaye avec voyage-prive, on nous fait miroiter 69 % de réduction : 190 euros pour deux personnes au lieu de 610 euros pour une chambre standard en petit déjeuner :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/StTHkNDvmYI/AAAAAAAAA80/Y-L-ujvDc_c/s1600-h/voyage-prive.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 105px;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/StTHkNDvmYI/AAAAAAAAA80/Y-L-ujvDc_c/s320/voyage-prive.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5392154078663907714" /&gt;&lt;/a&gt; Je ne compte pas les 5 € de réductions sur le menu à 35 €. &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/StTHs50Q-_I/AAAAAAAAA88/2Ta4yigfLvQ/s1600-h/voyage-prive-compris.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 41px;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/StTHs50Q-_I/AAAAAAAAA88/2Ta4yigfLvQ/s320/voyage-prive-compris.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5392154228117535730" /&gt;&lt;/a&gt;&lt;br /&gt;Si on va sur le site de l'hôtel, on trouve à la même date une chambre standard à 227 € pour deux personnes : &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/StTH7ijyMnI/AAAAAAAAA9E/OcSUVnbOzjA/s1600-h/warwick.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 168px;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/StTH7ijyMnI/AAAAAAAAA9E/OcSUVnbOzjA/s320/warwick.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5392154479572431474" /&gt;&lt;/a&gt; Le prix avant réduction correspondrait plutôt à la suite (et encore, elle est moins chère!) :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/StTIIZx4dtI/AAAAAAAAA9M/i6HuCyBn9PM/s1600-h/warwick+suite.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 119px;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/StTIIZx4dtI/AAAAAAAAA9M/i6HuCyBn9PM/s320/warwick+suite.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5392154700553942738" /&gt;&lt;/a&gt;A mon avis, c'est à la limite de l'arnaque ces fausses réductions qui passent pour de la publicité mensongère.&lt;br /&gt;&lt;br /&gt;Les offres commencent à devenir intéressantes quand on prend l'avion pour aller au bout du monde... mais bon, pour une nuit romantique dans un hôtel de luxe dans les proches capitales européennes, ça reste à prouver...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7554834203597504255?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7554834203597504255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7554834203597504255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7554834203597504255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7554834203597504255'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/10/voyage-privecom-attention.html' title='voyage-prive.com : Attention !'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_dCaUukYtoQk/StTHkNDvmYI/AAAAAAAAA80/Y-L-ujvDc_c/s72-c/voyage-prive.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2502666085816701092</id><published>2009-10-07T22:27:00.023+02:00</published><updated>2009-10-07T23:20:18.083+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agenda'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='import'/><title type='text'>How to import a yahoo agenda to another (yahoo) account ?</title><content type='html'>Even if this post is written in English, it targets French people. As a French, I use the French yahoo web site, which is slightly different from the American version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;EXPORT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In France, you do not have access to Import/Export functions. You need to go to your Agenda options and hack the url. The url has two parameters &lt;span style="font-weight:bold;"&gt;v&lt;/span&gt; (id of current page) and &lt;span style="font-weight:bold;"&gt;pv&lt;/span&gt; (id of previous page). You must change the &lt;span style="font-weight:bold;"&gt;v&lt;/span&gt; value to &lt;span style="font-weight:bold;"&gt;81&lt;/span&gt;. Thanks a lot &lt;a href="http://barrjo.free.fr/blog/index.php/web/exporter-votre-yahoo-agenda-et-migrer-vers-google-calendar-5/comment-page-1/"&gt;BarrJo&lt;/a&gt; for this info.&lt;br /&gt;&lt;br /&gt;This will show a new page with Import/Export functions to/from Palm Desktop and Outlook.&lt;br /&gt;&lt;br /&gt;Simply &lt;span style="font-weight:bold;"&gt;export in Outlook format&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;PATCH &amp; IMPORT&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The exported agenda cannot be handled by yahoo (this might explain why yahoo hides this functionnality).&lt;br /&gt;&lt;br /&gt;Here is what you need to fix :&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Carriage returns&lt;/span&gt; : all carriage returns are missing. You must add one after the header line (just after the "Description" title). You can deal most of the lines with a decent text editor with search and replace (you need to add a new line after &lt;span style="font-weight:bold;"&gt;"true";""&lt;/span&gt; or &lt;span style="font-weight:bold;"&gt;"false";""&lt;/span&gt;). Then, only the rows with a non-empty description remain.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;HTML entities&lt;/span&gt; : for example, &amp;amp;quot;, &amp;amp;amp; and &amp;amp;#39;, etc. must be respectively replaced by ", &amp; and '.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Commas&lt;/span&gt; : Yahoo gives you a file with values separated by semicolons. You need to replace them with commas. Be careful of other semicolons (in descriptions for example).&lt;/li&gt;&lt;/ul&gt;Now you can &lt;span style="font-weight:bold;"&gt;import the patched csv file&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Note : I have exported again the imported agenda and checked that all events were taken into account. I have just noticed a few updates from &lt;span style="font-weight:bold;"&gt;true&lt;/span&gt; to &lt;span style="font-weight:bold;"&gt;false&lt;/span&gt; in the antelast column.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;LIMITS&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Some yahoo specific info is lost (kind of event defaults to meeting, reminder, etc.)&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Repetitions are lost&lt;/span&gt; : if you update the repetition period of an event, you will end with two events in the future (the imported one and the repetition). So I advise you to remove all repetition starting from next year for yearly events (like birthdays). Then you will just need to set the repetition period to all birthdays.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight:bold;"&gt;OTHER POSSIBLE BUGS&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Date formats&lt;/li&gt;&lt;li&gt;Encoding : UTF8 / ANSI / etc.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2502666085816701092?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2502666085816701092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2502666085816701092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2502666085816701092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2502666085816701092'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/10/how-to-import-yahoo-agenda-to-another.html' title='How to import a yahoo agenda to another (yahoo) account ?'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8785544507244898413</id><published>2009-06-25T21:32:00.006+02:00</published><updated>2009-06-26T21:55:13.659+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cut'/><category scheme='http://www.blogger.com/atom/ns#' term='tf1'/><category scheme='http://www.blogger.com/atom/ns#' term='vo'/><category scheme='http://www.blogger.com/atom/ns#' term='fringe'/><title type='text'>Fringe c'est mieux en VO</title><content type='html'>Avec la censure de TF1 sur ses forums, je poste finalement ici.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dCaUukYtoQk/SkUnVy3KYVI/AAAAAAAAAaM/IazqZ4X_fS0/s1600-h/fringe_seahorse.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 198px; height: 320px;" src="http://1.bp.blogspot.com/_dCaUukYtoQk/SkUnVy3KYVI/AAAAAAAAAaM/IazqZ4X_fS0/s320/fringe_seahorse.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5351726987583578450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ayant adoré le premier épisode (malgré les deux coupures pubs), je n'ai pas pu attendre. J'ai donc regardé la série en VO (même si je n'ai pas encore fini la saison 1 à ce jour). Hier soir, je tombe par hasard sur l'épisode 4 sur TF1. C'est encore frais dans ma tête, je constate avec surprise que la version française a été censurée : 2 minutes ont été supprimées. Entre la 31è et la 33è environ, une scène a été presque entièrement coupée, quand le gus au bonnet force Peter à parler.&lt;br /&gt;&lt;br /&gt;Je trouve ça complètement nul que l'on censure des scènes de la série. Cela nuit à l'intrigue. En plus, vu l'heure à laquelle ça commence, je ne vois pas qui risque d'être choqué.&lt;br /&gt;&lt;br /&gt;Bref : boycottez TF1, choisissez la VO, c'est mieux. Vous ne risquez pas de rater une miette de l'histoire et ça vous fera bosser l'anglais.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8785544507244898413?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8785544507244898413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8785544507244898413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8785544507244898413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8785544507244898413'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/06/fringe-cest-mieux-en-vo.html' title='Fringe c&apos;est mieux en VO'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dCaUukYtoQk/SkUnVy3KYVI/AAAAAAAAAaM/IazqZ4X_fS0/s72-c/fringe_seahorse.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-432748327376204648</id><published>2009-05-21T02:33:00.004+02:00</published><updated>2009-05-21T02:38:35.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='paris'/><category scheme='http://www.blogger.com/atom/ns#' term='velib'/><title type='text'>Le Vélib' c'est pourri</title><content type='html'>2h du mat. Une petite flemme. On décide de tester le vélib' pour la première fois. On passe alors 5 bonnes minutes à créer un compte pour un pass court de 1 à 7 jours. Je prends un vélo. Il me propose le 21, je préférais le 37 mais bon, pas trop le choix apparemment. Au tour de ma chérie, et là plus de vélos ! Evidemment, les autres vélos sont sur le trottoir d'en face, inutilisable pour les non-habitués.&lt;br /&gt;&lt;br /&gt;On décide de patienter jusqu'à la prochaine station. Je roule lentement et elle marche à mes côtés. Une fois arrivés, on trouve plein de vélos. Mais tous sont marqués rouge : comprendre indisponibles.&lt;br /&gt;&lt;br /&gt;On continue jusqu'à la station suivante. Comme on pouvait s'y attendre, son numéro d'abonné temporaire n'est pas reconnu. Dégoûté, je rends mon vélib'. Après 20 min de marche à pied, ça valait le coup.&lt;br /&gt;&lt;br /&gt;Résultat, on a mis 30 minutes alors que d'habitude on trace en 1/4 h... Le vélib', ça marche pas. C'est pas demain la veille qu'on va retenter l'expérience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-432748327376204648?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/432748327376204648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=432748327376204648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/432748327376204648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/432748327376204648'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/05/le-velib-cest-pourri.html' title='Le Vélib&apos; c&apos;est pourri'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4563059309508277303</id><published>2009-04-20T21:35:00.010+02:00</published><updated>2009-07-12T18:16:06.240+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 7 (source)</title><content type='html'>Before disclosing sources of &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7.html"&gt;Part 7&lt;/a&gt;, here a few notes.&lt;br /&gt;&lt;br /&gt;I provide a sample &lt;span style="font-weight:bold;"&gt;ThumbnailManager&lt;/span&gt;, working with an &lt;span style="font-weight:bold;"&gt;IsolatedStorageFile&lt;/span&gt;.&lt;pre name="code" class="c-sharp"&gt;public class ThumbnailManager : IThumbnailManager&lt;br /&gt;{&lt;br /&gt;    #region Fields&lt;br /&gt;    private readonly IsolatedStorageFile store;&lt;br /&gt;    #endregion&lt;br /&gt;    public ThumbnailManager()&lt;br /&gt;    {&lt;br /&gt;        store = IsolatedStorageFile.GetUserStoreForAssembly();&lt;br /&gt;    }&lt;br /&gt;    public ImageSource GetThumbnail(string host, string path)&lt;br /&gt;    {&lt;br /&gt;        string thumbName = Path.GetFileName(path);&lt;br /&gt;        if (store.GetFileNames(thumbName).Length == 0)&lt;br /&gt;        {&lt;br /&gt;            using (var stream = new IsolatedStorageFileStream(thumbName, FileMode.CreateNew, store))&lt;br /&gt;            {&lt;br /&gt;                byte[] data = GetThumbnail(path);&lt;br /&gt;                stream.Write(data, 0, data.Length);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        using (var stream = new IsolatedStorageFileStream(thumbName, FileMode.Open, store))&lt;br /&gt;        {&lt;br /&gt;            var image = new BitmapImage();&lt;br /&gt;            image.BeginInit();&lt;br /&gt;            image.CacheOption = BitmapCacheOption.OnLoad;&lt;br /&gt;            image.StreamSource = stream;&lt;br /&gt;            image.EndInit();&lt;br /&gt;            image.Freeze();&lt;br /&gt;            return image;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;I deal with host names because I am also working on an implementation dealing with many shares on the network. The &lt;span style="font-weight:bold;"&gt;GetThumbnail&lt;/span&gt; method just resizes pictures.&lt;pre name="code" class="c-sharp"&gt;    private byte[] GetThumbnail(string path)&lt;br /&gt;    {&lt;br /&gt;        Image source = Image.FromFile(path);&lt;br /&gt;        source = AmazonCut(source);&lt;br /&gt;        int height = source.Height;&lt;br /&gt;        int width = source.Width;&lt;br /&gt;        int factor = (height - 1) / 250 + 1;&lt;br /&gt;        int smallHeight = height / factor;&lt;br /&gt;        int smallWidth = width / factor;&lt;br /&gt;        Image thumb = source.GetThumbnailImage(smallWidth, smallHeight, null, IntPtr.Zero);&lt;br /&gt;        using (var ms = new MemoryStream())&lt;br /&gt;        {&lt;br /&gt;            thumb.Save(ms, ImageFormat.Png);&lt;br /&gt;            ms.Flush();&lt;br /&gt;            ms.Seek(0, SeekOrigin.Begin);&lt;br /&gt;            var result = new byte[ms.Length];&lt;br /&gt;            ms.Read(result, 0, (int)ms.Length);&lt;br /&gt;            return result;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;For the sample videos on youtube, I downloaded many covers from amazon. That's why I need the helper function that removes the blank frame around the picture:&lt;pre name="code" class="c-sharp"&gt;    private static Image AmazonCut(Image image)&lt;br /&gt;    {&lt;br /&gt;        if (image.Width != image.Height)&lt;br /&gt;            return image;&lt;br /&gt;        var bmp = new Bitmap(image);&lt;br /&gt;        int size = image.Height;&lt;br /&gt;        int white = System.Drawing.Color.FromKnownColor(KnownColor.White).ToArgb();&lt;br /&gt;        int i = 0;&lt;br /&gt;        while (i &lt; size / 2)&lt;br /&gt;        {&lt;br /&gt;            if (bmp.GetPixel(i, i).ToArgb() != white)&lt;br /&gt;                break;&lt;br /&gt;            if (bmp.GetPixel(i, size - 1 - i).ToArgb() != white)&lt;br /&gt;                break;&lt;br /&gt;            if (bmp.GetPixel(size - 1 - i, i).ToArgb() != white)&lt;br /&gt;                break;&lt;br /&gt;            if (bmp.GetPixel(size - 1 - i, size - 1 - i).ToArgb() != white)&lt;br /&gt;                break;&lt;br /&gt;            i++;&lt;br /&gt;        }&lt;br /&gt;        if (i &gt; 0)&lt;br /&gt;        {&lt;br /&gt;            i += 8;&lt;br /&gt;            var zone = new Rectangle(i, i, size - 2 * i, size - 2 * i);&lt;br /&gt;            return bmp.Clone(zone, System.Drawing.Imaging.PixelFormat.DontCare);&lt;br /&gt;        }&lt;br /&gt;        return bmp;&lt;br /&gt;    }&lt;/pre&gt;Well this whole class is not perfect code, but it is sufficient for a demo.&lt;br /&gt;&lt;br /&gt;If you do not know innerings of IsolatedStorage, you will find the thumbnails in a folder like &lt;span style="font-style:italic;"&gt;C:\Documents and Settings\ded\Local Settings\Application Data\IsolatedStorage\0ypqvhod.rll\j4pydd3v.g4v\StrongName.alr3sbzvfezz2fk22sd5g0b5dxbwzr0b\AssemFiles&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart7.zip"&gt;source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4563059309508277303?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4563059309508277303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4563059309508277303' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4563059309508277303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4563059309508277303'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7-source.html' title='WPF Cover Flow Tutorial : Part 7 (source)'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7872752431471376316</id><published>2009-04-15T21:44:00.030+02:00</published><updated>2009-04-20T22:51:28.226+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 7</title><content type='html'>After some &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-6-bis.html"&gt;improvements&lt;/a&gt; in the &lt;span style="font-weight:bold;"&gt;Cover&lt;/span&gt; class, let's describe how virtualization works.&lt;br /&gt;&lt;br /&gt;We do not keep all covers in memory. Remember the drawing in &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-2.html"&gt;Part 2&lt;/a&gt;. At a given time, we only keep a few covers on both sides of the current cover (at position &lt;span style="font-weight:bold;"&gt;index&lt;/span&gt;). This means that every time we browse through the covers, we create and destroy one or more covers. If we do not keep all covers in memory, we have to keep enough information to rebuild covers : image file path and position. We also need to remember which covers are currently built.&lt;pre name="code" class="c-sharp"&gt;public const int HalfRealizedCount = 6;&lt;br /&gt;public const int PageSize = HalfRealizedCount;&lt;br /&gt;private readonly ICoverFactory coverFactory;&lt;br /&gt;private readonly Dictionary&amp;lt;int, ImageInfo&amp;gt; imageList = new Dictionary&amp;lt;int, ImageInfo&amp;gt;();&lt;br /&gt;private readonly Dictionary&amp;lt;int, ICover&amp;gt; coverList = new Dictionary&amp;lt;int, ICover&amp;gt;();&lt;br /&gt;private int index;&lt;br /&gt;private int firstRealized = -1;&lt;br /&gt;private int lastRealized = -1;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;HalfRealizedCount&lt;/span&gt; is the number of covers created before and after current cover&lt;/li&gt;&lt;li&gt;I use the same value for the &lt;span style="font-weight:bold;"&gt;PageSize&lt;/span&gt; (we could choose a different value) when we will move by more than one cover at a time&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;imageList&lt;/span&gt; will map cover positions to image paths&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;coverList&lt;/span&gt; will be used as an array to keep realized covers&lt;/li&gt;&lt;li&gt;&lt;strong&gt;firstRealized&lt;/strong&gt; and &lt;strong&gt;lastRealized&lt;/strong&gt; are the positions of respectively first and last realized covers&lt;/li&gt;&lt;/ul&gt;There will be two ways to browse covers : by less than a page with animation or jumping by more than a page without animation.&lt;pre name="code" class="c-sharp"&gt;    private void RotateCover(int pos, bool animate)&lt;br /&gt;    {&lt;br /&gt;        if (coverList.ContainsKey(pos))&lt;br /&gt;            coverList[pos].Animate(index, animate);&lt;br /&gt;    }&lt;br /&gt;    private void UpdateIndex(int newIndex)&lt;br /&gt;    {&lt;br /&gt;        if (index != newIndex)&lt;br /&gt;        {&lt;br /&gt;            bool animate = Math.Abs(newIndex - index) &amp;lt; PageSize;&lt;br /&gt;            UpdateRange(newIndex);&lt;br /&gt;            int oldIndex = index;&lt;br /&gt;            index = newIndex;&lt;br /&gt;            if (index &amp;gt; oldIndex)&lt;br /&gt;            {&lt;br /&gt;                if (oldIndex &amp;lt; firstRealized)&lt;br /&gt;                    oldIndex = firstRealized;&lt;br /&gt;                for (int i = oldIndex; i &amp;lt;= index; i++)&lt;br /&gt;                    RotateCover(i, animate);&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                if (oldIndex &amp;gt; lastRealized)&lt;br /&gt;                    oldIndex = lastRealized;&lt;br /&gt;                for (int i = oldIndex; i &amp;gt;= index; i--)&lt;br /&gt;                    RotateCover(i, animate);&lt;br /&gt;            }&lt;br /&gt;            camera.Position = new Point3D(Cover.CoverStep * index, camera.Position.Y, camera.Position.Z);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;I'm not sure if the test in &lt;span style="font-weight:bold;"&gt;RotateCover&lt;/span&gt; is still needed. Here is how the new &lt;span style="font-weight:bold;"&gt;UpdateIndex&lt;/span&gt; function. We compute the &lt;span style="font-weight:bold;"&gt;animation&lt;/span&gt; boolean like described before. The &lt;span style="font-weight:bold;"&gt;UpdateRange&lt;/span&gt; function deals with cover realization : it will create and destroy covers as necessary and updates both realized indexes. Then, for all realized covers between old and new index, we rotate the covers. Finally, like before, we update camera positions.&lt;pre name="code" class="c-sharp"&gt;    private void RemoveCover(int pos)&lt;br /&gt;    {&lt;br /&gt;        if (!coverList.ContainsKey(pos))&lt;br /&gt;            return;&lt;br /&gt;        coverList[pos].Destroy();&lt;br /&gt;        coverList.Remove(pos);&lt;br /&gt;    }&lt;br /&gt;    private void UpdateRange(int newIndex)&lt;br /&gt;    {&lt;br /&gt;        int newFirstRealized = Math.Max(newIndex - HalfRealizedCount, 0);&lt;br /&gt;        int newLastRealized = Math.Min(newIndex + HalfRealizedCount, imageList.Count - 1);&lt;br /&gt;        if (lastRealized &amp;lt; newFirstRealized || firstRealized &amp;gt; newLastRealized)&lt;br /&gt;        {&lt;br /&gt;            visualModel.Children.Clear();&lt;br /&gt;            coverList.Clear();&lt;br /&gt;        }&lt;br /&gt;        else if (firstRealized &amp;lt; newFirstRealized)&lt;br /&gt;        {&lt;br /&gt;            for (int i = firstRealized; i &amp;lt; newFirstRealized; i++)&lt;br /&gt;                RemoveCover(i);&lt;br /&gt;        }&lt;br /&gt;        else if (newLastRealized &amp;lt; lastRealized)&lt;br /&gt;        {&lt;br /&gt;            for (int i = lastRealized; i &amp;gt; newLastRealized; i--)&lt;br /&gt;                RemoveCover(i);&lt;br /&gt;        }&lt;br /&gt;        for (int i = newFirstRealized; i &amp;lt;= newLastRealized; i++)&lt;br /&gt;        {&lt;br /&gt;            if (!coverList.ContainsKey(i))&lt;br /&gt;            {&lt;br /&gt;                ICover cover = coverFactory.NewCover(imageList[i].Host, imageList[i].Path, i, newIndex);&lt;br /&gt;                coverList.Add(i, cover);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        firstRealized = newFirstRealized;&lt;br /&gt;        lastRealized = newLastRealized;&lt;br /&gt;    }&lt;/pre&gt;In the &lt;span style="font-weight:bold;"&gt;UpdateRange&lt;/span&gt; method, we first compute realized indexes. Then, we remove necessary covers (might need all covers if we move by more than &lt;span style="font-weight:bold;"&gt;HalfRealizedCount&lt;/span&gt;. Finally, we create missing covers.&lt;pre name="code" class="c-sharp"&gt;    public void GoToNext()&lt;br /&gt;    {&lt;br /&gt;        UpdateIndex(Math.Min(index + 1, imageList.Count - 1));&lt;br /&gt;    }&lt;br /&gt;    public void GoToPrevious()&lt;br /&gt;    {&lt;br /&gt;        UpdateIndex(Math.Max(index - 1, 0));&lt;br /&gt;    }&lt;br /&gt;    public void GoToNextPage()&lt;br /&gt;    {&lt;br /&gt;        UpdateIndex(Math.Min(index + PageSize, imageList.Count - 1));&lt;br /&gt;    }&lt;br /&gt;    public void GoToPreviousPage()&lt;br /&gt;    {&lt;br /&gt;        UpdateIndex(Math.Max(index - PageSize, 0));&lt;br /&gt;    }&lt;/pre&gt;Navigation methods are self explanatory.&lt;br /&gt;&lt;br /&gt;Possible improvements :&lt;ul&gt;&lt;li&gt;Slider&lt;/li&gt;&lt;li&gt;Events&lt;/li&gt;&lt;li&gt;Tags (e.g. album names to jump to covers)&lt;/li&gt;&lt;/ul&gt;Source is available in &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7-source.html"&gt;next post&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7872752431471376316?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7872752431471376316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7872752431471376316' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7872752431471376316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7872752431471376316'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7.html' title='WPF Cover Flow Tutorial : Part 7'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5248009024664175851</id><published>2009-04-14T23:42:00.017+02:00</published><updated>2009-04-16T00:33:24.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualization'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 6 (bis)</title><content type='html'>I'll start with some Cover &lt;span style="font-weight:bold;"&gt;refactoring&lt;/span&gt; :&lt;ul&gt;&lt;li&gt;Class becomes &lt;span style="font-weight:bold;"&gt;internal&lt;/span&gt;&lt;/li&gt;&lt;li&gt;I add the &lt;span style="font-weight:bold;"&gt;ICover&lt;/span&gt; interface, mainly for unit testing with a fake class implementing ICover :&lt;pre name="code" class="c-sharp"&gt;public interface ICover&lt;br /&gt;{&lt;br /&gt;   void Animate(int index, bool animate);&lt;br /&gt;   bool Matches(MeshGeometry3D mesh);&lt;br /&gt;   void Destroy();&lt;br /&gt;}&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;You may notice the new &lt;span style="font-weight:bold;"&gt;Destroy&lt;/span&gt; method. This is useful to be able to create or destroy objects at will. Relatively, covers now know about the containing &lt;span style="font-weight:bold;"&gt;ModelVisual3D&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;I also add a static &lt;span style="font-weight:bold;"&gt;IThumbnailManager&lt;/span&gt; to put elsewhere all the code dealing with thumbnails (like managing an &lt;span style="font-weight:bold;"&gt;IsolatedStorageFile&lt;/span&gt; for example)&lt;/li&gt;&lt;li&gt;Animation is slightly modified : in some cases, no rotation is needed to allow faster browsing.&lt;/li&gt;&lt;/ul&gt;Here are the changes since &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-5.html"&gt;Part 5&lt;/a&gt; :&lt;pre name="code" class="c-sharp"&gt;public interface IThumbnailManager&lt;br /&gt;{&lt;br /&gt;    ImageSource GetThumbnail(string host, string path);&lt;br /&gt;}&lt;br /&gt;internal class Cover : ModelVisual3D, ICover&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    private static IThumbnailManager thumbCache;&lt;br /&gt;    private readonly ModelVisual3D visualModel;&lt;br /&gt;    ...&lt;br /&gt;    private readonly string imageName;&lt;br /&gt;    ...&lt;br /&gt;    private static ImageSource LoadImageSource(ImageInfo info)&lt;br /&gt;    {&lt;br /&gt;        if (thumbCache == null)&lt;br /&gt;            throw new InvalidOperationException("No thumbnail cache.");&lt;br /&gt;        return thumbCache.GetThumbnail(info.Host, info.Path);&lt;br /&gt;    }&lt;br /&gt;    ...&lt;br /&gt;    public Cover(ImageInfo info, int coverPos, int currentPos, ModelVisual3D model)&lt;br /&gt;    {&lt;br /&gt;        pos = coverPos;&lt;br /&gt;        imageName = new FileInfo(info.Path).Name;&lt;br /&gt;        visualModel = model;&lt;br /&gt;&lt;br /&gt;        imageSource = LoadImageSource(info);&lt;br /&gt;        modelGroup = new Model3DGroup();&lt;br /&gt;        modelGroup.Children.Add(new GeometryModel3D(Tessellate(), LoadImage(imageSource)));&lt;br /&gt;        modelGroup.Children.Add(new GeometryModel3D(TessellateMirror(), LoadImageMirror(imageSource)));&lt;br /&gt;&lt;br /&gt;        rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), RotationAngle(currentPos));&lt;br /&gt;        translation = new TranslateTransform3D(TranslationX(currentPos), 0, TranslationZ(currentPos));&lt;br /&gt;        var transformGroup = new Transform3DGroup();&lt;br /&gt;        transformGroup.Children.Add(new RotateTransform3D(rotation));&lt;br /&gt;        transformGroup.Children.Add(translation);&lt;br /&gt;        modelGroup.Transform = transformGroup;&lt;br /&gt;&lt;br /&gt;        Content = modelGroup;&lt;br /&gt;&lt;br /&gt;        visualModel.Children.Add(this);&lt;br /&gt;    }&lt;br /&gt;    public static IThumbnailManager Cache&lt;br /&gt;    {&lt;br /&gt;        set { thumbCache = value; }&lt;br /&gt;    }&lt;br /&gt;    public void Animate(int index, bool animate)&lt;br /&gt;    {&lt;br /&gt;        if (animate || rotation.HasAnimatedProperties)&lt;br /&gt;        {&lt;br /&gt;            var rotateAnimation = new DoubleAnimation(RotationAngle(index), AnimationDuration);&lt;br /&gt;            var xAnimation = new DoubleAnimation(TranslationX(index), AnimationDuration);&lt;br /&gt;            var zAnimation = new DoubleAnimation(TranslationZ(index), AnimationDuration);&lt;br /&gt;            rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnimation);&lt;br /&gt;            translation.BeginAnimation(TranslateTransform3D.OffsetXProperty, xAnimation);&lt;br /&gt;            translation.BeginAnimation(TranslateTransform3D.OffsetZProperty, zAnimation);&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        {&lt;br /&gt;            rotation.Angle = RotationAngle(index);&lt;br /&gt;            translation.OffsetX = TranslationX(index);&lt;br /&gt;            translation.OffsetZ = TranslationZ(index);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    public void Destroy()&lt;br /&gt;    {&lt;br /&gt;        visualModel.Children.Remove(this);&lt;br /&gt;    }&lt;br /&gt;    public override string ToString()&lt;br /&gt;    {&lt;br /&gt;        return string.Format("{0} {1}", pos, imageName);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;I also add an ICoverFactory (mainly for testing purposes) :&lt;pre name="code" class="c-sharp"&gt;public interface ICoverFactory&lt;br /&gt;{&lt;br /&gt;    ICover NewCover(string host, string path, int coverPos, int currentPos);&lt;br /&gt;}&lt;br /&gt;internal class ImageInfo&lt;br /&gt;{&lt;br /&gt;    public ImageInfo(string host, string path)&lt;br /&gt;    {&lt;br /&gt;        Host = host;&lt;br /&gt;        Path = path;&lt;br /&gt;    }&lt;br /&gt;    public string Host { get; private set; }&lt;br /&gt;    public string Path { get; private set; }&lt;br /&gt;}&lt;br /&gt;internal class CoverFactory : ICoverFactory&lt;br /&gt;{&lt;br /&gt;    private readonly ModelVisual3D visualModel;&lt;br /&gt;    public CoverFactory(ModelVisual3D visualModel)&lt;br /&gt;    {&lt;br /&gt;        this.visualModel = visualModel;&lt;br /&gt;    }&lt;br /&gt;    #region ICoverFactory Members&lt;br /&gt;    public ICover NewCover(string host, string path, int coverPos, int currentPos)&lt;br /&gt;    {&lt;br /&gt;        return new Cover(new ImageInfo(host, path), coverPos, currentPos, visualModel);&lt;br /&gt;    }&lt;br /&gt;    #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The FlowControl class is greatly refactored to implement &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-7.html"&gt;virtualization&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5248009024664175851?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5248009024664175851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5248009024664175851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5248009024664175851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5248009024664175851'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-6-bis.html' title='WPF Cover Flow Tutorial : Part 6 (bis)'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-5207743602151202489</id><published>2009-04-14T22:50:00.003+02:00</published><updated>2009-04-14T23:00:43.272+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : 6 months intermission</title><content type='html'>Well, sorry guys for not posting since October... I didn't have enough time to go on this tutorial. Less time available for coding and I've been working on a wider project where my Flow assembly was just a small GUI component.&lt;br /&gt;&lt;br /&gt;There will be quite a jump in the source code. But I'll try to describe what is the main idea behind virtualization...&lt;br /&gt;&lt;br /&gt;Coming soon !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-5207743602151202489?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/5207743602151202489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=5207743602151202489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5207743602151202489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/5207743602151202489'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-6-months.html' title='WPF Cover Flow Tutorial : 6 months intermission'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-7479214733573559197</id><published>2008-10-24T22:52:00.005+02:00</published><updated>2009-04-15T21:03:02.057+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 6</title><content type='html'>After building a standalone component in &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-5.html"&gt;Part 5&lt;/a&gt;, I wanted to improve performance.&lt;br /&gt;&lt;br /&gt;I've read many blogs about &lt;span style="font-weight:bold;"&gt;IScrollInfo&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;ItemsContainerGenerator&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Generator&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;Selector &lt;/span&gt;and &lt;span style="font-weight:bold;"&gt;ItemsControl &lt;/span&gt;classes. I also digged into WPF source code through &lt;span style="font-weight:bold;"&gt;Reflector&lt;/span&gt;. But eventually I realized that this was all about &lt;span style="font-weight:bold;"&gt;2D&lt;/span&gt;. And here, we are dealing with &lt;span style="font-weight:bold;"&gt;3D&lt;/span&gt;. Therefore, we have to create our own solution...&lt;br /&gt;&lt;br /&gt;To be continued... &lt;a href="http://d3dal3.blogspot.com/2009/04/wpf-cover-flow-tutorial-part-6-bis.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_gSuUE1Ozzo&amp;hl=fr&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_gSuUE1Ozzo&amp;hl=fr&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-7479214733573559197?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/7479214733573559197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=7479214733573559197' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7479214733573559197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/7479214733573559197'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-6.html' title='WPF Cover Flow Tutorial : Part 6'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-8645690969842530564</id><published>2008-10-18T19:24:00.023+02:00</published><updated>2009-07-12T18:30:31.096+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 5</title><content type='html'>After &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-4.html"&gt;Part 4&lt;/a&gt;, we will partly refactor the code to build a custom component.&lt;br /&gt;&lt;br /&gt;We define a new assembly called &lt;span style="font-weight:bold;"&gt;FlowComponent &lt;/span&gt;where we will move most of the code. First, the c# code will be part of a new class called &lt;span style="font-weight:bold;"&gt;FlowControl&lt;/span&gt;. This class herits from &lt;span style="font-weight:bold;"&gt;UserControl &lt;/span&gt;:&lt;pre name="code" class="c-sharp"&gt;using[...]&lt;br /&gt;namespace Ded.Tutorial.Wpf.CoverFlow.Part5.FlowComponent&lt;br /&gt;{&lt;br /&gt;    public partial class FlowControl : UserControl&lt;br /&gt;    {&lt;br /&gt;        #region Fields&lt;br /&gt;        private int index;&lt;br /&gt;        private readonly List&amp;lt;Cover&amp;gt; coverList = new List&amp;lt;Cover&amp;gt;();&lt;br /&gt;        #endregion&lt;br /&gt;        #region Private stuff&lt;br /&gt;        private void RotateCover(int pos)[...]&lt;br /&gt;        private void UpdateIndex(int newIndex)[...]&lt;br /&gt;        private void viewPort_MouseDown(object sender, MouseButtonEventArgs e)[...]&lt;br /&gt;        #endregion&lt;br /&gt;        public FlowControl()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;        }&lt;br /&gt;        public void Load(string imagePath)&lt;br /&gt;        {&lt;br /&gt;            coverList.Clear();&lt;br /&gt;            var imageDir = new DirectoryInfo(imagePath);&lt;br /&gt;            int doneImages = 0;&lt;br /&gt;            foreach (FileInfo image in imageDir.GetFiles("*.jpg"))&lt;br /&gt;            {&lt;br /&gt;                var cover = new Cover(image.FullName, doneImages++);&lt;br /&gt;                coverList.Add(cover);&lt;br /&gt;                visualModel.Children.Add(cover);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        public void GoToNext()&lt;br /&gt;        {&lt;br /&gt;            if (index &amp;lt; coverList.Count - 1)&lt;br /&gt;                UpdateIndex(index + 1);&lt;br /&gt;        }&lt;br /&gt;        public void GoToPrevious()&lt;br /&gt;        {&lt;br /&gt;            if (index &amp;gt; 0)&lt;br /&gt;                UpdateIndex(index - 1);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The code from the &lt;span style="font-weight:bold;"&gt;TestWindow &lt;/span&gt;constructor is included in a new method called &lt;span style="font-weight:bold;"&gt;Load&lt;/span&gt;. It will build covers with the images from one directory. We also provide two new methods &lt;span style="font-weight:bold;"&gt;GoToNext &lt;/span&gt;and &lt;span style="font-weight:bold;"&gt;GoToPrevious &lt;/span&gt;to navigate between covers.&lt;br /&gt;&lt;br /&gt;This is the same in the &lt;span style="font-weight:bold;"&gt;xaml &lt;/span&gt;code : we migrate the &lt;span style="font-weight:bold;"&gt;Grid &lt;/span&gt;(its background) and the &lt;span style="font-weight:bold;"&gt;Viewport3D &lt;/span&gt;to our custom UserControl :&lt;pre name="code" class="xml"&gt;&amp;lt;UserControl x:Class="Ded.Tutorial.Wpf.CoverFlow.Part5.FlowComponent.FlowControl"&lt;br /&gt;    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;    Height="282" Width="490"&amp;gt;&lt;br /&gt;  &amp;lt;Grid ClipToBounds="True"&amp;gt;&lt;br /&gt;    &amp;lt;Grid.Background[...]&amp;gt;&lt;br /&gt;    &amp;lt;Viewport3D x:Name="viewPort" Grid.Column="0" Grid.Row="0" ClipToBounds="False" MouseDown="viewPort_MouseDown"&amp;gt;&lt;br /&gt;      &amp;lt;Viewport3D.Camera[...]&amp;gt;&lt;br /&gt;      &amp;lt;Viewport3D.Children[...]&amp;gt;&lt;br /&gt;    &amp;lt;/Viewport3D&amp;gt;&lt;br /&gt;  &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/pre&gt;We can set the size we want. It will be overriden in the owner component. We set the &lt;span style="font-weight:bold;"&gt;ClipToBounds &lt;/span&gt;property to &lt;span style="font-weight:bold;"&gt;True &lt;/span&gt;to avoid covers from exceeding the bounds of our component.&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight:bold;"&gt;Cover&lt;/span&gt; class is also moved to the FlowComponent assembly.&lt;br /&gt;&lt;br /&gt;As we are creating a CoverFlow component, it is a good idea to deal with rectangle images. We update the &lt;span style="font-weight:bold;"&gt;Point3D &lt;/span&gt;coordinates with the &lt;span style="font-weight:bold;"&gt;ImageSource &lt;/span&gt;size. The &lt;span style="font-weight:bold;"&gt;ImageSource &lt;/span&gt;will be stored as a class attribute.&lt;pre name="code" class="c-sharp"&gt;private readonly ImageSource imageSource;&lt;br /&gt;private double RectangleDx()&lt;br /&gt;{&lt;br /&gt;    if (imageSource.Width &gt; imageSource.Height)&lt;br /&gt;        return 0;&lt;br /&gt;    else&lt;br /&gt;        return 1 - imageSource.Width / imageSource.Height;&lt;br /&gt;}&lt;br /&gt;private double RectangleDy()&lt;br /&gt;{&lt;br /&gt;    if (imageSource.Width &gt; imageSource.Height)&lt;br /&gt;        return 1 - imageSource.Height / imageSource.Width;&lt;br /&gt;    else&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;br /&gt;private Geometry3D Tessellate()&lt;br /&gt;{&lt;br /&gt;    double dx = RectangleDx();&lt;br /&gt;    double dy = RectangleDy();&lt;br /&gt;    var p0 = new Point3D(-1 + dx, -1 + dy, 0);&lt;br /&gt;    var p1 = new Point3D(1 - dx, -1 + dy, 0);&lt;br /&gt;    var p2 = new Point3D(1 - dx, 1 - dy, 0);&lt;br /&gt;    var p3 = new Point3D(-1 + dx, 1 - dy, 0);&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;private Geometry3D TessellateMirror()&lt;br /&gt;{&lt;br /&gt;    double dx = RectangleDx();&lt;br /&gt;    double dy = RectangleDy();&lt;br /&gt;    var p0 = new Point3D(-1 + dx, -3 + 3 * dy, 0);&lt;br /&gt;    var p1 = new Point3D(1 - dx, -3 + 3 * dy, 0);&lt;br /&gt;    var p2 = new Point3D(1 - dx, -1 + dy, 0);&lt;br /&gt;    var p3 = new Point3D(-1 + dx, -1 + dy, 0);&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;public Cover(string imagePath, int pos)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    imageSource = LoadImageSource(imagePath);&lt;br /&gt;    ...&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;With this new improvement, it is possible to use the component to browse photos :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/SQRCZkKOcPI/AAAAAAAAAFw/0K8RWXUBWp4/s1600-h/Rectangle+flower.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/SQRCZkKOcPI/AAAAAAAAAFw/0K8RWXUBWp4/s320/Rectangle+flower.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5261403271646310642" /&gt;&lt;/a&gt;&lt;br /&gt;There is nothing much left in the &lt;span style="font-weight:bold;"&gt;TestWindow&lt;/span&gt; class. In the &lt;span style="font-weight:bold;"&gt;xaml &lt;/span&gt;code, after we've referenced our component assembly, we just use our &lt;span style="font-weight:bold;"&gt;FlowControl &lt;/span&gt;as main &lt;span style="font-weight:bold;"&gt;Content&lt;/span&gt; :&lt;pre name="code" class="xml"&gt;&amp;lt;Window x:Class="Ded.Tutorial.Wpf.CoverFlow.Part5.TestWindow"&lt;br /&gt;    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;    Title="WPF Coverflow" Width="512" Height="320" KeyDown="Window_KeyDown"&lt;br /&gt;    xmlns:flow="clr-namespace:Ded.Tutorial.Wpf.CoverFlow.Part5.FlowComponent;assembly=Ded.Tutorial.Wpf.CoverFlow.Part5.FlowComponent"&amp;gt;&lt;br /&gt;  &amp;lt;flow:FlowControl x:Name="flow" Margin="0"&amp;gt;&amp;lt;/flow:FlowControl&amp;gt;&lt;br /&gt;&amp;lt;/Window&amp;gt;&lt;/pre&gt; In the C# code, we just keep the Window_KeyDown method and the constructor :&lt;pre name="code" class="c-sharp"&gt;using System.Windows;&lt;br /&gt;using System.Windows.Input;&lt;br /&gt;namespace Ded.Tutorial.Wpf.CoverFlow.Part5&lt;br /&gt;{&lt;br /&gt;    public partial class TestWindow : Window&lt;br /&gt;    {&lt;br /&gt;        #region Private stuff&lt;br /&gt;        private void Window_KeyDown(object sender, KeyEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            switch (e.Key)&lt;br /&gt;            {&lt;br /&gt;                case Key.Right:&lt;br /&gt;                    flow.GoToNext();&lt;br /&gt;                    break;&lt;br /&gt;                case Key.Left:&lt;br /&gt;                    flow.GoToPrevious();&lt;br /&gt;                    break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;        public TestWindow()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            flow.Load(@"c:\_covers");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;That's it ! We've built a CoverFlow component reusable in other &lt;span style="font-weight:bold;"&gt;WPF &lt;/span&gt;applications. But this component needs improvements. We will add virtualization in the next part...&lt;br /&gt;Download &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart5.zip"&gt;source&lt;/a&gt;. Continue with &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-6.html"&gt;Part 6&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-8645690969842530564?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/8645690969842530564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=8645690969842530564' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8645690969842530564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/8645690969842530564'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-5.html' title='WPF Cover Flow Tutorial : Part 5'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dCaUukYtoQk/SQRCZkKOcPI/AAAAAAAAAFw/0K8RWXUBWp4/s72-c/Rectangle+flower.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4091999420162203974</id><published>2008-10-17T21:15:00.003+02:00</published><updated>2009-07-12T18:30:19.281+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 4</title><content type='html'>We can improve the &lt;a href="http://en.wikipedia.org/wiki/User_interface"&gt;HCI&lt;/a&gt; from &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-3.html"&gt;Part 3&lt;/a&gt; with some mouse handling.&lt;br /&gt;&lt;br /&gt;We add a &lt;span style="font-weight:bold;"&gt;MouseDown &lt;/span&gt;handler method to our &lt;span style="font-weight:bold;"&gt;Viewport3D &lt;/span&gt;:&lt;pre name="code" class="c-sharp"&gt;private void OnViewportMouseDown(object sender, MouseButtonEventArgs e)&lt;br /&gt;{&lt;br /&gt;    var rayMeshResult = (RayMeshGeometry3DHitTestResult)VisualTreeHelper.HitTest(viewPort, e.GetPosition(viewPort));&lt;br /&gt;    if (rayMeshResult != null)&lt;br /&gt;    {&lt;br /&gt;        for (int i = 0; i &amp;lt; coverList.Count; i++)&lt;br /&gt;        {&lt;br /&gt;            if (coverList[i].Matches(rayMeshResult.MeshHit))&lt;br /&gt;            {&lt;br /&gt;                UpdateIndex(i);&lt;br /&gt;                break;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;This method uses the &lt;span style="font-weight:bold;"&gt;VisualTreeHelper &lt;/span&gt;to find which mesh was hitten by the mouse click. If there is a match, we update the index like we did before. Matches are found with this new &lt;span style="font-weight:bold;"&gt;Cover &lt;/span&gt;method :&lt;pre name="code" class="c-sharp"&gt;public bool Matches(MeshGeometry3D mesh)&lt;br /&gt;{&lt;br /&gt;    foreach (GeometryModel3D part in modelGroup.Children)&lt;br /&gt;       if (part.Geometry == mesh)&lt;br /&gt;           return true;&lt;br /&gt;    return false;&lt;br /&gt;}&lt;/pre&gt;We also modify the &lt;span style="font-weight:bold;"&gt;TestWindow &lt;/span&gt;constructor to load all the pictures from a sample folder :&lt;pre name="code" class="c-sharp"&gt;public TestWindow()&lt;br /&gt;{&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    var imageDir = new DirectoryInfo(@"c:\_covers");&lt;br /&gt;    int doneImages = 0;&lt;br /&gt;    foreach (FileInfo image in imageDir.GetFiles("*.jpg"))&lt;br /&gt;    {&lt;br /&gt;        var cover = new Cover(image.FullName, doneImages++);&lt;br /&gt;        coverList.Add(cover);&lt;br /&gt;        visualModel.Children.Add(cover);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;Mouse click may increment or decrement the index by more than one cover. That's wy we need to fix the &lt;span style="font-weight:bold;"&gt;UpdateIndex &lt;/span&gt;method :&lt;pre name="code" class="c-sharp"&gt;private void UpdateIndex(int newIndex)&lt;br /&gt;{&lt;br /&gt;    if (index != newIndex)&lt;br /&gt;    {&lt;br /&gt;        int oldIndex = index;&lt;br /&gt;        index = newIndex;&lt;br /&gt;        if (index &gt; oldIndex)&lt;br /&gt;            for (int i = oldIndex; i &lt;= index; i++)&lt;br /&gt;                RotateCover(i);&lt;br /&gt;        else&lt;br /&gt;            for (int i = oldIndex; i &gt;= index; i--)&lt;br /&gt;                RotateCover(i);&lt;br /&gt;        camera.Position = new Point3D(.2 * index, camera.Position.Y, camera.Position.Z);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;It is now time to play with more covers. Let's try the current application with a sample folder containing 500+ covers. These covers are usually between 400x400 and 500x500 pixels. The next &lt;span style="font-weight:bold;"&gt;Process Explorer&lt;/span&gt; capture shows that the application needs a lot of cpu and memory resources :&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/SPjxF1ThOsI/AAAAAAAAAFo/IvYADi_Uz1Y/s1600-h/high_resources.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/SPjxF1ThOsI/AAAAAAAAAFo/IvYADi_Uz1Y/s320/high_resources.png" alt="" id="BLOGGER_PHOTO_ID_5258217647465642690" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Loading all covers brings the cpu to 100%.&lt;/li&gt;&lt;li&gt;Browing all covers with the Right key pressed also needs a lot of cpu. Moreover, this rises the cache size from 300 MB to more than 1 GB.&lt;/li&gt;&lt;/ul&gt;It is possible to improve performance if we use thumbnails for all covers. We will store thumbnails in a subfolder.&lt;pre name="code" class="c-sharp"&gt;private ImageSource LoadImageSource(string imagePath)&lt;br /&gt;{&lt;br /&gt;    var imageFile = new FileInfo(imagePath);&lt;br /&gt;    var thumbnailDir = new DirectoryInfo(Path.Combine(imageFile.Directory.FullName, "tn"));&lt;br /&gt;    if (!thumbnailDir.Exists)&lt;br /&gt;        thumbnailDir.Create();&lt;br /&gt;    var thumbnail = new FileInfo(Path.Combine(thumbnailDir.FullName, imageFile.Name));&lt;br /&gt;    if (!thumbnail.Exists)&lt;br /&gt;    {&lt;br /&gt;        Image source = Image.FromFile(imageFile.FullName);&lt;br /&gt;        int height = source.Height;&lt;br /&gt;        int width = source.Width;&lt;br /&gt;        int factor = (height - 1) / 250 + 1;&lt;br /&gt;        int smallHeight = height / factor;&lt;br /&gt;        int smallWidth = width / factor;&lt;br /&gt;        Image thumb = source.GetThumbnailImage(smallWidth, smallHeight, null, IntPtr.Zero);&lt;br /&gt;        thumb.Save(thumbnail.FullName);&lt;br /&gt;    }&lt;br /&gt;    return new BitmapImage(new Uri(thumbnail.FullName, UriKind.RelativeOrAbsolute));&lt;br /&gt;}&lt;/pre&gt;Thumbnails improve performance while browsing, but it is still slow at startup. We will try to improve this later.&lt;br /&gt;&lt;br /&gt;Continue with &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-5.html"&gt;Part 5&lt;/a&gt;. Download &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart4.zip"&gt;source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4091999420162203974?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4091999420162203974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4091999420162203974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4091999420162203974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4091999420162203974'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-4.html' title='WPF Cover Flow Tutorial : Part 4'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_dCaUukYtoQk/SPjxF1ThOsI/AAAAAAAAAFo/IvYADi_Uz1Y/s72-c/high_resources.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2082948248333619256</id><published>2008-10-16T21:48:00.003+02:00</published><updated>2009-07-12T18:30:01.227+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 3</title><content type='html'>In &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-2.html"&gt;Part 2&lt;/a&gt;, we miss the animation part of the flow.&lt;br /&gt;&lt;br /&gt;In the main &lt;span style="font-weight:bold;"&gt;TestWindow&lt;/span&gt;, we save all the covers in a List :&lt;pre name="code" class="c-sharp"&gt;private readonly List&amp;lt;Cover&amp;gt; coverList = new List&amp;lt;Cover&amp;gt;();&lt;br /&gt;public TestWindow()&lt;br /&gt;{&lt;br /&gt;    InitializeComponent();&lt;br /&gt;    var assembly = new FileInfo(Assembly.GetExecutingAssembly().Location);&lt;br /&gt;    var image = new FileInfo(Path.Combine(assembly.Directory.FullName, "Katy Perry.jpg"));&lt;br /&gt;    for (int i = 0; i &amp;lt; 10; i++)&lt;br /&gt;    {&lt;br /&gt;        var cover = new Cover(image.FullName, i);&lt;br /&gt;        coverList.Add(cover);&lt;br /&gt;        visualModel.Children.Add(cover);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;We add an handler for the &lt;span style="font-weight:bold;"&gt;KeyDown &lt;/span&gt;event on the &lt;span style="font-weight:bold;"&gt;Window &lt;/span&gt;element. We will only deal with the &lt;span style="font-weight:bold;"&gt;Right &lt;/span&gt;and &lt;span style="font-weight:bold;"&gt;Left &lt;/span&gt;keys. Once one of these keys is pressed down, we animate the old current cover and the new one.&lt;pre name="code" class="c-sharp"&gt;private void RotateCover(int pos)&lt;br /&gt;{&lt;br /&gt;    coverList[pos].Animate(index);&lt;br /&gt;}&lt;br /&gt;private void UpdateIndex(int newIndex)&lt;br /&gt;{&lt;br /&gt;    if (index != newIndex)&lt;br /&gt;    {&lt;br /&gt;        int oldIndex = index;&lt;br /&gt;        index = newIndex;&lt;br /&gt;        RotateCover(oldIndex);&lt;br /&gt;        RotateCover(index);&lt;br /&gt;        camera.Position = new Point3D(.2 * index, camera.Position.Y, camera.Position.Z);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;private void Window_KeyDown(object sender, KeyEventArgs e)&lt;br /&gt;{&lt;br /&gt;    int newIndex = index;&lt;br /&gt;    switch (e.Key)&lt;br /&gt;    {&lt;br /&gt;        case Key.Right:&lt;br /&gt;            if (newIndex &amp;lt; coverList.Count - 1)&lt;br /&gt;                newIndex++;&lt;br /&gt;            break;&lt;br /&gt;        case Key.Left:&lt;br /&gt;            if (newIndex &amp;gt; 0)&lt;br /&gt;                newIndex--;&lt;br /&gt;            break;&lt;br /&gt;    }&lt;br /&gt;    UpdateIndex(newIndex);&lt;br /&gt;}&lt;/pre&gt;Currently, we do not animate covers. We just move them from one place to another. In order to get a real animation, we have to deal with &lt;span style="font-weight:bold;"&gt;Animation &lt;/span&gt;objects. In this new version of the &lt;span style="font-weight:bold;"&gt;Animate &lt;/span&gt;method, we ask the engine to animate the covers. As we have saved the translation and rotation objects in two Cover attributes, we can directly update their parameters (angle and offsets).&lt;pre name="code" class="c-sharp"&gt;public void Animate(int index)&lt;br /&gt;{&lt;br /&gt;    TimeSpan duration = TimeSpan.FromMilliseconds(500);&lt;br /&gt;    var rotateAnimation = new DoubleAnimation(RotationAngle(index), duration);&lt;br /&gt;    var xAnimation = new DoubleAnimation(TranslationX(index), duration);&lt;br /&gt;    var zAnimation = new DoubleAnimation(TranslationZ(index), duration);&lt;br /&gt;    rotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotateAnimation);&lt;br /&gt;    translation.BeginAnimation(TranslateTransform3D.OffsetXProperty, xAnimation);&lt;br /&gt;    translation.BeginAnimation(TranslateTransform3D.OffsetZProperty, zAnimation);&lt;br /&gt;}&lt;/pre&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-845ec264d26de5cd" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v9.nonxt2.googlevideo.com/videoplayback?id%3D845ec264d26de5cd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7746AE201ACF500131880812D9F2D88E8F7783A5.BFBDFE9CE08EB5E2D924D556904CAF045DA5B76%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D845ec264d26de5cd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DM2ZvXyrQlECrGS3G2um0p5arJCg&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v9.nonxt2.googlevideo.com/videoplayback?id%3D845ec264d26de5cd%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7746AE201ACF500131880812D9F2D88E8F7783A5.BFBDFE9CE08EB5E2D924D556904CAF045DA5B76%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D845ec264d26de5cd%26offsetms%3D5000%26itag%3Dw160%26sigh%3DM2ZvXyrQlECrGS3G2um0p5arJCg&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;Download &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart3.zip"&gt;source&lt;/a&gt;. Continue with &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-4.html"&gt;Part 4&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2082948248333619256?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=845ec264d26de5cd&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2082948248333619256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2082948248333619256' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2082948248333619256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2082948248333619256'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-3.html' title='WPF Cover Flow Tutorial : Part 3'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4406879527263765388</id><published>2008-10-16T19:03:00.002+02:00</published><updated>2009-07-12T18:28:47.764+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 2</title><content type='html'>Since &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-1.html"&gt;Part 1&lt;/a&gt;, we now know how to display a cover in 3D.&lt;br /&gt;&lt;br /&gt;In order to display a reflection mirror, we add another &lt;span style="font-weight:bold;"&gt;GeometryModel3D &lt;/span&gt;to our &lt;span style="font-weight:bold;"&gt;Model3DGroup&lt;/span&gt;. This new element will be based on these points :&lt;pre name="code" class="c-sharp"&gt;using Point2D = System.Windows.Point;&lt;br /&gt;private Geometry3D TessellateMirror()&lt;br /&gt;{&lt;br /&gt;  var p0 = new Point3D(-1, -3, 0);&lt;br /&gt;  var p1 = new Point3D(1, -3, 0);&lt;br /&gt;  var p2 = new Point3D(1, -1, 0);&lt;br /&gt;  var p3 = new Point3D(-1, -1, 0);&lt;br /&gt;  var q0 = new Point2D(0, 1);&lt;br /&gt;  var q1 = new Point2D(1, 1);&lt;br /&gt;  var q2 = new Point2D(1, 0);&lt;br /&gt;  var q3 = new Point2D(0, 0);&lt;br /&gt;  return BuildMesh(p0, p1, p2, p3, q0, q1, q2, q3);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;We define the &lt;span style="font-weight:bold;"&gt;Point2D &lt;/span&gt;alias because of the conflict with &lt;span style="font-weight:bold;"&gt;System.Drawing.Point&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;For the texture, we use a &lt;span style="font-weight:bold;"&gt;VisualBrush &lt;/span&gt;object and we apply a &lt;span style="font-weight:bold;"&gt;LinearGradientBrush &lt;/span&gt;to the image &lt;span style="font-weight:bold;"&gt;OpacityMask &lt;/span&gt;:&lt;pre name="code" class="c-sharp"&gt;using MediaColor = System.Windows.Media.Color;&lt;br /&gt;private Material LoadImageMirror(ImageSource imSrc)&lt;br /&gt;{&lt;br /&gt;   var image = new System.Windows.Controls.Image();&lt;br /&gt;   image.Source = imSrc;&lt;br /&gt;   MediaColor startColor = MediaColor.FromArgb(127, 255, 255, 255);&lt;br /&gt;   MediaColor endColor = MediaColor.FromArgb(127, 255, 255, 255);&lt;br /&gt;   image.OpacityMask = new LinearGradientBrush(startColor, endColor, 90.0);&lt;br /&gt;   var brush = new VisualBrush(image);&lt;br /&gt;   return new DiffuseMaterial(brush);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dCaUukYtoQk/SPeN6HLT9RI/AAAAAAAAAFQ/cf8-SKNZVdU/s1600-h/Part2_mirror.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_dCaUukYtoQk/SPeN6HLT9RI/AAAAAAAAAFQ/cf8-SKNZVdU/s320/Part2_mirror.png" alt="" id="BLOGGER_PHOTO_ID_5257827119476765970" border="0" /&gt;&lt;/a&gt;There are two possibilities to browse the covers :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keep the camera at the very same place and translate/rotate all covers as we are browsing.&lt;/li&gt;&lt;li&gt;Transform only a few covers (e.g. the one currently selected) and move the camera.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The second solution will ensure better performance.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/SPd5Vwaz5mI/AAAAAAAAAFI/1PMM--BG1BY/s1600-h/cover_model.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/SPd5Vwaz5mI/AAAAAAAAAFI/1PMM--BG1BY/s320/cover_model.png" alt="" id="BLOGGER_PHOTO_ID_5257804504659912290" border="0" /&gt;&lt;/a&gt;The current cover will be put in front. The other covers will be rotated and placed on each side of the current cover. When the camera will move, the current cover will be moved back with the unselected ones, and the newly selected cover will be put in front.&lt;br /&gt;&lt;br /&gt;There are two transformations : a rotation and a translation on X and Z axes. The rotation angle will be 90, 0 or -90 degrees. The Z translation will be 0 or 1 for the current cover. The X translation will be 0 for the current cover, or proportional to the distance from the origin. For each cover, we will save its position. We will compare the cover position with the current index to compute the transformation parameters. This gives us :&lt;pre name="code" class="c-sharp"&gt;private readonly int pos;&lt;br /&gt;private double RotationAngle(int index)&lt;br /&gt;{&lt;br /&gt;    return Math.Sign(pos - index) * -90;&lt;br /&gt;}&lt;br /&gt;private double TranslationX(int index)&lt;br /&gt;{&lt;br /&gt;    return pos * .2 + Math.Sign(pos - index) * 1.6;&lt;br /&gt;}&lt;br /&gt;private double TranslationZ(int index)&lt;br /&gt;{&lt;br /&gt;    return pos == index ? 1 : 0;&lt;br /&gt;}&lt;/pre&gt;Applying the transformations to our &lt;span style="font-weight:bold;"&gt;Model3DGroup &lt;/span&gt;is easy. We create the transformation in the constructor with a default index of 0 :&lt;pre name="code" class="c-sharp"&gt;private readonly AxisAngleRotation3D rotation;&lt;br /&gt;private readonly TranslateTransform3D translation;&lt;br /&gt;public Cover(string imagePath, int pos)&lt;br /&gt;{&lt;br /&gt;    this.imagePath = imagePath;&lt;br /&gt;    this.pos = pos;&lt;br /&gt;&lt;br /&gt;    ImageSource imSrc = LoadImageSource();&lt;br /&gt;    modelGroup = new Model3DGroup();&lt;br /&gt;    modelGroup.Children.Add(new GeometryModel3D(Tessellate(), LoadImage(imSrc)));&lt;br /&gt;    modelGroup.Children.Add(new GeometryModel3D(TessellateMirror(), LoadImageMirror(imSrc)));&lt;br /&gt;&lt;br /&gt;    rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), RotationAngle(0));&lt;br /&gt;    translation = new TranslateTransform3D(TranslationX(0), 0, TranslationZ(0));&lt;br /&gt;    var transformGroup = new Transform3DGroup();&lt;br /&gt;    transformGroup.Children.Add(new RotateTransform3D(rotation));&lt;br /&gt;    transformGroup.Children.Add(translation);&lt;br /&gt;    modelGroup.Transform = transformGroup;&lt;br /&gt;    Content = modelGroup;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Then, we will call the &lt;span style="font-weight:bold;"&gt;Animate &lt;/span&gt;method the transform the cover :&lt;pre name="code" class="c-sharp"&gt;public void Animate(int index)&lt;br /&gt;{&lt;br /&gt;    rotation.Angle = RotationAngle(index);&lt;br /&gt;    translation.OffsetX = TranslationX(index);&lt;br /&gt;    translation.OffsetZ = TranslationZ(index);&lt;br /&gt;}&lt;/pre&gt;If we create three covers, we realize that only one is visible :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/SPeXZNWg80I/AAAAAAAAAFY/ZHkMALx4YKI/s1600-h/missing_light.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/SPeXZNWg80I/AAAAAAAAAFY/ZHkMALx4YKI/s320/missing_light.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5257837549314962242" /&gt;&lt;/a&gt;We need to replace our single light source with two different ones :&lt;pre name="code" class="xml"&gt;&lt;br /&gt;&amp;lt;ModelVisual3D&amp;gt;&lt;br /&gt;  &amp;lt;ModelVisual3D.Content&amp;gt;&lt;br /&gt;    &amp;lt;DirectionalLight Color="White" Direction="1,0,-3" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModelVisual3D.Content&amp;gt;&lt;br /&gt;&amp;lt;/ModelVisual3D&amp;gt;&lt;br /&gt;&amp;lt;ModelVisual3D&amp;gt;&lt;br /&gt;  &amp;lt;ModelVisual3D.Content&amp;gt;&lt;br /&gt;    &amp;lt;DirectionalLight Color="White" Direction="-1,0,-3" /&amp;gt;&lt;br /&gt;  &amp;lt;/ModelVisual3D.Content&amp;gt;&lt;br /&gt;&amp;lt;/ModelVisual3D&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/SPeZ3a-5m3I/AAAAAAAAAFg/ziwPfp2xSZ0/s1600-h/better_light.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/SPeZ3a-5m3I/AAAAAAAAAFg/ziwPfp2xSZ0/s320/better_light.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5257840267393342322" /&gt;&lt;/a&gt;Continue with &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-3.html"&gt;Part 3&lt;/a&gt;. Download &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart2.zip"&gt;source&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4406879527263765388?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4406879527263765388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4406879527263765388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4406879527263765388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4406879527263765388'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-2.html' title='WPF Cover Flow Tutorial : Part 2'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_dCaUukYtoQk/SPeN6HLT9RI/AAAAAAAAAFQ/cf8-SKNZVdU/s72-c/Part2_mirror.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-2976781565679673671</id><published>2008-10-14T21:40:00.000+02:00</published><updated>2008-10-16T23:25:10.647+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Result</title><content type='html'>Here is a sample video that shows the power of WPF :&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-817dfa25aa510339" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v10.nonxt5.googlevideo.com/videoplayback?id%3D817dfa25aa510339%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D40903F5C7DC0AD5DCD78ACA46282873E2BA45FA8.21172A4480748683F282AC93A314D7A218142C30%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D817dfa25aa510339%26offsetms%3D5000%26itag%3Dw160%26sigh%3DYIYqvku6u2XYlcmscFrg7lcmi3c&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v10.nonxt5.googlevideo.com/videoplayback?id%3D817dfa25aa510339%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D40903F5C7DC0AD5DCD78ACA46282873E2BA45FA8.21172A4480748683F282AC93A314D7A218142C30%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D817dfa25aa510339%26offsetms%3D5000%26itag%3Dw160%26sigh%3DYIYqvku6u2XYlcmscFrg7lcmi3c&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-42c9accd97a08125" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v21.nonxt5.googlevideo.com/videoplayback?id%3D42c9accd97a08125%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D27449E30D0FE9A48509FF33F57CBC1184207D84A.65626565C29654E4858D0033518362BB7805F0E4%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D42c9accd97a08125%26offsetms%3D5000%26itag%3Dw160%26sigh%3DwF45KfcdhDHislaFLk9Zr7VrvZo&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v21.nonxt5.googlevideo.com/videoplayback?id%3D42c9accd97a08125%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1330231442%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D27449E30D0FE9A48509FF33F57CBC1184207D84A.65626565C29654E4858D0033518362BB7805F0E4%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D42c9accd97a08125%26offsetms%3D5000%26itag%3Dw160%26sigh%3DwF45KfcdhDHislaFLk9Zr7VrvZo&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;These poor videos were done with Windows Media Encoder. &lt;a href="http://camstudio.org/"&gt;CamStudio&lt;/a&gt; actually performs much more better. I will use the latter for the next screencasts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-2976781565679673671?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=42c9accd97a08125&amp;type=video%2Fmp4' length='0'/><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=817dfa25aa510339&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/2976781565679673671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=2976781565679673671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2976781565679673671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/2976781565679673671'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-result.html' title='WPF Cover Flow Tutorial : Result'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-720201479425440668.post-4600256663826219972</id><published>2008-10-13T22:09:00.006+02:00</published><updated>2011-06-07T23:26:59.345+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wpf'/><category scheme='http://www.blogger.com/atom/ns#' term='coverflow'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><title type='text'>WPF Cover Flow Tutorial : Part 1</title><content type='html'>Disclaimer : if you don't know anything about &lt;span style="font-weight:bold;"&gt;WPF&lt;/span&gt;, you should read this &lt;a href="http://www.kindohm.com/technical/WPF3DTutorial.htm"&gt;excellent tutorial&lt;/a&gt;. This should be considered as Part 0.&lt;br /&gt;&lt;br /&gt;Now, I will describe how to develop a Cover Flow component in WPF.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/SPO3QKJ--UI/AAAAAAAAAD8/Nn-hHLmJYeM/s1600-h/graph.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/SPO3QKJ--UI/AAAAAAAAAD8/Nn-hHLmJYeM/s320/graph.png" alt="" id="BLOGGER_PHOTO_ID_5256746678303521090" border="0" /&gt;&lt;/a&gt; The z-axis is not visible here. Actually, it is going in your direction.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/SPOxqkvUe7I/AAAAAAAAADs/bxerbO_4xNc/s1600-h/triangles.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/SPOxqkvUe7I/AAAAAAAAADs/bxerbO_4xNc/s320/triangles.png" alt="" id="BLOGGER_PHOTO_ID_5256740535046273970" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The first basic task will just display one cover in the middle of the screen.&lt;br /&gt;In 3D, we usually work with triangles.&lt;br /&gt;So we simply cut the square in two :&lt;br /&gt;&lt;br /&gt;Let's start with the code. We create the 4 points :&lt;pre name="code" class="c-sharp"&gt;var p0 = new Point3D(-1, -1, 0);&lt;br /&gt;var p1 = new Point3D(1, -1, 0);&lt;br /&gt;var p2 = new Point3D(1, 1, 0);&lt;br /&gt;var p3 = new Point3D(-1, 1, 0);&lt;br /&gt;&lt;/pre&gt;Then we create a &lt;span style="font-weight:bold;"&gt;MeshGeometry3D &lt;/span&gt;object. This object will contain our model. In order to build a model, we need to set all the points. Then, for each triangle, we define the point indices and the normals. To calculate the normals, I use the same method as the one defined in Part 0.&lt;pre name="code" class="c-sharp"&gt;private Vector3D CalculateNormal(Point3D p0, Point3D p1, Point3D p2)&lt;br /&gt;{&lt;br /&gt;var v0 = new Vector3D(p1.X - p0.X, p1.Y - p0.Y, p1.Z - p0.Z);&lt;br /&gt;var v1 = new Vector3D(p2.X - p1.X, p2.Y - p1.Y, p2.Z - p1.Z);&lt;br /&gt;return Vector3D.CrossProduct(v0, v1);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;For the first triangle, we take the first 3 points. The normal is OK with these points (going towards us, in the positive direction of the z-axis). We need to pay attention to the second triangle. If we simply take the points in the same order (e.g. 1, 2 and 3), the normal will be inverted, in the negative direction of the z-axis. So we choose the points 0, 2 and 3.&lt;pre name="code" class="c-sharp"&gt;var mesh = new MeshGeometry3D();&lt;br /&gt;mesh.Positions.Add(p0);&lt;br /&gt;mesh.Positions.Add(p1);&lt;br /&gt;mesh.Positions.Add(p2);&lt;br /&gt;mesh.Positions.Add(p3);&lt;br /&gt;&lt;br /&gt;var normal = CalculateNormal(p0, p1, p2);&lt;br /&gt;mesh.TriangleIndices.Add(0);&lt;br /&gt;mesh.TriangleIndices.Add(1);&lt;br /&gt;mesh.TriangleIndices.Add(2);&lt;br /&gt;mesh.Normals.Add(normal);&lt;br /&gt;&lt;br /&gt;normal = CalculateNormal(p2, p3, p0);&lt;br /&gt;mesh.TriangleIndices.Add(2);&lt;br /&gt;mesh.TriangleIndices.Add(3);&lt;br /&gt;mesh.TriangleIndices.Add(0);&lt;br /&gt;mesh.Normals.Add(normal);&lt;br /&gt;&lt;/pre&gt;As far as texturing is concerned, I strongly advise you to read &lt;a href="http://blogs.msdn.com/danlehen/archive/2005/11/06/489627.aspx"&gt;Daniel Lehenbauer's Blog&lt;/a&gt;. We need to deal with 4 points, but in 2D this time :&lt;pre name="code" class="c-sharp"&gt;var q0 = new Point(0, 0);&lt;br /&gt;var q1 = new Point(1, 0);&lt;br /&gt;var q2 = new Point(1, 1);&lt;br /&gt;var q3 = new Point(0, 1);&lt;br /&gt;&lt;/pre&gt;As you've read in Daniel's post, there is a big difference between 3D and 2D texture conventions. In 3D, you have :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/SPO_yHm4_vI/AAAAAAAAAEE/0t_lJbVXfeM/s1600-h/3d_coords.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/SPO_yHm4_vI/AAAAAAAAAEE/0t_lJbVXfeM/s320/3d_coords.png" alt="" id="BLOGGER_PHOTO_ID_5256756057828032242" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_dCaUukYtoQk/SPPA59yJXPI/AAAAAAAAAEM/_xD3tuNayH4/s1600-h/2d_texture_coords.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: right; cursor: pointer;" src="http://2.bp.blogspot.com/_dCaUukYtoQk/SPPA59yJXPI/AAAAAAAAAEM/_xD3tuNayH4/s320/2d_texture_coords.png" alt="" id="BLOGGER_PHOTO_ID_5256757292141468914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But 2D texturing uses :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So the coordinates associations are :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;p0 &lt;-&gt; q3&lt;br /&gt;&lt;/li&gt;&lt;li&gt;p1 &lt;-&gt; q2&lt;/li&gt;&lt;li&gt;p2 &lt;-&gt; q1&lt;br /&gt;&lt;/li&gt;&lt;li&gt;p3 &lt;-&gt; q0&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;We just need to add the texture points to the mesh for each triangle point :&lt;pre name="code" class="c-sharp"&gt;mesh.TextureCoordinates.Add(q3);&lt;br /&gt;mesh.TextureCoordinates.Add(q2);&lt;br /&gt;mesh.TextureCoordinates.Add(q1);&lt;br /&gt;&lt;br /&gt;mesh.TextureCoordinates.Add(q0);&lt;br /&gt;mesh.TextureCoordinates.Add(q1);&lt;br /&gt;mesh.TextureCoordinates.Add(q2);&lt;br /&gt;&lt;/pre&gt;The mesh will be frozen for performance reasons. In the future, we will only need to transform this mesh with rotations and translations. We will not need to move the points.&lt;br /&gt;This gives us a &lt;span style="font-weight:bold;"&gt;Tesselate &lt;/span&gt;method that will return the mesh :&lt;pre name="code" class="c-sharp"&gt;private Geometry3D Tessellate()&lt;br /&gt;{&lt;br /&gt;var p0 = new Point3D(-1, -1, 0);&lt;br /&gt;...&lt;br /&gt;var mesh = new MeshGeometry3D();&lt;br /&gt;...&lt;br /&gt;mesh.Freeze();&lt;br /&gt;return mesh;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;This method will be part of a Cover class. This class will be the main class to deal with covers. Here are two more methods that will help us to load the texture image :&lt;pre name="code" class="c-sharp"&gt;private ImageSource LoadImageSource(string imagePath)&lt;br /&gt;{&lt;br /&gt;Image thumb = Image.FromFile(imagePath);&lt;br /&gt;return new BitmapImage(new Uri(imagePath, UriKind.RelativeOrAbsolute));&lt;br /&gt;}&lt;br /&gt;private Material LoadImage(ImageSource imSrc)&lt;br /&gt;{&lt;br /&gt;return new DiffuseMaterial(new ImageBrush(imSrc));&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;We finish the class with its constructor :&lt;pre name="code" class="c-sharp"&gt;&lt;br /&gt;using ...&lt;br /&gt;namespace Ded.Tutorial.Wpf.CoverFlow.Part1&lt;br /&gt;{&lt;br /&gt;class Cover : ModelVisual3D&lt;br /&gt;{&lt;br /&gt;#region Fields&lt;br /&gt;private readonly Model3DGroup modelGroup;&lt;br /&gt;#endregion&lt;br /&gt;#region Private stuff&lt;br /&gt;private Vector3D CalculateNormal(Point3D p0, Point3D p1, Point3D p2)...&lt;br /&gt;private Geometry3D Tessellate()...&lt;br /&gt;private ImageSource LoadImageSource(string imagePath)...&lt;br /&gt;private Material LoadImage(ImageSource imSrc)...&lt;br /&gt;#endregion&lt;br /&gt;public Cover(string imagePath)&lt;br /&gt;{&lt;br /&gt; ImageSource imSrc = LoadImageSource(imagePath);&lt;br /&gt; modelGroup = new Model3DGroup();&lt;br /&gt; modelGroup.Children.Add(new GeometryModel3D(Tessellate(), LoadImage(imSrc)));&lt;br /&gt; Content = modelGroup;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Let's load this class in an empty WPF application.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_dCaUukYtoQk/SPUD21ukxiI/AAAAAAAAAEw/EtSU0kMSl0I/s1600-h/camera.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_dCaUukYtoQk/SPUD21ukxiI/AAAAAAAAAEw/EtSU0kMSl0I/s320/camera.png" alt="" id="BLOGGER_PHOTO_ID_5257112380695168546" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We place the camera at (0, 0, 3). We add a light source so that we will not see black objects.&lt;br /&gt;&lt;br /&gt;We also add an empty &lt;span style="font-weight:bold;"&gt;ModelVisual3D &lt;/span&gt;object that will contain our single cover (for now).&lt;br /&gt;&lt;br /&gt;Here is the &lt;span style="font-weight:bold;"&gt;xaml &lt;/span&gt;code :&lt;pre name="code" class="xml"&gt;&amp;lt;Window x:Class="Ded.Tutorial.Wpf.CoverFlow.Part1.TestWindow"&lt;br /&gt; xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt; xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt; Title="WPF Coverflow" Height="320" Width="512"&amp;gt;&lt;br /&gt;&amp;lt;Grid&amp;gt;&lt;br /&gt; &amp;lt;Viewport3D x:Name="viewPort" Grid.Column="0" Grid.Row="0" ClipToBounds="False"&amp;gt;&lt;br /&gt;   &amp;lt;Viewport3D.Camera&amp;gt;&lt;br /&gt;     &amp;lt;PerspectiveCamera x:Name="camera" Position="0,0,3"&lt;br /&gt;       UpDirection="0,1,0" LookDirection="0,0,-1"&lt;br /&gt;       FieldOfView="100" NearPlaneDistance="0.125"/&amp;gt;&lt;br /&gt;   &amp;lt;/Viewport3D.Camera&amp;gt;&lt;br /&gt;   &amp;lt;Viewport3D.Children&amp;gt;&lt;br /&gt;     &amp;lt;ModelVisual3D&amp;gt;&lt;br /&gt;       &amp;lt;ModelVisual3D.Content&amp;gt;&lt;br /&gt;         &amp;lt;DirectionalLight Color="White" Direction="0,0,-4" /&amp;gt;&lt;br /&gt;       &amp;lt;/ModelVisual3D.Content&amp;gt;&lt;br /&gt;     &amp;lt;/ModelVisual3D&amp;gt;&lt;br /&gt;     &amp;lt;ModelVisual3D x:Name="visualModel"&amp;gt;&lt;br /&gt;     &amp;lt;/ModelVisual3D&amp;gt;&lt;br /&gt;   &amp;lt;/Viewport3D.Children&amp;gt;&lt;br /&gt; &amp;lt;/Viewport3D&amp;gt;&lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/Window&amp;gt;&lt;/pre&gt;This simple application will display :&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_dCaUukYtoQk/SPZiMsDevYI/AAAAAAAAAE4/J2u6-UMGGJE/s1600-h/Part1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_dCaUukYtoQk/SPZiMsDevYI/AAAAAAAAAE4/J2u6-UMGGJE/s320/Part1.png" alt="" id="BLOGGER_PHOTO_ID_5257497585125342594" border="0" /&gt;&lt;/a&gt;This can be prettier if we add some background :&lt;pre name="code" class="xml"&gt;&amp;lt;Grid.Background&amp;gt;&lt;br /&gt; &amp;lt;LinearGradientBrush StartPoint="0,0" EndPoint="0,1"&amp;gt;&lt;br /&gt;   &amp;lt;LinearGradientBrush.GradientStops&amp;gt;&lt;br /&gt;     &amp;lt;GradientStop Color="Black" Offset="0"/&amp;gt;&lt;br /&gt;     &amp;lt;GradientStop Color="#696988" Offset="1"/&amp;gt;&lt;br /&gt;   &amp;lt;/LinearGradientBrush.GradientStops&amp;gt;&lt;br /&gt; &amp;lt;/LinearGradientBrush&amp;gt;&lt;br /&gt;&amp;lt;/Grid.Background&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_dCaUukYtoQk/SPZj38TkPCI/AAAAAAAAAFA/ne0M6AH1ZNk/s1600-h/Part1bis.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_dCaUukYtoQk/SPZj38TkPCI/AAAAAAAAAFA/ne0M6AH1ZNk/s320/Part1bis.png" alt="" id="BLOGGER_PHOTO_ID_5257499427733781538" border="0" /&gt;&lt;/a&gt;Continue with &lt;a href="http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-2.html"&gt;Part 2&lt;/a&gt;. Download &lt;a href="http://philippe.vianney.free.fr/blogger/WPFCoverFlowTutorialPart1.zip"&gt;source&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Edit 2011.06.07 : Only one normal is needed per triangle. Source code has &lt;span style="font-weight:bold;"&gt;not&lt;/span&gt; been updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/720201479425440668-4600256663826219972?l=d3dal3.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://d3dal3.blogspot.com/feeds/4600256663826219972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=720201479425440668&amp;postID=4600256663826219972' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4600256663826219972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/720201479425440668/posts/default/4600256663826219972'/><link rel='alternate' type='text/html' href='http://d3dal3.blogspot.com/2008/10/wpf-cover-flow-tutorial-part-1.html' title='WPF Cover Flow Tutorial : Part 1'/><author><name>ded</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='31' height='32' src='http://1.bp.blogspot.com/_dCaUukYtoQk/TE9CnUY6sAI/AAAAAAAABsw/a3fXrziptCI/S220/glogo-small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_dCaUukYtoQk/SPO3QKJ--UI/AAAAAAAAAD8/Nn-hHLmJYeM/s72-c/graph.png' height='72' width='72'/><thr:total>9</thr:total></entry></feed>
