<?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-8096655137906025271</id><updated>2011-11-27T16:43:49.857-08:00</updated><category term='mxdev.biz'/><category term='References'/><category term='Geo'/><category term='Innovations'/><category term='MySQL'/><category term='tools'/><category term='SEO'/><category term='database optimization'/><category term='resources'/><category term='SQL Server'/><category term='SharePoint'/><category term='IT management'/><category term='SQL Server optimization'/><category term='Online services'/><category term='code snippets'/><category term='corporate systems'/><category term='SQL Server - Blocking'/><category term='Google'/><category term='management'/><category term='.NET'/><category term='ASP.NET'/><category term='software development'/><title type='text'>Developer Blog - Personal Blog of Max Ivak - Mxdev</title><subtitle type='html'>Software development, Databases, Web solutions, Database optimization, IT Management</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-3588929777428792256</id><published>2009-10-08T03:13:00.000-07:00</published><updated>2009-10-08T03:19:45.723-07:00</updated><title type='text'>HOW TO get value from app.config file</title><content type='html'>file: app.config&lt;br /&gt;&lt;br /&gt;&lt;pre class="codemain lang-xml"&gt;&lt;span class="pun"&gt;&lt;span class="pln"&gt;xml version&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"1.0"&lt;/span&gt;&lt;span class="pln"&gt; encoding&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="str"&gt;"utf-8"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;?&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;&lt;/span&gt;&lt;span class="tag"&gt;configuration&lt;/span&gt;&lt;span class="pun"&gt;&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;&lt;/span&gt;&lt;span class="tag"&gt;appSettings&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;&lt;/span&gt;&lt;span class="tag"&gt;add&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn"&gt;key&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="atv"&gt;"myname"&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="atn"&gt;value&lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="atv"&gt;"myvalue"&lt;/span&gt;&lt;span class="pun"&gt;/&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;/span&gt;&lt;span class="tag"&gt;appSettings&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;!--&lt;/span--&gt;&lt;span class="tag"&gt;configuration&lt;/span&gt;&lt;span class="pun"&gt;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;in *.cs&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwd"&gt;using&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;System&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;Configuration&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwd"&gt;string&lt;/span&gt;&lt;span class="pln"&gt; name &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="typ"&gt;Convert&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;ToString&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="typ"&gt;ConfigurationSettings&lt;/span&gt;&lt;span class="pun"&gt;.&lt;/span&gt;&lt;span class="typ"&gt;AppSettings&lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="str"&gt;"myname"&lt;/span&gt;&lt;span class="pun"&gt;]);&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;      &lt;/span&gt;&lt;span class="kwd"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-3588929777428792256?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/3588929777428792256/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=3588929777428792256' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3588929777428792256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3588929777428792256'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2009/10/how-to-get-value-from-appconfig-file.html' title='HOW TO get value from app.config file'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-8190099820171600274</id><published>2009-01-03T03:34:00.000-08:00</published><updated>2009-01-03T03:45:04.461-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Embedding Forms in an ASP.NET Web Page - ASP.NET</title><content type='html'>A solution to embed any number of forms going to any URL on the web within any ASP.NET page.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A solution that effectively replaces the __doPostBack function, but the converter tool takes an even simpler approach. It hijacks the form post with script coded directly into an anchor tag:&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="javascript:theForm.__VIEWSTATE.value='';&lt;br /&gt;theForm.encoding='application/x-www-form-urlencoded';&lt;br /&gt;theForm.action='http://www.myanothersite.com/form2.aspx';&lt;br /&gt;theForm.submit();" name="submit"&lt;br /&gt;&amp;gt;My form submit&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.nerdymusings.com/LPMArticle.asp?ID=27"&gt;http://www.nerdymusings.com/LPMArticle.asp?ID=27&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-8190099820171600274?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/8190099820171600274/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=8190099820171600274' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8190099820171600274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8190099820171600274'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2009/01/embedding-forms-in-aspnet-web-page.html' title='Embedding Forms in an ASP.NET Web Page - ASP.NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-103753678357349424</id><published>2008-12-07T06:08:00.000-08:00</published><updated>2009-02-21T06:00:55.359-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><title type='text'>Get Image from HTTP URL - .NET, ASP.NET</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Overview:&lt;/span&gt;&lt;br /&gt;Create image  object and save it into file by URL.&lt;br /&gt;&lt;br /&gt;Depending on your needs it can be two solutions:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution 1 - when you need to make some manipulations with the image object (resize, crop, etc) before saving to disk:&lt;/span&gt;&lt;br /&gt;1. get &lt;span style="font-style: italic;"&gt;Stream &lt;/span&gt;from URL using &lt;span style="font-style: italic;"&gt;WebRequest &lt;/span&gt;class&lt;br /&gt;2. Create Image object from stream using &lt;span style="font-style: italic;"&gt;System.Drawing.Image.FromStream&lt;/span&gt; method&lt;br /&gt;3. Make manipulations with image object&lt;br /&gt;3. Save image to file on disk using  &lt;span style="font-style: italic;"&gt;System.Drawing.Image.Save &lt;/span&gt;method&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution 2 - when you need to get image from Url and just save it to disk as-is.&lt;/span&gt;&lt;br /&gt;1. get &lt;span style="font-style: italic;"&gt;Stream &lt;/span&gt;from URL using &lt;span style="font-style: italic;"&gt;WebRequest &lt;/span&gt;class&lt;br /&gt;2. Create new file and stream for it&lt;br /&gt;3. Get data from Webrequest's stream in binary format and put this data into file stream.&lt;br /&gt;&lt;br /&gt;Below is the full code for each of the solutions&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code for solution 1:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;using System.Net;&lt;br /&gt;using System.IO;&lt;br /&gt;&lt;br /&gt;public bool getImageByUrl(string url, string filename)&lt;br /&gt;  {&lt;br /&gt;    &lt;br /&gt;      WebResponse response = null;&lt;br /&gt;      Stream remoteStream = null;&lt;br /&gt;      StreamReader readStream = null;&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;          WebRequest request = WebRequest.Create(url);&lt;br /&gt;          if (request != null)&lt;br /&gt;          {&lt;br /&gt;              response = request.GetResponse();&lt;br /&gt;              if (response != null)&lt;br /&gt;              {&lt;br /&gt;                  remoteStream = response.GetResponseStream();&lt;br /&gt;&lt;br /&gt;readStream = new StreamReader(remoteStream);&lt;br /&gt;&lt;br /&gt;                  System.Drawing.Image img = System.Drawing.Image.FromStream(remoteStream);&lt;br /&gt;&lt;br /&gt;                  if (img == null)&lt;br /&gt;                      return false;&lt;br /&gt;&lt;br /&gt;// YOUR CODE HERE: make manipulations with the image object&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// save image to disk&lt;br /&gt;                img.Save( filename, System.Drawing.Imaging.ImageFormat.Jpeg );&lt;br /&gt;                img.Dispose();&lt;br /&gt;}&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;      finally&lt;br /&gt;      {&lt;br /&gt;          if (response != null) response.Close();&lt;br /&gt;          if (remoteStream != null) remoteStream.Close();&lt;br /&gt;          if (readStream != null) readStream.Close();&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;code for solution 2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;public static bool saveImageByUrlToDisk(string url, string filename, out string imageType)&lt;br /&gt;    {&lt;br /&gt;        imageType = "";&lt;br /&gt;&lt;br /&gt;        WebResponse response = null;&lt;br /&gt;        Stream remoteStream = null;&lt;br /&gt;        StreamReader readStream = null;&lt;br /&gt;        try&lt;br /&gt;        {&lt;br /&gt;            WebRequest request = WebRequest.Create(url);&lt;br /&gt;            if (request != null)&lt;br /&gt;            {&lt;br /&gt;                response = request.GetResponse();&lt;br /&gt;                if (response != null)&lt;br /&gt;                {&lt;br /&gt;                    remoteStream = response.GetResponseStream();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    // analyze image type, image extension&lt;br /&gt;                    string content_type = response.Headers["Content-type"];&lt;br /&gt;&lt;br /&gt;                    imageType = content_type;&lt;br /&gt;&lt;br /&gt;                    if (content_type == "image/jpeg" || content_type == "image/jpg")&lt;br /&gt;                    {&lt;br /&gt;                        imageType = "jpg";&lt;br /&gt;                    }&lt;br /&gt;                    else if (content_type == "image/png")&lt;br /&gt;                    {&lt;br /&gt;                        imageType = "png";&lt;br /&gt;                    }&lt;br /&gt;                    else if (content_type == "image/gif")&lt;br /&gt;                    {&lt;br /&gt;                        imageType = "gif";&lt;br /&gt;                    }&lt;br /&gt;                    else&lt;br /&gt;                    {&lt;br /&gt;                        imageType = "";&lt;br /&gt;&lt;br /&gt;                        return false;&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                    readStream = new StreamReader(remoteStream);&lt;br /&gt;&lt;br /&gt;                    Stream fw = File.Open(filename, FileMode.Create);&lt;br /&gt;&lt;br /&gt;                    //&lt;br /&gt;                    byte[] buf = new byte[256];&lt;br /&gt;                    int count = remoteStream.Read(buf, 0, 256);&lt;br /&gt;                    while (count &gt; 0)&lt;br /&gt;                    {&lt;br /&gt;                        fw.Write(buf, 0, count);&lt;br /&gt;&lt;br /&gt;                        count = remoteStream.Read(buf, 0, 256);&lt;br /&gt;                    }&lt;br /&gt;&lt;br /&gt;                    fw.Close();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        finally&lt;br /&gt;        {&lt;br /&gt;            if (response != null) response.Close();&lt;br /&gt;            if (remoteStream != null) remoteStream.Close();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-103753678357349424?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/103753678357349424/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=103753678357349424' title='Комментарии: 9'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/103753678357349424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/103753678357349424'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/12/get-image-by-url-net-aspnet.html' title='Get Image from HTTP URL - .NET, ASP.NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-3432309220086786489</id><published>2008-11-28T18:44:00.000-08:00</published><updated>2008-11-28T18:45:52.107-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Write Image to Response.OutputStream - ASP.NET</title><content type='html'>read an image from disk and write it out to the Response.Outputstream.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void ProcessRequest(HttpContext oContext, string sFileName)&lt;br /&gt;   {&lt;br /&gt; &lt;br /&gt;string sPath=oContext.Server.MapPath(".");&lt;br /&gt;      try&lt;br /&gt;      {&lt;br /&gt;if (sFileName.Length &lt;1) { return; }&lt;br /&gt;        System.Drawing.Image oImg =          System.Drawing.Image.FromFile(sPath +  sFileName,true); &lt;br /&gt;        oImg.Save(oContext.Response.OutputStream,ImageFormat.Jpeg);&lt;br /&gt;        oImg.Dispose(); &lt;br /&gt;      }&lt;br /&gt;      catch (Exception e) { oContext.Response.Write(e.Message); }&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/8096655137906025271-3432309220086786489?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/3432309220086786489/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=3432309220086786489' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3432309220086786489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3432309220086786489'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/11/write-image-to-responseoutputstream.html' title='Write Image to Response.OutputStream - ASP.NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-5740745063319349891</id><published>2008-11-17T06:35:00.000-08:00</published><updated>2008-11-17T06:37:18.810-08:00</updated><title type='text'>Clear (Remove) event handler (or all event handlers) attached to an event</title><content type='html'>&lt;span style="font-weight: bold;"&gt;references:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eggheadcafe.com/software/aspnet/33322274/clearing-all-event-handle.aspx"&gt;http://www.eggheadcafe.com/software/aspnet/33322274/clearing-all-event-handle.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control"&gt;http://stackoverflow.com/questions/91778/how-to-remove-all-event-handlers-from-a-control&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-5740745063319349891?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/5740745063319349891/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=5740745063319349891' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5740745063319349891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5740745063319349891'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/11/clear-remove-event-handler-or-all-event.html' title='Clear (Remove) event handler (or all event handlers) attached to an event'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-1687532087253143984</id><published>2008-11-12T05:30:00.000-08:00</published><updated>2008-11-25T20:07:47.350-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><title type='text'>Format strings - .NET</title><content type='html'>&lt;h5 class="posthead pageTitle"&gt;.NET Format String 101 &lt;span class="CommonRateControlReadOnly" id="ctl00___ctl00___ctl02___Entry___Ratings" title="Rated Excellent [5 out of 5 / rated 2 time(s)]."&gt;&lt;/span&gt;&lt;input value="5" id="ctl00___ctl00___ctl02___Entry___Ratings_Value" type="hidden"&gt;&lt;/h5&gt;  &lt;p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;"I see stuff like {0,-8:G2} passed in as a format string. What exactly does that do?"&lt;/em&gt; -- Very Confused String Formatter&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;The above format can be translated into this:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 128);font-family:Verdana;font-size:85%;"  &gt;"{&lt;argument&gt;[,&lt;alignment&gt;][:&lt;formatstring&gt;&lt;zeros&gt;]}"&lt;/zeros&gt;&lt;/formatstring&gt;&lt;/alignment&gt;&lt;/argument&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style=";font-family:Verdana;font-size:85%;"  &gt;&lt;strong&gt;argument index&lt;/strong&gt;: This represent which argument goes into the string.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;"first = {0};second = {1}"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"apple"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"orange"&lt;/span&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;"first = {1};second = {0}"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"apple"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"orange"&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;gives the following strings:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;"first = apple;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;second = orange"&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;"first = orange;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;second = apple"&lt;/span&gt;&lt;/p&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;alignment (optional): &lt;/strong&gt;This represent the minimal length of the string. &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;em&gt;Postive values&lt;/em&gt;, the string argument will be right justified and if the string is not long enough, the string will be padded with spaces on the left.&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;span style="font-family:Verdana;"&gt;&lt;em&gt;Negative values&lt;/em&gt;, the string argument will be left justied and if the string is not long enough, the string will be padded with spaces on the right.&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;span style="font-family:Verdana;"&gt;If this value was not specified, we will default to the length of the string argument.&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt; &lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;"{0,-10}"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"apple"&lt;/span&gt;);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"apple     "&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span style="line-height: 115%;font-family:'Courier New';font-size:10;"  &gt;&lt;span style="color:teal;"&gt;String&lt;/span&gt;.Format(&lt;span style="color:maroon;"&gt;"{0,10}"&lt;/span&gt;, &lt;span style="color:maroon;"&gt;"apple"&lt;/span&gt;);       &lt;span style="color: rgb(0, 100, 0);"&gt;//"     apple"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;format string (optional):&lt;/strong&gt; This represent the format code. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;Numeric format specifier is available &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp"&gt;here&lt;/a&gt;. (e.g. C, G...etc.)&lt;br /&gt;Datetime format specifier is available &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconstandardnumericformatstrings.asp"&gt;here&lt;/a&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;Enumeration format specifier is available &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconenumerationformatstrings.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconenumerationformatstrings.asp"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;Custom Numeric format specifier is available &lt;a href="http://msdn2.microsoft.com/en-us/library/0c899ak8%28VS.80%29.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/0c899ak8(VS.80).aspx"&gt;here&lt;/a&gt;. (e.g. 0. #...etc.)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;Custom formatting is kinda hard to understand. The best way I know how to explain something is via code:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; pos = 10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; neg = -10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; bigpos = 123456;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; bigneg = -123456;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; zero = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;string&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; strInt = &lt;span style="color:maroon;"&gt;"120ab"&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, pos);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"00010"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, neg);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"-00010"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, bigpos);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"123456"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, bigneg);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"-123456"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, zero);     &lt;span style="color: rgb(0, 100, 0);"&gt;//"00000"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:00000}"&lt;/span&gt;, strInt);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"120ab"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, pos);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"10"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, neg);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"-10"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, bigpos);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"123456"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, bigneg);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"-123456"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, zero);     &lt;span style="color: rgb(0, 100, 0);"&gt;//""&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:#####}"&lt;/span&gt;, strInt);   &lt;span style="color: rgb(0, 100, 0);"&gt;//"120ab"&lt;/span&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;While playing around with this, I made an interesting observation:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:X00000}"&lt;/span&gt;, pos);     &lt;span style="color: rgb(0, 100, 0);"&gt; //"A"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:X00000}"&lt;/span&gt;, neg);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"FFFFFFF6"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:X#####}"&lt;/span&gt;, pos);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"X10"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;.Format(&lt;span style="color:maroon;"&gt;"{0:X#####}"&lt;/span&gt;, neg);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"-X10"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;" mce_keep="true"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style="font-family:Verdana;"&gt;The "0" specifier works well with other numeric specifier, but the "#" doesn't. Umm... I think the "Custom Numeric Format String" probably deserve a whole post of it's own. Since this is only the "101" post, I'll move on to the next argument in the format string.&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style="font-family:Verdana;"&gt;&lt;strong&gt;zeros (optional): &lt;/strong&gt;It actually has a different meaning depending on which numeric specifier you use. &lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Verdana;"&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;&lt;/span&gt; &lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; neg = -10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:blue;"   &gt;int&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; pos = 10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// C or c (Currency): It represent how many decimal place of zeros to show.&lt;/span&gt;&lt;/p&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;.Format(&lt;span style="color:maroon;"&gt;"{0:C4}"&lt;/span&gt;, pos);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"$10.0000"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;.Format(&lt;span style="color:maroon;"&gt;"{0:C4}"&lt;/span&gt;, neg);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"($10.0000)"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt; &lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// D or d (Decimal): It represent leading zeros&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:D4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"0010"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:D4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-0010"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// E or e (Exponential): It represent how many decimal places of zeros to show.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:E4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"1.0000E+001"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:E4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-1.0000E+001"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// F or f (Fixed-point): It represent how many decimal places of zeros to show.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:F4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"10.0000"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:F4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-10.0000"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// G or g (General): This does nothing&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:G4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"10"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:G4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-10"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// N or n (Number): It represent how many decimal places of zeros to show.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:N4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"10.0000"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:N4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-10.0000"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// P or p (Percent): It represent how many decimal places of zeros to show.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:P4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"1,000.0000%"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:P4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-1,000.0000%"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// R or r (Round-Trip): This is invalid, FormatException is thrown.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:R4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//FormatException thrown&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:R4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//FormatException thrown&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// X or x (Hex): It represent leading zeros&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:X4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"000A"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:X4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg);      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"FFFFFFF6"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;// nothing: This is invalid, no exception is thrown.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, pos));      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"4"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format(&lt;/span&gt;&lt;span style="color:maroon;"&gt;"{0:4}"&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, neg));      &lt;/span&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;//"-4"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;In summary, there are four types of behaviour when using this &lt;zeros&gt; specifier:&lt;/zeros&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;strong&gt;Leading Zeros: &lt;/strong&gt;D, X&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;strong&gt;Trailing Zeros:&lt;/strong&gt; C, E, F, N, P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;strong&gt;Nothing: &lt;/strong&gt;G&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;strong&gt;Invalid:&lt;/strong&gt; R, &lt;empty&gt;&lt;/empty&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:Verdana;"&gt;Now, that we've gone through the valid specifiers, you can actually use this in more than just &lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;String&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="color: rgb(0, 0, 0);"&gt;.Format&lt;span style="font-family:Verdana;"&gt;(). For example, when using this with &lt;a href="http://msdn2.microsoft.com/en-us/library/xd12z8ts.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/xd12z8ts.aspx"&gt;Byte.ToString()&lt;/a&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;color:teal;"   &gt;&lt;span style="font-size:85%;"&gt;Byte&lt;/span&gt;&lt;/span&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt; b = 10;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt;b.ToString(&lt;span style="color:maroon;"&gt;"D4"&lt;/span&gt;);     &lt;span style="color: rgb(0, 100, 0);"&gt; //"0010"&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt;b.ToString(&lt;span style="color:maroon;"&gt;"X4"&lt;/span&gt;);      &lt;span style="color: rgb(0, 100, 0);"&gt;//"000A"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;DateTime.ToString, Format&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;                                                              &lt;script language="javascript" type="text/javascript" src="http://www.geekzilla.co.uk/js/previewBubble.js"&gt; &lt;/script&gt;    &lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;h1&gt;&lt;a href="http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm"&gt;DateTime&lt;/a&gt;.ToString() Patterns &lt;/h1&gt;    &lt;h2&gt;All the patterns:  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;1&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;2&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; HH:mm Tuesday, 22 August 2006 06:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;3&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; hh:mm tt Tuesday, 22 August 2006 06:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;4&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; H:mm Tuesday, 22 August 2006 6:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;5&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; h:mm tt Tuesday, 22 August 2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;6&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;7&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy HH:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 06:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;8&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy hh:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 06:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;9&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy H:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;10&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy h:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;10&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy h:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;10&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy h:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;11&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt;08/22/2006 06:30:07&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;12&lt;/td&gt; &lt;td class="TableCell"&gt; MMMM dd&lt;/td&gt; &lt;td class="TableCell"&gt; August 22 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;13&lt;/td&gt; &lt;td class="TableCell"&gt; MMMM dd&lt;/td&gt; &lt;td class="TableCell"&gt; August 22 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;14&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22T06:30:07.7199222-04:00 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;15&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd'T'HH':'mm':'ss.fffffffK&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22T06:30:07.7199222-04:00 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;16&lt;/td&gt; &lt;td class="TableCell"&gt; ddd, dd MMM yyyy HH':'mm':'ss 'GMT'&lt;/td&gt; &lt;td class="TableCell"&gt; Tue, 22 Aug 2006 06:30:07 GMT &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;17&lt;/td&gt; &lt;td class="TableCell"&gt; ddd, dd MMM yyyy HH':'mm':'ss 'GMT'&lt;/td&gt; &lt;td class="TableCell"&gt; Tue, 22 Aug 2006 06:30:07 GMT &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;18&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd'T'HH':'mm':'ss&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22T06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;19&lt;/td&gt; &lt;td class="TableCell"&gt; HH:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 06:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;20&lt;/td&gt; &lt;td class="TableCell"&gt; hh:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 06:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;21&lt;/td&gt; &lt;td class="TableCell"&gt; H:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 6:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;22&lt;/td&gt; &lt;td class="TableCell"&gt; h:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;23&lt;/td&gt; &lt;td class="TableCell"&gt; HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;24&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd HH':'mm':'ss'Z'&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22 06:30:07Z &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;25&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;26&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy MMMM&lt;/td&gt; &lt;td class="TableCell"&gt; 2006 August &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;27&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy MMMM&lt;/td&gt; &lt;td class="TableCell"&gt; 2006 August &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'd' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'D' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'f' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy HH:mm&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 06:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;1&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy hh:mm&lt;/td&gt; &lt;td class="TableCell"&gt; tt Tuesday, 22 August 2006 06:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;2&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy H:mm&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 6:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;3&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy h:mm&lt;/td&gt; &lt;td class="TableCell"&gt; tt Tuesday, 22 August 2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'F' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'g' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy HH:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 06:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;1&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy hh:mm&lt;/td&gt; &lt;td class="TableCell"&gt; tt 08/22/2006 06:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;2&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy H:mm&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;3&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy h:mm tt&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 6:30 AM &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'G' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; MM/dd/yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; 08/22/2006 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'm' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; MMMM dd&lt;/td&gt; &lt;td class="TableCell"&gt; August 22 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'r' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; ddd, dd MMM yyyy HH':'mm':'ss 'GMT'&lt;/td&gt; &lt;td class="TableCell"&gt; Tue, 22 Aug 2006 06:30:07 GMT &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 's' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd'T'HH':'mm':'ss&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22T06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'u' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy'-'MM'-'dd HH':'mm':'ss'Z'&lt;/td&gt; &lt;td class="TableCell"&gt; 2006-08-22 06:30:07Z &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'U' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; dddd, dd MMMM yyyy HH:mm:ss&lt;/td&gt; &lt;td class="TableCell"&gt; Tuesday, 22 August 2006 06:30:07 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;   &lt;h2&gt;The patterns for DateTime.ToString ( 'y' ) :  &lt;/h2&gt;  &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;0&lt;/td&gt; &lt;td class="TableCell"&gt; yyyy MMMM 2006 August &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;     &lt;h2&gt;Building a custom DateTime.ToString Patterns &lt;/h2&gt;  &lt;p&gt;The following details the meaning of each pattern character. Not the &lt;strong&gt;K&lt;/strong&gt; and &lt;strong&gt;z&lt;/strong&gt; character. &lt;/p&gt;    &lt;table class="TableClass" cellpadding="2" cellspacing="1"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;d&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the day of the month as a number from 1 through 31. A single-digit day is formatted without a leading zero&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;dd&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the day of the month as a number from 01 through 31. A single-digit day is formatted with a leading zero&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;ddd&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the abbreviated name of the day of the week (Mon, Tues, Wed etc)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;dddd&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the full name of the day of the week (Monday, Tuesday etc)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;h&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;12-hour clock hour (e.g. 7)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;hh&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;12-hour clock, with a leading 0  (e.g. 07)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;H&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;24-hour clock hour  (e.g. 19)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;HH&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;24-hour clock hour, with a leading 0  (e.g. 19)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;m&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Minutes&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;mm&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Minutes with a leading zero&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;M&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Month number&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;MM&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Month number with leading zero&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;MMM&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Abbreviated Month Name (e.g. Dec)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;MMMM&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Full month name (e.g. December)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;s&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Seconds&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;ss&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Seconds with leading zero&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Abbreviated AM / PM (e.g. A  or P)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;tt&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;AM / PM (e.g. AM  or PM&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;y&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Year, no leading zero (e.g. 2001 would be 1)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;yy&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Year, leadin zero (e.g. 2001 would be 01)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;yyy&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Year, (e.g. 2001 would be 2001)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;yyyy&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Year, (e.g. 2001 would be 2001)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;K&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the time zone information of a date and time value (e.g. +05:00)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;z&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;With &lt;a href="http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm"&gt;DateTime&lt;/a&gt; values, represents the signed offset of the local operating system's time zone from Coordinated Universal Time (UTC), measured in hours. (e.g. +6)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;zz&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;As z but with leadin zero (e.g. +06)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;zzz&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;With &lt;a href="http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm"&gt;DateTime&lt;/a&gt; values, represents the signed offset of the local operating system's time zone from UTC, measured in hours and minutes. (e.g. +06:00)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;f&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the most significant digit of the seconds fraction; that is, it represents the tenths of a second in a date and time value. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;ff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the two most significant digits of the seconds fraction; that is, it represents the hundredths of a second in a date and time value.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;fff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the three most significant digits of the seconds fraction; that is, it represents the milliseconds in a date and time value.&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;ffff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the four most significant digits of the seconds fraction; that is, it represents the ten thousandths of a second in a date and time value. While it is possible to display the ten thousandths of a second component of a time value, that value may not be meaningful. The precision of date and time values depends on the resolution of the system clock. On Windows NT 3.5 and later, and Windows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;fffff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the five most significant digits of the seconds fraction; that is, it represents the hundred thousandths of a second in a date and time value. While it is possible to display the hundred thousandths of a second component of a time value, that value may not be meaningful. The precision of date and time values depends on the resolution of the system clock. On Windows NT 3.5 and later, and Windows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;ffffff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the six most significant digits of the seconds fraction; that is, it represents the millionths of a second in a date and time value. While it is possible to display the millionths of a second component of a time value, that value may not be meaningful. The precision of date and time values depends on the resolution of the system clock. On Windows NT 3.5 and later, and Windows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;fffffff&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the seven most significant digits of the seconds fraction; that is, it represents the ten millionths of a second in a date and time value. While it is possible to display the ten millionths of a second component of a time value, that value may not be meaningful. The precision of date and time values depends on the resolution of the system clock. On Windows NT 3.5 and later, and Windows Vista operating systems, the clock's resolution is approximately 10-15 milliseconds. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;F&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the most significant digit of the seconds fraction; that is, it represents the tenths of a second in a date and time value. Nothing is displayed if the digit is zero. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;:&lt;/strong&gt;&lt;/td&gt; &lt;td class="TableCell"&gt;Represents the time separator defined in the current DateTimeFormatInfo..::.TimeSeparator property. This separator is used to differentiate hours, minutes, and seconds. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;/&lt;/strong&gt; &lt;/td&gt; &lt;td class="TableCell"&gt; Represents the date separator defined in the current DateTimeFormatInfo..::.DateSeparator property. This separator is used to differentiate years, months, and days. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;"&lt;/strong&gt; &lt;/td&gt; &lt;td class="TableCell"&gt; Represents a quoted string (quotation mark). Displays the literal value of any string between two quotation marks ("). Your application should precede each quotation mark with an escape character (\). &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;&lt;/strong&gt;'&lt;/td&gt; &lt;td class="TableCell"&gt; Represents a quoted string (apostrophe). Displays the literal value of any string between two apostrophe (') characters. &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td class="TableCell"&gt;&lt;strong&gt;%c&lt;/strong&gt; &lt;/td&gt; &lt;td class="TableCell"&gt;Represents the result associated with a c custom format specifier, when the custom date and time format string consists solely of that custom format specifier. That is, to use the d, f, F, h, m, s, t, y, z, H, or M custom format specifier by itself, the application should specify %d, %f, %F, %h, %m, %s, %t, %y, %z, %H, or %M. For more information about using a single format specifier, see Using Single Custom Format Specifiers. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-family:Verdana;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Verdana;" &gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;br /&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;span style="font-weight: bold;"&gt;References&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;a href="http://blogs.msdn.com/kathykam/archive/2006/03/29/net-format-string-101-C_2300_-strings.aspx"&gt;http://blogs.msdn.com/kathykam/archive/2006/03/29/net-format-string-101-C_2300_-strings.aspx&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal;"&gt;&lt;span style=";font-family:'Courier New';font-size:10;"  &gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 100, 0);"&gt;&lt;a href="http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm"&gt;http://www.geekzilla.co.uk/View00FF7904-B510-468C-A2C8-F859AA20581F.htm&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-1687532087253143984?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/1687532087253143984/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=1687532087253143984' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1687532087253143984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1687532087253143984'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/11/format-strings-net.html' title='Format strings - .NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-5723919217806271309</id><published>2008-11-09T21:31:00.000-08:00</published><updated>2008-11-09T21:35:00.222-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><title type='text'>Capture a Screen Shot - .NET (C#)</title><content type='html'>This code demonstrates how to get a screen shot of the entire desktop, or a particular window, using .NET (and a few API functions).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.developerfusion.com/code/4630/capture-a-screen-shot/"&gt;http://www.developerfusion.com/code/4630/capture-a-screen-shot/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-5723919217806271309?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/5723919217806271309/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=5723919217806271309' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5723919217806271309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5723919217806271309'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/11/capture-screen-shot-net-c.html' title='Capture a Screen Shot - .NET (C#)'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4199784045028041359</id><published>2008-11-08T20:07:00.000-08:00</published><updated>2008-11-08T21:19:55.321-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Upload file - acces denied - ASP.NET</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Problem:&lt;/span&gt;&lt;br /&gt;It shows error during uploading the file :&lt;br /&gt;&lt;br /&gt;Access to the path 'C:\Inetpub\vhosts\mysite.com\httpdocs\inbox\picture.jpg' is denied. &lt;br /&gt;&lt;br /&gt;the code is like this:&lt;br /&gt;&lt;br /&gt;string filename=File1.PostedFile.FileName;&lt;br /&gt;&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;File1.PostedFile.SaveAs(Server.MapPath(filename));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Grant ASP.NET write access to the folder:&lt;br /&gt;right click the actual folder in file explorer and allow EVERYONE to write to this folder. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Description:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ASP.NET is not authorized so save files in temp folder (defined by tempPath parameter). Consider granting access rights to the resource to the ASP.NET request identity. ASP.NET has a base process identity (typically {MACHINE}\ASPNET on IIS 5 or Network Service on IIS 6) that is used if the application is not impersonating. If the application is impersonating via &lt;identity impersonate="true"/&gt;, the identity will be the anonymous user (typically IUSR_{MACHINENAME}) or the authenticated request user.&lt;br /&gt;&lt;br /&gt;To grant ASPNET (in the case of IIS 5) or NETWORK SERVICE (in the case of IIS 6)  or other needed account write access to a folder, right-click the file in Explorer, choose "Properties" and select the Security tab. Click "Add" to add the appropriate user or group. Highlight the needed account, and check the boxes for the desired access.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;references:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;How to upload a file to a Web server in ASP.NET by using Visual Basic .NET:&lt;br /&gt;&lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;323245"&gt;http://support.microsoft.com/default.aspx?scid=kb;en-us;323245&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ASP.NET Impersonation:&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsent7/html/vxconimpersonation.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsent7/html/vxconimpersonation.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4199784045028041359?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4199784045028041359/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4199784045028041359' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4199784045028041359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4199784045028041359'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/11/upload-file-acces-denied-aspnet.html' title='Upload file - acces denied - ASP.NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-8146560240301223042</id><published>2008-10-04T15:16:00.001-07:00</published><updated>2008-10-04T15:17:50.457-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><title type='text'>Use font style in datagridview columns</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Change font style in datagridview columns for column header or column&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;for ColumnHeader&lt;br /&gt;&lt;br /&gt;this.dataGridView1.ColumnHeadersDefaultCellStyle.Font = &lt;br /&gt;new Font(this.dataGridView1.ColumnHeadersDefaultCellStyle.Font, FontStyle.Bold);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for column&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this.dataGridView1.Columns[0].DefaultCellStyle.Font = &lt;br /&gt;new Font(this.Font, FontStyle.Bold);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-8146560240301223042?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/8146560240301223042/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=8146560240301223042' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8146560240301223042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8146560240301223042'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/10/use-font-style-in-datagridview-columns_04.html' title='Use font style in datagridview columns'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-2644438698080827517</id><published>2008-10-03T13:40:00.001-07:00</published><updated>2008-10-03T13:40:52.357-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT management'/><title type='text'>Dream IT Company</title><content type='html'>Критерии &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;br /&gt;        * Корпоративная этика и культура, ценности&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;br /&gt;    Возможность профессиональной и творческой самореализации&lt;br /&gt;    Компания предоставляет каждому сотруднику возможность профессионально развиваться, каждый сотрудник имеет шанс применить свои умения и навыки в непростых, но увлекательных проектах, с использованием новейших технологий, реализовывать самые смелые профессиональные замыслы и карьерные стремления.&lt;br /&gt;&lt;br /&gt;        * доступ к интересным проектам (то ли высоко-технологичным, инновационным, то ли масштабным, то ли полезным людям)&lt;br /&gt;          References: Developers.Org.Ua, Конкурс проектов (”dream job”)&lt;br /&gt;        * возможность применить знания, навыки и опыт на тех проектах, где это максимально эффективно&lt;br /&gt;        * определенная свобода в принятии решений, возможность рисковать и отвечать за результат&lt;br /&gt;&lt;br /&gt;    Мотивация&lt;br /&gt;&lt;br /&gt;        * признание сотрудников и их ценности для компании&lt;br /&gt;              o есть ли программы Rewards and Recognition, по каким критериям награждают сотрудников&lt;br /&gt;        * справедливость существующей системы вознагражения&lt;br /&gt;              o совпадает ли зарплата у стариков и новичков, при прочих равных условиях (компетенция и производительность совпадает)&lt;br /&gt;              o совпадает ли зарплата в рамках разных департаментов и подразделений, при прочих равных условиях&lt;br /&gt;        * наличие системы управления мотивацией и производительностью&lt;br /&gt;              o зависит ли зарплата от уровня компетенции&lt;br /&gt;              o зависит ли бонус от производительности&lt;br /&gt;        * адекватный компенсационный пакет&lt;br /&gt;              o зарплата (среднерыночная+)&lt;br /&gt;              o есть ли программы участия в прибыли&lt;br /&gt;                    + для акционерных компаний акции&lt;br /&gt;                    + для частных - эмулирующая их модель&lt;br /&gt;              o набор нефинансовых благ&lt;br /&gt;                    + медицинская страховка ($500+)&lt;br /&gt;                    + набор услуг, которыми могут пользоваться сотрудники. Example: Google: возможность пользоваться прачечной, химчисткой, автомобильным сервисом, SPA-центром. А также питание, массаж и бесплатное медицинское обслуживание на рабочем месте.&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;br /&gt;    Карьерный рост&lt;br /&gt;&lt;br /&gt;    Лучшие работодатели ставят перед собой задачу выявления и удержания перспективных и талантливых сотрудников уже сегодня, в то время как остальные компании считают необходимым задуматься над этой проблемой только в течение ближайших 3-5 лет. 90% компаний лучших работодателей уделяют большее внимание политикам и процедурам формирования кадрового резерва и выявления работников с высоким потенциалом. Основным критерием выявления таких работников, помимо оценки результатов текущей деятельности непосредственным руководителем, является личный вклад работника в финансово-экономические результаты компании&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;br /&gt;&lt;br /&gt;        * тренинги по специальности, минимум 10 часов в год&lt;br /&gt;        * подписка на периодику, инфо порталы&lt;br /&gt;        * внутренняя библиотека технической литературы&lt;br /&gt;        * доступ к конференциям по специальности&lt;br /&gt;&lt;br /&gt;    Стабильность компании&lt;br /&gt;&lt;br /&gt;        * TBD&lt;br /&gt;&lt;br /&gt;    Корпоративная этика и культура, ценности&lt;br /&gt;&lt;br /&gt;        * ценности, насколько им реально соответствуют&lt;br /&gt;        * соблюдение всех договоренностей&lt;br /&gt;              o своевременная выплата зарплаты&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;br /&gt;&lt;br /&gt;        * комфортный регулируемый стул (от $200)&lt;br /&gt;        * качественный плоский монитор 17-21 дюйм с высоким разрешением&lt;br /&gt;        * климат контроль (кондиционирование + вентиляция + климат)&lt;br /&gt;        * достаточно большое рабочее пространство стола (1.2 х 1.2)&lt;br /&gt;        * достаточно большое пространство вообще (10 sq.m. per person)&lt;br /&gt;        * настольный телефон с гарнитурой для длительных разговоров&lt;br /&gt;        * продвинутая внутренняя АТСка, с голосовой почтной, и т.д.&lt;br /&gt;        * поддержка работы из дому (work environment, VoIP support)&lt;br /&gt;        * достаточно тихий системный блок. И качественный при этом&lt;br /&gt;        * изба-читальня, (софа, журнальный столик)&lt;br /&gt;        * комнаты отдыха с&lt;br /&gt;              o игровыми приставками&lt;br /&gt;              o креслами-качалками&lt;br /&gt;              o диванами для поспать&lt;br /&gt;        * наличие кухни с&lt;br /&gt;              o привозной водой, чаями, кофем, напитками (соки-пиво)&lt;br /&gt;              o подножным кормом (орехи, печеньки, и др. джанк фуд)&lt;br /&gt;        * большой кафетерий для полноценных тусовочных обедов&lt;br /&gt;        * спортзона на территории компании&lt;br /&gt;              o душевая, желательно финская сауна с ведром-душем&lt;br /&gt;              o бильярд, пинг-понг, настольный хоккей, баскетбол&lt;br /&gt;              o тренажеры, беговые дорожки, мячи, и всякая хрень&lt;br /&gt;        * More: “Идеальный офис для программиста”, (c) Developers.Org.Ua&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;br /&gt;    Здоровый микроклимат в коллективе&lt;br /&gt;&lt;br /&gt;        * Попросите показать счастливые лица вокруг, способные помогать, сопереживать и вдохновлять друг друга&lt;br /&gt;        * Попросите о возможности после интервью случайно выбрать сотрудника компании и поговорить с ним 5 минут&lt;br /&gt;&lt;br /&gt;    Организация и зрелость процесса работы-разработки&lt;br /&gt;&lt;br /&gt;        * применение лучших практик, стандартизация&lt;br /&gt;        * эффективная реализация внутренних процессов&lt;br /&gt;              o удобные и понятные политики и процедуры работы&lt;br /&gt;              o удобные внутренние корпоративные системы&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;br /&gt;    Система управления, топ-менеджмент&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;br /&gt;&lt;br /&gt;        * миссия заслуживающая уважения, смысл жизни&lt;br /&gt;        * есть ли у компании видение будущего, которое известно сотрудникам&lt;br /&gt;        * есть ли стратегический план развития и выполняется ли он успешно&lt;br /&gt;        * является ли компния лидером на рынке (входит в топ-10 по рейтингам)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;a href="http://www.globallogic.com.ua/globallogic/index.php?option=com_content&amp;task=view&amp;id=4633&amp;Itemid=78"&gt;http://www.globallogic.com.ua/globallogic/index.php?option=com_content&amp;task=view&amp;id=4633&amp;Itemid=78&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-2644438698080827517?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/2644438698080827517/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=2644438698080827517' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/2644438698080827517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/2644438698080827517'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/10/dream-it-company.html' title='Dream IT Company'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-6444319685397691504</id><published>2008-09-24T19:03:00.000-07:00</published><updated>2008-09-24T19:05:43.187-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Unknown problems with Dataset in .NET</title><content type='html'>DataSet object generated by Wizard started to show Exception while opening it in Designer: &lt;br /&gt;key cannot be used in specified...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Also it is impossible to create new Dataset with TableAdapters..&lt;br /&gt;&lt;br /&gt;The only solution found:&lt;br /&gt;&lt;br /&gt;remove folders Visual Studio in these folders:&lt;br /&gt;1. c:\Documents and Settings\%CurrentUser%\Application Data\Microsoft\&lt;br /&gt;2. c:\Documents and Settings\%CurrentUser%\Local Settings\Application Data\Microsoft\&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-6444319685397691504?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/6444319685397691504/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=6444319685397691504' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6444319685397691504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6444319685397691504'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/unknown-problems-with-dataset-in-net.html' title='Unknown problems with Dataset in .NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-131996554360335929</id><published>2008-09-20T18:42:00.000-07:00</published><updated>2008-09-20T18:43:08.617-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Что из себя представляет корпоративная социальная сеть?</title><content type='html'>// &lt;a href="http://www.intranetno.ru/faq/social-structure/"&gt;http://www.intranetno.ru/faq/social-structure/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Корпоративное социальное ПО может иметь различные наборы функций, включая инструменты для коммуникаций, совместной работы и управления контентом. Однако, практически во всех системах есть 2 основных элемента: профайл и домашняя страница.&lt;br /&gt;&lt;br /&gt;Профайл - это публичная страничка о сотруднике, на которой обычно размещена его фотография, информация о его должности, функциональных обязанностях, контактная информация, личные данные (интересы), опубликованный им контент (блог, фото, видео), а также его "друзья" - коллеги, с которыми он работает и/или дружит. Профайлы позволяют узнавать больше о людях, которые работают в компании и находить друзей с общими интересами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Персонализированная домашняя страничка - это персональная страничка, которая доступна только хозяину и которую он настраивает под себя. Подразумевается, что это стартовая страничка, с которой сотрудник начинает свой рабочий день. Поэтому на нее он обычно выводит обновляемую информацию, например, актуальные задачи, запланированные на сегодня мероприятия, новости компании, RSS-обновления по проектам. Эта страничка, как правило, состоит из блоков - виджетов, которые можно как угодно комбинировать и настраивать.&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;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/8096655137906025271-131996554360335929?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/131996554360335929/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=131996554360335929' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/131996554360335929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/131996554360335929'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/blog-post_6649.html' title='Что из себя представляет корпоративная социальная сеть?'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-408300455049108293</id><published>2008-09-20T18:41:00.001-07:00</published><updated>2008-09-20T18:41:41.901-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Что собой представляют Корпоративные порталы?</title><content type='html'>// &lt;a href="http://www.intranetno.ru/faq/portals/"&gt;http://www.intranetno.ru/faq/portals/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Корпоративные порталы настолько многофункциональны и разнообразны, что под термином "корпоративный портал" могут понимать совершенно разные вещи. От сайта на котором выкладываются новости компании и файлы до платформы, интегрирующей корпоративные данные и приложения.&lt;br /&gt;&lt;br /&gt;Итак, в самом навороченном варианте:&lt;br /&gt;&lt;br /&gt;Корпоративный портал (EIP = enterprise information portal) - это вэб-интерфейс для каждого сотрудника компании ко всему хозяйству, которое он использует по работе.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Как правило, корпоративные порталы внедряются в сравнительно крупных компаниях, в которых используется несколько бизнес-приложений и большое количество корпоративного контента, который хранится в разных местах.&lt;br /&gt;&lt;br /&gt;Чтобы мозг сотрудника не взорвался в такой обстановке, для него создается персонализованный удобный сайт, с помощью которого он может взаимодействовать со всеми корпоративными приложениями, данными и другими сотрудниками.&lt;br /&gt;&lt;br /&gt;Например, человек приходит на работу, открывает такой сайт. Один раз вводит логин и пароль. И сразу видит свою почту, сегодняшние задачи, отчет по продажам из CRM, неоплаченные счета из ERP, корпоративные новости и у кого из коллег сегодня день рожденья.&lt;br /&gt;&lt;br /&gt;Если раньше порталы фокусировались на контенте, то сейчас преобладает тенденция ориентации на людей. Порталы становятся похожими на социальные сети - с профайлами сотрудников, тэгами, RSS-подписками, закладками, блогами, форумами и другими социальными инструментами.&lt;br /&gt;&lt;br /&gt;Порталы часто используются и для взаимодействия с внешними контрагентами - партнерами и клиентами, которые с помощью портала могут не только почитать новости компании, но и, например, сделать заказ или поучаствовать в обсуждении проекта. Портал может включать в себя внешний сайт компании или интегрироваться с ним.&lt;br /&gt;&lt;br /&gt;Портал, как правило, устанавливается на собственный вэб-сервер компании, но появляются уже и SaaS решения. Основными технологиями, которые позволяют порталам делать свое дело являются XML и Портлеты.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-408300455049108293?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/408300455049108293/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=408300455049108293' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/408300455049108293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/408300455049108293'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/blog-post_2393.html' title='Что собой представляют Корпоративные порталы?'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-5431015452108534683</id><published>2008-09-20T18:39:00.000-07:00</published><updated>2008-09-20T18:40:27.596-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Какие функции выполняют корпоративные порталы?</title><content type='html'>// &lt;a href="http://www.intranetno.ru/faq/portal-functions/"&gt;http://www.intranetno.ru/faq/portal-functions/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот основные функции корпоративных порталов:&lt;br /&gt;&lt;br /&gt;1. Безопасный, персонализированный доступ к данным&lt;br /&gt;(в т.ч. с рабочего места, удаленно, и с мобильных устройств)&lt;br /&gt;&lt;br /&gt;2. Поиск, систематизация и разметка корпоративных данных из разных источников (внутренних и внешних)&lt;br /&gt;&lt;br /&gt;3. Хранение данных&lt;br /&gt;(в БД портала могут храниться документы, данные из заполненных форм, файлы ...)&lt;br /&gt;&lt;br /&gt;4. Управление RSS-потоками&lt;br /&gt;(Чтение ленты новостей или оповещений о действиях сотрудников)&lt;br /&gt;&lt;br /&gt;5. Управление документами и файлами&lt;br /&gt;(например контроль версий документов, контроль доступа к файлам)&lt;br /&gt;&lt;br /&gt;6. Управление бизнес процессами&lt;br /&gt;(например, портал подсказывает сотруднику порядок действий для утверждения документов)&lt;br /&gt;&lt;br /&gt;7. Публикация контента самими сотрудниками&lt;br /&gt;&lt;br /&gt;8. Создание сайтов&lt;br /&gt;(например сайта подразделения или сайта какого-то проекта)&lt;br /&gt;&lt;br /&gt;9. Управление знаниями = knowledge management&lt;br /&gt;(порталы часто содержат базу взаимосвязанных страничек, создаваемых самими пользователями, на которых можно найти решение для своей задачи, не отвлекая при этом коллег. Для это часто используется технология Вики)&lt;br /&gt;&lt;br /&gt;10. Совместная работа&lt;br /&gt;(портал может как предоставлять интерфейс к корпоративному органайзеру, так и содержать свои инструменты для совместной работы)&lt;br /&gt;&lt;br /&gt;11. Корпоративные коммуникации&lt;br /&gt;(мессенджер, форумы, блоги, комментарии)&lt;br /&gt;&lt;br /&gt;12. Создание корпоративных сообществ&lt;br /&gt;(т.е. построение дружеских связей между сотрудниками)&lt;br /&gt;&lt;br /&gt;13. Интеграция бизнес-приложений&lt;br /&gt;(в паре с серверами приложений порталы служат для создания единой интеграционной платформы предприятия)&lt;br /&gt;&lt;br /&gt;14. Единая точка аутентификации пользователя&lt;br /&gt;(Вместо того, чтобы логиниться в каждое приложение отдельно, пользователь вводит логин и пароль только для входа в портал)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-5431015452108534683?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/5431015452108534683/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=5431015452108534683' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5431015452108534683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5431015452108534683'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/blog-post_3745.html' title='Какие функции выполняют корпоративные порталы?'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-8547356629874353377</id><published>2008-09-20T18:37:00.001-07:00</published><updated>2008-09-20T18:37:51.851-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Что такое Социальное ПО и зачем оно нужно?</title><content type='html'>// &lt;a href="http://www.intranetno.ru/faq/social/"&gt;http://www.intranetno.ru/faq/social/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Идея Социального ПО (которое иногда называют Enterprise 2.0) - это использование технологий обычных социальных сетей для бизнеса.&lt;br /&gt;&lt;br /&gt;Социальное ПО может быть как надстройкой для корпоративной системы, так и самостоятельной системой, включающей функции для управления контентом и совместной работы.&lt;br /&gt;&lt;br /&gt;Какие функции выполняют корпоративные социальные сети?&lt;br /&gt;&lt;br /&gt;1. Знакомят сотрудников друг с другом.&lt;br /&gt;Особенно в больших компаниях сотрудники часто не знают кого как зовут, кто чем занимается и к кому обратиться по определенному вопросу. В корпоративной социальной сети у каждого сотрудника есть профайл с его именем, должностью, функциональными обязанностями. По этим профайлам можно искать и находить нужного человека.&lt;br /&gt;&lt;br /&gt;2. Разрушают иерархические границы&lt;br /&gt;Обычно высокопоставленные руководители не светят свой email и ICQ, и их телефон постоянно занят. Поэтому связь между отдаленными ступеньками иерархической лестницы практически отсутствует. Из-за этого верхи и низы живут, как-бы, в разных мирах. Социальная сеть дает возможность легко обратиться напрямую к любому вышестоящему сотруднику. А для начальства - это удобный способ получить обратную связь и взглянуть на мир более реально.&lt;br /&gt;&lt;br /&gt;3. Создают сообщество (команду)&lt;br /&gt;Чем больше компания, тем меньше сотрудник к ней привязан. Он не знает, какие цели у компании и кто с ним рядом работает. Социальные сети поощряют сотрудников публиковать информацию о себе, о своих интересах для того, чтобы люди со схожими интересами внутри компании сходились и устанавливали связи. Неформальные связи привязывают сотрудников друг к другу (а значит и к компании) и дают причину "ради чего я здесь работаю?", что способствует созданию единой команды с общей целью.&lt;br /&gt;&lt;br /&gt;4. Предоставляют социальные инструменты для совместной работы&lt;br /&gt;Что это за инструменты?&lt;br /&gt;&lt;br /&gt;- Инструменты для публикации контента&lt;br /&gt;(блоги, файлохранилища, wiki, галлереи, видеосервисы)&lt;br /&gt;Социальное ПО позволяет легко публиковать текст, документы, файлы, мультимедиа, которые используются для совместной работы. В традиционных системах возможность публикации контента обычными пользователями очень ограничена. Следует заметить, что большое внимание в социальных системах уделяется Авторству. Т.е. очень важным аттрибутом любого контента является его автор.&lt;br /&gt;&lt;br /&gt;- Инструменты для обсуждения&lt;br /&gt;(форумы, блоги, комментарии, отзывы)&lt;br /&gt;Практически любой элемент контента в социальном ПО может быть откомментирован. Это позволяет собирать полезнейшую информацию по всей компании. Например, традиционная CRM система в основном сфокусирована на том, чтобы сотрудник саппорта не имел лишнего доступа к карточке клиента, за которую отвечает продажник. А социальная система, наоборот, поощряет сотрудников саппорта дополнять (комментировать) информацию по клиенту, что может быть очень полезно для продаж.&lt;br /&gt;&lt;br /&gt;- Инструменты для организации контента&lt;br /&gt;(тэги, закладки, рейтинги)&lt;br /&gt;Социальное ПО дает возможность каждому сотруднику присваивать тэги, рейтинговать любые элементы контента. В результате при поиске или мониторинге определенного вопроса, сотрудники получают более релевантную и важную информацию.&lt;br /&gt;&lt;br /&gt;- Инструменты для контроля и мониторинга&lt;br /&gt;(Персональные RSS-потоки)&lt;br /&gt;Подписавшись на персональную RSS ленту по какому-либо сотруднику, в которой появляются оповещения о всех активностях сотрудника, его руководитель или коллега по проекту может контролировать, что происходит.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-8547356629874353377?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/8547356629874353377/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=8547356629874353377' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8547356629874353377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8547356629874353377'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/blog-post_20.html' title='Что такое Социальное ПО и зачем оно нужно?'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-716774730858795170</id><published>2008-09-20T18:28:00.001-07:00</published><updated>2008-09-20T18:28:45.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>Articles about Microsoft Office SharePoint</title><content type='html'>&lt;a href="http://www.intranetno.ru/news/4551/"&gt;http://www.intranetno.ru/news/4551/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-716774730858795170?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/716774730858795170/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=716774730858795170' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/716774730858795170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/716774730858795170'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/articles-about-microsoft-office.html' title='Articles about Microsoft Office SharePoint'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-7214965468849534995</id><published>2008-09-20T18:23:00.000-07:00</published><updated>2008-09-20T18:24:28.843-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Online services'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Корпоративные Порталы</title><content type='html'>// &lt;a href="http://www.intranetno.ru/portal/"&gt;http://www.intranetno.ru/portal/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;39&lt;br /&gt;Microsoft Office SharePoint&lt;br /&gt;Microsoft Office SharePointСистема управления корпоративным контентом и совместной работы, которую можно использовать в качестве корпоративного портала. Имеет множество расширений и интегрированных систем. Тесно интегрирована с MS Office и MS Exchange. Может поставляться как вэб сервис [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;33&lt;br /&gt;IBM WebSphere Portal&lt;br /&gt;IBM WebSphere PortalРешение для построения корпоративного портала, бизнес-мэшапов и SOA-платформы. Предоставляет избыточную функциональность для совместной работы и управления контентом для организации любого размера. Отлично интегрируется с другими системами IBM [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;26&lt;br /&gt;Oracle WebCenter Suite&lt;br /&gt;Oracle WebCenter SuiteПортальная платформа для совместной работы, управления контентом, управления бизнес-процессами, интеграции бизнес данных и приложений. Включает Enterprise 2.0 фичи, такие как вики, блоги, форумы, RSS. [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23&lt;br /&gt;QSOFT: Корпоративный портал&lt;br /&gt;QSOFT: Корпоративный порталРешение для создания корпоративного портала на движке 1С-Битрикс:Управление сайтом. Содержит новости, справочники, базу знаний, календарь, форумы,  блоги, подписки, профайлы... Поставляется с набором готовых дизайнов и не требует от пользователя специальных навыков и знаний. [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;23&lt;br /&gt;SAP NetWeaver Portal&lt;br /&gt;SAP NetWeaver PortalПортал для интеграции приложений SAP, приложений других производителей, баз данных, источников корпоративного контента (структурированного и нет), внешнего вэб-контента. Основан на открытых стандартах и вэб-сервисах, поддерживает технологии J2EE и .NET [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;22&lt;br /&gt;RedDot CMS&lt;br /&gt;RedDot CMSПортальное решение для корпоративных коммуникаций, интеграции ИТ инфраструктуры и управления корпоративным контентом. Отличается интерактивным интерфейсом [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;20&lt;br /&gt;PayDox&lt;br /&gt;PayDoxВэб-система документооборота с функциями для корпоративного портала. Содержит файловый архив, форумы, инструменты для управления документами и совместной работы. Хорошо интегрирована с MS Office. Отечественная разработка [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;20&lt;br /&gt;Drupal&lt;br /&gt;DrupalПопулярнейшая open-source CMS система для создания порталов и сообществ. Отличается богатой функциональностью, высокой безопасностью, большой библиотекой расширений, системой совместной публикации, поддержкой Open ID [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;19&lt;br /&gt;Salesforce Content&lt;br /&gt;Salesforce ContentSaaS сервис для управления корпоративным контентом интегрированный с Salesforce CRM. Основан на социальных инструментах, таких как тэги, rss-подписки, рекомендации, рейтингование. Предназначен для взаимодействия как внутри компании, так и с партнерами и клиентами. [edit]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;19&lt;br /&gt;JBoss Portal&lt;br /&gt;JBoss PortalБезопасный и производительный open-source корпоративный портал. Предоставляет платформу для интеграции контента и приложений. Содержит инструменты для совместной работы и управления бизнес-процессами [edit]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-7214965468849534995?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/7214965468849534995/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=7214965468849534995' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7214965468849534995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7214965468849534995'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/blog-post.html' title='Корпоративные Порталы'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-6134702866827367417</id><published>2008-09-20T18:08:00.000-07:00</published><updated>2008-09-20T19:37:09.759-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Online services'/><category scheme='http://www.blogger.com/atom/ns#' term='corporate systems'/><title type='text'>Resources - полезный софт для ИТ компаний</title><content type='html'>&lt;a href="http://www.livebusiness.ru"&gt;http://www.livebusiness.ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Виртуальный офис&lt;br /&gt;Управление проектами&lt;br /&gt;CRM и HelpDesk&lt;br /&gt;Редакторы документов&lt;br /&gt;Календари и Органайзеры&lt;br /&gt;Бизнес Email&lt;br /&gt;Wiki и Порталы&lt;br /&gt;Файлохранилища&lt;br /&gt;Вэб конференции&lt;br /&gt;Вэб презентации&lt;br /&gt;Мессенджеры и VoIP&lt;br /&gt;wimax&lt;br /&gt;WiMax интернет&lt;br /&gt;&lt;br /&gt;Корпоративные порталы&lt;br /&gt;Wiki системы&lt;br /&gt;Социальное ПО&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-6134702866827367417?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/6134702866827367417/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=6134702866827367417' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6134702866827367417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6134702866827367417'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/resources.html' title='Resources - полезный софт для ИТ компаний'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-8013520865082329980</id><published>2008-09-20T17:12:00.000-07:00</published><updated>2008-09-20T17:14:00.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT management'/><title type='text'>Wiki на корпоративной службе</title><content type='html'>Wiki на корпоративной службе&lt;br /&gt;&lt;br /&gt;// &lt;a href="http://www.pcweek.ru/themes/detail.php?ID=112325"&gt;http://www.pcweek.ru/themes/detail.php?ID=112325&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Технология Wiki открывает отличные возможности по использованию контента, совместной работе над ним и его редактированию через Интернет. Организации берут ее на вооружение, чтобы повысить производительность труда, улучшить взаимодействие между сотрудниками и сократить объем электронной почты.&lt;br /&gt;&lt;br /&gt;Вот только торопиться с развертыванием Wiki в корпоративной сети не стоит. Сначала необходимо предпринять ряд мер, чтобы упростить процесс реализации и свести к минимуму риск ошибок. Для успешного завершения такого проекта следует выполнить три действия.&lt;br /&gt;Шаг 1. Убедитесь, что ИТ-инфраструктура может справиться с Wiki&lt;br /&gt;&lt;br /&gt;Когда принципиальное решение об использовании Wiki принято, в первую очередь следует удостовериться, что развернутая на предприятии система пригодна для этой технологии. Если предполагается применение Web-платформы, данный шаг обязательно должен предусматривать проверку сетевой безопасности и политики блокирования Web-сайтов и программ, включая AOL, Instant Messenger, Skype и социальные сети. Некоторые организации запрещают своим сотрудникам пользоваться такими приложениями, и эти ограничения могут помешать применению в корпоративной сети систем наподобие Wiki. Необходимо также убедиться, что на сервере имеется достаточно места для хранения информации. Если же его не хватает, можно воспользоваться средствами хостинга Wiki на других серверах.&lt;br /&gt;&lt;br /&gt;Кроме того, ИТ-отделу следует тщательно изучить два важнейших вопроса -- защиты данных и мобильности. С учетом множества попыток взлома данных, которые были зарегистрированы за прошедший год, крайне важно следить, чтобы любое вновь устанавливаемое приложение -- и Wiki здесь не исключение -- было не менее защищенным, чем все другие ресурсы организации. В каждом подразделении наверняка есть собственная конфиденциальная информация, которую нужно закрывать паролем от несанкционированного доступа сотрудников.&lt;br /&gt;&lt;br /&gt;При выборе технологии Wiki и ее развертывании не стоит забывать и о мобильности пользователей. Для получения информации сегодня сплошь и рядом применяются сотовые телефоны или карманные компьютеры, так что сотрудникам наверняка захочется пользоваться такими устройствами и для извлечения сведений из корпоративной Wiki.&lt;br /&gt;Шаг 2. Пересмотрите внутренние корпоративные правила с прицелом на использование Wiki&lt;br /&gt;&lt;br /&gt;Реагируя на стремительное распространение блогов в Интернете, многие организации уже выработали правила ведения таких электронных дневников. То же самое следует предпринять и в отношении Wiki. Выбрав технологию Wiki, которая лучше всего соответствует потребностям организации, первым делом следует четко определить политику работы с ней и довести до сведения всех пользователей, что информация здесь носит сугубо конфиденциальный характер. Поэтому хотя Wiki и упрощает общение, правила остаются неизменными. Ведь новая система является корпоративной, и содержащийся в ней контент ни в коем случае не должен выноситься за пределы рабочей среды. И, наконец, политика использования Wiki не должна ограничиваться тем, какие области сайта доступны конкретному сотруднику или подразделению. В дополнение к этому необходимо определить, какие разделы Wiki открыты внешним пользователям, а какие видны только внутренним.&lt;br /&gt;Шаг 3. Стимулируйте участие сотрудников в системе Wiki&lt;br /&gt;&lt;br /&gt;Как только технология Wiki будет выбрана и внутренняя корпоративная политика выработана, настанет черед последнего шага -- убедить сотрудников пользоваться новой системой для общения. Здесь очень важно учесть, что разные возрастные группы подходят к этому вопросу неодинаково. Поколение Y имеет довольно солидные навыки обращения с современными технологиями и склонно быстро воспринимать все происходящие в них изменения. А вот поколения Х и дети бэби-бума вряд ли сразу ухватятся за Wiki -- здесь не обойтись без дополнительного стимулирования и обучения. Так что ИТ-отделу придется разрабатывать план приобщения к новинке колеблющихся сотрудников.&lt;br /&gt;&lt;br /&gt;Во-первых, классы изучения Wiki дадут пользователям шанс познакомиться с новой системой, что называется, из первых рук и задать вопросы. Во-вторых, ИТ-сотрудники вполне могут обучить премудростям Wiki начальников различного ранга, чтобы затем они смогли руководить внедрением системы в своих подразделениях и следить за соблюдением правил работы в ней. В результате у ИТ-отдела появятся “свои люди” в подразделениях, помогающие разбираться с Wiki на месте и тем самым снизить нагрузку на ИТ-специалистов.&lt;br /&gt;&lt;br /&gt;Хотя первые шаги на этом пути и могут занять массу времени, они вполне себя окупят, так как помогут сотрудникам органично вписать технологию Wiki в свой рабочий процесс. Да и в ИТ-отдел будет поступать меньше вопросов по новой системе. А если всё сделать правильно, внедрение корпоративной Wiki-системы позволит сэкономить время, снизить потоки корпоративной электронной почты и воспрепятствовать снижению производительности труда, если такоовая угроза у вас возникнет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-8013520865082329980?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/8013520865082329980/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=8013520865082329980' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8013520865082329980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8013520865082329980'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/wiki.html' title='Wiki на корпоративной службе'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-1282936253171566267</id><published>2008-09-20T16:53:00.000-07:00</published><updated>2008-09-20T17:01:17.317-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Tools - управление проектами</title><content type='html'>По оценкам компании Gartner, рынок ПО управления проектами и систем Enterprise 2.0 для маленьких команд и компаний сейчас бурно развивается, и лидера на нем нет. Есть много игроков, которые предлагают отличные решения:&lt;br /&gt;&lt;br /&gt;1. &lt;span style="font-weight:bold;"&gt;Basecamp &lt;/span&gt;&lt;br /&gt;лидер в task management, управлении только задачами, только онлайн&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight:bold;"&gt;OpenText &lt;/span&gt;&lt;br /&gt;и другие корпоративные вики-системы для корпоративного знания&lt;br /&gt;&lt;br /&gt;3. &lt;span style="font-weight:bold;"&gt;Jira+Confluence&lt;/span&gt;&lt;br /&gt;для программистов, нет онлайн решения&lt;br /&gt;&lt;br /&gt;4. Zoho Projects - как SaaS/PaaS платформа для небольших команд&lt;br /&gt;&lt;br /&gt;5. Google Sites / Google Apps как решение для некоммерческих проектов&lt;br /&gt;&lt;br /&gt;6. MS Sharepoint - может стать лидером ПО для сотрудничества и управления проектами, но пока что цена внедрения очень высока: нужно серьезное дотачивание продукта в каждом случае.&lt;br /&gt;&lt;br /&gt;7. Новые проекты и продукты: Central Desktop, LongJump, 5PMWeb и другие - судить о которых лучше по их развитию, нежели по функциональным возможностям.&lt;br /&gt;&lt;br /&gt;-- &lt;span style="font-weight:bold;"&gt;comindwork&lt;/span&gt;&lt;br /&gt;http://www.comindwork.ru&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;a href="http://webplanet.ru/knowhow/soft/postnikov/2008/08/27/comindwork.html"&gt;http://webplanet.ru/knowhow/soft/postnikov/2008/08/27/comindwork.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-1282936253171566267?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/1282936253171566267/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=1282936253171566267' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1282936253171566267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1282936253171566267'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/tools.html' title='Tools - управление проектами'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-7457298624135618350</id><published>2008-09-20T16:07:00.000-07:00</published><updated>2008-09-20T16:09:57.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online services'/><category scheme='http://www.blogger.com/atom/ns#' term='Innovations'/><title type='text'>Microsoft Live Labs</title><content type='html'>// &lt;a href="http://internetno.net/2007/10/25/ms-live-labs-review/"&gt;http://internetno.net/2007/10/25/ms-live-labs-review/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;для придумывания всего нового у Microsoft есть т.н. лаборатория, которая так и называется Windows Live Labs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Logo_Listas_Thumbnail&lt;/span&gt;&lt;br /&gt;Listas — это сервис для создания, управления и шаринга списков, заметок и избранных ссылок. Подразумевается, что при помощи сервиса удобно формировать списки покупок, собираться на различные мероприятия и т.д. К созданию списков можно подключать большое число участников, а специальная система оповещения не даст вам пропустить свежие изменения в созданных вами списках. Для более удобной работы со списками и закладками установите тулбар (только для IE) — с его помощью особенно удобно добавлять в ваши списки данные с открытых страниц.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Logo_Deepfish_ThumbnailDeepdish&lt;/span&gt; — это мобильный браузер от Microsoft, который работает под Windows Mobile. Основной фишкой браузера создатели считают новый для браузеров MS принцип рендеринга страниц. Сначала загружается уменьшенная копия сайта, привью, а потом в фоновом режиме увеличивается детализация элементов. Максимальная детализация выводится при выборе пользователем какой-либо части страницы. Именно такая технология рендеринга уже реализована в мультиплатформенном браузере Opera Mini, однако, если точно такое решение будет установлена на каждом новом Windoqws Mobile устройстве, то наступит золотой век мобильного браузинга.&lt;br /&gt;&lt;br /&gt;2007-10-24_220439&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Photosynth&lt;/span&gt; — технология автоматического анализа множества фотографий для воссоздания искусственной 3D-модели мира:&lt;br /&gt;&lt;br /&gt;    Суть технологии заключается в том, что берутся все возможные фотографии мира, анализируются, и затем сопоставляются похожие и на основе всех этих данных строится полная и трёхмерная модель мира. По-крайней мере, той его части, которая была когда-либо сфотографирована. То есть, вы можете посмотреть на Лувр со всех сторон. Увеличить любой его участок - потому что он сфотографирован с любым возможным зумом тысячи раз, а сопоставление уже сделано. И т.п. И все это - автоматически. Никаких тегов и человеческого вмешательства.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Seadragon&lt;/span&gt; — проект компании Microsoft, который призван изменить саму концепцию представления многочисленных пользовательских данных на одном экране вне зависимости от того, огромная ли это плазма на всю стену или 3’’ экран мобильного телефона.&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/8096655137906025271-7457298624135618350?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/7457298624135618350/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=7457298624135618350' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7457298624135618350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7457298624135618350'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/microsoft-live-labs.html' title='Microsoft Live Labs'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4477075414531496208</id><published>2008-09-20T07:28:00.000-07:00</published><updated>2008-09-20T07:37:39.707-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Truncate Log in SQL Server</title><content type='html'>to truncate log using command 'backup log .. with truncate_only' is not enough.&lt;br /&gt;&lt;br /&gt;to truncate log you need:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. execute command&lt;br /&gt;backup log YOUR_DB_NAME with TRUNCATE_ONLY&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;this command removes the inactive part of the log without making a backup copy of it and truncates the log. This option frees space.&lt;br /&gt;NO_LOG and TRUNCATE_ONLY are synonyms.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. execute command&lt;br /&gt;dbcc shrinkfile (YOUR_DB_NAME, 2, NOTRUNCATE)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where '2' defines that we need log file to have size 2Mb&lt;br /&gt;&lt;br /&gt;NOTRUNCATE - Causes the freed file space to be retained in the files.&lt;br /&gt;When NOTRUNCATE is specified along with target_size, the space freed is not released to the operating system. The only effect of the DBCC SHRINKFILE is to relocate used pages from above the target_size line to the front of the file. When NOTRUNCATE is not specified, all freed file space is returned to the operating system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. execute command&lt;br /&gt;dbcc shrinkfile (YOUR_DB_NAME, 2, truncateonly)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;TRUNCATEONLY - Causes any unused space in the files to be released to the operating system and shrinks the file to the last allocated extent, reducing the file size without moving any data. No attempt is made to relocate rows to unallocated pages. target_size is ignored when TRUNCATEONLY is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DBCC commands are perfomed not-immediately and you may not see the changes at once.&lt;br /&gt;&lt;br /&gt;if that commands do not help - repeat steps 1,2,3 again.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;Books Online SQL Server 2000&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4477075414531496208?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4477075414531496208/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4477075414531496208' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4477075414531496208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4477075414531496208'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/truncate-log-in-sql-server.html' title='Truncate Log in SQL Server'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-3080152603144861504</id><published>2008-09-19T02:54:00.000-07:00</published><updated>2008-10-10T18:45:23.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='code snippets'/><title type='text'>Shell execute .NET</title><content type='html'>Shell execute&lt;br /&gt;&lt;br /&gt;System.Diagnostics.Process.Start(strpath)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Read more:&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.thescarms.com/dotnet/Process.aspx"&gt;Launch and monitor external programs from .NET&lt;/a&gt;&lt;br /&gt;Launching an external program.&lt;br /&gt;Start a process and wait until it exits.&lt;br /&gt;Start an invisible process.&lt;br /&gt;Determine when a process exits.&lt;br /&gt;Controlling process input/output.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Launch and monitor external programs from .NET&lt;br /&gt;&lt;br /&gt;VB6 let you launch external programs using the Shell command and you could control the launched program's window style with the windowstyle parameter.&lt;br /&gt;&lt;br /&gt;    lngPID = Shell("c:\...\MyTextFile.txt", vbNormalFocus)&lt;br /&gt;&lt;br /&gt;To wait for the external program to terminate you could use the WaitForSingleObject API (view the VB6 sample). In VB.NET you can use the Microsoft.VisualBasic.Compatibility namespace and still call the Shell command but there's a better way.&lt;br /&gt;&lt;br /&gt;Launching an external program.&lt;br /&gt;&lt;br /&gt;The System.Diagnostics namespace has a Process class you can launch external programs with. You pass in the name of an executable file or a filename with an extension associated with an executable application.&lt;br /&gt;&lt;br /&gt;    System.Diagnostics.Process.Start("c:\...\MyTextFile.txt")&lt;br /&gt;&lt;br /&gt;This code returns a Process object:&lt;br /&gt;&lt;br /&gt;    Dim myProcess As Process = System.Diagnostics.Process.Start("c:\...\MyTextFile.txt")&lt;br /&gt;    MessageBox.Show(myProcess.ProcessName)&lt;br /&gt;&lt;br /&gt;An overloaded Process.Start method takes a ProcessStartInfo parameter that let's you set process initialization values such as the WindowStyle.&lt;br /&gt;&lt;br /&gt;    Dim psInfo As New System.Diagnostics.ProcessStartInfo ("c:\...\MyTextFile.txt")&lt;br /&gt;    psInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal&lt;br /&gt;    Dim myProcess As Process = System.Diagnostics.Process.Start(psInfo)&lt;br /&gt;&lt;br /&gt;Or,&lt;br /&gt;&lt;br /&gt;    Dim myProcess As System.Diagnostics.Process = new System.Diagnostics.Process()&lt;br /&gt;    myProcess.StartInfo.FileName = "c:\...\MyTextFile.txt"&lt;br /&gt;    myProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal&lt;br /&gt;    myProcess.Start&lt;br /&gt;&lt;br /&gt;You can also do all of this through the IDE by dragging a Process component unto your form from the Components area of the Toolbar.&lt;br /&gt;&lt;br /&gt;Start a process and wait until it exits.&lt;br /&gt;&lt;br /&gt;To wait for a launched process to end, call the Process.WaitForExit method. Your application will stop executing until the launched process exits. However, this will cause your application to stop responding to system events, such as the Paint event.&lt;br /&gt;&lt;br /&gt;    '   &lt;br /&gt;    ' Start a new process (Notepad).&lt;br /&gt;    '&lt;br /&gt;    Dim myProcess As Process = System.Diagnostics.Process.Start("MyTextFile.txt")&lt;br /&gt;    '&lt;br /&gt;    ' Wait until it ends.&lt;br /&gt;    '&lt;br /&gt;    myProcess.WaitForExit()&lt;br /&gt;    &lt;br /&gt;    MessageBox.Show("Notepad ended: " &amp; myProcess.ExitTime &amp; "." &amp; _&lt;br /&gt;        System.Environment.NewLine &amp; "Exit Code: " &amp; myProcess.ExitCode)&lt;br /&gt;    '&lt;br /&gt;    ' Close the process to free resources.&lt;br /&gt;    '&lt;br /&gt;    myProcess.Close()&lt;br /&gt;&lt;br /&gt;Start an invisible process.&lt;br /&gt;&lt;br /&gt;You can start a process and get its output without a visible window. This shows how to changes to the System folder, run the DOS Dir "*.exe" command and send the output to the Output.txt file. The Windows XP command shell interpreter recognizes "&amp;&amp;" as a command separator, thus, you can put multiple commands on a single line. The "&gt;&gt;" operator redirects output into a file.&lt;br /&gt;&lt;br /&gt;    Dim myProcess As Process = New Process()&lt;br /&gt;    Dim s As String&lt;br /&gt;    Dim outfile As String = Application.StartupPath &amp; "\Output.txt" &lt;br /&gt;    '&lt;br /&gt;    ' Get the System path. &lt;br /&gt;    '&lt;br /&gt;    Dim sysFolder As String = &lt;br /&gt;       System.Environment.GetFolderPath(Environment.SpecialFolder.System)&lt;br /&gt;    '&lt;br /&gt;    ' Createe the command line. &lt;br /&gt;    '&lt;br /&gt;    myProcess.StartInfo.FileName = "cmd.exe" &lt;br /&gt;    myProcess.StartInfo.Arguments = "/C cd " &amp; sysFolder &amp; _&lt;br /&gt;        " &amp;&amp; dir *.com &gt;&gt; " &amp; Chr(34) &amp; outfile &amp; Chr(34) &amp; " &amp;&amp; exit"&lt;br /&gt;    '&lt;br /&gt;    ' Start the process in a hidden window.&lt;br /&gt;    ' &lt;br /&gt;    myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden &lt;br /&gt;    myProcess.StartInfo.CreateNoWindow = True &lt;br /&gt;    myProcess.Start() &lt;br /&gt;    '&lt;br /&gt;    ' Kill the process if it doesn't finish in one minute.&lt;br /&gt;    ' &lt;br /&gt;    myProcess.WaitForExit(1000) &lt;br /&gt;    If Not myProcess.HasExited Then &lt;br /&gt;        myProcess.Kill() &lt;br /&gt;    End If&lt;br /&gt;    '&lt;br /&gt;    ' Show the results.&lt;br /&gt;    ' &lt;br /&gt;    MessageBox.Show("The 'dir' command window was " &amp; _&lt;br /&gt;        "closed at: " &amp; myProcess.ExitTime &amp; "." &amp; System.Environment.NewLine &amp; _&lt;br /&gt;        "Exit Code: " &amp; myProcess.ExitCode) &lt;br /&gt;    &lt;br /&gt;    myProcess.Close() &lt;br /&gt;&lt;br /&gt;Determine when a process exits.&lt;br /&gt;&lt;br /&gt;The Process class can raise an Exited event when a process ends. You must set the Process.EnableRaisingEvents property True and create an event handler.&lt;br /&gt;&lt;br /&gt;    myProcess.EnableRaisingEvents = True&lt;br /&gt;    '   &lt;br /&gt;    ' Add an event handler.&lt;br /&gt;    '&lt;br /&gt;    AddHandler myProcess.Exited, AddressOf Me.ProcessExited&lt;br /&gt;   &lt;br /&gt;    myProcess.Start()&lt;br /&gt;   &lt;br /&gt;    '&lt;br /&gt;    ' Event handler.&lt;br /&gt;    '&lt;br /&gt;    Friend Sub ProcessExited(ByVal sender As Object, _&lt;br /&gt;            ByVal e As System.EventArgs)&lt;br /&gt;&lt;br /&gt;        Dim myProcess As Process = DirectCast(sender, Process)&lt;br /&gt;&lt;br /&gt;        MessageBox.Show("The process exited, raising " &amp; _&lt;br /&gt;            "the Exited event at: " &amp; myProcess.ExitTime &amp; _&lt;br /&gt;            "." &amp; System.Environment.NewLine &amp; "Exit Code: " &amp; myProcess.ExitCode)&lt;br /&gt;&lt;br /&gt;        myProcess.Close()&lt;br /&gt;    End Sub&lt;br /&gt;&lt;br /&gt;Note, if the launched process hangs your application will too.&lt;br /&gt;&lt;br /&gt;Controlling process input/output.&lt;br /&gt;&lt;br /&gt;You may need to send input directly to a launched process and send the output directly back to your program. For programs that use StdIn, StdOut, and StdErr, such as console applications, you can override the defaults and provide a StreamWriter to write input and StreamReaders to read the StdOut and StdErr outputs.&lt;br /&gt;&lt;br /&gt;.NET uses the Win32 ShellExecute function to launch processes so when you want to reassign I/O streams, you must set the ProcessStartInfo.UseShellExecute property False before starting the process. Also, you must either specify the full path to the file, or the file location must be in the environment path string or in one of the places Windows searches for files.&lt;br /&gt;&lt;br /&gt;    Dim myProcess As Process = New Process()&lt;br /&gt;    Dim s As String myProcess.StartInfo.FileName = "cmd.exe"&lt;br /&gt;    &lt;br /&gt;    myProcess.StartInfo.UseShellExecute = False&lt;br /&gt;    myProcess.StartInfo.CreateNoWindow = True &lt;br /&gt;    myProcess.StartInfo.RedirectStandardInput = True &lt;br /&gt;    myProcess.StartInfo.RedirectStandardOutput = True&lt;br /&gt;    myProcess.StartInfo.RedirectStandardError = True&lt;br /&gt;    myProcess.Start() &lt;br /&gt;&lt;br /&gt;    Dim sIn As StreamWriter = myProcess.StandardInput &lt;br /&gt;    Dim sOut As StreamReader = myProcess.StandardOutput &lt;br /&gt;    Dim sErr As StreamReader = myProcess.StandardError&lt;br /&gt; &lt;br /&gt;    sIn.AutoFlush = True &lt;br /&gt;    sIn.Write("dir c:\windows\system32\*.com" &amp; System.Environment.NewLine) &lt;br /&gt;    sIn.Write("exit" &amp; System.Environment.NewLine) &lt;br /&gt;    s = sOut.ReadToEnd()&lt;br /&gt; &lt;br /&gt;    If Not myProcess.HasExited Then &lt;br /&gt;        myProcess.Kill() &lt;br /&gt;    End If &lt;br /&gt;&lt;br /&gt;    MessageBox.Show("The 'dir' command window was " &amp; _&lt;br /&gt;        closed at: " &amp; myProcess.ExitTime &amp; "." &amp; _ &lt;br /&gt;        System.Environment.NewLine &amp; "Exit Code: " &amp; myProcess.ExitCode) &lt;br /&gt;&lt;br /&gt;    sIn.Close() &lt;br /&gt;    sOut.Close() &lt;br /&gt;    sErr.Close() &lt;br /&gt;    myProcess.Close() &lt;br /&gt;    MessageBox.Show(s) &lt;br /&gt;&lt;br /&gt;For programs that don't use StdIn, you can use the SendKeys method to input keystrokes.&lt;br /&gt;&lt;br /&gt;    Dim myProcess As Process = New Process()&lt;br /&gt;&lt;br /&gt;    myProcess.StartInfo.FileName = "notepad"&lt;br /&gt;    myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal&lt;br /&gt;    myProcess.EnableRaisingEvents = True&lt;br /&gt;&lt;br /&gt;    AddHandler myProcess.Exited, AddressOf Me.SendKeysTestExited&lt;br /&gt;    myProcess.Start()&lt;br /&gt;    '   &lt;br /&gt;    ' Wait until the program is ready for input.&lt;br /&gt;    '&lt;br /&gt;    myProcess.WaitForInputIdle(1000)&lt;br /&gt;&lt;br /&gt;    If myProcess.Responding Then&lt;br /&gt;        System.Windows.Forms.SendKeys.SendWait( _&lt;br /&gt;                "This text was entered using SendKeys.")&lt;br /&gt;    Else&lt;br /&gt;        myProcess.Kill()&lt;br /&gt;    End If&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-3080152603144861504?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/3080152603144861504/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=3080152603144861504' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3080152603144861504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3080152603144861504'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/shell-execute-net.html' title='Shell execute .NET'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-521117793050930514</id><published>2008-09-17T16:52:00.000-07:00</published><updated>2008-09-17T16:57:50.185-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>Send keyboard messages to the program automatically</title><content type='html'>use SendKeys.SendWait and SendKeys.Send methods&lt;br /&gt;&lt;br /&gt;example:&lt;br /&gt;&lt;br /&gt;class SendKeysDemo{     &lt;br /&gt;static void Main()     &lt;br /&gt;{         &lt;br /&gt;// run program - notepad        &lt;br /&gt;Process process = Process.Start("notepad.exe");        &lt;br /&gt;// wait while the program ends initialization&lt;br /&gt;process.WaitForInputIdle();        &lt;br /&gt;// find window of Notepad just run.        &lt;br /&gt;&lt;br /&gt;IntPtr hWndNotepad = FindWindow("Notepad", null);         &lt;br /&gt;// make found window active&lt;br /&gt;SetForegroundWindow(hWndNotepad);         &lt;br /&gt;// send string&lt;br /&gt;SendKeys.SendWait("Hello from GotDotNet.ru !!!");    &lt;br /&gt;}         &lt;br /&gt;&lt;br /&gt;// Export Win32 functions&lt;br /&gt;[DllImport("User32.dll")]     &lt;br /&gt;static extern IntPtr FindWindow(string lpClassName, string lpWindowName);     [DllImport("User32.dll")]     &lt;br /&gt;static extern int SetForegroundWindow(IntPtr hWnd); &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/8096655137906025271-521117793050930514?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/521117793050930514/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=521117793050930514' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/521117793050930514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/521117793050930514'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/send-keyboard-messages-to-program.html' title='Send keyboard messages to the program automatically'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-8540579458955138171</id><published>2008-09-13T15:03:00.000-07:00</published><updated>2008-09-13T15:08:04.249-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server - Blocking'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='References'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>References - Blocking - SQL Server optimization</title><content type='html'>Microsoft KB, TechNet:&lt;br /&gt;-- How to resolve blocking problems that are caused by lock escalation in SQL Server&lt;br /&gt;http://support.microsoft.com/kb/323630/en-us&lt;br /&gt;-- Lock Escalation (Database Engine)&lt;br /&gt;http://msdn.microsoft.com/en-us/library/ms184286.aspx&lt;br /&gt;&lt;br /&gt;-- Minimize Blocking in SQL Server&lt;br /&gt;http://technet.microsoft.com/en-us/magazine/cc434694.aspx&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other sites:&lt;br /&gt;&lt;br /&gt;-- &lt;a href="http://www.nwsummit.com/tech/mssql.html"&gt;Troubleshoot SQL Server Locking&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.nwsummit.com/tech/mssql.html"&gt;http://www.nwsummit.com/tech/mssql.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-8540579458955138171?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/8540579458955138171/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=8540579458955138171' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8540579458955138171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/8540579458955138171'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/references-blocking-sql-server.html' title='References - Blocking - SQL Server optimization'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-7764229794930656000</id><published>2008-09-13T15:00:00.001-07:00</published><updated>2008-09-13T15:01:48.087-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>Understanding and Resolving SQL Server 7.0 or 2000 Blocking Problems</title><content type='html'>// from &lt;a href="http://support.microsoft.com/kb/224453/"&gt;http://support.microsoft.com/kb/224453/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SUMMARY&lt;/span&gt;&lt;br /&gt;This article is an update for SQL Server 7.0 of the following article, which applies to SQL Server 6.x, in the Microsoft Knowledge Base:&lt;br /&gt;162361 (http://support.microsoft.com/kb/162361/EN-US/) INF: Understanding and Resolving SQL Server Blocking Problems&lt;br /&gt;Much of the information contained in the above article has already been updated and included in SQL Server 7.0 Books Online in the "Understanding and Avoiding Blocking" topic. Carefully review this information before proceeding with this article; it will not be repeated here. This article focuses on how to monitor SQL Server to capture pertinent system information and how to analyze that information to successfully resolve blocking issues.&lt;br /&gt;&lt;br /&gt;This article uses the same standard terminology as defined in the above information. In this discussion, the term "connection" refers to a single logged-on session of the database. Each connection appears as a system process ID (SPID). Each of these SPIDs is often referred to as a process, although it is not a separate process context in the usual sense. Rather, each SPID consists of the server resources and data structures necessary to service the requests of a single connection from a given client. A single client application may have one or more connections. From the perspective of SQL Server, there is no difference between multiple connections from a single client application on a single client computer and multiple connections from multiple client applications or multiple client computers. One connection can block another connection, regardless of whether they emanate from the same application or separate applications on two different client computers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-7764229794930656000?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/7764229794930656000/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=7764229794930656000' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7764229794930656000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7764229794930656000'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/understanding-and-resolving-sql-server.html' title='Understanding and Resolving SQL Server 7.0 or 2000 Blocking Problems'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4065835981283845933</id><published>2008-09-13T14:55:00.000-07:00</published><updated>2008-09-13T15:00:06.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>How to resolve blocking problems that are caused by lock escalation in SQL Server</title><content type='html'>// from &lt;a href="http://support.microsoft.com/kb/323630"&gt;http://support.microsoft.com/kb/323630&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;SUMMARY&lt;/span&gt;&lt;br /&gt;Lock escalation is the process of converting many fine-grained locks (such as row or page locks) into table locks. Microsoft SQL Server dynamically determines when to perform lock escalation. When making this decision, SQL Server takes into account the number of locks that are held on a particular scan, the number of locks that are held by the whole transaction, and the memory that is being used for locks in the system as a whole. Typically, SQL Server's default behavior results in lock escalation occurring only at those points where it would improve performance or when you must reduce excessive system lock memory to a more reasonable level. However, some application or query designs may trigger lock escalation at a time when it is not desirable, and the escalated table lock may block other users. This article discusses how to determine whether lock escalation is causing blocking and how to deal with undesirable lock escalation. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;MORE INFORMATION&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How to Determine Whether Lock Escalation Is Causing Blocking&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lock escalation does not cause most blocking problems. To determine whether lock escalation is occurring around the time when you experience blocking issues, start a SQL Profiler trace that includes the Lock:Escalation event. If you do not see any Lock:Escalation events, lock escalation is not occurring on your server and the information in this article does not apply to your situation.&lt;br /&gt;&lt;br /&gt;If lock escalation is occurring, verify that the escalated table lock is blocking other users.&lt;br /&gt;&lt;br /&gt;For more information about how to identify the head blocker and how to identify the lock resource held by the head blocker that is blocking other server process IDs (SPIDs), click the following article number to view the article in the Microsoft Knowledge Base:&lt;br /&gt;224453 (http://support.microsoft.com/kb/224453/) Understanding and resolving SQL Server 7.0 or 2000 blocking problems&lt;br /&gt;If the lock that is blocking other users is anything other than a TAB (table-level) lock with a lock mode of S (shared), or X (exclusive), lock escalation is not the issue. In particular, if the TAB lock is an intent lock (such as a lock mode of IS, IU, or IX), this is not the result of lock escalation. If your blocking problems are not being caused by lock escalation, see the article Q224453 for troubleshooting steps. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;How to Prevent Lock Escalation&lt;/span&gt;&lt;br /&gt;The simplest and safest way to prevent lock escalation is to keep transactions short and to reduce the lock footprint of expensive queries so that the lock escalation thresholds are not exceeded. There are several ways to obtain this goal, many of which are listed:&lt;br /&gt;• Break up large batch operations into several smaller operations. For example, suppose you ran the following query to remove several hundred thousand old records from an audit table, and then you found that it caused a lock escalation that blocked other users:&lt;br /&gt;&lt;br /&gt;DELETE FROM LogMessages WHERE LogDate &lt; '2/1/2002'      &lt;br /&gt;&lt;br /&gt;By removing these records a few hundred at a time, you can dramatically reduce the number of locks that accumulate per transaction and prevent lock escalation. For example:&lt;br /&gt;&lt;br /&gt;SET ROWCOUNT 500&lt;br /&gt;delete_more:&lt;br /&gt;     DELETE FROM LogMessages WHERE LogDate &lt; '2/1/2002'&lt;br /&gt;IF @@ROWCOUNT &gt; 0 GOTO delete_more&lt;br /&gt;SET ROWCOUNT 0&lt;br /&gt;&lt;br /&gt;• Reduce the query's lock footprint by making the query as efficient as possible. Large scans or large numbers of Bookmark Lookups may increase the chance of lock escalation; additionally, it increases the chance of deadlocks, and generally adversely affects concurrency and performance. After you find the query that causes lock escalation, look for opportunities to create new indexes or to add columns to an existing index to remove index or table scans and to maximize the efficiency of index seeks. Consider pasting the query into a Query Analyzer query window to perform an automatic index analysis on it. To do so, on the Query menu, click Index Tuning Wizard in SQL Server 2000, or click Perform Index Analysis in SQL Server 7.0.&lt;br /&gt;&lt;br /&gt;One goal of this optimization is to make index seeks return as few rows as possible to minimize the cost of Bookmark Lookups (maximize the selectivity of the index for the particular query). If SQL Server estimates that a Bookmark Lookup logical operator may return many rows, it may use a PREFETCH to perform the bookmark lookup. If SQL Server does use PREFETCH for a bookmark lookup, it must increase the transaction isolation level of a portion of the query to repeatable read for a portion of the query. This means that what may look similar to a SELECT statement at a read-committed isolation level may acquire many thousands of key locks (on both the clustered index and one nonclustered index), which can cause such a query to exceed the lock escalation thresholds. This is especially important if you find that the escalated lock is a shared table lock, which, however, is not commonly seen at the default read-committed isolation level. If a Bookmark Lookup WITH PREFETCH clause is causing the escalation, consider adding additional columns to the nonclustered index that appears in the Index Seek or the Index Scan logical operator below the Bookmark Lookup logical operator in the query plan. It may be possible to create a covering index (an index that includes all columns in a table that were used in the query), or at least an index that covers the columns that were used for join criteria or in the WHERE clause if including everything in the select column list is impractical.&lt;br /&gt;&lt;br /&gt;A Nested Loop join may also use PREFETCH, and this causes the same locking behavior.&lt;br /&gt;&lt;br /&gt;For more information, click the following article number to view the article in the Microsoft Knowledge Base:&lt;br /&gt;260652 (http://support.microsoft.com/kb/260652/) Nested loop join that uses a "BOOKMARK LOOKUP ...WITH PREFETCH" may hold locks longer&lt;br /&gt;• Lock escalation cannot occur if a different SPID is currently holding an incompatible table lock. Lock escalation always escalates to a table lock, and never to page locks. Additionally, if a lock escalation attempt fails because another SPID holds an incompatible TAB lock, the query that attempted escalation does not block while waiting for a TAB lock. Instead, it continues to acquire locks at its original, more granular level (row, key, or page), periodically making additional escalation attempts. Therefore, one method to prevent lock escalation on a particular table is to acquire and to hold a lock on a different connection that is not compatible with the escalated lock type. An IX (intent exclusive) lock at the table level does not lock any rows or pages, but it is still not compatible with an escalated S (shared) or X (exclusive) TAB lock. For example, assume that you must run a batch job that modifies a large number of rows in the mytable table and that has caused blocking that occurs because of lock escalation. If this job always completes in less than an hour, you might create a Transact-SQL job that contains the following code, and schedule the new job to start several minutes before the batch job's start time:&lt;br /&gt;&lt;br /&gt;BEGIN TRAN&lt;br /&gt;SELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0&lt;br /&gt;WAITFOR DELAY '1:00:00'&lt;br /&gt;COMMIT TRAN    &lt;br /&gt;&lt;br /&gt;This query acquires and holds an IX lock on mytable for one hour, which prevents lock escalation on the table during that time. This batch does not modify any data or block other queries (unless the other query forces a table lock with the TABLOCK hint or if an administrator has disabled page or row locks by using an sp_indexoption stored procedure).&lt;br /&gt;Additionally, you can disable lock escalation by enabling trace flag 1211. However, this trace flag disables all lock escalation globally in the instance of SQL Server. Lock escalation serves a very useful purpose in SQL Server by maximizing the efficiency of queries that are otherwise slowed down by the overhead of acquiring and releasing several thousands of locks. Lock escalation also helps to minimize the required memory to keep track of locks. The memory that SQL Server can dynamically allocate for lock structures is finite, so if you disable lock escalation and the lock memory grows large enough, attempts to allocate additional locks for any query may fail and the following error occurs:&lt;br /&gt;&lt;br /&gt;Error: 1204, Severity: 19, State: 1&lt;br /&gt;The SQL Server cannot obtain a LOCK resource at this time. Rerun your statement when there are fewer active users or ask the system administrator to check the SQL Server lock and memory configuration.&lt;br /&gt;Note When a "1204" error occurs, it stops the processing of the current statement and causes a rollback of the active transaction. The rollback itself may block users or lead to a long database recovery time if you restart the SQL Server service.&lt;br /&gt;&lt;br /&gt;Using a lock hint such as ROWLOCK only alters the initial lock plan. Lock hints do not prevent lock escalation.&lt;br /&gt;&lt;br /&gt;The other methods of preventing lock escalation that are discussed earlier in this article are better options than enabling the trace flag. Additionally, the other methods generally result in better performance for the query than disabling lock escalation for the whole instance. Microsoft recommends enabling this trace flag only to mitigate severe blocking that is caused by lock escalation while other options, such as those discussed earlier in this article, are being investigated. To enable a trace flag so that it is turned on whenever SQL Server is started, add it as a server startup parameter.&lt;br /&gt;&lt;br /&gt;To add a server startup parameter, right-click the server in SQL Enterprise Manager, click Properties, and then on the General tab, click Startup Parameters, and then add the following parameter (exactly as shown):&lt;br /&gt;-T1211&lt;br /&gt;You must cycle the SQL Server service for a new startup parameter to take effect. If you run the following query in Query Analyzer the trace flag takes effect immediately:&lt;br /&gt;&lt;br /&gt;DBCC TRACEON (1211, -1)    &lt;br /&gt;&lt;br /&gt;However, if you do not add the -T1211 startup parameter, the effect of a traceon command is lost when the SQL Server service is cycled. Turning on the trace flag prevents any future lock escalations, but it does not reverse any lock escalations that have already occurred in an active transaction.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4065835981283845933?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4065835981283845933/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4065835981283845933' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4065835981283845933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4065835981283845933'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/how-to-resolve-blocking-problems-that.html' title='How to resolve blocking problems that are caused by lock escalation in SQL Server'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4225547348004788404</id><published>2008-09-12T15:25:00.001-07:00</published><updated>2008-09-12T15:25:41.383-07:00</updated><title type='text'>Hit Counters and Statistics</title><content type='html'>There are a number of sites that offer free services to help you track visits to your site. &lt;br /&gt;&lt;br /&gt;    * Google Analytics&lt;br /&gt;    * Site Meter&lt;br /&gt;    * Bravenet Hit Counter&lt;br /&gt;    * FreeStats&lt;br /&gt;    * Easy Hit Counters&lt;br /&gt;    * StatCounter&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4225547348004788404?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4225547348004788404/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4225547348004788404' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4225547348004788404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4225547348004788404'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/hit-counters-and-statistics.html' title='Hit Counters and Statistics'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-3317189907744520663</id><published>2008-09-04T17:01:00.000-07:00</published><updated>2008-09-04T17:07:07.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>SQL Server Optimization - References</title><content type='html'>&lt;a href="http://blogs.msdn.com/queryoptteam/"&gt;http://blogs.msdn.com/queryoptteam/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-- &lt;a href="http://www.microsoft.com/technet/prodtechnol/sql/2005/impprfiv.mspx"&gt;Improving Performance with SQL Server 2005 Indexed Views&lt;/a&gt;&lt;br /&gt;Published: May 1, 2005&lt;br /&gt;By Author: Eric Hanson and Contributors: Gail Erickson, Lubor Kollar, Jason Ward&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-3317189907744520663?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/3317189907744520663/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=3317189907744520663' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3317189907744520663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/3317189907744520663'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/sql-server-optimization-references.html' title='SQL Server Optimization - References'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-5745666509787084691</id><published>2008-09-04T16:50:00.000-07:00</published><updated>2008-09-04T16:51:10.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><title type='text'>SQL Server 2000 Optimization Tips - 2</title><content type='html'>// from &lt;a href="http://www.mssqlcity.com/Tips/tipSQL2000.htm"&gt;http://www.mssqlcity.com/Tips/tipSQL2000.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQL Server 2000 Optimization Tips&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * For the very large databases, use distributed partitioned views to partition tables horizontally across multiple servers.&lt;br /&gt;      This is a new SQL Server 2000 feature, which is available when using SQL Server 2000 Enterprise Edition only. Due to distributed partitioned views, SQL Server 2000 now on the first place in the TPC-C tests.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use indexed views to increase the speed of your queries.&lt;br /&gt;      The result set of the indexed view is persist in the database and indexed for fast access. Because indexed views depend on base tables, you should create indexed views with SCHEMABINDING option to prevent the table or column modification that would invalidate the view. Furthermore, using views instead of heavy-duty queries can reduce network traffic and can be used to facilitate permission management.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Consider using the WITH SORT_IN_TEMPDB option when you create an index and when tempdb is on a different set of disks than the user database.&lt;br /&gt;      Using this option can reduce the time it takes to create an index, but increases the amount of disk space used to create an index.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * You can specify whether the index keys are stored in ascending or descending order.&lt;br /&gt;      For example, using the CREATE INDEX statement with the DESC option (descending order) can increase the speed of queries, which return rows in the descending order. By default, the ascending order is used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Consider creating index on computed columns.&lt;br /&gt;      In SQL Server 2000, you can create indexes on computed columns. To create index on computed column, the computed column must be deterministic, precise, and cannot has text, ntext, or image data type.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Consider setting the 'text in row' table option.&lt;br /&gt;      The text, ntext, and image values are stored on the Text/Image pages, by default. This option specifies that small text, ntext, and image values will be placed on the Data pages with other data values in a data row. This can increase the speed of read and write operations and reduce the amount of space used to store small text, ntext, and image data values. You can set the 'text in row' table option by using the sp_tableoption stored procedure.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use table variables instead of temporary tables.&lt;br /&gt;      The table variable is a new SQL Server 2000 feature. The table variables require less locking and logging resources than temporary tables, so table variables should be used whenever possible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use cascading referential integrity constraints instead of triggers, whenever possible.&lt;br /&gt;      For example, if you need to make cascading deletes or updates, you can specify ON DELETE or ON UPDATE clause in the REFERENCES clause of the CREATE TABLE and ALTER TABLE statements. The cascading referential integrity constraints are much more efficient than triggers and can boost performance.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * If you work with SQL Server 2000 Enterprise Edition use SAN (System Area Network) protocols instead of LAN (Local Area Network) or WAN (Wide Area Network).&lt;br /&gt;      SANs are more reliable than LANs or WANs and support high levels of messaging traffic by lowering CPU loads and message latency.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use user-defined functions to encapsulate code for reuse.&lt;br /&gt;      The user-defined functions (UDFs) contain one or more Transact-SQL statements that can be used to encapsulate code for reuse. Using UDFs can reduce network traffic.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Set the 'awe enabled' server configuration option to 1 if you work with SQL Server 2000 Enterprise or Developer edition and have more than 4 gigabytes (GB) of physical memory.&lt;br /&gt;      Because SQL Server 2000 can support up to a maximum of 64 gigabytes (GB) of physical memory, you can purchase the appropriate server box and get all advantages of it hardware platform.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use the DBCC CHECKCONSTRAINTS statement if you need to check the integrity of a specified constraint or all constraints on a specified table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * Use the DBCC INDEXDEFRAG statement to defragment clustered and secondary indexes of the specified table or view.&lt;br /&gt;      DBCC INDEXDEFRAG statement is an online operation. Unlike DBCC DBREINDEX, DBCC INDEXDEFRAG does not hold locks long term and thus will not block running queries or updates. So, try to use the DBCC INDEXDEFRAG command instead of DBCC DBREINDEX, whenever possible.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      *****&lt;br /&gt;&lt;br /&gt;    * You can use INSTEAD OF triggers to perform enhance integrity checks on the data values.&lt;br /&gt;      The INSTEAD OF trigger is a new SQL Server 2000 feature. These triggers can be used to enforce business rules when constraints cannot be used.&lt;br /&gt;&lt;br /&gt;      Note. Because triggers are more resource expensive, use constrains instead of triggers, whenever possible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-5745666509787084691?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/5745666509787084691/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=5745666509787084691' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5745666509787084691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5745666509787084691'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/sql-server-2000-optimization-tips-2.html' title='SQL Server 2000 Optimization Tips - 2'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-6513951937139273764</id><published>2008-09-04T16:36:00.000-07:00</published><updated>2008-09-04T16:43:06.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>SEO: Google links exchange</title><content type='html'>I read many articles saying about Google would change its algorythms for evaluating Page Rank and links exchange will not work so weel as now.&lt;br /&gt;the main idea that Google will ignore or ban the links to my site if the link is not inapriate .&lt;br /&gt;i just think about simple example:&lt;br /&gt;i have 2 sites which are far from each other about topics.&lt;br /&gt;One site sells aquariums and another site is site of web studio.&lt;br /&gt;and Web studio site has link to Aquarium site as part of its portfolio.&lt;br /&gt;The site about aquariums has inbound link from web studio site but the whole site of web studio says nothing about aquariums.&lt;br /&gt;is it considered as a bad link?&lt;br /&gt;&lt;br /&gt;I guess how they will distinct bad and good inbound links ?&lt;br /&gt;or it is another tricks from google, when they say something about improvement and big ideas but it works as usual..&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-6513951937139273764?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/6513951937139273764/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=6513951937139273764' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6513951937139273764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6513951937139273764'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/seo-google-links-exchange.html' title='SEO: Google links exchange'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-6491294234208159715</id><published>2008-09-04T16:32:00.000-07:00</published><updated>2008-09-14T06:34:53.527-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>SQL Server 2000 Optimization Tips</title><content type='html'>Original:&lt;br /&gt;&lt;br /&gt;January 20, 2001&lt;br /&gt;SQL Server 2000 Optimization Tips&lt;br /&gt;By Sergey Vartanyan&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.databasejournal.com/features/mssql/article.php/1442691"&gt;http://www.databasejournal.com/features/mssql/article.php/1442691&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;There are not so many differences in the internal architecture between SQL Server 7.0 and SQL Server 2000, as between SQL Server 6.5 and SQL Server 7.0. SQL Server 2000 has the same features as SQL Server 7.0: autogrow features, new storage engine, complete row level locking and so on. So, you can use all optimization tips from my previous article for SQL Server 7.0 (see this article): Some tips about database optimization for SQL Server 7.0&lt;br /&gt;&lt;br /&gt;But there are some new features in SQL Server 2000, which you can use to increase performance of your databases.&lt;br /&gt;&lt;br /&gt;In this article, I want to tell you, how you can increase performance of your databases by setting some options and configuring some parameters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Distributed partitioned views&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Distributed partitioned views allows you to partition tables horizontally across multiple servers. So, you can scale out one database server to a group of database servers that cooperate to provide the same performance levels as a cluster of database servers.&lt;br /&gt;&lt;br /&gt;Due to distributed partitioned views, SQL Server 2000 now on the first place in the tpc-c tests.&lt;br /&gt;&lt;br /&gt;For more information about tpc-c tests, see: TPC-C tests&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Indexed Views&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The new SQL Server 2000 feature are indexed views. You can create index on the view, and the result set of the view will be stored in the database. So, you can significantly improve the performance of an application where queries frequently perform certain joins or aggregations. Wnen you will modify the base table, the modifications will be automatically reflected in the view.&lt;br /&gt;&lt;br /&gt;You should specify the SCHEMABINDING option for a CREATE VIEW statement, if you want to have a indexed view.&lt;br /&gt;&lt;br /&gt;For more information, see: SQL Views&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Using Tempdb for CREATE INDEX statement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When you create an index, you can specify WITH SORT_IN_TEMPDB option of the CREATE INDEX statement, which directs the database engine to use tempdb as a work area for the sorts required to build an index. This option reduces the index creation time when tempdb is on a different set of disks than the user database, but increases the amount of disk space used to create an index.&lt;br /&gt;&lt;br /&gt;For more information, see: tempdb and Index Creation&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Setting index order with CREATE INDEX statement&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can specify ascending or descending order with CREATE INDEX statement. The default is ascending order.&lt;br /&gt;&lt;br /&gt;For more information, see: Table Indexes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Creating index defined on computed columns&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In SQL Server 2000, you can create indexes on computed columns. The computed column must be deterministic, precise, and must not contain text, ntext, or image columns. The UNIQUE or PRIMARY KEY can also contain a computed column.&lt;br /&gt;&lt;br /&gt;For more information, see: CREATE INDEX&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Text in Row Data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;SQL Server 2000 has eight types of pages in the data files. There are:&lt;br /&gt;&lt;br /&gt;    * Data pages&lt;br /&gt;    * Index pages&lt;br /&gt;    * Text/Image pages&lt;br /&gt;    * Global Allocation Map, Secondary Global Allocation Map pages&lt;br /&gt;    * Pages Free Space&lt;br /&gt;    * Index Allocation Map pages&lt;br /&gt;    * Bulk Changed Map pages&lt;br /&gt;    * Differential Changed Map pages&lt;br /&gt;&lt;br /&gt;So, text and image values are stored on the Text/Image pages separately from the other data, stored on the Data pages.&lt;br /&gt;&lt;br /&gt;SQL Server 2000 now supports a text in row table option that specifies that small text, ntext, and image values be placed in the Data pages with other data values in the same data row instead of Text/Image pages. This increases the speed of read and write operations and reduces the amount of space used to store small text, ntext, and image data values.&lt;br /&gt;&lt;br /&gt;You can set a text in row table option with sp_tableoption stored procedure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-6491294234208159715?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/6491294234208159715/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=6491294234208159715' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6491294234208159715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/6491294234208159715'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/sql-server-2000-optimization-tips.html' title='SQL Server 2000 Optimization Tips'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4761449090463337629</id><published>2008-09-04T14:05:00.000-07:00</published><updated>2008-09-04T14:35:21.668-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IT management'/><title type='text'>The Joel Test: 12 Steps to Better Code</title><content type='html'>The Joel Test: 12 Steps to Better Code&lt;br /&gt;By Joel Spolsky&lt;br /&gt;Wednesday, August 09, 2000&lt;br /&gt;&lt;br /&gt;// from &lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;http://www.joelonsoftware.com/articles/fog0000000043.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Joel Test&lt;br /&gt;&lt;br /&gt;   1. Do you use source control?&lt;br /&gt;   2. Can you make a build in one step?&lt;br /&gt;   3. Do you make daily builds?&lt;br /&gt;   4. Do you have a bug database?&lt;br /&gt;   5. Do you fix bugs before writing new code?&lt;br /&gt;   6. Do you have an up-to-date schedule?&lt;br /&gt;   7. Do you have a spec?&lt;br /&gt;   8. Do programmers have quiet working conditions?&lt;br /&gt;   9. Do you use the best tools money can buy?&lt;br /&gt;  10. Do you have testers?&lt;br /&gt;  11. Do new candidates write code during their interview?&lt;br /&gt;  12. Do you do hallway usability testing? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Do you use source control?&lt;/span&gt;&lt;br /&gt;I've used commercial source control packages, and I've used CVS, which is free, and let me tell you, CVS is fine. But if you don't have source control, you're going to stress out trying to get programmers to work together. Programmers have no way to know what other people did. Mistakes can't be rolled back easily. The other neat thing about source control systems is that the source code itself is checked out on every programmer's hard drive -- I've never heard of a project using source control that lost a lot of code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Can you make a build in one step?&lt;/span&gt;&lt;br /&gt;By this I mean: how many steps does it take to make a shipping build from the latest source snapshot? On good teams, there's a single script you can run that does a full checkout from scratch, rebuilds every line of code, makes the EXEs, in all their various versions, languages, and #ifdef combinations, creates the installation package, and creates the final media -- CDROM layout, download website, whatever.&lt;br /&gt;&lt;br /&gt;If the process takes any more than one step, it is prone to errors. And when you get closer to shipping, you want to have a very fast cycle of fixing the "last" bug, making the final EXEs, etc. If it takes 20 steps to compile the code, run the installation builder, etc., you're going to go crazy and you're going to make silly mistakes.&lt;br /&gt;&lt;br /&gt;For this very reason, the last company I worked at switched from WISE to InstallShield: we required that the installation process be able to run, from a script, automatically, overnight, using the NT scheduler, and WISE couldn't run from the scheduler overnight, so we threw it out. (The kind folks at WISE assure me that their latest version does support nightly builds.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Do you make daily builds?&lt;/span&gt;&lt;br /&gt;When you're using source control, sometimes one programmer accidentally checks in something that breaks the build. For example, they've added a new source file, and everything compiles fine on their machine, but they forgot to add the source file to the code repository. So they lock their machine and go home, oblivious and happy. But nobody else can work, so they have to go home too, unhappy.&lt;br /&gt;&lt;br /&gt;Breaking the build is so bad (and so common) that it helps to make daily builds, to insure that no breakage goes unnoticed. On large teams, one good way to insure that breakages are fixed right away is to do the daily build every afternoon at, say, lunchtime. Everyone does as many checkins as possible before lunch. When they come back, the build is done. If it worked, great! Everybody checks out the latest version of the source and goes on working. If the build failed, you fix it, but everybody can keep on working with the pre-build, unbroken version of the source.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Do you have a bug database?&lt;/span&gt;&lt;br /&gt;I don't care what you say. If you are developing code, even on a team of one, without an organized database listing all known bugs in the code, you are going to ship low quality code. Lots of programmers think they can hold the bug list in their heads. Nonsense. I can't remember more than two or three bugs at a time, and the next morning, or in the rush of shipping, they are forgotten. You absolutely have to keep track of bugs formally.&lt;br /&gt;&lt;br /&gt;Bug databases can be complicated or simple. A minimal useful bug database must include the following data for every bug:&lt;br /&gt;&lt;br /&gt;    * complete steps to reproduce the bug&lt;br /&gt;    * expected behavior&lt;br /&gt;    * observed (buggy) behavior&lt;br /&gt;    * who it's assigned to&lt;br /&gt;    * whether it has been fixed or not &lt;br /&gt;&lt;br /&gt;If the complexity of bug tracking software is the only thing stopping you from tracking your bugs, just make a simple 5 column table with these crucial fields and start using it.&lt;br /&gt;&lt;br /&gt;For more on bug tracking, read Painless Bug Tracking.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Do you fix bugs before writing new code?&lt;/span&gt;&lt;br /&gt;The very first version of Microsoft Word for Windows was considered a "death march" project. It took forever. It kept slipping. The whole team was working ridiculous hours, the project was delayed again, and again, and again, and the stress was incredible. When the dang thing finally shipped, years late, Microsoft sent the whole team off to Cancun for a vacation, then sat down for some serious soul-searching.&lt;br /&gt;&lt;br /&gt;What they realized was that the project managers had been so insistent on keeping to the "schedule" that programmers simply rushed through the coding process, writing extremely bad code, because the bug fixing phase was not a part of the formal schedule. There was no attempt to keep the bug-count down. Quite the opposite. The story goes that one programmer, who had to write the code to calculate the height of a line of text, simply wrote "return 12;" and waited for the bug report to come in about how his function is not always correct. The schedule was merely a checklist of features waiting to be turned into bugs. In the post-mortem, this was referred to as "infinite defects methodology".&lt;br /&gt;&lt;br /&gt;To correct the problem, Microsoft universally adopted something called a "zero defects methodology". Many of the programmers in the company giggled, since it sounded like management thought they could reduce the bug count by executive fiat. Actually, "zero defects" meant that at any given time, the highest priority is to eliminate bugs before writing any new code. Here's why. &lt;br /&gt;&lt;br /&gt;In general, the longer you wait before fixing a bug, the costlier (in time and money) it is to fix.&lt;br /&gt;&lt;br /&gt;For example, when you make a typo or syntax error that the compiler catches, fixing it is basically trivial.&lt;br /&gt;&lt;br /&gt;When you have a bug in your code that you see the first time you try to run it, you will be able to fix it in no time at all, because all the code is still fresh in your mind.&lt;br /&gt;&lt;br /&gt;If you find a bug in some code that you wrote a few days ago, it will take you a while to hunt it down, but when you reread the code you wrote, you'll remember everything and you'll be able to fix the bug in a reasonable amount of time.&lt;br /&gt;&lt;br /&gt;But if you find a bug in code that you wrote a few months ago, you'll probably have forgotten a lot of things about that code, and it's much harder to fix. By that time you may be fixing somebody else's code, and they may be in Aruba on vacation, in which case, fixing the bug is like science: you have to be slow, methodical, and meticulous, and you can't be sure how long it will take to discover the cure.&lt;br /&gt;&lt;br /&gt;And if you find a bug in code that has already shipped, you're going to incur incredible expense getting it fixed.&lt;br /&gt;&lt;br /&gt;That's one reason to fix bugs right away: because it takes less time. There's another reason, which relates to the fact that it's easier to predict how long it will take to write new code than to fix an existing bug. For example, if I asked you to predict how long it would take to write the code to sort a list, you could give me a pretty good estimate. But if I asked you how to predict how long it would take to fix that bug where your code doesn't work if Internet Explorer 5.5 is installed, you can't even guess, because you don't know (by definition) what's causing the bug. It could take 3 days to track it down, or it could take 2 minutes.&lt;br /&gt;&lt;br /&gt;What this means is that if you have a schedule with a lot of bugs remaining to be fixed, the schedule is unreliable. But if you've fixed all the known bugs, and all that's left is new code, then your schedule will be stunningly more accurate.&lt;br /&gt;&lt;br /&gt;Another great thing about keeping the bug count at zero is that you can respond much faster to competition. Some programmers think of this as keeping the product ready to ship at all times. Then if your competitor introduces a killer new feature that is stealing your customers, you can implement just that feature and ship on the spot, without having to fix a large number of accumulated bugs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. Do you have an up-to-date schedule?&lt;/span&gt;&lt;br /&gt;Which brings us to schedules. If your code is at all important to the business, there are lots of reasons why it's important to the business to know when the code is going to be done. Programmers are notoriously crabby about making schedules. "It will be done when it's done!" they scream at the business people.&lt;br /&gt;&lt;br /&gt;Unfortunately, that just doesn't cut it. There are too many planning decisions that the business needs to make well in advance of shipping the code: demos, trade shows, advertising, etc. And the only way to do this is to have a schedule, and to keep it up to date.&lt;br /&gt;&lt;br /&gt;The other crucial thing about having a schedule is that it forces you to decide what features you are going to do, and then it forces you to pick the least important features and cut them rather than slipping into featuritis (a.k.a. scope creep).&lt;br /&gt;&lt;br /&gt;Keeping schedules does not have to be hard. Read my article Painless Software Schedules, which describes a simple way to make great schedules.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7. Do you have a spec?&lt;/span&gt;&lt;br /&gt;Writing specs is like flossing: everybody agrees that it's a good thing, but nobody does it. &lt;br /&gt;&lt;br /&gt;I'm not sure why this is, but it's probably because most programmers hate writing documents. As a result, when teams consisting solely of programmers attack a problem, they prefer to express their solution in code, rather than in documents. They would much rather dive in and write code than produce a spec first.&lt;br /&gt;&lt;br /&gt;At the design stage, when you discover problems, you can fix them easily by editing a few lines of text. Once the code is written, the cost of fixing problems is dramatically higher, both emotionally (people hate to throw away code) and in terms of time, so there's resistance to actually fixing the problems. Software that wasn't built from a spec usually winds up badly designed and the schedule gets out of control.  This seems to have been the problem at Netscape, where the first four versions grew into such a mess that management stupidly decided to throw out the code and start over. And then they made this mistake all over again with Mozilla, creating a monster that spun out of control and took several years to get to alpha stage.&lt;br /&gt;&lt;br /&gt;My pet theory is that this problem can be fixed by teaching programmers to be less reluctant writers by sending them off to take an intensive course in writing. Another solution is to hire smart program managers who produce the written spec. In either case, you should enforce the simple rule "no code without spec".&lt;br /&gt;&lt;br /&gt;Learn all about writing specs by reading my 4-part series.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;8. Do programmers have quiet working conditions?&lt;/span&gt;&lt;br /&gt;There are extensively documented productivity gains provided by giving knowledge workers space, quiet, and privacy. The classic software management book Peopleware documents these productivity benefits extensively.&lt;br /&gt;&lt;br /&gt;Here's the trouble. We all know that knowledge workers work best by getting into "flow", also known as being "in the zone", where they are fully concentrated on their work and fully tuned out of their environment. They lose track of time and produce great stuff through absolute concentration. This is when they get all of their productive work done. Writers, programmers, scientists, and even basketball players will tell you about being in the zone.&lt;br /&gt;&lt;br /&gt;The trouble is, getting into "the zone" is not easy. When you try to measure it, it looks like it takes an average of 15 minutes to start working at maximum productivity. Sometimes, if you're tired or have already done a lot of creative work that day, you just can't get into the zone and you spend the rest of your work day fiddling around, reading the web, playing Tetris.&lt;br /&gt;&lt;br /&gt;The other trouble is that it's so easy to get knocked out of the zone. Noise, phone calls, going out for lunch, having to drive 5 minutes to Starbucks for coffee, and interruptions by coworkers -- especially interruptions by coworkers -- all knock you out of the zone. If a coworker asks you a question, causing a 1 minute interruption, but this knocks you out of the zone badly enough that it takes you half an hour to get productive again, your overall productivity is in serious trouble. If you're in a noisy bullpen environment like the type that caffeinated dotcoms love to create, with marketing guys screaming on the phone next to programmers, your productivity will plunge as knowledge workers get interrupted time after time and never get into the zone.&lt;br /&gt;&lt;br /&gt;With programmers, it's especially hard. Productivity depends on being able to juggle a lot of little details in short term memory all at once. Any kind of interruption can cause these details to come crashing down. When you resume work, you can't remember any of the details (like local variable names you were using, or where you were up to in implementing that search algorithm) and you have to keep looking these things up, which slows you down a lot until you get back up to speed.&lt;br /&gt;&lt;br /&gt;Here's the simple algebra. Let's say (as the evidence seems to suggest) that if we interrupt a programmer, even for a minute, we're really blowing away 15 minutes of productivity. For this example, lets put two programmers, Jeff and Mutt, in open cubicles next to each other in a standard Dilbert veal-fattening farm. Mutt can't remember the name of the Unicode version of the strcpy function. He could look it up, which takes 30 seconds, or he could ask Jeff, which takes 15 seconds. Since he's sitting right next to Jeff, he asks Jeff. Jeff gets distracted and loses 15 minutes of productivity (to save Mutt 15 seconds).&lt;br /&gt;&lt;br /&gt;Now let's move them into separate offices with walls and doors. Now when Mutt can't remember the name of that function, he could look it up, which still takes 30 seconds, or he could ask Jeff, which now takes 45 seconds and involves standing up (not an easy task given the average physical fitness of programmers!). So he looks it up. So now Mutt loses 30 seconds of productivity, but we save 15 minutes for Jeff. Ahhh!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;9. Do you use the best tools money can buy?&lt;/span&gt;&lt;br /&gt;Writing code in a compiled language is one of the last things that still can't be done instantly on a garden variety home computer. If your compilation process takes more than a few seconds, getting the latest and greatest computer is going to save you time. If compiling takes even 15 seconds, programmers will get bored while the compiler runs and switch over to reading The Onion, which will suck them in and kill hours of productivity.&lt;br /&gt;&lt;br /&gt;Debugging GUI code with a single monitor system is painful if not impossible. If you're writing GUI code, two monitors will make things much easier.&lt;br /&gt;&lt;br /&gt;Most programmers eventually have to manipulate bitmaps for icons or toolbars, and most programmers don't have a good bitmap editor available. Trying to use Microsoft Paint to manipulate bitmaps is a joke, but that's what most programmers have to do.&lt;br /&gt;&lt;br /&gt;At my last job, the system administrator kept sending me automated spam complaining that I was using more than ... get this ... 220 megabytes of hard drive space on the server. I pointed out that given the price of hard drives these days, the cost of this space was significantly less than the cost of the toilet paper I used. Spending even 10 minutes cleaning up my directory would be a fabulous waste of productivity.&lt;br /&gt;&lt;br /&gt;Top notch development teams don't torture their programmers. Even minor frustrations caused by using underpowered tools add up, making programmers grumpy and unhappy. And a grumpy programmer is an unproductive programmer.&lt;br /&gt;&lt;br /&gt;To add to all this... programmers are easily bribed by giving them the coolest, latest stuff. This is a far cheaper way to get them to work for you than actually paying competitive salaries!&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;10. Do you have testers?&lt;/span&gt;&lt;br /&gt;If your team doesn't have dedicated testers, at least one for every two or three programmers, you are either shipping buggy products, or you're wasting money by having $100/hour programmers do work that can be done by $30/hour testers. Skimping on testers is such an outrageous false economy that I'm simply blown away that more people don't recognize it.&lt;br /&gt;&lt;br /&gt;Read Top Five (Wrong) Reasons You Don't Have Testers, an article I wrote about this subject.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;11. Do new candidates write code during their interview?&lt;/span&gt;&lt;br /&gt;Would you hire a magician without asking them to show you some magic tricks? Of course not.&lt;br /&gt;&lt;br /&gt;Would you hire a caterer for your wedding without tasting their food? I doubt it. (Unless it's Aunt Marge, and she would hate you forever if you didn't let her make her "famous" chopped liver cake).&lt;br /&gt;&lt;br /&gt;Yet, every day, programmers are hired on the basis of an impressive resumé or because the interviewer enjoyed chatting with them. Or they are asked trivia questions ("what's the difference between CreateDialog() and DialogBox()?") which could be answered by looking at the documentation. You don't care if they have memorized thousands of trivia about programming, you care if they are able to produce code. Or, even worse, they are asked "AHA!" questions: the kind of questions that seem easy when you know the answer, but if you don't know the answer, they are impossible.&lt;br /&gt;&lt;br /&gt;Please, just stop doing this. Do whatever you want during interviews, but make the candidate write some code. (For more advice, read my Guerrilla Guide to Interviewing.)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;12. Do you do hallway usability testing?&lt;/span&gt;&lt;br /&gt;A hallway usability test is where you grab the next person that passes by in the hallway and force them to try to use the code you just wrote. If you do this to five people, you will learn 95% of what there is to learn about usability problems in your code.&lt;br /&gt;&lt;br /&gt;Good user interface design is not as hard as you would think, and it's crucial if you want customers to love and buy your product. You can read my free online book on UI design, a short primer for programmers.&lt;br /&gt;&lt;br /&gt;But the most important thing about user interfaces is that if you show your program to a handful of people, (in fact, five or six is enough) you will quickly discover the biggest problems people are having. Read Jakob Nielsen's article explaining why. Even if your UI design skills are lacking, as long as you force yourself to do hallway usability tests, which cost nothing, your UI will be much, much better.&lt;br /&gt;&lt;br /&gt;Four Ways To Use The Joel Test&lt;br /&gt;&lt;br /&gt;   1. Rate your own software organization, and tell me how it rates, so I can gossip.&lt;br /&gt;   2. If you're the manager of a programming team, use this as a checklist to make sure your team is working as well as possible. When you start rating a 12, you can leave your programmers alone and focus full time on keeping the business people from bothering them.&lt;br /&gt;   3. If you're trying to decide whether to take a programming job, ask your prospective employer how they rate on this test. If it's too low, make sure that you'll have the authority to fix these things. Otherwise you're going to be frustrated and unproductive.&lt;br /&gt;   4. If you're an investor doing due diligence to judge the value of a programming team, or if your software company is considering merging with another, this test can provide a quick rule of thumb.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4761449090463337629?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4761449090463337629/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4761449090463337629' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4761449090463337629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4761449090463337629'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/joel-test-12-steps-to-better-code.html' title='The Joel Test: 12 Steps to Better Code'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-4299540756315204687</id><published>2008-09-03T14:18:00.001-07:00</published><updated>2008-09-03T16:11:55.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Geo'/><title type='text'>GEO Distance function in MySQL</title><content type='html'>Returns distance in meters between two geo points defined by their latitude and longitude.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DELIMITER $$;&lt;br /&gt;DROP FUNCTION IF EXISTS Dist$$&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION Dist (lat1 float, lon1 float, lat2 float, lon2 float) &lt;br /&gt;RETURNS float&lt;br /&gt;BEGIN&lt;br /&gt;RETURN 6370.695763 * acos(sin(lat1/57.2958) * sin(lat2/57.2958) + cos(lat1/57.2958) *&lt;br /&gt;cos(lat2/57.2958) *  cos(lon2/57.2958 -lon1/57.2958))&lt;br /&gt;&lt;br /&gt;END $$&lt;br /&gt;DELIMITER ;$$&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;in miles:&lt;/span&gt;&lt;br /&gt;the formula is&lt;br /&gt;3958.5668 * acos(sin(lat1/57.2958) * sin(lat2/57.2958) + cos(lat1/57.2958) *&lt;br /&gt;cos(lat2/57.2958) *  cos(lon2/57.2958 -lon1/57.2958))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- Mathematical Functions in MySQL&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/4.1/en/mathematical-functions.html "&gt;http://dev.mysql.com/doc/refman/4.1/en/mathematical-functions.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html"&gt;CREATE FUNCTION in MySQL - syntax&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html"&gt;http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-4299540756315204687?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/4299540756315204687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=4299540756315204687' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4299540756315204687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/4299540756315204687'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/geo-distance-function-in-mysql.html' title='GEO Distance function in MySQL'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-7547144659254271224</id><published>2008-09-02T11:52:00.000-07:00</published><updated>2008-09-09T07:50:15.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP Net - Run Application (EXE) from ASP.Net C#</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Task: run application from ASP.NET&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;for example,&lt;br /&gt;you have a button on ASP.NET page, when press this button - one application is invoked.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;the code to run application (for example, notepad) is (on C#)&lt;br /&gt;&lt;br /&gt;System.Diagnostics.Process.Start("notepad");&lt;br /&gt;&lt;br /&gt;but the problem is that the application doesn't run, i.e. no window is opened.&lt;br /&gt;&lt;br /&gt;Note that ASP.NET code is executed on the SERVER.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Solution:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ASPNET user under which application is run should have appropriate security settings.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. change local policies for APSNET user:&lt;/span&gt;&lt;br /&gt;in WinXP: run secpol.msc&lt;br /&gt;&lt;br /&gt;go to Local Policies-&gt;User Rights Assignment&lt;br /&gt;&lt;br /&gt;find "Deny logon locally" and remove ASPNET user from it.&lt;br /&gt;also find "Deny logon .. terminal" and remove ASPNET user from it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. Security for files.&lt;/span&gt;&lt;br /&gt;if your application  needs also to work with files (open, save, etc) you have to change security settings for the folders to allow user ASPNET modify nedeed files.&lt;br /&gt;&lt;br /&gt;to do this:&lt;br /&gt;- In Explorer right button mouse click the folder and select "Properties"&lt;br /&gt;- In Security tab, add "ASPNET" in and give desired permissions (Read, Write, Execute, etc).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To test how it works without starting ASP.NET site you can try run in Windows command line:&lt;br /&gt;&lt;br /&gt;runas /user:ASPNET "notepad.exe"&lt;br /&gt;&lt;br /&gt;it asks you for the password of ASPNET user. enter the password. &lt;br /&gt;if everything is done correct you will see opened application (notepad in our example) in new window.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've tried this on my Windows XP Professsional and it worked fine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Read more&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://support.microsoft.com/kb/555134"&gt;Unable to Start a Process from ASP.NET&lt;/a&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/555134"&gt;http://support.microsoft.com/kb/555134&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/en-us/library/aa719560.aspx"&gt;ASP.NET Impersonation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa719560.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa719560.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- &lt;a href="http://support.microsoft.com/kb/895967"&gt;How to configure the process identity for the ASPNET account in ASP.NET 1.1 when you use IIS 5 Isolation mode in IIS 6.0 on Windows Server 2003&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-7547144659254271224?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/7547144659254271224/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=7547144659254271224' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7547144659254271224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/7547144659254271224'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/09/asp-net-run-application-exe-from-aspnet.html' title='ASP Net - Run Application (EXE) from ASP.Net C#'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-1050001620282393908</id><published>2008-08-31T16:59:00.000-07:00</published><updated>2008-09-04T17:06:43.536-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server optimization'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='database optimization'/><title type='text'>How do indexes affect locking and blocking?</title><content type='html'>&lt;b&gt;How do indexes affect locking and blocking?&lt;/b&gt;&lt;br /&gt;&lt;i&gt;// from Hands-On SQL Server – Locking and Blocking – Kalen Delaney&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgb(255, 255, 0);"&gt;In general, having good indexes will help reduce blocking problems, because it will help reduce the overall&lt;/span&gt; &lt;span style="background-color: rgb(255, 255, 0);"&gt;time of query execution. &lt;/span&gt;&lt;br /&gt;The faster a query can complete, and the transaction containing it is committed,&lt;br /&gt;the faster any locks acquired can be released. Most serious blocking problems are due to locks being held&lt;br /&gt;for a long time, so anything you can do to minimize the time that locks are held is a good thing.&lt;br /&gt;A related aspect in which proper indexing can help avoid blocking problems can be observed in Hands-On&lt;br /&gt;Exercise #6C. This example shows that without any index, a simple select can block on a row other than the&lt;br /&gt;row it is trying to access. You might think that this wasn’t possible if SQL Server truly supports row&lt;br /&gt;locking, but without an index, SQL Server has no way to know what data is in the locked row, and doesn’t&lt;br /&gt;know whether the locked row is actually the one it needs to access. When we change the query to add a&lt;br /&gt;nonclustered index to the table, the index gives SQL Server enough information to know that it can ignore&lt;br /&gt;the locked row, and directly access the row that is indicated in the WHERE clause of the SELECT&lt;br /&gt;statement.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Hands-On #6C: Use of Index Avoids Blocking&lt;br /&gt;-- Use Query Analyzer for this Exercise,&lt;br /&gt;-- Close all existing connections and start a new one&lt;br /&gt;-- Step 1: Create and populate a small heap table&lt;br /&gt;USE pubs&lt;br /&gt;GO&lt;br /&gt;DROP TABLE t1&lt;br /&gt;GO&lt;br /&gt;CREATE TABLE t1 (a int)&lt;br /&gt;GO&lt;br /&gt;INSERT INTO t1 VALUES (1)&lt;br /&gt;INSERT INTO t1 VALUES (3)&lt;br /&gt;INSERT INTO t1 VALUES (5)&lt;br /&gt;GO&lt;br /&gt;-- Step 2: Update a single row&lt;br /&gt;BEGIN TRAN&lt;br /&gt;UPDATE t1&lt;br /&gt;SET a = 7 WHERE a = 1&lt;br /&gt;GO&lt;br /&gt;EXEC sp_lock&lt;br /&gt;GO&lt;br /&gt;-- The output here should show you one X lock, on a RID;&lt;br /&gt;-- that is the row that has been updated.&lt;br /&gt;-- Step 2: In another query window, run a batch that&lt;br /&gt;-- tries to select a completely different row than&lt;br /&gt;-- the one that is being updated&lt;br /&gt;USE pubs&lt;br /&gt;SELECT * FROM t1&lt;br /&gt;WHERE a = 3&lt;br /&gt;GO&lt;br /&gt;-- The above SELECT should block.&lt;br /&gt;-- Step 3: Return to the first query window.&lt;br /&gt;-- Examine sp_lock again and note that the second process -- is waiting for a lock on the same RID that was&lt;br /&gt;locked&lt;br /&gt;-- in Step 2.&lt;br /&gt;EXEC sp_lock&lt;br /&gt;GO&lt;br /&gt;ROLLBACK TRAN&lt;br /&gt;GO&lt;br /&gt;-- Step 4: Stay in the same query window, and change the&lt;br /&gt;-- script slightly to create an index on column ‘a’&lt;br /&gt;Hands-On SQL Server – Locking and Blocking – Kalen Delaney&lt;br /&gt;Page 74&lt;br /&gt;USE pubs&lt;br /&gt;GO&lt;br /&gt;DROP TABLE t1&lt;br /&gt;GO&lt;br /&gt;-- Create and populate the same small table&lt;br /&gt;CREATE TABLE t1 ( a int)&lt;br /&gt;GO&lt;br /&gt;-- Build an index on the table&lt;br /&gt;CREATE INDEX idx1 ON t1(a)&lt;br /&gt;GO&lt;br /&gt;-- Insert the same three rows into the table&lt;br /&gt;INSERT INTO t1 VALUES (1)&lt;br /&gt;INSERT INTO t1 VALUES (3)&lt;br /&gt;INSERT INTO t1 VALUES (5)&lt;br /&gt;GO&lt;br /&gt;-- Step 5 : Update a single row and look at the locks&lt;br /&gt;BEGIN TRAN&lt;br /&gt;UPDATE t1&lt;br /&gt;SET a = 7 WHERE a = 1&lt;br /&gt;EXEC sp_lock&lt;br /&gt;-- Now the output should show you three X locks&lt;br /&gt;-- one again on a RID and two KEY locks.&lt;br /&gt;-- When the key column a is updated, the leaf level of&lt;br /&gt;-- the nonclustered index is adjusted.&lt;br /&gt;-- Since the leaf level of the index keeps all the keys&lt;br /&gt;-- in sorted order, the old key with the value 1 is moved&lt;br /&gt;-- from the beginning of the leaf level to the end,&lt;br /&gt;-- because now its value is 7. However, until the&lt;br /&gt;-- transaction is over, a ghost entry is left in the&lt;br /&gt;-- original position and the key lock is maintained.&lt;br /&gt;-- So there are two key locks: one for the old value&lt;br /&gt;-- and one for the new.&lt;br /&gt;-- Step 6: In another query window, run a batch that&lt;br /&gt;-- tries to select a completely different row than&lt;br /&gt;-- the one that is being updated&lt;br /&gt;USE pubs&lt;br /&gt;SELECT * FROM t1&lt;br /&gt;WHERE a = 3&lt;br /&gt;GO&lt;br /&gt;-- The above SELECT will NOT block.&lt;br /&gt;-- Step 7: Return to the first query window and rollback&lt;br /&gt;ROLLBACK TRAN&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;Another benefit to having indexes on a table is that there is one more option for controlling the types of&lt;br /&gt;locks SQL Server will acquire. The stored procedure sp_indexoption lets you manually control the unit of&lt;br /&gt;locking by letting you disallow page locks or row locks within an index. Since these options are available&lt;br /&gt;only for indexes, there is no way to control the locking within the data pages of a heap. But remember that&lt;br /&gt;if a table has a clustered index, the data pages are part of the index and are affected by the sp_indexoption&lt;br /&gt;setting for the clustered index. The index options are set for each table or index individually. Two options,&lt;br /&gt;‘AllowRowLocks’ and ‘AllowPageLocks’, are both set to TRUE initially for every table and index. If both&lt;br /&gt;of these options are set to FALSE for a table, only full table locks are allowed. Note that there is no option&lt;br /&gt;to disallow table locks; that option must always be available.&lt;br /&gt;To verify whether row or page locks have been disallowed, you can use the indexproperty function. We can&lt;br /&gt;disable row locks by either setting the ‘AllowRowLocks’ option to false, or by setting the&lt;br /&gt;‘DisAllowRowLocks’ option to true. There are two related options for page locks: ‘AllowPageLocks’ and&lt;br /&gt;‘DisAllowPageLocks’. However, there is only one parameter we can use to check whether row locks are&lt;br /&gt;allowed and one to check whether page locks are allowed.&lt;br /&gt;The following command checks whether row locks have been disallowed on the authors table by supplying&lt;br /&gt;the name of the clustered index on the authors table. The INDEXPROPERTY function can return 3 values:&lt;br /&gt;1 means row locks are disallowed, 0 means they are allowed, and NULL means we typed something&lt;br /&gt;incorrectly.&lt;br /&gt;SELECT INDEXPROPERTY (object_id('authors'), 'UPKCL_auidind','IsRowLockDisallowed')&lt;br /&gt;To change the value so that row locks will no longer be allowed on the authors table, we can run either of&lt;br /&gt;the following two commands:&lt;br /&gt;EXEC sp_indexoption 'authors.UPKCL_auidind', 'AllowRowLocks', false&lt;br /&gt;EXEC sp_indexoption 'authors.UPKCL_auidind', 'DisAllowRowLocks', true&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-1050001620282393908?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/1050001620282393908/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=1050001620282393908' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1050001620282393908'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/1050001620282393908'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/08/how-do-indexes-affect-locking-and.html' title='How do indexes affect locking and blocking?'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-5735192761981825208</id><published>2008-08-31T16:58:00.001-07:00</published><updated>2008-08-31T16:58:55.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mxdev.biz'/><category scheme='http://www.blogger.com/atom/ns#' term='software development'/><title type='text'>My Personal Original site - mxdev.biz</title><content type='html'>see more info about me:&lt;br /&gt;&lt;br /&gt;http://mxdev.biz&lt;br /&gt;&lt;br /&gt;Personal site of Max Ivak&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-5735192761981825208?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/5735192761981825208/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=5735192761981825208' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5735192761981825208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/5735192761981825208'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/08/my-personal-original-site-mxdevbiz.html' title='My Personal Original site - mxdev.biz'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8096655137906025271.post-835337759601684600</id><published>2008-08-26T15:59:00.000-07:00</published><updated>2008-08-26T15:59:46.924-07:00</updated><title type='text'>Developer Blog - Mxdev - Personal Blog of Max Ivak: Галерея сайтов</title><content type='html'>&lt;a href="http://mxdev.blogspot.com/2008/08/blog-post.html#links"&gt;Developer Blog - Mxdev - Personal Blog of Max Ivak: Галерея сайтов&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096655137906025271-835337759601684600?l=mxdev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mxdev.blogspot.com/2008/08/blog-post.html#links' title='Developer Blog - Mxdev - Personal Blog of Max Ivak: Галерея сайтов'/><link rel='replies' type='application/atom+xml' href='http://mxdev.blogspot.com/feeds/835337759601684600/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8096655137906025271&amp;postID=835337759601684600' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/835337759601684600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096655137906025271/posts/default/835337759601684600'/><link rel='alternate' type='text/html' href='http://mxdev.blogspot.com/2008/08/developer-blog-mxdev-personal-blog-of.html' title='Developer Blog - Mxdev - Personal Blog of Max Ivak: Галерея сайтов'/><author><name>mxdev</name><uri>http://www.blogger.com/profile/11193080382439643459</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_unYbfxuG0y0/SLsqOCei9zI/AAAAAAAAAAY/BXLyrnaJ8Ss/S220/m3.jpg'/></author><thr:total>0</thr:total></entry></feed>
