<?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-6951827</id><updated>2011-12-11T16:20:08.040+11:00</updated><title type='text'>Francois Beaussier &amp; Aymeric Gaurat Apelli</title><subtitle type='html'>Frenchies under down !</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6951827.post-7881468853143042202</id><published>2007-11-05T22:06:00.001+11:00</published><updated>2007-11-05T22:08:47.384+11:00</updated><title type='text'>Visual Studio Macro to create a new snippet</title><content type='html'>&lt;span xmlns=''&gt;&lt;p&gt;Aymeric Gaurat-Apelli: Thanks to François Beaussier for hosting this blog post as my technical blog is no longer available.&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;Summary&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;I have written a Visual Studio macro that turns Visual Studio into a Snippet Editor. You simply select the piece of text you want to use in your snippet and the macro will create a snippet that will automatically be loaded by Visual Studio. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;Download the latest macro &lt;a href='http://'&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;How to use it?&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;Write the snippet code from within Visual Studio as if you were writing code. Use the syntax $Anything$ to declare Intellisense literals. ($end$ and $selected$ are already used by Visual Studio)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Run the macro from the Macro Explorer:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;I suggest you to associate it to a keyboard shortcut, like Alt+S:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;The macro will prompt you for the name of the new snippet:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;That's it! You can now use your new snippet in Visual Studio.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;h1&gt;How to install it?&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;Open the Macro Explorer by pressing Alt+F8 or through the Tools menu:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;In the Macro Explorer, right-click on the Macros node, select "Load Macro Project..." and choose the vsmacros file you downloaded (&lt;a href='http://'&gt;here&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;You should be able to see the "CreateSnippet" macro in the Macro Explorer: &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Finally, you will need to edit the macro to fit your environment settings:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Change the &lt;em&gt;author&lt;/em&gt; and &lt;em&gt;snippetsPath&lt;/em&gt; variables. &lt;em&gt;snippetPaths &lt;/em&gt;should be a path that has been added to the Macros Manager (the &lt;em&gt;My Code Snippets&lt;/em&gt; folder exists by default)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;   &lt;/p&gt;&lt;p&gt;Save the macro and you are good to go!&lt;br /&gt;&lt;/p&gt;&lt;h1&gt;Thanks&lt;br /&gt;&lt;/h1&gt;&lt;p&gt;Big thanks to Patrick Galluci who wrote this &lt;a href='http://www.codeguru.com/cpp/v-s/devstudio_macros/codegeneration/print.php/c10793__3/'&gt;article&lt;/a&gt; about snippets. My macro is a simple improvement of his great macro. &lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-7881468853143042202?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/7881468853143042202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=7881468853143042202' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/7881468853143042202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/7881468853143042202'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/11/visual-studio-macro-to-create-new.html' title='Visual Studio Macro to create a new snippet'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-4891781256144916595</id><published>2007-10-11T15:43:00.000+10:00</published><updated>2007-10-11T16:09:05.712+10:00</updated><title type='text'>Creating a custom SQL aggregate function in C#</title><content type='html'>The fact that sql2005 can host the CLR was a big selling point. I kind of always knew that it was possible to extend and create new SQL functions in C# but never really took the time to do it myself.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What do we want to do?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I’d like to be able to create a function that works like the .NET String.Join static method. Here is a sample query that would demonstrate the use our new aggregate function:&lt;br /&gt;&lt;br /&gt;select PizzaRecipeId, dbo.&lt;strong&gt;strjoin&lt;/strong&gt;(IngredientName) &lt;br /&gt;from PizzaRecipe&lt;br /&gt;group by PizzaRecipeId&lt;br /&gt;&lt;br /&gt;This query would output something like:&lt;br /&gt;&lt;br /&gt;1 Cheese, Chicken, BBQ Sauce&lt;br /&gt;2 Cheese, Ham&lt;br /&gt;3 Cheese, Chicken, Pineapple&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Let’s do it :)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first thing is to write the c# code. &lt;br /&gt;Create a new class library project and add a new class called Concatenate. Our new class must:&lt;br /&gt;- have a serializable attribute&lt;br /&gt;- have the SqlUserDefinedAggregate attribute&lt;br /&gt;- implement IBinarySerialize&lt;br /&gt;- have the following 4 methods (there is no interface for them)&lt;br /&gt;o public void Init()&lt;br /&gt;o public void Accumulate(SqlString value)&lt;br /&gt;o public void Merge(Concatenate other)&lt;br /&gt;o public SqlString Terminate()&lt;br /&gt;&lt;br /&gt;The implementation itself is straightforward, using a string builder to store the data:&lt;br /&gt;&lt;br /&gt;[Serializable]&lt;br /&gt;[SqlUserDefinedAggregate(Format.UserDefined, MaxByteSize=8000)]&lt;br /&gt;public class Concatenate : IBinarySerialize&lt;br /&gt;{&lt;br /&gt;    private StringBuilder sb;&lt;br /&gt;&lt;br /&gt;    public void Init()&lt;br /&gt;    {&lt;br /&gt;        sb = new StringBuilder();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void Accumulate(SqlString value)&lt;br /&gt;    {&lt;br /&gt;        if (sb.Length != 0)&lt;br /&gt;        {&lt;br /&gt;            sb.Append(", ");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        sb.Append(value);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void Merge(Concatenate other)&lt;br /&gt;    {&lt;br /&gt;        sb.Append(other.sb);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public SqlString Terminate()&lt;br /&gt;    {&lt;br /&gt;        return new SqlString(sb.ToString());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #region IBinarySerialize Members&lt;br /&gt;&lt;br /&gt;    public void Read(BinaryReader r)&lt;br /&gt;    {&lt;br /&gt;        sb = new StringBuilder(r.ReadString());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void Write(BinaryWriter w)&lt;br /&gt;    {&lt;br /&gt;        w.Write(sb.ToString());&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;If the project compiles, let’s continue with the commands that will actually load the dll into sql server and reference the aggregate function:&lt;br /&gt;&lt;br /&gt;create assembly clr_integration from 'C:\dev\learning\sql2005\ \clr_integration\bin\debug\clr_integration.dll' with permission_set = safe&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;create aggregate strjoin(@input nvarchar(200)) returns nvarchar(max)&lt;br /&gt;external name clr_integration.Concatenate&lt;br /&gt;&lt;br /&gt;The permission_set is safe because the assembly does not perform any interop or contains any unsafe blocks.&lt;br /&gt;&lt;br /&gt;Let’s create a table and some dummy data:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if (object_id('PizzaRecipe') is not null) drop table PizzaRecipe&lt;br /&gt;create table PizzaRecipe&lt;br /&gt;(&lt;br /&gt;   PizzaRecipeId int NOT NULL,&lt;br /&gt;   IngredientName nvarchar(200)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;insert PizzaRecipe values(1, 'Cheese')&lt;br /&gt;insert PizzaRecipe values(1, 'Chicken')&lt;br /&gt;insert PizzaRecipe values(1, 'BBQ Sauce')&lt;br /&gt;insert PizzaRecipe values(2, 'Cheese')&lt;br /&gt;insert PizzaRecipe values(2, 'Ham')&lt;br /&gt;insert PizzaRecipe values(3, 'Cheese')&lt;br /&gt;insert PizzaRecipe values(3, 'Chicken')&lt;br /&gt;insert PizzaRecipe values(3, 'Pinnaple')&lt;br /&gt;&lt;br /&gt;Everything should now be ready and it’s time to test it :)&lt;br /&gt;&lt;br /&gt;Writing the aggregate function was actually simpler than what I imagined. It’s now just a matter of detecting when this type of feature can be used.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-4891781256144916595?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/4891781256144916595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=4891781256144916595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/4891781256144916595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/4891781256144916595'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/10/creating-custom-sql-aggregate-function.html' title='Creating a custom SQL aggregate function in C#'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-7302010705566105665</id><published>2007-10-11T10:49:00.000+10:00</published><updated>2007-10-11T10:57:57.249+10:00</updated><title type='text'>TFS: removing _svn folders</title><content type='html'>I recently had the need to clean up a project in &lt;strong&gt;TFS&lt;/strong&gt;. When it was imported, little care had been put in making sure that only the required files would be on source control. &lt;br /&gt;&lt;br /&gt;The most noticable folders that were to be removed from TFS were: &lt;strong&gt;'_svn', 'bin' and 'obj'.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As I'm not a big fan of doing things manually (yes, even if doing it manualy is faster - well in that case it was probably faster to write the script) I ended up trying to remember how to do those fancy FOR loops in &lt;strong&gt;DOS&lt;/strong&gt; :)&lt;br /&gt;&lt;br /&gt;First, build a list all the folders (or files) you want to remove:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;dir /s /b _svn bin obj &gt; files_to_delete&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Creating that file is handy and you can edit it before running the following query:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;for /f "delims=" %g in (files_to_delete.txt) do tf.exe delete "%g" /login:DOMAIN\login,password&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;note: make sure that tf.exe is in your path, or replace it with the full path.&lt;br /&gt;&lt;br /&gt;you can now refresh your pending checkin in visual studio and check it in !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-7302010705566105665?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/7302010705566105665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=7302010705566105665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/7302010705566105665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/7302010705566105665'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/10/tfs-removing-svn-folders.html' title='TFS: removing _svn folders'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-3482394915856235355</id><published>2007-04-24T00:09:00.000+10:00</published><updated>2007-04-24T00:25:53.008+10:00</updated><title type='text'>The cost of an exception is about 6ms !</title><content type='html'>I have read quite a few times that exceptions were slow. I came to wonder about how slow they actually were? Is that big enough to care about it ? After all, hardware is pretty fast nowdays, isn't it?&lt;br /&gt;&lt;br /&gt;Well it turns out that throwing and catching an exception takes about 6ms on my machine (Core Duo, 2ghz)&lt;br /&gt;&lt;br /&gt;I you want to know why it takes 6ms, have a look at &lt;a href="http://blogs.msdn.com/cbrumme/archive/2003/10/01/51524.aspx"&gt; this fantastic post&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;Now, a few milliseconds, it does not look like a long time, but think about a web server, handling hundreds of requests at the same time. If each request uses a few Int.Parse that fails(or whatever code that may throw exceptions) , that could end up being quite significant.&lt;br /&gt;&lt;br /&gt;This is a simplified version of the code I used (removed the loop to get an average value):&lt;br /&gt;&lt;br /&gt;private&amp;nbsp;void&amp;nbsp;Execute()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Stopwatch&amp;nbsp;sw&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Stopwatch();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.Start();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ThrowAndCatchException();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sw.Stop();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine("Time&amp;nbsp;taken:&amp;nbsp;{0}ms",&amp;nbsp;sw.ElapsedMilliseconds);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private&amp;nbsp;void&amp;nbsp;ThrowAndCatchException()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;throw&amp;nbsp;new&amp;nbsp;Exception();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch&amp;nbsp;(Exception)&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-3482394915856235355?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/3482394915856235355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=3482394915856235355' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/3482394915856235355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/3482394915856235355'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/04/cost-of-exception-is-about-6ms.html' title='The cost of an exception is about 6ms !'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-117547194900359030</id><published>2007-04-02T09:31:00.000+10:00</published><updated>2007-04-02T17:32:13.810+10:00</updated><title type='text'>Visual Studio has also an hexadecimal editor !</title><content type='html'>Have you ever wondered if visual studio can hex edit files ? Well it's actually possible but not very intuitive...&lt;br /&gt;&lt;br /&gt;Go to &lt;em&gt;File&lt;/em&gt; -&gt; &lt;em&gt;Open&lt;/em&gt; -&gt; &lt;em&gt;file&lt;/em&gt;&lt;br /&gt;Select the file that you want to open,  the &lt;em&gt;Open&lt;/em&gt; button state will change to enable&lt;br /&gt;Click the small drop down list at the right of the Open button and select &lt;em&gt;Open With&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You will get a list of additional editors, choose &lt;em&gt;Binary Editor&lt;/em&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-117547194900359030?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/117547194900359030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=117547194900359030' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/117547194900359030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/117547194900359030'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/04/visual-studio-has-also-hexadecimal.html' title='Visual Studio has also an hexadecimal editor !'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116839173588104437</id><published>2007-01-10T12:08:00.000+11:00</published><updated>2007-01-10T12:15:35.893+11:00</updated><title type='text'>Saving TFS queries to a file</title><content type='html'>This morning I wanted to share TFS queries that I created in the "My Queries" folder with a team mate. I found that the best way of doing that was to save them as files (.wiq), send them by email and he just had to open them and adding them to his "My Queries" folder.&lt;br /&gt;&lt;br /&gt;How to save a query to a file:&lt;br /&gt;&lt;br /&gt;1) Right click on the query, select view query.&lt;br /&gt;2) Go to "File" -&gt; "Save QueryName As"&lt;br /&gt;3) Select File&lt;br /&gt;&lt;br /&gt;This will create a QueryName.wiq file.&lt;br /&gt;&lt;br /&gt;How to add a .wiq file to your "My Queries" folder ?&lt;br /&gt;&lt;br /&gt;1) Double click on the .wiq file&lt;br /&gt;2) Go to "File" -&gt; "Save QueryName As"&lt;br /&gt;3) Select "My Query (only visible to me)"&lt;br /&gt;&lt;br /&gt;Enjoy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116839173588104437?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116839173588104437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116839173588104437' title='54 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116839173588104437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116839173588104437'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2007/01/saving-tfs-queries-to-file.html' title='Saving TFS queries to a file'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>54</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116254350839228857</id><published>2006-11-03T19:38:00.000+11:00</published><updated>2006-11-03T19:45:08.406+11:00</updated><title type='text'>Sydney’s Microsoft Ready Summit 2006</title><content type='html'>I attended the Sydney’s Microsoft Ready Summit today.  It was a nice event in the Darling Harbour convention centre, targeted to developers, IT professionals and IT decision makers. The developer sessions  were about the new Windows Vista user experience and Office 2007. &lt;br /&gt;&lt;br /&gt;I took a few notes about the things I thought were worth remembering. I hope that I will interest some people that did not make it to the event.&lt;br /&gt;&lt;br /&gt;The developer keynote was presented by Andrew Coates who is a Microsoft evangelist and most of the other sessions were presented one of my Readify co worker: &lt;a href="http://notgartner.wordpress.com/"&gt;Mitch Denny.&lt;/a&gt;&lt;br /&gt;We started with the Expression Interactive Designer. This is a lot like the Macromedia Flash editor, but Expression will generate XAML files. This new format (at the heart of WPF) should be the common language talked by both developers and interface designers (i.e. the same XAML file can also be opened in Visual Studio). It will hopefully reduce the number of cases where developers have to integrate a full screen bitmap, tiled into 200 tiny pieces J&lt;br /&gt;&lt;br /&gt;A short look at PeerNet was the occasion to try finding legal uses of the P2P technology. Vista provides a new communication stack, what can we do with it ? A few examples were discussed : a collaborative meeting where an ad hoc network can be created using auto discovery features, a data synchronisation scenario where a Readify ultra mobile worker would keep all his devices up to date in an efficient way.&lt;br /&gt;&lt;br /&gt;The search API was briefly overviewed by talking about the “New York Times reader” that integrates with the Vista search engine.&lt;br /&gt;&lt;br /&gt;A humoristic history of icons (starting with the plain old 255 colours win95 style) introduced the “on the fly” generation of the high resolution Vista icons. It’s possible to write a custom preview handler for your own file format. No doubts that end users will quickly expect to be able to view something relevant about the files they are browsing within the Explorer window.&lt;br /&gt;&lt;br /&gt;We had a look at the gadgets that can be added to the vista sidebar. They can be created in either HTML or in WPF. Gadget files are in fact just zip files. Anyone can rename a gadget and have a look at it.  If you want to create one, it’ll probably be easier to start by modifying another one that does something similar. That’s a good way to learn how they work.&lt;br /&gt;&lt;br /&gt;What would Vista be without the wonderful glass feature? Well first, it seems that whole point of the glass effect, beyond the fact that it’s nice looking, is that you get to focus to the important stuff inside the window. We had a look at how to use glass effect in your own application, using winforms or WPF. In both cases, a reference to an unmanaged API is required. Search for DwmExtendFramIntoClientArea and DwmApi.dll for examples. Warning: don’t misuse that functionality! We do not want to see new application using the glass effect everywhere; it would defeat the whole purpose J&lt;br /&gt;&lt;br /&gt;A lot of effort has been put into redesigning the standard dialog windows. They are a lot simpler, with most options hidden from the user. The idea is that the dialogs now focus on what’s important. For example, the new open file dialog has got very few options displayed by default. The basic action performed by the dialog is to give a name to the file. Selecting a folder is not the primary concern anymore because the application would have probably set the current path to some meaningful folder and that anyway with the new search and filtering features of vista, saving all the documents in one single place should not be an issue anymore.  All the new standard dialogs can as usal be extended (and it is even supposed to be easier than what it used to be). Search for the following keywords if you are interested: IFileDialog, IFileOpenDialog.&lt;br /&gt;&lt;br /&gt;Last but not least, the new xml Office file format. The big change is that xml is now the default format when working with Office 2007 documents. Once again the files are just zip archives. You can rename your .docx to .zip and start to have a look inside by yourself. That’s pretty cool! Pictures are stored in their binary format for efficiency reason (base64 would make it 1.33 times bigger). It’s quite cool to be able to play directly with the list of images inside a PowerPoint document. You can manipulate the xml yourself or you can use a set of new dotnet classes (search for System.IO.Packaging). As far as compatibly is concerned, patches that can open/edit/save the new xml formats are already available for the previous versions (up to office 2000). There was a good question: what about password protected documents? The answer is that it is handled automatically by the zip format which supports encryption on a file by file basis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116254350839228857?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116254350839228857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116254350839228857' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116254350839228857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116254350839228857'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/11/sydneys-microsoft-ready-summit-2006.html' title='Sydney’s Microsoft Ready Summit 2006'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116237434840555308</id><published>2006-11-01T20:43:00.000+11:00</published><updated>2006-11-01T20:45:48.406+11:00</updated><title type='text'>Where is that azman dll ? :)</title><content type='html'>When using azman, it's better to reference the following dll, rathing than browsing in the list of registred COM components. You'll get a much more friendly namespace.&lt;br /&gt;&lt;br /&gt;Azman reference path:&lt;br /&gt;&lt;br /&gt;C:\WINDOWS\Microsoft.NET\AuthMan\1.2\microsoft.interop.security.azroles.dll&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116237434840555308?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116237434840555308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116237434840555308' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237434840555308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237434840555308'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/11/where-is-that-azman-dll.html' title='Where is that azman dll ? :)'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116237400823144602</id><published>2006-11-01T20:37:00.000+11:00</published><updated>2006-11-01T20:40:08.233+11:00</updated><title type='text'>Should I use Page_Init or OnInit ?</title><content type='html'>I came across an interesting issue last friday. &lt;br /&gt;&lt;br /&gt;There was an empty &lt;strong&gt;Page_Init&lt;/strong&gt; method in some web control. I removed it, thinking that it would not do any harm.&lt;br /&gt;&lt;br /&gt;Well, in fact, it was actually hidding the base class &lt;strong&gt;Page_Init&lt;/strong&gt; method which used not to be executed. Of course, after my change, the base method was called and that caused a crash in the application :)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What I have learned from that:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When creating a base class that requires initialization, it's better to use the &lt;strong&gt;OnInit&lt;/strong&gt; method, rather that the &lt;strong&gt;Page_Init&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;When using &lt;strong&gt;OnInit&lt;/strong&gt;, the derived class will have to explicitly use the &lt;strong&gt;override&lt;/strong&gt; keyword, which may help other developers avoiding this kind of issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116237400823144602?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116237400823144602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116237400823144602' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237400823144602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237400823144602'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/11/should-i-use-pageinit-or-oninit.html' title='Should I use Page_Init or OnInit ?'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116237385426852745</id><published>2006-11-01T20:35:00.000+11:00</published><updated>2006-11-01T20:37:34.286+11:00</updated><title type='text'>How can I get...</title><content type='html'>... the sid for the current user:&lt;br /&gt;&lt;br /&gt;  use &lt;strong&gt;WindowsIdentity.GetCurrent().Owner.Value&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;... the token for the current user:&lt;br /&gt;&lt;br /&gt;  use &lt;strong&gt;WindowsIdentity.GetCurrent().Token&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116237385426852745?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116237385426852745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116237385426852745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237385426852745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116237385426852745'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/11/how-can-i-get.html' title='How can I get...'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-116038977054216622</id><published>2006-10-09T20:25:00.000+10:00</published><updated>2006-10-09T20:34:17.770+10:00</updated><title type='text'>AzMan utility project</title><content type='html'>I have recently worked with the Authorization Manager. The easiest way to interact with AzMan is to use azman.msc, the mmc snapin.&lt;br /&gt;&lt;br /&gt;The provided UI is a good starting point but it's missing a lot of features that would be really useful when working on reasonably sized project. &lt;br /&gt;&lt;br /&gt;Excel can help by providing a read only view of some of the AzMan store data, but nothing really great.&lt;br /&gt;&lt;br /&gt;Fortunately, there is an API that is available. I actually spent most of my time writing my own little tools to do most of the work.&lt;br /&gt;&lt;br /&gt;I have just started to compile a list of the features that I would have liked. I will start to write an application that will hopefully help azman users :)&lt;br /&gt;&lt;br /&gt; ○ Ability to copy store from one place to another &lt;br /&gt; ○ Auto assign operation ID&lt;br /&gt; ○ Warn when operation ID are identical&lt;br /&gt; ○ Provide easy reverse lookup like all users that can access this operation, etc…&lt;br /&gt; ○ Identify unreferenced items (e.g. this operation is not used)&lt;br /&gt; ○ Copy from one store to another (i.e. xml -&gt; AD). Use filters (only operations, roles, ...)&lt;br /&gt; ○ Search in store. Add filters (only operations, tasks, roles, ...)&lt;br /&gt; ○ Diff between 2 stores&lt;br /&gt; ○ Merge 2 stores&lt;br /&gt; ○ Support for custom principals&lt;br /&gt; ○ Dump text / html version of the store&lt;br /&gt; ○ Display graphical view of the store, or launch azman.msc&lt;br /&gt; ○ Generate enums/code for operation/task/roles (c# &amp; vb)&lt;br /&gt; ○ Generate script that creates the store&lt;br /&gt; ○ Generate Excel matrix (tasks vs. operations, roles vs. tasks, users vs. roles)&lt;br /&gt;&lt;br /&gt;Well, I guess that I will have to start by prioritizing theses features :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-116038977054216622?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/116038977054216622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=116038977054216622' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116038977054216622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/116038977054216622'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/10/azman-utility-project.html' title='AzMan utility project'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-114923626133231030</id><published>2006-06-02T18:16:00.000+10:00</published><updated>2006-06-02T18:18:15.316+10:00</updated><title type='text'>What’s new in “VSTO v3”</title><content type='html'>A CTP version of VSTO v3 has been released on the 21th of May. This blag entry is an overview of the new features of this third version.&lt;br /&gt;&lt;br /&gt;Be aware that V2 applications may not work if you install the v3 CTP (Office 2007 beta 2 is required)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Add-in projects for up to 10 Office applications&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Access, Excel, InfoPath, Outlook, PowerPoint, Project, Publisher, Visio, Word and SharePoint Designer&lt;br /&gt;- Design time support in visual studio!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Application level customizable task pane&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- In v2, solutions were bound to specific documents and workbooks (except for outlook).&lt;br /&gt;- New custom panes can be made available across the entire application. They are based on the new ICustomTaskPaneConsumer interface.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New XML-based format support&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Open and accessible XML structure.&lt;br /&gt;- VSTO solution manifest is stored in custom XML parts, within the document.&lt;br /&gt;- New “macro free” word and excel documents: .docx and .xlsx. If you rename such a document with a .zip extension, you will be able to view its internal structure. VSTO related components are found in the vstoDataStore folder.&lt;br /&gt;- Old binary formats are still supported.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;New UI extensibility (“ribbon”)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- The ribbon is the new office 2007 command user interface.&lt;br /&gt;- Extensibility is supported at both document and application level (implement the IRibbonExtensibility interface).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Office 12 knows about VSTO Add-ins&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- Add-ins blacklisting is more finely-grained. They can be disabled one a per-add-in basis.&lt;br /&gt;- Faster loading time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Further improvements (yet to come)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;- A better deployment model, converging toward ClickOnce&lt;br /&gt;- A better security model, able to handle versioning.&lt;br /&gt;- Improved document-level ribbon customization&lt;br /&gt;- New office 2007 IU visual designers&lt;br /&gt;&lt;br /&gt;All of this looks very promising :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-114923626133231030?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/114923626133231030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=114923626133231030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114923626133231030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114923626133231030'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/06/whats-new-in-vsto-v3.html' title='What’s new in “VSTO v3”'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-114189750860709638</id><published>2006-03-09T20:43:00.000+11:00</published><updated>2006-03-09T20:45:08.623+11:00</updated><title type='text'>The end of c# vs Vb.Net war ?</title><content type='html'>The .NET world is kind of divided into 2 groups: vb.net or c# users. There is always someone to argue that their favorite language is better.&lt;br /&gt;&lt;br /&gt;It sounds like the old and famous curly bracket question. One would prefer having it at the end of the line (like in Java), others would like having it on a new line.&lt;br /&gt;&lt;br /&gt;The truth is that this is all about you getting used to a particular way of reading code. Both are right ! you prefer reading vb code ? so be it ! &lt;br /&gt;&lt;br /&gt;My point here is that &lt;strong&gt;Visual Studio should display the code the way you want to read it&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;For exemple, I write some c# code, I check it into source safe. My teammate (a vb guru) gets the latest version of the file, and then visualize it as vb.net code. How does that sound ? :)&lt;br /&gt;&lt;br /&gt;Technically, both languages compile to the same IL (Intermediate Language) and software like &lt;br /&gt;&lt;br /&gt;Reflector can decompile the assembly and display the code. Visual Studio should be able to format the code the way you like it best.&lt;br /&gt;&lt;br /&gt;By the way, why do we still use plain text to store source code when we could have some kind of standardized xml ? I can already imagine nice 3rd party tools playing with all this data :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-114189750860709638?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/114189750860709638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=114189750860709638' title='51 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114189750860709638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114189750860709638'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/03/end-of-c-vs-vbnet-war.html' title='The end of c# vs Vb.Net war ?'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>51</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-114008256121945141</id><published>2006-02-16T20:16:00.000+11:00</published><updated>2006-02-16T20:36:01.273+11:00</updated><title type='text'>Excel pictures :)</title><content type='html'>A lot of companies actually rely on spreadsheets for some of their business logic.&lt;br /&gt;&lt;br /&gt;But that is not the only thing we can do with excel... have a look at theses geeky things:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://perso.3ie.org/~francois/media/cat_3d.GIF"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://perso.3ie.org/~francois/media/cat_flat.JPG"&gt;&lt;br /&gt;&lt;br /&gt;I made a tiny c# to generate a text file that can be imported in excel :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;            StreamWriter sw = new StreamWriter("output.txt");&lt;br /&gt;            Bitmap src = (Bitmap) Image.FromFile("source.gif"); &lt;br /&gt;            &lt;br /&gt;            for (int x = 0; x &lt; src.Width; x++)&lt;br /&gt;            {&lt;br /&gt;                for (int y = src.Height - 1; y &gt;= 0; y--)&lt;br /&gt;                {&lt;br /&gt;                    Color c = src.GetPixel(x, y);&lt;br /&gt;                    sw.Write("{0};", (c.R + c.B + c.G) / 3);&lt;br /&gt;                }&lt;br /&gt;                sw.WriteLine();&lt;br /&gt;            }&lt;br /&gt;            sw.Close(); &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Your can then open the text file with Excel, set the import separator to ';'&lt;br /&gt;&lt;br /&gt;You've got the data, all you now need is to use the excel graphic wizard to enjoy nice geek pictures :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-114008256121945141?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/114008256121945141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=114008256121945141' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114008256121945141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/114008256121945141'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/02/excel-pictures.html' title='Excel pictures :)'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-113757105294434969</id><published>2006-01-18T18:52:00.000+11:00</published><updated>2006-01-18T18:57:32.953+11:00</updated><title type='text'>CmdHere.exe</title><content type='html'>CmdHere.exe is one of the nice tools known as the &lt;a href="http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx"&gt;"power tools"&lt;/a&gt; from microsoft.&lt;br /&gt;&lt;br /&gt;It adds a context menu entry when selecting a folder in the explorer, allowing you to quickly open a cmd.exe shell right in that folder. I love it !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-113757105294434969?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/113757105294434969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=113757105294434969' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113757105294434969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113757105294434969'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2006/01/cmdhereexe.html' title='CmdHere.exe'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-113498143486903874</id><published>2005-12-19T19:29:00.000+11:00</published><updated>2005-12-19T19:37:14.880+11:00</updated><title type='text'>Binary numbers...</title><content type='html'>I just came accross some c# code wich was used to convert a number into it's binary representation. It did work but there is already something much simpler in the framework that does exactly the same thing:&lt;br /&gt;&lt;br /&gt;Console.WriteLine("&gt;&gt; " + Convert.ToString(12345, 2));&lt;br /&gt;&lt;br /&gt;&gt;&gt; 11000000111001&lt;br /&gt;&lt;br /&gt;Instead of base 2, you may as well put 8, 10 or 16, which might be handy :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-113498143486903874?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/113498143486903874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=113498143486903874' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113498143486903874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113498143486903874'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2005/12/binary-numbers.html' title='Binary numbers...'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-113496803502099279</id><published>2005-12-19T15:45:00.000+11:00</published><updated>2005-12-19T16:48:38.190+11:00</updated><title type='text'>Import msn messager contacts at once</title><content type='html'>I joined my new company and I have a list of 20 people that want to add to my msn contact list. There is an import command in the "Contact" menu, asking for a .ctt file. Hum, well... Lets try to export my current contact list to have a look at the format :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;messenger&amp;gt;&lt;br /&gt;  &amp;lt;service name=".NET Messenger Service"&amp;gt;&lt;br /&gt;    &amp;lt;contactlist&amp;gt;&lt;br /&gt;      &amp;lt;contact&amp;gt;first_contact@some_domain.com&amp;lt;/contact&amp;gt;&lt;br /&gt;      &amp;lt;contact&amp;gt;second_contact@some_domain.com&amp;lt;/contact&amp;gt;&lt;br /&gt;      &amp;lt;contact&amp;gt;third_contact@some_domain.com&amp;lt;/contact&amp;gt;&lt;br /&gt;&lt;br /&gt;      ...&lt;br /&gt;&lt;br /&gt;      &amp;lt;contact&amp;gt;last_contact@some_domain.com&amp;lt;/contact&amp;gt;&lt;br /&gt;    &amp;lt;/contactlist&amp;gt;&lt;br /&gt;  &amp;lt;/service&amp;gt; &lt;br /&gt;&amp;lt;/messenger&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This is great, this is xml format ! I just need to write a file with all the new contacts I want to add and import it. &lt;br /&gt;&lt;br /&gt;To create the file, i used Excel. I wrote "&amp;lt;contact&amp;gt;" in A1, "&amp;lt;/contact&amp;gt;" in C1 and i pasted my list of new contacts in B1. I copied the A1 and C1 cells downwards, up to my last contact. I selected everything and pasted it in a notepad. Less than a minute :)&lt;br /&gt;&lt;br /&gt;And it works ^^&lt;br /&gt;&lt;br /&gt;Wow ! there is now 20 people saying hello at once ! ^^&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-113496803502099279?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/113496803502099279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=113496803502099279' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113496803502099279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113496803502099279'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2005/12/import-msn-messager-contacts-at-once.html' title='Import msn messager contacts at once'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-113496752921861473</id><published>2005-12-19T15:43:00.000+11:00</published><updated>2005-12-19T15:45:29.226+11:00</updated><title type='text'>Hello Australia / Bonjour l'Australie</title><content type='html'>J'habite maintenant en Australie et je vais donc continuer mon blog en anglais :)&lt;br /&gt;&lt;br /&gt;I now live in Australia and i will continue my blog using english :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-113496752921861473?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/113496752921861473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=113496752921861473' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113496752921861473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/113496752921861473'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2005/12/hello-australia-bonjour-laustralie.html' title='Hello Australia / Bonjour l&apos;Australie'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-110079972236316692</id><published>2004-11-19T04:28:00.000+11:00</published><updated>2005-12-15T18:53:56.403+11:00</updated><title type='text'>creer un batch ftp</title><content type='html'>J'ai récemment eu besoin de copier régulièrement des fichiers &lt;br /&gt;vers une autre machine. Au bout de la seconde fois, je me suis mis &lt;br /&gt;à chercher une solution automatique. &lt;br /&gt;&lt;br /&gt;J'ai découvert que la commande ftp disponible en ligne de &lt;br /&gt;commande permettait de lire un fichier et d'en exécuter les &lt;br /&gt;commandes une a une. &lt;br /&gt;&lt;br /&gt;Voyons le contenu de notre fichier de script :&lt;br /&gt;&lt;br /&gt;C:\tmp&gt;type upload.script&lt;br /&gt;open 192.168.2.209&lt;br /&gt;francois&lt;br /&gt;password&lt;br /&gt;put test.c&lt;br /&gt;quit&lt;br /&gt;&lt;br /&gt;Sans surprise, ce sont les commandes que nous aurions tape nous meme en mode interactif.&lt;br /&gt;&lt;br /&gt;Pour lancer le script:&lt;br /&gt;&lt;br /&gt;C:\tmp&gt;ftp -s:upload.script&lt;br /&gt;ftp&gt; open 192.168.2.209&lt;br /&gt;Connected to 192.168.2.209.&lt;br /&gt;220 pegase FTP server ready.&lt;br /&gt;User (192.168.2.209:(none)):&lt;br /&gt;331 Password required for francois.&lt;br /&gt;&lt;br /&gt;230 User francois logged in.&lt;br /&gt;ftp&gt;&lt;br /&gt;ftp&gt; put test.c&lt;br /&gt;200 PORT command successful.&lt;br /&gt;150 Opening ASCII mode data connection for 'test.c'.&lt;br /&gt;226 Transfer complete.&lt;br /&gt;ftp: 3051 bytes sent in 5,31Seconds 0,57Kbytes/sec.&lt;br /&gt;ftp&gt; quit&lt;br /&gt;221 Goodbye.&lt;br /&gt;&lt;br /&gt;Et voila, c'est facile et rapide :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-110079972236316692?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/110079972236316692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=110079972236316692' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/110079972236316692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/110079972236316692'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/11/creer-un-batch-ftp.html' title='creer un batch ftp'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109215233480759503</id><published>2004-08-11T01:08:00.000+10:00</published><updated>2004-08-11T02:02:06.246+10:00</updated><title type='text'>vive l'ascii art ^-^ !</title><content type='html'>C'est en tombant par hazard sur un site qui propose de graphique en ascii art (a base de caracteres) qui je me suis essaye a coder un generateur d'images ascii.&lt;br /&gt;&lt;br /&gt;Sans pretentions, ce bout de code donne au final des resultats assez amusants !&lt;br /&gt;&lt;br /&gt;Faites le test :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private void Picture2ASCII(string filename)&lt;br /&gt;{&lt;br /&gt;	string ascii1 = "@BR*#$PX0woIcv:+!~\".,";&lt;br /&gt;	string ascii2 = "@BQ8HO#$*kfwoxr:+=-,.";&lt;br /&gt;	string ascii3 = "$B8HOkf@#xvcri*+:=-,.";&lt;br /&gt;&lt;br /&gt;	string ascii = ascii2;&lt;br /&gt;	Bitmap b = (Bitmap) Bitmap.FromFile(filename);&lt;br /&gt;	Color c;&lt;br /&gt;	int index = 0, len = ascii.Length;&lt;br /&gt;	StreamWriter w = new StreamWriter(filename + ".txt");&lt;br /&gt;	for (int y = 0; y &lt; b.Height; y++)&lt;br /&gt;	{&lt;br /&gt;		for (int x = 0; x &lt; b.Width; x++)&lt;br /&gt;		{&lt;br /&gt;			c = b.GetPixel(x, y);&lt;br /&gt;			index = (((c.R + c.G + c.B) * len) / (256 * 3));&lt;br /&gt;			w.Write(ascii[index]);&lt;br /&gt;		}&lt;br /&gt;		w.WriteLine();&lt;br /&gt;	}&lt;br /&gt;	w.Close();&lt;br /&gt;	b.Dispose();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;a titre d'exemple voici le resultat &lt;a href="http://perso.3ie.org/~francois/francois_ascii.html"&gt;sur une petite image&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;testez sur vos photos ! Pour bien visualiser le resultat, ouvrez les fichiers textes avec notepad et reduisez la font a 2 ou 3 pixels ;)&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109215233480759503?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109215233480759503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109215233480759503' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109215233480759503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109215233480759503'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/08/vive-lascii-art.html' title='vive l&apos;ascii art ^-^ !'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109179829778331854</id><published>2004-08-06T22:35:00.000+10:00</published><updated>2004-08-06T23:42:51.726+10:00</updated><title type='text'>Toujours E-Data et leur brevet Freeny ridicule !</title><content type='html'>Je viens de lire un article qui parle de la soumission d'Apple face a la societe [vampire] E-Data.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zdnet.fr/actualites/internet/0,39020774,39164331,00.htm"&gt;http://www.zdnet.fr/actualites/internet/0,39020774,39164331,00.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dans l'article, le fameux brevet est decrit comme encadrant "aujourd'hui tout procédé de téléchargement, depuis un ordinateur, de contenu numérique – qu'il s'agisse de musique, de photos ou même d'articles de journaux – et son transfert vers un autre support ou terminal (des "disques audio" ou même "vidéo", selon la description originale)."&lt;br /&gt;&lt;br /&gt;Cette description est tellement vaste que je ne comprend meme pas comme de telles choses peuvent arriver.&lt;br /&gt;&lt;br /&gt;Un coup d'oeil sur le brevet lui meme ne m'a pas beaucoup appris tant le formaliste utilise est cryptique pour le profane (c'est moi !)&lt;br /&gt;&lt;br /&gt;Si je suis bien concient de l'interet pour une entitee de recherche privee de proteger une technique specifique aquise au prix de nombreux efforts, cela ne justifie en rien des absurdites lelles que la protection du telechargement payant.&lt;br /&gt;&lt;br /&gt;Pourquoi ne pas breveter la multiplication ?&lt;br /&gt;&lt;br /&gt;Je suis aussi tombe sur une page qui ressence des brevets ridicules:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://swpat.ffii.org/brevets/echantillons/index.fr.html"&gt;http://swpat.ffii.org/brevets/echantillons/index.fr.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Combien d'autre entreprises, a l'instar de E-data, vont etre attire par le "succes" du terroriste juridique ?&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109179829778331854?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109179829778331854/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109179829778331854' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109179829778331854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109179829778331854'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/08/toujours-e-data-et-leur-brevet-freeny.html' title='Toujours E-Data et leur brevet Freeny ridicule !'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109111613075805698</id><published>2004-07-30T01:45:00.000+10:00</published><updated>2004-07-30T01:48:50.756+10:00</updated><title type='text'>Video du jeu du saut</title><content type='html'>On m'a demande de mettre en ligne une video du jeu du saut avec un gros score, la voici : &lt;br /&gt;&lt;br /&gt;&lt;a href="http://perso.3ie.org/~francois/media/saut.wmv"&gt;Ici la video !&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Quel est le meilleur score possible ?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109111613075805698?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109111613075805698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109111613075805698' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109111613075805698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109111613075805698'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/video-du-jeu-du-saut.html' title='Video du jeu du saut'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109094566586869503</id><published>2004-07-28T02:21:00.000+10:00</published><updated>2004-07-28T02:35:27.303+10:00</updated><title type='text'>Comment tout blaster dans les jeux flash (chapitre 2)</title><content type='html'>C'est vrai que dans le code de la news sur flash, le handle etait en dur :( &lt;br /&gt;&lt;br /&gt;voici le bout de code pour y remedier (a condition d'utiliser IE) : &lt;pre&gt;&lt;br /&gt;private IntPtr GetGameWindow()&lt;br /&gt;{&lt;br /&gt;	IntPtr parent = FindWindowEx(IntPtr.Zero, IntPtr.Zero, &lt;br /&gt;"IEFrame", "Jeu Flash - Le Jeu de le Saut - Microsoft Internet Explorer");&lt;br /&gt;	if (parent == IntPtr.Zero)&lt;br /&gt;	{&lt;br /&gt;		return IntPtr.Zero;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	foreach (string className in new String[] {&lt;br /&gt;"Shell DocObject View", &lt;br /&gt;"Internet Explorer_Server", &lt;br /&gt;"MacromediaFlashPlayerActiveX"})&lt;br /&gt;	{&lt;br /&gt;		IntPtr child = FindWindowEx(parent, IntPtr.Zero, &lt;br /&gt;className, "");&lt;br /&gt;		if (child == IntPtr.Zero)&lt;br /&gt;		{&lt;br /&gt;			return IntPtr.Zero;&lt;br /&gt;		}&lt;br /&gt;		parent = child;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	return parent;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;C'est facilement modifiable pour d'autres browser ;) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109094566586869503?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109094566586869503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109094566586869503' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109094566586869503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109094566586869503'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/comment-tout-blaster-dans-les-jeux_27.html' title='Comment tout blaster dans les jeux flash (chapitre 2)'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109059753352168180</id><published>2004-07-24T01:21:00.000+10:00</published><updated>2004-07-30T01:27:16.966+10:00</updated><title type='text'>Ultraportable x31 !!!</title><content type='html'>Aujourd'hui, c'est jour de fete parce que je me suis fais plaisir :) &lt;br /&gt;&lt;br /&gt;voici mon nouveau portable, &lt;span style="color:#000000;"&gt;un &lt;span id="google-navclient-hilite"&gt;x31&lt;/span&gt; de chez &lt;span id="google-navclient-hilite"&gt;IBM&lt;/span&gt; : &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="300" src="http://perso.3ie.org/~francois/media/x31.jpg" width="400" /&gt; &lt;br /&gt;&lt;br /&gt;au niveau taille c'est&amp;nbsp;260x230x30, ce qui est assez impressionnant : &lt;br /&gt;&lt;br /&gt;&lt;img height="400" src="http://perso.3ie.org/~francois/media/hand.jpg" width="300" /&gt; &lt;br /&gt;&lt;br /&gt;L'install de visual studio 2003 est en cours : partage du cdrom&amp;nbsp;sur mon poste fixe et acces via le reseau, facile&amp;nbsp;;) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109059753352168180?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109059753352168180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109059753352168180' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109059753352168180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109059753352168180'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/ultraportable-x31.html' title='Ultraportable x31 !!!'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109050990686051834</id><published>2004-07-23T01:10:00.000+10:00</published><updated>2004-07-23T01:59:07.376+10:00</updated><title type='text'>Comment tout blaster dans les jeux flash :)</title><content type='html'>Voici le jeu du saut qui fait le tour du net : &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.koreus.com/files/200407/jeudelesaut.html"&gt;http://www.koreus.com/files/200407/jeudelesaut.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;j'ai eu du mal a faire plus de 60 points et je me suis dit qu'il faisait tellement chaud aujourd'hui que s'exciter sur son clavier [dvorak ;) ] n'etait pas la bonne idee pour battre le record officiel de l'entreprise qui etait de 82 points ! &lt;br /&gt;&lt;br /&gt;C'est tellement plus rapide quand il y a un ordi qui fait le travail pour soi... &lt;br /&gt;&lt;br /&gt;en C#: &lt;br /&gt;&lt;br /&gt;using System.Runtime.InteropServices; &lt;br /&gt;&lt;br /&gt;[DllImport("user32.dll")] &lt;br /&gt;static extern bool SendMessage(IntPtr hWnd, int msg, int wParam, int lParam); &lt;br /&gt;&lt;br /&gt;private const int WM_KEYDOWN = 0x0100; &lt;br /&gt;private const int VK_LEFT = 0x25; &lt;br /&gt;private const int VK_UP = 0x26; &lt;br /&gt;private const int VK_RIGHT = 0x27; &lt;br /&gt;private const int VK_DOWN = 0x28; &lt;br /&gt;&lt;br /&gt;/* &lt;br /&gt;Changer le handle de fenetre 0x00020994 &lt;br /&gt;Utiliser spyxx.exe pour trouver le votre &lt;br /&gt;*/ &lt;br /&gt;IntPtr win = new IntPtr(0x00020994); &lt;br /&gt;for (int i = 0; i &lt; 100; i++) &lt;br /&gt;{ &lt;br /&gt;SendMessage(win, WM_KEYDOWN, VK_RIGHT, 0); &lt;br /&gt;SendMessage(win, WM_KEYDOWN, VK_LEFT, 0); &lt;br /&gt;} &lt;br /&gt;for (int i = 0; i &lt; 20; i++) &lt;br /&gt;{ &lt;br /&gt;SendMessage(win, WM_KEYDOWN, VK_UP, 0); &lt;br /&gt;SendMessage(win, WM_KEYDOWN, VK_DOWN, 0); &lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;voila comment obtenir un score de 1619 a moindre mal :) &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109050990686051834?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109050990686051834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109050990686051834' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109050990686051834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109050990686051834'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/comment-tout-blaster-dans-les-jeux.html' title='Comment tout blaster dans les jeux flash :)'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109050293641814857</id><published>2004-07-22T23:28:00.000+10:00</published><updated>2004-07-30T01:28:28.670+10:00</updated><title type='text'>la plage au travail...</title><content type='html'>Il est maintenant possible de revivre les epiques constructions de chateaux de sable au bureau pendant la pause dejeuner :) La preuve en images : &lt;br /&gt;&lt;br /&gt;Le gros oeuvre : &lt;br /&gt;&lt;br /&gt;&lt;img src="http://perso.3ie.org/~francois/media/gros%20oeuvre.jpg"  width="400" height="300" /&gt;&lt;br /&gt;&lt;br /&gt;Les accessoires : &lt;br /&gt;&lt;br /&gt;&lt;img src="http://perso.3ie.org/~francois/media/accessoires.jpg"  width="400" height="300" /&gt;&lt;br /&gt;&lt;br /&gt;Le chateau dans toute sa spendeur : &lt;br /&gt;&lt;br /&gt;&lt;img src="http://perso.3ie.org/~francois/media/final.jpg"  width="400" height="300" /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Le "sable"&amp;nbsp;est traite pour avoir les proprietes du sable mouille en permanence ! &lt;br /&gt;&lt;br /&gt;Les images ont ete prises avec mon smartphone, d'ou l'effet un peu flou ;) &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109050293641814857?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://francoisbeaussier.blogspot.com/feeds/109050293641814857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6951827&amp;postID=109050293641814857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109050293641814857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109050293641814857'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/la-plage-au-travail.html' title='la plage au travail...'/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6951827.post-109034212528437843</id><published>2004-07-21T02:38:00.000+10:00</published><updated>2004-07-23T01:57:46.310+10:00</updated><title type='text'></title><content type='html'>Hello, &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Bienvenue sur mon blog qui parlera probablement d'informatique :) Voyons comment cela va evoluer (probablement du .NET et des&amp;nbsp;sciences cognitives) &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Mon blog vient de naitre et il remercie particulierement les nombreuses personnes qui m'ont demande si j'en avais un,&amp;nbsp;ce qui m'a incite a le creer ;) &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Ha oui, j'oubliais, je n'ecris jamais les accents en francais car je tape avec un clavier dvorak qui n'en comporte pas. J'ai la flemme de faire une combinaison compliquee de touches a chaque caractere accentue ! &lt;br /&gt;&amp;nbsp; &lt;br /&gt;a+ &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6951827-109034212528437843?l=francoisbeaussier.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109034212528437843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6951827/posts/default/109034212528437843'/><link rel='alternate' type='text/html' href='http://francoisbeaussier.blogspot.com/2004/07/hello.html' title=''/><author><name>Francois Beaussier</name><uri>http://www.blogger.com/profile/12167161133626856646</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
