<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8932885459937243034</id><updated>2011-07-08T14:20:43.855-04:00</updated><title type='text'>Thinking Crap</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-1652482639512622534</id><published>2010-01-16T20:14:00.005-05:00</published><updated>2010-01-16T22:09:36.950-05:00</updated><title type='text'>Writing a Bootloader</title><content type='html'>Okay, I was reading my various news feeds and saw one with a contest to write a bootloader; details &lt;a href="http://forum.osdev.org/viewtopic.php?f=2&amp;p=170511#p170511"&gt;here&lt;/a&gt;. It's been one of those things on my list of things to do for my own edification, but never got around to it. Nothing like a deadline to focus the mind. So here goes.&lt;br /&gt;&lt;br /&gt;First things first. How does a typical PC "boot-up"? From button press to the initial logon screen? This I learned as part of my studies and reading, but in a pretty general way and no hands-on experience. For a good description, see "Understanding the Linux Kernel", by Daniel Bovet and Marco Cesati; specifically Appendix A: System Startup. This along with Google and the linux man pages for the various tools used were my main resources.&lt;br /&gt;&lt;br /&gt;The first step was to create a "Hello, world!" boot sector program on my USB thumb drive, which would be my testing ground. I typed into Google "hello world bootloader" and used the first hit: &lt;a href="http://www.osdever.net/tutorials/hello_btldr.php?the_id=85"&gt;http://www.osdever.net/tutorials/hello_btldr.php?the_id=85&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I already had nasm installed on my Fedora Linux box as well as dd, which was required. I followed the directions, rebooted, changed the boot order in the BIOS, and was greated with my "Hello World" text on the monitor! Great!&lt;br /&gt;&lt;br /&gt;Oh, but the contest states that the boot loader is to reside in the FAT12 boot record of the FAT12 filesystem. This caused much head scratching, googling, and reading. My working with the USB thumb drive complicates things a little. It's 4GiB and so can't be formatted as a whole for FAT12, since it has a upper limit 32MiB. This meant I had to create a FAT12 partition, which will have the bootloader.&lt;br /&gt;&lt;br /&gt;First off, the size of the bootloader needs to change. It originally took up the entire 512 bytes of the sector, but now must reside in the 450 bytes of the filesystem's boot record; the correct terminology is Volume Boot Record. You may be asking where I got 450 bytes from, since the FAt12 spec shows there being only 448 bytes available for code. It's because the code includes setting the 0xAA55 bootable partition signature.&lt;br /&gt;&lt;br /&gt;Changing the output file binary size was as easy as changing the next to last source line from:&lt;br /&gt;times 510-($-$$) db 0&lt;br /&gt;to:&lt;br /&gt;times 448-($-$$) db 0&lt;br /&gt;&lt;br /&gt;Next step to figure out is how to shoehorn my binary into the correct location on the partition. To figure this out I did the following:&lt;br /&gt;1. Use fdisk to create a bootable primary FAT12 partition: fdisk /dev/sdd&lt;br /&gt;2. Format the partition using mkdosfs: mkdosfs -c -F 12 -v /dev/sdd1&lt;br /&gt;3. Copy binary to correct location using dd: dd if=./bootloader bs=1 count=450 seek=31806 of=/dev/sdd&lt;br /&gt;&lt;br /&gt;That's it! Okay, so your asking where did the magic numbers come from for the arguments to dd. I'll start with bs=1. This tells the tool that we want it to read and write in 1 byte blocks. I needed to do this due to the level of precision needed. The next argument, count=450, is obvious. I need to write 450 bytes, which is the bootloader's entirety. The final, critical argument is seek=31806. This is the number of bytes from the start of the disk where the binary file should start to be written. Basically a byte-offset. &lt;br /&gt;&lt;br /&gt;This number I got by going back and reading the partition record for the first partition in the MBR's partition table. In particular, the ninth byte (offset 0x8 in the 16 byte record) gives the LBA for the start of the partition; see &lt;a href="http://en.wikipedia.org/wiki/Master_boot_record"&gt;here&lt;/a&gt; for a description of the MBR and partition record layout. In my case, it was 0x3e. Since each block is 512 bytes, the first sector must be at 0x3e * 512 = 31744. To these we need to offset into the sector by 62 bytes, which is where the boot code starts according to the FAT spec &lt;a href="http://wiki.osdev.org/FAT12"&gt;here&lt;/a&gt;. Adding 62 to the previous number yields our argument value of 31806.&lt;br /&gt;&lt;br /&gt;All of this was just to prepare to write the actual bootloader, but was necessary to know that my code was being called. This was my first attempt, so please excuse any "long way arounds" as I'm sure there probably is an easier way. Now on to solving the original contest problem...&lt;br /&gt;&lt;br /&gt;PS - I read in the MBR using dd as follows: dd if=/dev/sdd of=./mbr.img bs=512 count=1&lt;br /&gt;I then used objdump to disassemble it so it would be easier on my eyes with the following command: objdump -D -b binary -mi386 -Maddr16,data16 mbr.img &gt; mbr_objdump.txt&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-1652482639512622534?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/1652482639512622534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=1652482639512622534' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/1652482639512622534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/1652482639512622534'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2010/01/writing-bootloader.html' title='Writing a Bootloader'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-1443030540965642827</id><published>2008-09-03T09:14:00.003-04:00</published><updated>2008-09-03T09:48:19.970-04:00</updated><title type='text'>Chrome == Competition?</title><content type='html'>I&amp;rsquo;m not sure why, but all of the news I&amp;rsquo;ve been reading about Chrome hail it for making the browser marketplace more competitive. I fail to see how this is so. Google garners what must be the largest share of the search engine market, have an email client that also must capture a sizable chunk of the market, and will own key portions of the internet&amp;rsquo;s infrastructure (&lt;a href="http://www.theregister.co.uk/2008/08/28/google_undersea_cable_two/"&gt;http://www.theregister.co.uk/2008/08/28/google_undersea_cable_two/&lt;/a&gt;). The addition of their own web browser only increases their share of the tools used by consumers to access the internet. What would make their share complete would be a Google operating system. Oh yeah, they've come out with that as well: &lt;a href="http://www.thinkgos.com/"&gt;http://www.thinkgos.com/&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;They now have software available for every piece needed to access the internet. This only increases the possibility of a person&amp;rsquo;s internet access being fully enabled by Google. Sure, each of these pieces may spark innovation in each of the domains they serve, but taken as a whole it looks like the giant that only had a head is now gaining the rest of its body.&lt;br /&gt;&lt;br /&gt;This is just a quick post that I had to get out of my head. Partly to get my thoughts in a tangible form and partly to put them under a public lense; that&amp;rsquo;s assuming someone other than myself looks at this post;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-1443030540965642827?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/1443030540965642827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=1443030540965642827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/1443030540965642827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/1443030540965642827'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2008/09/chrome-competition.html' title='Chrome == Competition?'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-5653868941946917118</id><published>2008-06-27T09:57:00.003-04:00</published><updated>2008-06-27T10:25:26.698-04:00</updated><title type='text'>Varying VARIANT_BOOLs</title><content type='html'>Say you have an interface declared as follows in IDL:&lt;br /&gt;&lt;p&gt;&lt;code&gt;[propset, id(1)]&lt;br /&gt;HRESULT EnableContextMenu([in] VARIANT_BOOL vbEnable);&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Which of the following is a valid test for true (in C/C++) that might not work in practice?&lt;/ br&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;code&gt;if (vbEnable) { ... }&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;if (vbEnable != VARIANT_FALSE) { ... }&lt;/code&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;code&gt;if (vbEnable == VARIANT_TRUE) { ... }&lt;/code&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Yup, number 3. It is error prone. The problem arises when developers pass in a non-zero value to this property in order to set it to &amp;ldquo;true&amp;rdquo;. As it turns out, the VB runtime does exactly this and I got bit by it. Specifically, VARIANT_TRUE is defined as -1.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So avoid using the logical expression in example three and use bool (C++ type, replace with your language&amp;rsquo;s equivalent) internally instead of VARIANT_BOOL. It&amp;rsquo;ll save you a ton of grief.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-5653868941946917118?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/5653868941946917118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=5653868941946917118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/5653868941946917118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/5653868941946917118'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2008/06/varying-variantbools.html' title='Varying VARIANT_BOOLs'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-3034743778629836827</id><published>2007-11-10T20:39:00.000-05:00</published><updated>2007-11-14T13:05:44.605-05:00</updated><title type='text'>Double Reed Cane Sources</title><content type='html'>&lt;span&gt;&lt;style&gt;td{vertical-align:top;} div.list{margin:0 2em;} p.biz{text-align:center;vertical-align:center;color:black;background-color:grey;margin:0 0.75 0.5em 0;padding:0;line-height:1em;line-height:1.5em;font-size:1em;font-weight:700;} p.info_head{text-decoration:underline;margin:0.75em 0 0.5em 2em;} p.info{font-size:1em;line-height:1.25em;margin:0 0 0 2.5em;padding:0;}&lt;/style&gt;&lt;p&gt;I’m just getting back into reed making after a hiatus of 6 years or so. Luckily I had some cane in various stages of development in storage including some blanks that just needed the tip cut and the lay scraped to a finish. This supply is running out, though, and it’s time I order some more cane. I’ve dug up a list of sources I had and am putting it here as a starting point for a more accurate and current list. I’m sure a bunch are no longer at the same address or even in business. If you—yeah you, the reader—see any that you recognize, please leave a note regarding its status. I’m going to do my best to update and expand it as I go.&lt;br /&gt;&lt;/p&gt;&lt;div class="list"&gt;&lt;p class="biz"&gt;Arundo Reeds and Cane&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;18082 NW Dixie Mountain Road&lt;br /&gt;North Plains, Oregon 97133&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.arundoreeds.com&gt;http://www.arundoreeds.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Bonazza Musical Accessories&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;Via delle Cese Longhe, 16&lt;br /&gt;38060 Mattarello (Tn) ITALY&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.bonazza.com&gt;http://www.bonazza.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Custom Cane&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;Bill and Sandy Woodward&lt;br /&gt;12 Nottingham Drive&lt;br /&gt;Greensburg, PA 15601&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Phone:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;(724) 834-6748&lt;br /&gt;(724) 834-4451 [fax]&lt;br /&gt;&lt;/p&gt;&lt;p class="info_head"&gt;Email:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;woodward at westol dot com&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Edmund Nielsen Woodwinds&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;61 East Park Blvd.&lt;br /&gt;Villa Park, IL 60181&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.nielsen-woodwinds.com&gt;http://www.nielsen-woodwinds.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Forrests Music&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;1849 University Ave.&lt;br /&gt;Berkeley, CA 94703&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.forrestsmusic.com&gt;http://www.forrestsmusic.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Georg Rieger GmbH&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;Draisstraße 2&lt;br /&gt;D-76571 Gaggenau&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.georgrieger.com&gt;http://www.georgrieger.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Golden Bamboo Services&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address (orig):&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;1836 Shryer Ave. W.&lt;br /&gt;Roseville, MN 55113&lt;br /&gt;&lt;/p&gt;&lt;p class="info_head"&gt;Address (?):&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;3102 Maple Leaf Ct&lt;br /&gt;St Paul, MN 55109&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Phone:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;(612) 639-9190&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Ovidio Danzi / Miller Marketing&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;Miller Marketing&lt;br /&gt;PO Box 822&lt;br /&gt;Wayne, PA 19087&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.millermarketingco.com&gt;http://www.millermarketingco.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;RDG Woodwinds Inc.&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;589 Larchmont&lt;br /&gt;2nd Floor&lt;br /&gt;Los Angeles, CA 90004&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Website:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;&lt;a href=http://www.rdgwoodwinds.com/&gt;http://www.rdgwoodwinds.com&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;p class="biz"&gt;Sonoma Reed Co.&lt;br /&gt;&lt;/p&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;p class="info_head"&gt;Address:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;PO Box 41&lt;br /&gt;Corte Madera, CA 94976&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p class="info_head"&gt;Phone:&lt;br /&gt;&lt;/p&gt;&lt;p class="info"&gt;(415) 924-3845 [fax]&lt;br /&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-3034743778629836827?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/3034743778629836827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=3034743778629836827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/3034743778629836827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/3034743778629836827'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2007/11/double-reed-cane-sources.html' title='Double Reed Cane Sources'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-6951256467195981016</id><published>2007-11-10T14:12:00.002-05:00</published><updated>2008-06-14T09:10:06.484-04:00</updated><title type='text'>“What was the part in the middle?”</title><content type='html'>&lt;p&gt;After having crouched over a keyboard, jabbed its little matrix of buttons, and produced a sizeable bit of code in the span of not a few months, I found myself in a fortunately brief “Oh, s___!” situation. The fortune is due to ArcGIS, which has a phenomenal website that explains COM in a way that should shame COM’s creator. Yes, the situation involves COM and its support in various languages; a Venn diagram of this would constitute a modern work of abstract art.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;To be continued…&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Okay, well this isn&amp;rsquo;t quite a continuation. I just wanted to give a link to the web page published by ESRI (the maker of ArcGIS) that was so helpful to me. It&amp;rsquo;s short and to the point. Of particular interest is the part near the bottom that talks about helper coclasses. These enable VB clients to sink to non-default outbound interfaces. Good stuff that. At any rate here is that &lt;a href="http://edndoc.esri.com/arcobjects/9.0/ExtendingArcObjects/Appendices/EditingIDL.htm"&gt;link&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-6951256467195981016?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/6951256467195981016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=6951256467195981016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/6951256467195981016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/6951256467195981016'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2007/11/was-part-in-middle.html' title='&amp;ldquo;What was the part in the middle?&amp;rdquo;'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8932885459937243034.post-898851753478063461</id><published>2007-11-09T23:47:00.000-05:00</published><updated>2007-11-10T00:14:04.886-05:00</updated><title type='text'>Incipient Post</title><content type='html'>&lt;span style="font-family:trebuchet ms;"&gt;&lt;br /&gt;&lt;style&gt;p{margin:0;padding:0;}p.blah{font-weight:500;background-color:grey;color:red;}p.holy_crap{font-variant:small-caps;font-weight:800;}&lt;/style&gt;&lt;br /&gt;&lt;p&gt;Sucks that my first post has to be a gripe, but there you have it. I have spent the better part of an hour trying to figure out a way to embed a style sheet. I don’t want a blog-wide change—as in altering the template—just something local to this post.&lt;/p&gt;&lt;br /&gt;&lt;p class="blah"&gt;Maybe this?&lt;/p&gt;&lt;br /&gt;&lt;p class="holy_crap"&gt;Ureka!!!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Yeah, I’m no web developer, so gimme a break;-)&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8932885459937243034-898851753478063461?l=thinkingcrap.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://thinkingcrap.blogspot.com/feeds/898851753478063461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8932885459937243034&amp;postID=898851753478063461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/898851753478063461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8932885459937243034/posts/default/898851753478063461'/><link rel='alternate' type='text/html' href='http://thinkingcrap.blogspot.com/2007/11/pmargin0padding0p.html' title='Incipient Post'/><author><name>Joe T.</name><uri>http://www.blogger.com/profile/15143873960968039537</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
