<?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:blogger='http://schemas.google.com/blogger/2008' 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-366464411863802441</id><updated>2024-09-20T17:50:01.058-07:00</updated><category term="궁디팡팡"/><category term="애니팡"/><title type='text'>윤군의 불로그 노리~</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-2907410636542311798</id><published>2014-01-06T00:16:00.002-08:00</published><updated>2014-01-06T00:16:25.359-08:00</updated><title type='text'>Niresh&#39;s 10.8.2 Installer</title><content type='html'>&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;strong&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;span style=&quot;font-size: 24px;&quot;&gt;Guide--Creating a OS X installer(Niresh12495 all Distro&#39;s)from windows only&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Note:This guide is for those who don&#39;t have access to a mac and for some reasons cannot instal&lt;/strong&gt;&lt;strong&gt;the retail image on virtualbox.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What you will need::::&lt;br /&gt;&lt;br /&gt;1.A Windows PC.&lt;br /&gt;&lt;br /&gt;2.Two USB Flash Drives.One of at least 8 GB and the other of atleast 1 GB.&lt;br /&gt;&lt;br /&gt;3.&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.4shared.com/zip/8e1BgWzd/usbit.html?&quot; rel=&quot;nofollow external&quot; style=&quot;color: #0f72da;&quot; title=&quot;External link&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;strong&gt;Usbit&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;,&amp;nbsp;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;strong&gt;&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.niresh12495.com/files/file/21-bootdiskutilityexe/&quot; style=&quot;color: #0f72da;&quot; title=&quot;&quot;&gt;BootDiskutility&lt;/a&gt;&amp;nbsp;,&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.niresh12495.com/files/file/57-bootdiskutility-v20/&quot; style=&quot;color: #0f72da;&quot; title=&quot;&quot;&gt;BootDiskUtility v2 rev175&lt;/a&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.niresh12495.com/files/file/87-bootdiskutility-v202013/&quot; style=&quot;color: #0f72da;&quot; title=&quot;&quot;&gt;&lt;strong&gt;DiskUtility v2 rev178&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
4.Last but not the least,an&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.niresh12495.com/files/category/18-distros/&quot; style=&quot;color: #0f72da;&quot; title=&quot;&quot;&gt;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;strong&gt;Niresh12495&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;image . You are on your own in downloading this The Steps:::::&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
1.Connect the 1 GB USB Drive on your computer.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&amp;nbsp;2.Run Bootdiskutility,select your USB from the list and click on&lt;span style=&quot;font-size: 24px;&quot;&gt;Format disk&amp;nbsp;&lt;/span&gt;.The utility will install clover and chameleon bootloaders on your USB Drive (see screenshot)&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span rel=&quot;lightbox&quot;&gt;&lt;img alt=&quot;Posted Image&quot; class=&quot;bbc_img&quot; src=&quot;http://www.niresh12495.com/uploads/images/1386439693_Screenshot%20(1).jpg&quot; style=&quot;border: 0px; cursor: pointer; max-width: 100%; vertical-align: middle;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span rel=&quot;lightbox&quot;&gt;&lt;img alt=&quot;Posted Image&quot; class=&quot;bbc_img&quot; src=&quot;http://www.niresh12495.com/uploads/images/1386439693_Screenshot%20(2).jpg&quot; style=&quot;border: 0px; cursor: pointer; max-width: 100%; vertical-align: middle;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&amp;nbsp;3.Connect another 8 gb USB Drive and Run TransMac.exe or USBIT ,Select your 8 gb USB and restore with Disk image.This will write the OS X installer on the USB drive.(see screenshot)[/color]&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span rel=&quot;lightbox&quot;&gt;&lt;img alt=&quot;Posted Image&quot; class=&quot;bbc_img&quot; src=&quot;http://www.niresh12495.com/uploads/images/1386255119_Screenshot%20(4).png&quot; style=&quot;border: 0px; cursor: pointer; max-width: 100%; vertical-align: middle;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span rel=&quot;lightbox&quot;&gt;&lt;img alt=&quot;Posted Image&quot; class=&quot;bbc_img&quot; src=&quot;http://www.niresh12495.com/uploads/images/1386255119_Screenshot%20(5).png&quot; style=&quot;border: 0px; cursor: pointer; max-width: 100%; vertical-align: middle;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span rel=&quot;lightbox&quot;&gt;&lt;img alt=&quot;Posted Image&quot; class=&quot;bbc_img&quot; src=&quot;http://www.niresh12495.com/uploads/images/1386255120_Screenshot%20(6).png&quot; style=&quot;border: 0px; cursor: pointer; max-width: 100%; vertical-align: middle;&quot; /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
4.Now plugin both your USB drives on the computer restart your Computer select boot Menu (press f12 for Gigabyte , f8 for ASUS etc).On the boot prompt SELECT THE 1 GB USB&amp;nbsp;DRIVE.Clover bootloader will be loaded and your OS X installer USB will show up on the boot device&amp;nbsp;list.Select Your Second USB (Which shown as&amp;nbsp;&lt;span style=&quot;font-size: 18px;&quot;&gt;&lt;strong&gt;Niresh&#39;s 10.8.2 Installer)&lt;/strong&gt;&lt;/span&gt;.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
OS X installer Start and you can go on.&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-size: 18px;&quot;&gt;Tips&lt;/span&gt;::::you can also boot with Chameleon bootloader for this you need to press key 2 from your keyboard when Step 4 is on working...&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;span style=&quot;font-size: 18px;&quot;&gt;Tested and Working perfectly with&amp;nbsp;&lt;a class=&quot;bbc_url&quot; href=&quot;http://www.niresh12495.com/files/file/46-nireshs-mac-os-x-mountain-lion-for-amd-and-intel-1085/&quot; style=&quot;color: #0f72da;&quot; title=&quot;&quot;&gt;Niresh&#39;s Mac OS X 10.8.5&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
Video Tutorial is There&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;a class=&quot;bbc_url&quot; href=&quot;http://youtu.be/8sPXYFUJj6A&quot; rel=&quot;nofollow external&quot; style=&quot;color: #0f72da;&quot; title=&quot;External link&quot;&gt;http://youtu.be/8sPXYFUJj6A&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
Thank You&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #282828; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; padding: 0px;&quot;&gt;
Regards&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/2907410636542311798/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/2907410636542311798' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2907410636542311798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2907410636542311798'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2014/01/nireshs-1082-installer.html' title='Niresh&#39;s 10.8.2 Installer'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-7916674922450567031</id><published>2013-10-15T01:30:00.003-07:00</published><updated>2013-10-15T01:30:39.123-07:00</updated><title type='text'>Google.Bigtable</title><content type='html'>&lt;div class=&quot;Section1&quot;&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;div class=&quot;Section1&quot; style=&quot;page: Section1;&quot;&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 0mm 0mm 0.0001pt;&quot;&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;margin-bottom: .0001pt; margin-bottom: 0mm; margin-left: .7pt; margin-right: 0mm; margin-top: 2.5pt; mso-line-break-override: restrictions; punctuation-wrap: simple; text-align: center;&quot;&gt;
&lt;b&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 14.0pt;&quot;&gt;Bigtable:&lt;span style=&quot;letter-spacing: 1.95pt;&quot;&gt;
&lt;/span&gt;A&lt;span style=&quot;letter-spacing: .95pt;&quot;&gt; &lt;/span&gt;Distri&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt;b&lt;/span&gt;uted&lt;span style=&quot;letter-spacing: 1.05pt;&quot;&gt; &lt;/span&gt;Storage&lt;span style=&quot;letter-spacing: 1.0pt;&quot;&gt; &lt;/span&gt;System&lt;span style=&quot;letter-spacing: .9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt;f&lt;/span&gt;or&lt;span style=&quot;letter-spacing: 1.0pt;&quot;&gt; &lt;/span&gt;Structu&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt;r&lt;/span&gt;ed&lt;span style=&quot;letter-spacing: 1.05pt;&quot;&gt; &lt;/span&gt;Data&lt;/span&gt;&lt;/b&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 14.0pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 6.5pt; margin-top: .2pt; mso-line-break-override: restrictions; mso-line-height-rule: exactly; punctuation-wrap: simple;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 10.0pt; mso-line-break-override: restrictions; mso-line-height-rule: exactly; punctuation-wrap: simple;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 10.0pt; mso-line-break-override: restrictions; mso-line-height-rule: exactly; punctuation-wrap: simple;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;line-height: 101%; margin-bottom: .0001pt; margin-bottom: 0mm; margin-left: 39.8pt; margin-right: 39.3pt; margin-top: 0mm; mso-line-break-override: restrictions; punctuation-wrap: simple; text-align: center;&quot;&gt;
&lt;span lang=&quot;EN-US&quot; style=&quot;letter-spacing: -.25pt;&quot;&gt;F&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;ay&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt; &lt;/span&gt;Chang,&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt; &lt;/span&gt;Je&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt;f&lt;/span&gt;fr&lt;span style=&quot;letter-spacing: -.3pt;&quot;&gt;e&lt;/span&gt;y&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt; &lt;/span&gt;Dean,&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt;
&lt;/span&gt;Sanjay&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt; &lt;/span&gt;Ghem&lt;span style=&quot;letter-spacing: -.15pt;&quot;&gt;aw&lt;/span&gt;at,&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: -.55pt;&quot;&gt;W&lt;/span&gt;ilson&lt;span style=&quot;letter-spacing: -.3pt;&quot;&gt; &lt;/span&gt;C.&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt; &lt;/span&gt;Hsieh,&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt;
&lt;/span&gt;Deborah&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt; &lt;/span&gt;A.&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: -1.05pt;&quot;&gt;W&lt;/span&gt;allach
Mi&lt;span style=&quot;letter-spacing: -.05pt;&quot;&gt;k&lt;/span&gt;e&lt;span style=&quot;letter-spacing: -.55pt;&quot;&gt; &lt;/span&gt;Burr&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt;o&lt;/span&gt;ws,&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;letter-spacing: -.55pt;&quot;&gt;T&lt;/span&gt;ushar&lt;span style=&quot;letter-spacing: -.5pt;&quot;&gt; &lt;/span&gt;Chandra,&lt;span style=&quot;letter-spacing: -.5pt;&quot;&gt;
&lt;/span&gt;Andr&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt;e&lt;/span&gt;w&lt;span style=&quot;letter-spacing: -.5pt;&quot;&gt; &lt;/span&gt;Fi&lt;span style=&quot;letter-spacing: -.15pt;&quot;&gt;k&lt;/span&gt;es,&lt;span style=&quot;letter-spacing: -.4pt;&quot;&gt; &lt;/span&gt;Robert&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt;
&lt;/span&gt;E.&lt;span style=&quot;letter-spacing: -.35pt;&quot;&gt; &lt;/span&gt;Gruber&lt;/span&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;margin-bottom: .0001pt; margin-bottom: 0mm; margin-left: .4pt; margin-right: 0mm; margin-top: 4.55pt; mso-line-break-override: restrictions; punctuation-wrap: simple; text-align: center;&quot;&gt;
&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9.0pt; letter-spacing: -.05pt;&quot;&gt;{&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 9.0pt; letter-spacing: -.15pt;&quot;&gt;f&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 9.0pt;&quot;&gt;a&lt;span style=&quot;letter-spacing: -.75pt;&quot;&gt;y&lt;/span&gt;,je&lt;span style=&quot;letter-spacing: -.25pt;&quot;&gt;f&lt;/span&gt;f,sanja&lt;span style=&quot;letter-spacing: -.75pt;&quot;&gt;y&lt;/span&gt;,wilsonh,&lt;span style=&quot;letter-spacing: -.25pt;&quot;&gt;k&lt;/span&gt;er&lt;span style=&quot;letter-spacing: -.45pt;&quot;&gt;r&lt;/span&gt;,m3b,tusha&lt;span style=&quot;letter-spacing: -.55pt;&quot;&gt;r&lt;/span&gt;,fi&lt;span style=&quot;letter-spacing: -.15pt;&quot;&gt;k&lt;/span&gt;es,grube&lt;span style=&quot;letter-spacing: -.15pt;&quot;&gt;r&lt;/span&gt;&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9.0pt; letter-spacing: -.05pt;&quot;&gt;}&lt;/span&gt;&lt;span lang=&quot;EN-US&quot; style=&quot;font-size: 9.0pt;&quot;&gt;@google.com&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 6.5pt; margin-top: .25pt; mso-line-break-override: restrictions; mso-line-height-rule: exactly; punctuation-wrap: simple;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;center&quot; class=&quot;MsoNormal&quot; style=&quot;margin-left: .8pt; mso-line-break-override: restrictions; punctuation-wrap: simple; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span lang=&quot;EN-US&quot;&gt;Go&lt;span style=&quot;letter-spacing: -.1pt;&quot;&gt;o&lt;/span&gt;gl&lt;span style=&quot;letter-spacing: -.15pt;&quot;&gt;e&lt;/span&gt;,&lt;span style=&quot;letter-spacing: -.75pt;&quot;&gt; &lt;/span&gt;Inc.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: 10.0pt; mso-line-break-override: restrictions; mso-line-height-rule: exactly; punctuation-wrap: simple;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot; class=&quot;Heading1&quot; style=&quot;margin-top: 2.6pt; mso-line-break-override: restrictions; mso-outline-level: body-text; punctuation-wrap: simple; text-align: center; text-indent: 0mm;&quot;&gt;
&lt;span lang=&quot;EN-US&quot;&gt;Abstract&lt;/span&gt;&lt;span lang=&quot;EN-US&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable is a distributed storage system for managing structured data that is designed to scale to a very large size: petabytes of data across thousands of commodity servers. Many projects at Google store data in Bigtable, including web indexing, Google Earth, and Google Fi- nance. These applications place very different demands on Bigtable, both in terms of data size (from URLs to web pages to satellite imagery) and latency requirements (from backend bulk processing to real-time data serving). Despite these varied demands, Bigtable has successfully provided a flexible, high-performance solution for all of these Google products. In this paper we describe the sim- ple data model provided by Bigtable, which gives clients dynamic control over data layout and format, and we de- scribe the design and implementation of Bigtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Introduction&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Over the last two and a half years we have designed, implemented, and deployed a distributed storage system for managing structured data at Google called Bigtable. Bigtable is designed to reliably scale to petabytes of data and thousands of machines. Bigtable has achieved several goals: &amp;nbsp;wide applicability, scalability, high per- formance, and high availability. &amp;nbsp; Bigtable is used by more than sixty Google products and projects, includ- ing Google Analytics, Google Finance, Orkut, Person- alized Search, Writely, and Google Earth. &amp;nbsp;These prod- ucts use Bigtable for a variety of demanding workloads, which range from throughput-oriented batch-processing jobs to latency-sensitive serving of data to end users. The Bigtable clusters used by these products span a wide range of configurations, from a handful to thousands of servers, and store up to several hundred terabytes of data. In many ways, Bigtable resembles a database: it shares many implementation strategies with databases. &amp;nbsp;Paral- lel databases [14] and main-memory databases [13] have&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;achieved scalability and high performance, but Bigtable provides a different interface than such systems. Bigtable does not support a full relational data model; instead, it provides clients with a simple data model that supports dynamic control over data layout and format, and al- lows clients to reason about the locality properties of the data represented in the underlying storage. Data is in- dexed using row and column names that can be arbitrary strings. Bigtable also treats data as uninterpreted strings, although clients often serialize various forms of struc- tured and semi-structured data into these strings. Clients can control the locality of their data through careful choices in their schemas. Finally, Bigtable schema pa- rameters let clients dynamically control whether to serve data out of memory or from disk.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Section 2 describes the data model in more detail, and Section 3 provides an overview of the client API. Sec- tion 4 briefly describes the underlying Google infrastruc- ture on which Bigtable depends. Section 5 describes the fundamentals of the Bigtable implementation, and Sec- tion 6 describes some of the refinements that we made to improve Bigtable’s performance. Section 7 provides measurements of Bigtable’s performance. We describe several examples of how Bigtable is used at Google in Section 8, and discuss some lessons we learned in designing and supporting Bigtable in Section 9. Fi- nally, Section 10 describes related work, and Section 11 presents our conclusions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Data Model&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A Bigtable is a sparse, distributed, persistent multi- dimensional sorted map. The map is indexed by a row key, column key, and a timestamp; each value in the map is an uninterpreted array of bytes.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(row:string, column:string, time:int64) → string&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;contents:&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;anchor:cnnsi.com&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;anchor:my.look.ca&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;com.cnn.www&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;&lt;html&gt;...&quot;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;t&lt;/html&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;&lt;html&gt;...&quot;&lt;/html&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;&lt;html&gt;...&quot;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;5&lt;/html&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;CNN&quot;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;t9&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&quot;CNN.com&quot;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;t8&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 1: A slice of an example table that stores Web pages. The row name is a reversed URL. The contents column family con- tains the page contents, and the anchor column family contains the text of any anchors that reference the page. CNN’s home page is referenced by both the Sports Illustrated and the MY-look home pages, so the row contains columns named anchor:cnnsi.com and anchor:my.look.ca. Each anchor cell has one version; the contents column has three versions, at timestamps t3, t5, and t6.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We settled on this data model after examining a variety of potential uses of a Bigtable-like system. As one con- crete example that drove some of our design decisions, suppose we want to keep a copy of a large collection of web pages and related information that could be used by many different projects; let us call this particular table the Webtable. In Webtable, we would use URLs as row keys, various aspects of web pages as column names, and store the contents of the web pages in the contents: col- umn under the timestamps when they were fetched, as illustrated in Figure 1.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Rows&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The row keys in a table are arbitrary strings (currently up to 64KB in size, although 10-100 bytes is a typical size for most of our users). Every read or write of data under a single row key is atomic (regardless of the number of different columns being read or written in the row), a design decision that makes it easier for clients to reason about the system’s behavior in the presence of concurrent updates to the same row.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable maintains data in lexicographic order by row key. The row range for a table is dynamically partitioned. Each row range is called a tablet, which is the unit of dis- tribution and load balancing. As a result, reads of short row ranges are efficient and typically require communi- cation with only a small number of machines. Clients can exploit this property by selecting their row keys so that they get good locality for their data accesses. For example, in Webtable, pages in the same domain are grouped together into contiguous rows by reversing the hostname components of the URLs. For example, we store data for maps.google.com/index.html under the key com.google.maps/index.html. Storing pages from the same domain near each other makes some host and domain analyses more efficient.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Column Families&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Column keys are grouped into sets called column fami- lies, which form the basic unit of access control. All data stored in a column family is usually of the same type (we compress data in the same column family together). A column family must be created before data can be stored under any column key in that family; after a family has been created, any column key within the family can be used. It is our intent that the number of distinct column families in a table be small (in the hundreds at most), and that families rarely change during operation. In contrast, a table may have an unbounded number of columns.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A column key is named using the following syntax: family:qualifier. Column family names must be print- able, but qualifiers may be arbitrary strings. An exam- ple column family for the Webtable is language, which stores the language in which a web page was written. We use only one column key in the language family, and it stores each web page’s language ID. Another useful col- umn family for this table is anchor; each column key in this family represents a single anchor, as shown in Fig- ure 1. The qualifier is the name of the referring site; the cell contents is the link text.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Access control and both disk and memory account- ing are performed at the column-family level. In our Webtable example, these controls allow us to manage several different types of applications: some that add new base data, some that read the base data and create derived column families, and some that are only allowed to view existing data (and possibly not even to view all of the existing families for privacy reasons).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Timestamps&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Each cell in a Bigtable can contain multiple versions of the same data; these versions are indexed by timestamp. Bigtable timestamps are 64-bit integers. They can be as- signed by Bigtable, in which case they represent “real time” in microseconds, or be explicitly assigned by client&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;// Open the table&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Table *T = OpenOrDie(&quot;/bigtable/web/webtable&quot;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;// Write a new anchor and delete an old anchor RowMutation r1(T, &quot;com.cnn.www&quot;); r1.Set(&quot;anchor:www.c-span.org&quot;, &quot;CNN&quot;); r1.Delete(&quot;anchor:www.abc.com&quot;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Operation op; Apply(&amp;amp;op, &amp;amp;r1);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Scanner scanner(T); ScanStream *stream;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;stream = scanner.FetchColumnFamily(&quot;anchor&quot;); stream-&amp;gt;SetReturnAllVersions(); scanner.Lookup(&quot;com.cnn.www&quot;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;for (; !stream-&amp;gt;Done(); stream-&amp;gt;Next()) { printf(&quot;%s %s %lld %s\n&quot;,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;scanner.RowName(), stream-&amp;gt;ColumnName(), stream-&amp;gt;MicroTimestamp(), stream-&amp;gt;Value());&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 2: Writing to Bigtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;applications. Applications that need to avoid collisions must generate unique timestamps themselves. Different versions of a cell are stored in decreasing timestamp or- der, so that the most recent versions can be read first.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;To make the management of versioned data less oner- ous, we support two per-column-family settings that tell Bigtable to garbage-collect cell versions automatically. The client can specify either that only the last n versions of a cell be kept, or that only new-enough versions be kept (e.g., only keep values that were written in the last seven days).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;In our Webtable example, we set the timestamps of the crawled pages stored in the contents: column to the times at which these page versions were actually crawled. The garbage-collection mechanism described above lets us keep only the most recent three versions of every page.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;API&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The Bigtable API provides functions for creating and deleting tables and column families. It also provides functions for changing cluster, table, and column family metadata, such as access control rights.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Client applications can write or delete values in Bigtable, look up values from individual rows, or iter- ate over a subset of the data in a table. Figure 2 shows C++ code that uses a RowMutation abstraction to per- form a series of updates. (Irrelevant details were elided to keep the example short.) The call to Apply performs an atomic mutation to the Webtable: it adds one anchor to www.cnn.com and deletes a different anchor.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 3 shows C++ code that uses a Scanner ab- straction to iterate over all anchors in a particular row. Clients can iterate over multiple column families, and there are several mechanisms for limiting the rows, columns, and timestamps produced by a scan. For ex- ample, we could restrict the scan above to only produce anchors whose columns match the regular expression anchor:*.cnn.com, or to only produce anchors whose timestamps fall within ten days of the current time.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 3: Reading from Bigtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable supports several other features that allow the user to manipulate data in more complex ways. First, Bigtable supports single-row transactions, which can be used to perform atomic read-modify-write sequences on data stored under a single row key. Bigtable does not cur- rently support general transactions across row keys, al- though it provides an interface for batching writes across row keys at the clients. Second, Bigtable allows cells to be used as integer counters. Finally, Bigtable sup- ports the execution of client-supplied scripts in the ad- dress spaces of the servers. The scripts are written in a language developed at Google for processing data called Sawzall [28]. At the moment, our Sawzall-based API does not allow client scripts to write back into Bigtable, but it does allow various forms of data transformation, filtering based on arbitrary expressions, and summariza- tion via a variety of operators.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable can be used with MapReduce [12], a frame-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;work for running large-scale parallel computations de- veloped at Google. We have written a set of wrappers that allow a Bigtable to be used both as an input source and as an output target for MapReduce jobs.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;4&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Building Blocks&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable is built on several other pieces of Google in- frastructure. Bigtable uses the distributed Google File System (GFS) [17] to store log and data files. A Bigtable cluster typically operates in a shared pool of machines that run a wide variety of other distributed applications, and Bigtable processes often share the same machines with processes from other applications. Bigtable de- pends on a cluster management system for scheduling jobs, managing resources on shared machines, dealing with machine failures, and monitoring machine status.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The Google SSTable file format is used internally to&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;store Bigtable data. An SSTable provides a persistent, ordered immutable map from keys to values, where both keys and values are arbitrary byte strings. Operations are provided to look up the value associated with a specified&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;key, and to iterate over all key/value pairs in a specified key range. Internally, each SSTable contains a sequence of blocks (typically each block is 64KB in size, but this is configurable). A block index (stored at the end of the SSTable) is used to locate blocks; the index is loaded into memory when the SSTable is opened. A lookup can be performed with a single disk seek: we first find the appropriate block by performing a binary search in the in-memory index, and then reading the appropriate block from disk. Optionally, an SSTable can be com- pletely mapped into memory, which allows us to perform lookups and scans without touching disk.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable relies on a highly-available and persistent distributed lock service called Chubby [8]. A Chubby service consists of five active replicas, one of which is elected to be the master and actively serve requests. The service is live when a majority of the replicas are running and can communicate with each other. Chubby uses the Paxos algorithm [9, 23] to keep its replicas consistent in the face of failure. Chubby provides a namespace that consists of directories and small files. Each directory or file can be used as a lock, and reads and writes to a file are atomic. The Chubby client library provides consis- tent caching of Chubby files. Each Chubby client main- tains a session with a Chubby service. A client’s session expires if it is unable to renew its session lease within the lease expiration time. When a client’s session expires, it loses any locks and open handles. Chubby clients can also register callbacks on Chubby files and directories for notification of changes or session expiration.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable uses Chubby for a variety of tasks: to ensure&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;dynamically added (or removed) from a cluster to acco- modate changes in workloads.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The master is responsible for assigning tablets to tablet servers, detecting the addition and expiration of tablet servers, balancing tablet-server load, and garbage col- lection of files in GFS. In addition, it handles schema changes such as table and column family creations.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Each tablet server manages a set of tablets (typically we have somewhere between ten to a thousand tablets per tablet server). &amp;nbsp;The tablet server handles read and write requests to the tablets that it has loaded, and also splits tablets that have grown too large.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;As with many single-master distributed storage sys- tems [17, 21], client data does not move through the mas- ter: clients communicate directly with tablet servers for reads and writes. Because Bigtable clients do not rely on the master for tablet location information, most clients never communicate with the master. As a result, the mas- ter is lightly loaded in practice.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A Bigtable cluster stores a number of tables. Each ta- ble consists of a set of tablets, and each tablet contains all data associated with a row range. Initially, each table consists of just one tablet. As a table grows, it is auto- matically split into multiple tablets, each approximately 100-200 MB in size by default.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;5.1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Tablet Location&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We use a three-level hierarchy analogous to that of a B+- tree [10] to store tablet location information (Figure 4).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;UserTable1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;that there is at most one active master at any time; to&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;store the bootstrap location of Bigtable data (see Sec- tion 5.1); to discover tablet servers and finalize tablet server deaths (see Section 5.2); to store Bigtable schema information (the column family information for each ta- ble); and to store access control lists. If Chubby becomes unavailable for an extended period of time, Bigtable be- comes unavailable. We recently measured this effect in 14 Bigtable clusters spanning 11 Chubby instances. The average percentage of Bigtable server hours during&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Chubby file&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Root tablet&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(1st METADATA tablet)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Other METADATA&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;tablets&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;UserTableN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;which some data stored in Bigtable was not available due to Chubby unavailability (caused by either Chubby out- ages or network issues) was 0.0047%. The percentage for the single cluster that was most affected by Chubby unavailability was 0.0326%.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Implementation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The Bigtable implementation has three major compo- nents: a library that is linked into every client, one mas- ter server, and many tablet servers. Tablet servers can be&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 4: Tablet location hierarchy.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The first level is a file stored in Chubby that contains the location of the root tablet. The root tablet contains the location of all tablets in a special METADATA table. Each METADATA tablet contains the location of a set of user tablets. The root tablet is just the first tablet in the METADATA table, but is treated specially—it is never split—to ensure that the tablet location hierarchy has no more than three levels.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The METADATA table stores the location of a tablet under a row key that is an encoding of the tablet’s table&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;identifier and its end row. Each METADATA row stores approximately 1KB of data in memory. With a modest limit of 128 MB METADATA tablets, our three-level lo- cation scheme is sufficient to address 234 tablets (or 261 bytes in 128 MB tablets).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The client library caches tablet locations. If the client does not know the location of a tablet, or if it discov- ers that cached location information is incorrect, then it recursively moves up the tablet location hierarchy. If the client’s cache is empty, the location algorithm requires three network round-trips, including one read from Chubby. If the client’s cache is stale, the location algorithm could take up to six round-trips, because stale cache entries are only discovered upon misses (assuming that METADATA tablets do not move very frequently). Although tablet locations are stored in memory, so no GFS accesses are required, we further reduce this cost in the common case by having the client library prefetch tablet locations: it reads the metadata for more than one tablet whenever it reads the METADATA table.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We also store secondary information in the METADATA table, including a log of all events per- taining to each tablet (such as when a server begins serving it). This information is helpful for debugging and performance analysis.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;5.2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Tablet Assignment&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Each tablet is assigned to one tablet server at a time. The master keeps track of the set of live tablet servers, and the current assignment of tablets to tablet servers, in- cluding which tablets are unassigned. When a tablet is unassigned, and a tablet server with sufficient room for the tablet is available, the master assigns the tablet by sending a tablet load request to the tablet server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable uses Chubby to keep track of tablet servers. When a tablet server starts, it creates, and acquires an exclusive lock on, a uniquely-named file in a specific Chubby directory. The master monitors this directory (the servers directory) to discover tablet servers. A tablet server stops serving its tablets if it loses its exclusive lock: e.g., due to a network partition that caused the server to lose its Chubby session. (Chubby provides an efficient mechanism that allows a tablet server to check whether it still holds its lock without incurring network traffic.) A tablet server will attempt to reacquire an ex- clusive lock on its file as long as the file still exists. If the file no longer exists, then the tablet server will never be able to serve again, so it kills itself. &amp;nbsp;Whenever a tablet server terminates (e.g., because the cluster management system is removing the tablet server’s machine from the cluster), it attempts to release its lock so that the master will reassign its tablets more quickly.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The master is responsible for detecting when a tablet server is no longer serving its tablets, and for reassign- ing those tablets as soon as possible. To detect when a tablet server is no longer serving its tablets, the master periodically asks each tablet server for the status of its lock. If a tablet server reports that it has lost its lock, or if the master was unable to reach a server during its last several attempts, the master attempts to acquire an exclusive lock on the server’s file. If the master is able to acquire the lock, then Chubby is live and the tablet server is either dead or having trouble reaching Chubby, so the master ensures that the tablet server can never serve again by deleting its server file. Once a server’s file has been deleted, the master can move all the tablets that were pre- viously assigned to that server into the set of unassigned tablets. To ensure that a Bigtable cluster is not vulnera- ble to networking issues between the master and Chubby, the master kills itself if its Chubby session expires. How- ever, as described above, master failures do not change the assignment of tablets to tablet servers.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;When a master is started by the cluster management system, it needs to discover the current tablet assign- ments before it can change them. The master executes the following steps at startup. &amp;nbsp;(1) The master grabs a unique master lock in Chubby, which prevents con- current master instantiations. (2) The master scans the servers directory in Chubby to find the live servers.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(3) &amp;nbsp;The &amp;nbsp;master &amp;nbsp;communicates &amp;nbsp;with &amp;nbsp;every live &amp;nbsp;tablet&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;server to discover what tablets are already assigned to each server. (4) The master scans the METADATA table to learn the set of tablets. Whenever this scan encounters a tablet that is not already assigned, the master adds the tablet to the set of unassigned tablets, which makes the tablet eligible for tablet assignment.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;One complication is that the scan of the METADATA table cannot happen until the METADATA tablets have been assigned. Therefore, before starting this scan (step 4), the master adds the root tablet to the set of unassigned tablets if an assignment for the root tablet was not dis- covered during step 3. This addition ensures that the root tablet will be assigned. Because the root tablet contains the names of all METADATA tablets, the master knows about all of them after it has scanned the root tablet.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The set of existing tablets only changes when a ta- ble is created or deleted, two existing tablets are merged to form one larger tablet, or an existing tablet is split into two smaller tablets. The master is able to keep track of these changes because it initiates all but the last. Tablet splits are treated specially since they are initi- ated by a tablet server. The tablet server commits the split by recording information for the new tablet in the METADATA table. When the split has committed, it noti- fies the master. In case the split notification is lost (either&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;because the tablet server or the master died), the master detects the new tablet when it asks a tablet server to load the tablet that has now split. The tablet server will notify the master of the split, because the tablet entry it finds in the METADATA table will specify only a portion of the tablet that the master asked it to load.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;5.3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Tablet Serving&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The persistent state of a tablet is stored in GFS, as illus- trated in Figure 5. Updates are committed to a commit log that stores redo records. Of these updates, the re- cently committed ones are stored in memory in a sorted buffer called a memtable; the older updates are stored in a sequence of SSTables. To recover a tablet, a tablet server&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;memtable&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Read Op&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Memory GFS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;tablet log&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Write Op&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;SSTable Files&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 5: Tablet Representation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;reads its metadata from the METADATA table. This meta- data contains the list of SSTables that comprise a tablet and a set of a redo points, which are pointers into any commit logs that may contain data for the tablet. The server reads the indices of the SSTables into memory and reconstructs the memtable by applying all of the updates that have committed since the redo points.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;When a write operation arrives at a tablet server, the server checks that it is well-formed, and that the sender is authorized to perform the mutation. Authorization is performed by reading the list of permitted writers from a Chubby file (which is almost always a hit in the Chubby client cache). A valid mutation is written to the commit log. Group commit is used to improve the throughput of lots of small mutations [13, 16]. After the write has been committed, its contents are inserted into the memtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;When a read operation arrives at a tablet server, it is similarly checked for well-formedness and proper autho- rization. A valid read operation is executed on a merged view of the sequence of SSTables and the memtable. Since the SSTables and the memtable are lexicograph- ically sorted data structures, the merged view can be formed efficiently.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Incoming &amp;nbsp;read &amp;nbsp;and &amp;nbsp;write &amp;nbsp;operations &amp;nbsp;can &amp;nbsp;continue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;while tablets are split and merged.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;5.4&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Compactions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;As write operations execute, the size of the memtable in- creases. When the memtable size reaches a threshold, the memtable is frozen, a new memtable is created, and the frozen memtable is converted to an SSTable and written to GFS. This minor compaction process has two goals: it shrinks the memory usage of the tablet server, and it reduces the amount of data that has to be read from the commit log during recovery if this server dies. Incom- ing read and write operations can continue while com- pactions occur.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Every minor compaction creates a new SSTable. If this behavior continued unchecked, read operations might need to merge updates from an &amp;nbsp;arbitrary number of SSTables. Instead, we bound the number of such files by periodically executing a merging compaction in the background. A merging compaction reads the contents of a few SSTables and the memtable, and writes out a new SSTable. The input SSTables and memtable can be discarded as soon as the compaction has finished.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A merging compaction that rewrites all &amp;nbsp;SSTables into exactly one SSTable is called a major compaction. SSTables produced by non-major compactions can con- tain special deletion entries that suppress deleted data in older SSTables that are still live. A major compaction, on the other hand, produces an SSTable that contains no deletion information or deleted data. Bigtable cy- cles through all of its tablets and regularly applies major compactions to them. These major compactions allow Bigtable to reclaim resources used by deleted data, and also allow it to ensure that deleted data disappears from the system in a timely fashion, which is important for services that store sensitive data.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;6&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Refinements&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The implementation described in the previous section required a number of refinements to achieve the high performance, availability, and reliability required by our users. This section describes portions of the implementa- tion in more detail in order to highlight these refinements.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Locality groups&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Clients can group multiple column families together into a locality group. A separate SSTable is generated for each locality group in each tablet. Segregating column families that are not typically accessed together into sep- arate locality groups enables more efficient reads. For example, page metadata in Webtable (such as language and checksums) can be in one locality group, and the contents of the page can be in a different group: an ap-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;plication that wants to read the metadata does not need to read through all of the page contents.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;In addition, some useful tuning parameters can be specified on a per-locality group basis. For example, a lo- cality group can be declared to be in-memory. SSTables for in-memory locality groups are loaded lazily into the memory of the tablet server. Once loaded, column fam- ilies that belong to such locality groups can be read without accessing the disk. This feature is useful for small pieces of data that are accessed frequently: we use it internally for the location column family in the METADATA table.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Compression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Clients can control whether or not the SSTables for a locality group are compressed, and if so, which com- pression format is used. The user-specified compres- sion format is applied to each SSTable block (whose size is controllable via a locality group specific tuning pa- rameter). Although we lose some space by compress- ing each block separately, we benefit in that small por- tions of an SSTable can be read without decompress- ing the entire file. Many clients use a two-pass custom compression scheme. The first pass uses Bentley and McIlroy’s scheme [6], which compresses long common strings across a large window. The second pass uses a fast compression algorithm that looks for repetitions in a small 16 KB window of the data. Both compression passes are very fast—they encode at 100–200 MB/s, and decode at 400–1000 MB/s on modern machines.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Even though we emphasized speed instead of space re- duction when choosing our compression algorithms, this two-pass compression scheme does surprisingly well. For example, in Webtable, we use this compression scheme to store Web page contents. In one experiment, we stored a large number of documents in a compressed locality group. For the purposes of the experiment, we limited ourselves to one version of each document in- stead of storing all versions available to us. The scheme achieved a 10-to-1 reduction in space. This is much better than typical Gzip reductions of 3-to-1 or 4-to-1 on HTML pages because of the way Webtable rows are laid out: all pages from a single host are stored close to each other. This allows the Bentley-McIlroy algo- rithm to identify large amounts of shared boilerplate in pages from the same host. Many applications, not just Webtable, choose their row names so that similar data ends up clustered, and therefore achieve very good com- pression ratios. Compression ratios get even better when we store multiple versions of the same value in Bigtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Caching for read performance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;To improve read performance, tablet servers use two lev- els of caching. The Scan Cache is a higher-level cache that caches the key-value pairs returned by the SSTable interface to the tablet server code. The Block Cache is a lower-level cache that caches SSTables blocks that were read from GFS. The Scan Cache is most useful for appli- cations that tend to read the same data repeatedly. The Block Cache is useful for applications that tend to read data that is close to the data they recently read (e.g., se- quential reads, or random reads of different columns in the same locality group within a hot row).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bloom filters&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;As described in Section 5.3, a read operation has to read from all SSTables that make up the state of a tablet. If these SSTables are not in memory, we may end up doing many disk accesses. We reduce the number of accesses by allowing clients to specify that Bloom fil- ters [7] should be created for SSTables in a particu- lar locality group. A Bloom filter allows us to ask whether an SSTable might contain any data for a spec- ified row/column pair. For certain applications, a small amount of tablet server memory used for storing Bloom filters drastically reduces the number of disk seeks re- quired for read operations. Our use of Bloom filters also implies that most lookups for non-existent rows or columns do not need to touch disk.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Commit-log implementation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;If we kept the commit log for each tablet in a separate log file, a very large number of files would be written concurrently in GFS. Depending on the underlying file system implementation on each GFS server, these writes could cause a large number of disk seeks to write to the different physical log files. In addition, having separate log files per tablet also reduces the effectiveness of the group commit optimization, since groups would tend to be smaller. To fix these issues, we append mutations to a single commit log per tablet server, co-mingling mutations for different tablets in the same physical log file [18, 20].&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Using one log provides significant performance ben- efits during normal operation, but it complicates recov- ery. When a tablet server dies, the tablets that it served will be moved to a large number of other tablet servers: each server typically loads a small number of the orig- inal server’s tablets. To recover the state for a tablet, the new tablet server needs to reapply the mutations for that tablet from the commit log written by the original tablet server. &amp;nbsp;However, the mutations for these tablets&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;were co-mingled in the same physical log file. One ap- proach would be for each new tablet server to read this full commit log file and apply just the entries needed for the tablets it needs to recover. However, under such a scheme, if 100 machines were each assigned a single tablet from a failed tablet server, then the log file would be read 100 times (once by each server).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We &amp;nbsp; avoid &amp;nbsp; duplicating &amp;nbsp; log &amp;nbsp; reads &amp;nbsp; by &amp;nbsp; first &amp;nbsp; sort- ing &amp;nbsp;the &amp;nbsp;commit &amp;nbsp;log &amp;nbsp;entries &amp;nbsp;in &amp;nbsp;order &amp;nbsp;of &amp;nbsp;the &amp;nbsp;keys (table, row name, log sequence number).&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;In &amp;nbsp;the sorted output, all mutations for a particular tablet are contiguous and can therefore be read efficiently with one disk seek followed by a sequential read. &amp;nbsp;To parallelize the sorting, we partition the log file into 64 MB seg- ments, and sort each segment in parallel on different tablet servers. This sorting process is coordinated by the master and is initiated when a tablet server indicates that it needs to recover mutations from some commit log file. Writing commit logs to GFS sometimes causes perfor- mance hiccups for a variety of reasons (e.g., a GFS server machine involved in the write crashes, or the network paths traversed to reach the particular set of three GFS servers is suffering network congestion, or is heavily loaded). To protect mutations from GFS latency spikes, each tablet server actually has two log writing threads, each writing to its own log file; only one of these two threads is actively in use at a time. &amp;nbsp;If writes to the ac- tive log file are performing poorly, the log file writing is switched to the other thread, and mutations that are in the commit log queue are written by the newly active log writing thread. &amp;nbsp;Log entries contain sequence numbers to allow the recovery process to elide duplicated entries&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;resulting from this log switching process.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Speeding up tablet recovery&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;If the master moves a tablet from one tablet server to another, the source tablet server first does a minor com- paction on that tablet. This compaction reduces recov- ery time by reducing the amount of uncompacted state in the tablet server’s commit log. After finishing this com- paction, the tablet server stops serving the tablet. Before it actually unloads the tablet, the tablet server does an- other (usually very fast) minor compaction to eliminate any remaining uncompacted state in the tablet server’s log that arrived while the first minor compaction was being performed. After this second minor compaction is complete, the tablet can be loaded on another tablet server without requiring any recovery of log entries.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Exploiting immutability&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Besides the SSTable caches, various other parts of the Bigtable system have been simplified by the fact that all&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;of the SSTables that we generate are immutable. For ex- ample, we do not need any synchronization of accesses to the file system when reading from SSTables. As a re- sult, concurrency control over rows can be implemented very efficiently. The only mutable data structure that is accessed by both reads and writes is the memtable. To re- duce contention during reads of the memtable, we make each memtable row copy-on-write and allow reads and writes to proceed in parallel.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Since SSTables are immutable, the problem of perma- nently removing deleted data is transformed to garbage collecting obsolete SSTables. Each tablet’s SSTables are registered in the METADATA table. The master removes obsolete SSTables as a mark-and-sweep garbage collec- tion [25] over the set of SSTables, where the METADATA table contains the set of roots.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Finally, the immutability of SSTables enables us to split tablets quickly. Instead of generating a new set of SSTables for each child tablet, we let the child tablets share the SSTables of the parent tablet.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;7&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Performance Evaluation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We set up a Bigtable cluster with N tablet servers to measure the performance and scalability of Bigtable as N is varied. The tablet servers were configured to use 1 GB of memory and to write to a GFS cell consisting of 1786 machines with two 400 GB IDE hard drives each. N client machines generated the Bigtable load used for these tests. (We used the same number of clients as tablet servers to ensure that clients were never a bottleneck.) Each machine had two dual-core Opteron 2 GHz chips, enough physical memory to hold the working set of all running processes, and a single gigabit Ethernet link. The machines were arranged in a two-level tree-shaped switched network with approximately 100-200 Gbps of aggregate bandwidth available at the root. All of the ma- chines were in the same hosting facility and therefore the round-trip time between any pair of machines was less than a millisecond.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The tablet servers and master, test clients, and GFS servers all ran on the same set of machines. Every ma- chine ran a GFS server. Some of the machines also ran either a tablet server, or a client process, or processes from other jobs that were using the pool at the same time as these experiments.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;R is the distinct number of Bigtable row keys involved in the test. R was chosen so that each benchmark read or wrote approximately 1 GB of data per tablet server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The sequential write benchmark used row keys with names 0 to R − 1. This space of row keys was parti- tioned into 10N equal-sized ranges. These ranges were assigned to the N clients by a central scheduler that as-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;4M&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;scans&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;random reads (mem)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;3M&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;random writes sequential reads sequential writes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;2M&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;random reads&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;1M&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;100&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;200&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;300&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;400&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;500&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Number of tablet servers&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 6: Number of 1000-byte values read/written per second. The table shows the rate per tablet server; the graph shows the&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;aggregate rate.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;signed the next available range to a client as soon as the client finished processing the previous range assigned to it. This dynamic assignment helped mitigate the effects of performance variations caused by other processes run- ning on the client machines. We wrote a single string un- der each row key. Each string was generated randomly and was therefore uncompressible. In addition, strings under different row key were distinct, so no cross-row compression was possible. The random write benchmark was similar except that the row key was hashed modulo R immediately before writing so that the write load was spread roughly uniformly across the entire row space for the entire duration of the benchmark.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The sequential read benchmark generated row keys in exactly the same way as the sequential write benchmark, but instead of writing under the row key, it read the string stored under the row key (which was written by an earlier invocation of the sequential write benchmark). Similarly, the random read benchmark shadowed the operation of the random write benchmark.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The scan benchmark is similar to the sequential read benchmark, but uses support provided by the Bigtable API for scanning over all values in a row range. Us- ing a scan reduces the number of RPCs executed by the benchmark since a single RPC fetches a large sequence of values from a tablet server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The random reads (mem) benchmark is similar to the random read benchmark, but the locality group that con- tains the benchmark data is marked as in-memory, and therefore the reads are satisfied from the tablet server’s memory instead of requiring a GFS read. For just this benchmark, we reduced the amount of data per tablet server from 1 GB to 100 MB so that it would fit com- fortably in the memory available to the tablet server.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Figure 6 shows two views on the performance of our benchmarks when reading and writing 1000-byte values to Bigtable. The table shows the number of operations per second per tablet server; the graph shows the aggre- gate number of operations per second.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Single tablet-server performance&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Let us first consider performance with just one tablet server. Random reads are slower than all other operations by an order of magnitude or more. Each random read in- volves the transfer of a 64 KB SSTable block over the network from GFS to a tablet server, out of which only a single 1000-byte value is used. The tablet server executes approximately 1200 reads per second, which translates into approximately 75 MB/s of data read from GFS. This bandwidth is enough to saturate the tablet server CPUs because of overheads in our networking stack, SSTable parsing, and Bigtable code, and is also almost enough to saturate the network links used in our system. Most Bigtable applications with this type of an access pattern reduce the block size to a smaller value, typically 8KB.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Random reads from memory are much faster since each 1000-byte read is satisfied from the tablet server’s local memory without fetching a large 64 KB block from GFS.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Random and sequential writes perform better than ran- dom reads since each tablet server appends all incoming writes to a single commit log and uses group commit to stream these writes efficiently to GFS. There is no sig- nificant difference between the performance of random writes and sequential writes; in both cases, all writes to the tablet server are recorded in the same commit log.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Sequential reads perform better than random reads since every 64 KB SSTable block that is fetched from GFS is stored into our block cache, where it is used to serve the next 64 read requests.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Scans are even faster since the tablet server can return a large number of values in response to a single client RPC, and therefore RPC overhead is amortized over a large number of values.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Scaling&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Aggregate throughput increases dramatically, by over a factor of a hundred, as we increase the number of tablet servers in the system from 1 to 500. &amp;nbsp;For example, the&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;percentage of data served from memory, and complexity of the table schema. In the rest of this section, we briefly describe how three product teams use Bigtable.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Table 1: Distribution of number of tablet servers in Bigtable clusters.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;performance of random reads from memory increases by almost a factor of 300 as the number of tablet server in- creases by a factor of 500. This behavior occurs because the bottleneck on performance for this benchmark is the individual tablet server CPU.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;However, performance does not increase linearly. For most benchmarks, there is a significant drop in per-server throughput when going from 1 to 50 tablet servers. This drop is caused by imbalance in load in multiple server configurations, often due to other processes contending for CPU and network. Our load balancing algorithm at- tempts to deal with this imbalance, but cannot do a per- fect job for two main reasons: rebalancing is throttled to reduce the number of tablet movements (a tablet is un- available for a short time, typically less than one second, when it is moved), and the load generated by our bench- marks shifts around as the benchmark progresses.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The random read benchmark shows the worst scaling&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(an increase in aggregate throughput by only a factor of 100 for a 500-fold increase in number of servers). This behavior occurs because (as explained above) we transfer one large 64KB block over the network for every 1000- byte read. This transfer saturates various shared 1 Gi- gabit links in our network and as a result, the per-server throughput drops significantly as we increase the number of machines.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Real Applications&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;As of August 2006, there are 388 non-test Bigtable clus- ters running in various Google machine clusters, with a combined total of about 24,500 tablet servers. Table 1 shows a rough distribution of tablet servers per cluster. Many of these clusters are used for development pur- poses and therefore are idle for significant periods. One group of 14 busy clusters with 8069 total tablet servers saw an aggregate volume of more than 1.2 million re- quests per second, with incoming RPC traffic of about 741 MB/s and outgoing RPC traffic of about 16 GB/s.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Table 2 provides some data about a few of the tables currently in use. Some tables store data that is served to users, whereas others store data for batch processing; the tables range widely in total size, average cell size,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;8.1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Google Analytics&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Analytics (analytics.google.com) is a service that helps webmasters analyze traffic patterns at their web sites. It provides aggregate statistics, such as the number of unique visitors per day and the page views per URL per day, as well as site-tracking reports, such as the percentage of users that made a purchase, given that they earlier viewed a specific page.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;To enable the service, webmasters embed a small JavaScript program in their web pages. This program is invoked whenever a page is visited. It records various information about the request in Google Analytics, such as a user identifier and information about the page be- ing fetched. Google Analytics summarizes this data and makes it available to webmasters.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We briefly describe two of the tables used by Google Analytics. The raw click table (˜200 TB) maintains a row for each end-user session. The row name is a tuple containing the website’s name and the time at which the session was created. This schema ensures that sessions that visit the same web site are contiguous, and that they are sorted chronologically. This table compresses to 14% of its original size.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The summary table (˜20 TB) contains various prede- fined summaries for each website. This table is gener- ated from the raw click table by periodically scheduled MapReduce jobs. Each MapReduce job extracts recent session data from the raw click table. The overall sys- tem’s throughput is limited by the throughput of GFS. This table compresses to 29% of its original size.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;8.2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Google Earth&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google operates a collection of services that provide users with access to high-resolution satellite imagery of the world’s surface, both through the web-based Google Maps interface (maps.google.com) and through the Google Earth (earth.google.com) custom client soft- ware. These products allow users to navigate across the world’s surface: they can pan, view, and annotate satel- lite imagery at many different levels of resolution. This system uses one table to preprocess data, and a different set of tables for serving client data.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The preprocessing pipeline uses one table to store raw imagery. During preprocessing, the imagery is cleaned and consolidated into final serving data. This table con- tains approximately 70 terabytes of data and therefore is served from disk. The images are efficiently compressed already, so Bigtable compression is disabled.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Project&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;name&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Table size&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(TB)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Compression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;ratio&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;# Cells&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(billions)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;# Column&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Families&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;# Locality&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Groups&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;% in&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;memory&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Latency-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;sensitive?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Crawl&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;800&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;11%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1000&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;16&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;No&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Crawl&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;50&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;33%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;200&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;No&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Analytics&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;20&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;29%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;10&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Analytics&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;200&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;14%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;80&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Base&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;31%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;10&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;29&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;15%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Earth&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0.5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;64%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;7&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;2&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;33%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google Earth&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;70&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;–&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;No&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Orkut&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;–&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;0.9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;8&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;5&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;1%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Personalized Search&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;4&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;47%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;6&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;93&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;11&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;5%&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Table 2: Characteristics of a few tables in production use. Table size (measured before compression) and # Cells indicate approxi- mate sizes. Compression ratio is not given for tables that have compression disabled.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Each row in the imagery table corresponds to a sin- gle geographic segment. Rows are named to ensure that adjacent geographic segments are stored near each other. The table contains a column family to keep track of the sources of data for each segment. This column family has a large number of columns: essentially one for each raw data image. Since each segment is only built from a few images, this column family is very sparse.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The preprocessing pipeline relies heavily on MapRe- duce over Bigtable to transform data. The overall system processes over 1 MB/sec of data per tablet server during some of these MapReduce jobs.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The serving system uses one table to index data stored in GFS. This table is relatively small (˜500 GB), but it must serve tens of thousands of queries per second per datacenter with low latency. As a result, this table is hosted across hundreds of tablet servers and contains in- memory column families.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;8.3&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Personalized Search&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Personalized Search (www.google.com/psearch) is an opt-in service that records user queries and clicks across a variety of Google properties such as web search, im- ages, and news. Users can browse their search histories to revisit their old queries and clicks, and they can ask for personalized search results based on their historical Google usage patterns.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Personalized Search stores each user’s data in Bigtable. Each user has a unique userid and is assigned a row named by that userid. All user actions are stored in a table. A separate column family is reserved for each type of action (for example, there is a column family that stores all web queries). Each data element uses as its Bigtable timestamp the time at which the corresponding user action occurred. Personalized Search generates user profiles using a MapReduce over Bigtable. These user profiles are used to personalize live search results.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The Personalized Search data is replicated across sev- eral Bigtable clusters to increase availability and to re- duce latency due to distance from clients. The Personal- ized Search team originally built a client-side replication mechanism on top of Bigtable that ensured eventual con- sistency of all replicas. The current system now uses a replication subsystem that is built into the servers.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The design of the Personalized Search storage system allows other groups to add new per-user information in their own columns, and the system is now used by many other Google properties that need to store per-user con- figuration options and settings. Sharing a table amongst many groups resulted in an unusually large number of column families. To help support sharing, we added a simple quota mechanism to Bigtable to limit the stor- age consumption by any particular client in shared ta- bles; this mechanism provides some isolation between the various product groups using this system for per-user information storage.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;9&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Lessons&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;In the process of designing, implementing, maintaining, and supporting Bigtable, we gained useful experience and learned several interesting lessons.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;One lesson we learned is that large distributed sys-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;tems are vulnerable to many types of failures, not just the standard network partitions and fail-stop failures as- sumed in many distributed protocols. For example, we have seen problems due to all of the following causes: memory and network corruption, large clock skew, hung machines, extended and asymmetric network partitions, bugs in other systems that we are using (Chubby for ex- ample), overflow of GFS quotas, and planned and un- planned hardware maintenance. As we have gained more experience with these problems, we have addressed them by changing various protocols. For example, we added checksumming to our RPC mechanism. We also handled&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;some problems by removing assumptions made by one part of the system about another part. For example, we stopped assuming a given Chubby operation could return only one of a fixed set of errors.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Another lesson we learned is that it is important to delay adding new features until it is clear how the new features will be used. For example, we initially planned to support general-purpose transactions in our API. Be- cause we did not have an immediate use for them, how- ever, we did not implement them. Now that we have many real applications running on Bigtable, we have been able to examine their actual needs, and have discov- ered that most applications require only single-row trans- actions. Where people have requested distributed trans- actions, the most important use is for maintaining sec- ondary indices, and we plan to add a specialized mech- anism to satisfy this need. The new mechanism will be less general than distributed transactions, but will be more efficient (especially for updates that span hundreds of rows or more) and will also interact better with our scheme for optimistic cross-data-center replication.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A practical lesson that we learned from supporting Bigtable is the importance of proper system-level mon- itoring (i.e., monitoring both Bigtable itself, as well as the client processes using Bigtable). For example, we ex- tended our RPC system so that for a sample of the RPCs, it keeps a detailed trace of the important actions done on behalf of that RPC. This feature has allowed us to de- tect and fix many problems such as lock contention on tablet data structures, slow writes to GFS while com- mitting Bigtable mutations, and stuck accesses to the METADATA table when METADATA tablets are unavail- able. Another example of useful monitoring is that ev- ery Bigtable cluster is registered in Chubby. This allows us to track down all clusters, discover how big they are, see which versions of our software they are running, how much traffic they are receiving, and whether or not there are any problems such as unexpectedly large latencies.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The most important lesson we learned is the value of simple designs. Given both the size of our system (about 100,000 lines of non-test code), as well as the fact that code evolves over time in unexpected ways, we have found that code and design clarity are of immense help in code maintenance and debugging. One exam- ple of this is our tablet-server membership protocol. Our first protocol was simple: the master periodically issued leases to tablet servers, and tablet servers killed them- selves if their lease expired. Unfortunately, this proto- col reduced availability significantly in the presence of network problems, and was also sensitive to master re- covery time. We redesigned the protocol several times until we had a protocol that performed well. However, the resulting protocol was too complex and depended on&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;the behavior of Chubby features that were seldom exer- cised by other applications. We discovered that we were spending an inordinate amount of time debugging ob- scure corner cases, not only in Bigtable code, but also in Chubby code. Eventually, we scrapped this protocol and moved to a newer simpler protocol that depends solely on widely-used Chubby features.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;10&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Related Work&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The Boxwood project [24] has components that overlap in some ways with Chubby, GFS, and Bigtable, since it provides for distributed agreement, locking, distributed chunk storage, and distributed B-tree storage. In each case where there is overlap, it appears that the Box- wood’s component is targeted at a somewhat lower level than the corresponding Google service. The Boxwood project’s goal is to provide infrastructure for building higher-level services such as file systems or databases, while the goal of Bigtable is to directly support client applications that wish to store data.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Many recent projects have tackled the problem of pro- viding distributed storage or higher-level services over wide area networks, often at “Internet scale.” This in- cludes work on distributed hash tables that began with projects such as CAN [29], Chord [32], Tapestry [37], and Pastry [30]. These systems address concerns that do not arise for Bigtable, such as highly variable bandwidth, untrusted participants, or frequent reconfiguration; de- centralized control and Byzantine fault tolerance are not Bigtable goals.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;In terms of the distributed data storage model that one might provide to application developers, we believe the key-value pair model provided by distributed B-trees or distributed hash tables is too limiting. Key-value pairs are a useful building block, but they should not be the only building block one provides to developers. The model we chose is richer than simple key-value pairs, and supports sparse semi-structured data. Nonetheless, it is still simple enough that it lends itself to a very effi- cient flat-file representation, and it is transparent enough (via locality groups) to allow our users to tune important behaviors of the system.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Several database vendors have developed parallel databases that can store large volumes of data. Oracle’s Real Application Cluster database [27] uses shared disks to store data (Bigtable uses GFS) and a distributed lock manager (Bigtable uses Chubby). IBM’s DB2 Parallel Edition [4] is based on a shared-nothing [33] architecture similar to Bigtable. Each DB2 server is responsible for a subset of the rows in a table which it stores in a local relational database. Both products provide a complete relational model with transactions.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable locality groups realize similar compression and disk read performance benefits observed for other systems that organize data on disk using column-based rather than row-based storage, including C-Store [1, 34] and commercial products such as Sybase IQ [15, 36], SenSage [31], KDB+ [22], and the ColumnBM storage layer in MonetDB/X100 [38]. Another system that does vertical and horizontal data partioning into flat files and achieves good data compression ratios is AT&amp;amp;T’s Day- tona database [19]. Locality groups do not support CPU- cache-level optimizations, such as those described by Ailamaki [2].&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;The manner in which Bigtable uses memtables and SSTables to store updates to tablets is analogous to the way that the Log-Structured Merge Tree [26] stores up- dates to index data. In both systems, sorted data is buffered in memory before being written to disk, and reads must merge data from memory and disk.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;C-Store and Bigtable share many characteristics: both systems use a shared-nothing architecture and have two different data structures, one for recent writes, and one for storing long-lived data, with a mechanism for mov- ing data from one form to the other. The systems dif- fer significantly in their API: C-Store behaves like a relational database, whereas Bigtable provides a lower level read and write interface and is designed to support many thousands of such operations per second per server. C-Store is also a “read-optimized relational DBMS”, whereas Bigtable provides good performance on both read-intensive and write-intensive applications.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Bigtable’s load balancer has to solve some of the same kinds of load and memory balancing problems faced by shared-nothing databases (e.g., [11, 35]). Our problem is somewhat simpler: (1) we do not consider the possibility of multiple copies of the same data, possibly in alternate forms due to views or indices; (2) we let the user tell us what data belongs in memory and what data should stay on disk, rather than trying to determine this dynamically;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(3) we have no complex queries to execute or optimize.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;11&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Conclusions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We have described Bigtable, a distributed system for storing structured data at Google. Bigtable clusters have been in production use since April 2005, and we spent roughly seven person-years on design and implementa- tion before that date. As of August 2006, more than sixty projects are using Bigtable. Our users like the perfor- mance and high availability provided by the Bigtable im- plementation, and that they can scale the capacity of their clusters by simply adding more machines to the system as their resource demands change over time.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Given the unusual interface to Bigtable, an interest- ing question is how difficult it has been for our users to adapt to using it. New users are sometimes uncertain of how to best use the Bigtable interface, particularly if they are accustomed to using relational databases that support general-purpose transactions. Nevertheless, the fact that many Google products successfully use Bigtable demon- strates that our design works well in practice.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We are in the process of implementing several addi- tional Bigtable features, such as support for secondary indices and infrastructure for building cross-data-center replicated Bigtables with multiple master replicas. We have also begun deploying Bigtable as a service to prod- uct groups, so that individual groups do not need to main- tain their own clusters. As our service clusters scale, we will need to deal with more resource-sharing issues within Bigtable itself [3, 5].&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Finally, we have found that there are significant ad- vantages to building our own storage solution at Google. We have gotten a substantial amount of flexibility from designing our own data model for Bigtable. In addi- tion, our control over Bigtable’s implementation, and the other Google infrastructure upon which Bigtable de- pends, means that we can remove bottlenecks and ineffi- ciencies as they arise.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Acknowledgements&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;We thank the anonymous reviewers, David Nagle, and our shepherd Brad Calder, for their feedback on this pa- per. The Bigtable system has benefited greatly from the feedback of our many users within Google. In addition, we thank the following people for their contributions to Bigtable: Dan Aguayo, Sameer Ajmani, Zhifeng Chen, Bill Coughran, Mike Epstein, Healfdene Goguen, Robert Griesemer, Jeremy Hylton, Josh Hyman, Alex Khesin, Joanna Kulik, Alberto Lerner, Sherry Listgarten, Mike Maloney, Eduardo Pinheiro, Kathy Polizzi, Frank Yellin, and Arthur Zwiegincew.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;References&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[1] &amp;nbsp;ABADI, &amp;nbsp;D. &amp;nbsp;J., &amp;nbsp; MADDEN, &amp;nbsp;S. &amp;nbsp;R., &amp;nbsp;AND &amp;nbsp; FERREIRA,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;M. C. Integrating compression and execution in column- oriented database systems. Proc. of SIGMOD (2006).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[2] &amp;nbsp;AILAMAKI, A., DEWITT, D. J., HILL, M. D., AND SK-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;OUNAKIS, M. Weaving relations for cache performance. In The VLDB Journal (2001), pp. 169–180.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[3] &amp;nbsp;BANGA, G., DRUSCHEL, P., AND &amp;nbsp;MOGUL, J. C. &amp;nbsp;Re-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;source containers: A new facility for resource manage- ment in server systems. In Proc. of the 3rd OSDI (Feb. 1999), pp. 45–58.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[4] &amp;nbsp;BARU, &amp;nbsp;C. &amp;nbsp;K., &amp;nbsp;FECTEAU, &amp;nbsp;G., &amp;nbsp;GOYAL, &amp;nbsp;A., &amp;nbsp;HSIAO, H., JHINGRAN, A., PADMANABHAN, S., COPELAND,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;G. P., AND WILSON, W. G. DB2 parallel edition. IBM Systems Journal 34, 2 (1995), 292–322.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[5] BAVIER, A., BOWMAN, M., CHUN, B., CULLER, D., KARLIN, S., PETERSON, L., ROSCOE, T., SPALINK, T.,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;AND WAWRZONIAK, M. Operating system support for planetary-scale network services. In Proc. of the 1st NSDI (Mar. 2004), pp. 253–266.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[6] &amp;nbsp;BENTLEY, J. L., AND MCILROY, M. D. Data compres-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;sion using long common strings. In Data Compression Conference (1999), pp. 287–295.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[7] BLOOM, B. H. Space/time trade-offs in hash coding with allowable errors. CACM 13, 7 (1970), 422–426.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[8] BURROWS, M. The Chubby lock service for loosely- coupled distributed systems. &amp;nbsp;In Proc. of the 7th OSDI (Nov. 2006).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[9] &amp;nbsp;CHANDRA, &amp;nbsp;T., &amp;nbsp;GRIESEMER, R., &amp;nbsp;AND &amp;nbsp;REDSTONE, J.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Paxos made live — An engineering perspective. In Proc. of PODC (2007).&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[10] COMER, D. Ubiquitous B-tree. Computing Surveys 11, 2 (June 1979), 121–137.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[11] &amp;nbsp;COPELAND, &amp;nbsp;G. &amp;nbsp;P., &amp;nbsp;ALEXANDER, &amp;nbsp;W., &amp;nbsp;BOUGHTER,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;E. E., AND KELLER, T. W. Data placement in Bubba. In&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Proc. of SIGMOD (1988), pp. 99–108.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[12] DEAN, J., AND GHEMAWAT, S. MapReduce: Simplified data processing on large clusters. In Proc. of the 6th OSDI (Dec. 2004), pp. 137–150.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[13] &amp;nbsp;DEWITT, &amp;nbsp;D., &amp;nbsp;KATZ, &amp;nbsp;R., &amp;nbsp;OLKEN, &amp;nbsp;F., &amp;nbsp;SHAPIRO, &amp;nbsp;L.,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;STONEBRAKER, M., AND WOOD, D. Implementation techniques for main memory database systems. In Proc. of SIGMOD (June 1984), pp. 1–8.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[14] DEWITT, D. J., AND GRAY, J. Parallel database sys- tems: The future of high performance database systems. CACM 35, 6 (June 1992), 85–98.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[15] FRENCH, C. D. One size fits all database architectures do not work for DSS. In Proc. of SIGMOD (May 1995), pp. 449–450.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[16] GAWLICK, D., AND KINKADE, D. Varieties of concur- rency control in IMS/VS fast path. Database Engineering Bulletin 8, 2 (1985), 3–10.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[17] &amp;nbsp;GHEMAWAT, S., GOBIOFF, H., AND LEUNG, S.-T. The&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Google file system. In Proc. of the 19th ACM SOSP (Dec. 2003), pp. 29–43.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[18] GRAY, J. Notes on database operating systems. In Oper- ating Systems — An Advanced Course, vol. 60 of Lecture Notes in Computer Science. Springer-Verlag, 1978.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[19] GREER, R. Daytona and the fourth-generation language Cymbal. In Proc. of SIGMOD (1999), pp. 525–526.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[20] HAGMANN, R. Reimplementing the Cedar file system using logging and group commit. In Proc. of the 11th SOSP (Dec. 1987), pp. 155–162.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[21] &amp;nbsp;HARTMAN, J. H., AND OUSTERHOUT, J. K. The Zebra&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;striped network file system. &amp;nbsp;In Proc. of the 14th SOSP&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;(Asheville, NC, 1993), pp. 29–43.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[22] &amp;nbsp;KX.COM. kx.com/products/database.php. Product page. [23] &amp;nbsp;LAMPORT, L. The part-time parliament. ACM TOCS 16,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;2 (1998), 133–169.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[24] MACCORMICK, J., MURPHY, N., NAJORK, M., THEKKATH, C. A., AND ZHOU, L. Boxwood: Abstrac- tions as the foundation for storage infrastructure. In Proc. of the 6th OSDI (Dec. 2004), pp. 105–120.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[25] MCCARTHY, J. Recursive functions of symbolic expres- sions and their computation by machine. CACM 3, 4 (Apr. 1960), 184–195.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[26] &amp;nbsp;O’NEIL, P., CHENG, E., GAWLICK, D., AND O’NEIL,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;E. The log-structured merge-tree (LSM-tree). Acta Inf. 33, 4 (1996), 351–385.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[27] &amp;nbsp;ORACLE.COM. &amp;nbsp; www.oracle.com/technology/products/- database/clustering/index.html. Product page.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[28] &amp;nbsp;PIKE, R., DORWARD, S., GRIESEMER, R., AND QUIN-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;LAN, S. Interpreting the data: Parallel analysis with Sawzall. &amp;nbsp;Scientific Programming Journal 13, 4 (2005),&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;227–298.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[29] &amp;nbsp;RATNASAMY, S., FRANCIS, P., HANDLEY, M., KARP,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;R., AND SHENKER, S. A scalable content-addressable network. In Proc. of SIGCOMM (Aug. 2001), pp. 161– 172.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[30] &amp;nbsp;ROWSTRON, &amp;nbsp;A., &amp;nbsp;AND &amp;nbsp;DRUSCHEL, &amp;nbsp;P. &amp;nbsp; &amp;nbsp;Pastry: &amp;nbsp;Scal-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;able, distributed object location and routing for large- scale peer-to-peer systems. In Proc. of Middleware 2001 (Nov. 2001), pp. 329–350.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[31] &amp;nbsp;SENSAGE.COM.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;sensage.com/products-sensage.htm.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Product page.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[32] &amp;nbsp;STOICA, I., MORRIS, R., KARGER, D., KAASHOEK,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;M. F., AND BALAKRISHNAN, H. Chord: A scalable peer-to-peer lookup service for Internet applications. In Proc. of SIGCOMM (Aug. 2001), pp. 149–160.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[33] &amp;nbsp;STONEBRAKER, &amp;nbsp;M.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The &amp;nbsp;case &amp;nbsp;for &amp;nbsp;shared &amp;nbsp;nothing.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Database Engineering Bulletin 9, 1 (Mar. 1986), 4–9.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[34] &amp;nbsp;STONEBRAKER, M., ABADI, D. J., BATKIN, A., CHEN, X., CHERNIACK, M., FERREIRA, M., LAU, E., LIN,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;A., MADDEN, S., O’NEIL, E., O’NEIL, &amp;nbsp;P., &amp;nbsp;RASIN, A., TRAN, N., AND &amp;nbsp;ZDONIK, S. &amp;nbsp;C-Store: A column-&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;oriented DBMS. In Proc. of VLDB (Aug. 2005), pp. 553–&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;564.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[35] &amp;nbsp;STONEBRAKER, &amp;nbsp; M., &amp;nbsp; AOKI, &amp;nbsp; P. &amp;nbsp;M., &amp;nbsp; DEVINE, &amp;nbsp; R.,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;LITWIN, W., AND OLSON, M. A. Mariposa: A new ar- chitecture for distributed data. In Proc. of the Tenth ICDE (1994), IEEE Computer Society, pp. 54–65.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[36] &amp;nbsp;SYBASE.COM.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;www.sybase.com/products/database- servers/sybaseiq. Product page.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[37] &amp;nbsp;ZHAO, B. Y., KUBIATOWICZ, J., AND &amp;nbsp;JOSEPH, A. D.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;Tapestry: An infrastructure for fault-tolerant wide-area location and routing. Tech. Rep. UCB/CSD-01-1141, CS Division, UC Berkeley, Apr. 2001.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;[38] &amp;nbsp;ZUKOWSKI, M., BONCZ, P. A., NES, N., AND HEMAN,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Times New Roman, serif;&quot;&gt;&lt;span style=&quot;line-height: 13.328125px;&quot;&gt;S. MonetDB/X100 — A DBMS in the CPU cache. IEEE Data Eng. Bull. 28, 2 (2005), 17–22.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: &#39;Times New Roman&#39;, serif; font-size: 12pt; line-height: 10pt;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/7916674922450567031/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/7916674922450567031' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7916674922450567031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7916674922450567031'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2013/10/googlebigtable.html' title='Google.Bigtable'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-688788971662635848</id><published>2013-10-09T17:32:00.000-07:00</published><updated>2013-10-09T17:32:26.245-07:00</updated><title type='text'></title><content type='html'>C# Coding Standards and Best Programming Practices&lt;br /&gt;
&lt;br /&gt;
By&lt;br /&gt;
&lt;br /&gt;
http://www.dotnetspider.com&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Author&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;License, Copyrights and Disclaimer&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Revision History&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Introduction&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Purpose of coding standards and best practices&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;3&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;How to follow the standards across the team&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;4&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Naming Conventions and Standards&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;4&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Indentation and Spacing&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;7&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Good Programming practices&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;10&lt;br /&gt;
10.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Architecture&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;15&lt;br /&gt;
11.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;ASP.NET&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;16&lt;br /&gt;
12.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Comments&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;16&lt;br /&gt;
13.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Exception Handling&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;17&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Author&lt;br /&gt;
&lt;br /&gt;
This document is prepared by the dotnetspider team. Latest version of this document can be downloaded from http://www.dotnetspider.com/tutorials/BestPractices.aspx. Please post your comments and feedback about this document in the above url.&lt;br /&gt;
&lt;br /&gt;
Most of the information in this document is compiled from the coding standards and best practices published in various articles in dotnetspider.com. Also, we referred to the guidelines published by Microsoft and various other sources.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;License, Copyrights and Disclaimer&lt;br /&gt;
&lt;br /&gt;
You are permitted to use and distribute this document for any non commercial purpose as long as you retain this license &amp;amp; copyrights information.&lt;br /&gt;
&lt;br /&gt;
This document is provided on “As-Is” basis. The author of this document will not be responsible for any kind of loss for you due to any inaccurate information provided in this document.&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Revision History&lt;br /&gt;
&lt;br /&gt;
If you are editing this document, you are required to fill the revision history with your name and time stamp so that anybody can easily distinguish your updates from the original author.&lt;br /&gt;
&lt;br /&gt;
Sl#&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Date&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Changed By&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Description&lt;br /&gt;
1&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Introduction&lt;br /&gt;
&lt;br /&gt;
Anybody can write code. With a few months of programming experience, you can write &#39;working applications&#39;. Making it work is easy, but doing it the right way requires more work, than just making it work.&lt;br /&gt;
&lt;br /&gt;
Believe it, majority of the programmers write &#39;working code&#39;, but not ‘good code&#39;. Writing &#39;good code&#39; is an art and you must learn and practice it.&lt;br /&gt;
&lt;br /&gt;
Everyone may have different definitions for the term ‘good code’. In my definition, the following are the characteristics of good code.&lt;br /&gt;
&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Reliable&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Maintainable&lt;br /&gt;
•&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Efficient&lt;br /&gt;
&lt;br /&gt;
Most of the developers are inclined towards writing code for higher performance, compromising reliability and maintainability. But considering the long term ROI (Return On Investment), efficiency and performance comes below reliability and maintainability. If your code is not reliable and maintainable, you (and your company) will be spending lot of time to identify issues, trying to understand code etc throughout the life of your application.&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Purpose of coding standards and best practices&lt;br /&gt;
&lt;br /&gt;
To develop reliable and maintainable applications, you must follow coding standards and best practices.&lt;br /&gt;
&lt;br /&gt;
The naming conventions, coding standards and best practices described in this document are compiled from our own experience and by referring to various Microsoft and non Microsoft guidelines.&lt;br /&gt;
&lt;br /&gt;
There are several standards exists in the programming industry. None of them are wrong or bad and you may follow any of them. What is more important is, selecting one standard approach and ensuring that everyone is following it.&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;How to follow the standards across the team&lt;br /&gt;
&lt;br /&gt;
If you have a team of different skills and tastes, you are going to have a tough time convincing everyone to follow the same standards. The best approach is to have a team meeting and developing your own standards document. You may use this document as a template to prepare your own document.&lt;br /&gt;
&lt;br /&gt;
Distribute a copy of this document (or your own coding standard document) well ahead of the coding standards meeting. All members should come to the meeting prepared to discuss pros and cons of the various points in the document. Make sure you have a manager present in the meeting to resolve conflicts.&lt;br /&gt;
&lt;br /&gt;
Discuss all points in the document. Everyone may have a different opinion about each point, but at the end of the discussion, all members must agree upon the standard you are going to follow. Prepare a new standards document with appropriate changes based on the suggestions from all of the team members. Print copies of it and post it in all workstations.&lt;br /&gt;
&lt;br /&gt;
After you start the development, you must schedule code review meetings to ensure that everyone is following the rules. 3 types of code reviews are recommended:&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Peer review – another team member review the code to ensure that the code follows the coding standards and meets requirements. This level of review can include some unit testing also. Every file in the project must go through this process.&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Architect review – the architect of the team must review the core modules of the project to ensure that they adhere to the design and there is no “big” mistakes that can affect the project in the long run.&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Group review – randomly select one or more files and conduct a group review once in a week. Distribute a printed copy of the files to all team members 30 minutes before the meeting. Let them read and come up with points for discussion. In the group review meeting, use a projector to display the file content in the screen. Go through every sections of the code and let every member give their suggestions on how could that piece of code can be written in a better way. (Don’t forget to appreciate the developer for the good work and also make sure he does not get offended by the “group attack”!)&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Naming Conventions and Standards&lt;br /&gt;
&lt;br /&gt;
Note :&lt;br /&gt;
The terms Pascal Casing and Camel Casing are used throughout this document.&lt;br /&gt;
Pascal Casing - First character of all words are Upper Case and other characters are lower case.&lt;br /&gt;
Example: BackColor&lt;br /&gt;
Camel Casing - First character of all words, except the first word are Upper Case and other characters are lower case.&lt;br /&gt;
Example: backColor&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use Pascal casing for Class names&lt;br /&gt;
&lt;br /&gt;
public class HelloWorld&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use Pascal casing for Method names&lt;br /&gt;
&lt;br /&gt;
void SayHello(string name)&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use Camel casing for variables and method parameters&lt;br /&gt;
&lt;br /&gt;
int totalCount = 0;&lt;br /&gt;
void SayHello(string name)&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;string fullMessage = &quot;Hello &quot; + name;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use the prefix “I” with Camel Casing for interfaces ( Example: IEntity )&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not use Hungarian notation to name variables.&lt;br /&gt;
&lt;br /&gt;
In earlier days most of the programmers liked it - having the data type as a prefix for the variable name and using m_ as prefix for member variables. Eg:&lt;br /&gt;
&lt;br /&gt;
string m_sName;&lt;br /&gt;
int nAge;&lt;br /&gt;
&lt;br /&gt;
However, in .NET coding standards, this is not recommended. Usage of data type and m_ to represent member variables should not be used. All variables should use camel casing.&lt;br /&gt;
&lt;br /&gt;
Some programmers still prefer to use the prefix m_ to represent member variables, since there is no other easy way to identify a member variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use Meaningful, descriptive words to name variables. Do not use abbreviations.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
string address&lt;br /&gt;
int salary&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
string nam&lt;br /&gt;
string addr&lt;br /&gt;
int sal&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not use single character variable names like i, n, s etc. Use names like index, temp&lt;br /&gt;
&lt;br /&gt;
One exception in this case would be variables used for iterations in loops:&lt;br /&gt;
&lt;br /&gt;
for ( int i = 0; i &amp;lt; count; i++ )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
If the variable is used only as a counter for iteration and is not used anywhere else in the loop, many people still like to use a single char variable (i) instead of inventing a different suitable name.&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not use underscores (_) for local variable names.&lt;br /&gt;
&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;All member variables must be prefixed with underscore (_) so that they can be identified from other local variables.&lt;br /&gt;
&lt;br /&gt;
10.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not use variable names that resemble keywords.&lt;br /&gt;
&lt;br /&gt;
11.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Prefix boolean variables, properties and methods with “is” or similar prefixes.&lt;br /&gt;
&lt;br /&gt;
Ex: private bool _isFinished&lt;br /&gt;
&lt;br /&gt;
12.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Namespace names should follow the standard pattern&lt;br /&gt;
&lt;br /&gt;
&lt;company name=&quot;&quot;&gt;.&lt;product name=&quot;&quot;&gt;.&lt;top level=&quot;&quot; module=&quot;&quot;&gt;.&lt;bottom level=&quot;&quot; module=&quot;&quot;&gt;&lt;/bottom&gt;&lt;/top&gt;&lt;/product&gt;&lt;/company&gt;&lt;br /&gt;
&lt;br /&gt;
13.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use appropriate prefix for the UI elements so that you can identify them from the rest of the variables.&lt;br /&gt;
&lt;br /&gt;
There are 2 different approaches recommended here.&lt;br /&gt;
&lt;br /&gt;
a.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use a common prefix ( ui_ ) for all UI elements. This will help you group all of the UI elements together and easy to access all of them from the intellisense.&lt;br /&gt;
&lt;br /&gt;
b.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use appropriate prefix for each of the ui element. A brief list is given below. Since .NET has given several controls, you may have to arrive at a complete list of standard prefixes for each of the controls (including third party controls) you are using.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Control&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Prefix&lt;br /&gt;
Label&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;lbl&lt;br /&gt;
TextBox&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;txt&lt;br /&gt;
DataGrid&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;dtg&lt;br /&gt;
Button&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;btn&lt;br /&gt;
ImageButton&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;imb&lt;br /&gt;
Hyperlink&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;hlk&lt;br /&gt;
DropDownList&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;ddl&lt;br /&gt;
ListBox&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;lst&lt;br /&gt;
DataList&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;dtl&lt;br /&gt;
Repeater&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;rep&lt;br /&gt;
Checkbox&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;chk&lt;br /&gt;
CheckBoxList&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;cbl&lt;br /&gt;
RadioButton&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;rdo&lt;br /&gt;
RadioButtonList&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;rbl&lt;br /&gt;
Image&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;img&lt;br /&gt;
Panel&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;pnl&lt;br /&gt;
PlaceHolder&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;phd&lt;br /&gt;
Table&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;tbl&lt;br /&gt;
Validators&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;val&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
14.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;File name should match with class name.&lt;br /&gt;
&lt;br /&gt;
For example, for the class HelloWorld, the file name should be helloworld.cs (or, helloworld.vb)&lt;br /&gt;
&lt;br /&gt;
15.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use Pascal Case for file names.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Indentation and Spacing&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use TAB for indentation. Do not use SPACES. &amp;nbsp;Define the Tab size as 4.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Comments should be in the same level as the code (use the same level of indentation).&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
// Format a message and display&lt;br /&gt;
&lt;br /&gt;
string fullMessage = &quot;Hello &quot; + name;&lt;br /&gt;
DateTime currentTime = DateTime.Now;&lt;br /&gt;
string message = fullMessage + &quot;, the time is : &quot; + currentTime.ToShortTimeString();&lt;br /&gt;
MessageBox.Show ( message );&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
// Format a message and display&lt;br /&gt;
string fullMessage = &quot;Hello &quot; + name;&lt;br /&gt;
DateTime currentTime = DateTime.Now;&lt;br /&gt;
string message = fullMessage + &quot;, the time is : &quot; + currentTime.ToShortTimeString();&lt;br /&gt;
MessageBox.Show ( message );&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Curly braces ( {} ) should be in the same level as the code outside the braces.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use one blank line to separate logical groups of code.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;bool SayHello ( string name )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;string fullMessage = &quot;Hello &quot; + name;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;DateTime currentTime = DateTime.Now;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;string message = fullMessage + &quot;, the time is : &quot; + currentTime.ToShortTimeString();&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;MessageBox.Show ( message );&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if ( ... )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// ...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;return false;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;return true;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;bool SayHello (string name)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;string fullMessage = &quot;Hello &quot; + name;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;DateTime currentTime = DateTime.Now;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;string message = fullMessage + &quot;, the time is : &quot; + currentTime.ToShortTimeString();&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;MessageBox.Show ( message );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if ( ... )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// ...&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;return false;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;return true;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;There should be one and only one single blank line between each method inside the class.&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The curly braces should be on a separate line and not in the same line as if, for etc.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if ( ... )&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if ( ... )&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use a single space before and after each operator and brackets.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if ( showResult == true )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;for ( int i = 0; i &amp;lt; 10; i++ )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;//&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;if(showResult==true)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;for(int&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt; &amp;nbsp; i= 0;i&lt;10 i=&quot;&quot; p=&quot;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;//&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use #region to group related pieces of code together. If you use proper grouping using #region, the page should like this when all definitions are collapsed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Keep private member variables, properties and methods in the top of the file and public members in the bottom. &lt;br /&gt;
&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Good Programming practices&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Avoid writing very long methods. A method should typically have 1~25 lines of code. If a method has more than 25 lines of code, you must consider re factoring into separate methods.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Method name should tell what it does. Do not use mis-leading names. If the method name is obvious, there is no need of documentation explaining what the method does.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SavePhoneNumber ( string phoneNumber )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Save the phone number.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// This method will save the phone number.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SaveDetails ( string phoneNumber )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Save the phone number.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;A method should do only &#39;one job&#39;. Do not combine more than one job in a single method, even if those jobs are very small.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// Save the address.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;SaveAddress ( &amp;nbsp;address );&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// Send an email to the supervisor to inform that the address is updated.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;SendEmail ( address, email );&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SaveAddress ( string address )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Save the address.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// ...&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SendEmail ( string address, string email )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Send an email to inform the supervisor that the address is changed.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// ...&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// Save address and send an email to the supervisor to inform that&lt;br /&gt;
// the address is updated.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;SaveAddress ( address, email );&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SaveAddress ( string address, string email )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Job 1.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Save the address.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// ...&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Job 2.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Send an email to inform the supervisor that the address is changed.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// ...&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use the c# or VB.NET specific types (aliases), rather than the types defined in System namespace.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;int age; &amp;nbsp; (not Int16)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;string name; &amp;nbsp;(not String)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;object contactInfo; (not Object)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
Some developers prefer to use types in Common Type System than language specific aliases.&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Always watch for unexpected values. For example, if you are using a parameter with 2 possible values, never assume that if one is not matching then the only possibility is the other value.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
If ( memberType == eMemberTypes.Registered )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// Registered user… do something…&lt;br /&gt;
}&lt;br /&gt;
else if ( memberType == eMemberTypes.Guest )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// Guest user... do something…&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Un expected user type. Throw an exception&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;throw new Exception (“Un expected value “ + memberType.ToString() + “’.”)&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// If we introduce a new user type in future, we can easily find&lt;br /&gt;
// the problem here.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
If ( memberType == eMemberTypes.Registered )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Registered user… do something…&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;// Guest user... do something…&lt;br /&gt;
&lt;br /&gt;
// If we introduce another user type in future, this code will&lt;br /&gt;
// fail and will not be noticed.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not hardcode numbers. Use constants instead. Declare constant in the top of the file and use it in your code.&lt;br /&gt;
&lt;br /&gt;
However, using constants are also not recommended. You should use the constants in the config file or database so that you can change it later. Declare them as constants only if you are sure this value will never need to be changed.&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not hardcode strings. Use resource files.&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Convert strings to lowercase or upper case before comparing. This will ensure the string will match even if the string being compared has a different case.&lt;br /&gt;
&lt;br /&gt;
if ( name.ToLower() == “john” )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;//…&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use String.Empty instead of “”&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
If ( name == String.Empty )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// do something&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
If ( name == “” )&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// do something&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Avoid using member variables. Declare local variables wherever necessary and pass it to other methods instead of sharing a member variable between methods. If you share a member variable between methods, it will be difficult to track which method changed the value and when.&lt;br /&gt;
&lt;br /&gt;
11.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use enum wherever required. Do not use numbers or strings to indicate discrete values.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;enum MailType&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;Html,&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;PlainText,&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;Attachment&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SendMail (string message, MailType mailType)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;switch ( mailType )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case MailType.Html:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case MailType.PlainText:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case MailType.Attachment:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;default:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void SendMail (string message, string mailType)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;switch ( mailType )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case &quot;Html&quot;:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case &quot;PlainText&quot;:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;case &quot;Attachment&quot;:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;default:&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;// Do something&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;				&lt;/span&gt;break;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
12.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not make the member variables public or protected. Keep them private and expose public/protected Properties.&lt;br /&gt;
&lt;br /&gt;
13.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The event handler should not contain the code to perform the required action. Rather call another method from the event handler.&lt;br /&gt;
&lt;br /&gt;
14.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not programmatically click a button to execute the same action you have written in the button click event. Rather, call the same method which is called by the button click event handler.&lt;br /&gt;
&lt;br /&gt;
15.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Never hardcode a path or drive name in code. Get the application path programmatically and use relative path.&lt;br /&gt;
&lt;br /&gt;
16.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Never assume that your code will run from drive &quot;C:&quot;. You may never know, some users may run it from network or from a &quot;Z:&quot;.&lt;br /&gt;
&lt;br /&gt;
17.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;In the application start up, do some kind of &quot;self check&quot; and ensure all required files and dependancies are available in the expected locations. Check for database connection in start up, if required. Give a friendly message to the user in case of any problems.&lt;br /&gt;
&lt;br /&gt;
18.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If the required configuration file is not found, application should be able to create one with default values.&lt;br /&gt;
&lt;br /&gt;
19.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If a wrong value found in the configuration file, application should throw an error or give a message and also should tell the user what are the correct values.&lt;br /&gt;
&lt;br /&gt;
20.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Error messages should help the user to solve the problem. Never give error messages like &quot;Error in Application&quot;, &quot;There is an error&quot; etc. Instead give specific messages like &quot;Failed to update database. Please make sure the login id and password are correct.&quot;&lt;br /&gt;
&lt;br /&gt;
21.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;When displaying error messages, in addition to telling what is wrong, the message should also tell what should the user do to solve the problem. Instead of message like &quot;Failed to update database.&quot;, suggest what should the user do: &quot;Failed to update database. Please make sure the login id and password are correct.&quot;&lt;br /&gt;
&lt;br /&gt;
22.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Show short and friendly message to the user. But log the actual error with all possible information. This will help a lot in diagnosing problems.&lt;br /&gt;
&lt;br /&gt;
23.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not have more than one class in a single file.&lt;br /&gt;
&lt;br /&gt;
24.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Have your own templates for each of the file types in Visual Studio. You can include your company name, copy right information etc in the template. You can view or edit the Visual Studio file templates in the folder C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\ItemTemplatesCache\CSharp\1033. (This folder has the templates for C#, but you can easily find the corresponding folders or any other language)&lt;br /&gt;
&lt;br /&gt;
25.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Avoid having very large files. If a single file has more than 1000 lines of code, it is a good candidate for refactoring. Split them logically into two or more classes.&lt;br /&gt;
&lt;br /&gt;
26.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Avoid public methods and properties, unless they really need to be accessed from outside the class. Use “internal” if they are accessed only within the same assembly.&lt;br /&gt;
&lt;br /&gt;
27.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Avoid passing too many parameters to a method. If you have more than 4~5 parameters, it is a good candidate to define a class or structure.&lt;br /&gt;
&lt;br /&gt;
28.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If you have a method returning a collection, return an empty collection instead of null, if you have no data to return. For example, if you have a method returning an ArrayList, always return a valid ArrayList. If you have no items to return, then return a valid ArrayList with 0 items. This will make it easy for the calling application to just check for the “count” rather than doing an additional check for “null”.&lt;br /&gt;
&lt;br /&gt;
29.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use the AssemblyInfo file to fill information like version number, description, company name, copyright notice etc.&lt;br /&gt;
&lt;br /&gt;
30.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Logically organize all your files within appropriate folders. Use 2 level folder hierarchies. You can have up to 10 folders in the root folder and each folder can have up to 5 sub folders. If you have too many folders than cannot be accommodated with the above mentioned 2 level hierarchy, you may need re factoring into multiple assemblies.&lt;br /&gt;
&lt;br /&gt;
16.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Make sure you have a good logging class which can be configured to log errors, warning or traces. If you configure to log errors, it should only log errors. But if you configure to log traces, it should record all (errors, warnings and trace). Your log class should be written such a way that in future you can change it easily to log to Windows Event Log, SQL Server, or Email to administrator or to a File etc without any change in any other part of the application. Use the log class extensively throughout the code to record errors, warning and even trace messages that can help you trouble shoot a problem.&lt;br /&gt;
&lt;br /&gt;
17.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If you are opening database connections, sockets, file stream etc, always close them in the finally block. This will ensure that even if an exception occurs after opening the connection, it will be safely closed in the finally block.&lt;br /&gt;
&lt;br /&gt;
18.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Declare variables as close as possible to where it is first used. Use one variable declaration per line.&lt;br /&gt;
&lt;br /&gt;
19.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use StringBuilder class instead of String when you have to manipulate string objects in a loop. The String object works in weird way in .NET. Each time you append a string, it is actually discarding the old string object and recreating a new object, which is a relatively expensive operations.&lt;br /&gt;
&lt;br /&gt;
Consider the following example:&lt;br /&gt;
&lt;br /&gt;
public string ComposeMessage (string[] lines)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp;string message = String.Empty;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;for (int i = 0; i &amp;lt; lines.Length; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; message += lines [i];&lt;br /&gt;
&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;return message;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
In the above example, it may look like we are just appending to the string object ‘message’. But what is happening in reality is, the string object is discarded in each iteration and recreated and appending the line to it.&lt;br /&gt;
&lt;br /&gt;
If your loop has several iterations, then it is a good idea to use StringBuilder class instead of String object.&lt;br /&gt;
&lt;br /&gt;
See the example where the String object is replaced with StringBuilder.&lt;br /&gt;
&lt;br /&gt;
public string ComposeMessage (string[] lines)&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; StringBuilder message = new StringBuilder();&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; lines.Length; i++)&lt;br /&gt;
&amp;nbsp; &amp;nbsp; {&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;message.Append( lines[i] );&lt;br /&gt;
&amp;nbsp; &amp;nbsp; }&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; return message.ToString();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Architecture&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Always use multi layer (N-Tier) architecture.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Never access database from the UI pages. Always have a data layer class which performs all the database related tasks. This will help you support or migrate to another database back end easily.&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use try-catch in your data layer to catch all database exceptions. This exception handler should record all exceptions from the database. The details recorded should include the name of the command being executed, stored proc name, parameters, connection string used etc. After recording the exception, it could be re thrown so that another layer in the application can catch it and take appropriate action.&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Separate your application into multiple assemblies. Group all independent utility classes into a separate class library. All your database related files can be in another class library.&lt;br /&gt;
&lt;br /&gt;
11.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;ASP.NET&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not use session variables throughout the code. Use session variables only within the classes and expose methods to access the value stored in the session variables. A class can access the session using System.Web.HttpCOntext.Current.Session&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not store large objects in session. Storing large objects in session may consume lot of server memory depending on the number of users.&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Always use style sheet to control the look and feel of the pages. Never specify font name and font size in any of the pages. Use appropriate style class. This will help you to change the UI of your application easily in future. Also, if you like to support customizing the UI for each customer, it is just a matter of developing another style sheet for them&lt;br /&gt;
&lt;br /&gt;
12.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Comments&lt;br /&gt;
&lt;br /&gt;
Good and meaningful comments make code more maintainable. However,&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not write comments for every line of code and every variable declared.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Use // or /// for comments. Avoid using /* … */&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Write comments wherever required. But good readable code will require very less comments. If all variables and method names are meaningful, that would make the code very readable and will not need many comments.&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not write comments if the code is easily understandable without comment. The drawback of having lot of comments is, if you change the code and forget to change the comment, it will lead to more confusion.&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Fewer lines of comments will make the code more elegant. But if the code is not clean/readable and there are less comments, that is worse.&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If you have to use some complex or weird logic for any reason, document it very well with sufficient comments.&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;If you initialize a numeric variable to a special number other than 0, -1 etc, document the reason for choosing that value.&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;The bottom line is, write clean, readable code such a way that it doesn&#39;t need any comments to understand.&lt;br /&gt;
&lt;br /&gt;
9.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Perform spelling check on comments and also make sure proper grammar and punctuation is used.&lt;br /&gt;
&lt;br /&gt;
13.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Exception Handling&lt;br /&gt;
&lt;br /&gt;
1.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Never do a &#39;catch exception and do nothing&#39;. If you hide an exception, you will never know if the exception happened or not. Lot of developers uses this handy method to ignore non significant errors. You should always try to avoid exceptions by checking all the error conditions programmatically. In any case, catching an exception and doing nothing is not allowed. In the worst case, you should log the exception and proceed.&lt;br /&gt;
&lt;br /&gt;
2.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;In case of exceptions, give a friendly message to the user, but log the actual error with all possible details about the error, including the time it occurred, method and class name etc.&lt;br /&gt;
&lt;br /&gt;
3.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Always catch only the specific exception, not generic exception.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;void ReadFromFile ( string fileName )&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;try&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// read from file.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;catch (FileIOException ex)&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// log error.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;// &amp;nbsp;re-throw exception depending on your case.&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;			&lt;/span&gt;throw;&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ReadFromFile ( string fileName )&lt;br /&gt;
{&lt;br /&gt;
&amp;nbsp; &amp;nbsp;try&lt;br /&gt;
&amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; // read from file.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
&amp;nbsp; &amp;nbsp;catch (Exception ex)&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;{&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; // Catching general exception is bad... we will never know whether&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; // it was a file error or some other error.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; // Here you are hiding an exception.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; // In this case no one will ever know that an exception happened.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; return &quot;&quot;;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;		&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;}&lt;br /&gt;
}&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
4.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;No need to catch the general exception in all your methods. Leave it open and let the application crash. This will help you find most of the errors during development cycle. You can have an application level (thread level) error handler where you can handle all general exceptions. In case of an &#39;unexpected general error&#39;, this error handler should catch the exception and should log the error in addition to giving a friendly message to the user before closing the application, or allowing the user to &#39;ignore and proceed&#39;.&lt;br /&gt;
&lt;br /&gt;
5.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;When you re throw an exception, use the throw statement without specifying the original exception. This way, the original call stack is preserved.&lt;br /&gt;
&lt;br /&gt;
Good:&lt;br /&gt;
&lt;br /&gt;
catch&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// do whatever you want to handle the exception&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;throw;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Not Good:&lt;br /&gt;
&lt;br /&gt;
catch (Exception ex)&lt;br /&gt;
{&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;// do whatever you want to handle the exception&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;throw ex;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
6.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not write try-catch in all your methods. Use it only if there is a possibility that a specific exception may occur and it cannot be prevented by any other means. For example, if you want to insert a record if it does not already exists in database, you should try to select record using the key. Some developers try to insert a record without checking if it already exists. If an exception occurs, they will assume that the record already exists. This is strictly not allowed. You should always explicitly check for errors rather than waiting for exceptions to occur. On the other hand, you should always use exception handlers while you communicate with external systems like network, hardware devices etc. Such systems are subject to failure anytime and error checking is not usually reliable. In those cases, you should use exception handlers and try to recover from error.&lt;br /&gt;
&lt;br /&gt;
7.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Do not write very large try-catch blocks. If required, write separate try-catch for each task you perform and enclose only the specific piece of code inside the try-catch. This will help you find which piece of code generated the exception and you can give specific error message to the user.&lt;br /&gt;
&lt;br /&gt;
8.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;	&lt;/span&gt;Write your own custom exception classes if required in your application. Do not derive your custom exceptions from the base class SystemException. Instead, inherit from ApplicationException.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/10&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/688788971662635848/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/688788971662635848' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/688788971662635848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/688788971662635848'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2013/10/c-coding-standards-and-best-programming.html' title=''/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-1548841363333098002</id><published>2012-11-01T20:54:00.001-07:00</published><updated>2012-11-01T20:54:01.039-07:00</updated><title type='text'></title><content type='html'>&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
★ThunderBird에서 Exchange메일 설정★&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
1.개요&lt;br /&gt;
&amp;nbsp;회사 시스템의 프로토콜?이 변경되어 버려 눈물을 머금고 설정변경중.&lt;br /&gt;
&lt;br /&gt;
2.설치에 필요한 파일 및 설치&lt;br /&gt;
&amp;nbsp;2.1&amp;nbsp;&lt;a href=&quot;https://exquilla.zendesk.com/home&quot;&gt;https://exquilla.zendesk.com/home&lt;/a&gt;&lt;br /&gt;
&amp;nbsp;2.4&amp;nbsp;선더버드플러그인(&lt;a href=&quot;https://exquilla.zendesk.com/home&quot;&gt;exquilla&lt;/a&gt;)의 설치&lt;br /&gt;
&lt;br /&gt;
3.설정방법&lt;br /&gt;
&amp;nbsp;3.1 선더버드 기동&lt;br /&gt;
&amp;nbsp;3.2 옵션-계정설정&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhfmQJrmAZcALOZffrUFyfNaZ3ABLcrfFvpNJFXpxdWRIXSo3f4kBz9YNINhGBnFLinKt0F_1Kv6myDicy3rZOIgW7jJdxBmy3NIIUmMlQYkLqooCMwc4Kk6jNp1ODYSgaqFWkTNkA7p8/s1600/T1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;231&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhfmQJrmAZcALOZffrUFyfNaZ3ABLcrfFvpNJFXpxdWRIXSo3f4kBz9YNINhGBnFLinKt0F_1Kv6myDicy3rZOIgW7jJdxBmy3NIIUmMlQYkLqooCMwc4Kk6jNp1ODYSgaqFWkTNkA7p8/s320/T1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;3.3 익스체인지 계정 추가&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigfBN1jW9K0EDEYL5Zdb0Uhz5VTsJ3x_gNbhV_X7dNWKA-oHtQtpPhUa9yHxZ92Hdwppa0X4fHYNArBTx-OUYPWyPHQlr61mDzfBX8t_f5dLfvp9W_TRonj1MuidQRFPlcrLLp5hwgtS8/s1600/T2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;268&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigfBN1jW9K0EDEYL5Zdb0Uhz5VTsJ3x_gNbhV_X7dNWKA-oHtQtpPhUa9yHxZ92Hdwppa0X4fHYNArBTx-OUYPWyPHQlr61mDzfBX8t_f5dLfvp9W_TRonj1MuidQRFPlcrLLp5hwgtS8/s320/T2.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;3.4 메일어드레스/패스워드 설정&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJeeTtGNfJFcmXtLRXQgKsokHcC_yZng_TLp2EnBllpQdz-3tlz0MNSeJCLn5qXWkqGahZ9jnwtrTxKQgaLGbOXZN7tLHaJmZ2JMwDU2jFScGQtlBna0QlgXuBRLJfVsKadiH3fE_Agrg/s1600/T3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJeeTtGNfJFcmXtLRXQgKsokHcC_yZng_TLp2EnBllpQdz-3tlz0MNSeJCLn5qXWkqGahZ9jnwtrTxKQgaLGbOXZN7tLHaJmZ2JMwDU2jFScGQtlBna0QlgXuBRLJfVsKadiH3fE_Agrg/s320/T3.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;3.5 익스체인지서버 확인&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijJ4MxP_Ay3iFhye920MnQsM61zpAfkdkxVVlywWX18lzP9XltVkeNayLa5xq8Wba-72HFfYuJFk-ms7ZVCYySivP10SFcf_8FnIX9wjtYgdSAz7j1PlHFL4XXWBlK2SUPRU6FDMsuc-U/s1600/T4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijJ4MxP_Ay3iFhye920MnQsM61zpAfkdkxVVlywWX18lzP9XltVkeNayLa5xq8Wba-72HFfYuJFk-ms7ZVCYySivP10SFcf_8FnIX9wjtYgdSAz7j1PlHFL4XXWBlK2SUPRU6FDMsuc-U/s320/T4.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&amp;nbsp;익스체인지 서버 계정 설정완료~&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
끝~~~ &amp;nbsp;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/1548841363333098002/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/1548841363333098002' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1548841363333098002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1548841363333098002'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2012/11/thunderbird-exchange-1.html' title=''/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhfmQJrmAZcALOZffrUFyfNaZ3ABLcrfFvpNJFXpxdWRIXSo3f4kBz9YNINhGBnFLinKt0F_1Kv6myDicy3rZOIgW7jJdxBmy3NIIUmMlQYkLqooCMwc4Kk6jNp1ODYSgaqFWkTNkA7p8/s72-c/T1.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-5424097003810659930</id><published>2012-10-11T20:33:00.002-07:00</published><updated>2012-10-11T20:42:04.786-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="궁디팡팡"/><category scheme="http://www.blogger.com/atom/ns#" term="애니팡"/><title type='text'></title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;
★&lt;span style=&quot;background-color: yellow;&quot;&gt;궁디팡팡&lt;/span&gt; 사용법★&amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
1.개요&lt;br /&gt;
&amp;nbsp;애니팡 프로그램을 좀더 효과적으로 점수를 올리기위한 방법~&lt;br /&gt;
&amp;nbsp;그러나 30만점 이상 나오지 않음...도대체 30만점 이상 나온 사람은?기계나?&lt;br /&gt;
&lt;br /&gt;
2.설치에 필요한 파일 및 설치&lt;br /&gt;
&amp;nbsp;2.1 &lt;a href=&quot;http://www.microsoft.com/net&quot;&gt;.NET Framework4.0&lt;/a&gt; 이상&lt;br /&gt;
&amp;nbsp;2.2 &lt;a href=&quot;http://local.sec.samsung.com/comLocal/support/down/kies_main.do?kind=usb#none&quot;&gt;USB드라이버 설치&lt;/a&gt;(갤럭시기준,옵티머스는 알아서 구하세용)&lt;br /&gt;
&amp;nbsp;2.3 &lt;a href=&quot;http://mymobiler.com/&quot;&gt;마이모바일러&lt;/a&gt;설치 :PC에서 모바일기기 접속해서 궁디팡팡의 실행을 도움&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;a)mymobiler설치후 실행&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;b)모바일설정법&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -환경-&amp;gt;개발자 옵션-&amp;gt;USB 디버깅(체크)&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -환경-&amp;gt;보안-&amp;gt;알 수 없는 소스(체크)&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp;c)2의 USB드라이버가 설치된 상태에서&amp;nbsp;下의 이미지 처럼 Install 실행&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (실행하면 下의 그림처럼 설치됨, 전원보턴처럼 생긴게 파란색이면 On상태)&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU-ZzZQcLaXHH-IVpcayF9TGg3rUG62J9bmZgwiCfWrwk-c9aX_WfI3TCRTnRMBhiX4qrZDCWaHWddL1k3Pk5qgU8zO9f9PExHWdRJ1y6Ipb64hltFElAuC8O3Qieu98jWJYuu6Co5950/s1600/k1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;img border=&quot;0&quot; height=&quot;211&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU-ZzZQcLaXHH-IVpcayF9TGg3rUG62J9bmZgwiCfWrwk-c9aX_WfI3TCRTnRMBhiX4qrZDCWaHWddL1k3Pk5qgU8zO9f9PExHWdRJ1y6Ipb64hltFElAuC8O3Qieu98jWJYuu6Co5950/s320/k1.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&amp;nbsp;-&amp;gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnWZ3LolRLtHvU9E-RX8VXCGBd62IIMa3qllzC8N_QXp5Tp-SIEzGQVYprKlcD39gsDzVPCOdQYe4Lq1OoqXnzaHQnjOF914p5bfvipCThN8Y0PJtBPVyEU7xVSBEz6HkpBg8tzTIL7OA/s1600/k2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnWZ3LolRLtHvU9E-RX8VXCGBd62IIMa3qllzC8N_QXp5Tp-SIEzGQVYprKlcD39gsDzVPCOdQYe4Lq1OoqXnzaHQnjOF914p5bfvipCThN8Y0PJtBPVyEU7xVSBEz6HkpBg8tzTIL7OA/s200/k2.png&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -MyMobiler-&amp;gt;Setup Device-&amp;gt;display-&amp;gt;display-&amp;gt;Select Display Access(3.Other 선택)&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;
&amp;nbsp;2.4 &lt;a href=&quot;https://docs.google.com/open?id=0B3MVgPIs1Kq4cS1OUmFSVXBSSms&quot;&gt;궁디팡팡 다운로드&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; AniKill.exe만 다운로드 하면 끝&lt;br /&gt;
&lt;br /&gt;
3.실행방법&lt;br /&gt;
&amp;nbsp;3.1 먼저 USB를 핸드폰에 연결하고&lt;br /&gt;
&amp;nbsp;3.2 윈도우즈 태스크바에서 MyMobiler아이콘을 찾은후 더블클릭&lt;br /&gt;
&amp;nbsp;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qy1rMQIPDJge09HDfylJPd7KZ4U_ul-tcOT-qBEdiGDTunBAoBFgm1wFPXlMkmjBk1dbqKaw4LSNEaM7EkqcuPZ9kxqYUL5djFOIlULcWqlHWoDEducJgODzeXenzuZhIZ8KfkO9n-s/s1600/k3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6qy1rMQIPDJge09HDfylJPd7KZ4U_ul-tcOT-qBEdiGDTunBAoBFgm1wFPXlMkmjBk1dbqKaw4LSNEaM7EkqcuPZ9kxqYUL5djFOIlULcWqlHWoDEducJgODzeXenzuZhIZ8KfkO9n-s/s200/k3.png&quot; width=&quot;112&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVftX1hnKUaM58nV2w0YMY7MfEp58s21XtkbgPbIsM7slBWWWuhIoyi9Yq-J0N87Kz2Rdu5bDt1PdJdpCLyGDBgMUw8MQ-DvnigH167uAyVUO_iM-rN3UddWFzj2Ok8QpDeqjXR5yLDWk/s1600/k4.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;124&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVftX1hnKUaM58nV2w0YMY7MfEp58s21XtkbgPbIsM7slBWWWuhIoyi9Yq-J0N87Kz2Rdu5bDt1PdJdpCLyGDBgMUw8MQ-DvnigH167uAyVUO_iM-rN3UddWFzj2Ok8QpDeqjXR5yLDWk/s200/k4.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;위와 같이 핸드폰의 메인 화면이 표시됨&lt;br /&gt;
&amp;nbsp;3.3 AniKill(궁디팡팡)을 실행한후 실행버튼을 클릭...&lt;br /&gt;
&amp;nbsp; &amp;nbsp; 멈추고 싶을땐 Alt키를 눌러주세요 그러면 실행이 중지됩니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;
끝~~~ &amp;nbsp;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/5424097003810659930/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/5424097003810659930' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5424097003810659930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5424097003810659930'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2012/10/1.html' title=''/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU-ZzZQcLaXHH-IVpcayF9TGg3rUG62J9bmZgwiCfWrwk-c9aX_WfI3TCRTnRMBhiX4qrZDCWaHWddL1k3Pk5qgU8zO9f9PExHWdRJ1y6Ipb64hltFElAuC8O3Qieu98jWJYuu6Co5950/s72-c/k1.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-4508148669758501975</id><published>2010-09-12T21:36:00.000-07:00</published><updated>2010-09-12T21:36:20.790-07:00</updated><title type='text'>Hakuna matata. What a wonderful phrase! :: 네이버 블로그</title><content type='html'>&lt;a href=&quot;http://etrodnjsrb.blog.me/30089748781&quot;&gt;Hakuna matata. What a wonderful phrase! :: 네이버 블로그&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/4508148669758501975/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/4508148669758501975' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4508148669758501975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4508148669758501975'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2010/09/hakuna-matata-what-wonderful-phrase.html' title='Hakuna matata. What a wonderful phrase! :: 네이버 블로그'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-7361773320903864620</id><published>2009-03-23T21:56:00.000-07:00</published><updated>2009-03-23T21:56:54.767-07:00</updated><title type='text'>hi.pe.kr 날으는물고기 :: MS-SQL 간단 DB 백업 및 복구</title><content type='html'>Old machine의 &#39;test&#39; DB 백업 -&gt; New machine의 &#39;test&#39; DB 복구&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;1. Old machine의 &#39;master&#39; db를 이용하여, &#39;test&#39; DB detach 하기&lt;br /&gt;&lt;br /&gt;   EXEC sp_detach_db &#39;test&#39;, &#39;true&#39;&lt;br /&gt;&lt;br /&gt;   이 과정없이, Data File과 Log File을 copy 하려하면 &#39;test&#39; db가 사용중이어서 copy 불가&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;2. Old machine의 Data File과 Log File파일 복사 하여, New machine에 붙여넣기&lt;br /&gt;&lt;br /&gt;   Data File -&gt; C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_Data.mdf&lt;br /&gt;&lt;br /&gt;   Log File  -&gt; C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_Log.ldf&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;3. New machine의 &#39;master&#39; db를 이용하여, &#39;test&#39; DB attach 하기&lt;br /&gt;&lt;br /&gt;   EXEC sp_attach_db &#39;test&#39;,&lt;br /&gt;&lt;br /&gt;   &#39;C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_Data.mdf&#39;,&lt;br /&gt;&lt;br /&gt;   &#39;C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_Log.ldf&#39;&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*  Log File은 transaction 정보가 저장되는 파일이므로, 불필요한 정보는 지워서 크기를 줄임&lt;br /&gt;&lt;br /&gt;   DBCC SHIRINKFILE(&#39;test_Log&#39;, TRUNCATEONLY)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MS-SQL 백업자료가 무결성으로 인해 복구가 않될시 사용해 보세요...&lt;br /&gt;&lt;br /&gt;쿼리분석기실행...&lt;br /&gt;&lt;br /&gt;- DB백업...&lt;br /&gt;&lt;br /&gt;   BACKUP DATABASE test_db TO DISK=&#39;d:\backup\test_db.bak&#39; WITH INIT&lt;br /&gt;&lt;br /&gt;위의 test_db.bak db가 복구가 않될시...&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;- 백업내용보기...&lt;br /&gt;&lt;br /&gt;restore filelistonly from disk = &#39;d:\backup\test_db.bak&#39;;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;list중 LogicalName을 확인...&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt;LogicalName         xxxx       xxxx          xxxx&lt;br /&gt;&lt;br /&gt;test_db_Data         .....         .....           .....&lt;br /&gt;&lt;br /&gt;test_db_Log          .....         .....           .....&lt;br /&gt;&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;- 백업복구하기...&lt;br /&gt;&lt;br /&gt;restore database test_db from disk = &#39;d:\backup\test_db.bak&#39;&lt;br /&gt;&lt;br /&gt;    with move &#39;test_db_Data&#39; to &#39;C:\Program Files\Microsoft SQL Server\MSSQL\data\test_db_Data.MDF&#39;,&lt;br /&gt;           move &#39;test_db_Log&#39; to &#39;C:\Program Files\Microsoft SQL Server\MSSQL\data\test_db_Log.LDF&#39;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;평상시 Restore하는 시간보다 최소한 몇배의 시간이 더 걸립니다...&lt;br /&gt;&lt;br /&gt;당황하지 마시고, 마음을 편안하게 가지시고 기다리면 됩니다...&lt;br /&gt;&lt;br /&gt;참고로 datafile이 있는 곳으로 이동하여 datafile size가 늘어나는지 확인하여... 늘어나면 정상입니다...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;MS-SQL 2005에서 백업파일 복구 후 로그인 사용자 자동 매핑 방법&lt;br /&gt;&lt;br /&gt;MS-SQL 2005에서 백업 파일을 복구할 때 기존 설치된 곳이 아니라 신규로 설치하게 되면&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;sp_change_users_login&lt;br /&gt;&lt;br /&gt;기존 데이터베이스 사용자를 SQL Server 로그인에 매핑합니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;*참고&lt;br /&gt;&lt;br /&gt;sp_change_users_login은 Windows 로그인에 사용할 수 없습니다.&lt;br /&gt;&lt;br /&gt;*주의&lt;br /&gt;&lt;br /&gt;sp_change_users_login은 데이터베이스 사용자를 Windows 수준 보안 주체, 인증서 또는 비대칭 키에 매핑하는 데 사용할 수 없습니다.&lt;br /&gt;&lt;br /&gt;sp_change_users_login [ @Action = ] &#39;action&#39; &lt;br /&gt;    [ , [ @UserNamePattern = ] &#39;user&#39; ] &lt;br /&gt;    [ , [ @LoginName = ] &#39;login&#39; ] &lt;br /&gt;        [ , [ @Password = ] &#39;password&#39; ]&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;사용자를 로그인에 자동으로 매핑하고 필요한 경우 새 로그인 만들기&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;다음 예에서는 Auto_Fix를 사용하여 기존 사용자를 동일한 이름의 로그인에 매핑하거나 Mary 로그인이 없는 경우 암호가 B3r12-3x$098f6인 SQL Server 로그인 Mary를 만드는 방법을 보여 줍니다.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;예)&lt;br /&gt;&lt;br /&gt;USE database명&lt;br /&gt;&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;EXEC sp_change_users_login &#39;Auto_Fix&#39;, &#39;유저아이디&#39;, NULL, &#39;패스워드&#39;;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/7361773320903864620/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/7361773320903864620' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7361773320903864620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7361773320903864620'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2009/03/hipekr-ms-sql-db.html' title='hi.pe.kr 날으는물고기 :: MS-SQL 간단 DB 백업 및 복구'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-2736172147392368681</id><published>2009-02-20T19:05:00.000-08:00</published><updated>2009-02-20T19:28:27.864-08:00</updated><title type='text'>밤톨이2탄</title><content type='html'>&lt;iframe marginheight=&quot;0&quot; marginwidth=&quot;0&quot; style=&quot;border: 1px solid rgb(221, 229, 233); margin: 3px; padding: 0pt; width: 240px; height: 66px; background-color: rgb(255, 255, 255);&quot; src=&quot;http://cid-585bc30899093607.skydrive.live.com/embedrowdetail.aspx/%e5%85%ac%e9%96%8b/2009y02m21d%7C509h58m13s%7C6.mpg&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dz7m233uEvt434hvWmV8TrAqLImE0rIhI-ka0CpsM0jJxge02rdBUTRfiG7g4bi6JoPQ8G3YwneLIn0Rkwamg&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;울밤톨이가 16주가 되땅.&lt;br /&gt;머리가 큰게 아쉽지만.</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=9328a50cb2896a27&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/2736172147392368681/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/2736172147392368681' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2736172147392368681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2736172147392368681'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2009/02/2.html' title='밤톨이2탄'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-5460063190035579775</id><published>2009-01-28T22:50:00.000-08:00</published><updated>2009-01-28T22:50:31.774-08:00</updated><title type='text'>난이™의 일상 :: 네이버 블로그</title><content type='html'>[DB] LIKE 검색 시 인덱스 사용  ASP&lt;br /&gt;&lt;br /&gt;출처 : 야시님의 홈페이지에서&lt;br /&gt;일반적으로 아래와 같이 like &#39;%expr%&#39; 와 같은 조건을 걸러&lt;br /&gt;쿼리하면 풀스캔을 하게된다. &lt;br /&gt;&lt;br /&gt;select * from northwind..orders&lt;br /&gt;where shipaddress like &#39;%Milton%&#39;&lt;br /&gt;&lt;br /&gt;이와 같이 쿼리하는 것은 거의 대부분 방법이 없다. 그러나&lt;br /&gt;클러스터드 인덱스를 이용하면 결과는 틀리게 나타난다. &lt;br /&gt;아래의 두 쿼리를 실행시켜보면 인덱스 seek하는 것을 알 수 있다. &lt;br /&gt;&lt;br /&gt;select title_id, title&lt;br /&gt;from pubs..titles&lt;br /&gt;where title_id &gt; &#39;&#39;&lt;br /&gt;and title like &#39;%Talk%&#39;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;select * from northwind..orders&lt;br /&gt;where orderid &gt; 0&lt;br /&gt;and shipaddress like &#39;%Milton%&#39;&lt;br /&gt;&lt;br /&gt;물리적 읽기/논리적 읽기의 양은 같다. 비용을 살펴보면...I/O비용이 1/2로 감소한 것을&lt;br /&gt;볼 수 있다. 아직까지 대량의 데이타에서 실험해보지는 않았으나 이를 이와 같은 방식은&lt;br /&gt;활용도가 많을 것으로 예상된다.</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/5460063190035579775/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/5460063190035579775' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5460063190035579775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5460063190035579775'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2009/01/blog-post.html' title='난이™의 일상 :: 네이버 블로그'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-3770054957515259581</id><published>2008-12-09T18:20:00.000-08:00</published><updated>2008-12-09T18:51:57.495-08:00</updated><title type='text'>2008y12m09d(16h24m50s).mpg - Windows Live</title><content type='html'>우리 밤톨이 초음파 사진이다.ㅋㅋ&lt;br /&gt;심장이 콩당콩당 뛰는게 히히 &lt;br /&gt;&lt;br /&gt;&lt;iframe marginheight=&quot;0&quot; marginwidth=&quot;0&quot; style=&quot;border: 1px solid rgb(221, 229, 233); margin: 3px; padding: 0pt; width: 240px; height: 66px; background-color: rgb(255, 255, 255);&quot; src=&quot;http://cid-585bc30899093607.skydrive.live.com/embedrowdetail.aspx/%e5%85%ac%e9%96%8b/2008y12m09d%7C516h24m50s%7C6.mpg&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dzaINUc0L_YAYBjt5QxfDpVSkLQE2OHgglelBGrkKPPaC0yfMhPhE8h-MaPuCwaDetlz7SdRILcqb0MDH0fEg&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;</content><link rel='enclosure' type='video/mp4' href='http://www.blogger.com/video-play.mp4?contentId=c09f15dcea81177f&amp;type=video%2Fmp4' length='0'/><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/3770054957515259581/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/3770054957515259581' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/3770054957515259581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/3770054957515259581'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/12/2008y12m09d16h24m50smpg-windows-live.html' title='2008y12m09d(16h24m50s).mpg - Windows Live'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-7423203067628342864</id><published>2008-11-10T20:24:00.000-08:00</published><updated>2008-11-10T20:24:06.175-08:00</updated><title type='text'>GDS-DNKA - kimta部屋</title><content type='html'>準備する物&lt;br /&gt;&lt;br /&gt;    * サーバとするPC（Windows 2000 SP3以上、もしくはWindows XP）&lt;br /&gt;    * GoogleDesktopSearchSetup.exe&lt;br /&gt;      http://desktop.google.com/&lt;br /&gt;    * DNKA-0.44.exe&lt;br /&gt;      http://dnka.com/&lt;br /&gt;    * サーバとするPCのIPアドレスの確認&lt;br /&gt;      （「スタート」の「プログラム」の「アクセサリ」の「コマンドプロンプト」を実行して、表示される画面でipconfigと入力し、EnterすればIPアドレスを確認できます。例えば、192.168.0.1というような値です。）&lt;br /&gt;&lt;br /&gt;↑&lt;br /&gt;備考&lt;br /&gt;&lt;br /&gt;できれば検索対象とするデータを置くDドライブを用意し、shareというようなフォルダを作り、その中にデータを置く方が運用しやすいです。&lt;br /&gt;&lt;br /&gt;それはGoogleデスクトップ検索では、「検索しないアイテム」としてドライブの指定やフォルダの指定ができますが、その逆の「～のみ検索対象とする」というような設定ができないためです。&lt;br /&gt;&lt;br /&gt;つまり、例えばCドライブの「マイドキュメント」に検索対象とするデータを置いた場合に、「検索しないアイテム」として、c:\WINNTやc:\Program Files等、個々に記述する必要があります。（絶対条件ではありませんが、検索する必要がないプログラムに付随するマニュアル等のファイルも検索対象になってしまいます。）&lt;br /&gt;&lt;br /&gt;検索対象とするファイルがDドライブ内にしかなければ、「検索しないアイテム」としてc:\を指定することで、プログラム等含めたCドライブ内のファイルを、簡単に検索対象から外すことができます。&lt;br /&gt;↑&lt;br /&gt;作業手順&lt;br /&gt;&lt;br /&gt;ローカルの（サーバとしたいPCにコピーした）GoogleDesktopSearchSetup.exeをダブルクリックすると以下の画面になります。&lt;br /&gt;そのうち、以下の２つのチェックボックスを外します。（任意）&lt;br /&gt;&lt;br /&gt;    * □AOL,MSN Messengerのチャットを検索する&lt;br /&gt;    * □使用状況データと障害レポートを送信していただくと、Googleデスクトップ検索の機能向上に役立てることができます。&lt;br /&gt;&lt;br /&gt;その後、「設定を保存して次へ」をクリックします。&lt;br /&gt;&lt;br /&gt;Image1.jpg&lt;br /&gt;&lt;br /&gt;すると以下の画面になるので「Googleデスクトップ検索ホームページへ」をクリックします。&lt;br /&gt;&lt;br /&gt;Image2.jpg&lt;br /&gt;&lt;br /&gt;表示される画面の真ん中あたりに、「検索しないアイテム」を記述する欄があります。&lt;br /&gt;ここで例えばc:\と記述し、検索対象としないドライブやフォルダを指定します。&lt;br /&gt;&lt;br /&gt;Image3.jpg&lt;br /&gt;&lt;br /&gt;ローカルの（サーバとしたいPCにコピーした）DNKA-0.44.exeをダブルクリックすると以下の画面が表示されるので「Next」をクリックします。&lt;br /&gt;&lt;br /&gt;Image4.jpg&lt;br /&gt;&lt;br /&gt;続く以下の画面では、「I accept the agreement」を選択し、「Next」をクリックします。&lt;br /&gt;&lt;br /&gt;Image5.jpg&lt;br /&gt;&lt;br /&gt;続く以下の画面では、そのまま「Next」をクリックします。&lt;br /&gt;&lt;br /&gt;Image6.jpg&lt;br /&gt;&lt;br /&gt;続く以下の画面では、そのまま「Next」をクリックします。&lt;br /&gt;&lt;br /&gt;Image7.jpg&lt;br /&gt;&lt;br /&gt;続く以下の画面では、そのまま「Install」をクリックします。&lt;br /&gt;&lt;br /&gt;Image8.jpg&lt;br /&gt;&lt;br /&gt;続く以下の画面では、「OK」をクリックします。&lt;br /&gt;&lt;br /&gt;Image9.jpg&lt;br /&gt;&lt;br /&gt;しばらくすると、以下のような画面が表示されます。&lt;br /&gt;&lt;br /&gt;Image10.jpg&lt;br /&gt;&lt;br /&gt;このままでは、LAN内の他のPCからGoogleデスクトップ検索を使うことができません。&lt;br /&gt;そこで画面上部の青字で下線が引かれている、Add new host rules.をクリックします。&lt;br /&gt;すると以下のような画面が表示されます。&lt;br /&gt;&lt;br /&gt;Image11.jpg&lt;br /&gt;&lt;br /&gt;このAdd/remove new hosts:欄に、最初に調べたサーバとするPCのIPアドレスを参考に値を入力します。&lt;br /&gt;例えば、192.168.0.1や、192.168.0.10という値だった場合&lt;br /&gt;&lt;br /&gt;192.168.0.1-192.168.0.255&lt;br /&gt;&lt;br /&gt;例えば、192.168.1.1や、192.168.1.10という値だった場合&lt;br /&gt;&lt;br /&gt;192.168.1.1-192.168.1.255&lt;br /&gt;&lt;br /&gt;つまり、サーバとするPCのIPアドレスの最後の値を取り、1とした値-（ハイフン）255とした値と入力します。&lt;br /&gt;その後、「Allow」をクリックします。&lt;br /&gt;&lt;br /&gt;Image12.jpg&lt;br /&gt;&lt;br /&gt;すると以下の画面のように、先ほどの値が追加されます。&lt;br /&gt;&lt;br /&gt;Image13.jpg&lt;br /&gt;&lt;br /&gt;これで、LAN内の別のパソコンからGoogleデスクトップ検索が使えるようになります。&lt;br /&gt;&lt;br /&gt;続いて、サーバとするPC内に置いたファイルを検索できるように索引付けをします。&lt;br /&gt;画面上部の青字で下線が引かれている文字のうち、Misc Optionsをクリックします。&lt;br /&gt;すると以下の画面が表示されるので、青字で下線が引かれている文字のうち、Indexing optionsをクリックします。&lt;br /&gt;&lt;br /&gt;Image14.jpg&lt;br /&gt;&lt;br /&gt;すると以下の画面が表示されます。&lt;br /&gt;このAdd new dirs for indexing:欄に、例えばDドライブのshareフォルダに検索させたいファイルがある場合、d:\shareと入力し「Submit」をクリックします。&lt;br /&gt;&lt;br /&gt;Image15.jpg&lt;br /&gt;&lt;br /&gt;上記流れのとおりにインストールしたばかりの場合、ウィンドウを閉じた後に、以下のダイアログが表示されているので、「Finish」をクリックして閉じてください。&lt;br /&gt;&lt;br /&gt;Image16.jpg&lt;br /&gt;↑&lt;br /&gt;LAN内の他のPCから、サーバとするPCのGoogleデスクトップ検索を使うためには&lt;br /&gt;&lt;br /&gt;例えばサーバとするPCのIPアドレスが192.168.0.1とします。&lt;br /&gt;その場合、クライアントとなるPCのインターネットエクスプローラのアドレス欄に以下のように入力します。&lt;br /&gt;&lt;br /&gt;http://192.168.0.1:4664&lt;br /&gt;&lt;br /&gt;すると以下の画面のように、サーバのGoogleデスクトップ検索を使って、サーバ内のファイルを検索できるようになります。&lt;br /&gt;&lt;br /&gt;Image17.jpg&lt;br /&gt;↑&lt;br /&gt;定期的に行う必要がある作業&lt;br /&gt;&lt;br /&gt;d:\shareフォルダ内に適宜ファイルを追加したとしても、そのままでは索引が更新されないため検索対象になりません。&lt;br /&gt;そのため、上で説明した手順のように、定期的にAdd new dirs for indexing:として、例えばd:\shareを「Submit」する必要があります。&lt;br /&gt;↑&lt;br /&gt;注意事項&lt;br /&gt;&lt;br /&gt;サーバとするPCのOSがWindows XPの場合、標準の設定ではファイアウォールが邪魔して他のPCからアクセスできない場合があります。&lt;br /&gt;その際は以下の画面のように、「コントロールパネル」の「ファイアウォール」の「例外」の「ポートの追加」ボタンをクリックし、表示されるダイアログに&lt;br /&gt;&lt;br /&gt;名前　GoogleDesktopSearch&lt;br /&gt;ポート番号　4664&lt;br /&gt;&lt;br /&gt;という記述をし、「OK」ボタンをクリックしてください。&lt;br /&gt;Googleデスクトップ検索で使う、4664というポートを「ファイアウォール」の「例外」とすることで、他のPCから使えるようになります。&lt;br /&gt;&lt;br /&gt;Image18.jpg</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/7423203067628342864/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/7423203067628342864' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7423203067628342864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7423203067628342864'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/11/gds-dnka-kimta.html' title='GDS-DNKA - kimta部屋'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-1513082018232860070</id><published>2008-11-06T00:56:00.000-08:00</published><updated>2008-11-06T01:01:25.939-08:00</updated><title type='text'>잠보니스틱스 : [옮김] 직장인의 변화무쌍한 심리상태!</title><content type='html'>&lt;b&gt;&lt;font color=blue&gt;Boss is not here(상사가 없을때)： &lt;img src=http://pds6.egloos.com/pds/200807/25/41/image001.gif&gt;      &lt;br/&gt;&lt;br/&gt;Boss is calling(상사가 호출할때)： &lt;img src=http://pds6.egloos.com/pds/200807/25/41/image002.gif&gt;  &lt;br/&gt;&lt;br/&gt;In a meeting(회의시간)： &lt;img src=http://pds9.egloos.com/pds/200807/25/41/image003.gif&gt;    &lt;br/&gt;&lt;br/&gt;Training(교육)： &lt;img src=http://pds9.egloos.com/pds/200807/25/41/image004.gif&gt;&lt;br/&gt;&lt;br/&gt;Tea break(커피 타임)：&lt;img src=http://pds9.egloos.com/pds/200807/25/41/image005.gif&gt;&lt;br/&gt; &lt;br/&gt;Before noon on weekend(주말 오전)： &lt;img src=http://pds6.egloos.com/pds/200807/25/41/image006.gif&gt;  &lt;br/&gt;&lt;br/&gt;Ready for getting off work(퇴근준비)： &lt;img src=http://pds9.egloos.com/pds/200807/25/41/image007.gif&gt;     &lt;br/&gt;&lt;br/&gt;Tomorrow is a holiday(내일은 휴일)： &lt;img src=http://pds8.egloos.com/pds/200807/25/41/image008.gif&gt;&lt;br/&gt;&lt;br/&gt;Got today&#39;s target from boss(상사의 타겟이 된 오늘)： &lt;img src=http://pds9.egloos.com/pds/200807/25/41/image009.gif&gt;  &lt;br/&gt;&lt;br/&gt;Tough target(제대로 타켓이됨)：&lt;img src=http://pds9.egloos.com/pds/200807/25/41/image010.gif&gt;&lt;br/&gt;&lt;br/&gt;Find impossible to meet boss&#39;s requirement(상사가 무리한 요구를 할때) ：&lt;img src=http://pds6.egloos.com/pds/200807/25/41/image011.gif&gt;&lt;br/&gt;&lt;br/&gt;OT for 2hrs(연장근무 2시간)：&lt;img src=http://pds9.egloos.com/pds/200807/25/41/image012.gif&gt;         &lt;br/&gt;&lt;br/&gt;OT for a whole night(밤새도록 연장근무)：&lt;img src=http://pds8.egloos.com/pds/200807/25/41/image013.gif&gt;&lt;br/&gt;&lt;br/&gt;Being notified to OT on weekends(주말근무까지 하게 됐을 때)： &lt;img src=http://pds6.egloos.com/pds/200807/25/41/image014.gif&gt;&lt;br/&gt;&lt;br/&gt;Meet with &#39;Sorry-I-Don&#39;t-Know&#39;clients(무식한 고객을 상대할 때)：&lt;img src=http://pds8.egloos.com/pds/200807/25/41/image015.gif&gt;        &lt;br/&gt;&lt;br/&gt;Made mistakes in work(일에서 실수할때)：&lt;img src=http://pds6.egloos.com/pds/200807/25/41/image016.gif&gt;  &lt;br/&gt;&lt;br/&gt;Little achievement(작은 성과를 냈을때)：&lt;img src=http://pds6.egloos.com/pds/200807/25/41/image017.gif&gt;          &lt;br/&gt;&lt;br/&gt;Frustrating things happens(당황스런 일이 발생했을때)：&lt;img src=http://pds6.egloos.com/pds/200807/25/41/image018.gif&gt;  &lt;br/&gt;&lt;br/&gt;Finance person doesn&#39;t give the money(재무 담당자가 돈을 주지 않을때): &lt;img src=http://pds6.egloos.com/pds/200807/25/41/image019.gif&gt;    &lt;br/&gt;&lt;br/&gt;Being advised NO BONUS this year(보너스가 없다는 공지를 받을때)：&lt;img src=http://pds9.egloos.com/pds/200807/25/41/image020.gif&gt;&lt;/b&gt;&lt;/font&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/1513082018232860070/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/1513082018232860070' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1513082018232860070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1513082018232860070'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/11/blog-post.html' title='잠보니스틱스 : [옮김] 직장인의 변화무쌍한 심리상태!'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-4196921981644259275</id><published>2008-09-18T16:47:00.000-07:00</published><updated>2008-09-18T16:47:28.545-07:00</updated><title type='text'>C# SAMPLE</title><content type='html'>VC#のサンプルプログラムです。&lt;br /&gt;情報源 メーリングリストや他のHP&lt;br /&gt;No 名前 作成日時&lt;br /&gt;01 LHA書庫ファイルの中身を見る 2002/11/20&lt;br /&gt;02 ZIP圧縮 2002/11/21&lt;br /&gt;03 ZIP書庫ファイルの中身を見る&lt; 2002/11/23&lt;br /&gt;04 RARの解凍 2002/11/23&lt;br /&gt;05 ファイルパスからアイコンを取り出す 2002/11/23&lt;br /&gt;06 Enumサンプル 2002/11/29&lt;br /&gt;07 Parse 2002/12/09&lt;br /&gt;08 画像表示 2003/06/30&lt;br /&gt;09 UnZipExtractMem 2003/06/30&lt;br /&gt;10 Enum.Parse 2003/07/01&lt;br /&gt;&lt;br /&gt;LHA書庫ファイルの中身を見る&lt;br /&gt;&lt;br /&gt;フォームにドロップしたLHA書庫ファイルの中身を見ます。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace LHA_e&lt;br /&gt;{    &lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        public const int FNAME_MAX32 = 512;&lt;br /&gt;        [ StructLayout( LayoutKind.Sequential )]  &lt;br /&gt;            public struct INDIVIDUALINFO&lt;br /&gt;        {&lt;br /&gt;            System.UInt32    dwOriginalSize;        /* ファイルのサイズ */&lt;br /&gt;            System.UInt32    dwCompressedSize;    /* 圧縮後のサイズ */&lt;br /&gt;            System.UInt32    dwCRC;                /* 格納ファイルのチェックサム */&lt;br /&gt;            System.UInt32    uFlag;                /* 処理結果 */&lt;br /&gt;            /* Status flag */&lt;br /&gt;            System.UInt32     uOSType;            /* 書庫作成に使われた OS */&lt;br /&gt;            System.UInt16    wRatio;                /* 圧縮率 */&lt;br /&gt;            System.UInt16    wDate;                /* 格納ファイルの日付(DOS 形式) */&lt;br /&gt;            System.UInt16     wTime;                /* 格納ファイルの時刻(〃) */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=FNAME_MAX32 + 1 )]&lt;br /&gt;            string            szFileName;    /* 書庫名 */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=3 )]&lt;br /&gt;            string            dummy1;&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8 )]&lt;br /&gt;            string            szAttribute;        /* 格納ファイルの属性(書庫固有) */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8 )]&lt;br /&gt;            string            szMode;            /* 格納ファイルの格納モード(〃) */&lt;br /&gt;        }&lt;br /&gt;    &lt;br /&gt;        [DllImport(&quot;UNLHA32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern IntPtr UnlhaOpenArchive(IntPtr _hwnd, string _szFileName,&lt;br /&gt;            System.UInt32 _dwMode);&lt;br /&gt;        [DllImport(&quot;UNLHA32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnlhaFindFirst(IntPtr _harc, string _szWildName,&lt;br /&gt;            ref INDIVIDUALINFO lpSubInfo);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNLHA32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnlhaFindNext(IntPtr _harc, ref INDIVIDUALINFO lpSubInfo);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNLHA32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnlhaGetFileName(IntPtr _harc, StringBuilder _lpBuffer, int _nsize);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNLHA32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnlhaCloseArchive(IntPtr _harc);&lt;br /&gt;&lt;br /&gt;        private System.Windows.Forms.ListView listView1;&lt;br /&gt;        private System.Windows.Forms.ColumnHeader columnHeader1;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            this.listView1 = new System.Windows.Forms.ListView();&lt;br /&gt;            this.columnHeader1 = new System.Windows.Forms.ColumnHeader();&lt;br /&gt;            this.SuspendLayout();&lt;br /&gt;            // &lt;br /&gt;            // listView1&lt;br /&gt;            // &lt;br /&gt;            this.listView1.AllowDrop = true;&lt;br /&gt;            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {&lt;br /&gt;                                                                                        this.columnHeader1});&lt;br /&gt;            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br /&gt;            this.listView1.Name = &quot;listView1&quot;;&lt;br /&gt;            this.listView1.Size = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.listView1.TabIndex = 0;&lt;br /&gt;            this.listView1.View = System.Windows.Forms.View.Details;&lt;br /&gt;            this.listView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView1_DragDrop);&lt;br /&gt;            this.listView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView1_DragEnter);&lt;br /&gt;            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);&lt;br /&gt;            // &lt;br /&gt;            // columnHeader1&lt;br /&gt;            // &lt;br /&gt;            this.columnHeader1.Text = &quot;FileName&quot;;&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.Controls.AddRange(new System.Windows.Forms.Control[] {&lt;br /&gt;                                                                          this.listView1});&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.ResumeLayout(false);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            e.Effect = DragDropEffects.Copy | DragDropEffects.Move;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject;&lt;br /&gt;            dataObject = e.Data;&lt;br /&gt;            string [] paths =(string[])dataObject.GetData(DataFormats.FileDrop);&lt;br /&gt;&lt;br /&gt;            IntPtr harc = UnlhaOpenArchive(this.Handle, paths[0], 0);&lt;br /&gt;&lt;br /&gt;            INDIVIDUALINFO info = new INDIVIDUALINFO();&lt;br /&gt;            StringBuilder wildname = new StringBuilder();&lt;br /&gt;&lt;br /&gt;                &lt;br /&gt;            if (UnlhaFindFirst(harc, &quot;*.*&quot;, ref info) != -1)&lt;br /&gt;            {&lt;br /&gt;                listView1.Items.Clear();&lt;br /&gt;                do&lt;br /&gt;                {&lt;br /&gt;                    StringBuilder filename2 = new StringBuilder(256);&lt;br /&gt;                    UnlhaGetFileName(harc, filename2, 256);&lt;br /&gt;                    listView1.Items.Add(filename2.ToString());&lt;br /&gt;                } while (UnlhaFindNext(harc, ref info) != -1);&lt;br /&gt;                UnlhaCloseArchive(harc);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ZIP圧縮&lt;br /&gt;&lt;br /&gt;フォームにドロップしたファイルを圧縮します。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace Zip32J_r&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        [DllImport(&quot;ZIP32J.DLL&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern long Zip (IntPtr hwnd,string szCmdLine, StringBuilder SzOutput, int dwSize);&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AllowDrop = true;&lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);&lt;br /&gt;            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            e.Effect = DragDropEffects.Copy | DragDropEffects.Move;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject;&lt;br /&gt;            dataObject = e.Data;&lt;br /&gt;            string [] paths =(string[])dataObject.GetData(DataFormats.FileDrop);&lt;br /&gt;&lt;br /&gt;            string response_file_path =  System.IO.Path.GetDirectoryName(Application.ExecutablePath);&lt;br /&gt;            response_file_path =  response_file_path + @&quot;\&quot; + &quot;response.lst&quot;;&lt;br /&gt;            &lt;br /&gt;            System.IO.Stream stream = System.IO.File.Open(response_file_path, System.IO.FileMode.Create);&lt;br /&gt;            System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.GetEncoding(&quot;shift_jis&quot;));&lt;br /&gt;            &lt;br /&gt;            foreach(string a_filepath in paths)&lt;br /&gt;            {&lt;br /&gt;                writer.WriteLine(@&quot;&quot;&quot;&quot; + a_filepath + @&quot;&quot;&quot;&quot;);&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            writer.Close();&lt;br /&gt;            stream.Close();&lt;br /&gt;&lt;br /&gt;            string makefilepath = System.IO.Path.GetDirectoryName(paths[0]) + @&quot;\&quot; + &lt;br /&gt;                System.IO.Path.GetFileNameWithoutExtension(paths[0]);&lt;br /&gt;&lt;br /&gt;            string cmdline;&lt;br /&gt;            StringBuilder output = new StringBuilder(256);&lt;br /&gt;            cmdline = @&quot;-r &quot;&quot;&quot; + makefilepath + @&quot;&quot;&quot; @&quot; + response_file_path;&lt;br /&gt;            &lt;br /&gt;            long i = Zip(this.Handle, cmdline, output, 256);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ZIP書庫ファイルの中身を見る&lt;br /&gt;&lt;br /&gt;フォームにドロップした書庫ファイルの中身をみます。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace zip_e&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        public const int FNAME_MAX32 = 512;&lt;br /&gt;&lt;br /&gt;        public struct INDIVIDUALINFO&lt;br /&gt;        {&lt;br /&gt;            System.UInt32    dwOriginalSize;        /* ファイルのサイズ */&lt;br /&gt;            System.UInt32    dwCompressedSize;    /* 圧縮後のサイズ */&lt;br /&gt;            System.UInt32    dwCRC;                /* 格納ファイルのチェックサム */&lt;br /&gt;            System.UInt32    uFlag;                /* 処理結果 */&lt;br /&gt;            /* Status flag */&lt;br /&gt;            System.UInt32     uOSType;            /* 書庫作成に使われた OS */&lt;br /&gt;            System.UInt16    wRatio;                /* 圧縮率 */&lt;br /&gt;            System.UInt16    wDate;                /* 格納ファイルの日付(DOS 形式) */&lt;br /&gt;            System.UInt16     wTime;                /* 格納ファイルの時刻(〃) */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst = FNAME_MAX32 + 1 )]&lt;br /&gt;            string            szFileName;    /* 書庫名 */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=3 )]&lt;br /&gt;            string            dummy1;&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8 )]&lt;br /&gt;            string            szAttribute;        /* 格納ファイルの属性(書庫固有) */&lt;br /&gt;            [ MarshalAs( UnmanagedType.ByValTStr, SizeConst=8 )]&lt;br /&gt;            string            szMode;            /* 格納ファイルの格納モード(〃) */&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNZIP32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern IntPtr UnZipOpenArchive(IntPtr _hwnd, string _szFileName,  System.UInt32 _dwMode);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNZIP32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnZipFindFirst(IntPtr _harc, string _szWildName,&lt;br /&gt;            ref INDIVIDUALINFO lpSubInfo);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNZip32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnZipGetFileName(IntPtr _harc, StringBuilder _lpBuffer, int _nsize);&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNZip32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnZipCloseArchive(IntPtr _harc);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        [DllImport(&quot;UNZIP32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern  System.Int32 UnZipFindNext(IntPtr _harc, ref INDIVIDUALINFO lpSubInfo);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;&lt;br /&gt;        private System.Windows.Forms.ListView listView1;&lt;br /&gt;        private System.Windows.Forms.ColumnHeader columnHeader1; System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            this.listView1 = new System.Windows.Forms.ListView();&lt;br /&gt;            this.columnHeader1 = new System.Windows.Forms.ColumnHeader();&lt;br /&gt;            this.SuspendLayout();&lt;br /&gt;            // &lt;br /&gt;            // listView1&lt;br /&gt;            // &lt;br /&gt;            this.listView1.AllowDrop = true;&lt;br /&gt;            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {&lt;br /&gt;                                                                                        this.columnHeader1});&lt;br /&gt;            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br /&gt;            this.listView1.Name = &quot;listView1&quot;;&lt;br /&gt;            this.listView1.Size = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.listView1.TabIndex = 0;&lt;br /&gt;            this.listView1.View = System.Windows.Forms.View.Details;&lt;br /&gt;            this.listView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView1_DragDrop);&lt;br /&gt;            this.listView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView1_DragEnter);&lt;br /&gt;            this.listView1.SelectedIndexChanged += new System.EventHandler(this.listView1_SelectedIndexChanged);&lt;br /&gt;            // &lt;br /&gt;            // columnHeader1&lt;br /&gt;            // &lt;br /&gt;            this.columnHeader1.Text = &quot;FileName&quot;;&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.Controls.AddRange(new System.Windows.Forms.Control[] {&lt;br /&gt;                                                                          this.listView1});&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.ResumeLayout(false);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            e.Effect = DragDropEffects.Copy | DragDropEffects.Move;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject;&lt;br /&gt;            dataObject = e.Data;&lt;br /&gt;            string [] paths =(string[])dataObject.GetData(DataFormats.FileDrop);&lt;br /&gt;&lt;br /&gt;            IntPtr harc = UnZipOpenArchive(this.Handle, paths[0], 0);&lt;br /&gt;            &lt;br /&gt;            INDIVIDUALINFO info = new INDIVIDUALINFO();&lt;br /&gt;            StringBuilder wildname = new StringBuilder();&lt;br /&gt;&lt;br /&gt;                &lt;br /&gt;            if (UnZipFindFirst(harc, &quot;*.*&quot;, ref info) != -1)&lt;br /&gt;            {&lt;br /&gt;                listView1.Items.Clear();&lt;br /&gt;                do&lt;br /&gt;                {&lt;br /&gt;                    StringBuilder filename2 = new StringBuilder(256);&lt;br /&gt;                    UnZipGetFileName(harc, filename2, 256);&lt;br /&gt;                    listView1.Items.Add(filename2.ToString());&lt;br /&gt;                } while (UnZipFindNext(harc, ref info) != -1);&lt;br /&gt;                UnZipCloseArchive(harc);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RARの解凍&lt;br /&gt;&lt;br /&gt;フォームにドロップした書庫ファイルを解凍します。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;using System.Text;&lt;br /&gt;&lt;br /&gt;namespace Zip32J_r&lt;br /&gt;{&lt;br /&gt;    /// &lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        [DllImport(&quot;UNRAR32.DLL&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern long Unrar (IntPtr hwnd, string szCmdLine, StringBuilder SzOutput, int dwSize);&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AllowDrop = true;&lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop);&lt;br /&gt;            this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            e.Effect = DragDropEffects.Copy | DragDropEffects.Move;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject;&lt;br /&gt;            dataObject = e.Data;&lt;br /&gt;            string path =((string[])dataObject.GetData(DataFormats.FileDrop))[0];&lt;br /&gt;            string cmdline;&lt;br /&gt;&lt;br /&gt;            StringBuilder output = new StringBuilder(256);&lt;br /&gt;            cmdline = @&quot;-x &quot;&quot;&quot; + path + @&quot;&quot;&quot;&quot;;&lt;br /&gt;            &lt;br /&gt;            long i = Unrar(this.Handle, cmdline, output, 256);&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;ListView1のViewプロパティを変更すると大きいアイコンと小さいアイコンが、&lt;br /&gt;割り当てられていることが解ります。&lt;br /&gt;APIはよくわからないので、これが正しい書き方かどうかは解りません。&lt;br /&gt;アドバイスをお願いします。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;namespace sample&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    /// &lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        private System.Windows.Forms.ListView listView1;&lt;br /&gt;        private System.Windows.Forms.ColumnHeader columnHeader1;&lt;br /&gt;&lt;br /&gt;        const int LVM_SETIMAGELIST = 0x1003;&lt;br /&gt;&lt;br /&gt;        enum LVSIL&lt;br /&gt;        {&lt;br /&gt;            LVSIL_NORMAL = 0x0000,&lt;br /&gt;            LVSIL_SMALL = 0x0001,&lt;br /&gt;            LVSIL_STATE = 0x0002&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region SHFILEINFO&lt;br /&gt;&lt;br /&gt;        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]&lt;br /&gt;            public struct SHFILEINFO&lt;br /&gt;        { &lt;br /&gt;            public IntPtr hIcon; &lt;br /&gt;            public int    iIcon; &lt;br /&gt;            public int   dwAttributes; &lt;br /&gt;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=260)]&lt;br /&gt;            public string szDisplayName; &lt;br /&gt;            [MarshalAs(UnmanagedType.ByValTStr, SizeConst=80)]&lt;br /&gt;            public string szTypeName; &lt;br /&gt;        }&lt;br /&gt;                &lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region ListViewItem flags&lt;br /&gt;&lt;br /&gt;        public enum ListViewItemFlags&lt;br /&gt;        {&lt;br /&gt;            LVIF_TEXT               = 0x0001,&lt;br /&gt;            LVIF_IMAGE              = 0x0002,&lt;br /&gt;            LVIF_PARAM              = 0x0004,&lt;br /&gt;            LVIF_STATE              = 0x0008,&lt;br /&gt;            LVIF_INDENT             = 0x0010,&lt;br /&gt;            LVIF_NORECOMPUTE        = 0x0800&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region ListView Messages&lt;br /&gt;&lt;br /&gt;        public enum ListViewMessages&lt;br /&gt;        {&lt;br /&gt;            LVM_FIRST           =    0x1000,&lt;br /&gt;            LVM_SETITEM            = (LVM_FIRST + 06),&lt;br /&gt;            LVM_GETSUBITEMRECT  = (LVM_FIRST + 56),&lt;br /&gt;            LVM_GETITEMSTATE    = (LVM_FIRST + 44),&lt;br /&gt;            LVM_GETITEMTEXTW    = (LVM_FIRST + 115)&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region LVITEM&lt;br /&gt;&lt;br /&gt;        [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]&lt;br /&gt;            public struct LVITEM&lt;br /&gt;        {&lt;br /&gt;            public    ListViewItemFlags mask;&lt;br /&gt;            public    int iItem;&lt;br /&gt;            public    int iSubItem;&lt;br /&gt;            public    int state;&lt;br /&gt;            public    int stateMask;&lt;br /&gt;            public    IntPtr pszText;&lt;br /&gt;            public    int cchTextMax;&lt;br /&gt;            public    int iImage;&lt;br /&gt;            public    int lParam;&lt;br /&gt;            public    int iIndent;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        #region Shell File Info Flags&lt;br /&gt;&lt;br /&gt;        public enum ShellFileInfoFlags&lt;br /&gt;        {&lt;br /&gt;            SHGFI_ICON              = 0x000000100,&lt;br /&gt;            SHGFI_DISPLAYNAME       = 0x000000200,     &lt;br /&gt;            SHGFI_TYPENAME          = 0x000000400,    &lt;br /&gt;            SHGFI_ATTRIBUTES        = 0x000000800,   &lt;br /&gt;            SHGFI_ICONLOCATION      = 0x000001000,     &lt;br /&gt;            SHGFI_EXETYPE           = 0x000002000,     &lt;br /&gt;            SHGFI_SYSICONINDEX      = 0x000004000,    &lt;br /&gt;            SHGFI_LINKOVERLAY       = 0x000008000,     &lt;br /&gt;            SHGFI_SELECTED          = 0x000010000,     &lt;br /&gt;            SHGFI_ATTR_SPECIFIED    = 0x000020000,     &lt;br /&gt;            SHGFI_LARGEICON         = 0x000000000,     &lt;br /&gt;            SHGFI_SMALLICON         = 0x000000001,     &lt;br /&gt;            SHGFI_OPENICON          = 0x000000002,     &lt;br /&gt;            SHGFI_SHELLICONSIZE     = 0x000000004,     &lt;br /&gt;            SHGFI_PIDL              = 0x000000008,     &lt;br /&gt;            SHGFI_USEFILEATTRIBUTES = 0x000000010     &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        class WindowsAPI&lt;br /&gt;        {&lt;br /&gt;            #region Shell32.dll functions&lt;br /&gt;                &lt;br /&gt;            [DllImport(&quot;Shell32.dll&quot;, CharSet=CharSet.Auto)]&lt;br /&gt;            public static extern IntPtr SHGetFileInfo(string drivePath, int fileAttributes, &lt;br /&gt;                out SHFILEINFO fileInfo, int countBytesFileInfo, ShellFileInfoFlags flags);&lt;br /&gt;&lt;br /&gt;            #endregion&lt;br /&gt;&lt;br /&gt;            #region User32.dll functions&lt;br /&gt;&lt;br /&gt;            [DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]&lt;br /&gt;            public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);&lt;br /&gt;            [DllImport(&quot;user32.dll&quot;, CharSet=CharSet.Auto)]&lt;br /&gt;            public static extern void SendMessage(IntPtr hWnd, ListViewMessages msg, int wParam, ref LVITEM lParam);&lt;br /&gt;&lt;br /&gt;            #endregion&lt;br /&gt;        }&lt;br /&gt;        /// &lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            this.listView1 = new System.Windows.Forms.ListView();&lt;br /&gt;            this.columnHeader1 = new System.Windows.Forms.ColumnHeader();&lt;br /&gt;            this.SuspendLayout();&lt;br /&gt;            // &lt;br /&gt;            // listView1&lt;br /&gt;            // &lt;br /&gt;            this.listView1.AllowDrop = true;&lt;br /&gt;            this.listView1.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {&lt;br /&gt;                                                                                        this.columnHeader1});&lt;br /&gt;            this.listView1.Dock = System.Windows.Forms.DockStyle.Fill;&lt;br /&gt;            this.listView1.Name = &quot;listView1&quot;;&lt;br /&gt;            this.listView1.Size = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.listView1.TabIndex = 0;&lt;br /&gt;            this.listView1.View = System.Windows.Forms.View.SmallIcon;&lt;br /&gt;            this.listView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listView1_DragDrop);&lt;br /&gt;            this.listView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listView1_DragEnter);&lt;br /&gt;            // &lt;br /&gt;            // columnHeader1&lt;br /&gt;            // &lt;br /&gt;            this.columnHeader1.Text = &quot;名前&quot;;&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(292, 273);&lt;br /&gt;            this.Controls.AddRange(new System.Windows.Forms.Control[] {&lt;br /&gt;                                                                          this.listView1});&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.ResumeLayout(false);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            SHFILEINFO shfi = new SHFILEINFO();&lt;br /&gt;            IntPtr hSystemImageList = IntPtr.Zero;&lt;br /&gt;&lt;br /&gt;            hSystemImageList = WindowsAPI.SHGetFileInfo(@&quot;c:\&quot;, 0, out shfi, Marshal.SizeOf(typeof(SHFILEINFO)), &lt;br /&gt;                ShellFileInfoFlags.SHGFI_SYSICONINDEX | ShellFileInfoFlags.SHGFI_SMALLICON );&lt;br /&gt;            WindowsAPI.SendMessage(listView1.Handle, LVM_SETIMAGELIST, (int)LVSIL.LVSIL_SMALL, (int)hSystemImageList);&lt;br /&gt;            hSystemImageList = WindowsAPI.SHGetFileInfo(@&quot;c:\&quot;, 0, out shfi, Marshal.SizeOf(typeof(SHFILEINFO)), &lt;br /&gt;                ShellFileInfoFlags.SHGFI_SYSICONINDEX | ShellFileInfoFlags.SHGFI_LARGEICON );&lt;br /&gt;            WindowsAPI.SendMessage(listView1.Handle, LVM_SETIMAGELIST, (int)LVSIL.LVSIL_NORMAL, (int)hSystemImageList);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void SetupListViewItem(ref LVITEM item, string filePath)&lt;br /&gt;        {&lt;br /&gt;            SHFILEINFO shfi = new SHFILEINFO();&lt;br /&gt;            item.mask = ListViewItemFlags.LVIF_IMAGE;&lt;br /&gt;            WindowsAPI.SHGetFileInfo(filePath, 0, out shfi, Marshal.SizeOf(typeof(SHFILEINFO)), &lt;br /&gt;                ShellFileInfoFlags.SHGFI_SYSICONINDEX | ShellFileInfoFlags.SHGFI_SMALLICON | ShellFileInfoFlags.SHGFI_LARGEICON);&lt;br /&gt;            item.iImage = shfi.iIcon;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        void SetItem(System.Windows.Forms.ListView listView, ref LVITEM item)&lt;br /&gt;        {&lt;br /&gt;            WindowsAPI.SendMessage(listView.Handle, ListViewMessages.LVM_SETITEM,0,ref item);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject = e.Data;&lt;br /&gt;        &lt;br /&gt;            bool flag = false;&lt;br /&gt;            foreach(string format in dataObject.GetFormats())&lt;br /&gt;            {&lt;br /&gt;                if (format == DataFormats.FileDrop)&lt;br /&gt;                {&lt;br /&gt;                    flag = true;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (flag == false)&lt;br /&gt;                return;&lt;br /&gt;&lt;br /&gt;            e.Effect = DragDropEffects.Copy | DragDropEffects.Move;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void listView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            IDataObject dataObject = e.Data;&lt;br /&gt;        &lt;br /&gt;            bool flag = false;&lt;br /&gt;            foreach(string format in dataObject.GetFormats())&lt;br /&gt;            {&lt;br /&gt;                if (format == DataFormats.FileDrop)&lt;br /&gt;                {&lt;br /&gt;                    flag = true;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (flag == false)&lt;br /&gt;                return;&lt;br /&gt;&lt;br /&gt;            this.listView1.Items.Clear();&lt;br /&gt;            foreach(string path in (string[])dataObject.GetData(DataFormats.FileDrop))&lt;br /&gt;            {&lt;br /&gt;                InsertItem(path);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void InsertItem(string filePath)&lt;br /&gt;        {&lt;br /&gt;            ListViewItem item;&lt;br /&gt;            LVITEM item2 = new LVITEM();&lt;br /&gt;&lt;br /&gt;            item = listView1.Items.Add(filePath);&lt;br /&gt;&lt;br /&gt;            SetupListViewItem(ref item2, filePath);&lt;br /&gt;            item2.iItem = item.Index;&lt;br /&gt;            SetItem(listView1, ref item2);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enumサンプル&lt;br /&gt;&lt;br /&gt;Enumのサンプルです。&lt;br /&gt;[FlagsAttribute]宣言つ付けるか付けないかで結果が変わります。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Class1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    class Class1&lt;br /&gt;    {&lt;br /&gt;        [FlagsAttribute]&lt;br /&gt;        enum TestEnum&lt;br /&gt;        {&lt;br /&gt;            a = 0x01,&lt;br /&gt;            b = 0x02,&lt;br /&gt;            c = 0x04&lt;br /&gt;        }&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            TestEnum testEnum;&lt;br /&gt;&lt;br /&gt;            string [] names = Enum.GetNames(typeof(Class1.TestEnum));&lt;br /&gt;&lt;br /&gt;            foreach(string name in names)&lt;br /&gt;            {&lt;br /&gt;                Console.WriteLine(name);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            testEnum = TestEnum.a | TestEnum.b;&lt;br /&gt;            Console.WriteLine(testEnum);&lt;br /&gt;            //&lt;br /&gt;            // TODO: アプリケーションを開始するコードをここに追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Parse&lt;br /&gt;&lt;br /&gt;文字列から数値にキャストするときに使います。&lt;br /&gt;boolにもParseがあります。iniファイルにtrueまたはfalseを書き込みそれを読み込んだ&lt;br /&gt;りする時に重宝しています&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace ConsoleApplication1&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Class1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    class Class1&lt;br /&gt;    {&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            int i1 = 100;&lt;br /&gt;            int i2 = int.Parse(i1.ToString());&lt;br /&gt;            bool bl1 = true;&lt;br /&gt;            bool bl2 = bool.Parse(bl1.ToString());&lt;br /&gt;            //&lt;br /&gt;            // TODO: アプリケーションを開始するコードをここに追加してください。&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;宇宙仮面さんの「ImageViewerを作る」を元に、表示しきれない画像はスクロール&lt;br /&gt;させる機能を追加しました。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Windows.Forms;&lt;br /&gt;using System.Data;&lt;br /&gt;&lt;br /&gt;namespace ImageView&lt;br /&gt;{&lt;br /&gt;    /// &lt;br /&gt;    /// Form1 の概要の説明です。&lt;br /&gt;    /// &lt;br /&gt;    public class Form1 : System.Windows.Forms.Form&lt;br /&gt;    {&lt;br /&gt;        private System.Drawing.Image image;&lt;br /&gt;        private System.Windows.Forms.MainMenu mainMenu1;&lt;br /&gt;        private System.Windows.Forms.MenuItem menuItem1;&lt;br /&gt;        private System.Windows.Forms.MenuItem menuItem2;&lt;br /&gt;        private System.Windows.Forms.PictureBox pictureBox1;&lt;br /&gt;        private System.Windows.Forms.VScrollBar vScrollBar1;&lt;br /&gt;        private System.Windows.Forms.HScrollBar hScrollBar1;&lt;br /&gt;        private System.Windows.Forms.OpenFileDialog openFileDialog1;&lt;br /&gt;        /// &lt;br /&gt;        /// 必要なデザイナ変数です。&lt;br /&gt;        /// &lt;br /&gt;        private System.ComponentModel.Container components = null;&lt;br /&gt;&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            //&lt;br /&gt;            // Windows フォーム デザイナ サポートに必要です。&lt;br /&gt;            //&lt;br /&gt;            InitializeComponent();&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// 使用されているリソースに後処理を実行します。&lt;br /&gt;        /// &lt;br /&gt;        protected override void Dispose( bool disposing )&lt;br /&gt;        {&lt;br /&gt;            if( disposing )&lt;br /&gt;            {&lt;br /&gt;                if (components != null) &lt;br /&gt;                {&lt;br /&gt;                    components.Dispose();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            base.Dispose( disposing );&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        #region Windows Form Designer generated code&lt;br /&gt;        /// &lt;br /&gt;        /// デザイナ サポートに必要なメソッドです。このメソッドの内容を&lt;br /&gt;        /// コード エディタで変更しないでください。&lt;br /&gt;        /// &lt;br /&gt;        private void InitializeComponent()&lt;br /&gt;        {&lt;br /&gt;            this.mainMenu1 = new System.Windows.Forms.MainMenu();&lt;br /&gt;            this.menuItem1 = new System.Windows.Forms.MenuItem();&lt;br /&gt;            this.menuItem2 = new System.Windows.Forms.MenuItem();&lt;br /&gt;            this.pictureBox1 = new System.Windows.Forms.PictureBox();&lt;br /&gt;            this.vScrollBar1 = new System.Windows.Forms.VScrollBar();&lt;br /&gt;            this.hScrollBar1 = new System.Windows.Forms.HScrollBar();&lt;br /&gt;            this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog();&lt;br /&gt;            this.SuspendLayout();&lt;br /&gt;            // &lt;br /&gt;            // mainMenu1&lt;br /&gt;            // &lt;br /&gt;            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;                                                                                      this.menuItem1});&lt;br /&gt;            // &lt;br /&gt;            // menuItem1&lt;br /&gt;            // &lt;br /&gt;            this.menuItem1.Index = 0;&lt;br /&gt;            this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {&lt;br /&gt;                                                                                      this.menuItem2});&lt;br /&gt;            this.menuItem1.Text = &quot;ファイル&quot;;&lt;br /&gt;            // &lt;br /&gt;            // menuItem2&lt;br /&gt;            // &lt;br /&gt;            this.menuItem2.Index = 0;&lt;br /&gt;            this.menuItem2.Text = &quot;開く&quot;;&lt;br /&gt;            this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);&lt;br /&gt;            // &lt;br /&gt;            // pictureBox1&lt;br /&gt;            // &lt;br /&gt;            this.pictureBox1.Name = &quot;pictureBox1&quot;;&lt;br /&gt;            this.pictureBox1.Size = new System.Drawing.Size(272, 248);&lt;br /&gt;            this.pictureBox1.TabIndex = 0;&lt;br /&gt;            this.pictureBox1.TabStop = false;&lt;br /&gt;            this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);&lt;br /&gt;            this.pictureBox1.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);&lt;br /&gt;            // &lt;br /&gt;            // vScrollBar1&lt;br /&gt;            // &lt;br /&gt;            this.vScrollBar1.Location = new System.Drawing.Point(272, 0);&lt;br /&gt;            this.vScrollBar1.Name = &quot;vScrollBar1&quot;;&lt;br /&gt;            this.vScrollBar1.Size = new System.Drawing.Size(16, 248);&lt;br /&gt;            this.vScrollBar1.TabIndex = 1;&lt;br /&gt;            this.vScrollBar1.ValueChanged += new System.EventHandler(this.vScrollBar1_ValueChanged);&lt;br /&gt;            // &lt;br /&gt;            // hScrollBar1&lt;br /&gt;            // &lt;br /&gt;            this.hScrollBar1.Location = new System.Drawing.Point(0, 248);&lt;br /&gt;            this.hScrollBar1.Name = &quot;hScrollBar1&quot;;&lt;br /&gt;            this.hScrollBar1.Size = new System.Drawing.Size(272, 16);&lt;br /&gt;            this.hScrollBar1.TabIndex = 2;&lt;br /&gt;            this.hScrollBar1.ValueChanged += new System.EventHandler(this.hScrollBar1_ValueChanged);&lt;br /&gt;            // &lt;br /&gt;            // Form1&lt;br /&gt;            // &lt;br /&gt;            this.AutoScaleBaseSize = new System.Drawing.Size(5, 12);&lt;br /&gt;            this.ClientSize = new System.Drawing.Size(288, 265);&lt;br /&gt;            this.Controls.AddRange(new System.Windows.Forms.Control[] {&lt;br /&gt;                                                                          this.hScrollBar1,&lt;br /&gt;                                                                          this.vScrollBar1,&lt;br /&gt;                                                                          this.pictureBox1});&lt;br /&gt;            this.Menu = this.mainMenu1;&lt;br /&gt;            this.Name = &quot;Form1&quot;;&lt;br /&gt;            this.Text = &quot;Form1&quot;;&lt;br /&gt;            this.Resize += new System.EventHandler(this.Form1_Resize);&lt;br /&gt;            this.Load += new System.EventHandler(this.Form1_Load);&lt;br /&gt;            this.ResumeLayout(false);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;&lt;br /&gt;        /// &lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main() &lt;br /&gt;        {&lt;br /&gt;            Application.Run(new Form1());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Load(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            this.DrawImage(e.Graphics);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void Form1_Resize(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            ReSize();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void ReSize()&lt;br /&gt;        {&lt;br /&gt;            System.Drawing.Graphics g;&lt;br /&gt;            System.Drawing.Size size = this.ClientSize;&lt;br /&gt;&lt;br /&gt;            if (image == null)&lt;br /&gt;            {&lt;br /&gt;                this.vScrollBar1.Visible = false;&lt;br /&gt;                this.hScrollBar1.Visible = false;&lt;br /&gt;                return;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (size.Width &gt;= this.image.Width)&lt;br /&gt;            {&lt;br /&gt;                this.pictureBox1.Height = size.Height;&lt;br /&gt;                this.hScrollBar1.Visible = false;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                this.pictureBox1.Height = size.Height - this.hScrollBar1.Height;&lt;br /&gt;                this.hScrollBar1.Maximum = 0;&lt;br /&gt;                this.hScrollBar1.Minimum = 0;&lt;br /&gt;                this.hScrollBar1.Visible = true;&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            if (size.Height &gt;= this.image.Height)&lt;br /&gt;            {&lt;br /&gt;                this.pictureBox1.Width = size.Width;&lt;br /&gt;                this.vScrollBar1.Visible = false;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                this.pictureBox1.Width = size.Width - this.vScrollBar1.Width;&lt;br /&gt;                this.vScrollBar1.Maximum = 0;&lt;br /&gt;                this.vScrollBar1.Minimum = 0;&lt;br /&gt;                this.vScrollBar1.Visible = true;&lt;br /&gt;            }&lt;br /&gt;                &lt;br /&gt;            this.hScrollBar1.Maximum = this.image.Width - this.pictureBox1.Width + 10 - 1;&lt;br /&gt;            this.vScrollBar1.Maximum = this.image.Height - this.pictureBox1.Height + 10 - 1;&lt;br /&gt;&lt;br /&gt;            //this.hScrollBar1.LargeChange = 10;&lt;br /&gt;            //this.vScrollBar1.LargeChange = 10;&lt;br /&gt;            &lt;br /&gt;            this.vScrollBar1.Left = this.pictureBox1.Width;&lt;br /&gt;            this.vScrollBar1.Height = this.pictureBox1.Height;&lt;br /&gt;            this.hScrollBar1.Top = this.pictureBox1.Height;&lt;br /&gt;            this.hScrollBar1.Width = this.pictureBox1.Width;&lt;br /&gt;            &lt;br /&gt;            g = System.Drawing.Graphics.FromHwnd(this.pictureBox1.Handle);&lt;br /&gt;            this.DrawImage(g);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void pictureBox1_Click(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;        &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void menuItem2_Click(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            System.Windows.Forms.DialogResult result = this.openFileDialog1.ShowDialog();&lt;br /&gt;            try&lt;br /&gt;            {&lt;br /&gt;                this.image = System.Drawing.Image.FromFile(this.openFileDialog1.FileName);&lt;br /&gt;                ReSize();&lt;br /&gt;            }&lt;br /&gt;            catch (Exception exception)&lt;br /&gt;            {&lt;br /&gt;                System.Windows.Forms.MessageBox.Show(exception.ToString());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void DrawImage(Graphics g)&lt;br /&gt;        {&lt;br /&gt;            if (image == null)&lt;br /&gt;            {&lt;br /&gt;                return;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Point[] points = new Point[3];&lt;br /&gt;            Rectangle rectangle = new Rectangle();&lt;br /&gt;            rectangle.Width = image.Width;&lt;br /&gt;            rectangle.Height = image.Height;&lt;br /&gt;&lt;br /&gt;            if (this.hScrollBar1.Visible == false)&lt;br /&gt;            {&lt;br /&gt;                rectangle.X = 0;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                rectangle.X = this.hScrollBar1.Value;&lt;br /&gt;            }&lt;br /&gt;            if (this.vScrollBar1.Visible == false)&lt;br /&gt;            {&lt;br /&gt;                rectangle.Y = 0;&lt;br /&gt;            }&lt;br /&gt;            else&lt;br /&gt;            {&lt;br /&gt;                rectangle.Y = this.vScrollBar1.Value;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            points[0].X = 0;&lt;br /&gt;            points[0].Y = 0;&lt;br /&gt;            points[1].X = image.Width;&lt;br /&gt;            points[1].Y = 0;&lt;br /&gt;            points[2].X = 0;&lt;br /&gt;            points[2].Y = image.Height;&lt;br /&gt;&lt;br /&gt;            g.DrawImage(image, points, rectangle, GraphicsUnit.Pixel);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void vScrollBar1_ValueChanged(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            System.Drawing.Graphics g;&lt;br /&gt;&lt;br /&gt;            g = System.Drawing.Graphics.FromHwnd(this.pictureBox1.Handle);&lt;br /&gt;            this.DrawImage(g);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private void hScrollBar1_ValueChanged(object sender, System.EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            System.Drawing.Graphics g;&lt;br /&gt;&lt;br /&gt;            g = System.Drawing.Graphics.FromHwnd(this.pictureBox1.Handle);&lt;br /&gt;            this.DrawImage(g);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UnZipExtractMem&lt;br /&gt;&lt;br /&gt;test/test2.jpgを含む複数のファイルを圧縮したアーカイブの中のtest2.jpgだけを&lt;br /&gt;メモリーに解凍するサンプルです。&lt;br /&gt;lpwAttrが取得できなかったので、不完全です。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Runtime.InteropServices;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;namespace UnZipExtractMem&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Class1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    class Class1&lt;br /&gt;    {&lt;br /&gt;        [DllImport(&quot;UNZIP32&quot;, CharSet=CharSet.Ansi )]&lt;br /&gt;        public static extern System.Int32 UnZipExtractMem(IntPtr hWnd,&lt;br /&gt;            string szCmdLine,&lt;br /&gt;            byte[] szBuffer,&lt;br /&gt;            System.UInt32 dwSize,&lt;br /&gt;            ref System.Int32 lpTime,&lt;br /&gt;            IntPtr lpwAttr,&lt;br /&gt;            ref System.UInt32 lpdwWriteSize&lt;br /&gt;            );&lt;br /&gt;    &lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            string szCmdLine;&lt;br /&gt;            byte[] szBuffer = new byte[100];&lt;br /&gt;            System.UInt32 dwSize = 100;&lt;br /&gt;            System.Int32 lpTime = new System.Int32();&lt;br /&gt;            System.UInt16 lpwAttr = new System.UInt16();&lt;br /&gt;            System.UInt32 lpdwWriteSize = new System.UInt32();&lt;br /&gt;&lt;br /&gt;            szCmdLine = @&quot;c:\test.ZIP test/test2.jpg&quot;;&lt;br /&gt;&lt;br /&gt;            System.Int32 int32 = new System.Int32();&lt;br /&gt;&lt;br /&gt;            UnZipExtractMem((System.IntPtr)null, szCmdLine, szBuffer, dwSize, ref lpTime, (System.IntPtr)null, ref lpdwWriteSize);&lt;br /&gt;            &lt;br /&gt;            //&lt;br /&gt;            // TODO: アプリケーションを開始するコードをここに追加してください。&lt;br /&gt;            //&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enum.Parse&lt;br /&gt;&lt;br /&gt;Enum.Parseの使い方です。&lt;br /&gt;&lt;br /&gt;using System;&lt;br /&gt;&lt;br /&gt;namespace Enum&lt;br /&gt;{&lt;br /&gt;    /// &lt;summary&gt;&lt;br /&gt;    /// Class1 の概要の説明です。&lt;br /&gt;    /// &lt;/summary&gt;&lt;br /&gt;    class Class1&lt;br /&gt;    {&lt;br /&gt;        enum TestEnum&lt;br /&gt;        {&lt;br /&gt;            a,&lt;br /&gt;            b,&lt;br /&gt;            c&lt;br /&gt;        };&lt;br /&gt;        /// &lt;summary&gt;&lt;br /&gt;        /// アプリケーションのメイン エントリ ポイントです。&lt;br /&gt;        /// &lt;/summary&gt;&lt;br /&gt;        [STAThread]&lt;br /&gt;        static void Main(string[] args)&lt;br /&gt;        {&lt;br /&gt;            TestEnum testEnum;&lt;br /&gt;&lt;br /&gt;            testEnum = (TestEnum)System.Enum.Parse(typeof(TestEnum), &quot;a&quot;);&lt;br /&gt;&lt;br /&gt;            //&lt;br /&gt;            // TODO: アプリケーションを開始するコードをここに追加してください。&lt;br /&gt;            //&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/4196921981644259275/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/4196921981644259275' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4196921981644259275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4196921981644259275'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/09/c-sample.html' title='C# SAMPLE'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-3742329352715457976</id><published>2008-09-18T01:19:00.000-07:00</published><updated>2008-09-18T01:19:46.141-07:00</updated><title type='text'>ayrun님의 블로그 :: 네이버 블로그</title><content type='html'>&lt;a href=&quot;http://blog.naver.com/ayrun?Redirect=Log&amp;amp;logNo=100032268055&quot;&gt;ayrun님의 블로그 :: 네이버 블로그&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/3742329352715457976/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/3742329352715457976' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/3742329352715457976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/3742329352715457976'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/09/ayrun.html' title='ayrun님의 블로그 :: 네이버 블로그'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-1349483339265764780</id><published>2008-09-17T23:58:00.000-07:00</published><updated>2008-09-17T23:58:11.314-07:00</updated><title type='text'>탑~! 블로그 - ADO.NET DB연결 문자열</title><content type='html'>[C#]&lt;br /&gt;ADO.NET DB연결 문자열 - System.Data.SqlClient&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;SQL Server .NET Data Provider&lt;br /&gt; System.Data.SqlClient&lt;br /&gt;Using C#:&lt;br /&gt;&lt;br /&gt;using System.Data.SqlClient;&lt;br /&gt;...&lt;br /&gt;SqlConnection oSQLConn = new SqlConnection();&lt;br /&gt;oSQLConn.ConnectionString = &quot;Data Source=(local);&quot; +&lt;br /&gt;                            &quot;Initial Catalog=myDatabaseName;&quot; +&lt;br /&gt;                            &quot;Integrated Security=SSPI&quot;;&lt;br /&gt;oSQLConn.Open();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using VB.NET:&lt;br /&gt;&lt;br /&gt;Imports System.Data.SqlClient&lt;br /&gt;...&lt;br /&gt;Dim oSQLConn As SqlConnection = New SqlConnection()&lt;br /&gt;oSQLConn.ConnectionString = &quot;Data Source=(local);&quot; &amp; _&lt;br /&gt;                            &quot;Initial Catalog=myDatabaseName;&quot; &amp; _&lt;br /&gt;                            &quot;Integrated Security=SSPI&quot;&lt;br /&gt;oSQLConn.Open()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;원격서버 IP 연결:&lt;br /&gt;&lt;br /&gt;oSQLConn.ConnectionString = &quot;Network Library=DBMSSOCN;&quot; &amp; _&lt;br /&gt;                            &quot;Data Source=xxx.xxx.xxx.xxx,1433;&quot; &amp; _&lt;br /&gt;                            &quot;Initial Catalog=myDatabaseName;&quot; &amp; _&lt;br /&gt;                            &quot;User ID=myUsername;&quot; &amp; _&lt;br /&gt;                            &quot;Pas sword=myPassword&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* TCP/IP 연결시, Network Library=DBMSSOCN. 암호화시 Encrypt=yes&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;연결시 선택가능한 네트워크 프로토콜:&lt;br /&gt;&lt;br /&gt;         Name                       Network library &lt;br /&gt;         dbnmpntw               Win32 Named Pipes *&lt;br /&gt;         dbmssocn               Win32 Winsock TCP/IP *&lt;br /&gt;         dbmsspxn               Win32 SPX/IPX&lt;br /&gt;         dbmsvinn                Win32 Banyan Vines&lt;br /&gt;         dbmsrpcn               Win32 Multi-Protocol (Windows RPC) * &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;좀더 자세한 사항은 MSDN 을 참조하세요.&lt;br /&gt;1. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdrefsqlprovspec.asp&lt;br /&gt;&lt;br /&gt;2. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadoproperties.asp&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - Oracle.DataAccess.Client&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;Oracle .NET Data Provider - From Oracle&lt;br /&gt; Oracle.DataAccess.Client&lt;br /&gt;&lt;br /&gt;using Oracle.DataAccess.Client;&lt;br /&gt;...&lt;br /&gt;OracleConnection oOracleConn = new OracleConnection();&lt;br /&gt;oOracleConn.ConnectionString = &quot;Data Source=MyOracleServerName;&quot; +&lt;br /&gt;                               &quot;Integrated Security=SSPI&quot;;&lt;br /&gt;oOracleConn.Open();&lt;br /&gt;&lt;br /&gt;* 오라클에서 제공하는 드라이버를 이용하는 경우입니다.&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - System.Data.OracleClient&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;Oracle .NET Data Provider - From Microsoft&lt;br /&gt; System.Data.OracleClient&lt;br /&gt;&lt;br /&gt;using System.Data.OracleClient;&lt;br /&gt; &lt;br /&gt;OracleConnection oOracleConn = new OracleConnection();&lt;br /&gt;oOracleConn.ConnectionString = &quot;Data Source=Oracle8i;&quot; +&lt;br /&gt;                               &quot;Integrated Security=SSPI&quot;;&lt;br /&gt;oOracleConn.Open();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;*오라클 클라이언트가 최소한 8.1.7 이상은 설치되어야 합니다.&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - System.Data.OleDb&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;For IBM AS/400 OLE DB Provider&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.OleDb&lt;br /&gt;...&lt;br /&gt;Dim oOleDbConnection As OleDbConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;           &quot;Provider=IBMDA400.DataSource.1;&quot; &amp; _&lt;br /&gt;           &quot;Data source=myAS400DbName;&quot; &amp; _&lt;br /&gt;           &quot;User Id=myUsername;&quot; &amp; _&lt;br /&gt;           &quot;Password=myPassword&quot;&lt;br /&gt;oOleDbConnection = New OleDb.OleDbConnection(sConnString)&lt;br /&gt;oOleDbConnection.Open()&lt;br /&gt;&lt;br /&gt;For JET OLE DB Provider&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.OleDb&lt;br /&gt;...&lt;br /&gt;Dim oOleDbConnection As OleDbConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Provider=Microsoft.Jet.OLEDB.4.0;&quot; &amp; _&lt;br /&gt;         &quot;Data Source=C:\myPath\myJet.mdb;&quot; &amp; _&lt;br /&gt;         &quot;User ID=Admin;&quot; &amp; _&lt;br /&gt;         &quot;Password=&quot;&lt;br /&gt;oOleDbConnection = New OleDb.OleDbConnection(sConnString)&lt;br /&gt;oOleDbConnection.Open()&lt;br /&gt;&lt;br /&gt;For Oracle OLE DB Provider&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.OleDb&lt;br /&gt;...&lt;br /&gt;Dim oOleDbConnection As OleDbConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Provider=OraOLEDB.Oracle;&quot; &amp; _&lt;br /&gt;         &quot;Data Source=MyOracleDB;&quot; &amp; _&lt;br /&gt;         &quot;User ID=myUsername;&quot; &amp; _&lt;br /&gt;         &quot;Password=myPassword&quot;&lt;br /&gt;oOleDbConnection = New OleDb.OleDbConnection(sConnString)&lt;br /&gt;oOleDbConnection.Open()&lt;br /&gt;&lt;br /&gt;For SQL Server OLE DB Provider&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.OleDb&lt;br /&gt;...&lt;br /&gt;Dim oOleDbConnection As OleDbConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Provider=sqloledb;&quot; &amp; _&lt;br /&gt;         &quot;Data Source=myServerName;&quot; &amp; _&lt;br /&gt;         &quot;Initial Catalog=myDatabaseName;&quot; &amp; _&lt;br /&gt;         &quot;User Id=myUsername;&quot; &amp; _&lt;br /&gt;         &quot;Password=myPassword&quot;&lt;br /&gt;oOleDbConnection = New OleDb.OleDbConnection(sConnString)&lt;br /&gt;oOleDbConnection.Open()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;For Sybase ASE OLE DB Provider&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.OleDb&lt;br /&gt;...&lt;br /&gt;Dim oOleDbConnection As OleDbConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Provider=Sybase ASE OLE DB Provider;&quot; &amp; _&lt;br /&gt;         &quot;Data Source=MyDataSourceName;&quot; &amp; _&lt;br /&gt;         &quot;Server Name=MyServerName;&quot; &amp; _&lt;br /&gt;         &quot;Database=MyDatabaseName;&quot; &amp; _&lt;br /&gt;         &quot;User ID=myUsername;&quot; &amp; _&lt;br /&gt;         &quot;Password=myPassword&quot;&lt;br /&gt;oOleDbConnection = New OleDb.OleDbConnection(sConnString)&lt;br /&gt;oOleDbConnection.Open()&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - System.Data.ODBC&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;For SQL Server ODBC Driver&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.Odbc&lt;br /&gt;...&lt;br /&gt;Dim oODBCConnection As OdbcConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;          &quot;Driver={SQL Server};&quot; &amp; _&lt;br /&gt;          &quot;Server=MySQLServerName;&quot; &amp; _&lt;br /&gt;          &quot;Database=MyDatabaseName;&quot; &amp; _&lt;br /&gt;          &quot;Uid=MyUsername;&quot; &amp; _&lt;br /&gt;          &quot;Pwd=MyPassword&quot;&lt;br /&gt;oODBCConnection = New Odbc.OdbcConnection(sConnString)&lt;br /&gt;oODBCConnection.Open()&lt;br /&gt;&lt;br /&gt;For Oracle ODBC Driver&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.Odbc&lt;br /&gt;...&lt;br /&gt;Dim oODBCConnection As OdbcConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Driver={Microsoft ODBC for Oracle};&quot; &amp; _&lt;br /&gt;         &quot;Server=OracleServer.world;&quot; &amp; _&lt;br /&gt;         &quot;Uid=myUsername;&quot; &amp; _&lt;br /&gt;         &quot;Pwd=myPassword&quot;&lt;br /&gt;oODBCConnection = New Odbc.OdbcConnection(sConnString)&lt;br /&gt;oODBCConnection.Open()&lt;br /&gt;&lt;br /&gt;For Access (JET) ODBC Driver&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.Odbc&lt;br /&gt;...&lt;br /&gt;Dim oODBCConnection As OdbcConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;         &quot;Driver={Microsoft Access Driver (*.mdb)};&quot; &amp; _&lt;br /&gt;         &quot;Dbq=c:\somepath\mydb.mdb;&quot; &amp; _&lt;br /&gt;         &quot;Uid=Admin;&quot; &amp; _&lt;br /&gt;         &quot;Pwd=&quot;&lt;br /&gt;oODBCConnection = New Odbc.OdbcConnection(sConnString)&lt;br /&gt;oODBCConnection.Open()&lt;br /&gt;&lt;br /&gt;For Sybase System 11 ODBC Driver&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.Odbc&lt;br /&gt;...&lt;br /&gt;Dim oODBCConnection As OdbcConnection&lt;br /&gt;Dim sConnString As String = _&lt;br /&gt;     &quot;Driver={Sybase System 11};&quot; &amp; _&lt;br /&gt;                   &quot;SRVR=mySybaseServerName;&quot; &amp; _&lt;br /&gt;                   &quot;DB=myDatabaseName;&quot; &amp; _&lt;br /&gt;                   &quot;UID=myUsername;&quot; &amp; _&lt;br /&gt;                   &quot;PWD=myPassword&quot;&lt;br /&gt;oODBCConnection = New OdbcConnection(sConnString)&lt;br /&gt;oODBCConnection.Open()&lt;br /&gt;&lt;br /&gt;For all other ODBC Drivers&lt;br /&gt;&lt;br /&gt;&#39; VB.NET&lt;br /&gt;Imports System.Data.Odbc&lt;br /&gt;...&lt;br /&gt;Dim oODBCConnection As OdbcConnection&lt;br /&gt;Dim sConnString As String = &quot;Dsn=myDsn;&quot; &amp; _&lt;br /&gt;                            &quot;Uid=myUsername;&quot; &amp; _&lt;br /&gt;                            &quot;Pwd=myPassword&quot;&lt;br /&gt;oODBCConnection = New Odbc.OdbcConnection(sConnString)&lt;br /&gt;oODBCConnection.Open()&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - CoreLab.MySql&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;MySQLDirect .NET Data Provider&lt;br /&gt; CoreLab.MySql&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using CoreLab.MySql;&lt;br /&gt;&lt;br /&gt;MySqlConnection oMySqlConn = new MySqlConnection();&lt;br /&gt;oMySqlConn.ConnectionString = &quot;User ID=myUsername;&quot; +&lt;br /&gt;                              &quot;Password=myPassword;&quot; +&lt;br /&gt;                              &quot;Host=localhost;&quot; +&lt;br /&gt;                              &quot;Port=3306;&quot; +&lt;br /&gt;                              &quot;Database=myDatabaseName;&quot; +&lt;br /&gt;                              &quot;Direct=true;&quot; +&lt;br /&gt;                              &quot;Protocol=TCP;&quot; +&lt;br /&gt;                              &quot;Compress=false;&quot; +&lt;br /&gt;                              &quot;Pooling=true;&quot; +&lt;br /&gt;                              &quot;Min Pool Size=0;&quot; +&lt;br /&gt;                              &quot;Max Pool Size=100;&quot; +&lt;br /&gt;                              &quot;Connection Lifetime=0&quot;;&lt;br /&gt;oMySqlConn.Open();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[드라이버컴포넌트 다운로드]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ADO.NET DB연결 문자열 - Sybase.Data.AseClient&lt;br /&gt;www.wssplex.net&lt;br /&gt;&lt;br /&gt;Adaptive Server Enterprise (ASE) .NET Data Provider&lt;br /&gt;Sybase.Data.AseClient&lt;br /&gt;&lt;br /&gt;using Sybase.Data.AseClient;&lt;br /&gt;...&lt;br /&gt;AseConnection oAseConn = new AseConnection();&lt;br /&gt;oAseConn.ConnectionString = &quot;Data Source=(local);&quot; +&lt;br /&gt;                            &quot;Initial Catalog=myDatabaseName;&quot; +&lt;br /&gt;                            &quot;User ID=myUsername;&quot; +&lt;br /&gt;                            &quot;Password=myPassword&quot;&lt;br /&gt;oAseConn.Open();</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/1349483339265764780/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/1349483339265764780' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1349483339265764780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1349483339265764780'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/09/adonet-db.html' title='탑~! 블로그 - ADO.NET DB연결 문자열'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-6944183081502269941</id><published>2008-09-09T02:34:00.000-07:00</published><updated>2008-09-09T02:34:20.045-07:00</updated><title type='text'>どきどき 1 - goo 辞書</title><content type='html'>どきどき 1&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;「―（と）しながら、登場を待つ」</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/6944183081502269941/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/6944183081502269941' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/6944183081502269941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/6944183081502269941'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/09/1-goo.html' title='どきどき 1 - goo 辞書'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-1563234317249752182</id><published>2008-09-01T00:04:00.000-07:00</published><updated>2008-09-01T00:04:05.236-07:00</updated><title type='text'>일본어가 우리말속에</title><content type='html'>히마리가 없어라는 말&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;しまりがない&lt;br /&gt;(정신적으로나 육체적으로도) 야무지지 못하다. 흐리멍덩하다.</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/1563234317249752182/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/1563234317249752182' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1563234317249752182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/1563234317249752182'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/09/blog-post.html' title='일본어가 우리말속에'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-848391026490882178</id><published>2008-08-13T22:28:00.000-07:00</published><updated>2008-08-13T22:29:07.925-07:00</updated><title type='text'>중고차 사는법</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; 연식에 비해 지나치게 주행거리가 짧은 건 아닌 지를 살펴본다. 1년에 2만㎞ 정도를&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;판금작업을 거친 차는 태양을 마주하고 차 표면을 45도 각도로 보면 빗살들이 보인다.&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;이런 차의 실리콘은 자연광에 비춰보면 차체와 실리콘의 색이 다르고 손톱으로 누르면&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;보닛을 열면 헤드라이트가 양 옆으로 꺾어지는 부분에 두개의 쇠 빔이 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;다른 문짝의 실리콘과 같은 색깔, 비슷한 모양인지 확인한다.&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;&lt;br /&gt;많은 소비자들이 차의 앞부분에는 많은 신경을 쓰지만 트렁크 안쪽까지는 보지 않는다.&lt;br /&gt;그러나 주유구가 있는 뒤 펜더나 트렁크 부분에 사고가 나면 차체의 균형이 깨져&lt;br /&gt; 잡음과 잔고장이 발생하므로, 꼼꼼하게 살펴봐야 한다.&lt;br /&gt;&lt;br /&gt;트렁크를 열면 고무패킹이 보인다. 그 안쪽을 벗겨보면 철판 모서리가 날카롭게 날이 서 있다.&lt;br /&gt;그 부분이 매끄럽다면 트렁크 부위에 사고가 없었던 것으로 판단할 수 있다.</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/848391026490882178/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/848391026490882178' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/848391026490882178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/848391026490882178'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/08/blog-post_13.html' title='중고차 사는법'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-7159440729099306051</id><published>2008-08-10T21:34:00.000-07:00</published><updated>2008-08-10T21:34:29.223-07:00</updated><title type='text'>클리앙 - 자유게시판</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;우리나라 양궁 팀은 많다면 많고 적다면 적습니다. 여자부가 15팀 남자부가 10팀인가 됩니다. 하지만 야구처럼 한팀에 수십명 있는게 아니라 적게는 4명 많게는 7-8명 정도뿐이죠.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;초 중고교와 대학도 많지 않습니다. 하지만 그들의 질은 소수정예 그 자체입니다. 양궁을 많이 경험해 본 제가 봐도 국가대표 선수들과 그 밑의 급 선수들이 개인전이나 단체전을 해도 국가대표 선수들이 항상 이긴다는 보장을 못할 거라 생각합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;우리나라 양궁 국가대표는 보통 11월부터 종합선수권이라는 대회를 통해 남녀 8명 총 16명을 선발하여 동계훈련을 시키고 이듬해 세계대회 진출시 이 8명의 선수들 중 평가전을 통해 3-4명을 차출하는 방식으로 이루어집니다.&lt;br /&gt;&lt;br /&gt;그런데 전년도 대표선수에서 탈락하는 선수가 반수 이상입니다. 그만큼 경쟁이 치열합니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;여 자 양궁은 84년 올림픽부터 2004년 올림픽까지 개인전과 단체전 금메달을 석권했습니다. 그러면서도 개인전 금메달리스트의 얼굴은 계속 바뀌었고, 2회 연속 올림픽 출전한 선수조차 손에 꼽을 정도로 적습니다. 즉 국가대표 단골멤버라는 말이 양궁에서는 없다는 말이죠.&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;1. 원래 양궁경기 규칙은 30, 50, 60, 70미터(여자부, 남자부는 30, 50, 70, 90미터) 경기로 각 거리별로 36발씩 발사하여 1440점 만점으로 경기가 진행됩니다.&lt;br /&gt;&lt;br /&gt;각 거리별(360점)로 메달이 있고, 거리별 점수를 합한 1440점 만점으로 개인전, 그리고 4명의 선수들 중 상위 3명의 점수 합계를 단체전으로 칩니다.&lt;br /&gt;&lt;br /&gt;문제는 이렇게 할 경우 한두발 실수가 있어도 나머지에서 거의 보충이 되기 때문에 기량차와 실수가 거의 없는 한국선수들의 석권을 피할 수 없고 심한 경우 개인전 금은동, 거리별 금은동을 모두 한국선수가 따가는 문제(?)가 생깁니다.&lt;br /&gt;&lt;br /&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;&lt;br /&gt;&lt;br /&gt;3. 그래서... 나온게&lt;br /&gt;&lt;br /&gt;올림픽 라운드라는 방식입니다. 올림픽 라운드 방식은 1번에 나온 경기 방식으로 우선 경기를 치러 1위부터 64위까지 선별하고 1위와 64위, 2위와 63위 이런 식으로 토너먼트 경기를 펼칩니다.&lt;br /&gt;&lt;br /&gt;이 런 방식에서는 1위부터 4위까지 선수들은 시드를 배정받아서 4강 이전에는 토너먼트 경기를 하지 않게 됩니다. 토너먼드 경기는 70미터만 12발을 쏴서 승패를 결정합니다. 결국 한국 선수들이 상대적으로 체격이 크지 않은 점을 이용하여 여자의 입장에서 보면 가장 먼거리 경기를 하여 체격 작은 한국 선수들에게 불리하게 만들고, 실수 한발만 있으면 한국 선수들은 무조건 떨어질 수 있게 만든 것입니다.&lt;br /&gt;&lt;br /&gt;단체전도 마찬가지로 한선수가 3발씩 3번 즉 27발만 쏴서 토너먼트로 진행했습니다.&lt;br /&gt;&lt;br /&gt;하지만 그래도 한국의 금메달 전선에는 이상이 없었습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 그래서... 나온게&lt;br /&gt;&lt;br /&gt;국가대표 선수들 수를 3명으로 줄인 것입니다. 개인전은 그렇다 치더라도 단체전에서만이라도 한국의 금을 한번 막아보자는 취지로 만든 방식입니다.&lt;br /&gt;&lt;br /&gt;기 량차가 거의 없는 4명의 특급선수들로 구성된 한국 선수단에서 한명이 컨디션이 안 좋아도 3명의 점수만 합산하거나 3명을 골라 출전하는 단체전의 특성상 한국의 금메달 전선은 이상이 없었기에 아예 출전선수를 3명으로 줄여 한명의 컨디션 난조를 기대하는 우스운 방식이죠.&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;10,9,8,7,6,5,4,3,2,1점으로 되어 있는 양궁 표적지를 1점과 0점으로만 구성된 표적지로 바꾼 것입니다.&lt;br /&gt;&lt;br /&gt;어 차피 한국선수들은 특별한 경우가 아니면 8점 밖으로 점수가 나가지 않기 때문에 한국 선수들을 이길 방법이 없다고 본 협회에서 아예 하얀 표적지에 까만 주먹만한 검은 점하나 찍어 놓고 거기 들어가면 1점이고 안 들어가면 0점으로 처리하는 방식이죠. 참.. 갈데까지 간 방법입니다.&lt;br /&gt;&lt;br /&gt;어차피 한국선수들은 실수를 해도 8점인데 외국 선수들은 잘 쏴야 8점이니 적수가 안 되니까 아예 표적지를 이판사판으로 바꾼 것입니다.&lt;br /&gt;&lt;br /&gt;아직 올림픽에서는 도입이 안 되었는데 유니버시아드 대회에서는 이 방법으로 경기를 합니다.&lt;br /&gt;&lt;br /&gt;그런데도 한국 선수들의 금메달 행진은 이어졌습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. 그래서... 나온게,&lt;br /&gt;&lt;br /&gt;이번 아시안 게임처럼 퀄리피케이션 라운드(1440점 만점의 토너먼트 시드 배정 결정전)에서 통과한 선수들 중 절대로 한 국가에서 2명 이상 출전을 못하게 만든 것입니다.&lt;br /&gt;&lt;br /&gt;즉 한국선수가 퀄리피케이션 라운드에서 1,2,3위를 해도 3위 선수는 출전을 못하게 하는 것입니다. 이 방법은 최소한 한개의 메달은 한국선수들이 차지 못하게 하는 효과와 함께, 3위를 한 한국 선수가 본선에 못 나가는 심리적인 타격을 이용하여 선수단 전체에 악영향을 미치는 교묘하고 치졸한 방법입니다.&lt;br /&gt;&lt;br /&gt;그럼에도 한국선수들의 금메달 행진은 이어졌습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7. 그래서... 나온게,&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;8. 그래서... 나온게&lt;br /&gt;&lt;br /&gt;아예 경기장의 바람 방향이 한방향이 아니라 쏘는 곳과 표적지의 중간지점에서 바람이 수시로바뀌는 아주 요상한 장소에서 양궁경기를 개최합니다.&lt;br /&gt;&lt;br /&gt;하 지만 이 방법은 오히려 한국선수들의 기량이 얼마나 뛰어난지 보여주는 계기가 될 뿐이었습니다. 다른 나라 선수들은 국가대표임에도 0점을 날리는 경기장에서 6점 이하로는 절대 날아가지 않는 한국선수들을 보고 외국 선수들과 기자들은 넋을 잃고 바라볼 수밖에 없었지요.&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;실 례로 양궁 하면 박성현을 떠올리지만 박성현 선수가 국내대회에서 항상 메달을 독식하지는 못합니다. 국가대표 단골 멤버인 윤미진 선수는 노메달로 끝나는 대회가 많을 정도입니다. 심지어 윤미진 선수는 전국체전 출전을 위한 경기대표 선발전에도 뽑히지 못할뻔했습니다.(경기도에는 수원시청과 여주군청 두 팀이 있어서 대회를 통해 4위 이내 선수까지만 전국체전에 출전할 수 있습니다) 세계챔피언이 국내대회 출전을 걱정해야 하는 나라가 우리 나라입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;국가대표 선발전은 중학교 3학년부터 실업팀 선수들 가운데 일정 점수 이상을 한번이라도 기록한 선수들을 모아 놓고 뽑게 되는데 중학교 3학년 선수가 선배들을 제치고 국가대표가 되어 아시안 게임이나 올림픽에 출전하는 경우가 많이 있습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;현재 한국체대 선수인 임동현 선수는 고교 1학년때 아시안 게임에 출전하여 금메달을 획득했고, 고교 2년생 이특&lt;br /&gt;&lt;br /&gt;영 선수는 고1 때 세계선수권에 출전하여 개인전 은과 단체전 금을 따기도 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1992 년 국가대표였던 정재헌 선수는 모종의 사건에 휘말려 국가대표 영구제명의 징계를 받았는데 징계가 풀린 뒤 2005년 무려 13년이 흐른 뒤에 세계선수권 대회에 출전하여 금을 획득하며 건재를 알렸습니다. 하지만 정재헌 선수는 2006년에는 국가대표 선발전에서 꼴지에 가까운 성적으로 탈락하는 수모를 당하기도 했습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;07년 전국체전에서는 그간 전국대회에서 이름조차 내밀지 못했던 신성우라는 선수가 4관왕에 오르기도 했구요. 전국체전 기록이 세계 신기록보다 높게 나오기도 합니다(전국체전은 국내경기여서 공인세계기록으로 인정되지 않습니다)&lt;br /&gt;&lt;br /&gt;전국체전 개인전 신기록이 120점만점입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;상황이 이 정도이니 국가대표 되기가 힘들지 국가대표 되고 나서는 선수들끼리 메달 색깔만 다를뿐 금메달은 따 놓은 당상이라는 어이없는 상황이 벌어지는 곳이 한국입니다.&lt;br /&gt;&lt;br /&gt;정말 한국에서만 빚어지는 &#39;상황&#39;입니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;참고로 한 가지 더 추가하자면 08년 국가대표에는 이제 고교에 입학하는 곽예지라는 선수가 최연소 국가대표 기록을 세웠습니다. 잘하면 이 선수가 올림픽에 나가 고1 금메달을 딸 수도 있겠네요.&lt;br /&gt;&lt;br /&gt;올해도 한국 양궁의 선전을 기대하며, 이번 올림픽 기간에 다시 한번 지식 검색에 양궁에 관한 글들이 많기를 바랍니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;출처 - 현재 양궁을 가르치고 있는 marine827님의 지식. (허락을 받고, 살짝 수정한 후 올립니다.)&lt;br /&gt;&lt;br /&gt;출처 : [기타] marine827님의 지식.</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/7159440729099306051/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/7159440729099306051' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7159440729099306051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/7159440729099306051'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/08/blog-post_10.html' title='클리앙 - 자유게시판'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-2188127563766203140</id><published>2008-08-06T18:24:00.001-07:00</published><updated>2008-08-06T18:24:56.684-07:00</updated><title type='text'>엠파스 블로그 - 세상과 맞닿은 나의공간</title><content type='html'>3박4일 제주 여행 일정...&lt;br /&gt;아래는 제주 가족 여행을 가면서 알아본다고 펌해놓은 자료들이다...&lt;br /&gt; &lt;br /&gt;우리 가족의 여행일정을 요약하면...&lt;br /&gt; &lt;br /&gt;숙소는 한화리조트 콘도 (회사 복지 포인트로 사용) - 한 군데서 3박했다...&lt;br /&gt;         가능하다면, 부지런을 떨어서 한림쪽 1박, 서귀포 2박, 성산 3박... 이런 식으로 하는 것도 괜찮을 것 같다.&lt;br /&gt; &lt;br /&gt;여행 코스는 : 첫날 : 하귀-애월 해안도로 ~ 한림공원 ~ 금릉석물원(여기는 시간이 없어서 패스)&lt;br /&gt;                   2일차 : 코끼리랜드 ~ 서귀포 열기구 체험 ~ 이중섭 미술관 ~ 천지연폭포 ~ 남원큰엉 ~ 최남단 감귤 체험장 ~&lt;br /&gt;                              산굼부리 ~ 숙소&lt;br /&gt;                  3일차 : 봉개승마장 말타기 체험 ~ 김녕 미로공원 ~ 만장굴 ~ 섭지코지 ~ 신양해수욕장 해수욕 ~ 숙소&lt;br /&gt;                  4일차 : 우도행 배 승선 9:30 (여름에는 배 시간도 특별히 없더라) ~ 2:30 배타고 나옴 ~ 공항&lt;br /&gt;                     우도에서 해수욕을 꼭 해야한다... 하고수동 해수욕장... 정말 멋진 해수욕장이다...&lt;br /&gt; &lt;br /&gt;맛집 : 첫날 저녁 - 제주시 백선횟집 따치회&lt;br /&gt;         2일차 - 만장굴 주차장 내 식당 (배가 고파 들어간 곳... 최악임... 제주도에 고발할까 생각중)&lt;br /&gt;         3일차 - 서귀포 진주식당 전복뚝배기&lt;br /&gt;         4일차 - 성산 오조해녀의 집 전복죽&lt;br /&gt;        만장굴 식당은 가지 마라는 뜻이고... 나머지 세 군데는 정말 강추... 안가보면 후회할듯...&lt;br /&gt;        콘도 - 아침, 저녁은 콘도에서 자체 해결... 지하 슈퍼에서 이것저것 사다가 해먹어도 괜찮았다...&lt;br /&gt;              &lt;br /&gt; &lt;br /&gt;-----------------------------------------------------------&lt;펌 자료등&gt;------------------------------&lt;br /&gt; &lt;br /&gt;1일 : 한림공원 → 금능석물원 → 수월봉 → 송악산 → 용머리해안 → 산방산 → 소인국테마파크 → 숙소&lt;br /&gt;2일 : 대포주상절리 → 여미지식물원 → 테디베어박물관 → 중문해수욕장 → 약천사 → 아프리카박물관 → 외돌개&lt;br /&gt;        → 서귀포유람선 → 천지연폭포 → 숙소&lt;br /&gt;3일 : 신영영화박물관 → 제주민속촌 → 섭지코지 → 성산일출봉 → 우도 → 숙소&lt;br /&gt;4일 : 일출랜드 → 성읍민속마을 → 산굼부리 → 코끼리랜드 → 신비의도로 → 도두봉 → 용두암 → 공항&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; - 가는방법 : 제주시▶성산 50분소요, 서귀포시▶성산 60분소요&lt;br /&gt; - 선박 : 성산항에서 1시간간격으로 도항선 출발 07:30~18:00(성수기에는 증편)&lt;br /&gt; - 요금(왕복요금-해상국립공원 입장료, 도항선료, 대합실료 포함) : 성인(5,500)&lt;br /&gt;    어린이(1,900)&lt;br /&gt; - 요금(교통) : 자전거(1,000), 오토바이(3,300), 중소형차(25,000), 12승합차(29,400)&lt;br /&gt;    15인승합차(36,000)&lt;br /&gt; - 기타 교통수단 : 우도셔틀버스(5,000), 자전거대여(문의-064)783-0516)&lt;br /&gt; ※기상변화에 유의하여 여행에 불편함이 없도록 사전에 미리 체크하세요&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;1일 : 공항 → 도깨비도로 → 1117+1112번 산록도로 드라이브 → 산굼부리 → 정의승마장 → 만장굴/미로공원&lt;br /&gt;        → 비자림 → 성산일출봉 → 숙소 &lt;br /&gt;2일 : 우도여행 → 성산~신산리 해안도로 → 제주민속촌 → 신영영화박물관 → 남원큰엉해안산책로 → 천지연폭포&lt;br /&gt;        → 숙소&lt;br /&gt;3일 : 대포주상절리 → 중문관광단지(여미지,테디베어박물관) → 용머리해안 → 서귀포잠수함 → 마라도여행 → 송악산&lt;br /&gt;        → 숙소 &lt;br /&gt;4일 : 하귀~해안도로 → 한림공원,협재해수욕장,비양도 → 분재예술원 → 오&#39;설록 녹차 → 수월봉~대정해안도로 → 공항&lt;br /&gt;*성산일출봉 - 일출은 보기 힘들지만 올라서 보면 가슴이 시원해지는 곳&lt;br /&gt;*표선민속촌 - 제주의 진짜 민속촌&lt;br /&gt;*남원 큰엉 해안경승지 강추!! - 대자연의 신비로움, 경이로움을 느낄 수 있는 곳&lt;br /&gt;관광지 이동하시다 보면 관광지입장료를 구입하셔야 하는데요&lt;br /&gt;현지에서 구입하시면 가격이 비싸거든요&lt;br /&gt;미리 구매하시면 최고54% 저렴하게 이용 가능하십니다.&lt;br /&gt;숙소,렌트카,패키지 예약시 추가5%할인&lt;br /&gt;가능하니 이용해 보시는건 어떠세요? #관광지할인쿠폰&lt;br /&gt;맛집은 메뉴별로 안내해드릴께요...^^&amp;&lt;br /&gt;:::추천음식점:::&lt;br /&gt;＊다미진 횟집 / 064-784-2208 / 표선해수욕장 근처(횟집)&lt;br /&gt;＊바스메(말고기전문) / 064-787-3930 / 성읍에서 제주시방면으로 3Km&lt;br /&gt;＊쉬는팡(흑돼지구이) / 064-738-5833  / 대유랜드 수렵장 방면으로 300m&lt;br /&gt;＊우리봉식당(뚝배기전문) / 064-782-0032 / 성산일출봉 주차장 맞은편&lt;br /&gt;＊물항식당(갈치요리) / 064-712-0550 / 신제주 그랜드호텔 4거리 서쪽으로 200m&lt;br /&gt;＊성미가든(토종닭요리) / 064-783-3279 / 교래리 미니미니랜드 4거리 동쪽으로 150m&lt;br /&gt;＊포구식당(조림,물회) / 064-787-1016 / 표선해수욕장 지나서 표선부두 근처&lt;br /&gt;＊축협한우전문식당(소고기) / 064-794-5658 / 소인국테마파크 지나 100미터 우측에 위치함&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;1일 : 공항 → 애월,하귀해안도로 → 금릉석물원 → 분재예술원 → 오설록녹차박물관 → 송악산 → 마라도여행&lt;br /&gt;        → 용머리해안 → 숙소&lt;br /&gt;2일 : 여미지식물원,테디베어박물관,중문관광단지 → 중문,대포해안 주상절리대 → 대포항 → 천지연폭포&lt;br /&gt;        → 신영영화박물관 → 제주민속촌박물관 → 고성시,신산리 해안도로 → 숙소&lt;br /&gt;3일 : 성산일출봉 → 우도여행 → 비자림 → 산굼부리 → 1117번 산록도로 드라이브 → 도깨비도로 → 목석원 → 공항&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;제주도맛집정보-제주도맛집 꼭 가봐야 할 곳/ 안다녀오면 후회 할지도 모르는 제주도맛집리스트&gt;&lt;br /&gt;&lt;br /&gt;&lt;제주시 추천맛집&gt;&lt;br /&gt; 물금향토음식점 - 구수한 돌솥밥에 제주산 갈치조림 고등어조림 수협직판장옆 항상 재료가 신선해요&lt;br /&gt; 거상향토음식점-수면고등어로 유명한 제주도유명맛집 고등어회 함 드셔보세요..싱싱하고 쫄깃한 맛&lt;br /&gt; 제주본섬- 제주산 흑돼지로 유명한집...흑돼지와 와인이 어울릿듯한 인테리어에 고기맛이 정말 훌륭합니다&lt;br /&gt;&lt;br /&gt;&lt;중문관광단지 추천 맛집&gt;&lt;br /&gt;하영흑돼지구이- 대나무 숯과 참숯만 사용 흑돼지 맛이 정말 좋습니다 인테리어도 훌륭하구요&lt;br /&gt;어부와 농부횟집- 스끼다시와 회맛에 감탄사가 나옵니다.&lt;br /&gt; 제주미향- 갈치조림 해물뚝배기 참 맛있습니다 내부시설이랑 직원서비스 정말 친절합니다&lt;br /&gt; 대포해송횟집- 자연산 활어회 전문집입니다. 대포앞바다를 보며 먹는 맛 고급일식집 인테리어에....&lt;br /&gt; 미스제주가든- 실속파를 위한 제주산 흑돼지 전문점 맛과 주인장 인심이 일품입니다&lt;br /&gt;&lt;br /&gt;&lt;서귀포 칠십리해안도로&gt;&lt;br /&gt;수라청횟집- 예전에 VJ특공대 나왔던집...일본인이 수라청횟집을 극찬하는 모습을 보고 저도 가보고 싶단 생각을 했습니다&lt;br /&gt; 숲섬갈치요리전문점- 갈치요리하면 서귀포에서 유명한 곳...함 드셔보세요 꼭이요  &lt;br /&gt; 정방횟집-스끼다시와 회가 맛있는 곳.....푸짐 합니다&lt;br /&gt;산록촌- 활어회와 제주산흑돼지를 동시에 즐길수 있는 이색맛집 절묘한 맛의 조화&lt;br /&gt;팜빌리지바베큐 체험장-바다전망 정말 좋습니다 건물이 영화속 배모양이에요 그리고 제주해산물과 제주산흑돼지.소시지,전복 활소라등..거기다 생맥주&lt;br /&gt;&lt;제주서부&gt;&lt;br /&gt;차귀도 달래식당- 매운탕맛...뿐 아니라 국물이나 양념이 정말 맛있습니다 감탄사가 절로..그리고  차귀도달래배낚시하시면 잡은 고기도 조리해 드린데요</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/2188127563766203140/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/2188127563766203140' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2188127563766203140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/2188127563766203140'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/08/blog-post.html' title='엠파스 블로그 - 세상과 맞닿은 나의공간'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-8800869402921091596</id><published>2008-08-06T18:24:00.000-07:00</published><updated>2008-08-06T18:24:36.289-07:00</updated><title type='text'>hwanycom님의 블로그 :: 네이버 블로그</title><content type='html'>&lt; 흑돼지 전문점 &gt;&lt;br /&gt;* 모수 흑돼지: (☎ 064-745-0470)&lt;br /&gt;- 위치: 제주시 연동 = 제주공항에서 차로 7분거리.&lt;br /&gt;- 신선한 냉장육 돼지구이를 맛보실 수 있는 곳.&lt;br /&gt;- 메뉴: 흑돼지 한마리(600g): 25,000원, 뼈갈비(600g): 20,000원, 양념갈비(1인분): 7,000원, 오겹살(200g): 9,000원, 목살(200g): 8,000원, 흑돼지김치찌게(10,000원)..&lt;br /&gt;&lt;br /&gt;* 봉개 산양가든: (☎ 064-721-2715)&lt;br /&gt;- 위치: 명도암 목장 내.&lt;br /&gt;- 너른 들판에 자연방목해 더욱 쫄깃한 육질을 자랑하는 곳.&lt;br /&gt;- 메뉴: 흑돼지구이(7,000원)..&lt;br /&gt;&lt;br /&gt;* 고기굽는 사람들: (☎ 064-744-4468)&lt;br /&gt;- 위치: 노형로타리에서 양돈축협 아래 사거리, 미화2차 아파트 맞은편 = 공항 7분거리.&lt;br /&gt;- 쫄깃쫄깃한 제주산 흑돼지고기를 고급스럽게 맛볼 수 있는 숯불갈비전문점!&lt;br /&gt;- 일본의 N.H.K에서 방송, &lt;조선일보&gt;에 소개, MBC ‘I LOVE 제주’ 친절우수 업소.&lt;br /&gt;- 메뉴: 수원왕갈비(13,000원), 생소불고기, 갈비살(8,000원), 대나무통 삼겹살 구이(8,000원), 양념갈비, 생갈비, 생목살구이, 제주산목살 고추장구이(1인기준 모두 7,000원),&lt;br /&gt;- 점심특선메뉴(5,000원: 제주 돼지 두루치기 정식=두루치기+된장뚝배기+7가지찬+쌈)&lt;br /&gt;&lt;br /&gt;&lt; 기타 &gt;&lt;br /&gt;* 목장원: (☎ 064-748-9233)&lt;br /&gt;- 위치: 신제주 이마트 옆 = 공항에서 10분거리.&lt;br /&gt;- 제주에서 방목한 말의 각 부위를 입맛에 맞게 요리. 깔끔한 맛의 말고기 퓨전요리 전문점&lt;br /&gt;- 여러 언론매체에서 앞다투어 취재해 갈 정도로 유명.&lt;br /&gt;-‘제 2회 향토음식 경연대회 대상수상’&lt;br /&gt;- 메뉴: 마선육회, 말만두, 갈비찜, 말순대, 샤브샤브, 생구이, 칼국수..&lt;br /&gt;&lt;br /&gt;* 만가 민물장어: (☎ 064-724-1316)&lt;br /&gt;- 위치: 제주시 법원검찰청 후문 동쪽 100m 지점.&lt;br /&gt;- 한방재를 비롯한 22가지 재료로 장어양념을 만드는 곳.&lt;br /&gt;- 메뉴: 장어구이, 점심식사로 장어정식(8,000원), 장어탕(5,000원)..&lt;br /&gt;&lt;br /&gt;* 신천지 ‘옻닭 백숙’: (☎ 064-743-1766~7)&lt;br /&gt;- 위치: 터미널에서 공항방면 해태동산 못 미치는 곳.&lt;br /&gt;- 쫄깃한 검은 닭살의 씹히는 맛이 일품.&lt;br /&gt;- 메뉴: 옭닭 백숙(30,000~35,000원). 후식으로 아이스크림이 나오는 이색적 만남.&lt;br /&gt;&lt;br /&gt;* 금문도: (☎ 064-747-2380)&lt;br /&gt;- 위치: 신제주 그랜드 호텔 뒤편 200m.&lt;br /&gt;- 시원한 해물국물맛, 제주식 중국요리&lt;br /&gt;- 메뉴: 탕수육+쟁반자장(2인 18,000원), 해산물탕수육+쟁반짬뽕(2인 25,000원)..&lt;br /&gt;&lt;br /&gt;제주도에 있는 많은 맛집중에서 관광객들이 많이 찾는곳으로 안내하여 드렸습니다.&lt;br /&gt;일정을 계획하실때에 맛집 또한 너무나도 중요한데요...&lt;br /&gt;참고하셔서 맛있는 음식도 함께하는 즐거운 여행을 계획하세요...^^&lt;br /&gt;&lt;br /&gt;&lt; 흑돼지 전문점 &gt;&lt;br /&gt;* 모수 흑돼지: (☎ 064-745-0470)&lt;br /&gt;- 위치: 제주시 연동 = 제주공항에서 차로 7분거리.&lt;br /&gt;- 신선한 냉장육 돼지구이를 맛보실 수 있는 곳.&lt;br /&gt;- 메뉴: 흑돼지 한마리(600g): 25,000원, 뼈갈비(600g): 20,000원, 양념갈비(1인분): 7,000원, 오겹살(200g): 9,000원, 목살(200g): 8,000원, 흑돼지김치찌게(10,000원)..&lt;br /&gt;&lt;br /&gt;* 봉개 산양가든: (☎ 064-721-2715)&lt;br /&gt;- 위치: 명도암 목장 내.&lt;br /&gt;- 너른 들판에 자연방목해 더욱 쫄깃한 육질을 자랑하는 곳.&lt;br /&gt;- 메뉴: 흑돼지구이(7,000원)..&lt;br /&gt;&lt;br /&gt;* 고기굽는 사람들: (☎ 064-744-4468)&lt;br /&gt;- 위치: 노형로타리에서 양돈축협 아래 사거리, 미화2차 아파트 맞은편 = 공항 7분거리.&lt;br /&gt;- 쫄깃쫄깃한 제주산 흑돼지고기를 고급스럽게 맛볼 수 있는 숯불갈비전문점!&lt;br /&gt;- 일본의 N.H.K에서 방송, &lt;조선일보&gt;에 소개, MBC ‘I LOVE 제주’ 친절우수 업소.&lt;br /&gt;- 메뉴: 수원왕갈비(13,000원), 생소불고기, 갈비살(8,000원), 대나무통 삼겹살 구이(8,000원), 양념갈비, 생갈비, 생목살구이, 제주산목살 고추장구이(1인기준 모두 7,000원),&lt;br /&gt;- 점심특선메뉴(5,000원: 제주 돼지 두루치기 정식=두루치기+된장뚝배기+7가지찬+쌈)&lt;br /&gt;&lt;br /&gt;&lt; 기타 &gt;&lt;br /&gt;* 목장원: (☎ 064-748-9233)&lt;br /&gt;- 위치: 신제주 이마트 옆 = 공항에서 10분거리.&lt;br /&gt;- 제주에서 방목한 말의 각 부위를 입맛에 맞게 요리. 깔끔한 맛의 말고기 퓨전요리 전문점&lt;br /&gt;- 여러 언론매체에서 앞다투어 취재해 갈 정도로 유명.&lt;br /&gt;-‘제 2회 향토음식 경연대회 대상수상’&lt;br /&gt;- 메뉴: 마선육회, 말만두, 갈비찜, 말순대, 샤브샤브, 생구이, 칼국수..&lt;br /&gt;&lt;br /&gt;* 만가 민물장어: (☎ 064-724-1316)&lt;br /&gt;- 위치: 제주시 법원검찰청 후문 동쪽 100m 지점.&lt;br /&gt;- 한방재를 비롯한 22가지 재료로 장어양념을 만드는 곳.&lt;br /&gt;- 메뉴: 장어구이, 점심식사로 장어정식(8,000원), 장어탕(5,000원)..&lt;br /&gt;&lt;br /&gt;* 신천지 ‘옻닭 백숙’: (☎ 064-743-1766~7)&lt;br /&gt;- 위치: 터미널에서 공항방면 해태동산 못 미치는 곳.&lt;br /&gt;- 쫄깃한 검은 닭살의 씹히는 맛이 일품.&lt;br /&gt;- 메뉴: 옭닭 백숙(30,000~35,000원). 후식으로 아이스크림이 나오는 이색적 만남.&lt;br /&gt;&lt;br /&gt;* 금문도: (☎ 064-747-2380)&lt;br /&gt;- 위치: 신제주 그랜드 호텔 뒤편 200m.&lt;br /&gt;- 시원한 해물국물맛, 제주식 중국요리&lt;br /&gt;- 메뉴: 탕수육+쟁반자장(2인 18,000원), 해산물탕수육+쟁반짬뽕(2인 25,000원)..&lt;br /&gt;&lt;br /&gt;제주도에 있는 많은 맛집중에서 관광객들이 많이 찾는곳으로 안내하여 드렸습니다.&lt;br /&gt;일정을 계획하실때에 맛집 또한 너무나도 중요한데요...&lt;br /&gt;참고하셔서 맛있는 음식도 함께하는 즐거운 여행을 계획하세요...^^&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt; 횟집 &gt;&lt;br /&gt;&lt;br /&gt;* 산지물 식당: (☎ 064-752-5599)&lt;br /&gt;- 위치: 제주시 탑동 서부두 방파제 입구 대도로변에 위치&lt;br /&gt;- 새콤달콤한 물회를 드실 수 있는 곳.&lt;br /&gt;- 메뉴: 어랭이물회(6,000원), 갈치회(20,000원), 고등어회(10,000원),&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;고등어조림, 갈치국..&gt;&lt;br /&gt;&lt;br /&gt;* 유빈식당: (☎ 064-753-5218)&lt;br /&gt;- 위치: 제주시 탑동 오리엔탈 호텔 서쪽 대도로변.&lt;br /&gt;- 전복죽으로 맛있는 곳.&lt;br /&gt;- 메뉴: 전복죽(특: 12,000원, 보통: 9,000원), 전복회, 전복구이, 성게국, 모듬회..&lt;br /&gt;&lt;br /&gt;* 물항식당: (☎ 064-712-2731), (☎ 064-753-2731)&lt;br /&gt;- 위치: 본점 = 제주시 연동 신제주 그랜드호텔 정문 앞.&lt;br /&gt;&lt;br /&gt;*서부두점 = 제주시 탑동 방파제 동쪽 수협공판장 입구&lt;br /&gt;- 넉넉한 양과 저렴한 가격의 고등어 요리를 맛보실 수 있는 곳.&lt;br /&gt;- 메뉴: 고등어조림(대: 12,000원, 소: 7,000원), 고등어회(13,000원), 갈치회(20,000원)..&lt;br /&gt;&lt;br /&gt;* 성복식당: (☎ 064-757-2481)&lt;br /&gt;- 위치: 제주시 서부두 방파제 갈치횟집촌에 위치&lt;br /&gt;- 갈치회와 함께 전통의 고등어조림 맛집으로 잘 알려져 있음.&lt;br /&gt;- 메뉴: 갈치회(25,000원), 고등어조림(大: 15,000원, 小: 10,000원)..&lt;br /&gt;&lt;br /&gt;* 테우: (☎ 064-742-6668)&lt;br /&gt;- 위치: 제주시 외도동 = 공항에서 서쪽으로 10분거리 (셔틀버스 운행)&lt;br /&gt;- 식탁이 부족할 듯 차려나오는 해선요리로 미식가들과 관광객들을 만족시키는 곳.&lt;br /&gt;- 일본 유명잡지인 &lt;BRIO&gt;의 제주도 특집에서 “대표해물요리집”으로 취재 보도.&lt;br /&gt;- 메뉴: 테우 해선요리(활어회+14~17가지 다양한 해물요리 제공): 1인 30,000원 부터.&lt;br /&gt;회덮밥, 해물뚝배기, 전복죽, 해물전골(모두 10,000원), 옥돔구이정식(15,000원)..&lt;br /&gt;- 파격메뉴: 행복 사시미정식: 1인당 15,000원, 만족 사시미정식: 1인당 20,000원,,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt; 향토음식 전문점 &gt;&lt;br /&gt;&lt;br /&gt;* 제주 갈치와 고등어: (☎ 064-749-1212)&lt;br /&gt;- 위치: 신제주 ‘그랜드호텔’ 옆 맥심호텔 뒤 골목 = 공항 5분거리&lt;br /&gt;- 제주가 아니면 맛보기 힘든 갈치와 고등어를 주메뉴로 신선함을 느낄수있는&lt;br /&gt;&lt;br /&gt;*향토음식점.&lt;br /&gt;- KBS TV &lt;여기는 TV정보센터’ 방영&gt;, &lt;스포츠 서울&gt; - 제주에 가장 맛있는 곳 수록.&lt;br /&gt;- 메뉴: 갈치조림(25,000원), 고등어조림(15,000원), 갈치구이(20,000원), 고등어구이(10,000원), 갈치회, 고등어회(20,000원), 각종 향토음식..&lt;br /&gt;&lt;br /&gt;* 해요(海凹): (☎ 064-747-0052)&lt;br /&gt;- 위치: 신제주 크라운호텔 뒤편 = 공항에서 3분거리.&lt;br /&gt;- 해물찜, 해물탕 요리 전문점.&lt;br /&gt;- 제주일보 선정 맛집, 제주시지정 모범 음식점.&lt;br /&gt;- 메뉴: 해요 해물찜, 해요 해물탕&lt;br /&gt;&lt;br /&gt;* 거부한정식: (☎ 064-744-4116)&lt;br /&gt;- 위치: 신제주 그랜드호텔 맞은 편 = 공항에서 8분~10분거리.&lt;br /&gt;- 외식업계의 일대혁명! 정갈하고 깔끔한 맛에 감탄하게 되는 한정식전문점.&lt;br /&gt;- 상다리가 휘어지도록 차려내는 갖가지 음식에 이렇게해도 남는가 하는 의구심이들 정도.&lt;br /&gt;- 메뉴: 제주통돼지, 한우육회, 제주산돔두이, 한치회, 섬진강재첩 된장찌개, 즉석 무쇠솥, 모듬쌈, 전라도 영암댁의 손맛 10가지 반찬, 가마솥 누룽지, 꽃게장, 홍어회, 사라다, 식혜, 등 13가지를&lt;br /&gt;&lt;br /&gt;* 보건식당: (☎ 064-753-9521)&lt;br /&gt;- 위치: 제주시청 앞&lt;br /&gt;- 해녀가 직접 따온 오분작으로 뚝배기를 만드는 제주 향토음식 전문점.&lt;br /&gt;- 메뉴: 오분작구이(30,000원), 해물전골(20,000원), 뚝배기(9,000원), 물회(5,000원),,&lt;br /&gt;&lt;br /&gt;* 유리네 식당: (☎ 064-748-0890)&lt;br /&gt;- 위치: 연동 신시가지 KCTV 옆 = 공항 5분거리.&lt;br /&gt;- 신제주의 토속음식 전문점.&lt;br /&gt;- 메뉴: 갈치구이(15,000원), 고등어구이(9,000원), 옥돔미역국(7,000원), 자리물회(6,000원), 갈치국(7,000원), 성게국(7,000원), 한치물회(6,000원), 몸국(5,000원)..&lt;br /&gt;&lt;br /&gt;* 도라지 식당: (☎ 064-722-3142)&lt;br /&gt;- 위치: 제주시 광양사거리 제주시청 정문 앞 골목 = 열린정보센터 건물 바로 뒤에 위치&lt;br /&gt;- 23년째 제주도 토속 향토음식만 취급하는 제주 전문 향토음식점.&lt;br /&gt;- 메뉴: 갈치호박국(6,000원), 옥돔미역국(6,000원), 갈치구이(15,000원), 각종 물회..&lt;br /&gt;&lt;br /&gt;* 어장군: (☎ 064-744-2258)&lt;br /&gt;- 위치: 신제주 건설회관 뒤쪽 = 공항에서 차로 5분거리&lt;br /&gt;- 푸짐한 갈치살에 매콤한 국물이 감칠맛인 곳.&lt;br /&gt;- 메뉴: 갈치조림, 갈치구이(15,000원), 보말국(5,000원), 우뭇가사리 냉국, 돔베고기..&lt;br /&gt;&lt;br /&gt;* 장춘식당: (☎ 064-742-8556)&lt;br /&gt;- 위치: 신제주 KBS 뒤쪽.&lt;br /&gt;- 비릿한 맛이 전혀 나지 않고 시원한 갈칫국과 성게국을 맛보실 수 있는 곳.&lt;br /&gt;- 메뉴: 갈칫국(5,000원), 성게국(7,000원), 오분재기구이, 소라볶음, 옥돔구이, 갈치구이..&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;지역별 향토음식점&gt;&lt;br /&gt;&lt;br /&gt;용이식당 | 서귀포 | (064) 732-7892 |두루치기&lt;br /&gt;&lt;br /&gt;신대림식당 | 제주시 | (064) 748-8114 | 갈치렇掃고등어조림, 한치렝美?물회&lt;br /&gt;&lt;br /&gt;우리집식당 | 제주시 | (064) 712-3104 | 일반 정식, 된장찌개&lt;br /&gt;&lt;br /&gt;수용횟집 | 한림 | (064) 796-8049 | 해물뚝배기, 옥돔구이&lt;br /&gt;&lt;br /&gt;물허벅식당 | 성산 | (064) 787-7087 | 흑돼지불고기, 옥돔 정식&lt;br /&gt;&lt;br /&gt;시흥해녀의 집 | 성산 | (064) 782-9230 | 조개죽, 전복죽, 전복회&lt;br /&gt;&lt;br /&gt;백록회관 | 성산 | (064) 782-8001 | 활어회, 해물탕, 매운탕, 물회&lt;br /&gt;&lt;br /&gt;제주어촌 | 함덕 | (064) 782-8090 | 갈치회, 고등어구이&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&quot;흑돼지 맛을 알게되다&quot;&lt;br /&gt;&lt;쉬는팡&gt;&lt;br /&gt;064-738-5833 | 09:00~21:00 | 주차가능 | 흑돼지 8천원, 동치미 국수4천원&lt;br /&gt;중문 입구에서 대유랜드로 들어가는 길 50m 지점&lt;br /&gt;&lt;br /&gt;&quot;생선 조림의 깊은맛을 가진&quot;&lt;br /&gt;&lt;신대림&gt;&lt;br /&gt;이곳의 조림 종류는 전부 그맛이 일품이다. 푸짐하게는 고등어 조림이 푸짐하고 맛있으며,&lt;br /&gt;갈치조림은 비린내가 잘 제거되 갈치의 고소함이 그대로 살아 있었다.&lt;br /&gt;제주도 현지인들에게는 멜(멸치)조림으로도 유명하며 실제로 멜(멸치)조림도 한번 맛 보았는데, 그 맛에 빠져 들고 말았다.&lt;br /&gt;(064) 748 - 8114 | 09:00~22:00 | 주차가능 | 고등어조림 1만5천원, 해물뚝배기 9천원, 멜조림 1만원&lt;br /&gt;제주시 노형로터리 현대해상 또는 시티콘(구 현대텔콘)뒤로 20m&lt;br /&gt;&lt;br /&gt;&quot;원두막 동태찌개&quot;라고 이 근방에서는 이미 맛집으로 소문난 집입니다.&lt;br /&gt;전화번호:064-747-2200&lt;br /&gt;(이마트근처, 근린공원과 노형공원 중간지점)&lt;br /&gt;&lt;br /&gt;제주도 갈때마다 가는 곳인데 하귀해안도로에가면 &lt;찜마을&gt;이라고 있는데&lt;br /&gt;주인아저씨 아줌마도 되게 친절하시구 음식두 정말 맛잇습니다.&lt;br /&gt;해물찜,갈치조림,옥돔,오분작뚝배기 정말맛있어요~&lt;br /&gt;바다도 한눈에 보이고 한적한곳에 북적이지 않구 정말 좋아요. 후회 안하실꺼예요~^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;요기 추천이 많네...가보구 싶엉~ㅋㅋ&lt;br /&gt;***&lt;쌍둥이 횟집&gt;***&lt;br /&gt;인터넷에서 열심히 찾아보고 우린 서귀포 매일시장으로 갔다.&lt;br /&gt;사람은 엄청나게 많았고,1,2층에 홀도 훨씬 넓어져서 번호표뽑고 조금 기다리니 차례가 되었다.&lt;br /&gt;회를 시킬때는 비싼거 시키지 말고 대충 싼걸로 주문하는편이 좋다.&lt;br /&gt;6만~7만원짜리 광어나 돔시키면 4명이서 충분히 먹는다.&lt;br /&gt;모든게 똑같고(심지어 음식들이 담겨있는 그릇들까지 다 표준화가 되어있다)&lt;br /&gt;마지막에 나오는 회접시에 담긴 회만 달라지는 거니깐...&lt;br /&gt;&lt;br /&gt;서귀포에&lt;br /&gt;***&lt;진주식당&gt;***&lt;br /&gt;전복뚝배기가 그렇게 맛있다고...&lt;br /&gt;이번에 제주시에도 분점이 하나 생겼다고 하더라구요. 그래서 한 번 가봤는데.. 와... 정말 맛있어서..&lt;br /&gt;저도 다른분들한테 추천해드리려구요.&lt;br /&gt;제주시 연동 KCTV 근처에 위치하고 있구요..&lt;br /&gt;커다란 간판이 있고..&lt;br /&gt;건물도 4층으로 대규모라서 쉽게 눈에 띕니다. 그래서 찾는데 별 어려움 없으실 겁니다~&lt;br /&gt;공항에서 직접 전화주시면.. PICK UP도 해간다고.. 그러네요.&lt;br /&gt;연락처는 (064-747-5157)입니다.&lt;br /&gt;1인분 만원..뚝배기 하나에 전복 3개..ㅋㅋ&lt;br /&gt;제 양심을 걸고 추천합니다~~!!&lt;br /&gt;여행오시거나.. 제주에 사시는 분들도.. 꼭 한 번 가보세요...맛이 최고에요!&lt;br /&gt;&lt;br /&gt;[출처] 제주도 맛집|작성자 보동이</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/8800869402921091596/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/8800869402921091596' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/8800869402921091596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/8800869402921091596'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/08/hwanycom.html' title='hwanycom님의 블로그 :: 네이버 블로그'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-4811211034732971492</id><published>2008-08-02T07:11:00.000-07:00</published><updated>2008-08-02T07:11:07.659-07:00</updated><title type='text'>마당넓은집 실시간 예약 1/3단계 - [인원/박수 선택]</title><content type='html'>&lt;a href=&quot;http://www.huepension.com/engage/engage1.asp?Pen_Code=kkd086&amp;amp;Start_Date=2008-08-01&amp;amp;select_Date=2008-08-22&amp;amp;room_code=kkd08601&amp;amp;ref_id=leegaree&amp;amp;pen_name=%B8%B6%B4%E7%B3%D0%C0%BA%C1%FD&quot;&gt;마당넓은집 실시간 예약 1/3단계 - [인원/박수 선택]&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/4811211034732971492/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/4811211034732971492' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4811211034732971492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/4811211034732971492'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/08/13.html' title='마당넓은집 실시간 예약 1/3단계 - [인원/박수 선택]'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-6705975032834703983</id><published>2008-07-22T22:57:00.001-07:00</published><updated>2008-07-22T23:28:08.589-07:00</updated><title type='text'>엑셀 함수리스트</title><content type='html'>http://www.relief.jp/itnote/archives/cat_108.php&lt;br /&gt;http://pasmaodani.hp.infoseek.co.jp/&lt;br /&gt;&lt;br /&gt;財務 日付/時刻 数学/三角 統計 検索/行列 データ&lt;br /&gt;ベース 文字列操作 論理 情報 その他 &lt;br /&gt;ＳＬＮ&lt;br /&gt;減価償却費（定額法） &lt;br /&gt;TODAY&lt;br /&gt;今日の日付 &lt;br /&gt;SUM&lt;br /&gt;　合計 &lt;br /&gt;AVERAGE&lt;br /&gt;　平均値 &lt;br /&gt;VLOOKUP&lt;br /&gt;列方向のデータ検索 &lt;br /&gt;ＤＳＵＭ&lt;br /&gt;条件付合計 &lt;br /&gt;CONCATENATE&lt;br /&gt;文字列結合 &lt;br /&gt;TRUE&lt;br /&gt;　正しい &lt;br /&gt;PHONETIC&lt;br /&gt;　ふりがな &lt;br /&gt;ＤＢ&lt;br /&gt;減価償却費（定率法） &lt;br /&gt;NOW&lt;br /&gt;現在の日時 &lt;br /&gt;ROUND&lt;br /&gt;　四捨五入 &lt;br /&gt;COUNT&lt;br /&gt;　数値の数 &lt;br /&gt;HLOOKUP&lt;br /&gt;行方向のデータ検索 &lt;br /&gt;DAVERAGE&lt;br /&gt;条件付平均 &lt;br /&gt;TEXT&lt;br /&gt;数値の書式設定文字列化 &lt;br /&gt;FALSE&lt;br /&gt;　正しくない &lt;br /&gt;ISBLANK&lt;br /&gt;セルが空白かどうか &lt;br /&gt;SYD&lt;br /&gt;減価償却費（級数法） &lt;br /&gt;DATE&lt;br /&gt;日付の作成 &lt;br /&gt;ROUNDUP&lt;br /&gt;　切り上げ &lt;br /&gt;MAX&lt;br /&gt;　最大値 &lt;br /&gt;LOOKUP1&lt;br /&gt;ベクトル方式のデータ検索 &lt;br /&gt;DMAX&lt;br /&gt;条件付最大値 &lt;br /&gt;SEARCH&lt;br /&gt;文字列の検索 &lt;br /&gt;ＩＦ&lt;br /&gt;　条件分岐 &lt;br /&gt;ISNUMBER&lt;br /&gt;セルの値が数値かどうか &lt;br /&gt;DDB&lt;br /&gt;減価償却費（倍率逓減法） &lt;br /&gt;YEAR&lt;br /&gt;年を表示 &lt;br /&gt;ROUNDDOWN&lt;br /&gt;　切り捨て &lt;br /&gt;MIN&lt;br /&gt;　最小値 &lt;br /&gt;LOOKUP2&lt;br /&gt;配列方式のデータ検索&lt;br /&gt;DMIN&lt;br /&gt;条件付最小値 &lt;br /&gt;MID&lt;br /&gt;指定した文字を取り出す &lt;br /&gt;ＡＮＤ&lt;br /&gt;すべてが正しいかの判定 &lt;br /&gt;ISTEXT&lt;br /&gt;セルの値が文字列かどうか &lt;br /&gt;VDB&lt;br /&gt;減価償却費（定率法による特定期間分計算） &lt;br /&gt;MONTH&lt;br /&gt;月を表示 &lt;br /&gt;INT&lt;br /&gt;数値を整数に切り捨て &lt;br /&gt;AVERAGEA&lt;br /&gt;文字・論理値を含む平均値 &lt;br /&gt;INDEX1&lt;br /&gt;配列形式での値の検索 &lt;br /&gt;DCOUNT&lt;br /&gt;条件付数値の数 &lt;br /&gt;REPLACE&lt;br /&gt;指定した位置の文字列の置き換え &lt;br /&gt;ＯＲ&lt;br /&gt;一つでも正しいかの判定 &lt;br /&gt;ISNONTEXT&lt;br /&gt;セルの値が文字列でないかどうか&lt;br /&gt;PMT&lt;br /&gt;ローンの元利均等返済方式返済額 &lt;br /&gt;DAY&lt;br /&gt;日を表示 &lt;br /&gt;MOD&lt;br /&gt;割り算の余りを求める &lt;br /&gt;COUNTA&lt;br /&gt;数値・文字･論理値が入力されたセルの数 &lt;br /&gt;INDEX2&lt;br /&gt;セル範囲形式のセルの参照 &lt;br /&gt;DGET&lt;br /&gt;条件付値の抽出 &lt;br /&gt;SUBSTITUTE&lt;br /&gt;指定した文字列の置き換え &lt;br /&gt;IPMT&lt;br /&gt;ローンの元利金等返済方式利息額 &lt;br /&gt;TIME&lt;br /&gt;時刻に対する少数を計算 &lt;br /&gt;SUMIF&lt;br /&gt;条件付合計 &lt;br /&gt;COUNTIF&lt;br /&gt;条件に合うセルの数 &lt;br /&gt;MATCH&lt;br /&gt;範囲内での位置の値&lt;br /&gt;ASC&lt;br /&gt;全角文字を半角文字に変換する &lt;br /&gt;PPMT&lt;br /&gt;ローンの元利金等返済方式元金額 &lt;br /&gt;HOUR&lt;br /&gt;時を整数で表示 &lt;br /&gt;PRODUCT&lt;br /&gt;掛け算 &lt;br /&gt;COUNTBLANK&lt;br /&gt;空白のセルの数 &lt;br /&gt;CHOOSE&lt;br /&gt;リストから値を取り出す &lt;br /&gt;JIS&lt;br /&gt;半角文字を全角文字に変換する &lt;br /&gt;PV&lt;br /&gt;借入金の計算 &lt;br /&gt;MINUTE&lt;br /&gt;分を整数で表示 &lt;br /&gt;SUMPRODUCT&lt;br /&gt;掛け算後合計 &lt;br /&gt;MAXA&lt;br /&gt;論理値を含む最大値 &lt;br /&gt;LEFT&lt;br /&gt;文字列の左から指定文字数だけ取り出す &lt;br /&gt;NPER&lt;br /&gt;借入金の返済期間 &lt;br /&gt;SECOND&lt;br /&gt;分を整数で表示 &lt;br /&gt;MINA&lt;br /&gt;論理値を含む最小値 &lt;br /&gt;RIGHT&lt;br /&gt;文字列の右から指定文字数だけ取り出す &lt;br /&gt;RATE&lt;br /&gt;利率の計算 &lt;br /&gt;REPT&lt;br /&gt;指定した回数だけ文字を繰返して表示します &lt;br /&gt;FV&lt;br /&gt;積立満期額 &lt;br /&gt;TRIM&lt;br /&gt;不要なスペースの削除&lt;br /&gt;&lt;br /&gt;EXACT&lt;br /&gt;文字列の比較</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/6705975032834703983/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/6705975032834703983' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/6705975032834703983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/6705975032834703983'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/07/blog-post_22.html' title='엑셀 함수리스트'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-5742410525251165271</id><published>2008-07-03T23:54:00.000-07:00</published><updated>2008-07-03T23:55:19.627-07:00</updated><title type='text'>同時接続数の制限</title><content type='html'>同時接続数の制限を変更または削除してWindows XPで&lt;br /&gt;方法1 ：&lt;br /&gt;&lt;br /&gt;は、次のプログラムを使用することができます：&lt;br /&gt;&lt;br /&gt;XP SP2のソフトウェアパッチをダウンロードして&lt;br /&gt;&lt;br /&gt;    * Tcpip.sysで編集を手動で削除してTCP / IPソケットの作成を制限 &lt;br /&gt;&lt;br /&gt;方法2 ：&lt;br /&gt;&lt;br /&gt;別の方法を使用することができますTcpip.sysでファイルを変更するには、手動で作成します。 これらの手順を参照しての最後のリリースのXP SP2では、ファイルの正確性をTcpip.sysで359040バイトのCRC - 32は8042a9fb 、およびMD5は9f4b36614a0fc234525ba224957de55cです。&lt;br /&gt;&lt;br /&gt;これは可能性があるために複数のTcpip.sysでのファイルをお使いのシステムは、動作を確認して、 1つではC ： \ Windows \ System32を\ドライブ\ディレクトリにコピーします。&lt;br /&gt;&lt;br /&gt;Tcpip.sysで制限を削除するにソケットを作成して元のTcpip.sysでファイルをバックアップし、編集を開始する前に、これは非常に重要です。&lt;br /&gt;&lt;br /&gt;は、 16進数のエディタには、 16進数のオフセット4f322 （または324386 10進数）です。 入力し、変更0 00 00 00から00 00 0 00 。</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/5742410525251165271/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/5742410525251165271' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5742410525251165271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5742410525251165271'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/07/blog-post_03.html' title='同時接続数の制限'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-366464411863802441.post-5898794422369955177</id><published>2008-07-02T17:44:00.000-07:00</published><updated>2008-07-02T17:45:03.772-07:00</updated><title type='text'>엄청 놀라운 사실을 방금 발굔해따..</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;케로로중사에게 이런뜻이 있다니..ㅋㅋㅋ</content><link rel='replies' type='application/atom+xml' href='http://miiinz.blogspot.com/feeds/5898794422369955177/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/366464411863802441/5898794422369955177' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5898794422369955177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/366464411863802441/posts/default/5898794422369955177'/><link rel='alternate' type='text/html' href='http://miiinz.blogspot.com/2008/07/blog-post.html' title='엄청 놀라운 사실을 방금 발굔해따..'/><author><name>있는 닉네임</name><uri>http://www.blogger.com/profile/16952454573695278588</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3sAQH2BfHEM2qb-cchPhAiW347WnIznXDcg8FqHf6-SL6J1ireBHRd0HizIm5Gq3uBUDIEIHknmV3bVVMwwZPTTX5ujqcp12SoHKwiCKF0haaJrbqmJlmVeS9LMJ05w/s220/photo_2019-01-31_19-41-30.jpg'/></author><thr:total>0</thr:total></entry></feed>