<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-19210567</id><updated>2009-02-26T21:12:20.981-05:00</updated><title type='text'>New clear Objective-C</title><subtitle type='html'>I have come here to chew bubblegum and write code ... and I'm all out of bubblegum.</subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default?start-index=26&amp;max-results=25'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.objc.net/blog/atom.xml'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19210567.post-6051196449955059578</id><published>2008-09-19T15:33:00.008-04:00</published><updated>2008-09-19T16:26:05.048-04:00</updated><title type='text'>Beware CGAffineTransformScale() negative zero</title><content type='html'>&lt;pre&gt;&lt;br /&gt;#import &amp;lt;ApplicationServices/ApplicationServices.h&amp;gt&lt;br /&gt;&lt;br /&gt;int main(int argc,char *argv){&lt;br /&gt;   CGAffineTransform matrix;&lt;br /&gt;   &lt;br /&gt;   matrix=CGAffineTransformMakeTranslation(42,42);&lt;br /&gt;   matrix=CGAffineTransformConcat(CGAffineTransformMakeScale(1,-1),matrix);&lt;br /&gt;   &lt;br /&gt;   printf("matrix=%g %g %g %g %g %g\n",matrix.a,matrix.b,matrix.c,matrix.d,matrix.tx,matrix.ty);&lt;br /&gt;&lt;br /&gt;   matrix=CGAffineTransformMakeTranslation(42,42);&lt;br /&gt;   matrix=CGAffineTransformScale(matrix,1,-1);&lt;br /&gt;   &lt;br /&gt;   printf("matrix=%g %g %g %g %g %g\n",matrix.a,matrix.b,matrix.c,matrix.d,matrix.tx,matrix.ty);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Generates:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;matrix=1 0 0 -1 42 42&lt;br /&gt;matrix=1 0 -0 -1 42 42&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Yes, that is a negative zero.&lt;br /&gt;&lt;br /&gt;While zero and negative zero are considered equal and produce the same results in most situations, there are cases where negative zero will give different results. e.g. 1.0 / 0.0 is positive infinity (greater than zero) and 1.0 / -0.0 is negative infinity (less than zero).&lt;br /&gt;&lt;br /&gt;(OSX 10.5.4)</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/6051196449955059578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/09/beware-cgaffinetransformscale-negative.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/6051196449955059578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/6051196449955059578'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/09/beware-cgaffinetransformscale-negative.html' title='Beware CGAffineTransformScale() negative zero'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4118110341822654336</id><published>2008-07-22T21:55:00.001-04:00</published><updated>2008-07-22T22:02:28.231-04:00</updated><title type='text'>The CoreAnimation patent application</title><content type='html'>&lt;a href="http://www.google.com/patents?id=p9qnAAAAEBAJ"&gt;Framework for Graphics Animation and Compositing Operations&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4118110341822654336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/07/coreanimation-patent-application.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4118110341822654336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4118110341822654336'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/07/coreanimation-patent-application.html' title='The CoreAnimation patent application'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-6380083999911201943</id><published>2008-07-09T00:01:00.003-04:00</published><updated>2008-07-09T00:09:34.438-04:00</updated><title type='text'>Final portrait of a dragonfly</title><content type='html'>&lt;a href="http://www.flickr.com/photos/69331617@N00/2652035636/" title="dragonfly0 by objc.net, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3170/2652035636_1a406b1b33.jpg" width="500" height="375" alt="dragonfly0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This evening while hanging out at our neighbor's house this dragonfly decided to land on my leg and hang out. After it became clear he wasn't flying away with everyone looking at him I tried to motivate him with my finger, whereupon he crawled onto it. This became a novel moment and my wife grabbed the camera and I took some shots while he hung out. I decided perhaps he would like to go to the pond and placed him on a leaf, he promptly flew away, then crash landed into the pond and died.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/69331617@N00/2652029888/" title="dragonfly1 by objc.net, on Flickr"&gt;&lt;img src="http://farm4.static.flickr.com/3196/2652029888_5377998257.jpg" width="500" height="375" alt="dragonfly1" /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/6380083999911201943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/07/final-portrait-of-dragonfly.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/6380083999911201943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/6380083999911201943'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/07/final-portrait-of-dragonfly.html' title='Final portrait of a dragonfly'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-24548362181928580</id><published>2008-06-28T23:37:00.004-04:00</published><updated>2008-06-28T23:41:26.853-04:00</updated><title type='text'>Didn't order the special</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2008-06-28/StirFriedBabyBoyToy.jpg"&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/24548362181928580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/06/didnt-order-special.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/24548362181928580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/24548362181928580'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/06/didnt-order-special.html' title='Didn&apos;t order the special'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-2526813299613867426</id><published>2008-06-11T20:46:00.003-04:00</published><updated>2008-06-11T20:54:20.785-04:00</updated><title type='text'>An annoyance with properties</title><content type='html'>I can:&lt;br /&gt;&lt;br /&gt;CGFloat x=someLayer.bounds.origin.x;&lt;br /&gt;&lt;br /&gt;But I can't:&lt;br /&gt;&lt;br /&gt;someLayer.bounds.origin.x=x;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/2526813299613867426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/06/annoyance-with-properties.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2526813299613867426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2526813299613867426'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/06/annoyance-with-properties.html' title='An annoyance with properties'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-2821903967093871322</id><published>2008-06-10T11:46:00.003-04:00</published><updated>2008-06-10T11:53:01.005-04:00</updated><title type='text'>Cocotron and programming salaries</title><content type='html'>&lt;a href="http://theunixgeek.blogspot.com/2008/06/programming-salaries.html"&gt;The Unix Geek has a fun entry on programming salaries for languages, API's and operating systems&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Good news for Cocotron developers with Objective-C and Win32 in the top tier! :)</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/2821903967093871322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/06/cocotron-and-programming-salaries.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2821903967093871322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2821903967093871322'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/06/cocotron-and-programming-salaries.html' title='Cocotron and programming salaries'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4195159864816428112</id><published>2008-06-06T12:12:00.004-04:00</published><updated>2008-06-06T12:31:51.932-04:00</updated><title type='text'>CoreGraphics line rendering performance bug</title><content type='html'>In general CoreGraphics is brutally fast, but I've been noticing some situations where it isn't which I narrowed down to non-uniform scaling of the CTM.&lt;br /&gt;&lt;br /&gt;This program demonstrates how non-uniform scaling the CTM can adversely affect line rendering performance. It draws a grid of lines with scaling in X and Y adjustable by sliders and a rotate slider to get feedback on how fast it can render.&lt;br /&gt;&lt;br /&gt;There's no voodoo here, the bottleneck is CGContextDrawPath(), drawing the grid scaled 0.5/0.6, or 0.2/0.5 on my MBP can take half a second, whereas if it is scaled 0.5/0.5 rendering is a couple orders of magnitude faster.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.objc.net/blog-media/2008-06-06/CTMScaleBug.zip"&gt;CTMScaleBug.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10.5.3</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4195159864816428112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/06/coregraphics-line-rendering-performance.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4195159864816428112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4195159864816428112'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/06/coregraphics-line-rendering-performance.html' title='CoreGraphics line rendering performance bug'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-1749310635560904054</id><published>2008-04-05T22:25:00.005-04:00</published><updated>2008-04-05T23:55:22.794-04:00</updated><title type='text'>CoreGraphics Dashed Lines Bug #2(?)</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2008-04-05/DashedLinesBug1.png"&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2008-04-05/DashedLinesBug2.png"&gt;&lt;br /&gt;&lt;br /&gt;These two images are the same path, stroked with dashes, drawn at different angles. Some of the corners render differently depending on the angle.&lt;br /&gt;&lt;br /&gt;Compile the demonstration and drag the slider around for the full effect.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.objc.net/blog-media/2008-04-05/DashedLinesBug2.zip"&gt; DashedLinesBug2.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;10.5.2</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/1749310635560904054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/04/coregraphics-dashed-lines-bug-2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/1749310635560904054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/1749310635560904054'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/04/coregraphics-dashed-lines-bug-2.html' title='CoreGraphics Dashed Lines Bug #2(?)'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4298519239778780121</id><published>2008-03-26T00:00:00.000-04:00</published><updated>2008-03-26T01:22:13.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='coregraphics'/><title type='text'>CoreGraphics Dashed Lines, Bevel Joins Bug</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2008-03-26/DashedLinesBug.png"&gt;&lt;br /&gt;&lt;br /&gt;This is two lines, one is solid black and the other is red and dashed, both 100pts wide, same end points. When the line join style is set to bevel and the ctm is rotated the dashes are overzealously clipped by CoreGraphics. The dashes should continue all the way up to the top as the black line does. It will also show up if the miter limit is zero which effectively uses bevel joins. It won't show up if you just draw the lines without the rotation. The bug will appear with various combinations of line widths, angles and dashes in a similar position along the edge of the view.&lt;br /&gt;&lt;br /&gt;Example code here: &lt;a href="http://www.objc.net/blog-media/2008-03-26/DashedLinesBug.zip"&gt;http://www.objc.net/blog-media/2008-03-26/DashedLinesBug.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Shows up on 10.4.11 and 10.5.2&lt;br /&gt;&lt;br /&gt;I noticed this while working on a new software renderer for Cocotron, the renderer was drawing the dashes and CG wasn't.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4298519239778780121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/03/coregraphics-dashed-lines-bevel-joins.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4298519239778780121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4298519239778780121'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/03/coregraphics-dashed-lines-bevel-joins.html' title='CoreGraphics Dashed Lines, Bevel Joins Bug'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-386367473954279555</id><published>2008-02-29T11:46:00.003-05:00</published><updated>2008-02-29T11:52:46.148-05:00</updated><title type='text'>The Big Word Project entries</title><content type='html'>"cocoa" and "windows" for cocotron.org&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.thebigwordproject.com"&gt;The Big Word Project&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/386367473954279555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/02/big-word-project-entries.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/386367473954279555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/386367473954279555'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/02/big-word-project-entries.html' title='The Big Word Project entries'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-3013867133169329830</id><published>2008-01-31T21:47:00.000-05:00</published><updated>2008-01-31T22:38:58.415-05:00</updated><title type='text'>The Cocotron on ohloh</title><content type='html'>I recently ran across &lt;a href="http://www.ohloh.net"&gt;ohloh&lt;/a&gt;, a networking-y site for open source projects, so I submitted Cocotron out of curiousity, here: &lt;a href="http://www.ohloh.net/projects/11314?p=The+Cocotron"&gt;The Cocotron on ohloh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The metrics are semi-interesting, amusing and useless at the same time. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Semi-interesting&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The lines of codes/comments/blanks graphs. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Amusing&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Project cost,  $1.3 million, 25 years to develop.&lt;br /&gt;&lt;br /&gt;"Very few source code comments".  This is actually high considering most of the comments are license text.&lt;br /&gt;&lt;br /&gt;Misrecognizing a small percentage of source as "Matlab" code.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Useless&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The say they have something which scans all the source files for licenses to present a comprehensive view of multi-license projects, but despite almost all of the Cocotron source files having a generic MIT license in them, ohloh does not pick it up. (This is different than the project profile where I explicitly mark the project as MIT license)</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/3013867133169329830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/01/cocotron-on-ohloh.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/3013867133169329830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/3013867133169329830'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/01/cocotron-on-ohloh.html' title='The Cocotron on ohloh'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4497805127094883909</id><published>2008-01-21T08:53:00.000-05:00</published><updated>2008-01-21T09:00:29.871-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cocotron'/><title type='text'>cocotron.org facelift</title><content type='html'>I recently switched &lt;a href="http://www.cocotron.org"&gt;cocotron.org&lt;/a&gt; over to a new site I have been chipping away at. There were a few things I knew I needed to do, page generation using a better template system which would help with content organization and fix a big annoyance with the examples.&lt;br /&gt;&lt;br /&gt;The original site was done using server side includes with a simple header&amp;footer template. If you've used SSI's you know how extremely limited they are, especially in the older version of Apache my hosting provider is using. I'm sure some people have done amazing stuff with just SSI's, but that is not me. I decided to write a CGI program to generate pages using Foundation on OS X and then get it working on the Linux shared hosting account where cocotron.org lives. One bug fix later in Cocotron it was generating pages on the Linux account. Most of the work was reorganizing the html of the old content, coming up with the new layout and updating some content.&lt;br /&gt;&lt;br /&gt;One recurring problem with the examples and building apps in general is that the DLL's and framework resources need to be copied into the same directory as the .EXE in order to run the program. The documentation does describe this, but automating it during the build process would make it all a lot easier. So there is a new program in CDT which fixes this problem called retargetBundle, it does a fast copy, using modification dates, to copy the DLL's and resources as the final build stage. If you have the latest CDT and build an example, it should be ready to run.&lt;br /&gt;&lt;br /&gt;Satisfied for now with the page generator I'll be updating the content more regularly and probably work on some new dynamic aspects of the site. This will improve the site and increase the use and testing of Cocotron on Linux.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4497805127094883909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2008/01/cocotronorg-facelift.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4497805127094883909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4497805127094883909'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2008/01/cocotronorg-facelift.html' title='cocotron.org facelift'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-3356416792832399819</id><published>2007-12-09T21:51:00.000-05:00</published><updated>2007-12-09T22:37:13.725-05:00</updated><title type='text'>Globalization, Home Depot and Wood Trim</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-12-09/FinishedWindows.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;For the last year or so one of our ongoing projects around the house has been to finish a room above the garage. Most of the larger jobs have been contracted out, but we're doing the finish work ourselves. My wife and I painted (I got the ceiling), I installed flooring during Thanksgiving week and am now doing the trim.&lt;br /&gt;&lt;br /&gt;I went down to Home Depot a few days ago, bought a bunch of trim which matches the rest of the house, polyurethaned it over the course of a couple days and set about installing it today. You could drive yourself crazy trying to make this kind of thing perfect and I am trying to get it done in a finite amount of time, so I give myself some allowance for fit. However, when I started putting up the window trim I started to wonder if I was missing something fundamental.&lt;br /&gt;&lt;br /&gt;When I bought the trim I had noticed it came from Chile, which struck me as a long way away to obtain Pine, but, well, ok. Then as I was polyurethaning I noticed some of it was from New Zealand too. Pine from the other side of the planet! Well, ok.  Then when I went to take these pictures I noticed some was from Mexico too. Ok, that almost seems reasonable. &lt;br /&gt;&lt;br /&gt;But all these origins are actually the problem.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-12-09/NewZealand.jpg" border=0&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-12-09/Chile.jpg" border=0&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-12-09/Mexico.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;The Pine from New Zealand (right), despite have identical SKU's was milled differently than the Pine from Chile (left) and Mexico. The thinnest part of the trim is significantly thicker on the NZ Pine, and the profiles are ever so slightly different.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-12-09/SideBySide.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;It doesn't look like much here, but when you put it up, this happens:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-12-09/CasementMismated.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I had to run out today to get more trim, needless to say, I made sure it was all from the same country.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/3356416792832399819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/12/globalization-home-depot-and-wood-trim.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/3356416792832399819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/3356416792832399819'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/12/globalization-home-depot-and-wood-trim.html' title='Globalization, Home Depot and Wood Trim'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-5480650159313406828</id><published>2007-11-03T13:20:00.000-04:00</published><updated>2007-11-03T13:31:41.027-04:00</updated><title type='text'>CGCreateShading example revisited for Leopard</title><content type='html'>I upgraded one of my machines to Leopard&lt;br /&gt;&lt;br /&gt;The original post for Tiger: &lt;a href="http://www.objc.net/blogger/2007/07/radial-shader-fun.html"&gt;Radial Shader Fun&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Better, I suppose.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-11-03/LeopardRadialShading.png"&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/5480650159313406828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/11/cgcreateshading-example-revisited-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/5480650159313406828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/5480650159313406828'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/11/cgcreateshading-example-revisited-for.html' title='CGCreateShading example revisited for Leopard'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-2621163862963959164</id><published>2007-09-17T14:08:00.000-04:00</published><updated>2007-09-17T20:12:18.193-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>Objective-C front-end for LLVM in the works</title><content type='html'>If you are at all interested in the future of the C/C++/Objective-C/Objective-C++ compiler(s) on OS X:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://clang.llvm.org"&gt;clang.llvm.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Basically, Apple is working on a whole new compiler based on LLVM which does C/C++/Objective-C/Objective-C++ and is syntax compatible with gcc. The presentation is done by Steve Naroff a long-time NeXT/Apple engineer. Well worth the watch for commentary on where Apple is going, and why gcc doesn't cut it.&lt;br /&gt;&lt;br /&gt;Apple has already contributed a lot of ARM work to LLVM, so I suspect this is the beginning of the end for gcc on OS X.&lt;br /&gt;&lt;br /&gt;Interesting to note is that LLVM is BSD licensed.&lt;br /&gt;&lt;br /&gt;More details:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lists.cs.uiuc.edu/pipermail/llvmdev/2007-July/009817.html"&gt; http://lists.cs.uiuc.edu/pipermail/llvmdev/2007-July/009817.html&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/2621163862963959164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/09/objective-c-front-end-for-llvm-in-works.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2621163862963959164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2621163862963959164'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/09/objective-c-front-end-for-llvm-in-works.html' title='Objective-C front-end for LLVM in the works'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-2321918599299652594</id><published>2007-09-10T20:07:00.000-04:00</published><updated>2007-09-10T21:12:23.845-04:00</updated><title type='text'>VMware Fusion's shared folders suck</title><content type='html'>The Intel Mac and virtualization were a godsend for me, I could do cross-platform development all on one machine. No more sitting at a desk with a Mac and a PC, switching back and forth between keyboards and mice. I could get OS X, Windows 2000, XP, Vista and whatever Windows variation I wanted all packed up in a MacBook Pro.&lt;br /&gt;&lt;br /&gt;My initial allegiance for virtualization was VMWare, they were established in the market and I had heard good things about their products. The Parallels beta changed that, it was available much sooner and it worked. I got my ideal system up and running in short order - Windows 2000 in a virtual machine running on OS X. Sweet! (Like a BMW with whitewall tires)&lt;br /&gt;&lt;br /&gt;Shared folders were the first thing to be configured, I set them up and off I went on my merry way. I do my Windows build on OS X using a cross-compiler, and run it from the shared folder in Windows land. I bought Windows XP and Vista and was extremely pleased with the setup. They all shared the same folders and it worked like a champ. &lt;br /&gt;&lt;br /&gt;At some point a few months back my machine locked up and I had to do a hard power down. Not thinking much of it at the time Parallels was running XP. A month or so later (I use Win2k regularly) I would discover that my XP virtual machine was trashed. Not knowing when it got trashed I'd have to dig through my backups for a good copy, annoying. But no rush, I could use 2k and Vista.&lt;br /&gt;&lt;br /&gt;I recently began playing with OpenGL again in an attempt to get NSOpenGLView functional in Cocotron. The OpenGL performance on Win2k in Parallels is not very good so I was looking to use XP more often. I figured what better time than to give VMWare's Fusion a shot with a fresh install.&lt;br /&gt;&lt;br /&gt;Setting things up were as painless as Parallels, I installed XP, set up the shared folders and started to use it for real work.&lt;br /&gt;&lt;br /&gt;Then I started doing some head scratching.&lt;br /&gt;&lt;br /&gt;I would make changes to my programs and they would not show up in Windows land. Fix a bug and it would still be there. Try to add some debugging output and it wouldn't show up. What the hell. The shared folder became a suspect. What I would come to discover is that changing a file on the Mac side would not necessarily show up on the Windows side. This was a complete hassle for me.&lt;br /&gt;&lt;br /&gt;My workaround is to delete the file on the Windows side, then copy it in on the Mac side. It works, but what a goddamn headache. It should just work. Shared folders have always worked for me in Parallels , but shared folders in Fusion are broken in a final release product. Sigh!&lt;br /&gt;&lt;br /&gt;All the fancy features are lost in this one basic thing.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/2321918599299652594/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/09/vmware-fusions-shared-folders-suck.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2321918599299652594'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2321918599299652594'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/09/vmware-fusions-shared-folders-suck.html' title='VMware Fusion&apos;s shared folders suck'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-9008106102537034702</id><published>2007-08-17T23:27:00.000-04:00</published><updated>2007-08-17T23:32:43.566-04:00</updated><title type='text'>Lightning taken with a point and shoot</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-08-17/lightning.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;Total luck, first shot, never got another even close. Canon SD800IS.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/9008106102537034702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/08/lightning-taken-with-point-and-shoot.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/9008106102537034702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/9008106102537034702'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/08/lightning-taken-with-point-and-shoot.html' title='Lightning taken with a point and shoot'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-2187141597848106035</id><published>2007-08-08T16:12:00.000-04:00</published><updated>2007-08-08T16:17:31.989-04:00</updated><title type='text'>Apple redefines the periodic table of elements</title><content type='html'>&lt;a href="http://www.apple.com/imac/design.html"&gt;http://www.apple.com/imac/design.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The new iMac is made with Aluminum, the 13th element, and glass the 14th element.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.objc.net/blog-media/2007-08-08/glass.jpg" border=0&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/2187141597848106035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/08/apple-redefines-periodic-table-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2187141597848106035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/2187141597848106035'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/08/apple-redefines-periodic-table-of.html' title='Apple redefines the periodic table of elements'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-7834533031609563556</id><published>2007-08-04T22:53:00.001-04:00</published><updated>2007-08-04T22:59:52.580-04:00</updated><title type='text'>egg update</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-08-03/robinTwins.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;These guys have been growing at an amazing rate. Not sure what happened to the third egg, possibly underneath them.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/7834533031609563556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/08/egg-update.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/7834533031609563556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/7834533031609563556'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/08/egg-update.html' title='egg update'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4592562060753130084</id><published>2007-07-29T15:13:00.001-04:00</published><updated>2007-07-29T15:13:34.267-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BAT'/><title type='text'>Above the deck</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-07-29/bat.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;These guys love to camp out in the umbrella, on a semi-regular basis we get one and I try to take a half-decent picture but they are usually in a hard to get spot. This one was on the outside under a flap so I got a good reveal and close-up. He was bitching quite a lot after when I was trying to shoo him off. The focus is not the best but this is the best picture I got, taken from about a foot away.&lt;br /&gt;&lt;br /&gt;Honestly, I'd rather it be a bird, they know when to leave, are less erratic and don't land on you.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4592562060753130084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/above-deck.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4592562060753130084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4592562060753130084'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/above-deck.html' title='Above the deck'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-5995288201337538902</id><published>2007-07-21T18:00:00.000-04:00</published><updated>2007-07-21T15:10:56.679-04:00</updated><title type='text'>Apple Store Holyoke opening line</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-07-21/LineAtHolyokeOpening.jpg" border=0 width=600&gt;&lt;br /&gt;&lt;br /&gt;I had an 11am appointment in the area so I swung by the grand opening of the Apple Store in Holyoke, MA. This was the line at about 10:15 taken from the Starbucks. I got my iced latte and went on my way.  Stopped by later at 12:45 and there was no line at all. Relatively small store, a lot of employees and a lot of security for the opening.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/10319379@N03 "&gt;Good photo set of the store.&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/5995288201337538902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/apple-store-holyoke-opening-line.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/5995288201337538902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/5995288201337538902'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/apple-store-holyoke-opening-line.html' title='Apple Store Holyoke opening line'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-1190819779480573071</id><published>2007-07-17T15:38:00.000-04:00</published><updated>2007-07-17T12:35:38.645-04:00</updated><title type='text'>Under the deck</title><content type='html'>&lt;img src="http://www.objc.net/blog-media/2007-07-17/RobinsNest.jpg" border=0&gt;&lt;br /&gt;&lt;br /&gt;Every year we get a nest under our deck, I usually pull it down in the Fall when it has been abandoned and show the kids. In the meantime I leave it alone, but while walking around the yard with a camera the other day it dawned on me I could take a peek.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/1190819779480573071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/under-deck.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/1190819779480573071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/1190819779480573071'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/under-deck.html' title='Under the deck'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-8739480805489146899</id><published>2007-07-09T12:30:00.000-04:00</published><updated>2007-07-10T00:10:42.568-04:00</updated><title type='text'>Bushkill Falls, PA</title><content type='html'>When a place bills itself as "The Niagara of Pennsylvania" one is allowed to be skeptical. Perhaps that is part of the marketing plan, by overselling itself you expect it to be completely lame but are curious at the same time.  So when you go there and it is not completely lame you have a good time.&lt;br /&gt;&lt;br /&gt;We found ourselves near Bushkill Falls a few weeks ago, my wife had been there before and convinced me to make a day of it. I've been to Niagara and it is definitely no Niagara - it is a different kind of place, a series of man made trails and bridges that wind themselves over two relatively small rivers and a &lt;i&gt;lot&lt;/i&gt; of waterfalls. &lt;br /&gt;&lt;br /&gt;The story behind places like this fascinate me, some guy a hundred years ago finds the waterfalls and starts building a series of walkways, turns it into a tourist attraction and now his descendants run the place. It's not a government funded operation but the result of some young entrepreneur building on his vision of a tourist attraction and making it successful for decades to come. It seems so completely crazy to think about starting a business like that, some waterfalls? in what was the middle of nowhere? you're going to get people to visit? and pay to walk around? Brave person.&lt;br /&gt;&lt;br /&gt;If you find yourself in the area I would definitely recommend it, good way to kill an afternoon hiking around the woods and water. It is probably even more dramatic after some serious rain or thaw.&lt;br /&gt;&lt;br /&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill1.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill3.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill4.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill5.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill6.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill7.jpg"&gt;&lt;img width=300 border=0 src="http://www.objc.net/blog-media/2007-07-09/Bushkill8.jpg"&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/8739480805489146899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/bushkill-falls-pa.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/8739480805489146899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/8739480805489146899'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/bushkill-falls-pa.html' title='Bushkill Falls, PA'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-8854500865900887504</id><published>2007-07-08T15:36:00.000-04:00</published><updated>2007-07-09T12:34:06.633-04:00</updated><title type='text'>Apple Store ... Holyoke ???</title><content type='html'>&lt;a href="http://www.objc.net/blog-media/2007-07-08/Ingleside.jpg "&gt;&lt;img width=600 border=0 src="http://www.objc.net/blog-media/2007-07-08/Ingleside.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.objc.net/blog-media/2007-07-08/Ingleside-2.jpg "&gt;&lt;img width=600 border=0 src="http://www.objc.net/blog-media/2007-07-08/Ingleside-2.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(click on images for larger version)&lt;br /&gt;&lt;br /&gt;While pushing my son around the Ingleside Mall in Holyoke, MA a couple months ago I glanced up from my trance of making sure his stroller did not run into anyone to see the black wall with the gray logo symbolic of an Apple Store being installed. I was honestly shocked and amazed to see this. The Ingleside is undergoing a much needed revival but it is still quite dated looking in large areas and has some pretty depressing stores, such as the bleak pet store which carries puppies and kittens despite the giant PETCO down the road, and the food court that needs to be flooded with Goo Gone. Things started to make a little more sense when I looked around to see a Starbucks going in down the way, opening a couple weeks before the Apple store, it must be a conspiracy, or definitely some sort of deal. (Check out &lt;a href="http://www.flickr.com/photos/gedawei/733499751 "&gt;the comment on this image of the Ginza store&lt;/a&gt; for more evidence of Apple and Starbucks in cahoots)&lt;br /&gt;&lt;br /&gt;The closest Apple Store to me right now is 1hr 20 minutes away at a mall in Connecticut I rarely go to, my first pick if I had to go to an Apple Store would be Cambridge, MA because I can always use an excuse to go back to the place I called home for 10 years. The Apple Store in Holyoke will be a mere 40 minutes away along a route I regularly travel, better.&lt;br /&gt;&lt;br /&gt;I don't even know why I am sort of happy to see it go in, a sign of progress perhaps, property values going up, the once depressing mall becoming more useful at a steady pace. Honestly, Apple probably could have bargained to get the whole city of Holyoke to clean up a bit before they put the store in.&lt;br /&gt;&lt;br /&gt;I brought my camera today and stitched together the Starbucks/Apple cabal, despite having an &lt;a href="http://www.esselon.com"&gt;insanely good coffee place&lt;/a&gt; nearby I probably will visit Starbucks and the Apple Store while killing time.&lt;br /&gt;&lt;br /&gt;The dowside, or perhaps upside I suspect is that the small local Apple resellers will probably get crushed by the new store. I'm not sure if this is a bad thing as the last and only time I went to a local reseller was to check it out and get a spare battery for my MBP. I waited far too long for the cashier to stop chit chatting with a non-customer, they couldn't find the part number (despite the machine having been out over 6 months) and never ever called me back about it even though I placed an order for it on paper. So, screw them, welcome Apple Store.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/8854500865900887504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/apple-store-holyoke.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/8854500865900887504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/8854500865900887504'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/apple-store-holyoke.html' title='Apple Store ... Holyoke ???'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19210567.post-4814937138442071345</id><published>2007-07-07T14:55:00.001-04:00</published><updated>2007-07-08T00:27:42.739-04:00</updated><title type='text'>CGShading and PDF 1.4</title><content type='html'>The document &lt;a href="http://developer.apple.com/documentation/GraphicsImaging/Reference/CoreGraphicsReferenceCollection/CoreGraphicsReferenceCollection.pdf"&gt;Core Graphics Reference Collection&lt;/a&gt; states "Core Graphics technologies include Quartz 2D, the drawing API that implements a superset of the PDF 1.4 specification", which is in turn defined here: &lt;a href="http://www.adobe.com/devnet/pdf/pdfs/PDFReference.pdf"&gt;PDF Reference 1.4&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The public API for CGShading in Quartz 2D allows you to create two types of shadings, axial  via CGShadingCreateAxial and radial via CGShadingCreateRadial.&lt;br /&gt;&lt;br /&gt;Page 232 of the PDF 1.4 reference begins the discussion on shading where it goes on to define seven types of shadings, function based, axial, radial, free-form Gouraud-shaded triangle mesh, lattice-form Gouraud-shaded triangle mesh, Coons patch mesh and Tensor-product patch mesh.&lt;br /&gt;&lt;br /&gt;Well, so much for Quartz 2D being a "superset" of PDF 1.4.&lt;br /&gt;&lt;br /&gt;The public API for CGFunction allows you to create one type of function, a sampled function.&lt;br /&gt;&lt;br /&gt;The PDF 1.4 specification defines 4 types of functions, sampled, exponential interpolation, stitching, and PostScript calculator.&lt;br /&gt;&lt;br /&gt;At this point one could argue that the CGFunction API allows you to create any of the function types because you can code up the function however you want.  While this does work in an interactive environment, once you print you are exclusively in the realm of sampled functions as the PDF generation can not magically turn your C function into a PDF function definition other than sampled.&lt;br /&gt;&lt;br /&gt;The sampling rate of the CGFunction appears to be fixed, CoreGraphics calls your sampling function 4097 times regardless of how big or small the gradient is. 10 pixel wide gradient? 4097 times, 100,000 pixel wide gradient? 4097 times.  In practice this isn't a big deal, the sampling rate is high enough to disguise any error, although far too high for most small gradients.&lt;br /&gt;&lt;br /&gt;While the lack of the more sophisticated shading types seems reasonable for most applications, it does make it disingenuous to say that Quartz 2D is a superset of PDF 1.4.&lt;br /&gt;&lt;br /&gt;The thing that disturbs me the most is that the CGFunction API uses a callback, the first three and definitely most popular function types are very easily represented without callbacks. One could argue that in order to do the PostScript calculator function type this would be most easily done with callbacks - but it is turned into a sampled function anyway, so what would be the point. The PDF function specifications are right there in the PDF specification, I don't know why Apple didn't use them.</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/4814937138442071345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.objc.net/blog/2007/07/cgshading-and-pdf-14.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4814937138442071345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19210567/posts/default/4814937138442071345'/><link rel='alternate' type='text/html' href='http://www.objc.net/blog/2007/07/cgshading-and-pdf-14.html' title='CGShading and PDF 1.4'/><author><name>cjwl</name><uri>http://www.blogger.com/profile/07664947115106527981</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>