<?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-3416807</id><updated>2012-01-27T23:47:20.124-08:00</updated><category term='pixar'/><category term='gyphs'/><category term='dylan'/><category term='iphone'/><category term='shelties'/><category term='webkit'/><category term='opengl'/><category term='skia'/><category term='apple'/><category term='languages'/><category term='wwdc'/><category term='factor'/><category term='graphics'/><category term='lisp'/><category term='cairo'/><category term='hunspell'/><category term='opencflite'/><category term='whining'/><title type='text'>We Have The Construction!</title><subtitle type='html'>Rantings and Ravings about WebKit, Graphics, and functional programming.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default?start-index=101&amp;max-results=100'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>116</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3416807.post-3145406582937388024</id><published>2012-01-27T23:47:00.001-08:00</published><updated>2012-01-27T23:47:20.184-08:00</updated><title type='text'>Github Archive Now Available</title><content type='html'>&lt;p&gt;Based on popular request, I've published my full build tree for generating the WinCairoRequirements bundle needed to build the WinCairo port.&lt;/p&gt;&lt;p&gt;You can access it at &lt;a href="http://github.com/bfulgham/WinCairoRequirements"&gt;Github&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It contains build targets for:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;VS2005, which is needed for compatibility with the main WebKit development effort.&lt;/li&gt;&lt;li&gt;VS2008, which I used on my last shipping application, and&lt;/li&gt;&lt;li&gt;VS2010 for new development.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;While I was at it, I also published &lt;a href="http://github.com/bfulgham/CallJS"&gt;CallJS&lt;/a&gt;, an example application exercising theWebKit framework, and provides an example of doing things like communicating between a WinApi application and the WebKit and JavaScriptCore instances.&lt;/p&gt;&lt;p&gt;Hopefully, these resources will make it easier for people to get started using, and perhaps contributing, to WebKit.&lt;/p&gt;&lt;p&gt;If you do try them out, please drop me a line and let me know if you had any difficulties.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3145406582937388024?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3145406582937388024/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3145406582937388024' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3145406582937388024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3145406582937388024'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2012/01/github-archive-now-available.html' title='Github Archive Now Available'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-8329371271435453434</id><published>2011-10-08T19:30:00.001-07:00</published><updated>2011-10-08T19:44:56.363-07:00</updated><title type='text'>Tests Active</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s1600/IMG_1436.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s320/IMG_1436.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5661316357377097202" /&gt;&lt;/a&gt;&lt;br /&gt;Looking back over this blog, I see that it was around a year ago that I got the initial WinCairo buildbot running. I'm very pleased to announce that I have gotten ahold of a much more powerful machine, and am now able to run a full build and tests in slightly under an hour -- a huge improvement over the old hardware which took over two hours just to build the software! In fact, the image on the left shows the new build box, but unfortunately the flash on my iPhone wiped out the machine's label ("Webkit") on the rack faceplate.&lt;br /&gt;&lt;br /&gt;This is a big step, because we can now track regressions and gauge correctness compared to the other platforms. Up to now, testing has largely consisted of periodic manual runs of the test suite, and a separate set of high-level tests run as part of a larger application. This was not ideal, because it was easy for low-level functions in WebKit that I rarely use to be broken and missed.&lt;br /&gt;&lt;br /&gt;All is not perfect, of course.  Although over 12,000 tests now run (successfully) with each build, that is effectively two thirds of the full test suite. Most of the tests I have disabled are due to small differences in the output layout. I'm trying to understand why these differences exist, but I suspect many of them simply reflect small differences in Cairo compared to the CoreGraphics rendering layer.&lt;br /&gt;&lt;br /&gt;If any of you lurkers are interested in helping out, trying out some of the tests I have disabled and figuring out why they fail would be a &lt;strong&gt;huge&lt;/strong&gt; help!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8329371271435453434?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://build.webkit.org/builders/WinCairo%20Release' title='Tests Active'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8329371271435453434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8329371271435453434' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8329371271435453434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8329371271435453434'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/10/tests-active_08.html' title='Tests Active'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s72-c/IMG_1436.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8471691332548609663</id><published>2011-10-08T19:30:00.000-07:00</published><updated>2011-10-08T19:43:18.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Tests Active</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s1600/IMG_1436.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 239px;" src="http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s320/IMG_1436.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5661316357377097202" /&gt;&lt;/a&gt;&lt;br /&gt;Looking back over this blog, I see that it was around a year ago that I got the initial WinCairo buildbot running. I'm very pleased to announce that I have gotten ahold of a much more powerful machine, and am now able to run a full build and tests in slightly under an hour -- a huge improvement over the old hardware which took over two hours just to build the software!&lt;br /&gt;&lt;br /&gt;This is a big step, because we can now track regressions and gauge correctness compared to the other platforms. Up to now, testing has largely consisted of periodic manual runs of the test suite, and a separate set of high-level tests run as part of a larger application. This was not ideal, because it was easy for low-level functions in WebKit that I rarely use to be broken and missed.&lt;br /&gt;&lt;br /&gt;All is not perfect, of course.  Although over 12,000 tests now run (successfully) with each build, that is effectively two thirds of the full test suite. Most of the tests I have disabled are due to small differences in the output layout. I'm trying to understand why these differences exist, but I suspect many of them simply reflect small differences in Cairo compared to the CoreGraphics rendering layer.&lt;br /&gt;&lt;br /&gt;If any of you lurkers are interested in helping out, trying out some of the tests I have disabled and figuring out why they fail would be a &lt;strong&gt;huge&lt;/strong&gt; help!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8471691332548609663?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://build.webkit.org/builders/WinCairo%20Release' title='Tests Active'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8471691332548609663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8471691332548609663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8471691332548609663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8471691332548609663'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/10/tests-active.html' title='Tests Active'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8i-yTTfHO2A/TpEJO2qR_fI/AAAAAAAAAPw/3ks_GJf8XdQ/s72-c/IMG_1436.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8280703667438737865</id><published>2011-07-05T12:35:00.000-07:00</published><updated>2011-07-05T12:39:32.939-07:00</updated><title type='text'>WinCairoRequirements Sources Archive</title><content type='html'>I've &lt;a href="https://files.me.com/bfulgham/trnbu7"&gt;posted&lt;/a&gt; the 80 MB source archive of the requirements needed to build the WinCairo port of WebKit.&lt;br /&gt;&lt;br /&gt;Note that you do NOT need these sources unless you plan on building them yourself or wish to archive the source code for these modules.  The binaries are always present in the &lt;a href="https://files.me.com/bfulgham/rtdib3"&gt;WinCairoRequirements.zip&lt;/a&gt; file, which is downloaded and unzipped to the proper place when you execute the &lt;code&gt;update-webkit --wincairo&lt;/code&gt; command.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8280703667438737865?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://files.me.com/bfulgham/trnbu7' title='WinCairoRequirements Sources Archive'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8280703667438737865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8280703667438737865' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8280703667438737865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8280703667438737865'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/07/wincairorequirements-sources-archive.html' title='WinCairoRequirements Sources Archive'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6943673389709379449</id><published>2011-06-27T21:27:00.000-07:00</published><updated>2011-07-09T21:24:00.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated WebKit SDK (@r89864)</title><content type='html'>I have updated the WebKitSDK to correspond to SVN revision r8984.&lt;br /&gt;&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* JavaScript engine improvements.&lt;br /&gt;* Rendering improvements.&lt;br /&gt;* New 'Transparent Web View' support.&lt;br /&gt;* General performance and memory use improvements.&lt;br /&gt;&lt;br /&gt;This ZIP file also contains updated versions of Zlib, OpenSSL, cURL, and OpenCFLite.&lt;br /&gt;&lt;br /&gt;Note that I have stopped statically linking Cairo; I'm starting to integrate some more recent Cairo updates (working towards some new rendering features), and wanted to be able to update it incrementally as changes are made.&lt;br /&gt;&lt;br /&gt;This package contains the same Cairo library (in DLL form) as used in previous versions.&lt;br /&gt;&lt;br /&gt;As usual, please let me know if you encounter any problems with this build.&lt;br /&gt;&lt;br /&gt;[Update] I forgot to include zlib1.dll!  Fixed in the revised zip file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6943673389709379449?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://files.me.com/bfulgham/0s4tlp' title='Updated WebKit SDK (@r89864)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6943673389709379449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6943673389709379449' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6943673389709379449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6943673389709379449'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/06/updated-webkit-sdk-r89864.html' title='Updated WebKit SDK (@r89864)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8524268917873727231</id><published>2011-04-29T23:54:00.000-07:00</published><updated>2011-07-14T11:34:23.677-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>An Unseasonable Snowfall</title><content type='html'>A year or two ago I ported the Cocoa "CallJS" application to MFC for use with WebKit.  The only feedback I ever got on the topic was a complaint that it would not build under the Visual Studio Express software many people used.&lt;br /&gt;&lt;br /&gt;After seeing another few requests on the &lt;a href="http://lists.webkit.org/mailman/listinfo/webkit-help"&gt;webkit-help&lt;/a&gt; mailing list for information on calling JavaScript from C++ (and vice-versa), I decided to dust off the old program and convert it to pure WINAPI calls so that VS Express would work with it.&lt;br /&gt;&lt;br /&gt;Since my beloved &lt;a href="http://whtconstruct.blogspot.com/2011/04/transparent-windows.html"&gt;Layered Window&lt;/a&gt; patches finally &lt;a href="http://trac.webkit.org/changeset/84990"&gt;landed&lt;/a&gt; in WebKit, I also incorporated a transparent WebKit view floating over the main application window. Because I suck at art, I &lt;strike&gt;stole&lt;/strike&gt; appropriated the &lt;a href="http://girliemac.com/blog/2009/02/18/using-keyframes-webkit-css-animation-examples/"&gt;Let It Snow&lt;/a&gt; animation example to give the transparent layer something to do.&lt;br /&gt;&lt;br /&gt;Want to see what it looks like?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-rYbvRZ3Uvc8/Tbuz1VlHPDI/AAAAAAAAAM4/m56VO-0lWvY/s1600/Screen%2Bshot%2B2011-04-29%2Bat%2B11.13.04%2BPM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 293px;" src="http://2.bp.blogspot.com/-rYbvRZ3Uvc8/Tbuz1VlHPDI/AAAAAAAAAM4/m56VO-0lWvY/s320/Screen%2Bshot%2B2011-04-29%2Bat%2B11.13.04%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5601268290472590386" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8524268917873727231?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://files.me.com/bfulgham/jup4kl' title='An Unseasonable Snowfall'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8524268917873727231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8524268917873727231' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8524268917873727231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8524268917873727231'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/04/unseasonable-snowfall.html' title='An Unseasonable Snowfall'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-rYbvRZ3Uvc8/Tbuz1VlHPDI/AAAAAAAAAM4/m56VO-0lWvY/s72-c/Screen%2Bshot%2B2011-04-29%2Bat%2B11.13.04%2BPM.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1653911145318485113</id><published>2011-04-18T17:13:00.001-07:00</published><updated>2011-04-18T17:32:11.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Transparent Windows</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-wt0rOj7w9UU/TazT1NNMmaI/AAAAAAAAAMw/d__2mbtRDJ0/s1600/Screen%2Bshot%2B2011-04-18%2Bat%2B5.12.07%2BPM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 306px; height: 320px;" src="http://3.bp.blogspot.com/-wt0rOj7w9UU/TazT1NNMmaI/AAAAAAAAAMw/d__2mbtRDJ0/s320/Screen%2Bshot%2B2011-04-18%2Bat%2B5.12.07%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5597081347946224034" /&gt;&lt;/a&gt;&lt;br /&gt;Recently I've been hard at work reviving some old code originally written by the &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator&lt;/a&gt; team.  I tried to improve on the initial design by building the feature into the WebKit library itself.  This reduces the need for clients of this functionality to have to figure out exactly how to construct their windows, and perform the layered window drawing logic.&lt;br /&gt;&lt;br /&gt;With this patch in place, you can create 'chromeless' WebKit windows that you can fill with whatever rendering content you like.  For example, you can tell WebKit to fill your entire desktop with a WebView that points at a copy of the awesome &lt;a href="http://localhost/~brent/www.satine.org/research/webkit/snowleopard/snowstack.html"&gt;Snowstack&lt;/a&gt; implementation.  Of course, to get a transparent view you have to be able to set the background color to something semi- (or fully) transparent.  Consequently, I had to mirror Snowstack on a server I had access to so I could adjust the background.  The screenshot shows the result of this effort.  &lt;br /&gt;&lt;br /&gt;I'm hoping to get the changes approved and landed soon, once I've created a decent example program that can be landed in the tree.&lt;br /&gt;&lt;br /&gt;Oh, by the way, this change works on the Apple version of WebKit as well!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1653911145318485113?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=58300' title='Transparent Windows'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1653911145318485113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1653911145318485113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1653911145318485113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1653911145318485113'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/04/transparent-windows.html' title='Transparent Windows'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-wt0rOj7w9UU/TazT1NNMmaI/AAAAAAAAAMw/d__2mbtRDJ0/s72-c/Screen%2Bshot%2B2011-04-18%2Bat%2B5.12.07%2BPM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2314055080562779255</id><published>2011-04-12T19:47:00.000-07:00</published><updated>2011-06-27T21:42:19.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Towards a Simpler WinCairo Build</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-7LvU2g9SngU/TaUY8UYTrgI/AAAAAAAAAMk/tpLCnB4QS_g/s1600/Screen%2Bshot%2B2011-04-12%2Bat%2B8.29.56%2BPM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 163px;" src="http://4.bp.blogspot.com/-7LvU2g9SngU/TaUY8UYTrgI/AAAAAAAAAMk/tpLCnB4QS_g/s320/Screen%2Bshot%2B2011-04-12%2Bat%2B8.29.56%2BPM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5594905536619589122" /&gt;&lt;/a&gt;&lt;br /&gt;For the past couple of years, anyone interested in trying to build the WinCairo port of &lt;a href="http://webkit.org/"&gt;WebKit&lt;/a&gt; had to track down a number of support libraries, place them in their development environment's include (and link search) paths, and then cross their fingers and hope everything built.&lt;br /&gt;&lt;br /&gt;To make things a little easier, I wrapped up the libraries and headers I use for building and posted them as a zip file on my .Mac account.  This made things a little easier, but you still had to figure out where to drop the files and figure out if I had secretly updated my 'requirements.zip' file without telling anyone.  Not ideal.&lt;br /&gt;&lt;br /&gt;A couple of days ago, while trolling through the open review queue, I ran across a &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=51790"&gt;Bug&lt;/a&gt; filed by Carl Lobo, which automated the task of downloading the requirements file when running &lt;strong&gt;build-webkit --wincairo&lt;/strong&gt;. This was a huge improvement!&lt;br /&gt;&lt;br /&gt;Today, I hijacked Carl's changes and railroaded the patch through the review process (making a few modifications along the way):&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I renamed my requirements file &lt;a href="https://files.me.com/bfulgham/mr8nd0"&gt;WinCairoRequirements.zip&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I added a timestamp file, so that &lt;strong&gt;build-webkit --wincairo&lt;/strong&gt; can check to see if the file changed, and download it if necessary.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I propagated Carl's changes to &lt;strong&gt;update-webkit&lt;/strong&gt;, so that now by adding the &lt;strong&gt;--wincairo&lt;/strong&gt; argument it will update the WinCairoRequirements file.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;I'm really excited about this update.  If you've been wanting to try out the WinCairo port of WebKit, this would be a great time to try it out.  I'd love to hear your experiences!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2314055080562779255?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://trac.webkit.org/changeset/83639' title='Towards a Simpler WinCairo Build'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2314055080562779255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2314055080562779255' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2314055080562779255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2314055080562779255'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/04/towards-simpler-wincairo-build.html' title='Towards a Simpler WinCairo Build'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-7LvU2g9SngU/TaUY8UYTrgI/AAAAAAAAAMk/tpLCnB4QS_g/s72-c/Screen%2Bshot%2B2011-04-12%2Bat%2B8.29.56%2BPM.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3493011207760979962</id><published>2011-03-30T19:50:00.000-07:00</published><updated>2011-03-30T20:03:01.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Core Builder!</title><content type='html'>Several months ago I posted to report that I had built and activated a &lt;a href="http://build.webkit.org/waterfall?show=WinCairo%20Debug%20(Build)"&gt;WebKit BuildSlave&lt;/a&gt;.  I'm pleased to report that our Build Slave is all grown up, and has been promoted to &lt;a href="http://build.webkit.org/waterfall?category=core"&gt;Core Builder&lt;/a&gt; status.&lt;br /&gt;&lt;br /&gt;Fundamentally, nothing has really changed.  It's just as easy for an errant check-in to cause the build to break.  But on a social level this promotion is quite meaningful.  It indicates that we (alas, the "Royal We") claim that the WinCairo port is an active, viable version of WebKit.  Core builder status also helps apply social pressure for external developers to keep the WinCairo build green, as it is very poor form to break the build.&lt;br /&gt;&lt;br /&gt;Now that we've reached this new lofty tier of project visibility, I'm hopeful that we will see fewer build failures.  We will almost certainly get better feedback when the build is failing, and probably get help from parties interested in keeping the tree green.&lt;br /&gt;&lt;br /&gt;I'm very excited about this change, and I hope you'll keep an eye on things to see how they progress!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3493011207760979962?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://build.webkit.org/waterfall?category=core' title='Core Builder!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3493011207760979962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3493011207760979962' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3493011207760979962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3493011207760979962'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2011/03/core-builder.html' title='Core Builder!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8016624718114845716</id><published>2010-10-06T21:32:00.000-07:00</published><updated>2010-10-07T09:11:51.965-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>At Last: A BuildBot!</title><content type='html'>It's taken me nearly two years to get all of the stars in alignment, but I am very excited to announce that we now have a WinCairo build bot up and running.  If you look at the &lt;a href="http://build.webkit.org/waterfall"&gt;WebKit Buildbot&lt;/a&gt;, you can find the new entry for it (and it's even currently green!)  Better look quick -- who knows how long it will last!&lt;br /&gt;&lt;br /&gt;I have not activated any test phases yet, since none of the pixel level tests have been generated, but this will come in time (hint, hint Mr. Martin Robinson...)&lt;br /&gt;&lt;br /&gt;The whole process of getting things up and running was a rather arduous process:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First you have to get your port building from the &lt;code&gt;build-webkit&lt;/code&gt; command line.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Next, you have to set up a &lt;a href="http://buildbot.net/trac"&gt;Buildbot&lt;/a&gt;.  You only really need the slave portion, but to test your configuration you will need to set up a local buildbot master.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Note: Here you will (perhaps) learn that the environment used by the &lt;code&gt;pdevenv&lt;/code&gt; utility does not match the build environment you've been using to debug build problems.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Once you confirm your build works when executed by the buildbot, you need to get a patch landed in the WebKit archive that defines your build slave.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;On the happy day your buildbot configuration lands, you have to start harassing &lt;b&gt;_wms&lt;/b&gt; to schedule a restart of the master buildbot.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Being a great guy, &lt;b&gt;_wms&lt;/b&gt; will get a restart scheduled, at which point a veritable &lt;em&gt;avalanche&lt;/em&gt; of source changes will be suddenly kicked loose by the &lt;code&gt;commit-queue&lt;/code&gt;.  The restart will take upwards of 48 hours before things settle down enough for the service to restart.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;But eventually, if you persevere, your bot will be live and GREEN. And with this work, comes some wonderful benefits as it will be much easier for the other WebKit folks to avoid breaks.  And I can even configure the system to send me an e-mail when my build fails.  So cool!&lt;br /&gt;&lt;br /&gt;Let's hope that this will usher in a grand new era of clean WinCairo builds and better (and faster) code production!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8016624718114845716?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://build.webkit.org/waterfall?show=WinCairo%20Debug%20(Build)' title='At Last: A BuildBot!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8016624718114845716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8016624718114845716' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8016624718114845716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8016624718114845716'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/10/at-last-buildbot.html' title='At Last: A BuildBot!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1368126888692562882</id><published>2010-10-02T22:34:00.000-07:00</published><updated>2010-10-02T23:16:05.751-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated WebKit SDK (@r68150)</title><content type='html'>I have updated the WebKitSDK to correspond to SVN revision r59726.&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* More HTML5/CSS3/DOM3 compliance&lt;br /&gt;* Web inspector improvements&lt;br /&gt;* More Accessibility updates&lt;br /&gt;* JavaScript engine improvements&lt;br /&gt;* General rendering improvements&lt;br /&gt;* SVG enhancements&lt;br /&gt;* XMLHttpRequest Changes:&lt;br /&gt;* Plugin support&lt;br /&gt;* Better Windows 7 support.&lt;br /&gt;* General performance and memory use improvements&lt;br /&gt;&lt;br /&gt;As usual, this is a significant amount of new logic so there may be some regressions. Please let me know if you encounter any problems!&lt;br /&gt;&lt;br /&gt;Side note: I still work primarily on Vista. If you have interest in better testing and support for Windows 7, and happen to have a spare Windows 7 license available that you could donate, please contact me.&lt;br /&gt;&lt;br /&gt;I've also updated my build &lt;a href="https://files.me.com/bfulgham/n9vnca"&gt;requirements&lt;/a&gt; zipfile.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1368126888692562882?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://files.me.com/bfulgham/12y4tb' title='Updated WebKit SDK (@r68150)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1368126888692562882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1368126888692562882' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1368126888692562882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1368126888692562882'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/10/updated-webkit-sdk-r68150.html' title='Updated WebKit SDK (@r68150)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3275697350973321</id><published>2010-07-09T22:42:00.000-07:00</published><updated>2010-07-09T22:57:16.269-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='hunspell'/><title type='text'>Spelling!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/TDgKnvDWkNI/AAAAAAAAAME/SO9oq7sidPc/s1600/Screen+shot+2010-07-09+at+10.46.45+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 200px; height: 126px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/TDgKnvDWkNI/AAAAAAAAAME/SO9oq7sidPc/s200/Screen+shot+2010-07-09+at+10.46.45+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5492151423340024018" /&gt;&lt;/a&gt;&lt;br /&gt;At long last we can perform spell checking in WinCairo!  While the plumbing has long been in place to allow a spelling engine to be called from within the WebKit code, the WinCairo port has not had a working implementation of the 'squiggle' logic needed to indicate misspelled words.&lt;br /&gt;&lt;br /&gt;This &lt;strike&gt;&lt;a href="https://bugs.webkit.org/show_bug.cgi?id=4132"&gt;functionality&lt;/a&gt;&lt;/strike&gt; has been landed in &lt;a href="http://trac.webkit.org/changeset/62388"&gt;r62388&lt;/a&gt;, with a small &lt;a href="http://trac.webkit.org/changeset/62871"&gt;correction&lt;/a&gt; a few days later.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/TDgLmlsNChI/AAAAAAAAAMM/anFIgdZ1BL8/s1600/example_spell.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 203px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/TDgLmlsNChI/AAAAAAAAAMM/anFIgdZ1BL8/s320/example_spell.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5492152503158770194" /&gt;&lt;/a&gt;&lt;br /&gt;With proper delegate use, you can hook up &lt;a href="http://hunspell.sourceforge.net/"&gt;Hunspell&lt;/a&gt; and begin checking spelling and getting real-time suggestions. What could be more fun?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3275697350973321?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=41323' title='Spelling!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3275697350973321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3275697350973321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3275697350973321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3275697350973321'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/07/spelling.html' title='Spelling!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/TDgKnvDWkNI/AAAAAAAAAME/SO9oq7sidPc/s72-c/Screen+shot+2010-07-09+at+10.46.45+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4145187950714693616</id><published>2010-06-13T21:04:00.001-07:00</published><updated>2010-06-13T21:56:26.540-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='wwdc'/><title type='text'>WWDC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/TBWs3ztQfTI/AAAAAAAAAL0/1iOBAoDnGnU/s1600/IMG_0688.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/TBWs3ztQfTI/AAAAAAAAAL0/1iOBAoDnGnU/s320/IMG_0688.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5482478196166262066" /&gt;&lt;/a&gt;I spent the past week at Apple's amazing WWDC conference.  I was primarily attending to learn about iPhone and iPad development, but it was also an opportunity to meet with the core Apple WebKit team.  It was great putting faces to the various IRC nicks and e-mail addresses that I've been interacting with over the past couple of years.  I learned some important facts, such as that Darin Adler is renovating his house, that mitzpettel is a baked goods aficionado, and that bdash is a really nice guy in person (despite his gruff online persona).  Only Maciej managed to elude my stalking skills.&lt;br /&gt;&lt;br /&gt;The guys were very accommodating, humoring me by sitting politely through a demonstration of my incomplete application so I could show off its multiple web view.  Unfortunately, some nuance of the WWDC network preventing me from accessing my company's VPN, so I couldn't retrieve the current beta build to show off the current artwork and CSS.  When we get closer to release I hope to post some videos of it. &lt;br /&gt;&lt;br /&gt;The only disappointment (for me) was having to miss the annual WebKit party, attending instead a mandatory Oakland A's game with my Father-in-law.  From all reports, it was a great evening (the party, not the A's game).  Oh well -- next year!&lt;br /&gt;&lt;br /&gt;If you haven't been to WWDC, I highly recommend it.  It's a great way to get excited by the possibilities provided by the various Apple platforms, as well as an opportunity to be inspired by the great work being done by others in the industry.  Arguably, the most valuable aspect of the conference is getting direct one-on-one contact with the various engineering teams at Apple.  You can literally drop in with you buggy program, sit down with your laptop and a few engineers, and walk out of there with a solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4145187950714693616?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://developer.apple.com/wwdc/' title='WWDC'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4145187950714693616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4145187950714693616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4145187950714693616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4145187950714693616'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/06/wwdc.html' title='WWDC'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/TBWs3ztQfTI/AAAAAAAAAL0/1iOBAoDnGnU/s72-c/IMG_0688.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7991338221937532064</id><published>2010-06-03T13:16:00.001-07:00</published><updated>2010-06-03T22:28:45.023-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='shelties'/><title type='text'>Jake</title><content type='html'>&lt;div style="text-align: left; padding: 3px;"&gt;&lt;a href="http://www.flickr.com/photos/27956488@N06/2606709938/" title="photo sharing"&gt;&lt;img src="http://farm4.static.flickr.com/3212/2606709938_9fd0d1a537.jpg" style="border: solid 2px #000000;" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size: 0.8em; margin-top: 0px;"&gt;&lt;a href="http://www.flickr.com/photos/27956488@N06/2606709938/"&gt;Jake in a box&lt;/a&gt;, originally uploaded by &lt;a href="http://www.flickr.com/people/27956488@N06/"&gt;bfulgham&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Years ago, when the internet was largely unknown, &lt;a href="http://en.wikipedia.org/wiki/Usenet"&gt;USENET&lt;/a&gt; was king, and people still used &lt;a href="http://www.aol.com/"&gt;America Online&lt;/a&gt; I was living in Virginia, near the headquarters of AOL.  My wife and I were newlyweds, and decided to do some training for parenthood by getting a dog.&lt;br /&gt;&lt;br /&gt;Answering an ad in the newspaper, we visited the cluttered basement of a home in nearby Vienna, VA.  The room was filled with &lt;a href="http://www.cockatiel.com/"&gt;Cockatiel&lt;/a&gt; cages, and carpeted in old newspaper.  The air was thick with dust, down, and the scent of air freshener that nearly masked the smell of wet dogs.  This is where we first met Jake, who was to be our loyal companion for the next 15 and a half years.&lt;br /&gt;&lt;br /&gt;Even then, Jake was his own person.  He could have cared less about the two goofy visitors clamoring for his attention.  He was focused on the lid from an air freshener spray, rolling it around the room and pouncing on it.  I didn't think he was going to be people-focused enough, but my wife liked that he was tiny and I liked the fact that he was only $125 (a $25 savings!) because he was a runt.  At six weeks of age he weighed only a pound and a half.&lt;br /&gt;&lt;br /&gt;It turned out that he also came with a free case of &lt;a href="http://en.wikipedia.org/wiki/Coccidia"&gt;Coccidia&lt;/a&gt;.  Our new vet (Dr. Stork) prescribed a banana flavored medicine, which I would give to Jake each morning.  I kept the fact that Jake loved the medicine a secret from my wife, hoping to get Jake to like me better (a plan which seemed to have largely worked.)&lt;br /&gt;&lt;br /&gt;When he was very small, I could put him in the pocket of my coat, cinch the pocket loosely around his neck, and go to the grocery store.   He greatly enjoyed visiting the deli department, as I recall.  &lt;br /&gt;&lt;br /&gt;Jake was wildly energetic, full of great humor, and always had a smile on his face.  I remember when we got a second dog to be his playmate, Jake would climb on the couch and kick the throw pillows onto Dylan, who was too uncoordinated to climb up.  I caught him doing this once, and I swear he winked at me while doing it.&lt;br/&gt;&lt;br /&gt;Even in the most adverse conditions he maintained a positive attitude, and only ever presented signs of depression once when we lived with my parents for a number of months.  Apparently he was fed up, and wanted his own house!&lt;br /&gt;&lt;br /&gt;He was very friendly, and loved kids.  When we finally brought a few home of our own, a new world was opened to him.  He became adept at stealing food from the kids' high chairs, and soon grew fat (topping in at nearly 22 pounds at the high point.) He loved the chaos that two toddlers brings to a home.&lt;br /&gt;&lt;br /&gt;As the kids and Jake grew older, he began to slow down.  This was a great time for my wife and me, since he had never been capable of sitting still.  At last we could hold him while watching TV or reading, and I soon learned that he had an almost magical power to put me to sleep if he sat in my lap.&lt;br /&gt;&lt;br /&gt;Eventually his hearing faded, and then his eyes clouded over with cataracts.  He stayed remarkably upbeat, memorizing the layout of the house, and never complaining about the fairly frequent knocks he took to the head from walking into furniture or walls.  I took to carrying him outside to a safe spot in the yard, and switched him to a canned dog food when his normal dog food seemed to hurt his teeth.  Even in his declining days he stayed a regal presence, barking to announce he was ready to be set on the couch, or ready to be put onto the bed, or ready to go outside. &lt;br /&gt;&lt;br /&gt;Eventually he began to lose weight and became lethargic.  He had a harder time finding his water, and seemed to frequently get lost in the house.  The Vet was not sure what the problem was, aside from advanced age, and we did not wish to subject him to invasive testing that would likely be unhelpful, but would certainly cause pain.&lt;br /&gt;&lt;br /&gt;This memorial weekend, we had to say farewell to Jake.  He passed into the next life surrounded by his family (and Grandparents).  He will be sorely missed.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7991338221937532064?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7991338221937532064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7991338221937532064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7991338221937532064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7991338221937532064'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/06/jake.html' title='Jake'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3212/2606709938_9fd0d1a537_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3995400122757179709</id><published>2010-05-20T09:11:00.000-07:00</published><updated>2010-05-20T10:33:08.813-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><title type='text'>Updated WebKit SDK (@r59726)</title><content type='html'>I have updated the &lt;a href="http://files.me.com/bfulgham/8kvx9r"&gt;WebKitSDK&lt;/a&gt; to correspond to SVN revision &lt;a href="http://trac.webkit.org/browser/trunk?rev=59726"&gt;r59726&lt;/a&gt;.&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* More HTML5/CSS3/DOM3 compliance&lt;br /&gt;  - Updates to match current specification properties and naming.&lt;br /&gt;  - DOM3 XMLHttpRequest improvements&lt;br /&gt;  - HTML5 Database support improvements&lt;br /&gt;  //- Fill modes for CSS Animations&lt;br /&gt;* Better multicolumn layout support&lt;br /&gt;* Web inspector improvements&lt;br /&gt;* More Accessibility updates&lt;br /&gt;* JavaScript engine improvements (math, string optimizations)&lt;br /&gt;* SVG enhancements&lt;br /&gt;  - feDiffuseLighting&lt;br /&gt;  - SVGFont vkern/hkern support&lt;br /&gt;  - More efficient drawing&lt;br /&gt;* Better Windows 7 support.&lt;br /&gt;* General performance and memory use improvements&lt;br /&gt;&lt;br /&gt;As usual, this is a significant amount of new logic so there may be some regressions.  Please let me know if you encounter any problems!&lt;br /&gt;&lt;br /&gt;Side note:  I still work primarily on Vista.  If you have interest in better testing and support for Windows 7, and happen to have a spare Windows 7 license available that you could donate, please contact me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3995400122757179709?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/8kvx9r' title='Updated WebKit SDK (@r59726)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3995400122757179709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3995400122757179709' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3995400122757179709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3995400122757179709'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/05/updated-webkit-sdk-r59726.html' title='Updated WebKit SDK (@r59726)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3929748853676516063</id><published>2010-05-18T17:15:00.000-07:00</published><updated>2010-05-20T12:24:20.211-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><title type='text'>Successful Print Preview</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/S_Mv7bVZE7I/AAAAAAAAALk/jrYQRXEzA1I/s1600/Scaled_Contexts.PNG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 292px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/S_Mv7bVZE7I/AAAAAAAAALk/jrYQRXEzA1I/s320/Scaled_Contexts.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5472770670181553074" /&gt;&lt;/a&gt;&lt;br /&gt;I have been wrestling with &lt;a href="http://webkit.org"&gt;WebKit&lt;/a&gt; for some time trying to get a proper 'Print Preview' thumbnail.  Unfortunately, my various attempts generally resulted in good looking text, but offset and strangely scaled graphical elements, or vice versa.&lt;br /&gt;&lt;br /&gt;During this process I learned that Windows (or specifically, MFC) implements a print preview by generating a device context for the selected printer, and a 'sister' display context that is configured to mimic the printed surface such that drawing commands intended for the full-sized printer surface are rendered into a small preview display.&lt;br /&gt;&lt;br /&gt;This is accomplished by setting the mapping mode of the display context to &lt;code&gt;MM_ANISOTROPIC&lt;/code&gt;, and setting a Window Extent (for the full size of the printed page) and a View Extent for the size of the display.&lt;br /&gt;&lt;br /&gt;Unfortunately, if you pass a context created with these kinds of settings to &lt;a href="http://www.cairographics.org"&gt;Cairo&lt;/a&gt;, it &lt;a href="https://bugs.freedesktop.org/show_bug.cgi?id=28161"&gt;improperly scales textual elements&lt;/a&gt;.  In the attached image you can see that text written with &lt;code&gt;cairo_show_text&lt;/code&gt; and &lt;code&gt;cairo_show_glyphs&lt;/code&gt; get drawn at the same size no matter how the context is scaled.  Text written with &lt;code&gt;cairo_text_path&lt;/code&gt; and other graphical elements (e.g., the arc in the example) are scaled properly.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/S_Mx_b2s4tI/AAAAAAAAALs/EZeIM2jXruI/s1600/Proper_Scaling.PNG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 247px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/S_Mx_b2s4tI/AAAAAAAAALs/EZeIM2jXruI/s320/Proper_Scaling.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5472772938063995602" /&gt;&lt;/a&gt;Thankfully, there is a workaround.  After writing a test program to illustrate the issue, I discovered through some trial and error that everything works fine if I reset the preview window mapping mode to &lt;code&gt;MM_TEXT&lt;/code&gt;, reset the HDC's WorldTransform to unity, and set the Cairo context's CTM to be scaled to match the ratio of the Viewport Extents to the Window Extents.&lt;br /&gt;&lt;br /&gt;Voila!  Properly scaled previews.&lt;br /&gt;&lt;br /&gt;This change is implemented in &lt;strike&gt;&lt;a href="https://bugs.webkit.org/show_bug.cgi?id=39329"&gt;Bug 39329&lt;/a&gt;&lt;/strike&gt;, which will hopefully be committed to the archive soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3929748853676516063?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=39329' title='Successful Print Preview'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3929748853676516063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3929748853676516063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3929748853676516063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3929748853676516063'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/05/successful-print-preview.html' title='Successful Print Preview'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/S_Mv7bVZE7I/AAAAAAAAALk/jrYQRXEzA1I/s72-c/Scaled_Contexts.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4406932712456953933</id><published>2010-04-07T20:59:00.000-07:00</published><updated>2010-04-07T22:13:36.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>WinLauncher Sources</title><content type='html'>A few people have contacted me asking about the WinLauncher program I use for testing.  I didn't create this useful application; it's actually &lt;a href="http://trac.webkit.org/browser/trunk/WebKitTools/WinLauncher"&gt;part&lt;/a&gt; of the standard &lt;a href="http://trac.webkit.org/browser/trunk/"&gt;WebKit&lt;/a&gt; source tree.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/S71kpOwmLSI/AAAAAAAAALc/At1KnZXDwXw/s1600/Screen+shot+2010-04-07+at+10.07.20+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 284px; height: 232px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/S71kpOwmLSI/AAAAAAAAALc/At1KnZXDwXw/s320/Screen+shot+2010-04-07+at+10.07.20+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5457628982942248226" /&gt;&lt;/a&gt;&lt;br /&gt;In fact, if you use the Visual Studio project to build WebKit (either the official Apple port, or my WinCairo variant), you can just set the WinLauncher project as the "Set as StartUp Project".  Now, when you press the 'Run' button, WinLauncher will build and launch.&lt;br /&gt;&lt;br /&gt;This can be extremely useful for testing various aspects of the framework, as well as playing with the official Apple build to see what it does under different conditions.  It's also a lot easier to start and debug than the full-blown Safari process.&lt;br /&gt;&lt;br /&gt;Over the last year or so I've worked to add a few new features, mainly related to stuff I was trying to get working under WinCairo.  Most recently, that means that printing is partially supported.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4406932712456953933?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://trac.webkit.org/browser/trunk/WebKitTools/WinLauncher' title='WinLauncher Sources'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4406932712456953933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4406932712456953933' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4406932712456953933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4406932712456953933'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/04/winlauncher-sources.html' title='WinLauncher Sources'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/S71kpOwmLSI/AAAAAAAAALc/At1KnZXDwXw/s72-c/Screen+shot+2010-04-07+at+10.07.20+PM.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3009141465752801083</id><published>2010-04-06T13:48:00.000-07:00</published><updated>2010-04-06T14:05:38.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated WebKit SDK (@r57152)</title><content type='html'>I have updated the &lt;a href="http://files.me.com/bfulgham/qc09yw"&gt;WebKitSDK&lt;/a&gt; to correspond to SVN revision r57152.&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* More HTML5/CSS3/DOM3 compliance&lt;br /&gt;  - DOM3 custom events&lt;br /&gt;  - DOM3 XMLHttpRequest improvements&lt;br /&gt;  - &lt;hgroup&gt; element&lt;br /&gt;  - lang attribute added to &lt;option&gt; elements&lt;br /&gt;  - Fill modes for CSS Animations&lt;br /&gt;* DOM access to FormData (XMLHttpRequest 2 spec)&lt;br /&gt;* Add create/dispatch WheelEvent in JavaScript&lt;br /&gt;* Add mechanism to get an IFrame's content frame&lt;br /&gt;* Web inspector improvements&lt;br /&gt;* Accessibility updates&lt;br /&gt;* JavaScript engine improvements&lt;br /&gt;* SVG stability and bug fixes&lt;br /&gt;* General performance and memory use improvements&lt;br /&gt;&lt;br /&gt;Clearly this is a significant amount of new logic, so there may be some regressions.  Please let me know if you encounter any problems with this new version.&lt;br /&gt;&lt;br /&gt;&lt;ruby&gt;Unfortunately I have not been able to complete work on 3D CSS or WebGL, but stay tuned!&lt;rp&gt;(&lt;/rp&gt;&lt;rt&gt;Obviously I cribbed this from an older entry as this is unchanged in the last several months!&lt;/rt&gt;&lt;rp&gt;)&lt;/rp&gt;&lt;/ruby&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3009141465752801083?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/qc09yw' title='Updated WebKit SDK (@r57152)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3009141465752801083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3009141465752801083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3009141465752801083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3009141465752801083'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/04/updated-webkit-sdk-r57152.html' title='Updated WebKit SDK (@r57152)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-5070389815856341728</id><published>2010-01-11T20:19:00.000-08:00</published><updated>2010-01-12T17:00:09.665-08:00</updated><title type='text'>Printing!</title><content type='html'>I've spent the better part of a week trying to understand why plugins were not printing properly from within WebKit.  While this is probably not a critical topic for most WebKit users, I am using the plugin infrastructure to allow WebKit to host a UI widget from my main application.  The really cool thing about this design is that I can call up a WebKit view in my main program, display some custom UI elements hosted by my main program inside the WebView, and even have the plugin (launched by WebKit) access internal objects in my running application!&lt;br /&gt;&lt;br /&gt;Unfortunately, the whole grand vision teetered on the brink of failure, because I could not get the hosted widgets to appear in a printed copy of my WebKit instance.  This was a real annoyance, after I'd *already* spent the better part of a week getting the main printing infrastructure working under WinCairo in the first place.&lt;br /&gt;&lt;br /&gt;The plugins, which displayed so nicely on-screen, didn't show up at all in hard copy -- even when there was nothing else being displayed on the screen.  Fearing some kind of strange interaction between the third-part binary I was embedding in my plugin, I wrote an extremely simple example NPAPI plugin (http://files.me.com/bfulgham/o7vlik), which renders a box in the region supplied by the calling web page.  But again, the plugin rendered perfectly on-screen, but did not display in the printout.&lt;br /&gt;&lt;br /&gt;It wasn't until I monkeyed with the margin, header, and footer that I saw tiny little rectangles being drawn in the upper-left-hand corner of the page.  The plugins were getting drawn, but they were extremely tiny, and they were in the wrong location.&lt;br /&gt;&lt;br /&gt;Searching through the code, I found the following in PluginViewWin:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    // The plugin expects the DC to be in client coordinates, so we translate&lt;br /&gt;    // the DC to make that so.&lt;br /&gt;    XFORM transform;&lt;br /&gt;    transform.eDx = locationInWindow.x();&lt;br /&gt;    transform.eDy = locationInWindow.y();&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Of course!  This was ignoring the scaling effects of printing to a page (~1600 dpi) versus on-screen (~96 dpi).  I also discovered that header and footer extents were being ignored, which was why my tiny rectangles were getting drawn in the upper-left-hand corner of the page -- and only if I made the header big enough that the web page did not cover the region.&lt;br /&gt;&lt;br /&gt;So, I happily filed &lt;strike&gt;&lt;a href="https://bugs.webkit.org/show_bug.cgi?id=32909"&gt;Bug 32909&lt;/a&gt;&lt;/strike&gt; and figured that would be the end of it.&lt;br /&gt;&lt;br /&gt;Only, it wasn't.  Once I corrected the scaling and translation issues, I found that although my on-screen display was correct, my print output continued to omit the plugin.  Even worse, I could sometimes see the edges of rectangles peeking from around rendered portions of the page (when margin or header/footer sizes were manipulated).  In at least one case, I was able to click on the edge of the rectangle in PDF Viewer, copy the object (hidden behind a blank area), and paste the *full* rectangle into another document.  WTF?&lt;br /&gt;&lt;br /&gt;After more trial and error, I discovered that changing the rendering type used for the page from &lt;code&gt;cairo_win32_printing_surface_t&lt;/code&gt; to &lt;code&gt;cairo_win32_surface_t&lt;/code&gt; my plugins *did* display properly!  The only problem, was that my printing operations went from using very little memory, to using over 100 MB of RAM to print.&lt;br /&gt;&lt;br /&gt;A bit of correspondence with the &lt;a href="http://www.cairographics.org"&gt;Cairo&lt;/a&gt; team helped me see that the problem was due to the dual nature of the drawing operations.  The plugin is handed a Windows device context handle to the printing surface.  But the majority of the drawing events in WinCairo are done against a &lt;code&gt;cairo_t&lt;/code&gt; context.  When this context is backed by a &lt;code&gt;cairo_win32_printing_surface_t&lt;/code&gt;, drawing operations become slightly order-dependent.  Drawing directly to the printer context (as my plugin was doing) would get drawn to the printer device context immediately.  Later, the entire Cairo surface was shipped to the printer, overwriting (actually *overlaying*) the previous drawing operations.&lt;br /&gt;&lt;br /&gt;And that explained it:  when this multiple layered printing context was played back as a PDF file, the plugin contents were at the lowest Z-level, but the main page rendering was sitting on top of them making it appear as though the plugin was not rendering at all.&lt;br /&gt;&lt;br /&gt;At last, a workable solution was found.  Prior to the plugin drawing, I had to add the following logic:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#if PLATFORM(CAIRO)&lt;br /&gt;    // Must flush drawings up to this point to the backing metafile, otherwise the&lt;br /&gt;    // plugin region will be overwritten with any clear regions specified in the&lt;br /&gt;    // cairo-controlled portions of the rendering.&lt;br /&gt;    PlatformGraphicsContext* ctx = context-&gt;platformContext();&lt;br /&gt;    cairo_show_page(ctx);&lt;br /&gt;#endif&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Now, each time I go to print a plugin, the Cairo context is flushed to the printing surface.  Then the plugin is drawn (on *top* of this existing rendering), then control returns to WebKit for more Cairo rendering, followed by more flushes (if more plugins are being drawn), and so forth.&lt;br /&gt;&lt;br /&gt;In this way, I was finally able to get a correct print version of my plugin-containing page.   See &lt;strike&gt;&lt;a href="https://bugs.webkit.org/show_bug.cgi?id=33022"&gt;Bug 33022&lt;/a&gt;&lt;/strike&gt;.&lt;br /&gt;&lt;br /&gt;I also pushed some general printing adjustments to the WInLauncher program to help other see the correct steps to take to execute printing.  &lt;strike&gt;&lt;a href="https://bugs.webkit.org/show_bug.cgi?id=33537"&gt;Bug 33537&lt;/a&gt;&lt;/strike&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-5070389815856341728?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=32909' title='Printing!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/5070389815856341728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=5070389815856341728' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5070389815856341728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5070389815856341728'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2010/01/printing.html' title='Printing!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-4971305918047380651</id><published>2009-12-28T19:50:00.000-08:00</published><updated>2009-12-28T19:54:11.228-08:00</updated><title type='text'>ClearType Italics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/Szl9S-XENKI/AAAAAAAAALM/wnySqN5kJsw/s1600-h/Screen+shot+2009-12-28+at+7.49.16+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 275px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/Szl9S-XENKI/AAAAAAAAALM/wnySqN5kJsw/s320/Screen+shot+2009-12-28+at+7.49.16+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5420501391447962786" /&gt;&lt;/a&gt;&lt;br /&gt;A commenter recommended that we double-check that italic characters render properly, as these are frequently clipped.  You can see from this attached image that italic characters are rendered properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4971305918047380651?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4971305918047380651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4971305918047380651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4971305918047380651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4971305918047380651'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/12/cleartype-italics.html' title='ClearType Italics'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/Szl9S-XENKI/AAAAAAAAALM/wnySqN5kJsw/s72-c/Screen+shot+2009-12-28+at+7.49.16+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1359744522014058480</id><published>2009-12-22T21:14:00.000-08:00</published><updated>2009-12-22T21:44:01.102-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='gyphs'/><category scheme='http://www.blogger.com/atom/ns#' term='cairo'/><title type='text'>Proper ClearType Support!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SzGreh80IyI/AAAAAAAAALA/VNClgfumvSs/s1600-h/Font_Comparison.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 248px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SzGreh80IyI/AAAAAAAAALA/VNClgfumvSs/s320/Font_Comparison.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5418300367701287714" /&gt;&lt;/a&gt;&lt;br /&gt;Several months ago, the &lt;a href="http://www.appcelerator.com/"&gt;Appcelerator&lt;/a&gt; team noticed that the WinCairo build of WebKit failed to properly render ClearType glyphs at the end of lines.  At the time, frankly, I was just pleased to have rendering of *anything* on the screen, and basically brushed their report aside as perfectionism better addressed at a later date.&lt;br /&gt;&lt;br /&gt;Well, today that 'later date' finally arrived.  After chatting with Martin Robinson about the issue, and finally recognizing the very poor font quality when rendering with &lt;code&gt;CAIRO_ANTIALIAS_GRAY&lt;/code&gt; (rather than the desired &lt;code&gt;CAIRO_ANTIALIAS_SUBPIXEL&lt;/code&gt;) I did a bit of Googling.  It turns out some &lt;a href="http://lists.freedesktop.org/archives/cairo/2006-October/008081.html"&gt;similar issues&lt;/a&gt; were discussed in early 2006  (and apparently resolved) on the &lt;a href="http://www.cairographics.org"&gt;cairo&lt;/a&gt; development list.  After mailing the Cairo guys to ask about the status of this particular bug, I received a message from &lt;code&gt;The_Decryptor&lt;/code&gt; (my new best friend), pointing out that &lt;a href="http://www.mozilla.com/en-US/firefox/firefox.html"&gt;Firefox&lt;/a&gt; has encountered the same problem back in February, and had &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=445087"&gt;resolved it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The underlying problem is perhaps best explained by the comment on the patch:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The bounding box reported by Windows supposedly contains the glyph's "black" area; however, antialiasing (especially with ClearType) means that the actual image that needs to be rendered may "bleed" into the adjacent pixels, mainly on the right side. To avoid clipping the glyphs when drawn by &lt;code&gt;_cairo_surface_fallback_show_glyphs&lt;/code&gt;, for example, or other code that uses glyph extents to determine the area to update, we add a pixel of "slop" to left side of the nominal "black" area returned by GDI, and two pixels to the right (as tests show some glyphs bleed into this column).&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;How well does this work?  The attached image shows the difference.  The left-hand side shows the strange end-of-line behavior of our stock Cairo build.  It's especially pronounced in the numeral '1', but can be seen to a lesser extent in the lower-case 'j'.  The right-hand side is the patched build, which is nearly identical to Safari on my installation.&lt;br /&gt;&lt;br /&gt;Many thanks to Marshall Culpepper and Martin Robinson for coming up with the initial workaround, and to &lt;code&gt;The_Decryptor&lt;/code&gt; and the &lt;a href="http://www.mozilla.com/en-US/firefox/firefox.html"&gt;Firefox&lt;/a&gt; team for their careful and thorough review of the issue, and the solution!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1359744522014058480?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=29618' title='Proper ClearType Support!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1359744522014058480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1359744522014058480' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1359744522014058480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1359744522014058480'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/12/proper-cleartype-support.html' title='Proper ClearType Support!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SzGreh80IyI/AAAAAAAAALA/VNClgfumvSs/s72-c/Font_Comparison.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8631655870421203418</id><published>2009-11-30T10:27:00.000-08:00</published><updated>2009-11-30T10:29:22.002-08:00</updated><title type='text'>Updated Requirements</title><content type='html'>If someone wanted to build and run WebKit using Visual Studio 2008, they might find this &lt;a href="http://files.me.com/bfulgham/ats18x"&gt;requirements_2008.zip&lt;/a&gt; file to be useful.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8631655870421203418?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/ats18x' title='Updated Requirements'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8631655870421203418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8631655870421203418' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8631655870421203418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8631655870421203418'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/updated-requirements.html' title='Updated Requirements'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-2833227763145476661</id><published>2009-11-25T19:24:00.001-08:00</published><updated>2009-11-25T23:20:29.806-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pixar'/><category scheme='http://www.blogger.com/atom/ns#' term='graphics'/><title type='text'>Pixar!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/Sw34SDKmTmI/AAAAAAAAAKw/fIPLma9eAYM/s1600/IMG_0304.JPG"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/Sw31LwDiDFI/AAAAAAAAAKo/giOc-oOOkTA/s1600/IMG_0299.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/Sw31LwDiDFI/AAAAAAAAAKo/giOc-oOOkTA/s320/IMG_0299.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5408248309768916050" /&gt;&lt;/a&gt;Several months ago, I received an excited phone call from my father-in-law.  &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"We won the auction!" he shouted.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;What auction?&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;"An auction for a tour of &lt;a href="http://pixar.com/"&gt;Pixar&lt;/a&gt;!  You and David are going to go!"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Apparently, my wife's parents (who obviously have a much different relationship with money than I do) had attended a charity auction for a school affiliated with their Church, and had decided they were going to land the Pixar tour.  Even more amazing, they were planning on sending me and my brother-in-law for the visit.  To be honest, I was pretty sure that schedule, fate, or a myriad of other events would conspire to prevent me from attending, but today the stars were apparently in alignment, for I did indeed take my tour of Pixar.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The nice folks at Pixar asked us to refrain from commenting on anything particularly interesting we might notice, but they allowed us to take some photos in specific areas (above is a photo of David and me hamming it up with the &lt;a href="http://www.pixar.com/featurefilms/incredibles/"&gt;Incredibles&lt;/a&gt;.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The place is incredible, with a huge central concourse designed to encourage staff to mingle (example: all the bathrooms and snack areas are here.)   Much of the 'public' spaces are decorated with cool conceptual art from the current release ('&lt;a href="http://www.pixar.com/featurefilms/up/"&gt;Up&lt;/a&gt;" in this case), although I did find some neat story boards from the Incredibles (my personal favorite from their film catalog.)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;img src="http://2.bp.blogspot.com/_hInRJC0BnDo/Sw34SDKmTmI/AAAAAAAAAKw/fIPLma9eAYM/s320/IMG_0304.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5408251716512927330" style="float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; width: 240px; height: 320px; " /&gt;&lt;div&gt;Being a computational analysis guy, I was really interested in seeing their famous render farm.  I remember back in the dark, distant, early days of Linux (back when Bruce Perens was still deeply involved in Debian GNU/Linux) how exciting it was to learn that Linux was being used to run those rendering nodes.  So it was with a bit of a lump in my throat that I stood besides those now-vast computing resources to get a quick picture under the neon lights.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Later, they treated us to a great lunch in their cafeteria.  It reminded me a bit of &lt;a href="http://www.amgen.com/"&gt;Amgen&lt;/a&gt;, in that they had created a great immersive environment aimed at keeping people in-house and interacting with each other.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's something really inspiring about being surrounded by people who are so passionate about what they are doing. Clearly, the people of Pixar love their work -- a fact that shines through the finished products in a way you don't see in many other production houses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Another element that deeply impressed me was the wide array of talents arrayed in their organization.  From sculptors, to sketch artists, to the animators whose final products we see on the big screen; all of them make huge contributions to the whole.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;All in all, it was a really exciting day.  While I didn't get to peek behind the veil into the secret Pixar underworld where the magic &lt;em&gt;really&lt;/em&gt; happens, just getting to absorb a bit of the energy and atmosphere of the place was totally worth the trip.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I actually found myself feeling a little depressed as I left; sort of like the let-down after the holidays when the fun is all over, and all that's left are the bills to pay.  I envy the team at Pixar and their creative endeavors, and their ability to reach out and touch people's lives.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the things that I love about my company is that our products are involved in a vast range of important work, ranging from alternative fuels, to nanotech, to cancer and HIV research. So it's a little funny (and probably more than a little misguided) that I was more impressed by meeting a few of the people who brought &lt;a href="http://www.pixar.com/featurefilms/up/"&gt;Up&lt;/a&gt; to life, than when I met my first Nobel laureate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But perhaps that is just the nature of art, in all its forms.  Its ability to reach out and touch lives, however briefly, seems far more profound in the moment than the plodding march of research, conducted in the dark recesses of academia (or worse, industry), inching ever onwards into the future.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2833227763145476661?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.pixar.com/' title='Pixar!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2833227763145476661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2833227763145476661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2833227763145476661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2833227763145476661'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/pixar.html' title='Pixar!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/Sw31LwDiDFI/AAAAAAAAAKo/giOc-oOOkTA/s72-c/IMG_0299.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6572652450621457487</id><published>2009-11-24T15:39:00.000-08:00</published><updated>2009-11-24T16:30:17.540-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>Apple Store Customer Support Fail</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/Swx6GG0Eq9I/AAAAAAAAAKg/Za06GLlgJb4/s1600/IMG_2257.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/Swx6GG0Eq9I/AAAAAAAAAKg/Za06GLlgJb4/s320/IMG_2257.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5407831497891949522" /&gt;&lt;/a&gt;&lt;br /&gt;Over the years I've had a number of Apple computers, iPods, and more recently, iPhones.   Based on the support sites I've looked at, I've been quite lucky.  I've never experienced a significant hardware failure, the closest being a two-CPU Mac Pro that stopped booting from the first drive bay for some reason, but was perfectly content to boot from the second.  No big deal.  I even own one of the original G5 iMacs with the exploding capacitors, and have had perfectly good experience with this unit.&lt;br /&gt;&lt;br /&gt;Therefore, it was with some embarrassment that I mulled over the non-functioning bluetooth feature on my wife's new (well, two month old) iPhone.  Every time you switch the bluetooth setting to "on", it obstinantly flips back to the "off" setting.  She had already been to the AT&amp;T store where we purchassed the phone; they ran through the usual steps: (a) reset the phone, (b) restore the phone.  After playing with it myself, I noticed that the Wifi features were not working either (not seeing or connecting to the home network, or anywhere else I tried).  AT&amp;T basically washed their hands of it, instructing us to visit the Apple store who had the technicians to resolve the problem.  &lt;br /&gt;&lt;br /&gt;And so today I found myself waiting for an Apple Store employee to take notice of me.  I stood near the Genius Bar, watching as an elderly lady was shown how to construct a colorful, yet tasteful newsletter in Pages.  Another guy was busy being indoctrinated into the dark arcana of connecting a camera to his Macintosh with a USB cable.  Still another person was learning how to post pictures to their iWeb page, and seemed to be deeply suspicious that the 'Genius' was trying to play some sort of trick on them.&lt;br /&gt;&lt;br /&gt;I finally flagged down someone walking by.  "Can you help me?", I asked.  She peered over my shoulder before answering, making sure she wasn't missing out on a potential buyer hovering near the 27" iMacs.  "Um, sure."&lt;br /&gt;&lt;br /&gt;I walked her through the problem with the phone, and asked if someone could take a look at it?  Or maybe could this malfunctioning unit just be swapped out for a working version?&lt;br /&gt;&lt;br /&gt;No, and No.&lt;br /&gt;&lt;br /&gt;"Did you try resetting the phone?", she asked.  Yes.&lt;br /&gt;"Did you try doing a full restore?"  Yes.&lt;br /&gt;&lt;br /&gt;I explained how the AT&amp;T store had already done that level of troubleshooting, and had sent me to the Apple store to resolve the issue.  According to the clerk, however, no one with any troubleshooting skills would even glance at the phone until I made an appointment with the "Genius Bar" staff, first available slot being sometime next week.  It didn't matter that the phone was malfunctioning NOW, and that we did not live in the area and were going to be stuck with the malfunctioning phone until we got home.&lt;br /&gt;&lt;br /&gt;And so I fumed as I watched one customer having her new iPhone activated (no appointment necessary!), and another person sidle up to the bar to be dazzled with the complexities of red-eye removal, and a flock of Apple staffers swarmed the mulling over a MacBook Pro.  Meanwhile I and my in-warranty, malfunctioning iPhone was sent packing.&lt;br /&gt;&lt;br /&gt;And so I still fume.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6572652450621457487?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://store.apple.com' title='Apple Store Customer Support Fail'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6572652450621457487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6572652450621457487' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6572652450621457487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6572652450621457487'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/apple-store-customer-support-fail.html' title='Apple Store Customer Support Fail'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/Swx6GG0Eq9I/AAAAAAAAAKg/Za06GLlgJb4/s72-c/IMG_2257.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2454250499734923300</id><published>2009-11-21T18:59:00.000-08:00</published><updated>2009-11-21T19:12:55.004-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='whining'/><title type='text'>Windows 7 Request</title><content type='html'>I've recently started enjoying Windows 7 at the office, and I must say I am very pleased.  There is a huge difference in performance (at least running under VMWare) when compared to Vista.  In fact, I'm now fairly spoiled and find working in Vista to be absolutely horrible!  :-)&lt;br /&gt;&lt;br /&gt;I was lucky enough to have someone donate a brand new copy of Windows Vista to me in July, which I've been using for WebKit hacking on the weekends.  It's been a huge help, allowing me to finish up the recent &lt;code&gt;-webkit-box-shadow&lt;/code&gt; coding and tests.  Alas, now that I've been exposed to Windows 7, I'm a bit ruined!  I'd love to upgrade to Windows 7, but the current upgrade options are price prohibitive ($119 for an upgrade).&lt;br /&gt;&lt;br /&gt;I had hoped that a new Vista box purchased in July would make me eligible for some kind of low price upgrade, but apparently not.&lt;br /&gt;&lt;br /&gt;If anyone has an inside scoop on whether there might be cheaper upgrade options, I'd love to hear them.  Maybe there's a great deal I'm missing somewhere?  Also, since I have a 64-bit machine I'd really like to start using Windows 7 64-bit, as that is where most new development will now be focused.&lt;br /&gt;&lt;br /&gt;I run Vista inside a virtual machine (since I also do Mac development).  I was curious if anyone has any experience with the VMWare Fusion 3 software, specifically if the performance is noticeably improved on Snow Leopard?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2454250499734923300?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/Windows/buy/default.aspx' title='Windows 7 Request'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2454250499734923300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2454250499734923300' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2454250499734923300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2454250499734923300'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/windows-7-request.html' title='Windows 7 Request'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4420766301306234536</id><published>2009-11-17T10:23:00.000-08:00</published><updated>2009-11-18T09:11:19.526-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated WebKit SDK (@r51062)</title><content type='html'>I have updated the &lt;a href="http://files.me.com/bfulgham/gh5osx"&gt;WebKitSDK&lt;/a&gt; to correspond to SVN revision r51062.&lt;br /&gt;&lt;b&gt;Edit: I stupidly wrote "-webkit-block-shadow", when I meant "-webkit-box-shadow".  Thanks to Brad K. for catching this!&lt;/b&gt;&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* Support for &lt;code&gt;-webkit-box-shadow&lt;/code&gt;.&lt;br /&gt;* General support for Canvas and SVG shadows in Cairo.&lt;br /&gt;* New SVG filter effects: feComposite, feDisplacementMap, feGaussianBlur, feMorphology&lt;br /&gt;* Many SVG rendering improvements, including support for SourceAlpha.&lt;br /&gt;* Support for CSS in Text Kerning and ligature.&lt;br /&gt;* Ability to specify the number of visible lines in &lt;code&gt;-webkit-line-clamp&lt;/code&gt;.&lt;br /&gt;* Implement DOM Level 3 composition events.&lt;br /&gt;* Implement CSSOM Range.getClientRects/getBoundingClientRect.&lt;br /&gt;* @import now works in user stylesheets.&lt;br /&gt;* Protect Canvas methods from NaN and Infinity.&lt;br /&gt;* Web Inspector improvements (see &lt;a href="http://webkit.org/blog/829/web-inspector-updates/"&gt;this blog entry&lt;/a&gt; for details), but many cool new features!&lt;br /&gt;* Some support for &lt;code&gt;-webkit-color-correction&lt;/code&gt; (needs further testing on this platform).&lt;br /&gt;* JavaScript engine speed-ups.&lt;br /&gt;* Initial &lt;code&gt;&amp;lt;ruby&amp;gt;&lt;/code&gt; support (see &lt;a href="http://sideshowbarker.net/2009/11/13/html5-ruby/"&gt;this blog entry&lt;/a&gt; for details)&lt;br /&gt;* Accessibility improvements.&lt;br /&gt;&lt;br /&gt;Clearly this is a significant amount of new logic, so there may be some regressions.  Please let me know if you encounter any problems with this new version.&lt;br /&gt;&lt;br /&gt;Unfortunately I have not been able to complete work on 3D CSS or WebGL, but stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4420766301306234536?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/gh5osx' title='Updated WebKit SDK (@r51062)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4420766301306234536/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4420766301306234536' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4420766301306234536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4420766301306234536'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/updated-webkit-sdk-r51062.html' title='Updated WebKit SDK (@r51062)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-5221781770716858928</id><published>2009-11-16T13:06:00.000-08:00</published><updated>2009-11-16T13:10:46.294-08:00</updated><title type='text'>WebKit-Box-Shadows At Last!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SwG_WT2J1oI/AAAAAAAAAKY/XNGuE6YlnlY/s1600/Screen+shot+2009-11-16+at+12.07.57+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 316px; height: 320px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SwG_WT2J1oI/AAAAAAAAAKY/XNGuE6YlnlY/s320/Screen+shot+2009-11-16+at+12.07.57+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404811417826743938" /&gt;&lt;/a&gt;&lt;br /&gt;With the landing of &lt;strike&gt;&lt;a href=https://bugs.webkit.org/show_bug.cgi?id=26102&gt;Bug 26102&lt;/a&gt;&lt;/strike&gt;, all Cairo ports of WebKit can now enjoy full &lt;code&gt;webkit-box-shadow&lt;/code&gt; support.  Even the multi-line wrapped bordered text show shadows, and the geometric primitives in the "border-radius-big.html" test work.&lt;br /&gt;&lt;br /&gt;It took a long time, but the results are definitely worth it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-5221781770716858928?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webkit.org/blog/86/box-shadow/' title='WebKit-Box-Shadows At Last!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/5221781770716858928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=5221781770716858928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5221781770716858928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5221781770716858928'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/webkit-box-shadows-at-last.html' title='WebKit-Box-Shadows At Last!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SwG_WT2J1oI/AAAAAAAAAKY/XNGuE6YlnlY/s72-c/Screen+shot+2009-11-16+at+12.07.57+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1729924354424695353</id><published>2009-11-15T21:31:00.000-08:00</published><updated>2009-11-15T22:31:11.349-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Functioning Box-Shadow</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/SwDlP7pPZiI/AAAAAAAAAJw/-LQPYhHNEsI/s1600/Screen+shot+2009-11-15+at+9.20.13+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 318px;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/SwDlP7pPZiI/AAAAAAAAAJw/-LQPYhHNEsI/s320/Screen+shot+2009-11-15+at+9.20.13+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404571614716061218" /&gt;&lt;/a&gt;&lt;br /&gt;It's taken a couple of weeks to get everything put together and landed in the archive, but tonight I finally got &lt;code&gt;webkit-box-shadow&lt;/code&gt; functioning in the Cairo build.&lt;br /&gt;&lt;br /&gt;This original work was done by Dirk Schulze, who put together most of the shadow logic.  There were a few dark corners that had to be examined and resolved before the feature worked properly.&lt;br /&gt;&lt;br /&gt;The main problem boiled down to a very simple coding error:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;===================================================================&lt;br /&gt;--- GraphicsContextCairo.cpp    (revision 50998)&lt;br /&gt;+++ GraphicsContextCairo.cpp    (working copy)&lt;br /&gt;@@ -1113,7 +1155,7 @@&lt;br /&gt;     cairo_t* cr = m_data-&gt;cr;&lt;br /&gt;     double x1, y1, x2, y2;&lt;br /&gt;     cairo_clip_extents(cr, &amp;x1, &amp;y1, &amp;x2, &amp;y2);&lt;br /&gt;-    cairo_rectangle(cr, x1, x2, x2 - x1, y2 - y1);&lt;br /&gt;+    cairo_rectangle(cr, x1, y1, x2 - x1, y2 - y1);&lt;br /&gt;     cairo_rectangle(cr, r.x(), r.y(), r.width(), r.height());&lt;br /&gt;     cairo_fill_rule_t savedFillRule = cairo_get_fill_rule(cr);&lt;br /&gt;     cairo_set_fill_rule(cr, CAIRO_FILL_RULE_EVEN_ODD);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The clipping rectangle was being computed with the right-hand x-position of the current clipping bounds, rather than the y-position per the signature.  This was causing the wrong regions of the screen to be clipped out, yielding bizarrely inverted shadow effects (see my last post for an example.)&lt;br /&gt;&lt;br /&gt;The final results look pretty good.  They generally match the reference implementation (Safari), at least as closely as WinCairo does in other respects (e.g., fonts), as shown in the following overlay:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SwDmoTQr6HI/AAAAAAAAAJ4/X7HqitHs2Is/s1600/Screen+shot+2009-11-15+at+8.46.40+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 215px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SwDmoTQr6HI/AAAAAAAAAJ4/X7HqitHs2Is/s320/Screen+shot+2009-11-15+at+8.46.40+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404573132884011122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Once this patch lands, both the Linux and Windows builds of WebKit (Cairo) should begin enjoying most of the cool features provided by webkit-box-shadow.  There are still several missing bits of functionality:&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;Shadows on various geometries don't seem to work (see the "border-radius-big.html" test).&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDvzUW80LI/AAAAAAAAAKQ/toEWkjKa-Q0/s1600/Screen+shot+2009-11-15+at+10.20.35+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 255px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDvzUW80LI/AAAAAAAAAKQ/toEWkjKa-Q0/s320/Screen+shot+2009-11-15+at+10.20.35+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404583217761931442" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;Multi-line shadow effects (see the first series in "basic-shadows.html".)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDr0xEevwI/AAAAAAAAAKA/hVWTa58l24g/s1600/Screen+shot+2009-11-15+at+10.03.51+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 166px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDr0xEevwI/AAAAAAAAAKA/hVWTa58l24g/s320/Screen+shot+2009-11-15+at+10.03.51+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404578844602449666" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;Strangely, this effect works properly when the shadow is inset in the image.&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDsBnNfr_I/AAAAAAAAAKI/ONAq5OPDviY/s1600/Screen+shot+2009-11-15+at+10.03.21+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 251px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SwDsBnNfr_I/AAAAAAAAAKI/ONAq5OPDviY/s320/Screen+shot+2009-11-15+at+10.03.21+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5404579065294204914" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1729924354424695353?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=26102' title='Functioning Box-Shadow'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1729924354424695353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1729924354424695353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1729924354424695353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1729924354424695353'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/11/functioning-box-shadow.html' title='Functioning Box-Shadow'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/SwDlP7pPZiI/AAAAAAAAAJw/-LQPYhHNEsI/s72-c/Screen+shot+2009-11-15+at+9.20.13+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6137013537677181617</id><published>2009-10-25T23:12:00.000-07:00</published><updated>2009-10-25T23:28:50.872-07:00</updated><title type='text'>More Cairo Shadow Work</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SuU-02t8euI/AAAAAAAAAJg/ZqkkgS78OYE/s1600-h/Screen+shot+2009-10-25+at+7.26.21+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 270px; height: 320px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SuU-02t8euI/AAAAAAAAAJg/ZqkkgS78OYE/s320/Screen+shot+2009-10-25+at+7.26.21+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5396788806235749090" /&gt;&lt;/a&gt;&lt;br /&gt;WebKit Uber-Hacker Dirk Schulze has been hard at work on his SVG (and general graphic) filter modifications in WebKit.  It now seems that drop-shadow support will be very doable using the existing Cairo backend.  I am still spending a bit of time porting the work over to the Skia backend, but took a break from that to try out a few of Dirks updates, as well as attempting to correct some WebKit &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=30762"&gt;bugs&lt;/a&gt; manifested by enabling filters under Windows.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SuU_4Gcv2QI/AAAAAAAAAJo/NWCztGok5h0/s1600-h/Screen+shot+2009-10-25+at+11.20.23+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 238px; height: 320px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SuU_4Gcv2QI/AAAAAAAAAJo/NWCztGok5h0/s320/Screen+shot+2009-10-25+at+11.20.23+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5396789961509820674" /&gt;&lt;/a&gt;As you can see from the first image, Dirk has gotten very nice looking stroke shadows.  Likewise, he has gotten proper image masked shadows working, shown in the second image.  I'm quite impressed with the facility's ability to generate a correct shadow from the generated gradient.  The page shows a few other examples, but these highlight the main idea.&lt;br /&gt;&lt;br /&gt;On the Skia front, I've gotten WebCore building, and a partially functioning WebKit build.  However there's still a few things I need to reconnect.  It looks like there are a few things that live in "platform/graphics/chromium" that might make more sense in "platform/graphics/skia" (namely ImageBufferData.h, and perhaps some of the font and icon handling.)  It also seems like the Skia backend is not as fast as the Cairo backend.  This is currently a purely subjective observation, and of course neither backend is currently taking advantage of any hardware acceleration (well, actually Cairo probably is).  However, the presence of the compositing and 3D transform support in Skia still make this look like a good choice, especially when attempting to address &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=29813"&gt;29813&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6137013537677181617?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=26102' title='More Cairo Shadow Work'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6137013537677181617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6137013537677181617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6137013537677181617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6137013537677181617'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/10/more-cairo-shadow-work.html' title='More Cairo Shadow Work'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/SuU-02t8euI/AAAAAAAAAJg/ZqkkgS78OYE/s72-c/Screen+shot+2009-10-25+at+7.26.21+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1998136425036058991</id><published>2009-10-23T18:01:00.000-07:00</published><updated>2009-10-23T18:13:24.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Experiments with Cairo Shadows</title><content type='html'>Fellow WebKit hacker Dirk Schulze pointed out to me that the various filter work he was doing would largely provide the functions needed to support box-shadow, and that they might even work on the WinCairo port.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/SuJTxWHPXVI/AAAAAAAAAJQ/anRMDz56pYU/s1600-h/Screen+shot+2009-10-23+at+5.59.25+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 233px;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/SuJTxWHPXVI/AAAAAAAAAJQ/anRMDz56pYU/s320/Screen+shot+2009-10-23+at+5.59.25+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5395967410757918034" /&gt;&lt;/a&gt;I went ahead and enabled the filter support in WebKit, corrected some build problems caused by the Windows ports' non-use of the filter features until now.  I then fired up the resulting binary and tried out the box-shadow support.  The screenshot shows the result of this effort -- not so great.  The shadows seem to be inverted so that they are cast inside the box.  I'm not quite sure what's wrong there!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/SuJUSv_GmCI/AAAAAAAAAJY/u1uBMblTQo0/s1600-h/Screen+shot+2009-10-23+at+6.11.04+PM.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 303px;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/SuJUSv_GmCI/AAAAAAAAAJY/u1uBMblTQo0/s320/Screen+shot+2009-10-23+at+6.11.04+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5395967984638793762" /&gt;&lt;/a&gt;I also tried out the HTML5 test page he pointed out.  As you can see in this second screenshot, the filled areas shadow nicely (pretty much matching what Safari does), but that stroked areas are not shadowed.&lt;br /&gt;&lt;br /&gt;Dirk points out that stroke support will be coming, though I'm not sure how quickly that work will be completed.&lt;br /&gt;&lt;br /&gt;I'm also enabling the Skia support in WebKit for Windows, and will try these same examples on that build, hopefully this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1998136425036058991?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://philip.html5.org/demos/canvas/shadows/various.html' title='Experiments with Cairo Shadows'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1998136425036058991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1998136425036058991' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1998136425036058991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1998136425036058991'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/10/experiments-with-cairo-shadows.html' title='Experiments with Cairo Shadows'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/SuJTxWHPXVI/AAAAAAAAAJQ/anRMDz56pYU/s72-c/Screen+shot+2009-10-23+at+5.59.25+PM.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-5860927637783195970</id><published>2009-10-18T20:06:00.000-07:00</published><updated>2009-10-18T21:53:18.824-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='skia'/><title type='text'>Exploring Skia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/StveDsgqSMI/AAAAAAAAAJI/dFdPdLz-44Q/s1600-h/Screen+shot+2009-10-18+at+8.05.00+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 308px; height: 280px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/StveDsgqSMI/AAAAAAAAAJI/dFdPdLz-44Q/s320/Screen+shot+2009-10-18+at+8.05.00+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5394149133775423682" /&gt;&lt;/a&gt;&lt;br /&gt;Someone recently asked me about the state of shadow support in the Windows Cairo ports of WebKit.  As it turns out, the answer is a firm 'it doesn't work.'  The reason for this lies in the underlying &lt;a href="http://www.cairographics.org"&gt;Cairo&lt;/a&gt; graphics library.  It doesn't support shadow effects as part of the path rendering.  Consequently, programs like &lt;a href="http://www.mozilla.com/firefox/"&gt;Firefox&lt;/a&gt; have to generate shadow effects in a separate drawing pass, rather than specifying the 'form' of the shadow and allowing it to be drawn with the main drawing element.&lt;br /&gt;&lt;br /&gt;Unfortunately, WebKit's drawing model assumes an underlying graphing system that supports toggling shadows on and off during the rendering of a page.  Attempting to shoehorn shadow effects into WebKit (using Cairo) would involve adding extra logic into the drawing system to perform shadow strokes, manually tracking the shadow state somehow and making sure to only perform the extra shadow drawing when needed.&lt;br /&gt;&lt;br /&gt;However, another option is to look at using &lt;a href="http://code.google.com/p/skia/"&gt;Skia&lt;/a&gt;, Google's custom drawing library used on their &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; browser's port of WebKit.  In case you are unfamiliar with the project, Skia is a 2D graphic library for drawing Text, Geometries, and Images.  It has built in support for some 3D perspective effects, antialiasing, transparency, and various effects.  It has good support for hardware acceleration, and runs on a wide range of hardware platforms.&lt;br /&gt;&lt;br /&gt;The bad news is that information about building and running Skia under Windows is pretty non-existant.  Clearly it is possible, since all ports of Chrome (including Windows) use Skia, but they project provides no project files (or scons or gyp files), and the gyp files used in the Chromium project don't work outside of the Chromium source tree.&lt;br /&gt;&lt;br /&gt;Happily, it's not too hard to figure out which files need to be included in the build, and I &lt;a href="http://groups.google.com/group/skia-discuss/browse_thread/thread/6f83bfba70a3366c/541327fe8b781516?lnk=gst&amp;q=Windows#541327fe8b781516"&gt;found a post&lt;/a&gt; by a guy who had gotten things building back in May.  Consequently, after a couple of hours of work I was able to get a test application up and running to play with the core library and confirm that it functions properly.  I was then able to explore the API a little bit, and confirm that shadows work as expected.&lt;br /&gt;&lt;br /&gt;My initial impressions of Skia are very positive.  It's nice working with a C++ framework, rather than Cairo's very strict C interface.  One puzzling thing about Skia is that the Chromium project has built an extremely useful &lt;a href="http://src.chromium.org/viewvc/chrome/trunk/src/skia/"&gt;set of abstractions&lt;/a&gt; on top of Skia that seem like they would be well-suited for inclusion.  For example, constructing a context for a typical Windows device involves a few steps.  But the skia::PlatformCanvasPaint template class takes care of many of these details (as well as cleaning up after itself).  Equivalent templates are provided for GTK+ and Mac use.  Why leave this in Chromium's private repository?  This is useful for everyone!&lt;br /&gt;&lt;br /&gt;Over the next week or so I intend to revise the Windows Cairo port to use Skia for its graphical back-end.  As a first step, I have updated my &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;requirements.zip&lt;/a&gt; file with Skia and it's include files.  I have also posted my &lt;a href="http://files.me.com/bfulgham/x4dn6s"&gt;source tree&lt;/a&gt; for Skia, including the Visual Studio solution and my test application (based on WinLauncher).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-5860927637783195970?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://code.google.com/p/skia/' title='Exploring Skia'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/5860927637783195970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=5860927637783195970' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5860927637783195970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5860927637783195970'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/10/exploring-skia.html' title='Exploring Skia'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/StveDsgqSMI/AAAAAAAAAJI/dFdPdLz-44Q/s72-c/Screen+shot+2009-10-18+at+8.05.00+PM.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6064216471770701</id><published>2009-09-25T16:24:00.000-07:00</published><updated>2009-09-25T17:42:59.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated WebKit SDK (@r48761)</title><content type='html'>I have updated the &lt;a href="http://files.me.com/bfulgham/b1o202"&gt;WebKitSDK&lt;/a&gt; and &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;requirements.zip&lt;/a&gt; to correspond to SVN revision r48761.&lt;br /&gt;&lt;br /&gt;Major changes in this revision:&lt;br /&gt;* Support for user stylesheet injection.&lt;br /&gt;* Fixes for various layout/rendering issues.&lt;br /&gt;* Various stability and memory improvements.&lt;br /&gt;&lt;br /&gt;This bundle also includes Snow Leopard-era CoreFoundation (CFLite), so please let me know if you encounter any strange problems.&lt;br /&gt;&lt;br /&gt;The recent WebKit improvements have corrected a few rendering issues I have experienced in the past, so please give this build a try and let me know if you encounter any problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6064216471770701?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/b1o202' title='Updated WebKit SDK (@r48761)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6064216471770701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6064216471770701' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6064216471770701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6064216471770701'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/09/updated-webkit-sdk-r48761.html' title='Updated WebKit SDK (@r48761)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4260212335330771846</id><published>2009-09-09T19:54:00.000-07:00</published><updated>2009-09-09T20:46:05.156-07:00</updated><title type='text'>Towards a Reopened CFNetwork</title><content type='html'>I think one of the coolest things about &lt;a href="http://www.apple.com/"&gt;Apple, Inc.&lt;/a&gt; in their modern incarnation is how great a member of the Open Source community they have become.  The fact that the true core of Mac OS, the &lt;a href="http://developer.apple.com/Darwin/"&gt;Darwin&lt;/a&gt; &lt;a href="http://www.freebsd.org/"&gt;BSD&lt;/a&gt; implementation, is &lt;a href="http://opensource.apple.com/"&gt;open&lt;/a&gt; and available for all interested parties to &lt;a href="http://darwinbuild.macosforge.org/"&gt;review&lt;/a&gt;, &lt;a href="http://www.puredarwin.org/"&gt;modify&lt;/a&gt;, and &lt;a href="http://src.macosforge.org/Roots/"&gt;learn&lt;/a&gt; from is unprecedented in any commercial company I am aware of (at least, none that started off life as a closed-source entity.)&lt;br /&gt;&lt;br /&gt;In addition to the core OS components from the Darwin layer, they have contributed improvements to the GNU compiler collection, their amazing &lt;a href="http://www.webkit.org/"&gt;WebKit&lt;/a&gt; rendering engine, spearheaded the &lt;a href="http://www.khronos.org/opencl/"&gt;OpenCL&lt;/a&gt; initiative, shepherded &lt;a href="http://llvm.org/"&gt;LLVM&lt;/a&gt; into an absolutely amazing compiler system, provided a fantastic local host resolution and routing system (&lt;a href="http://developer.apple.com/networking/bonjour/index.html"&gt;Bonjour&lt;/a&gt;), and have contributed the equivalent of millions of dollars in development value to the world at large.&lt;br /&gt;&lt;br /&gt;Amazing!&lt;br /&gt;&lt;br /&gt;So of course I am writing this post to ask for &lt;em&gt;EVEN MORE&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;While working on a native Windows port of WebKit (one unencumbered by proprietary Apple libraries that prohibit redistribution), I started working with &lt;a href="http://developer.apple.com/CoreFoundation/"&gt;CoreFoundation&lt;/a&gt;.  Along with the many other products I listed above, they opened a large subset of the full CoreFoundation product as &lt;a href="http://developer.apple.com/opensource/cflite.html"&gt;CF-Lite&lt;/a&gt;, large enough in fact to support running WebKit.  They even provided useful examples and arguments for basing a porting strategy around CF-Lite.  While they make dumps of the CF-Lite source tree available with each Mac OS release, they did not generally release Linux or Windows sources (which had to be recreated externally).  They were also uninterested in opening it up as a WebKit-style open source project, so I started hosting them as the &lt;a href="http://opencflite.sourceforge.net/"&gt;opencflite&lt;/a&gt; project on &lt;a href="http://www.sourceforge.net/"&gt;SourceForge&lt;/a&gt;.  We now fully support Mac OS X (a no-brainer), Windows, and Linux.&lt;br /&gt;&lt;br /&gt;CoreFoundation is really neat because of its various data types and operating system abstractions, but it also has a nice modular system for modelling various operating system elements (such as sockets, files, timers) as part of a common runloop, allowing easy asynchronous operations.  What is even neater is when you can make use of CoreFoundation's sister framework, &lt;a href="http://developer.apple.com/mac/library/documentation/Networking/Conceptual/CFNetwork/Introduction/Introduction.html"&gt;CFNetwork&lt;/a&gt;, which extends this idea to various network features, such as Host lookup, DNS, and &lt;a href="http://developer.apple.com/networking/bonjour/index.html"&gt;Bonjour&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Up through Mac OS X 10.4 (Tiger), CFNetwork was &lt;a href="http://opensource.apple.com/source/CFNetwork/CFNetwork-128/"&gt;Open Source software&lt;/a&gt;.  Alas, those salad days were not to last.  With the release of Mac OS X 10.5 (Leopard), CFNetwork closed up and has not been seen in the wild since.&lt;br /&gt;&lt;br /&gt;Initially I thought this was a mistake, but after corresponding with Apple's Open Source Product Manager I was informed that it was indeed closed on purpose.  After a couple of years of e-mailing various parties associated with the CoreFoundation/CFNetwork product line, I eventually filed rdar://7195752 to request the source to be reopened.&lt;br /&gt;&lt;br /&gt;I'm not sure why CFNetwork was closed.  But even if it contains &lt;a href="http://lispers.org/"&gt;Secret Alien Technology&lt;/a&gt;, I believe that portions of it could be made available in an Open Source form.  In my bug report, I gave an impassioned plea that basically boiled down to the following bullet points:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Increased uptake of CoreFoundation as a general purpose, cross-platform library would facilitate porting of applications to the Mac OS.&lt;/li&gt;&lt;li&gt;Security engineers would be able to audit and validate the source code, increasing overall platform security.&lt;/li&gt;&lt;li&gt;Presence of the source and examples on more development platforms would increase developer mind share, and help extend the visibility and utility of Apple development tools.&lt;/li&gt;&lt;li&gt;More eyes looking at the code would benefit the source base as a whole.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;As I conclude in my bug report, I sincerely hope that Apple could be convinced to open source at least portions of CFNetwork so that its use could be extended outside of Apple.  This would greatly aid in my efforts to keep the Windows Cairo port of WebKit in sync with the full Apple version, as well as allowing work on the &lt;a href="http://www.puredarwin.org/developers/cfnetwork"&gt;PureDarwin&lt;/a&gt; project to continue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4260212335330771846?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://openradar.appspot.com/7195752' title='Towards a Reopened CFNetwork'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4260212335330771846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4260212335330771846' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4260212335330771846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4260212335330771846'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/09/towards-reopened-cfnetwork.html' title='Towards a Reopened CFNetwork'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7878595967457099975</id><published>2009-09-09T15:13:00.001-07:00</published><updated>2009-09-09T15:21:20.175-07:00</updated><title type='text'>Updated WebKit SDK (@r48212)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/Sqgp4Lz_IAI/AAAAAAAAAJA/j03ZWaL7X6o/s1600-h/Screen+shot+2009-09-09+at+3.17.42+PM.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 295px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/Sqgp4Lz_IAI/AAAAAAAAAJA/j03ZWaL7X6o/s320/Screen+shot+2009-09-09+at+3.17.42+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5379595800114307074" /&gt;&lt;/a&gt;&lt;br /&gt;A new WebKit SDK, now new and improved with no multiple-MSVCRT linkage!&lt;br /&gt;&lt;br /&gt;This build corresponds to the new &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;requirements.zip&lt;/a&gt; I uploaded last night.  This should be suitable for running on an end-user system (assuming it has been updated to the current patchlevel for MSVCRT). If the user is running 'Windows Update' this should be a safe assumption.&lt;br /&gt;&lt;br /&gt;Please try it out and let me know if you have any problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7878595967457099975?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/u5bi4e' title='Updated WebKit SDK (@r48212)'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7878595967457099975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7878595967457099975' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7878595967457099975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7878595967457099975'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/09/updated-webkit-sdk-r48212.html' title='Updated WebKit SDK (@r48212)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/Sqgp4Lz_IAI/AAAAAAAAAJA/j03ZWaL7X6o/s72-c/Screen+shot+2009-09-09+at+3.17.42+PM.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-123707088182025857</id><published>2009-09-09T00:18:00.000-07:00</published><updated>2009-09-09T01:26:39.104-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Revised Requirements</title><content type='html'>A couple of people who have been working with the WebKitSDK reported problems when running WinLauncher (or other applications based on WebKit.)  This was tracked down to the WebKit.dll manifest, which contained dual entries for the Visual Studio runtime:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.4053" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;versus&lt;br /&gt;&lt;code&gt;&lt;br /&gt;assemblyIdentity type="win32" name="Microsoft.VC80.CRT" version="8.0.50727.762" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;I initially planned on rebuilding everything using static linkage to the CRT, but quickly found that this would require changing far too many project files (including every existing WebKit project).  This quickly got out of hand, so I simply rebuilt against the current set of libraries and called it a day.&lt;br /&gt;&lt;br /&gt;You can grab the new requirements &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;here&lt;/a&gt;.  If you update to current SVN you will have proper link instructions to build a correct set of executables and DLLs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-123707088182025857?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/iay8p5' title='Revised Requirements'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/123707088182025857/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=123707088182025857' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/123707088182025857'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/123707088182025857'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/09/revised-requirements.html' title='Revised Requirements'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-2745688401538184198</id><published>2009-08-25T23:21:00.001-07:00</published><updated>2009-08-26T07:43:19.001-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated Build</title><content type='html'>I haven't posted much recently, but rest assured I am continuing to work on WebKit in a variety of areas.  I found (and corrected) a few issues in the libcurl backend, but you were only likely to run into them if you were working a lot with local files (e.g., stuff in your filesystem) which happens to be something I'm doing a lot of right now.  The build now contains corrections &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=19794"&gt;for&lt;/a&gt; &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=28312"&gt;these&lt;/a&gt; &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=28405"&gt;items&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At the moment, I am working on making it easier for people to use WebKit in projects without having to invest massive amounts of time to figure out how to build the framework themselves.&lt;br /&gt;&lt;br /&gt;To that end, I am ditching the separate Debug and Release bundles I had been producing, and am paring things down to a single &lt;a href="http://files.me.com/bfulgham/28pio3"&gt;WebKitSDK&lt;/a&gt; zip file, which contains the Debug and Release binaries in a single package.  I first had to &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=28695"&gt;modify WebKit&lt;/a&gt; to emit dll's with "_debug" names so that everything could coexist peacefully in a single bin folder.  Now that this is all bundled together, I have removed the original Debug and Release-only zip files from my iDisk.&lt;br /&gt;&lt;br /&gt;Now that I've got that finished up, I'm going to focus on shrinking the runtime dependencies by trying to link more of the components statically.  I am also trying to get the libcurl support into a background worker to improve throughput.&lt;br /&gt;&lt;br /&gt;Of course, if any of you have more pressing concerns, let me know or &lt;a href="http://bugs.webkit.org"&gt;file a bug!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2745688401538184198?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/28pio3' title='Updated Build'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2745688401538184198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2745688401538184198' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2745688401538184198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2745688401538184198'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/08/updated-build.html' title='Updated Build'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2210258462125969809</id><published>2009-08-11T23:33:00.000-07:00</published><updated>2009-08-11T23:48:07.170-07:00</updated><title type='text'>WebKit (r47083) Build Pushed to iDisk</title><content type='html'>I've pushed an updated build (with HTTPS support) to my &lt;a href="http://files.me.com/bfulgham/81mtr9"&gt;iDisk&lt;/a&gt;. A &lt;a href="http://files.me.com/bfulgham/211yvf"&gt;Debug version&lt;/a&gt; is also available at the same place.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SoJlL58bagI/AAAAAAAAAIk/fLmDULh4FKQ/s1600-h/Picture+3.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 248px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SoJlL58bagI/AAAAAAAAAIk/fLmDULh4FKQ/s320/Picture+3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5368964960986294786" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you intend to build WebKit yourself, you should use the current &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;requirements.zip&lt;/a&gt; file for your building pleasure.  In addition to the SSL-enabled cURL, it contains a slightly updated &lt;a href="http://sourceforge.net/projects/opencflite/"&gt;CFLite&lt;/a&gt; that brings it up to Mac OS 10.5.8 level.&lt;br /&gt;&lt;br /&gt;These builds include the cURL cacert.pem file in WebKit.resources/certificates/cacert.pem.  If you have another certificate bundle you would like to use, just copy it to this location (and name).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2210258462125969809?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/81mtr9' title='WebKit (r47083) Build Pushed to iDisk'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2210258462125969809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2210258462125969809' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2210258462125969809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2210258462125969809'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/08/webkit-r47083-build-pushed-to-idisk.html' title='WebKit (r47083) Build Pushed to iDisk'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/SoJlL58bagI/AAAAAAAAAIk/fLmDULh4FKQ/s72-c/Picture+3.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2430219780018996500</id><published>2009-08-11T16:16:00.000-07:00</published><updated>2009-08-11T23:31:46.933-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>WinCairo WebKit Supports SSL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SoH-DvTMNbI/AAAAAAAAAIc/XoXapVgT9rk/s1600-h/Picture+8.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 228px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SoH-DvTMNbI/AAAAAAAAAIc/XoXapVgT9rk/s320/Picture+8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5368851570992362930" /&gt;&lt;/a&gt;&lt;br /&gt;The guys at &lt;a href="http://www.appcelerator.com"&gt;Appcelerator&lt;/a&gt; figured out how to enable SSL support in their local build of the WinCairo port, and passed along the three-line change required to do so.&lt;br /&gt;&lt;br /&gt;Of course, there was a little bit more to it than that, mainly involving figuring out how to (a) build &lt;a href="http://www.openssl.org"&gt;OpenSSL&lt;/a&gt; on Windows, (2) how to build &lt;a href="http://curl.haxx.se/libcurl/"&gt;libcurl&lt;/a&gt; with SSL enabled, and (iii) how to link WebKit with all of this stuff.&lt;br /&gt;&lt;br /&gt;I managed to swell their three-line modification into around twenty lines, but in my defense I wanted to make it possible to have WebKit look for the SSL certificate in the WebKit bundle directory (falling back to the CURL_CA_BUNDLE_PATH environment variable only if necessary).&lt;br /&gt;&lt;br /&gt;So now you can locate a certificate bundle in "WebKit.resources/certificates/cacert.pem", and WebKit will find it and use it.  If not, you have to set the CURL_CA_BUNDLE_PATH environment variable to the desired location.&lt;br /&gt;&lt;br /&gt;The upshot of all this is that I am posting this blog note via WinLauncher (after logging into Blogger.com using HTTPS), and I closed out &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=28171"&gt;&lt;strike&gt;Bug 28171&lt;/strike&gt;&lt;/a&gt; via WinLauncher (over HTTPS) as well!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2430219780018996500?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://trac.webkit.org/changeset/47071' title='WinCairo WebKit Supports SSL'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2430219780018996500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2430219780018996500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2430219780018996500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2430219780018996500'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/08/wincairo-webkit-supports-ssl.html' title='WinCairo WebKit Supports SSL'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SoH-DvTMNbI/AAAAAAAAAIc/XoXapVgT9rk/s72-c/Picture+8.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1576458593637091754</id><published>2009-07-16T23:22:00.000-07:00</published><updated>2009-07-16T23:32:35.028-07:00</updated><title type='text'>A Thank You!</title><content type='html'>A few weeks ago I posted a request for a valid, legal license for Microsoft Windows so that I could do more WebKit work on the weekends or when I only had my MacBook Pro at hand.&lt;br /&gt;&lt;br /&gt;I'm shocked and delighted to report that a kind donor (who wishes to remain anonymous) has provided me with a brand new Windows Vista boxed set.  This is an expensive and very helpful donation, and I greatly apreciate it.&lt;br /&gt;&lt;br /&gt;So many thanks to my anonymous benefactor, and I'm off to buy a larger hard drive so I can set up a respectable partition for it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1576458593637091754?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.microsoft.com/windows/en-us/whatis.mspx' title='A Thank You!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1576458593637091754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1576458593637091754' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1576458593637091754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1576458593637091754'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/07/thank-you.html' title='A Thank You!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-4086857735232769453</id><published>2009-07-13T17:12:00.000-07:00</published><updated>2009-07-13T17:21:44.433-07:00</updated><title type='text'>WebKit Cairo Windows Port Landed!</title><content type='html'>&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SlvNxzp6OkI/AAAAAAAAAIA/F7-BsWWcZVM/s1600-h/Picture+5.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 250px;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SlvNxzp6OkI/AAAAAAAAAIA/F7-BsWWcZVM/s320/Picture+5.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5358102437250611778" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;It's been a long, hard road, but today marks the &lt;a href="http://trac.webkit.org/changeset/45846"&gt;commit&lt;/a&gt; of the last missing element of the Windows Cairo port.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Literally every bit of code I use on my system to build WebKit on Windows using the non-Apple support libraries is now part of the official WebKit archive.  This means that you can now embed a WebView in your Windows application that harnesses the full power and features of the best rendering engine out there.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To celebrate, I am posting here an image of &lt;a href="http://www.satine.org/research/webkit/snowleopard/snowstack.html"&gt;Satine.org&lt;/a&gt;'s CSS animation demo"SnowStack".  It runs fairly well on my local Debug build.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Out of sheer meanness, I am also attaching the same website viewed with IE 8...&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SlvO25FhJXI/AAAAAAAAAII/uQUAcwjIsRE/s1600-h/Picture+6.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 254px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SlvO25FhJXI/AAAAAAAAAII/uQUAcwjIsRE/s320/Picture+6.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5358103624119559538" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4086857735232769453?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://trac.webkit.org/changeset/45846' title='WebKit Cairo Windows Port Landed!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4086857735232769453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4086857735232769453' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4086857735232769453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4086857735232769453'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/07/webkit-cairo-windows-port-landed.html' title='WebKit Cairo Windows Port Landed!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/SlvNxzp6OkI/AAAAAAAAAIA/F7-BsWWcZVM/s72-c/Picture+5.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6231652184675701517</id><published>2009-07-10T10:42:00.000-07:00</published><updated>2009-07-10T10:46:47.327-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Updated Builds (r45683)</title><content type='html'>I have updated the binaries for the Windows Cairo (need a name!) port:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://files.me.com/bfulgham/egkh7n"&gt;Release Build&lt;/a&gt;&lt;br /&gt;&lt;a href="http://files.me.com/bfulgham/fl5x9b"&gt;Debug Build&lt;/a&gt;&lt;br /&gt;&lt;a href="http://files.me.com/bfulgham/96t4nk"&gt;CallJS Example&lt;/a&gt;&lt;br /&gt;&lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;Build Requirements&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Please let me know if you encounter any problems with these binaries.  All font assertions have been fixed, scrolling and panning issues are resolved, and the Google Maps issue mentioned previously seems to work fine for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6231652184675701517?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6231652184675701517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6231652184675701517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6231652184675701517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6231652184675701517'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/07/updated-builds-r45683.html' title='Updated Builds (r45683)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-9218348723488968208</id><published>2009-07-09T23:50:00.000-07:00</published><updated>2009-07-10T00:07:14.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>I Need Port Name Ideas!</title><content type='html'>One of the few remaining tasks holding up complete integration of the Redistributable Windows WebKit port is an official name.  I tried using the term "Redistributable WebKit", but this met with somewhat negative feedback.&lt;br /&gt;&lt;br /&gt;So, what do all of YOU think would be a good name?&lt;br /&gt;&lt;br /&gt;Maybe I could commandeer the abandoned SquirrelFish name? ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-9218348723488968208?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=27087' title='I Need Port Name Ideas!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/9218348723488968208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=9218348723488968208' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/9218348723488968208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/9218348723488968208'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/07/i-need-port-name-ideas.html' title='I Need Port Name Ideas!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1486213465130647117</id><published>2009-06-28T18:24:00.001-07:00</published><updated>2009-06-28T19:07:34.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Helping Out -- Windows License</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SkggySSc3RI/AAAAAAAAAH4/07thgw-jLJ4/s1600-h/IMG_0350.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SkggySSc3RI/AAAAAAAAAH4/07thgw-jLJ4/s320/IMG_0350.jpg" border="0" alt="Example of not using WebKit" id="BLOGGER_PHOTO_ID_5352564205404609810" /&gt;&lt;/a&gt;&lt;br /&gt;A few people who have found the Windows Cairo WebKit port useful have asked if there was any way to 'donate' to the project or otherwise help out.  While the most useful thing anyone can do is to contribute debugging or coding help, there one thing that would really help me out would be if someone could contribute a valid (i.e., Legally transferrable) Windows XP, Windows Vista, or (someday) Windows 7 license so I could do more coding after hours or one weekends.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To help motivate your desire to donate such a license, I present here a photo I took while on vacation this past week.  This is a nice example of what awaits you if you rely on Internet Explorer for your &lt;a href="http://www.chabotspace.org/default.asp"&gt;web kiosk&lt;/a&gt; needs!  ;-)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1486213465130647117?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1486213465130647117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1486213465130647117' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1486213465130647117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1486213465130647117'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/06/helping-out-windows-license.html' title='Helping Out -- Windows License'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/SkggySSc3RI/AAAAAAAAAH4/07thgw-jLJ4/s72-c/IMG_0350.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-69338581385531719</id><published>2009-06-11T17:22:00.000-07:00</published><updated>2009-06-11T17:35:56.264-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>DumpRenderTree: Windows Cairo 'Mostly' Good</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SjGgAYkjFSI/AAAAAAAAAHw/N1SQe7i3SI4/s1600-h/Picture+2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 148px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SjGgAYkjFSI/AAAAAAAAAHw/N1SQe7i3SI4/s320/Picture+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5346230161121678626" /&gt;&lt;/a&gt;I recently found and corrected the cause of the hated &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=22891"&gt;scrolling bug&lt;/a&gt;.  A question by Jonghoon Kim about the inconsistent use of &lt;span class="Apple-style-span" style="font-family: monospace; font-size: medium; white-space: pre-wrap; "&gt;SetGraphicsMode(bitmapDC, GM_ADVANCED); &lt;/span&gt;prompted me to review the handling of graphics context between Windows and Cairo.  This led to the discovery that the Windows &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;HDC&lt;/span&gt; and the Cairo &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;cairo_t&lt;/span&gt; contexts were not being kept in sync in all cases, and so various transformations were being inconsistently applied, resulting in the strange behavior that prompted me to file the bug.   Now that the only major rendering discrepancy was resolved, it's time to start solidifying the Cairo port.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I finally got around to updating DumpRenderTree so that it can run the enormous suite of layout tests included with the WebKit sources.  I was pretty sure that things would be fairly broken, but I am pretty happy that DumpRenderTree decided that the Windows Cairo build desired a grade of "D".&lt;br /&gt;&lt;br /&gt;Here are the test results:&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;7907.74s total testing time&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;5598 test cases (54%) succeeded&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;4597 test cases (44%) had incorrect layout&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;19 test cases (&lt;1%)&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;4 test cases (&lt;1%)&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;409 test cases (4%) had stderr output&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Clearly there is a lot of room for improvement.  However, as you can see in the screen grab above, many of the differences are a matter of one or two pixels.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I'll probably target the crashes first.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-69338581385531719?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/69338581385531719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=69338581385531719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/69338581385531719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/69338581385531719'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/06/dumprendertree-windows-cairo-mostly.html' title='DumpRenderTree: Windows Cairo &apos;Mostly&apos; Good'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/SjGgAYkjFSI/AAAAAAAAAHw/N1SQe7i3SI4/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2360886397004790183</id><published>2009-06-03T14:42:00.001-07:00</published><updated>2009-06-08T16:36:04.736-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><category scheme='http://www.blogger.com/atom/ns#' term='opencflite'/><title type='text'>CFLite Corrections, Web Inspector</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SibuY42MvQI/AAAAAAAAAHo/SGb63I1rYf0/s1600-h/Picture+6.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 304px; height: 320px;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SibuY42MvQI/AAAAAAAAAHo/SGb63I1rYf0/s320/Picture+6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5343220119265656066" /&gt;&lt;/a&gt;Apple recently released an update of the CoreFoundation sources to their Open Source website, which prompted me to take a pass over the OpenCFLite project to merge the (minor) bits of new code.  While doing so, I decided to track down the cause of the bundle loading failure which was preventing WebKit from loading resources from the bundle.&lt;br /&gt;&lt;br /&gt;The problem turned out to be due to an incorrect file access method (it turns out that you have to pass the &lt;a href="http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx"&gt;FILE_FLAG_BACKUP_SEMANTICS&lt;/a&gt; flag to CreateFile if you want to get a handle to a directory.  If you just ask for general permissions you get an "Access Denied" error.)&lt;br /&gt;&lt;br /&gt;Lo and behold, once this bug was corrected, CFLite.dll began happily loading WebKit resources which caused the myriad of context menu options to suddenly start working.&lt;br /&gt;&lt;br /&gt;The benefit?  The AWESOME WEB INSPECTOR is now live and functional!  The attached screenshot shows what this looks like under the Windows Cairo build.  Not too shabby!  :-)&lt;br /&gt;&lt;br /&gt;I've updated the &lt;a href="http://files.me.com/bfulgham/iay8p5"&gt;requirements.zip&lt;/a&gt; file with the revised CFLite.dll.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2360886397004790183?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2360886397004790183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2360886397004790183' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2360886397004790183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2360886397004790183'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/06/cflite-corrections-web-inspector.html' title='CFLite Corrections, Web Inspector'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/SibuY42MvQI/AAAAAAAAAHo/SGb63I1rYf0/s72-c/Picture+6.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2603876678445447256</id><published>2009-06-01T14:09:00.000-07:00</published><updated>2010-01-12T17:03:59.973-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>CallJS Updated</title><content type='html'>I've updated the &lt;a href="http://files.me.com/bfulgham/o0r6gv"&gt;CallJS&lt;/a&gt; sample project with current WebKit binaries.&lt;br /&gt;&lt;br /&gt;* Now uses the WebKit COM API call "WebKitCreateInstance", which greatly simplifies using WebKit.  No more having to figure out the right incantation to get the manifest files built properly.&lt;br /&gt;* Cleaned up some of the MFC code.&lt;br /&gt;* Updated to current ICU and other support files.&lt;br /&gt;&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;em&gt;UPDATE:&lt;/em&gt; Corrected CallJS example link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2603876678445447256?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://files.me.com/bfulgham/socw2n' title='CallJS Updated'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2603876678445447256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2603876678445447256' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2603876678445447256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2603876678445447256'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/06/calljs-updated.html' title='CallJS Updated'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7802989290175459052</id><published>2009-05-29T16:30:00.000-07:00</published><updated>2009-06-01T14:12:13.139-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Recent WebKit Updates</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SiBw0MH3gzI/AAAAAAAAAHg/k7QANW-WqPg/s1600-h/Picture+5.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 258px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SiBw0MH3gzI/AAAAAAAAAHg/k7QANW-WqPg/s320/Picture+5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5341393199971140402" /&gt;&lt;/a&gt;&lt;br /&gt;I've beaten back the recent bit-rot that is endemic in tracking the WebKit project.  This project moves so fast that if you don't stay on top of things it rapidly leaves you behind!&lt;br /&gt;&lt;br /&gt;Recent updates now provide proper support for synthetic bold/oblique fonts, as well as using more of the Chromium team's image decoders.  I also corrected various build settings that were causing the Cairo build to attempt to link against old ICU libraries.&lt;br /&gt;&lt;br /&gt;The never-ending &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=17484"&gt;patch&lt;/a&gt; is now down to just slightly over 2 KB.  Once I get the printing stuff sorted out this patch should no longer be needed.&lt;br /&gt;&lt;br /&gt;Next week I should get the sample JavaScript example application working.  This little app will probably start linking against the new JavaScriptCore.dll, since WebKit is now broken into two DLL's to simplify access to the core JavaScript routines.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7802989290175459052?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7802989290175459052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7802989290175459052' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7802989290175459052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7802989290175459052'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/05/recent-webkit-updates.html' title='Recent WebKit Updates'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SiBw0MH3gzI/AAAAAAAAAHg/k7QANW-WqPg/s72-c/Picture+5.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2030051156907948688</id><published>2009-03-10T12:02:00.000-07:00</published><updated>2009-03-10T13:39:02.696-07:00</updated><title type='text'>Updated WebKit Build</title><content type='html'>I have updated the Windows builds of the redistributable WebKit dll (&lt;a href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Debug.zip"&gt;Debug&lt;/a&gt;, &lt;a href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Release.zip"&gt;Release&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I have also updated the set of &lt;a href="http://idisk.mac.com/bfulgham-Public/requirements.zip"&gt;build dependencies&lt;/a&gt;, in case you need them.&lt;br /&gt;&lt;br /&gt;Updates with this release are:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Cairo updated from 1.8.4 to 1.8.6.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;CFLite (CoreFoundation) updated to match Leopard 10.5.6&lt;/li&gt;&lt;br /&gt;&lt;li&gt;ICU updated from 3.6 to 4.0&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;For some reason, the &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=22891"&gt;Scrolling Bug&lt;/a&gt; is gone for Debug builds, but alas seems to occur in Release builds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2030051156907948688?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Debug.zip' title='Updated WebKit Build'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2030051156907948688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2030051156907948688' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2030051156907948688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2030051156907948688'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/03/updated-webkit-build.html' title='Updated WebKit Build'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-5963510328254349235</id><published>2009-02-14T23:05:00.001-08:00</published><updated>2009-02-14T23:15:41.217-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opencflite'/><title type='text'>OpenCFLite 476.17.1 Release</title><content type='html'>A few weeks ago, another Linux hacker named Grant Erickson contacted me to suggest joining forces on the CF-lite front.  He had done some work porting the 299 version of CF-lite to Linux, and had stumbled across my more recent port of the 476.17 sources to the Windows platform (needed in support of my redistributable Windows WebKit project.)  Grant has now successfully merged his sources into the archive, and we are now feature-compatible on Mac OS X, Windows, and Linux.&lt;br /&gt;&lt;br /&gt;We are attempting to track Apple's upstream CF-lite source tree, and so our number scheme is to use their version with a third digit added to represent our revision.  We initially released as 476.17.0, but now have fixed a few bugs, added some more examples, and cleaned things up.&lt;br /&gt;&lt;br /&gt;CF-lite isn't as sexy as &lt;a href="http://webkit.org"&gt;WebKit&lt;/a&gt;, or even &lt;a href="http://developer.apple.com/opensource/internet/bonjour.html"&gt;Bonjour&lt;/a&gt;, but is a quite useful, cross-platform abstraction that provides a generally useful toolkit that is the basis for a variety of Apple products.  Although it is pure C, it has a nice Object Oriented design and is quite easy to learn.&lt;br /&gt;&lt;br /&gt;If you haven't &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=246198"&gt;looked into it&lt;/a&gt;, please give it a glance.  Mac OS X developers can especially benefit, since its objects are toll-free-bridged to Objective C, making it a breeze to compose high and low-level code in your software.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-5963510328254349235?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/forum/forum.php?forum_id=917779' title='OpenCFLite 476.17.1 Release'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/5963510328254349235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=5963510328254349235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5963510328254349235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/5963510328254349235'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/02/opencflite-476171-release.html' title='OpenCFLite 476.17.1 Release'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-490201905546991210</id><published>2009-01-29T15:29:00.000-08:00</published><updated>2009-01-29T23:05:51.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Callback Examples</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/SYI9PooWqpI/AAAAAAAAAHY/fnH6GvttR7A/s1600-h/CallJS.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 316px;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/SYI9PooWqpI/AAAAAAAAAHY/fnH6GvttR7A/s320/CallJS.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5296863450555132562" /&gt;&lt;/a&gt;&lt;br /&gt;Now that there is just a &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=17484"&gt;small patch&lt;/a&gt; left until all the WebKit Cairo changes are in the main tree, I've been spending a bit of time attempting to incorporate WebKit into actual applications.&lt;br /&gt;&lt;br /&gt;Apple provides some &lt;a href="http://developer.apple.com/documentation/Cocoa/Conceptual/DisplayWebContent/DisplayWebContent.html"&gt;documentation&lt;/a&gt; on using WebKit inside other programs, as well as a few &lt;a href="http://developer.apple.com/samplecode/CallJS/index.html"&gt;samples&lt;/a&gt; to show how it's done.&lt;br /&gt;&lt;br /&gt;Unfortunately, the examples don't help much if you are needing to use WebKit on the Windows platform, so I have ported the &lt;a href="http://developer.apple.com/samplecode/CallJS/index.html"&gt;CallJS&lt;/a&gt; sample to MFC.  While this may be a violation of one of the Geneva Conventions, I hope that this example will be educational, and will help in the uptake of the WebKit project.&lt;br /&gt;&lt;br /&gt;I've posted a set of &lt;a href="http://idisk.mac.com/bfulgham-Public/CallJS.zip"&gt;Debug binaries&lt;/a&gt; that include the CallJS example.  I haven't tried them outside my own build environment, but they should give a bit of a head start to using the component.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-490201905546991210?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://developer.apple.com/samplecode/CallJS/index.html' title='Callback Examples'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/490201905546991210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=490201905546991210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/490201905546991210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/490201905546991210'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/01/callback-examples.html' title='Callback Examples'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/SYI9PooWqpI/AAAAAAAAAHY/fnH6GvttR7A/s72-c/CallJS.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3673899186611064253</id><published>2009-01-11T14:24:00.000-08:00</published><updated>2009-01-14T11:11:20.198-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Google and Chromium</title><content type='html'>&lt;em&gt;Update:&lt;/em&gt;Proving once again the Google is a company that &lt;a href="http://www.google.com/corporate/tenthings.html"&gt;tries to do no evil&lt;/a&gt;, the Chromium team have updated their &lt;a href="http://googlechromereleases.blogspot.com/2009/01/dev-update-new-webkit-version-new.html"&gt;announcement&lt;/a&gt; to more clearly identify the origins of the full page zoom and autoscroll features.  Thanks guys!&lt;br /&gt;&lt;br /&gt;I think Google is a really cool company, and I use their products and services every day.  From their excellent search engine, to the great &lt;a href="http://research.google.com/video.html"&gt;technical lectures&lt;/a&gt; they show on You Tube, to discussing the burning questions of the day (such as &lt;a href="http://googleblog.blogspot.com/2008/12/pirates-vs-ninjas-who-would-win.html"&gt;Pirates-vs-Ninjas&lt;/a&gt;), they provide a huge amount of benefit to the world at large.  I love Google! (In fact, I couldn't even write this screed were it not for the services Google provides ;-)&lt;br /&gt;&lt;br /&gt;However, just like when a family member does something crappy to you, I do feel that the publicity for their &lt;a href="http://www.google.com/chrome/"&gt;Chrome&lt;/a&gt; browser project has been somewhat disingenuous in their discussion of the benefits derived from the &lt;a href="http://webkit.org"&gt;WebKit&lt;/a&gt; project.&lt;br /&gt;&lt;br /&gt;Take for example their recent &lt;a href="http://googlechromereleases.blogspot.com/2009/01/dev-update-new-webkit-version-new.html"&gt;announcement&lt;/a&gt;, or their ongoing &lt;a href="http://googlechromereleases.blogspot.com/"&gt;blog&lt;/a&gt;.  Among their new features and bug fixes attributed to the Chromium team, they highlight two significant new features that were both provided by the WebKit project:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://webkit.org/blog/165/full-page-zoom/"&gt;Full page zoom&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://trac.webkit.org/changeset/35083/trunk/WebCore/page/EventHandler.cpp"&gt;Autoscroll&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;There is also a bit of vague hand waving about the great tools in Chrome, including the &lt;a href="http://webkit.org/blog/197/web-inspector-redesign/"&gt;Web Inspector&lt;/a&gt; and ACID 3 compliance, both of which are actually provided by WebKit.&lt;br /&gt;&lt;br /&gt;If you delve down into the detailed &lt;a href="http://dev.chromium.org/getting-involved/dev-channel/release-notes"&gt;release notes&lt;/a&gt;, you can find reference to these facts, but to the typical reader this work all seems to have been done by Google.&lt;br /&gt;&lt;br /&gt;Now, things certainly go both ways -- for example, we hope to get new bitmap rendering support in Windows from the Chromium team, and their threading and other low-level updates have been very useful.   But I would hope that both of our projects would want to provide correct attribution, and at least for now this does not seem to be true for the Chromium publicists.&lt;br /&gt;&lt;br /&gt;But is it so much to ask for there to be proper attribution?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3673899186611064253?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://googlesystem.blogspot.com/2009/01/google-chrome-20-pre-beta.html' title='Google and Chromium'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3673899186611064253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3673899186611064253' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3673899186611064253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3673899186611064253'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/01/google-and-chromium.html' title='Google and Chromium'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2447856512473983495</id><published>2009-01-11T14:04:00.000-08:00</published><updated>2009-01-11T14:15:43.217-08:00</updated><title type='text'>Closing in on full merge</title><content type='html'>It's been a few weeks since my last post, but there has been a lot of activity going on.  Thanks to some recent commits by the &lt;a href="http://code.google.com/chromium/"&gt;chromium&lt;/a&gt; team, much of the pthreads dependencies that crept in have been removed.  Unfortunately, there is still some bits of it left over in FastMalloc.h and Allocator.h, but hopefully these can be removed in the near future.&lt;br /&gt;&lt;br /&gt;Even more exciting for me is that thanks to the patient reviews by Darin Adler and Adam Roben, I have finally gotten the bulk of the &lt;a href="http://developer.apple.com/DOCUMENTATION/Networking/Conceptual/CFNetwork/Introduction/chapter_1_section_1.html"&gt;CFNetwork&lt;/a&gt; code in WebKit.dll separated into separate implementation files.  Right now the &lt;a href="http://curl.haxx.se/"&gt;cURL&lt;/a&gt; implementation is mostly stub, but this will be changing over the next few weeks.&lt;br /&gt;&lt;br /&gt;The redistributable port of WebKit is now a mere &lt;a href="https://bugs.webkit.org/attachment.cgi?id=26615"&gt;7.5 kB of changes&lt;/a&gt; from the ToT.&lt;br /&gt;&lt;br /&gt;We're almost there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2447856512473983495?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=17484' title='Closing in on full merge'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2447856512473983495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2447856512473983495' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2447856512473983495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2447856512473983495'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2009/01/closing-in-on-full-merge.html' title='Closing in on full merge'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7479603162739043845</id><published>2008-11-25T16:22:00.000-08:00</published><updated>2008-11-25T17:32:33.006-08:00</updated><title type='text'>A Redistributable WebKit</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SSyYtTei8qI/AAAAAAAAAFU/uvJKUjt0vOA/s1600-h/running.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 171px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SSyYtTei8qI/AAAAAAAAAFU/uvJKUjt0vOA/s320/running.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5272757167833936546" /&gt;&lt;/a&gt;Well, it's taken a long time to get to this point, but at long last I have managed to get a working version of WebKit that does not use any proprietary Apple libraries.  I have posted a &lt;a href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Release.zip"&gt;Release&lt;/a&gt; and &lt;a href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Debug.zip"&gt;Debug&lt;/a&gt; build, with the WinLauncher program that produced the accompanying image.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I have updated &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=17484"&gt;17484&lt;/a&gt; with the necessary diff to build the software.  You will also need various build &lt;a href="http://idisk.mac.com/bfulgham-Public/requirements.zip"&gt;requirements&lt;/a&gt;, including builds of CFLite.dll that take the place of CoreFoundation.dll.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This WebKit differs from the true Safari webkit as follows:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;No support for QuickTime movies.&lt;/li&gt;&lt;li&gt;CFNetwork is replaced by cURL, which implies some reduced functionality and poorer support for concurrent/asynchronous connections.&lt;/li&gt;&lt;li&gt;CoreFoundation is replaced by CFLite, which for the purposes of WebKit should not imply any performance or functionality regression.&lt;/li&gt;&lt;li&gt;CoreGraphics is replaced by Cairo.  This generally trails the CoreGraphics implementation, but provides reasonable performance and functionality.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Please give these binaries a try and let me know if I forgot any dependencies.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7479603162739043845?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7479603162739043845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7479603162739043845' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7479603162739043845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7479603162739043845'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/11/redistributable-webkit.html' title='A Redistributable WebKit'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SSyYtTei8qI/AAAAAAAAAFU/uvJKUjt0vOA/s72-c/running.png' height='72' width='72'/><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7084163727790800914</id><published>2008-11-25T12:21:00.000-08:00</published><updated>2008-11-25T12:31:30.416-08:00</updated><title type='text'>Core Foundation Moved</title><content type='html'>As many of you may know, Google has taken a strong stance against the proliferation of software licenses.  Clearly this is a good thing, as a great many of these licenses are virtually identical, modulo some trademark or name changes.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, one of the licenses not officially supported by Google is the &lt;a href="http://www.opensource.apple.com/apsl/"&gt;Apple Public Source License&lt;/a&gt;, under which the &lt;a href="http://www.opensource.apple.com/darwinsource/Current/CF-476.15/"&gt;CF Lite sources&lt;/a&gt; are released.  Consequently, I was asked to move the source hosting to a location where this license can be clearly documented.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most obvious location for an APSL project would be MacOS Forge.  However, Apple preferred to not provide hosting on &lt;a href="http://www.macosforge.org/"&gt;Mac OS Forge&lt;/a&gt; until CF Lite was proven to have a meaningful set of users, and that it seemed to be actively maintained.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happily, Sourceforge does support the APSL as a valid licensing option on their projects, so the code has been moved &lt;a href="https://sourceforge.net/svn/?group_id=246198"&gt;there&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7084163727790800914?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://sourceforge.net/svn/?group_id=246198' title='Core Foundation Moved'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7084163727790800914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7084163727790800914' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7084163727790800914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7084163727790800914'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/11/core-foundation-moved.html' title='Core Foundation Moved'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-761511410693846532</id><published>2008-11-22T23:34:00.000-08:00</published><updated>2008-11-25T12:21:18.394-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>CoreFoundation Gone?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SSkH40EPKXI/AAAAAAAAAFM/j0ncKgzEo5o/s1600-h/Picture+1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 219px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SSkH40EPKXI/AAAAAAAAAFM/j0ncKgzEo5o/s320/Picture+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5271753511444359538" /&gt;&lt;/a&gt;One of the major impediments to using WebKit on Windows (assuming you are not writing software for Apple) is that the implementation relies on a suite of proprietary support libraries, such as CoreGraphics, CoreFoundation, and CFNetwork.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Readers of this blog will be familiar with some of the steps I have taken to attempt to mitigate this by using Cairo (rather than CoreGraphics) and Curl (rather than CFNetwork).  However, there still remained large bits of logic written to use various useful data types and operating system support logic found in CoreFoundation.  While performing the tedious task of replacing these routines with equivalent code held limited appeal, the vision of maintaining these mirror routines in perpetuity while the Apple WebKit team marched ever forward with new features and functionality left me curled in the fetal position calling for my mother.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, rather than attempt to replicate the FontDatabase routines and other logic in WebKit proper, I decided to start a new project to bring the &lt;a href="http://developer.apple.com/opensource/cflite.html"&gt;Open Source Core Foundation (CF Lite)&lt;/a&gt; into closer compliance with the 'real' CoreFoundation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It took about a week of on-and-off hacking to take the &lt;a href="http://www.opensource.apple.com/darwinsource/"&gt;raw tarball&lt;/a&gt; provided by Apple on their Open Source site and get it building and running on Windows.  Since I mostly hack on my Mac, I also created an Xcode project so I could confirm function on both platforms.  I intend to also port it to Linux once I have some spare time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The sources are mostly complete, and easy to build on OS X using darwinbuild.  However, the instructions on Apple's website are out of date, and the posted example program doesn't even work in the version of CF-Lite (299) referenced on the page.  There are no working instructions or Makefiles for building the current Leopard-based sources on Windows (&lt;a href="rdar://problem/6370092"&gt;bug filed.&lt;/a&gt;) Furthermore, a lot of the Windows-specific code that appeared in earlier releases seems to have been stripped out in later releases. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thankfully, by reviewing every one of the released CF-Lite tarballs, I was able to piece together much of what was missing.  It is unfortunate that the Open Source source omits (or in some cases excludes via "#if 0" stanzas) the Windows versions of these routines.  I took the opportunity to file some &lt;a href="rdar://problems/6386417&amp;amp;6370058"&gt;radar bugs &lt;/a&gt;about this as well.  To add insult to injury, after getting the project building I discovered that &lt;a href="http://karaoke.kjams.com/wiki/CFLite"&gt;someone else &lt;/a&gt;had gotten parts of it working (though with some bugs), which would have saved some time if I had been more proficient in my Googling.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The upshot of this long post is that I have successfully launched WinLauncher and browsed to the cf-lite project using WebKit built with the redistributable CFLite.dll (see image above!).&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now, I'm starting to glance meaningfully towards the original CFNetwork source releases ...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;Update: &lt;/span&gt; I have had to move the project to &lt;a href="https://sourceforge.net/svn/?group_id=246198"&gt;SourceForge&lt;/a&gt;, as Google Code does not support the use of the Apple Public Source License for its projects.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-761511410693846532?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://sourceforge.net/svn/?group_id=246198' title='CoreFoundation Gone?'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/761511410693846532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=761511410693846532' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/761511410693846532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/761511410693846532'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/11/corefoundation-gone.html' title='CoreFoundation Gone?'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SSkH40EPKXI/AAAAAAAAAFM/j0ncKgzEo5o/s72-c/Picture+1.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8381131534100384215</id><published>2008-11-09T21:00:00.000-08:00</published><updated>2008-11-09T21:24:36.699-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='factor'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Factor</title><content type='html'>I finally managed to finish watching the &lt;a href="http://www.youtube.com/watch?v=f_0QlhYlS8g"&gt;Google Techtalk&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/slavapestov"&gt;Slava Pestov&lt;/a&gt; recently presented at Google.  If you are not familiar with the &lt;a href="http://factorcode.org/"&gt;Factor&lt;/a&gt; programming language, let me make the tasteless move of quoting myself from two years ago:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The main author, Slava, has poured a tremendous amount of energy into this project, and the results show. Where many similar projects chug along as console-only systems, building on a single platform, and limited to simple console interaction, Factor provides a built-in GUI system (based on an OpenGL widget set), embedded help, searchable function reference, tutorials, and examples. If a language can be judged on its merits (rather than peer pressure), Factor sure seems to have a lot of things going for it.&lt;/blockquote&gt;&lt;br /&gt;If anything, this is more true now than then.  The language has grown in features, efficiency, and clarity and seems to have a small, yet prolific, kernel of extremely talented developers moving it forward.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;While I am no Factor expert, I am continually amazed at the quality of work produced on this project, and am enjoying learning more about it.  If you haven't had a chance yet, please check it out!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8381131534100384215?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=f_0QlhYlS8g' title='Factor'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8381131534100384215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8381131534100384215' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8381131534100384215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8381131534100384215'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/11/factor.html' title='Factor'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-7875068030199321513</id><published>2008-10-22T21:41:00.001-07:00</published><updated>2008-11-09T21:34:29.282-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Fonts Fixed (sort-of)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/SQABxKWzlII/AAAAAAAAAFE/GXa__HcJDEs/s1600-h/Picture+1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 298px;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/SQABxKWzlII/AAAAAAAAAFE/GXa__HcJDEs/s320/Picture+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5260206308873966722" /&gt;&lt;/a&gt;&lt;br /&gt;With the help of the good &lt;a href="http://en.wikipedia.org/wiki/Dave_Hyatt"&gt;Dave Hyatt&lt;/a&gt;, I managed to track down the cause of the strange font behavior in the Cairo port.  As it turns out, the problem was actually also present in the CG port, but had a slightly more benign failure mode.&lt;br /&gt;&lt;br /&gt;You can read the gory details &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=21811"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You will also need the following two patches:&lt;br /&gt;&lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17484"&gt;17484&lt;/a&gt; and &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=21822"&gt;&lt;strike&gt;21822&lt;/strike&gt;&lt;/a&gt;.  These should be the only two patches needed, as 17484 contains a diff against my current sources, and should apply cleanly against svn trunk (at least for the next few minutes!  :-))&lt;br /&gt;&lt;br /&gt;You may also need the following changes in your WebCore/config.h to flip the proper compiler switches.  I hope to someday get this addressed properly in WebKit itself:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Index: WebCore/config.h&lt;br /&gt;===================================================================&lt;br /&gt;--- WebCore/config.h (revision 37798)&lt;br /&gt;+++ WebCore/config.h (working copy)&lt;br /&gt;@@ -96,9 +96,16 @@&lt;br /&gt; #endif&lt;br /&gt; &lt;br /&gt; #if PLATFORM(WIN)&lt;br /&gt;+#if 0&lt;br /&gt; #define WTF_PLATFORM_CG 1&lt;br /&gt; #undef WTF_PLATFORM_CAIRO&lt;br /&gt; #define WTF_USE_CFNETWORK 1&lt;br /&gt;+#else&lt;br /&gt;+#undef WTF_PLATFORM_CG&lt;br /&gt;+#define WTF_PLATFORM_CAIRO 1&lt;br /&gt;+#undef WTF_USE_CFNETWORK&lt;br /&gt;+#define WTF_USE_CURL 1&lt;br /&gt;+#endif&lt;br /&gt; #undef WTF_USE_WININET&lt;br /&gt; #define WTF_PLATFORM_CF 1&lt;br /&gt; #define WTF_USE_PTHREADS 0&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7875068030199321513?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7875068030199321513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7875068030199321513' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7875068030199321513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7875068030199321513'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/10/fonts-fixed-sort-of.html' title='Fonts Fixed (sort-of)'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/SQABxKWzlII/AAAAAAAAAFE/GXa__HcJDEs/s72-c/Picture+1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3319344900366914188</id><published>2008-10-18T19:44:00.000-07:00</published><updated>2008-11-09T21:34:29.282-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Performance</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SPqf415_EdI/AAAAAAAAAE4/xQdgBb_tkMg/s1600-h/Picture+2.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SPqf415_EdI/AAAAAAAAAE4/xQdgBb_tkMg/s320/Picture+2.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258691313800253906" /&gt;&lt;/a&gt;&lt;br /&gt;I was recently asked about the performance of the Cairo-based Webkit.  As a first cut I tried running SunSpider to see what would happen.  Unfortunately, it identified a serious bug in the WebKit Cairo port, in that the font handling appears to be screwed up.  Consider the following screenshot...&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It appears that the build is not dealing with code elements properly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By the way, anyone interested in playing with the Release or Debug binaries of this webkit is welcome to grab the &lt;a href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Debug.zip"&gt;Debug&lt;/a&gt; or &lt;a  href="http://idisk.mac.com/bfulgham-Public/WebKit_Cairo_Release.zip"&gt;Release&lt;/a&gt; ZIP files.  They have been tested on one external system, so I believe all dependencies are in the archives, but please let me know if you have any problems.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3319344900366914188?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www2.webkit.org/perf/sunspider-0.9/sunspider-results.html?%7B%223d-cube%22:%5B205,212,214,209,215%5D,%223d-morph%22:%5B204,203,202,203,204%5D,%223d-raytrace%22:%5B192,193,207,198,193%5D,%22access-binary-trees%22:%5B68,66,67,69,67%5D,%22access-' title='Performance'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3319344900366914188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3319344900366914188' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3319344900366914188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3319344900366914188'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/10/performance.html' title='Performance'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/SPqf415_EdI/AAAAAAAAAE4/xQdgBb_tkMg/s72-c/Picture+2.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6318119879115368280</id><published>2008-10-17T22:46:00.000-07:00</published><updated>2008-11-09T21:34:29.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>BitRot Beaten Back</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SPl5TXh-kTI/AAAAAAAAAEw/43k4GDKB6To/s1600-h/Picture+1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SPl5TXh-kTI/AAAAAAAAAEw/43k4GDKB6To/s320/Picture+1.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5258367413572768050" /&gt;&lt;/a&gt;&lt;br /&gt;I spent a few hours this evening getting the current source base of WebKit to build as a Cairo-based project.  I updated my Cairo library to 1.8, which gave the added benefit of getting the &lt;a href="http://people.mozilla.com/~vladimir/demos/photos.svg"&gt;photo.svg&lt;/a&gt; test to work properly.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Whee!  Spinning, twirling, alpha-blending fun.&lt;br /&gt;&lt;br /&gt;See &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=21724"&gt;Bug &lt;strike&gt;21724&lt;/strike&gt;&lt;/a&gt; for the first set of patches.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Additional patches are still needed to get WebKit working, as there is a ton of CFNetwork, WebKitSystemInterface, and other Apple-restricted dependencies that have to be excised.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6318119879115368280?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://bugs.webkit.org/show_bug.cgi?id=21724' title='BitRot Beaten Back'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6318119879115368280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6318119879115368280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6318119879115368280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6318119879115368280'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/10/bitrot-beaten-back.html' title='BitRot Beaten Back'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/SPl5TXh-kTI/AAAAAAAAAEw/43k4GDKB6To/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8509753041143071497</id><published>2008-07-14T21:26:00.000-07:00</published><updated>2008-07-14T23:16:46.310-07:00</updated><title type='text'>Succumbing to the Madness</title><content type='html'>This isn't really WebKit related, unless you include things that *use* WebKit.  I got up early on 7/11, stood in line, and plunked down my cash for a new iPhone 3G.  I knew it was going to be cool from playing with my brother-in-law's original iPhone, but until I had my own unit I really had no idea how absolutely amazing this device is.&lt;br /&gt;&lt;br /&gt;In some ways, I'm glad I ended up having to grovel for a year to convince my wife that I deserved to blow hundreds of dollars on a cell phone.  Although the guts of the phone are mostly unchanged (i.e., it's not as though it has a faster ARM chip or a built-in death ray), it seems to have matured a bit in its first year.  It does have very nice network capability, the best sound quality of any mobile phone I have every used, and what seems to be a nice GPS subsystem; at least, it finds me on the Google map in seconds and provides nice a nice map overlay with a cool blinking dot showing my position as I drive around.&lt;br /&gt;&lt;br /&gt;But I think the best way to sum up the experience is one word:  Joy.  The iPhone is just a joy to use.  The interface fairly oozes fun and cleverness.  The interactions are quick, simple, and obvious.  The screen is large enough that meaningful information is presented clearly; no more cryptic error codes blinking sourly in pixellated monochrome.&lt;br /&gt;&lt;br /&gt;So it was with no small pleasure that I stumbled across &lt;a href="http://www.thestandard.com/news/2008/07/10/iphone-naysayers-one-year-later?page=0%2C0"&gt;a great article&lt;/a&gt; revisiting some naysaying technical writers predicting the iPhone's sure failure.  Most come across as buffoons (typical follow-up question, "Are you surprised at how well the iPhone has done?", answer from writer "No, I'm not surprised -- it's a great phone."  Huh?  Then why did you think it would fail in the first place !?!).  I think the big problem is that most of these 'visionaries' are the kind of vaguely creepy men of a certain age who sport suspiciously bushy mustaches, mid-70's tinted eyeglasses, and an inexplicable penchant for secreting multiple black plastic devices on their person.  I remember the IT guy at my last company who carried no fewer than three pagers, a cell phone, and a blackberry (on an improvised batman-style utility belt) to meet his exacting telecommunications needs.  To guys like these, I'm sure the iPhone does seem undesirable as no single piece of consumer electronics can possibly provide the same level of bulky electronic gravitas&lt;br /&gt;&lt;br /&gt;To me, it just feels so pleasant to have a single device that satisfies these many tasks, and doesn't leave you looking like you still live with your mother.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8509753041143071497?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.apple.com/iphone' title='Succumbing to the Madness'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8509753041143071497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8509753041143071497' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8509753041143071497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8509753041143071497'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/07/succumbing-to-madness.html' title='Succumbing to the Madness'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-3512226750919659377</id><published>2008-05-28T12:50:00.000-07:00</published><updated>2008-11-09T21:34:29.283-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Bit Rot</title><content type='html'>After a nearly two-month self-imposed death march in "the real world", I've gotten back to my WebKit hacking.  As expected, several aspects of the build process were broken, but it was exciting to see the massive progress on almost all fronts.&lt;br /&gt;&lt;br /&gt;First, daddy-o Hyatt managed to get CSS gradients working nicely, and I'm pleased to report that this came through in the Cairo build flawlessly:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SD24fhdmVlI/AAAAAAAAAEY/IBJAKRZKb6E/s1600-h/generated_gradients.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SD24fhdmVlI/AAAAAAAAAEY/IBJAKRZKb6E/s320/generated_gradients.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5205519596008134226" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, Dave implemented shadows for fonts, which also works properly:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/SD25PRdmVmI/AAAAAAAAAEg/Om16uCNbw_I/s1600-h/shadow.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/SD25PRdmVmI/AAAAAAAAAEg/Om16uCNbw_I/s320/shadow.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5205520416346887778" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, image reflection is working:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/SD29whdmVnI/AAAAAAAAAEo/NPbS6VS05Jc/s1600-h/reflect.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/SD29whdmVnI/AAAAAAAAAEo/NPbS6VS05Jc/s320/reflect.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5205525385624049266" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's really amazing how much functionality is present in a modern web engine, and that so much of it works without having to do much under the Cairo-backed Windows build.&lt;br /&gt;&lt;br /&gt;To recreate this build on your own (and I hope you do so we can verify everything is getting properly committed to the archive) you will have to add a few pending patches to the WebKit SVN source tree.:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;As before, you will need to add &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17730"&gt;17730&lt;/a&gt; to get cURL support, as well as some odds-and-ends in &lt;a href="https://bugs.webkit.org/show_bug.cgi?id=17484"&gt;17484&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;You may still want to extend &lt;strong&gt;build-webkit&lt;/strong&gt; with the &lt;strong&gt;--cairo&lt;/strong&gt; flag, as coded in &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17952"&gt;17952&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3512226750919659377?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webkit.org/' title='Bit Rot'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3512226750919659377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3512226750919659377' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3512226750919659377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3512226750919659377'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/05/bit-rot.html' title='Bit Rot'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/SD24fhdmVlI/AAAAAAAAAEY/IBJAKRZKb6E/s72-c/generated_gradients.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3873258017386862825</id><published>2008-03-21T14:00:00.000-07:00</published><updated>2008-11-09T21:34:29.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>cURL, Grokking those URL's</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/R-QiUD5Ue5I/AAAAAAAAAEQ/QRERXkDCtEc/s1600-h/curl.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/R-QiUD5Ue5I/AAAAAAAAAEQ/QRERXkDCtEc/s320/curl.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5180303199421365138" /&gt;&lt;/a&gt;With help from Daniel Zucker at Wake3.com, the wxWindows and GTK+ teams, and the folks on #webkit we've finally got a building version of WebKit that does not rely on CFNetwork.  Instead, it uses the same &lt;a href="http://curl.haxx.se"&gt;cURL&lt;/a&gt; backend as wxWindows and GTK+ to handle network interaction, URL parsing, and so forth.&lt;br /&gt;&lt;br /&gt;Currently this work is pending review at &lt;a href="http://webkit.org"&gt;WebKit.org&lt;/a&gt;, under &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17730"&gt;17730&lt;/a&gt; and &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17985"&gt;&lt;strike&gt;17985&lt;/strike&gt;&lt;/a&gt;.  I've also extended the &lt;strong&gt;build-webkit&lt;/strong&gt; interface to support a new &lt;strong&gt;--cairo&lt;/strong&gt; flag that generates a &lt;a href="http://www.cairographics.org"&gt;Cairo&lt;/a&gt;/&lt;a href="http://curl.haxx.se"&gt;cURL&lt;/a&gt; build.  You can find this (also pending) under &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17952"&gt;17952&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that you will probably need to apply some final WebKit patches to get a clean build.  See &lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17484"&gt;17484&lt;/a&gt; for this handful of changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3873258017386862825?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://curl.haxx.se/' title='cURL, Grokking those URL&apos;s'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3873258017386862825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3873258017386862825' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3873258017386862825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3873258017386862825'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/03/curl-grokking-those-urls.html' title='cURL, Grokking those URL&apos;s'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/R-QiUD5Ue5I/AAAAAAAAAEQ/QRERXkDCtEc/s72-c/curl.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-2311037575885753003</id><published>2008-03-07T20:22:00.000-08:00</published><updated>2008-11-09T21:34:29.284-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Acid Trip</title><content type='html'>There's been a lot of &lt;a href="http://www.microsoft.com/presspass/press/2008/mar08/03-03WebStandards.mspx"&gt;press&lt;/a&gt; recently, announcing the excellent support for the &lt;a href="http://acid2.acidtests.org"&gt;Acid 2&lt;/a&gt; test.  Since I've recently become a bit of a &lt;a href="http://webkit.org"&gt;Web Implementation Enthusiast&lt;/a&gt;, I thought I'd see how the nascent Cairo WebKit implementation would do:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/R9IW0pc78QI/AAAAAAAAADg/ISiY-TRDVWs/s1600-h/Picture+1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/R9IW0pc78QI/AAAAAAAAADg/ISiY-TRDVWs/s320/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5175224015538352386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How about that?  Even with all the code we have commented out of WebKit's Cairo version, it still achieves a perfect Acid2 score.&lt;br /&gt;&lt;br /&gt;But what of Acid3?  Perhaps unsurprisingly, it scores quite well -- 90/100.  This is the same score as the main WebKit implementation.  It's better than I would have expected, given that there are certainly several things that are not completely implemented in the Cairo back-end.  However, these are apparently not important to the score of this particular test:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/R9IXyJc78RI/AAAAAAAAADo/nEujENgbrd8/s1600-h/Picture+2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/R9IXyJc78RI/AAAAAAAAADo/nEujENgbrd8/s320/Picture+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5175225072100307218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is also a bit disingenuous;  there is a font destruction problem that (depending on timing) causes the implementation to crash.  But after loading the page a couple of times, I managed to get the test to run to completion.  There's another bit of tomfoolery; this build of Cairo Webkit is still linking against Apple's proprietary CFNetwork.  Once we cut over to the Curl back-end, this is certain to cause new woes.&lt;br /&gt;&lt;br /&gt;But for today, we can chuckle smugly at IE 8 and its standards compliance.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-2311037575885753003?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://acid2.acidtests.org' title='Acid Trip'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/2311037575885753003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=2311037575885753003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2311037575885753003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/2311037575885753003'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/03/acid-trip.html' title='Acid Trip'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/R9IW0pc78QI/AAAAAAAAADg/ISiY-TRDVWs/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7470430869238632314</id><published>2008-02-26T22:35:00.000-08:00</published><updated>2008-11-09T21:34:29.285-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>JavaScriptCore Benchmarking</title><content type='html'>Although the core WebKit team has already created their own comprehensive &lt;a href="http://webkit.org/perf/sunspider-0.9/sunspider.html"&gt;javascript testing suite&lt;/a&gt;, I thought it would be fun to throw it into the pile of language implementations I like to play with in my other &lt;a href="http://shootout.alioth.debian.org"&gt;favorite waste of time&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://shootout.alioth.debian.org/sandbox/chartvs.php?test=all&amp;lang=jsc&amp;lang2=javascript"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://shootout.alioth.debian.org/sandbox/chartvs.php?test=all&amp;lang=jsc&amp;lang2=javascript" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Of course, it wasn't quite possible to run all tests initially.  JavaScriptCore did not have support for handling command line arguments, and was not built to use readline to handle standard input.  But a few hours after the initial discussion on #webkit, a revised command line utility was available satisfying all the necessary requirements.&lt;br /&gt;&lt;br /&gt;The results are a bit mixed, though the overall score for JavaScriptCore beats a recent CVS version of &lt;a href="http://www.mozilla.org/js/spidermonkey/"&gt;Spidermonkey&lt;/a&gt;.  Let the arm's race wage on!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7470430869238632314?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://shootout.alioth.debian.org/sandbox/jsc.php' title='JavaScriptCore Benchmarking'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7470430869238632314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7470430869238632314' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7470430869238632314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7470430869238632314'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/javascriptcore-benchmarking.html' title='JavaScriptCore Benchmarking'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8680354572548812593</id><published>2008-02-21T14:20:00.001-08:00</published><updated>2008-11-09T21:34:29.285-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>WebKit Scrollbars!</title><content type='html'>It was fairly easy to revive the existing Windows rendering under WebKit.  Scrollbars, however, turned out to be fairly tricky.  The basic problem is that unlike all other rendered objects in the frame, Scrollbars are not rendered through the usual pipeline.  Instead, a separate infrastructure is in place to hook into the scrollbar controls.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/R735TLihs5I/AAAAAAAAADY/kY-EnAZUAuk/s1600-h/scrollbars.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/R735TLihs5I/AAAAAAAAADY/kY-EnAZUAuk/s320/scrollbars.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5169562055201633170" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Eventually, the theme logic in WebKit will be refactored such that rendering is done mostly the same way across the board, with individual 'theme' objects that do the actual work of drawing the widgets.&lt;br /&gt;&lt;br /&gt;For now, I ended up having to duplicate logic from RenderThemeWin in PlatformScrollbarWin to load the them library and draw.&lt;br /&gt;&lt;br /&gt;I also attempted to retain the 'legacy' windows drawing commands, though this has received no testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8680354572548812593?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.webkit.org' title='WebKit Scrollbars!'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8680354572548812593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8680354572548812593' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8680354572548812593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8680354572548812593'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/webkit-scrollbars.html' title='WebKit Scrollbars!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/R735TLihs5I/AAAAAAAAADY/kY-EnAZUAuk/s72-c/scrollbars.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7297892501175635608</id><published>2008-02-14T20:38:00.000-08:00</published><updated>2008-11-09T21:34:29.286-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>CURLing -- Not just for the Winter Olympics</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/R7UXibihs4I/AAAAAAAAADQ/w-WLR2K3nUc/s1600-h/Picture+1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/R7UXibihs4I/AAAAAAAAADQ/w-WLR2K3nUc/s320/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5167062027753075586" /&gt;&lt;/a&gt;Despite &lt;a href="http://www.opensource.apple.com/darwinsource/10.4.10.ppc/CFNetwork-129.20/"&gt;historical precedent&lt;/a&gt;, I was told today that Apple would "not be able to make the CFNetwork sources available going forward."  It appears that Mac OS 10.4.10 appears to be the last version in which the sources are available.&lt;br /&gt;&lt;br /&gt;What does that mean for the WebKit port?   In practice, not a whole lot.  I had been intending to use the Windows INET features to implement this code layer.  However, the amount of effort required is probably greater than I want to take on, while having an equivalently low level of "fun" such that I don't intend to do much to hook it together.&lt;br /&gt;&lt;br /&gt;Instead, I plan on using the existing CURL logic under Windows, which solves the CFNetwork problem and allows me to reuse the existing code built by other users.&lt;br /&gt;&lt;br /&gt;Of course, there is some hope that one of the Windows Mobile ports might have something available that could be used, but so far there has been lots of talk but not much code actually submitted by any of the WebKit mobile porters.  Hopefully that will change soon.&lt;br /&gt;&lt;br /&gt;Finally, I have somewhat working scrollbars.  You can't tell from the above screenshot, but the while blank area on the right-hand side is a functioning scrollbar that doesn't now how to paint itself.  Although it's invisible, it does move the page around as desired.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7297892501175635608?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://curl.haxx.se/docs/faq.html#What_is_cURL' title='CURLing -- Not just for the Winter Olympics'/><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7297892501175635608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7297892501175635608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7297892501175635608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7297892501175635608'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/curling-not-just-for-winter-olympics.html' title='CURLing -- Not just for the Winter Olympics'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/R7UXibihs4I/AAAAAAAAADQ/w-WLR2K3nUc/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4220999005595771793</id><published>2008-02-12T10:26:00.001-08:00</published><updated>2008-11-09T21:34:29.286-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>WebKit Success!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/R7HlB7ihs3I/AAAAAAAAADI/nKIvkJVzjHQ/s1600-h/success.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/R7HlB7ihs3I/AAAAAAAAADI/nKIvkJVzjHQ/s320/success.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5166162068895806322" /&gt;&lt;/a&gt;Well, it only took uber-hacker &lt;a href="http://www.atoker.com/blog/"&gt;Alp&lt;/a&gt; about 5 minutes to figure out the problem I had that was causing the blank-box fonts in WebKit (see below).  Once he pointed out my problem (a stubbed-out "GlyphPage::fill" method), I was able to dredge up old Apple code, convert it to the current code base, and away we go.&lt;br /&gt;&lt;br /&gt;Patch attached to &lt;strike&gt;&lt;a href="http://bugs.webkit.org/show_bug.cgi?id=17336"&gt;this&lt;/a&gt;&lt;/strike&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4220999005595771793?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4220999005595771793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4220999005595771793' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4220999005595771793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4220999005595771793'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/success.html' title='WebKit Success!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/R7HlB7ihs3I/AAAAAAAAADI/nKIvkJVzjHQ/s72-c/success.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6126985105185376053</id><published>2008-02-11T21:59:00.000-08:00</published><updated>2008-11-09T21:34:29.287-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Another small step</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/R7E2Lbihs2I/AAAAAAAAADA/F1GvAQjdFew/s1600-h/Picture+1.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/R7E2Lbihs2I/AAAAAAAAADA/F1GvAQjdFew/s320/Picture+1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165969817569702754" /&gt;&lt;/a&gt;&lt;br /&gt;After pulling together more of the original Cairo code from the GTK, Apollo, and original Apple ports I've got WebKit/Cairo properly sizing fonts based on the metrics provided by the web layout.  Unfortunately, somewhere along the line I broke the actual rendering of the Glyphs, so now everything displays as boxes.  But at least things lay out properly, and you can actually click on the links (identifiable due to the hover effects) and visit additional pages.&lt;br /&gt;&lt;br /&gt;So here is a screenshot of Spinneret looking at the Safari page on Apple's website.  All of that nice text appears courtesy of the fact that Apple uses a lot of text images on their pages.  :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6126985105185376053?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6126985105185376053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6126985105185376053' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6126985105185376053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6126985105185376053'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/another-small-step.html' title='Another small step'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/R7E2Lbihs2I/AAAAAAAAADA/F1GvAQjdFew/s72-c/Picture+1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1028703175053961672</id><published>2008-02-11T14:55:00.000-08:00</published><updated>2008-11-09T21:34:29.287-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>Partial Text</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/R7DSsbihs1I/AAAAAAAAAC4/DzJBQSjROZQ/s1600-h/webkit_hp1.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/R7DSsbihs1I/AAAAAAAAAC4/DzJBQSjROZQ/s320/webkit_hp1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165860433342608210" /&gt;&lt;/a&gt;&lt;br /&gt;I'm moving closer to having a functional browser.  I'm definitely getting text output now.  Unfortunately, something is wrong with the layout logic such that the letters are written one on top of the other, such that the result is reminiscent of some sort of Asian glyph.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1028703175053961672?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1028703175053961672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1028703175053961672' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1028703175053961672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1028703175053961672'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/partial-text.html' title='Partial Text'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/R7DSsbihs1I/AAAAAAAAAC4/DzJBQSjROZQ/s72-c/webkit_hp1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-455689138313467712</id><published>2008-02-09T22:46:00.000-08:00</published><updated>2008-11-09T21:34:29.288-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>SVG Works Pretty Well!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/R66d7rihswI/AAAAAAAAACQ/BSMB1dmVriY/s1600-h/Picture+2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/R66d7rihswI/AAAAAAAAACQ/BSMB1dmVriY/s320/Picture+2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165239471265919746" /&gt;&lt;/a&gt;&lt;br /&gt;I'm pretty happy with how well &lt;a href="http://www.atoker.com/blog/"&gt;Alp Toker&lt;/a&gt;'s Cairo SVG backend implementation works on Windows!&lt;br /&gt;&lt;br /&gt;Now if we could just figure out a good way to get CG and Cairo WebKit to build out of a common project file!&lt;br /&gt;&lt;br /&gt;But who cares -- I can already generate/view some great SVG output that would be directly applicable to my work goals:&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;1.  Bezier curves:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/R66iRbihsxI/AAAAAAAAACY/b1Ih_UEUnuU/s1600-h/Picture+3.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/R66iRbihsxI/AAAAAAAAACY/b1Ih_UEUnuU/s320/Picture+3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165244242974585618" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2.  Chemical Structure:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/R66jzLihszI/AAAAAAAAACo/3W-Z3ntAPgk/s1600-h/Picture+5.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/R66jzLihszI/AAAAAAAAACo/3W-Z3ntAPgk/s320/Picture+5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165245922306798386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.  And various geometrical drawings:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/R66i-7ihsyI/AAAAAAAAACg/4Hk47RvFxok/s1600-h/Picture+4.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/R66i-7ihsyI/AAAAAAAAACg/4Hk47RvFxok/s320/Picture+4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5165245024658633506" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-455689138313467712?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/455689138313467712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=455689138313467712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/455689138313467712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/455689138313467712'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/svg-works-pretty-well.html' title='SVG Works Pretty Well!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/R66d7rihswI/AAAAAAAAACQ/BSMB1dmVriY/s72-c/Picture+2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8209693473157872543</id><published>2008-02-09T21:29:00.000-08:00</published><updated>2008-11-09T21:34:29.288-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webkit'/><title type='text'>WebKit on Windows</title><content type='html'>I've been working off and on for the past few weeks on getting WebKit to build and run under Windows without requiring any non-redistributable Apple libraries.  It's been pretty easy, which is almost completely due to the fact that Apple had this working originally under Cairo.  Later, they ported their own amazing CoreGraphics (see their &lt;a href="http://developer.apple.com/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_intro/chapter_1_section_1.html"&gt;Quartz&lt;/a&gt; and &lt;a href="http://developer.apple.com/documentation/GraphicsImaging/Conceptual/ImageKitProgrammingGuide/Introduction/chapter_1_section_1.html"&gt;Image Kit&lt;/a&gt; for some ideas of this great framework) to Windows, and based Safari on it.  This has the great advantage of providing nearly per-pixel accuracy on both platforms, resulting in a great user experience.&lt;br /&gt;&lt;br /&gt;I have been hoping to strip out Internet Explorer from a product at work, and make use of WebKit instead.  Today, I took a big first step by getting their old Spinneret test program to work:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/R66NzLihsvI/AAAAAAAAACI/HtCYaSw87KQ/s1600-h/image001.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/R66NzLihsvI/AAAAAAAAACI/HtCYaSw87KQ/s320/image001.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5165221733050987250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is no great accomplishment on my part; Apple's engineers had already created all of this infrastructure years ago.  They tossed it when their own superior libraries became available.  However, since they have not yet seen fit to allow these tools to be redistributed, we mere mortals must base our WebKit hopes on the Cairo back-end.  Of course, over the last few years, the &lt;a href="http://www.atoker.com/blog/"&gt;GTK+ port&lt;/a&gt; has brought the once-buggy Cairo back-end to be nearly per-pixel accurate with the CoreGraphics logic.  If all goes well, it may soon be impossible to tell the two apart.&lt;br /&gt;&lt;br /&gt;Currently, my own great accomplishment is having commented out the entire text rendering system yielding the entirely blank example of http://webkit.org.  But stay tuned -- bigger and better things are to come soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8209693473157872543?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8209693473157872543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8209693473157872543' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8209693473157872543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8209693473157872543'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2008/02/webkit-on-windows.html' title='WebKit on Windows'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/R66NzLihsvI/AAAAAAAAACI/HtCYaSw87KQ/s72-c/image001.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4361141332977393189</id><published>2007-11-03T23:06:00.001-07:00</published><updated>2007-11-03T23:11:41.156-07:00</updated><title type='text'>Leopard is Scary-Cool</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/Ry1iSX7ooUI/AAAAAAAAACA/lV-5rZutVUk/s1600-h/Lisp+Results.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/Ry1iSX7ooUI/AAAAAAAAACA/lV-5rZutVUk/s320/Lisp+Results.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5128863618446172482" /&gt;&lt;/a&gt;&lt;br /&gt;I was trying out John Wiseman's "Lisp Metadata Importer", which I &lt;a href="http://homepage.mac.com/bfulgham/FileSharing2.html"&gt;rebuilt&lt;/a&gt; to run under Intel OS X.  I expected to have various source files display based on my search, but I didn't expect them to be rendered as shown here.  Look how cool this is; they are tiny renderings (blown up here) of the source files, where you can even make out some of the text on the page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4361141332977393189?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4361141332977393189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4361141332977393189' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4361141332977393189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4361141332977393189'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/11/leopard-is-scary-cool.html' title='Leopard is Scary-Cool'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/Ry1iSX7ooUI/AAAAAAAAACA/lV-5rZutVUk/s72-c/Lisp+Results.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-8688610444246882872</id><published>2007-09-18T21:19:00.000-07:00</published><updated>2008-11-09T21:32:24.939-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Kudos to Apple</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/RvCmEVQH69I/AAAAAAAAAB4/TAYLZFWmC4k/s1600-h/PlanetEye.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/RvCmEVQH69I/AAAAAAAAAB4/TAYLZFWmC4k/s320/PlanetEye.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5111768170419973074" /&gt;&lt;/a&gt;Looks like I'm 0 for 2 this week.  I thought I had found a bug in the way CIImage data was processed via NSBitmapImageRep, but it turns out that the problem was entirely my own.  The good folks at Apple reviewed my original bug report, and provided an explanation of what I was doing wrong, which completely resolved my issue.&lt;br /&gt;&lt;br /&gt;My problems were as follows:&lt;br /&gt;&lt;br /&gt;1.  The GL_UNPACK_ROW_LENGTH parameter needs to be set to the pixel count equivalent of the number of bytes per row, given the number of bytes per pixel.  I was doing something like setting this value to the number of bytes per row, which is not necessarily the same thing (depending on image depth, etc.)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/RvCkZlQH68I/AAAAAAAAABw/An_rxazvVYA/s1600-h/GoodEye.png"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/RvCkZlQH68I/AAAAAAAAABw/An_rxazvVYA/s320/GoodEye.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5111766336468937666" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.  My use of the bitmap size (height and width) to the glTexImage2D function was wrong.  This was using the image physical size in points.&lt;br /&gt;&lt;br /&gt;With these changes, all texture mapping works properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-8688610444246882872?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/8688610444246882872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=8688610444246882872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8688610444246882872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/8688610444246882872'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/09/kudos-to-apple.html' title='Kudos to Apple'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/RvCmEVQH69I/AAAAAAAAAB4/TAYLZFWmC4k/s72-c/PlanetEye.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-496330965518883341</id><published>2007-09-17T21:29:00.000-07:00</published><updated>2008-11-09T21:31:49.898-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Text working (mostly) again...</title><content type='html'>Switching to the Cocoa-based backend to the Open Agent Engine was more work than I expected.  Typically, most of the problems ended up being caused by my own lack of understanding.  Case in point: Text.  The image in the preceeding post shows what I was getting when attempting to render Text:  a mirror image of the text!&lt;br /&gt;&lt;br /&gt;I initially thought this reversal was due to some endian foolishness in porting my PPC implementation to Intel.  And to be sure, there have been a few areas where this has been an issue (mainly with interpretation of bytes in the image textures).&lt;br /&gt;&lt;br /&gt;But it turns out, that it was due to two errors.  (1) I decided to ditch the manual byte-swapping logic from the original implementation in favor of a sexier &lt;a href="http://developer.apple.com/documentation/graphicsimaging/reference/CGAffineTransform/Reference/reference.html"&gt;Affine Transform&lt;/a&gt; (violating the "If it ain't broke, don't fix it" rule), and (2)  me (probably late at night) not recognizing that rotating an image 180-degrees does NOT give the same result as inverting the Y axis and drawing the image.&lt;br /&gt;&lt;br /&gt;Thankfully, after staring at the logic a second (well, fifth) time the problem became obvious, and now I can display massive amounts of meaningless text.  Rather than rotating 180-degrees, I need to apply a scaling affine transform with a Y-axis scale of -1.0, which flips the Y axis:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/Ru9WA1PHEZI/AAAAAAAAABo/IPxBbGXB75c/s1600-h/GoodText.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/Ru9WA1PHEZI/AAAAAAAAABo/IPxBbGXB75c/s320/GoodText.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5111398674379248018" /&gt;&lt;/a&gt;&lt;br /&gt;Of course, it's not perfect.  Note that the height of the text row is wrong, causing parts of the text to be obscured.  Still, it's a huge step forward.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-496330965518883341?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/496330965518883341/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=496330965518883341' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/496330965518883341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/496330965518883341'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/09/text-working-mostly-again.html' title='Text working (mostly) again...'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_hInRJC0BnDo/Ru9WA1PHEZI/AAAAAAAAABo/IPxBbGXB75c/s72-c/GoodText.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-7151724579778942712</id><published>2007-09-12T22:40:00.000-07:00</published><updated>2008-11-09T21:31:14.560-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Flipping/Endianness?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/RujN7VPHEXI/AAAAAAAAABY/0W-c1oLIVSo/s1600-h/MirrorFont.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/RujN7VPHEXI/AAAAAAAAABY/0W-c1oLIVSo/s320/MirrorFont.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5109560196448326002" /&gt;&lt;/a&gt;&lt;br /&gt;The OpenMCL texture examples work fine under PowerPC, but when I load them as textures on a rectangle on my new MacBook Pro, the images are inverted.  I did not expect the bytes to result in a mirror image -- I just assumed I would see mishandled Alpha/color values.&lt;br /&gt;&lt;br /&gt;Once I figure this out, there is only one outstanding 'bug' in the implementation related to panning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-7151724579778942712?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/7151724579778942712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=7151724579778942712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7151724579778942712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/7151724579778942712'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/09/flippingendianness.html' title='Flipping/Endianness?'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_hInRJC0BnDo/RujN7VPHEXI/AAAAAAAAABY/0W-c1oLIVSo/s72-c/MirrorFont.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1954961463757004318</id><published>2007-09-03T19:07:00.000-07:00</published><updated>2008-11-09T21:31:14.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Open Agent Engine:  Now in 64-bit</title><content type='html'>&lt;div&gt;I had a bit of a setback with my Open Agent Engine work when I switched to my new Macbook Pro.  OpenMCL is only available on Intel as a 64-bit application, which means that none of the Cocoa (and other frameworks) are available in Mac OS X (Tiger).  As announced in the WWDC 2007 keynote, the full set of frameworks will be available as 64-bit frameworks in Mac OS X (Leopard) which means that everyone will finally get to play with all of this stuff in a few weeks when Leopard is in general release.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/RtzA1Q-dnqI/AAAAAAAAAA4/sPRHxkc6ryc/s1600-h/2M+Points+(Far).png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/RtzA1Q-dnqI/AAAAAAAAAA4/sPRHxkc6ryc/s320/2M+Points+(Far).png" border="0" alt="" id="BLOGGER_PHOTO_ID_5106168098853854882" /&gt;&lt;/a&gt;As I was working through the changes needed to use more Cocoa and CGL routines (rather than Carbon and AGL), I started to get interested in Quartz Composer, and how it might be used to visualize data in 3D.  To get an idea of baseline OpenGL performance, I mocked up a few simple clouds of data to see how rapidly the data could be displayed and examined (via fly-overs and zooming).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_hInRJC0BnDo/RtzBOA-dnrI/AAAAAAAAABA/O2hhJgpN9jQ/s1600-h/2M+Points+(Closeup).png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_hInRJC0BnDo/RtzBOA-dnrI/AAAAAAAAABA/O2hhJgpN9jQ/s320/2M+Points+(Closeup).png" border="0" alt="" id="BLOGGER_PHOTO_ID_5106168524055617202" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;My first cut was using OpenGL vertices as points.  I could only display about 2 Million points before performance got too slow to display with any meaningful feedback (first image).&lt;br /&gt;&lt;br /&gt;The data could be zoomed in to see details of the individual points, but nothing was in color.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;I then changed the implementation to use small spheres to represent the points in the file.  Now the data showed color, but the image was much slower -- I had to drop the point size down to no more than 20 thousand points.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_hInRJC0BnDo/RtzCHw-dnsI/AAAAAAAAABI/iWc1hhc_zoQ/s1600-h/20k+Points+(Far).png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_hInRJC0BnDo/RtzCHw-dnsI/AAAAAAAAABI/iWc1hhc_zoQ/s320/20k+Points+(Far).png" border="0" alt="" id="BLOGGER_PHOTO_ID_5106169516193062594" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/RtzCiQ-dntI/AAAAAAAAABQ/ENdW5nLKAjI/s1600-h/20k+Points+(Closeup).png" style="text-decoration: none;"&gt;&lt;span class="Apple-style-span" style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;img style="text-decoration: underline;float: right; margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 10px; cursor: pointer; " src="http://1.bp.blogspot.com/_hInRJC0BnDo/RtzCiQ-dntI/AAAAAAAAABQ/ENdW5nLKAjI/s320/20k+Points+(Closeup).png" border="0" alt="" id="BLOGGER_PHOTO_ID_5106169971459595986" /&gt;&lt;/a&gt;Even 20 thousand points it probably too much for real interactive use, but it is at least sufficient for actual examination of the data.  With a MacPro or faster system (perhaps next year!) there should be little if any problem viewing such data.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Now, it's on to a Quartz Composer implementation.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1954961463757004318?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1954961463757004318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1954961463757004318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1954961463757004318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1954961463757004318'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/09/open-agent-engine-now-in-64-bit.html' title='Open Agent Engine:  Now in 64-bit'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/RtzA1Q-dnqI/AAAAAAAAAA4/sPRHxkc6ryc/s72-c/2M+Points+(Far).png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-3939508006154421458</id><published>2007-03-29T21:37:00.000-07:00</published><updated>2008-11-09T21:31:14.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Face Morpher</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_hInRJC0BnDo/RgyVtG_X3YI/AAAAAAAAAAw/zsoO0IQ4SOc/s1600-h/FaceMorpher.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_hInRJC0BnDo/RgyVtG_X3YI/AAAAAAAAAAw/zsoO0IQ4SOc/s320/FaceMorpher.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5047573884578553218" /&gt;&lt;/a&gt;&lt;br /&gt;My port of the Common Lisp "Open Agent Engine" library to OpenMCL has proceeded very smoothly.  Fonts, windowing, and a lot of other neat stuff now work properly, though there are lots of buggy edge conditions and murky corners where I manage to crash my Lisp Image due to OpenGL foo.&lt;br /&gt;&lt;br /&gt;This has been my first non-trivial Lisp project, and I'm definitely impressed with the language.  I really like how I can leave things unimplemented for later, and the compiler politely notifies me, but does not throw any fits as long as I don't attempt to call those methods.  Very useful for initial testing; an excellent iterative development language.&lt;br /&gt;&lt;br /&gt;For a recent example:  The "Face Morpher".  I'm not quite sure if my code runs the original "Face Morpher" program properly.  I can move the cursor around, and drop nice little inflection points on James Dean's image, but it doesn't seem to do anything aside place the marks (and note some coordinates in the listener).  I understand that the h/u keys should create smiles and frowns, but what I actually see is a jittery James Dean that seems to be suffering from some kind of horrible neurological ailment rather than a happy or dour individual.  I think something is going wrong in the update routine causing the face to act as though I'm hammering away at my h/u keys.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-3939508006154421458?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/3939508006154421458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=3939508006154421458' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3939508006154421458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/3939508006154421458'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/03/face-morpher.html' title='Face Morpher'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_hInRJC0BnDo/RgyVtG_X3YI/AAAAAAAAAAw/zsoO0IQ4SOc/s72-c/FaceMorpher.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-1499373625846366871</id><published>2007-03-22T20:31:00.000-07:00</published><updated>2008-11-09T21:31:14.561-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Fonts!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/RgNLYPQvKtI/AAAAAAAAAAk/hpw5MiGIzfg/s1600-h/FontTest.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/RgNLYPQvKtI/AAAAAAAAAAk/hpw5MiGIzfg/s320/FontTest.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5044958887370762962" /&gt;&lt;/a&gt;&lt;br /&gt;Fonts under Mac OS X are kind of confusing to me.  Tasks that seem like they should be easy (such as finding a font, or rendering text using a particular font) usually require you to navigate through several layers of code.  I'm sure this is much easier if you are working with X-Code, but as I am tinkering with OpenMCL using VIM and a console for testing, it's often hard to find the specific classes and methods necessary to do what I want.&lt;br /&gt;&lt;br /&gt;For example, attempting to determine the width of a particular string (in pixels) for a given font, etc., requires a fairly hefty chunk of Objc-Bridge code:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;;;&lt;br /&gt;;;  Some AD3D stuff.  A Font-Spec is a list:  (list "font-name" font-size :font-style)&lt;br /&gt;;;       e.g., ("helvetica" 16 :plain) &lt;br /&gt;;;&lt;br /&gt;(defun STRING-WIDTH (String &amp;optional Font-Spec)&lt;br /&gt;  "Returns the width in pixels of String, as if it were displayed in the font,&lt;br /&gt;   size, and style of font-spec."&lt;br /&gt;  (if (null font-spec)&lt;br /&gt;      (format t "No spec!")&lt;br /&gt;      ;; NSDictionary* attributes = [NSDictionary dictionaryWithObjectsAndKeys: font, nil];&lt;br /&gt;      ;; NSString foo = String;&lt;br /&gt;      ;; Size = foo :sizeWithAttributes attributes&lt;br /&gt;      (let ((size (float (second font-spec))))&lt;br /&gt;        (with-cstrs ((c-font-name (first font-spec))&lt;br /&gt;                     (c-string    String))&lt;br /&gt;          (with-autorelease-pool&lt;br /&gt;             (let* ((tempname   (ccl::send (@class ns-string) :string-with-c-string c-font-name))&lt;br /&gt;                    (fontname   (ccl::send tempname 'capitalized-string))&lt;br /&gt;                    (nsstring   (ccl::send (@class ns-string) :string-with-c-string c-string))&lt;br /&gt;                    (font       (ccl::send (ccl::send (find-class 'ns:ns-font)  :font-with-name fontname :size size) 'retain)))&lt;br /&gt;                (rlet ((glyph-size :&lt;NSS&gt;ize))&lt;br /&gt;                   (let ((dict (ccl::send (ccl::send (find-class 'ns:ns-dictionary) :dictionary-with-objects-and-keys font (:id #&amp;NSFontAttributeName :address (%null-ptr))) 'retain)))&lt;br /&gt;                      (ccl::send/stret glyph-size nsstring :size-with-attributes dict)&lt;br /&gt;                      (let ((width (ccl::pref glyph-size :&lt;NSS&gt;ize.width)))&lt;br /&gt;                         (ccl::send dict 'release)&lt;br /&gt;                         (ccl::send font 'release)&lt;br /&gt;                         width)))))))))&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;But the results are very cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-1499373625846366871?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/1499373625846366871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=1499373625846366871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1499373625846366871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/1499373625846366871'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/03/fonts.html' title='Fonts!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/RgNLYPQvKtI/AAAAAAAAAAk/hpw5MiGIzfg/s72-c/FontTest.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-6013587648866136077</id><published>2007-03-03T23:06:00.000-08:00</published><updated>2008-11-09T21:31:14.562-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>More Open Agent Engine Fun</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/Repxxuzu74I/AAAAAAAAAAY/Y_Z_yU2Q4HE/s1600-h/voice+rings.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/Repxxuzu74I/AAAAAAAAAAY/Y_Z_yU2Q4HE/s320/voice+rings.png" alt="" id="BLOGGER_PHOTO_ID_5037964232359866242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The inimitable &lt;a href="http://www.cs.colorado.edu/%7Eralex/"&gt;Alexander Repenning&lt;/a&gt; is constantly tinkering with the real Open Agent Engine (under &lt;a href="http://www.digitool.com/"&gt;MCL&lt;/a&gt;).  Sometimes he shows one of the cooler ones to me, which I then try to run under my &lt;a href="http://openmcl.org/"&gt;OpenMCL&lt;/a&gt; version of the engine.  Here's just such an example:     Animations and textures are &lt;strong&gt;fun&lt;/strong&gt;!&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;? (load "voice rings")&lt;br /&gt;#P"/Users/brent/Projects/Lisp/Open_Agent_Engine/Examples/voice rings.lisp"&lt;br /&gt;? (defparameter *RW* (make-instance 'ccl::ring-window))&lt;br /&gt;*RW*&lt;br /&gt;? (ccl::start-animation *RW*)&lt;br /&gt;(#&amp;lt;ccl::ring-window x8e5f5a6&amp;gt;)&lt;br /&gt;?&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-6013587648866136077?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/6013587648866136077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=6013587648866136077' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6013587648866136077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/6013587648866136077'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/03/more-open-agent-engine-fun.html' title='More Open Agent Engine Fun'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/Repxxuzu74I/AAAAAAAAAAY/Y_Z_yU2Q4HE/s72-c/voice+rings.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-4618828234608512794</id><published>2007-01-12T22:04:00.000-08:00</published><updated>2008-11-09T21:31:28.755-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Squeak:  Cool, but Confusing!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_hInRJC0BnDo/Rah3dSZVGcI/AAAAAAAAAAM/AXexg_7bZpg/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_hInRJC0BnDo/Rah3dSZVGcI/AAAAAAAAAAM/AXexg_7bZpg/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5019393129742408130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I went ahead and started playing with &lt;a href="http://www.squeak.org/"&gt;Squeak&lt;/a&gt;, to get a feel for the &lt;a href="http://www.opencroquet.org/"&gt;Croquet&lt;/a&gt; project and how it might relate to the Open Agent Engine.   The first thing I wanted to try was to play the included Chess game.  Unfortunately, I couldn't find anything to explain how to do this.&lt;br /&gt;&lt;br /&gt;There were HOWTO's to describe:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How to run an IRC client.&lt;/li&gt;&lt;li&gt;How to use the web browser.&lt;/li&gt;&lt;li&gt;How to install updates.&lt;/li&gt;&lt;li&gt;How to write your own SmallTalk code.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;But how could I start an existing program that did not create any menu entries to launch them?&lt;br /&gt;&lt;br /&gt;Answer:&lt;br /&gt;&lt;br /&gt;1.  World-click.&lt;br /&gt;2.  Select 'new morph'&lt;br /&gt;3.  Select 'from alphabetical list'&lt;br /&gt;4.  Find 'ChessMorph'&lt;br /&gt;5.  Voila...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-4618828234608512794?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/4618828234608512794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=4618828234608512794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4618828234608512794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/4618828234608512794'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2007/01/squeak-cool-but-confusing.html' title='Squeak:  Cool, but Confusing!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_hInRJC0BnDo/Rah3dSZVGcI/AAAAAAAAAAM/AXexg_7bZpg/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-116737222076144318</id><published>2006-12-28T21:55:00.000-08:00</published><updated>2008-11-09T21:29:48.428-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>Textures!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/597554/Borg.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/3509/70/320/649787/Borg.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/323572/Asteroids.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/3509/70/320/335251/Asteroids.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I'm very pleased to finally have working textures &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/298212/SkyBox.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/x/blogger/3509/70/320/69559/SkyBox.png" alt="" border="0" /&gt;&lt;/a&gt; under the OpenMCL port of the Open Agent Engine.  I initially had a lot of trouble getting them to load properly, but some help from Gary Byers quickly resolved the issue.&lt;br /&gt;&lt;br /&gt;Following is a brief bit of eye candy showing the results:&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-116737222076144318?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/116737222076144318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=116737222076144318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116737222076144318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116737222076144318'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/12/textures.html' title='Textures!'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-116685237052229616</id><published>2006-12-22T21:31:00.000-08:00</published><updated>2008-11-09T21:28:21.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><title type='text'>Event Handling</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/922700/Rotated%20Triangle.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/3509/70/320/483922/Rotated%20Triangle.png" border="0" alt="" /&gt;&lt;/a&gt;I basically scrapped my initial Carbon implementation, even though it was much easier to follow the original MCL code following that model.  However, it rapidly became obvious that implementing the event-handling code would be a lot of work.  So, I switched to the nascent Cocoa infrastructure and was able to make much better progress.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now I can zoom, tilt, and pan across images and models.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/687667/Picture%204.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/3509/70/320/595820/Picture%204.png" border="0" alt="" /&gt;&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/3416807-116685237052229616?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/116685237052229616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=116685237052229616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116685237052229616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116685237052229616'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/12/event-handling.html' title='Event Handling'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-116685174484434040</id><published>2006-11-22T21:21:00.000-08:00</published><updated>2008-11-09T21:29:48.429-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><category scheme='http://www.blogger.com/atom/ns#' term='opengl'/><title type='text'>OpenGL for OpenMCL</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/x/blogger/3509/70/1600/758473/Picture%201.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/3509/70/320/811797/Picture%201.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;I've been working on getting the &lt;a href="http://www.agentsheets.com/lisp/OpenGL.html"&gt;Open Agent Engine&lt;/a&gt; infrastructure working under &lt;a href="http://www.openmcl.org"&gt;OpenMCL&lt;/a&gt;.  You can visit their website for examples of the working product, but the graphical infrastructure is pretty neat, and is a nice example of what Lisp can do.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since I don't own MCL, but *do* have OpenMCL, I naturally figured that it would be relatively easy to port over.  But this was a mistaken assumption -- much of the 'hard' work is already done, but OpenMCL does not provide a lot of window and event handling infrastructure, resulting in a bit of work.&lt;br /&gt;&lt;br /&gt;I was certainly excited when I finally got a simple OpenGL triangle to display!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-116685174484434040?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/116685174484434040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=116685174484434040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116685174484434040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/116685174484434040'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/11/opengl-for-openmcl.html' title='OpenGL for OpenMCL'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-115414654313103970</id><published>2006-07-28T21:07:00.000-07:00</published><updated>2008-11-09T21:28:21.654-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lisp'/><title type='text'>Debian and CMUCL:  Not Getting Along</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3509/70/1600/100_0502.0.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger/3509/70/320/100_0502.0.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cons.org/cmucl/"&gt;CMUCL&lt;/a&gt; is a great Lisp implementation, created by the fine people at &lt;a href="http://www.cmu.edu"&gt;Carnegie Mellon University&lt;/a&gt;, who are also responsible for the excellent &lt;a href="http://www.gywdiondylan.org"&gt;Dylan&lt;/a&gt; implementation.  It has excellent performance, often meeting or exceeding native C code in the shootout benchmarks.&lt;br /&gt;&lt;br /&gt;Unfortunately, changes in the ABI for the Linux Kernel seem to have rendered it unusable under &lt;a href="http://www.debian.org"&gt;Debian&lt;/a&gt; GNU/Linux.&lt;p&gt;&lt;/p&gt;For Example:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;brent@hopper:~$ cmucl&lt;br /&gt;Couldn't mmap at 0xbe000000, len 1048576; got mapping at 0xa7cbb000 insteadensure_space: Failed to validate 1048576 bytes at 0xbe000000&lt;br /&gt;brent@hopper:~$&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Even worse, rather than seek to resolve the problem, &lt;a href="http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/82c64a3cc66395bb/a8f16985b83eeda5?lnk=st&amp;q=&amp;rnum=1#a8f16985b83eeda5"&gt;both sides&lt;/a&gt; seem intent on pointer fingers at one another.  I hope this issue is resolved soon, or else CMUCL's rankings in the shootout will continue to be questioned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-115414654313103970?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/115414654313103970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=115414654313103970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115414654313103970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115414654313103970'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/07/debian-and-cmucl-not-getting-along.html' title='Debian and CMUCL:  Not Getting Along'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-115351172581373626</id><published>2006-07-21T12:38:00.000-07:00</published><updated>2006-07-21T14:54:45.163-07:00</updated><title type='text'>Three Strange Days</title><content type='html'>We noticed a few days ago that traffic to the &lt;a href="http://shootout.alioth.debian.org"&gt;Shootout&lt;/a&gt; had spiked recently:&lt;table width="75%"&gt;&lt;caption&gt;&lt;strong&gt;Shootout Traffic for Three Strange Days&lt;/strong&gt;&lt;/caption&gt;&lt;tbody&gt;&lt;br /&gt;&lt;tr&gt;&lt;th align="left"&gt;Date&lt;/th&gt;&lt;th align="right"&gt;Count&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;16 Jul 2006&lt;/td&gt;&lt;td align="right"&gt;909&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;17 Jul 2006&lt;/td&gt;&lt;td align="right"&gt;1,955&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;18 Jul 2006&lt;/td&gt;&lt;td align="right"&gt;11,409&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;At first I was worried that Spam postings were being injected into the website, but we later discovered that a &lt;a href="http://programming.reddit.com/info/aa2x/comments"&gt;posting&lt;/a&gt; I had made to the &lt;a href="http://haskell.org/mailman/listinfo/haskell-cafe"&gt;haskell-cafe&lt;/a&gt; mailing list had been posted to &lt;a href="http://reddit.com"&gt;Reddit&lt;/a&gt;, which had driven the traffic spike.&lt;br /&gt;&lt;br /&gt;How cool that around ten thousand people read an e-mail I wrote!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-115351172581373626?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/115351172581373626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=115351172581373626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115351172581373626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115351172581373626'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/07/three-strange-days.html' title='Three Strange Days'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-115319849591167244</id><published>2006-07-17T21:42:00.000-07:00</published><updated>2008-11-09T21:29:15.544-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='factor'/><category scheme='http://www.blogger.com/atom/ns#' term='languages'/><title type='text'>Factor</title><content type='html'>A really interesting language is &lt;a href="http://factorcode.org"&gt;Factor&lt;/a&gt;.  You might think of Factor as a variant of Forth, and in some ways it is.  However, it's also an extremely well-built, featureful, and downright &lt;em&gt;neat&lt;/em&gt; system.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3509/70/1600/5.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3509/70/200/5.jpg" border="0" alt="fire engine control panel" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The main author, Slava, has poured a tremendous amount of energy into this project, and the results show.  Where many similar projects chug along as console-only systems, building on a single platform, and limited to simple console interaction, Factor provides a built-in GUI system (based on an OpenGL widget set), embedded help, searchable function reference, tutorials, and examples.  If a language can be judged on its merits (rather than peer pressure), Factor sure seems to have a lot of things going for it.&lt;br /&gt;&lt;br /&gt;Things I'm interested to find out:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;How well does it handle concurrency?  (The key to the thousand's).&lt;/li&gt;&lt;li&gt;Does it scale?&lt;/li&gt;&lt;li&gt;Does it have a cool mascot?&lt;/li&gt;&lt;/ol&gt;I have created my own Icon for my Mac so I don't have to look at the stupid default OS X Icon.&lt;br /&gt;&lt;br /&gt;Want to see?  Okay:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3509/70/1600/ScaryHead_128.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3509/70/200/ScaryHead_128.png" border="0" alt="scary head image" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Isn't it great?  It bears no relation to the program, doesn't tell you what it does, and I can't even remember the name of the piece.  But I think it &lt;strong&gt;looks&lt;/strong&gt; cool!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-115319849591167244?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/115319849591167244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=115319849591167244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115319849591167244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115319849591167244'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/07/factor.html' title='Factor'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-115319467018158968</id><published>2006-07-17T20:47:00.000-07:00</published><updated>2006-07-21T14:59:50.816-07:00</updated><title type='text'>Dry Spell</title><content type='html'>I hadn't realized how long it had been since I wrote something here.  It's not as though I dropped off the face of the earth -- I actually have been &lt;a href="http://shootout.alioth.debian.org/"&gt;doing something&lt;/a&gt; during that time.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/3509/70/1600/4.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/3509/70/200/4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In fact, I also changed jobs about a year and a half ago.  I started working for a cool little company in Santa Barbara working on scientific stuff.  The best part is eating dinner once a year with members of the &lt;a href="http://www.amacad.org/"&gt;American Academy of Arts &amp; Sciences&lt;/a&gt;, or realizing a year or two later that someone you met won the Nobel Prize.&lt;br /&gt;&lt;br /&gt;A lot has happened since I last posted, especially in the language world.  &lt;a href="http://factorcode.org"&gt;Several&lt;/a&gt; &lt;a href="http://www.fscript.org/"&gt;cool&lt;/a&gt; &lt;a href="http://www.mozart-oz.org/"&gt;new&lt;/a&gt; &lt;a href="http://www.parrotcode.org/"&gt;languages&lt;/a&gt; are now available, and I finally &lt;a href="http://www.apple.com/imac/"&gt;got a mac&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-115319467018158968?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://whtconstruct.blogspot.com/feeds/115319467018158968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=3416807&amp;postID=115319467018158968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115319467018158968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/115319467018158968'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2006/07/dry-spell.html' title='Dry Spell'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</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-3416807.post-107964219318490746</id><published>2004-03-18T12:36:00.000-08:00</published><updated>2006-07-21T15:22:50.336-07:00</updated><title type='text'>Stupid Is as Stupid Does</title><content type='html'>Like most of you, I laughed when I learned of the Aliso Viejo City Council's &lt;a href="http://www.ocregister.com/community/aliso_viejo_news/avscorecard_citycouncil"&gt;desire&lt;/a&gt; to ban styrofoam cups due to the use of &lt;em&gt;dihydrogen monoxide&lt;/em&gt; in their manufacture.   The story was carried far and wide, from Alaska to Auckland.&lt;br /&gt;&lt;br /&gt;However, I'm actually a bit troubled by City Manager David J. Norman's quote in the &lt;a href="http://customwire.ap.org/dynamic/stories/H/H2O_HOAX?SITE=MIDTF&amp;SECTION=HOME"&gt;AP article&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    "It's embarrassing," said City Manager David J. Norman. "We had a paralegal who did bad research."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Now, I realize that people have to delegate to get things done in a reasonable time period.  But the paralegal certainly was not responsible for the City Council's ability to reason and study information.  The fact that the whole council could be swayed by the contents of a single web site does not show good judgement, and should call into question the ability of this government body to weigh the merits of virtually anything placed before them.  Where was the independent verification of the facts?  If they did not know what &lt;em&gt;dihydrogen monoxide&lt;/em&gt; was, why did they feel competent to ban its use?&lt;br /&gt;&lt;br /&gt;The fact is, most people think they know a lot more than they do.  And we all too frequently have uneducated/ignorant people making decisions on topics far outside their capabilities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107964219318490746?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107964219318490746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107964219318490746'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2004/03/stupid-is-as-stupid-does.html' title='Stupid Is as Stupid Does'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107479828773709817</id><published>2004-01-22T11:04:00.000-08:00</published><updated>2006-07-21T14:59:24.386-07:00</updated><title type='text'>Bless the RIP</title><content type='html'>Since I've always had closet &lt;a href="http://www.apple.com/g5processor/"&gt;Macintosh&lt;/a&gt;-envy (but can't afford to buy a system), I've been trying to get the x86 build of &lt;a href="http://www.opendarwin.org"&gt;Darwin&lt;/a&gt; working.  Unfortunately, that means I keep hammering my boot sector.  Last night, due to fatigue, I forgot to re-write the boot sector and now I can only boot into Darwin.  This would not be so bad if Darwin networking wasn't broken right now, so I can get onto the network.&lt;br /&gt;&lt;br /&gt;Thank goodness for the &lt;a href="http://www.tux.org/pub/people/kent-robotti/looplinux/rip/index.html"&gt;RIP&lt;/a&gt; recue disk!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107479828773709817?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107479828773709817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107479828773709817'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2004/01/bless-rip.html' title='Bless the RIP'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107334495900881390</id><published>2004-01-05T15:22:00.000-08:00</published><updated>2006-07-21T15:00:22.250-07:00</updated><title type='text'>Alas, Poor Canon, I Barely Knew Ye</title><content type='html'>Here's a sad little note I wrote to &lt;a href="http://www.canon.com/cusa/index.html"&gt;Canon USA &lt;/a&gt; owing to their terrible Linux/BSD support policy.  I can't fault a company for not providing drivers to Linux (since it's an admittedly small portion of the population).  But for Canon to rebuff repeated developer requests for documentation on their scanner API is very dissappointing.&lt;br /&gt;&lt;br /&gt;Here's a note I wrote to Canon describing my decision to return the scanner:&lt;br /&gt;&lt;blockquote&gt;I recently purchased a Canon 5000F scanner, based on the high quality of my Canon camera products, and the specifications found on the product literature.&lt;br /&gt;&lt;br /&gt;It was not until I had taken the unit home and attempted to connect it to my Linux system that I realized you did not provide Linux support.  These days, most vendors do provide this support, or at least documentation for the scanner interface so that support can be added to an existing driver framework.  My web inquiries found that Canon was not making documentation of the driver interface available, and so that the only way this scanner would be supported would be through a reverse-engineering effort.&lt;br /&gt;&lt;br /&gt;Regretfully, I had to return the unit and exchange it for an EPSON, which does provide full support.&lt;br /&gt;&lt;br /&gt;I realize that Windows and Mac OS are far and away the most common operating systems, and that it makes good business sense to prioritize your product support accordingly.  However, the lack of driver support (or documentation) makes your products effectively worthless for my use.&lt;br /&gt;&lt;br /&gt;Based on this experience, I will probably not be purchasing a Canon digital camera (which had been my next planned purchase).  This is unfortunate, because I have found your 35mm camera optics to be superior, but in the digital arena I must stay compatible with the rest of my system configuration.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107334495900881390?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107334495900881390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107334495900881390'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2004/01/alas-poor-canon-i-barely-knew-ye.html' title='Alas, Poor Canon, I Barely Knew Ye'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107333029935801982</id><published>2004-01-05T11:18:00.000-08:00</published><updated>2006-07-21T15:01:02.150-07:00</updated><title type='text'>Hat's Off to Apple</title><content type='html'>So, my mom got a new Apple for Christmas this year (an eMac) and I got to spend a few hours tinkering with it to get her various applications working (in the OS 9 emulation environment), connect to the wireless network, and so forth.&lt;br /&gt;&lt;br /&gt;I must say I am quite impressed with &lt;a href="http://www.apple.com/macosx/"&gt;Mac OS X&lt;/a&gt;.  It's a solid, fast, and absolutely beautiful interface.  Things work well, and are relatively easy to figure out.  When you consider that OS X is sitting on top of BSD, it's absolutely amazing how simple it is to set things up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107333029935801982?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107333029935801982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107333029935801982'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2004/01/hats-off-to-apple.html' title='Hat&apos;s Off to Apple'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107284588044868910</id><published>2003-12-30T20:44:00.000-08:00</published><updated>2006-07-21T15:01:18.820-07:00</updated><title type='text'>Egad!  When Will They Learn?</title><content type='html'>So I received a really nice scanner for Christmas this year  (Canon &lt;a href="http://www.canonusa.com/html/conCprProductDetail.jsp?modelid=8053&amp;item=8052&amp;section=10218"&gt;CanoScan 5000F&lt;/a&gt;).  Unfortunately, they don't have active support for Linux yet.  Somehow I was actually surprised by this (it's been a while since I ran into hardware I couldn't use.)&lt;br /&gt;Bummer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107284588044868910?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107284588044868910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107284588044868910'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/12/egad-when-will-they-learn.html' title='Egad!  When Will They Learn?'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107181968203063965</id><published>2003-12-18T23:41:00.000-08:00</published><updated>2006-07-21T15:21:25.313-07:00</updated><title type='text'>Clueless Websites at Christmas</title><content type='html'>So, I'm trying to purchase a few niceties from &lt;A href="http://www.williams-sonoma.com"&gt;Williams-Sonoma&lt;/a&gt;, a wonderful cooking site.  But my Linux machine can't connect, though I can get there from my work box.  After lots of poking around reading TCP packets between my machine and WS, I discover that they are rejecting all of my connection attempts because my system (properly) includes ECN information in the packets it sends.&lt;br /&gt;&lt;br /&gt;ECN (Early Congestion Notification) is a current RFC blessed by the IEC for helping to reduce congestion and better balance load over the internet.  Williams-Sonoma must really be running some old firewall software to be complaining about this (since it was ratified back in 2001).  I sent them a nasty-gram about the business they are probably losing from people staying up-to-date with Internet Protocols.&lt;br /&gt;&lt;br /&gt;Bah, Humbug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107181968203063965?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107181968203063965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107181968203063965'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/12/clueless-websites-at-christmas.html' title='Clueless Websites at Christmas'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-107048443695496189</id><published>2003-12-03T09:40:00.000-08:00</published><updated>2006-07-21T15:21:52.273-07:00</updated><title type='text'>What Did They Do Before The Internet?</title><content type='html'>Found while reading &lt;a href="http://www.iam.unibe.ch/~ducasse/WebPages/FreeBooks/LittleSmalltalk/ALittleSmalltalk.pdf"&gt;A Little Smalltalk&lt;/a&gt; by Timothy Budd:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;The Little Smalltalk system can be obtained directly from the author.  The system is distributed on 9-track tapes in tar format (the standard unix distribution format).&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Ahh... memories.  Now that the IRS refuses to accept 9-track media, my company's finally been able to discontinue support for these beasts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-107048443695496189?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107048443695496189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/107048443695496189'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/12/what-did-they-do-before-internet.html' title='What Did They Do Before The Internet?'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-106857153347280543</id><published>2003-11-11T09:25:00.000-08:00</published><updated>2006-07-21T15:38:37.323-07:00</updated><title type='text'>Microsoft Monad</title><content type='html'>Lots of traffic this week regarding the &lt;a href="http://www.gotdotnet.com/team/PDC/4118/ARC334.ppt"&gt;PDC slide deck&lt;/a&gt; about Microsoft's new command shell.  My reaction after reading through this whole stack was "so what?"  It looks like they have created something of an interpreter for their C#/.NET environment, which allows you to whack out some quick scripts from the command line.&lt;br /&gt;&lt;br /&gt;The one useful thing about this is that it nicely integrates various parts of Windows in an easy-to-automate fashion.  But this is evolutionary, rather than revolutionary.  You won't be able to do anything new the day after you install this stuff than you could the day before -- it's just (arguably) easier.&lt;br /&gt;&lt;br /&gt;It's not even novel.  The &lt;a href="http://www.cs.kun.nl/~clean"&gt;Clean&lt;/a&gt; team has already thought of all of this -- and in a more &lt;a href="http://www.cs.kun.nl/~arjenw/"&gt;novel&lt;/a&gt; way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-106857153347280543?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106857153347280543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106857153347280543'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/11/microsoft-monad.html' title='Microsoft Monad'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-106848694335371204</id><published>2003-11-10T09:55:00.000-08:00</published><updated>2006-07-21T15:38:00.186-07:00</updated><title type='text'>Clean Updates</title><content type='html'>I've updated my Clean ObjectIO &lt;a href="http://people.debian.org/~bfulgham/clean_examples"&gt;Gtk+ Status&lt;/a&gt; page.  Lots more stuff is working.&lt;br /&gt;&lt;br /&gt;&lt;image src="http://people.debian.org/~bfulgham/clean_examples/talk.png"/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-106848694335371204?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106848694335371204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106848694335371204'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/11/clean-updates.html' title='Clean Updates'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-10682529842380272</id><published>2003-11-07T16:56:00.000-08:00</published><updated>2006-07-21T15:36:26.183-07:00</updated><title type='text'>Everyone's Doing It</title><content type='html'>So, which founding father are you?&lt;br /&gt;&lt;div align=center&gt;&lt;br /&gt;&lt;img src="http://www.io.com/~janis/quiz/quiz1/TP.jpg"&gt;&lt;br /&gt;&lt;br clear=all&gt;&lt;br /&gt;&lt;font face=arial size=1&gt;&lt;br /&gt;&lt;A HREF="http://www.io.com/~janis/quiz/quiz1.html"&gt;Which Founding Father Are You?&lt;br /&gt;&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-10682529842380272?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/10682529842380272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/10682529842380272'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/11/everyones-doing-it.html' title='Everyone&apos;s Doing It'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-106571892564034626</id><published>2003-10-09T10:02:00.000-07:00</published><updated>2006-07-21T15:35:59.940-07:00</updated><title type='text'>Excellent Windows Compiler Set</title><content type='html'>A great project (that I continue to forget to mention) is the &lt;a href="http://www.bloodshed.net"&gt;Dev-C++&lt;/a&gt; toolset for Windows users.  It's a slick package, with an easy update facility and extension packages (for libraries and so forth.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-106571892564034626?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106571892564034626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106571892564034626'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/10/excellent-windows-compiler-set.html' title='Excellent Windows Compiler Set'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-106314619632732341</id><published>2003-09-09T15:23:00.000-07:00</published><updated>2006-07-21T15:35:33.856-07:00</updated><title type='text'>Request-Response:  Mail Filters *Sigh*</title><content type='html'>&lt;em&gt;&lt;strong&gt;Request:&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&gt;  -----Original Message-----&lt;br /&gt;&gt; From:  Brent Fulgham  &lt;br /&gt;&gt; Sent: Tuesday, September 09, 2003 2:40 PM&lt;br /&gt;&gt; To: ((Hapless Build Technician))&lt;br /&gt;&gt; Subject: Build Log&lt;br /&gt;&gt; &lt;br /&gt;&gt; ((Hapless Build Technician)),&lt;br /&gt;&gt; &lt;br /&gt;&gt; Can you e-mail me the latest MSP Build Log for our SP5 stuff?&lt;br /&gt;&gt; &lt;br /&gt;&gt; Thanks,&lt;br /&gt;&gt; &lt;br /&gt;&gt; -Brent&lt;br /&gt;&lt;/blockquote&gt;&lt;em&gt;&lt;strong&gt;Response:&lt;/strong&gt;&lt;/em&gt;&lt;blockquote&gt;&lt;br /&gt;&gt;  -----Original Message-----&lt;br /&gt;&gt; From:  ((Hapless Build Technician))  &lt;br /&gt;&gt; Sent: Tuesday, September 09, 2003 2:49 PM&lt;br /&gt;&gt; To: Brent Fulgham&lt;br /&gt;&gt; Subject: RE: Build Log&lt;br /&gt;&gt; &lt;br /&gt;&gt;  (( File: Quarantined Attachment Report ))&lt;br /&gt;&gt; &lt;br /&gt;&lt;/blockquote&gt;&lt;em&gt;&lt;strong&gt;Request:&lt;/strong&gt;&lt;/em&gt;&lt;blockquote&gt;&lt;br /&gt;&gt;  -----Original Message-----&lt;br /&gt;&gt; From:  Brent Fulgham  &lt;br /&gt;&gt; Sent: Tuesday, September 09, 2003 3:02 PM&lt;br /&gt;&gt; To: ((System Administrator))&lt;br /&gt;&gt; Subject: FW: Build Log&lt;br /&gt;&gt; &lt;br /&gt;&gt; ((System Administrator)),&lt;br /&gt;&gt; &lt;br /&gt;&gt; I need to be able to get e-mail from people with the name "LOG" in it:&lt;br /&gt;&gt; &lt;br /&gt;&gt; BUILDMSP_1.0.1.32.LOG&lt;br /&gt;&gt; &lt;br /&gt;&gt; This was apparently quarantined by the server.&lt;br /&gt;&gt; &lt;br /&gt;&gt; Thanks,&lt;br /&gt;&gt; &lt;br /&gt;&gt; -Brent&lt;br /&gt;&gt; &lt;br /&gt;&lt;/blockquote&gt;&lt;em&gt;&lt;strong&gt;Response:&lt;/strong&gt;&lt;/em&gt;&lt;blockquote&gt;&lt;br /&gt;&gt;  -----Original Message-----&lt;br /&gt;&gt; From:  ((System Administrator))&lt;br /&gt;&gt; Sent: Tuesday, September 09, 2003 3:09 PM&lt;br /&gt;&gt; To: Brent Fulgham&lt;br /&gt;&gt; Subject: RE: Build Log&lt;br /&gt;&gt; &lt;br /&gt;&gt; ((Hapless Build Technician)) will have to resend the document to you.  She should &lt;br /&gt;&gt; ensure attachments have only one period (.) within the name &lt;br /&gt;&gt; (e.g. .doc) before sending it through the email system. &lt;br /&gt;&gt; &lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-106314619632732341?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106314619632732341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106314619632732341'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/09/request-response-mail-filters-sigh.html' title='Request-Response:  Mail Filters *Sigh*'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-3416807.post-106280761048610126</id><published>2003-09-05T17:20:00.000-07:00</published><updated>2006-07-21T15:34:28.620-07:00</updated><title type='text'>Back to the Important Stuff</title><content type='html'>Enough of this crap.  Here's what I'm currently reading:&lt;br /&gt;&lt;image WIDTH=140 HEIGHT=170 ALT="Lisp (3rd Edition)" SRC="http://images.amazon.com/images/P/0201083191.01._PE_PIdp-schmoo2,TopRight,7,-26_SCMZZZZZZZ_.jpg"/&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0201083191/qid=1062806913/sr=1-11/ref=sr_1_11/103-6081245-1307854?v=glance&amp;s=books"&gt;Lisp&lt;/a&gt; by Patrick Henry Winston and Berthold Horn is a paragon of clarity.  Although I enjoyed books like &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/0262560992/qid=1062807436/sr=1-1/ref=sr_1_1/103-6081245-1307854?v=glance&amp;s=books"&gt;The Little schemer&lt;/a&gt; and &lt;a href="http://www.amazon.com/exec/obidos/tg/detail/-/026256100X/ref=pd_sim_books_1/103-6081245-1307854?v=glance&amp;s=books"&gt;The Seasoned Schemer&lt;/a&gt;, this book has explained far more about &lt;a href="http://www.lisp.org/alu/home"&gt;Common Lisp&lt;/a&gt; in the first 200 pages then I learned about Scheme from both of those other slim volumes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3416807-106280761048610126?l=whtconstruct.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106280761048610126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3416807/posts/default/106280761048610126'/><link rel='alternate' type='text/html' href='http://whtconstruct.blogspot.com/2003/09/back-to-important-stuff.html' title='Back to the Important Stuff'/><author><name>Brent</name><uri>http://www.blogger.com/profile/13730716161685154449</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
