tag:blogger.com,1999:blog-101602172024-03-12T23:57:35.679-05:00blukeBlog (n): A person with nothing to say writing for people with nothing to do.<br/>
Blog + Luke : Bluke.Unknownnoreply@blogger.comBlogger64125tag:blogger.com,1999:blog-10160217.post-24369913772080011612011-04-15T14:04:00.002-05:002011-04-15T14:04:40.606-05:00301 Moved Permanently<a href="http://groovecoder.com">http://groovecoder.com</a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-12549356126256814912010-05-24T13:08:00.007-05:002010-05-24T13:31:49.066-05:00quick blurb on NoSQLI've spent about as much time thinking about this as NoSQL developers spend thinking about their schema, but here it is anyway.<br /><br />At SourceForge I'm presently developing and maintaining a few different systems using all kinds of web tech's and languages - PHP, python, solr, Postgres, MySQL, and mongo. One thing I'm noticing is that the mongo systems are something of a breeze to write, and then a real challenge to maintain - especially debugging. Our mongo experts mostly say that the tooling for mongo is just 'immature.' I'm sure they're right, but that also points toward what I think might be a fundamental difference in the two modes of development.<br /><br />AFAIK, there aren't any "old" NoSQL systems around? Mongo is only out since 2007, and Cassandra since 2008? We started using mongo early 2009, and even just one year out it feels so much more painful to maintain than our Postgres or MySQL systems that have been around since 1999! My theory is that NoSQL sacrifices maintenance and future development effort for the sake of startup development. I even made a neat drawing:<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Fa_U5q7fBBY/S_rDEmp6JtI/AAAAAAAAAHA/HzWpTb8kA5U/s1600/schema_vs_nosql.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 600px; height: 200px;" src="http://1.bp.blogspot.com/_Fa_U5q7fBBY/S_rDEmp6JtI/AAAAAAAAAHA/HzWpTb8kA5U/s400/schema_vs_nosql.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5474902780885477074" /></a><br /><br />Initially mongo seems to save on effort until the first valley - initial launch. At this point, the system launches and typically starts interacting with other systems and with users - data requirements change towards reality, which means <span style="font-weight:bold;">code</span> - i.e., function and logic - changes, not just model. In our environment, all other systems that use the data must also change their code which seems harder than the originating code. The code and the data are so intermixed that seemingly any and every change in either domain makes knock-on effects that have to be addressed.<br /><br />In a typical schema data system, we front-load a bit of data modeling effort. After launch, when we get new and changing data requirements we typically address the schema changes that might be involved, and may have to write a data migration/transformation script. But beyond that, it seems we don't have to worry about data integrity or any other knock-on effects. We can change some data-access or model classes and be on our way.<br /><br />So, am I just an old crusty developer shouting at these NoSQL kids to "get off my lawn!" ? Or has anyone else noticed this too? Maybe it's just the heterogeneous mix of NoSQL + schema that's killing me. Just seems like such a pain for not enough benefit?Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-54909956158008567842010-01-26T11:35:00.005-06:002010-01-26T12:21:27.349-06:00a rant about rantingDisclaimer: this post is totally my own opinion and does not reflect anything from SourceForge at all. that's why it's here on this blog.<br /><br />I'm angry and want to shoot my mouth off - perfect opportunity for a long-lost blog.<br /><br />We - i.e., <a href="http://sourceforge.net">SourceForge</a> are getting some crap for <a href="https://sourceforge.net/blog/clarifying-sourceforgenets-denial-of-site-access-for-certain-persons-in-accordance-with-us-law/">blocking sanctioned countries from our site</a>. That's fine - I'm actually ticked off about it too. And many people out there are making sound and solid comments about the action - not just the ones defending SourceForge; there are some good solid critical comments too.<br /><br />But then you have people who say something like this:<br /><br /><blockquote>Sourceforge, you suck! You suck so badly, I’ll hereby guarantee you that I’ll not only recommend *anybody* stay the heck away from you scumbags, I’ll actively let everybody know that you’re the scum of the earth. Shame on you! Shame!</blockquote><br /><br />With love from <a href="https://sourceforge.net/users/pyalot">pyalot</a>. Well pyalot, since we're all good to judge and criticize each other, let's get started ...<br /><br />So you are Florian Bösch. Okay Florian, let's see <a href="http://ch.linkedin.com/in/pyalot">here</a> ... you've worked at <a href="http://www.esystor.com/">Systor</a>(?), <a href="http://www.accenture.com">Accenture</a>, and <a href="http://www.dws.com">DWS</a>. Systor <a href="http://www.esystor.com/shop/IPS002.asp?LClssCd=000&LClssNm=&MClssCd=&MClssNm=">doesn't seem too keen on open-source</a>?, <a href="http://www.dws.com/EN/search/?SearchTerm=open%20source">nor does DWS</a>. Ah, looks like <a href="http://www.accenture.com/Global/Technology/Open_Source/default.htm">Accenture has some good open source work</a>; but what's this?! It's right alongside <a href="http://www.accenture.com/Global/Technology/Microsoft_Solutions/default.htm">Microsoft</a> and <a href="http://www.accenture.com/Global/Technology/Enterprise_Solutions/Oracle_Solutions/default.htm">Oracle</a> solutions?! OMFG! You are the scum of the earth for working with them! GRARRR!<br /><br />Or, if I take an extra minute, I find you're actually <a href="http://pyalot.blogspot.com/">a stand-up guy</a> and <a href="http://dev.codeflow.org/">developer</a> and <a href="http://bitbucket.org/pyalot/">a good contributor to open-source</a>!<br /><br />Couple lessons here:<br /><br /><ol><br /><li>we're not anonymous on the internet anymore; I found all of this info on Florian starting from his sf.net user page</li><br /><li>when we only look at a single facet of any news story or party, we get a very distorted view</li><br /></ol><br /><br />I actually sympathize with Florian's sentiments - blocking access from countries goes against the FLOSS ideal. But at the end of the day, SourceForge is a US company under US law. And if we're not law experts we should probably speak our opinion quietly or not at all.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-87196766365862928692009-07-21T01:28:00.004-05:002009-07-21T01:34:04.855-05:00OSCON quotes - day 1I want to share quotes I overhear at OSCON 2009. Most of these are from fellow SourceForgers ...<br /><br /><ul><br /><li>I'm a fan of the minimalist beauty of the electronic device.</li><br /><li>Your API is not a beautiful fucking snowflake.</li><br /><li>I am as asymptotically close to clean as possible.</li><br /><li>You're going to be happy about not being happy.</li><br /><li>I'm German, we know how to deal with crowds.</li><br /><li>It doesn't matter, you eat it with rice and bread.</li><br /><li>I fucked the grower to get this shit.</li><br /><li>It's amazing what you can fit up your ass with a little practice.</li><br /><li>I don't like my balls soaked in sugar syrup.</li><br /><li>People shouldn't call each other tar pit.</li><br /><li>There's nothing you can think of with an olive that I haven't already video'd and sold on the internet.</li><br /><li>Is this the placenta thing?</li><br /><li>All eating human flesh stories start with, "I was going to med school."</li><br /></ul>Unknownnoreply@blogger.com4tag:blogger.com,1999:blog-10160217.post-58537992438830770162009-02-06T16:04:00.015-06:002009-02-06T16:49:11.173-06:00Test-Driven [Design|Development]Today I learned to appreciate Test-Driven <span style="font-weight: bold;">Design</span> a little bit more. Here's the story.<br /><br />I'm writing some RSS feeds that will contain extensions and other non-RSS elements using XML Namespaces. I'm using Zend_View and Zend_Feed and I thought the best place to put the namespace would of course be at the top of my default.rss.phtml template file - that way I can register all the namespaces at once at the top of the feed. Instead of writing the test first, I wrote the code first. Took maybe 10-20m and seems to work fine:<br /><pre name="code" class="xml"><br /><rss content="http://purl.org/rss/1.0/modules/content/" <br />doap="http://usefulinc.com/ns/doap#" <br />sf="http://sf.net/api/sfelements.rdf#" <br />foaf="http://xmlns.com/foaf/0.1/" <br />rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" <br />version="2.0"><br />....<br /></rss><br /></pre><br />Then I go to write the test. Lo and behold - it's a big pain in the ass to consume the feed using SimpleXML.<br /><br />It's easy enough to create a SimpleXML element out of the feed, but I can't create SimpleXML elements from the content:encoded XML data:<br /><pre name="code" class="xml"><br /><content:encoded><br /><!--[CDATA[<doap:version><br /><doap:name>Project 1.1 - Foobaj</doap:name><br /><doap:created>1202221896</doap:created><br /><doap:helper><br /><foaf:person><br /><foaf:name>admin1</foaf:name><br /><foaf:homepage resource="http://lcrouch-703.sb.sf.net/users/admin1"><br /><foaf:mbox_sha1sum>6dd817a0f71590a68131a5e83b1bd73944654e8d</foaf:mbox_sha1sum><br /></foaf:Person><br /></doap:helper><br /><doap:file-release>proj1.file1.tgz</doap:file-release><br /><sf:download-count>0</sf:download-count><br /></doap:Version>]]--><br /></content:encoded><br /></pre><br />Because all the namespaces used in the DOAP class aren't in the content. Argh! My first thought is to screw SimpleXML and do a raw string search/parse in the test. But then I had my epiphany: "If I were an actual client of this feed, I would want to be able to parse it easily with SimpleXML or with any other XML library."<br /><br />I ended up pushing the xml namespace declarations right down into the appropriate elements - where I now think they are *supposed* to be:<br /><pre name="code" class="xml"><br /><content:encoded><br /><!--[CDATA[<doap:version <br />doap="http://usefulinc.com/ns/doap#" <br />sf="http://lcrouch-703.sb.sf.net/api/sfelements.rdf#"><br /><doap:name>Project 1.1 - Foobaj</doap:name><br /><doap:created>1202221896</doap:created><br /><doap:helper><br /><foaf:person <br />foaf="http://xmlns.com/foaf/0.1/" <br />rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><br /><foaf:name>admin1</foaf:name><br /><foaf:homepage resource="http://lcrouch-703.sb.sf.net/users/admin1"><br /><foaf:mbox_sha1sum>6dd817a0f71590a68131a5e83b1bd73944654e8d</foaf:mbox_sha1sum><br /></foaf:Person><br /></doap:helper><br /><doap:file-release>proj1.file1.tgz</doap:file-release><br /><sf:download-count>0</sf:download-count><br /></doap:Version>]]--><br /></content:encoded><br /></pre><br />Voila - SimpleXML starts parsing everything very easily.<br /><br />This is one of the biggest boons for Test-Driven Development - the effects it has on the way you <span style="font-weight:bold;">design</span> your code. If I had not tested my code as an actual client would use it, I would have produced some pretty shoddy feeds with useless XML namespacing.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-44691440533093398722009-01-23T09:44:00.002-06:002009-01-23T10:00:43.657-06:00Leave the editor openI've been trying to adopt some practices from <a href="http://oreilly.com/catalog/9780596519780/">The Productive Programmer</a>. Mostly by using more keyboard shortcuts and productivity tools like <a href="http://docs.blacktree.com/quicksilver/what_is_quicksilver">Quicksilver</a>, <a href="http://jumpcut.sourceforge.net/">Jumpcut</a>, etc.<br /><br />Yesterday and today I realized a productivity tactic that isn't in the book - just leave your work open when you "go home" for the night. Don't close the program. In fact, don't even close any files, tabs, or any background programs either. Just save everything and walk away.<br /><br />The effectiveness of this trick is related to <a href="http://www.joelonsoftware.com/articles/fog0000000339.html">something Joel wrote about a while back</a> ...<br /><br /><blockquote>For me, just getting started is the only hard thing. An object at rest tends to remain at rest. There's something incredible heavy in my brain that is extremely hard to get up to speed, but once it's rolling at full speed, it takes no effort to keep it going. Like a bicycle decked out for a cross-country, self-supported bike trip -- when you first start riding a bike with all that gear, it's hard to believe how much work it takes to get rolling, but once you are rolling, it feels just as easy as riding a bike without any gear.<br />Maybe this is the key to productivity: just getting started. Maybe when pair programming works it works because when you schedule a pair programming session with your buddy, you force each other to get started.</blockquote><br /><br />In the bike metaphor, leaving all your work open is like leaving the bike poised on a down-hill slope. All you have to do is get back to it and hop on. If I sit down at a blank desktop, I'm more likely to open my email, read my RSS feeds, open work email, and THEN, finally, open my code editors. If I sit down in front of a code editor, I'm likely to start editing code immediately.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-32355943372988668912009-01-09T09:14:00.009-06:002009-01-09T09:57:30.041-06:00Seven things that probably you may not know about me<a href="http://duodraco.wordpress.com/2009/01/09/seven-things-that-probably-you-may-not-know-about-me/">Anderson tagged me</a>, so I'll give this a try, though I'm going to have a tough time finding 7 other people who haven't been tagged already.<br /><ul><br /><li><strong>I have a black belt</strong> in the hodge-podge kick-boxing-jujutsu-taekwondo-karate style of fighting they teach at Apollo's Karate.</li><br /><li><strong>I have an identical twin brother, and 2 older brothers</strong>, one of whom is also a PHP developer.</li><br /><li><strong>I am <a href="http://emergingcatholic.blogspot.com/">emerging Catholic</a>.</strong></li><br /><li><strong>I brew my own beer.</strong></li><br /><li><strong>I love soccer.</strong> I try to play every weekend. Also, GO <a href="http://www.liverpoolfc.tv/">REDS</a>!</li><br /><li><strong>I can speak conversational Russian.</strong> I also speak a little French, a tiny bit of German and Portuguese, and I'm starting to learn Spanish. I'm only fluent in English though. :(</li><br /><li><strong>I landed my job at SourceForge after I made <a href="http://sourceforge.net/projects/ajaxmytop">an OSS project there</a>.</strong> So go make one yourself! :)</li><br /></ul><br />I'll tag ...<br /><ul><br /><li><strong><a href="http://btetc.blogspot.com/">Matt Crouch</a></strong> - above-mentioned brother.</li><br /><li><strong><a href="http://teedubya.blogspot.com/">Travis West</a></strong> - SourceForge colleague and long-time friend.</li><br /><li><strong><a href="http://steven.bitsetters.com/">Steven Osborn</a></strong> - developer from Vidoop who helped me run the <a href="http://tulsaphp.net">Tulsa PHP User Group</a> until he ditched us for Portland. ;)</li><br /><li><strong><a href="http://www.findmotive.com/">Noah Everett</a></strong> - Tulsa PHP developer I met thru TPUG; he created and maintains <a href="http://twitpic.com">twitpic</a>.</li><br /><li><strong><a href="http://bradvernon.com/">Brad Vernon</a></strong> - Tulsa PHP + Ruby developer I met thru TPUG.</li><br /><li><strong><a href="http://www.vancelucas.com/">Vance Lucas</a></strong> - Another PHP developer here in Oklahoma. Met him at <a href="http://techfests.com/Tulsa/2008/default.aspx">Tulsa Tech Fest 2008</a>.</li><br /><li><strong><a href="http://www.rafaeldohms.com.br/pt/">Rafael Dohms</a></strong> - PHP developer in Brazil; he saved my ass at <a href="http://www.phpconf.com.br/">PHP Conference Brasil '08</a> when he found a DVI-VGA adapter for me to present my keynote.</li><br /></ul><br />So tagging it back to Brazil, from whence I was tagged. :)Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-88526450966809606792009-01-08T13:54:00.019-06:002009-01-09T09:56:37.141-06:00Unit-testing ZF Controllers without Zend_TestI've read a couple articles and blog posts recently talking about <a href="http://phpimpact.wordpress.com/2008/12/27/phpunit-testing-zend-framework-controllers/">Zend_Test</a> and/or <a href="http://phpimpact.wordpress.com/2008/12/27/phpunit-testing-zend-framework-controllers/">testing Zend Framework Controllers</a>. Particularly for controller testing, I'm kinda surprised how much plumbing code people are using. I recently started testing some Zend_Controller code (from ZF 1.5 even!) at SourceForge and did not do nearly that much plumbing.<br /><br />Basically, I want to test the controller code in isolation from the front controller, the router, the dispatcher, the views, etc. All I to do is set up a request object, invoke the action methods of the controllers, and then assert against the variables assigned to the view. For these tests, I don't care about the output of the view templates themselves - I just want to know the controllers are putting the right variables into the view object.<br /><br />It turns out this is actually pretty simple. I made a custom test case:<br /><br /><div style="width:450px; background-color:#EEEEEE; border:1px solid #CCCCCC; font-family: monospace; font-size: .8em; overflow:auto;"><br /><pre><br />class Sfx_Controller_TestCase extends Sfx_TestCase<br />{<br /> protected $_request;<br /> protected $_response;<br /> protected $_controller;<br /> <br /> public function setUp()<br /> {<br /> parent::setUp();<br /> <br /> // set up smarty view and restful view helper<br /> $viewRenderer = new Sfx_Controller_Action_Helper_TestViewRenderer();<br /> Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);<br /><br /> $this->_request = new Zend_Controller_Request_Http();<br /> $this->_response = new Zend_Controller_Response_Cli();<br /><br /> }<br />}<br /></pre><br /></div><br />Sfx_TestCase contains all my bootstrap code. However, the only thing I do in bootstrap is set include path and set up a default db adapter for Zend_Db_Table. I don't do anything with Zend_Controller_Front. So this may as well extend straight from PHPUnit_Framework_TestCase. I'm not sure why others are claiming you have to use Zend_Controller_Front to test ZF Controllers - you don't.<br /><br />I wrote and use Sfx_Controller_Action_Helper_TestViewRenderer (<a href="http://framework.zend.com/wiki/display/ZFPROP/Zend_Test_ViewRenderer">and proposed it as a core class</a>) to simply create an empty Zend_View object into which the controllers can assign variables. Here's the whole class:<br /><br /><div style="width:450px; background-color:#EEEEEE; border:1px solid #CCCCCC; font-family: monospace; font-size: .8em; overflow:auto;"><br /><pre><br />class Sfx_Controller_Action_Helper_TestViewRenderer extends Zend_Controller_Action_Helper_ViewRenderer<br />{<br /> public function initView()<br /> {<br /> if (null === $this->view) {<br /> $this->setView(new Zend_View());<br /> }<br /> // Register view with action controller (unless already registered)<br /> if ((null !== $this->_actionController) && (null === $this->_actionController->view)) {<br /> $this->_actionController->view = $this->view;<br /> }<br /> }<br />}<br /></pre><br /></div><br /><br />With only this much plumbing, I'm able to test the Controllers in isolation - no worrying about routes, dispatchers, plugins, helpers, nor view templates - like so:<br /><br /><div style="width:450px; background-color:#EEEEEE; border:1px solid #CCCCCC; font-family: monospace; font-size: .8em; overflow:auto;"><br /><pre><br />class ProjectControllerTest extends Sfx_Controller_TestCase<br />{ <br /> private function __constructProjectController()<br /> {<br /> return new ProjectController($this->_request, $this->_response);<br /> }<br /><br /> public function test_indexAction_fetches_all_projects()<br /> {<br /> $this->_controller = $this->__constructProjectController();<br /> $this->_controller->indexAction(); // assigns 'resources' to view<br /> $this->assertNotNull($this->_controller->view->resources);<br /> $this->assertEquals(27,count($this->_controller->view->resources));<br /> }<br /><br /> public function test_indexAction_new_since_fetches_only_new_projects()<br /> {<br /> $this->_request->setParam('new_since',1205880839);<br /> $this->_controller = $this->__constructProjectController();<br /> $this->_controller->indexAction();<br /> $projects = $this->_controller->view->resources;<br /> $this->assertEquals(4,count($projects));<br /> foreach($projects as $project){<br /> $this->assertGreaterThan(1205880839, $project->create_time);<br /> }<br /> }<br /><br /> public function test_indexAction_limit_limits_projects()<br /> {<br /> $this->_request->setParam('changed_since', 1205880839);<br /> $this->_request->setParam('order_by','changed_since');<br /> $this->_request->setParam('limit', 5);<br /> $this->_controller = $this->__constructProjectController();<br /> $this->_controller->indexAction();<br /> $projects = $this->_controller->view->resources;<br /> $this->assertEquals(5,count($projects));<br /> $prevChangeTime = 0;<br /> foreach($projects as $project){<br /> $this->assertGreaterThanOrEqual($prevRegTime, $project->change_time);<br /> $prevChangeTime = $project->change_time;<br /> }<br /> }<br /><br />}<br /></pre><br /></div><br /><br />I'm finding this to be a much simpler and easier way of testing ZF Controllers than the other articles I've been reading. Now if you <span style="font-weight:bold;">want</span> to test everything in the front controller dispatch process and the view templates, I think Zend_Test is the best bet, but I've not used it yet so I can't be sure. The above classes work fine for what I do.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-10160217.post-49950945240918762442008-12-24T13:03:00.004-06:002009-01-06T16:13:56.389-06:00Kiva.org<SCRIPT type="text/javascript" src="http://www.kiva.org/banners/bannerBlock.php?busId=81277" language="javascript"></SCRIPT><br /><a href="http://www.kiva.org/about">Kiva.org</a> is a remarkable organization in at least a couple ways - they employ <a href="http://en.wikipedia.org/wiki/Micro-finance">micro-finance</a> principles to aid entrepreneurs in developing countries, and they make excellent use of online technology to do so. We highlighted them in my <span style="font-style:italic;">International Aid and Development</span> class in college.<br /><br />I really like that they're using the <a href="http://longtail.com/">Long Tail</a> on both the lending side <span style="font-weight:bold;">and</span> the receiving side of micro-finance. I also like some of their cool web features - the portable badge above, and their use of <a href="http://developers.facebook.com/connect.php">Facebook Connect</a> to syndicate their activity to Facebook.<br /><br />One of our good friends gave us a $25 gift certificate to Kiva and I think it's one of the best gifts we've ever received. I've admired Kiva for a while but have never spent the time or effort to get involved with it; this small amount is really inspiring me to do more.<br /><br />UPDATE: Wow. When I picked my loan recipient, Margaret, she had 0% of her requested loan. In the 1-2 hours it took to get this blog post up, she received 100% of it. Go Kiva! Go Margaret!Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-26193303424699017712008-12-15T18:44:00.003-06:002008-12-15T19:00:47.413-06:00ZF Rest classesHoly crap. I forgot that way back after Tulsa Tech Fest <a href="http://bluke.blogspot.com/2008/10/tulsa-tech-fest-2008-slides.html">I promised to upload some Zend_Controller classes</a> I wrote to enable RESTful behavior. I think the presentation did a decent job conveying their purpose and operation, so <a href="http://tulsaphp.net/Controller.zip">here, finally, are the classes themselves</a>.<br /><br />If anyone does go look at them, feel free to comment/question here on this post about them.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-26968354469569855132008-12-09T09:08:00.003-06:002008-12-09T09:10:50.382-06:00PHP Brasil '08I have posted <a href="https://sourceforge.net/community/php-brasil-08/">a trip report about PHP Brasil '08</a> over at the SourceForge.net Community Hub. There's also a video of my talk, a link to <a href="http://blogs.oracle.com/opal/2008/12/php_brasil_08_trip_report_1.html">Chris Jones's thorough trip report</a>, and links to my presentation slides.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-16118991581234803102008-11-14T14:15:00.003-06:002008-11-14T14:39:41.814-06:00Laughably RidiculousOkay, although I'm an open-source devotee, I've actually intellectually bantered in favor of copyright law. I know, I'm sorry; but I can understand the philosophical underpinning of *a* copyright scheme ... even if I don't agree with its effectiveness.<br /><br />But <a href="http://torrentfreak.com/record-labels-to-sue-vuze-limewire-and-sourceforge-081114/">this</a> is just getting absurd.<br /><br /><blockquote>Interestingly, SPFF is also going after Sourceforge, the open source development website, because it hosts the P2P application Shareaza.</blockquote><br />So let me state this matter-of-factly:<br /><br />In suing SourceForge, SPFF is not suing an entity who distributes copyrighted material. They're not even suing someone who develops software that <span style="font-weight:bold;">might</span> be used to distribute copyrighted material. SPFF is suing <span style="font-style:italic;">someone (i.e., SourceForge) who develops software (i.e., <a href="http://sf.net/">sf.net</a>) that <span style="font-weight:bold;">might</span> be used to develop or distribute software (i.e., <a href="http://shareaza.sf.net/">Shareaza</a>) that <span style="font-weight:bold;">might</span> be used to distributed copyrighted material</span>.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-27365649768222372362008-11-03T13:25:00.002-06:002008-11-03T13:27:35.124-06:00Oklahoma State Question 743Here is, verbatim, text I received from the local homebrew shop about Oklahoma State Question 743. I think it's important for people to be informed when they vote, so I'm passing this along ... obviously it's biased pro-wine-makers...<br /><br /><blockquote>Fellow Oklahoma winemakers and homebrewers,<br />Tomorrow's election will have a state question that has a huge impact on the Oklahoma winemaking industry. In 2001, voters in Oklahoma voted over 70% in favor of allowing Oklahoma wineries to sell directly to liquor stores and restaurants without going through a distributor. That change allowed the wine industry to go from a few wineries to over 50 in just a few short years. Small wineries were able to sell to the local liquor stores and restaurants without being at the mercy of a wholesaler that had little interest in distributing for every little winery that opened here in Oklahoma.<br /> <br />Last year this law was challenged by the distributors as unconstitutional and was overturned by the state supreme court. The reasoning was that it created an unfair advantage for Oklahoma wineries over out of state wineries who were still required to go through a distributor. It was a huge blow. Out of state wineries that distribute in Oklahoma would more than likely use a distributor regardless.<br /> <br />In order to make the law "fair", a new question will be on tomorrows ballet. It rewrites the law to include any winery that produces under 10,000 gallons a year. Oklahoma wineries are dying on the vine right now. With out this change many will not succeed. Please pass this on to friends so that we can ensure that this law passes.<br /> <br />The following is the actual question appearing on the ballot:<br />State Question 743 - In Short: Wineries from Oklahoma and outside the state of Oklahoma will be able to sell their wine directly to retail stores and restaurants if SQ 743 is approved. Currently, they can only do so through a wholesaler or at fairs/festivals.<br /><br />Actual Ballot Text:<br /><br /> This measure amends Section 3 of Article 28 of the Constitution. It requires a customer to be twenty-one and physically present to purchase wine at a winery, festival or trade show. The measure changes the law to allow certain winemakers to sell directly to retail package stores and restaurants in Oklahoma. The change applies to winemakers who produce up to ten thousand gallons of wine a year. It applies to winemakers in state and out of state. Those winemakers may not also use a licensed wholesale distributor. They must sell their wine to every retail package store and restaurant in Oklahoma that wants to buy the wine. The sales must be on the same price basis. The sales must be without discrimination. Those winemakers must use their own leased or owned vehicles to distribute their wine. They may not use common or private carriers. If any part of this measure is found to be unconstitutional, no winemaker could sell wine directly to retail package stores or restaurants in Oklahoma.</blockquote>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-92051043667150089752008-10-30T17:30:00.002-05:002008-10-30T17:37:20.033-05:00Designing SimplicityDang! I wish I had this quote when I was making my REST slides for Tulsa Tech Fest. It's perfect!<br /><br /><blockquote>I think most people just make the mistake that it should be simple to design simple things. In reality, the effort required to design something is inversely proportional to the simplicity of the result.<br />-<a href="http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comment-724">Roy Fielding</a><br /></blockquote><br /><br />The man himself. Priceless. Goes along great with the one I <span style="font-style:italic;">did</span> use:<br /><br /><blockquote>A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.<br />-<a href="http://www.jimpoz.com/quotes/Speaker:Antoine_de_Saint-Exup%E9ry">Antoine de Saint-Exupry</a></blockquote>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-79386656341122582732008-10-23T12:38:00.008-05:002008-10-23T12:50:56.077-05:00Framework Performance according to RasmusAlright, so invoking Rasmus in the title is a bit provocative, but I stumbled on <a href="http://talks.php.net/show/froscon08/">an interesting talk of his; showing performance benchmarks for a number of popular php frameworks</a>. The first portion of the talk is exactly <a href="http://talks.php.net/show/oscon08">what he presented @ OSCON</a>, but the second half looks to be raw performance numbers. It looks like there are a couple specific, but easy, performance tweaks that he granted to certain frameworks, and I like seeing the data so much I thought I could try my hand at distilling it into Google Docs charts.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Fa_U5q7fBBY/SQC4W_KKKEI/AAAAAAAAABI/YXgaNBS3iOY/s1600-h/framework_performance_(higher_is_better).png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://4.bp.blogspot.com/_Fa_U5q7fBBY/SQC4W_KKKEI/AAAAAAAAABI/YXgaNBS3iOY/s320/framework_performance_(higher_is_better).png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260407069819414594" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Fa_U5q7fBBY/SQC4jP7k-cI/AAAAAAAAABQ/BN53Z--Vp30/s1600-h/framework_performance_(lower_is_better).png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 227px;" src="http://3.bp.blogspot.com/_Fa_U5q7fBBY/SQC4jP7k-cI/AAAAAAAAABQ/BN53Z--Vp30/s320/framework_performance_(lower_is_better).png" border="0" alt=""id="BLOGGER_PHOTO_ID_5260407280480090562" /></a><br /><br />It's interesting that some <a href="http://tulsaphp.net/">tulsaphp</a> guys and were recently talking about Zend had to be the slowest of all the frameworks, but apparently not so! That honor goes to CakePHP?Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-10160217.post-4784029237702187292008-10-09T17:24:00.002-05:002008-10-09T17:26:39.848-05:00Tulsa Tech Fest 2008 Slides<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://techfests.com/Tulsa/2008/SiteImages/logo.gif"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px;" src="http://techfests.com/Tulsa/2008/SiteImages/logo.gif" border="0" alt="" /></a><br />As promised, I'm posting my slides from my Tulsa Tech Fest 2008 presentation - <a href="http://tulsaphp.net/restful_mvc_zf.html">RESTful MVC in Zend Framework</a>.Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-10160217.post-33726057928873586392008-09-30T18:06:00.013-05:002008-09-30T18:52:17.412-05:00the binary canary testing pattern<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Fa_U5q7fBBY/SOKz6Lj7UTI/AAAAAAAAABA/BOQGrVtVFic/s1600-h/canary_coal_mine_0.gif"><img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Fa_U5q7fBBY/SOKz6Lj7UTI/AAAAAAAAABA/BOQGrVtVFic/s320/canary_coal_mine_0.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5251957927584682290" /></a><br /><br />I think I just invented a new testing pattern - The Binary Canary.<br /><br />Basically, I was grouping my PHPUnit tests into a test suite and I realized that my TestCase super-classes were "failing" because they had no tests in them. Obviously this is intentional - only the specific sub-classes would have tests.<br /><br />I guess I could have made the TestCase super-classes abstract, but instead I added this to the highest-level TestCase class:<br /><pre><br />/*<br /> * global test plumbing here<br /> */<br />class Sfx_TestCase extends PHPUnit_Framework_TestCase<br />{<br /> public function setUp()<br /> {<br /> // more global test plumbing here<br /> }<br /> public function test_Binary_Canary()<br /> {<br /> $this->assertEquals(<br /> "Binary Canary says test plumbing is working.", <br /> "Binary Canary says test plumbing is working."<br /> );<br /> }<br />}<br /></pre><br />My little binary canary serves two purposes:<br /><ol><br /><li>It adds an "always-pass" test to each of my TestCase classes so they don't throw up any more PHPUnit warnings.</li><br /><li>Because my TestCase classes set up context-specific test plumbing, the binary canary test inherited by each of them now alerts me if I screw up any of my test plumbing - and tells me the specific area.</li><br /></ol><br />For example:<br /><pre><br />class Sfx_Db_TestCase extends Sfx_TestCase<br />{<br /> public function setUp()<br /> {<br /> parent::setUp();<br /> // Db-specific test plumbing<br /> }<br />}<br /></pre><br />And:<br /><pre><br />class Sfx_Controller_TestCase extends Sfx_TestCase<br />{<br /> public function setUp()<br /> {<br /> parent::setUp();<br /> // Controller-specific test plumbing<br /> }<br />}<br /></pre><br />Just like the coal-miner canaries of old, this mechanism gives me a simple yes/no signal as to whether or not my test plumbing will soon kill me, <strong>and</strong> which plumbing code is the culprit.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-67323145824821499392008-09-26T10:28:00.006-05:002008-09-26T11:17:34.876-05:00bailoutsI usually try to avoid preachy blog postings, but I can't help it today. Blame it on "casual Friday" or something.<br /><br />Like lots of people, I'm pretty angry about the government using our taxes to bail out Wall Street incompetence. But now I've gone from angry to pissed-off. Here's why ... <br /><blockquote>The Dot-com bubble crash wiped out $5 trillion in market value of technology companies from March 2000 to October 2002.[11]<br /><br />Recent research suggests, however, that as many as 50% of the dot-coms survived through 2004, reflecting two facts: the destruction of public market wealth did not necessarily correspond to firm closings, and second, that most of the dot-coms were small players who were able to weather the financial markets storm.[12]<br /><br />--<a href="http://en.wikipedia.org/wiki/Dot-com_bubble#Aftermath">http://en.wikipedia.org/wiki/Dot-com_bubble#Aftermath</a></blockquote><br /><br />Not only do I work for a dot-com survivor, I work for one of the most bruised, battered, and beaten-up dot-com survivors. I mean, just check out <a href="http://finance.google.com/finance?chdnp=1&chdd=1&chds=1&chdv=1&chvs=maximized&chdeh=0&chdet=1222459200000&chddm=875449&q=NASDAQ:LNUX&ntsp=0">our stock chart</a>! I haven't asked around the office for official corporate history or anything, but I'm pretty sure no-one remembers getting a couple billion dollars from the government while the company lost close to 99% of its market value, but I have been told there were weekly, if not daily, downsizing announcements.<br /><br />Now I'm not jealous or vindictive on the part of my company - I wasn't even around for the toughest times. I'm just making a point here that market "catastrophes" and "crises" have happened, happen, and will always happen. Sadly, people will lose their jobs, their wealth, and their houses. In the case of the dot-com fallout, $5 trillion worth on Wall Street alone plus whatever subsequent losses are tallied.<br /><br />6 weeks ago, the Congressional Budget Office said taxpayers would need to spend $25 billion to bail out Fannie Mae and Freddie Mac. Now we are seeing figures up to $700 billion. The figure could very well balloon to beyond the $5 trillion lost in the dot-com burst, no-one really knows - not you, not me, not Wall Street, and not Washington.<br /><br />So why are we even considering footing the bill for this when no-one even knows what the total is, how it's going to be paid, or to whom we pay it? Obviously there are some very powerful financial market players gaming the system. They are not the "small players who [are] able to weather the financial markets storm."<br /><br />It would be interesting to see if the Financial/Credit/Mortgage-Lending industry follows a Long Tail distribution. Might be a case of the tall head exploiting the public to avoid their necessary chop down to obscurity ...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://images.despair.com/products/demotivators/underachievement.jpg"><img style="cursor:pointer; cursor:hand;width: 320px;" src="http://images.despair.com/products/demotivators/underachievement.jpg" border="0" alt="" /></a>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-27633007039049324792008-09-17T10:48:00.003-05:002008-09-17T11:11:20.186-05:00unit tests and just-got-it-working inertiaI've been reading and enjoying <a href="http://oreilly.com/catalog/9780596519780/">The Productive Programmer</a> by Neal Ford. It has re-ignited some of my passion for Test-Driven Development.<br /><br />This morning I finished a first phase of "refactoring" some code architecture and found myself extremely hesitant to dive straight into the next phase. I think it's because the extent of my "testing" was to tab over to the fully-functioning web page and refresh after each code change. That's pretty much an "all-or-nothing" scenario.<br /><br />And the thing about all-or-nothing scenarios is that once you've achieved the "all" state, you're very hesitant to go back to the "nothing" state. Maybe I'm starting to understand one of the benefits of unit tests as opposed to whole-sale acceptance tests. With smaller unit tests, you can move more concretely from nothing to something, then from something to something a little more, then finally to all done.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-61230122935416484972008-08-29T14:29:00.005-05:002008-08-29T14:46:57.432-05:00Brasil<div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phpconf.com.br/"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 320px;" src="http://www.phpconf.com.br/includes/templates/padrao/imagens/promo/phpconf_speaker_btn_en.gif" alt="" border="0" /></a><br /></div>One of the great things about working for a big-name web company is that you get big opportunities. I'll be speaking at PHP Conference Brasil '08 about how we use PHP at <a href="http://sourceforge.net/">SourceForge.net</a>. Needless to say, I'm very excited and planning some vacation time around the conference.<br /><br /><a href="http://news.bbc.co.uk/2/hi/business/4602325.stm">Open</a> <a href="http://www.wired.com/techbiz/it/news/2003/11/61257">source</a> is <a href="http://www.npr.org/templates/story/story.php?storyId=3919175">big</a> in <a href="http://news.bbc.co.uk/2/hi/business/3445805.stm">Brazil</a>. And even more pertinent, Brazil is our 3rd-highest nation in terms of site traffic - after U.S.A. and Germany.<br /><br />Hopefully I can <a href="http://www.amazon.com/Conversational-Brazilian-Portuguese-Understand-Schusters/dp/0743550447/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1220038883&sr=8-2">try</a> to overcome the language gap and present some informative material for everyone. One of the things that struck me when I joined <a href="http://sourceforge.net/">SourceForge.net</a> was that the site code isn't super-magic - it's really quite ordinary PHP, it's just very highly used.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-43044455643483247782008-08-03T14:16:00.004-05:002008-08-03T14:29:32.198-05:00Ubuntu FTW; Boot Camp FTL?quick update on my ubuntu experience ...<br /><br />webex went fine. linux client seamlessly downloaded and allowed me to join a webex conference. joined the teleconference via skype with just a small hiccup - took me a couple minutes of tweaking with various sound levels to get my mac's built-in mic going. but iSight camera was working with Skype straight away, so that was nice.<br /><br />but, near the start of my first full day, I needed to investigate an IE bug, so I tried booting up into my Windows partition. epic fail. blue screen immediately upon boot. :( tried fixing my mbr via the Windows XP install CD, but no luck with that either.<br /><br />I remembered that the <a href="https://help.ubuntu.com/community/MacBookPro#Preparing%20to%20Install%20Ubuntu%20alongside%20OS%20X%20&%20Windows%20XP%20%28Triple%20Boot%29">ubuntu instructions for triple-booting</a> suggested installing GRUB on the partition with ubuntu, and I also remembered that I had missed that step. so, I decided to reset and start all over again. I booted into Mac OS (no probs there - in all of this experimentation I never once had a problem booting into Mac OS), and used disk utility to destroy both my ubuntu and windows partitions.<br /><br />this time, I tried <a href="https://help.ubuntu.com/community/MacBookPro#Easiest%20Triple%20Boot%20%28Boot%20Camp%29">the other (easy) approach</a> and after installing Windows, I ran ubuntu installer. this time I remembered to install GRUB on the ubuntu partition, rather than defaulting to the mbr. however, when I booted up again, I had the same experience - Mac and Ubuntu would start up fine, but Windows failed to start again. :(<br /><br />because I constantly need to test in IE every day, I sadly decided that I needed to stop with all the experimentation and just resign to using Ubuntu on my secondary computers. :(<br /><br />it's too bad - I would love to have a triple-booting MacBook Pro, especially if I could fire up both my Windows and my Ubuntu systems inside a parallels or fusion vm.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-33982658796555559712008-07-28T22:22:00.003-05:002008-07-28T23:07:48.034-05:00Ubuntu FTW?I picked up an <a href="http://www.ubuntu.com/">Ubuntu</a> CD at <a href="http://en.oreilly.com/oscon2008/public/content/home">OSCON</a> and have now installed it on my macbook pro. I have no qualms saying this version (8.04) is easily the best Linux experience I've ever had...<br /><br />I had to connect to ethernet to get first batch of updates which also let me get <a href="https://help.ubuntu.com/community/WifiDocs/Driver/Ndiswrapper">ndiswrapper</a> and appropriate driver for my wifi card.<br /><br />once I had that, wifi connected and it was a single apt-get command to get the proper <a href="https://help.ubuntu.com/community/BluetoothSetup">bluetooth</a> module so my mouse would work. then I started downloading and playing with the new <a href="https://wiki.ubuntu.com/compiz">compiz</a> stuff. I have to say, compiz effects blow away Mac OS X effects, though they're not quite as pragmatically integrated into everyday uses.<br /><br />I fired up <a href="http://sourceforge.net/projects/pidgin/">pidgin</a> and got connected to our company jabber and my google talk account. similar simplicity and ease with <a href="https://wiki.ubuntu.com/Evolution">Evolution</a> for company email (though I also started trying <a href="http://www.zimbra.com/products/desktop_download.html">Zembra Desktop</a> since OSCON).<br /><br />our setup at sf.net is kinda unique in that we have our own sandbox sites that we can access and edit via webdav, so I did a simple apt-get for <a href="http://www.howtoforge.com/davfs_ubuntu">davfs2</a>, made the necessary mods to /etc/fstab and I was able to vim edit some code. but I decided to go looking for linux php editors. I tried <a href="http://bluefish.openoffice.nl/">bluefish</a> and <a href="http://www.jedit.org/">jedit</a> and liked jedit much more - its performance with the webdav-mounted dir was much better.<br /><br />I also exported my del.icio.us bookmarks and imported them over into Ubuntu firefox. and I installed <a href="https://wiki.ubuntu.com/GnomeDo">GnomeDo</a> because I'm a quicksilver junkie.<br /><br />total time was probably 2 hours or so - much better than any of my other previous jaunts into Linux. large credit to the high-quality <a href="https://wiki.ubuntu.com/">ubuntu wiki</a>.<br /><br />so I'm thinking to try out a full day of ubuntu tomorrow. my only concern is webex, though there is a native Linux client.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-36284847759781759642008-07-13T12:24:00.002-05:002008-07-13T12:27:01.048-05:00interesting mix of ideasthe two reading pieces I have sitting on my desk are this Origin of Wealth and the latest Wired magazine. interesting to be reading them simultaneously ...<br /><br />From <a href="http://www.wired.com/science/discoveries/magazine/16-07/pb_theory">Wired</a>:<br /><br />"Scientists are trained to recognize that correlation is not causation, that no conclusions should be drawn simply on the basis of correlation between X and Y (it could just be coincidence). Instead, you must understand the underlying mechanisms that connect the two. Once you have a model, you can connect the data sets with confidence. Data without a model is just noise.<br />But faced with massive data, this approach to science - hypothesize, model, test - is becoming obsolete.<br />...<br />There is now a better way. Petabytes allow us to say: 'Correlation is enough.' We can stop looking for models. We can analyze the data without hypotheses about what it might show. We can throw the numbers into the biggest computing clusters the world has ever seen and let statistical algorithms find patterns where science cannot."<br /><br />From <a href="http://www.amazon.com/Origin-Wealth-Evolution-Complexity-Economics/dp/1422121038/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1215969960&sr=8-1">Origin of Wealth</a>:<br /><br />"... not only is there a problem with data that contradicts Traditional [Economic] theories, but many theories have simply never been properly tested. One branch of economics, called econometrics, deals with data analysis. Rather than testing theoretical models, however, much econometric work is devoted to finding statistical relationships between variables (often for public policy or other applied purposes). Unfortunately, statistical correlations don't provide a causal explanation of the phenomena. Furthermore, as many economists would point out, there is often a lack of readily available data to test theories with, and even data that is available is frequently noisy or otherwise problematic."<br /><br />should be an interesting week as these seemingly conflicting ideas bounce around in my head.Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-10160217.post-1529217628918422062008-06-19T08:23:00.002-05:002008-06-19T08:24:44.036-05:00Support Tech Opening @ SourceForge<a href="https://home.eease.com/recruit2/?id=46046">SourceForge is hiring for a Level 2 Support Tech!</a><br /><br />That is all.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-10160217.post-26741909856592599542008-06-09T08:38:00.005-05:002008-06-09T10:07:00.660-05:00boycott boycottnovell.comokay, I'll be the first to say that the Novell-Microsoft deal was bad - way bad. and I am boycotting Novell myself. to summarize my perspective on it, I'll simply present Moglen's analysis on the subject, which I consider to be one of the top 5 extemporaneous monologues of all time:<br /><br /><object height="344" width="425"><param name="movie" value="http://www.youtube.com/v/6YExl9ojclo&hl=en"><embed src="http://www.youtube.com/v/6YExl9ojclo&hl=en" type="application/x-shockwave-flash" height="344" width="425"></embed></object><br /><br />but I also take issue with the opposite extreme that, because Microsoft has done bad things with the community, they are comprehensively unable to do any good things with the community. I know that boycottnovell.com isn't the only crier of this fallacy, but they're the ones who are <a href="http://boycottnovell.com/2008/05/19/microsoft-pockets-sf-net/">recently</a> <a href="http://boycottnovell.com/2008/05/27/newsforge-and-ad-sponsorship/">taking</a> <a href="http://boycottnovell.com/2008/06/09/codeplex-and-sourceforge/">pot-shots</a> at my <a href="http://sourceforge.net/">employer</a> - a company that I think has always valued, and continues to value, the success of the community, or else I would not have taken a job with them.<br /><br />from the inside, I can tell it plainly that Microsoft is simply a sponsor and participant in our <a href="http://sourceforge.net/community/cca08">2008 CCA awards</a>. technically, I also happen to know that we did nothing more than pre-load a big list of Codeplex project names into our CCA 08 database. there's no conspiracy to go thru all of our projects and attach Codeplex EULA's to them, or to use our CCA awards to scare the OSS community, as <a nicetitle="Posts by Roy Schestowitz" href="http://boycottnovell.com/author/schestowitz/">Roy Schestowitz</a> seems to imagine.<br /><br />Roy's pieces at boycottnovell.com seem to flow from his presumed indisputable inference that the motivations of not only Microsoft, but also anyone who collaborates with Microsoft, are sinister in nature. and he's repeatedly making these near-libelous statements, which boycottnovell.com is enabling, and this is the reason I'm boycotting them in addition to boycotting Novell.<br /><br />as I preview this post myself, it is comical to contrast Roy's <a href="http://en.wikipedia.org/wiki/Proof_by_verbosity">proof-by-verbosity</a> case with Moglen's eloquent and exemplary case against a specific abuse.Unknownnoreply@blogger.com3