<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-18897806</id><updated>2011-12-13T19:55:56.826-08:00</updated><title type='text'>Brett's Blog</title><subtitle type='html'>This is a blog for Brett Zamir, a.k.a. Brettz9</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18897806.post-55586478448014041</id><published>2009-07-04T07:33:00.001-07:00</published><updated>2009-07-04T07:39:22.206-07:00</updated><title type='text'>Moving</title><content type='html'>Howdy all,&lt;br /&gt;&lt;br /&gt;I think I'm pretty much going to move to &lt;a href="http://brett-zamir.me"&gt;http://brett-zamir.me&lt;/a&gt; for my own website, and &lt;a href="http://blog.brett-zamir.me"&gt;http://blog.brett-zamir.me&lt;/a&gt; for my blog. I like the full control of not being dependent on any commercial site which may try to charge me later, add advertisements I don't want, etc. I'm not complaining about anything now (Blogspot is quite cool for the control it offers I think), but as I experienced with Yahoo where I used my email frequently enough that when I want to get access to my mails in a manner I want, I have to pay for their POP access. Not cool. So, having full control over my data (beyond the spammers in this world operating with impunity) is a good thing. I also have a smaller chance of having my personal site get blocked now that I am living in a country which will block a whole large website if a few pages on the article offend it. There's strength in diversity...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-55586478448014041?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.brett-zamir.me' title='Moving'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/55586478448014041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=55586478448014041' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/55586478448014041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/55586478448014041'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/07/moving.html' title='Moving'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-1875498310200064432</id><published>2009-05-13T19:17:00.001-07:00</published><updated>2009-05-13T19:19:38.014-07:00</updated><title type='text'>Mail &amp; Unicode</title><content type='html'>I really hope that future versions of Thunderbird, etc. will have Unicode UTF-8 as the default for mail. Although there may be some legacy mail programs that do not support it, these need to get with the program... This won't affect English speakers really, so it might be easier for me to say, but I think one should just be able to send an email in any language or combinations of languages by default, as Unicode offers... I've changed my default Thunderbird option, but I don't think that alone will have much of an impact, even if a good number of other people do so too... Thoughts?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-1875498310200064432?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/1875498310200064432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=1875498310200064432' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/1875498310200064432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/1875498310200064432'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/05/mail-unicode.html' title='Mail &amp; Unicode'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-4736787856061789639</id><published>2009-05-08T01:38:00.000-07:00</published><updated>2009-05-08T04:13:02.258-07:00</updated><title type='text'>Gopher 2.0?</title><content type='html'>I designed some &lt;a href="http://trac2.assembla.com/brettz9/browser/colbrowser"&gt;column browser&lt;/a&gt; code for browsing files (or any XML) with JavaScript. It needs some extending (e.g., to handle write operations like rename/delete/drag-and-drop move/etc.), but it basically works.&lt;br /&gt;&lt;br /&gt;Now for browsing files over the web (or even representing local files), the question becomes what standard to use.&lt;br /&gt;&lt;br /&gt;While the column browser can currently be used to browse through the tags of an HTML page, it'd be more useful I think if the now ubiquitous HTML (at least in XHTML form) could represent file hierarchies in a predictably browseable fashion, as the now long dying &lt;a href="http://en.wikipedia.org/wiki/Gopher_(protocol)"&gt;Gopher protocol&lt;/a&gt; does/did. Yes, we often like pictures and rich textual context to get to our pages of interest (as well as on our pages of interest), but often (like in &lt;a href="http://dir.yahoo.com"&gt;Yahoo Directory&lt;/a&gt;), we just want to drill down quickly to our pages. &lt;br /&gt;&lt;br /&gt;(Gopher inherently encourages such quick "drilling down", but I mention column browsers specifically because it enables a much faster navigation (most Gopher browsers to my knowledge use the file system equivalent of "icon view" where you have to click rather than being also able to use the arrow and letter keys on the keyboard and view more than one level of the hierarchy at a time, though it'd be cool to have "list/tree" view and "column view", to borrow other OS' terminologies).)&lt;br /&gt;&lt;br /&gt;I've considered (and am still considering) XML formats like &lt;a href="http://www.loc.gov/standards/mets/"&gt;METS&lt;/a&gt;, but I wondered whether the &amp;lt;link/&gt; and &amp;lt;meta/&gt; facilities in HTML could be "good enough" given their familiarity to developers.&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='html'&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head profile="http://tools.ietf.org/html/rfc1436"&gt;&amp;lt;!-- Gopher --&gt;&lt;br /&gt;&amp;lt;!-- we could also get fancier with the following and &lt;br /&gt;  use xml:lang, hreflang, charset, media, id --&gt;&lt;br /&gt;&amp;lt;link title="My first file in the directory" type="text/html" rel="next" &lt;br /&gt;href="http://example.com/some_link.html" /&gt;&lt;br /&gt;&amp;lt;link title="My second file in the directory" type="text/plain" rel="next"&lt;br /&gt;href="http://example.com/some_link2.txt" /&gt;&lt;br /&gt;&amp;lt;link title="Another gopher2 'directory' file like this one" &lt;br /&gt;type="application/x-gopher2+xml" rel="next"&lt;br /&gt;href="http://example.com/gopher2dir.html" /&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;    &amp;lt;p&gt;Could have &amp;lt;a href=""/&gt; links here for manual viewing, or just indicate &lt;br /&gt;this is a "Gopher 2.0" document&amp;lt;/p&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, the title attribute on &amp;lt;link/&gt; gets used in place of the Gopher protocol's "User_Name" field, while Gopher's Selector, Host, and Port are discernible from the href attribute. The type attribute, meanwhile, gives the equivalent of Gopher's Type field.&lt;br /&gt;&lt;br /&gt;That's it! (The only question really is whether we can overload the Gopher protocol for use in HTML as our own--I think it's better than adding my own custom URL for a profile, but maybe others disagree...)&lt;br /&gt;&lt;br /&gt;We might be able to use meta tags if we wanted a more fail-safe way to translate into actual gopher files, and referencing each link's id:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='html'&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head profile="http://tools.ietf.org/html/rfc1436"&gt;&amp;lt;!-- Gopher --&gt;&lt;br /&gt;&amp;lt;meta name="Type" scheme="gopher" content="_1:h"/&gt;&amp;lt;!-- The first parameter &lt;br /&gt;is the link id below, while the part after the separator, here 'h', is &lt;br /&gt;the gopher type --&gt;&lt;br /&gt;&amp;lt;!-- Use scheme attribute to distinguish from any other profiles in &lt;br /&gt;use on the head? --&gt;&lt;br /&gt;&amp;lt;meta name="Type" scheme="gopher" content="_2:0"/&gt;&lt;br /&gt;&amp;lt;meta name="User_Name" scheme="gopher" &lt;br /&gt;    content="_1:My first file in the directory"/&gt;&lt;br /&gt;&amp;lt;meta name="Selector" scheme="gopher" &lt;br /&gt;    content="_1:/some_link.html"/&gt;&lt;br /&gt;&amp;lt;meta name="Host" scheme="gopher" &lt;br /&gt;    content="_1:example.com"/&gt;&lt;br /&gt;&amp;lt;meta name="Port" scheme="gopher" &lt;br /&gt;    content="_1:80"/&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;link id="_1" title="My first file in the directory" type="text/html" rel="next"&lt;br /&gt;href="http://example.com/some_link.html" /&gt;&lt;br /&gt;&amp;lt;link id="_2" title="My second file in the directory" type="text/plain" rel="next"&lt;br /&gt;href="http://example.com/some_link2.txt" /&gt;&lt;br /&gt;&amp;lt;link title="Another gopher2 'directory' file like this one" &lt;br /&gt;type="application/x-gopher2+xml" rel="next"&lt;br /&gt;href="http://example.com/gopher2dir.html" /&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;    &amp;lt;p&gt;Could have &amp;lt;a href=""/&gt; links here for manual viewing, or just indicate &lt;br /&gt;this is a "Gopher 2.0" document&amp;lt;/p&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;...though I don't think this would really be necessary both because A) the &amp;lt;link/&gt; can probably be readily translated into the equivalent fields (Type being a little more difficult), and B) Gopher as is is not being used much anymore.&lt;br /&gt;&lt;br /&gt;(One should also be able to use &amp;lt;a rel="" href=""/&gt; instead of &amp;lt;link/&gt; since the profile on &amp;lt;head&gt; would be good enough to indicate this was a different type of application (and would avoid duplication), but I used &amp;lt;link/&gt; since they were all there in one place in the head for easy and fast retrieval, and one wouldn't need to necessarily show the links to HTML users (or choose how to do so).)&lt;br /&gt;&lt;br /&gt;Then the question becomes to me (besides the profile choice mentioned above), what protocols (gopher2:...) and header types (application/x-gopher2+xml?) could be used to induce our Gopher-specific behavior in clients (such as Firefox which can have extensions made to handle such cases)... Of course, it'd be cool while in regular HTML mode to be able to opt to Gopher mode, but maybe some would like to recommend/force the Gopher type (especially if the HTML body didn't contain much or if the document was really intended to offer the fuller navigational facilities of our Gopher 2 and the author didn't want the user to be bothered to have to manually choose to start Gopher mode, even if the browser informed him of its Gopher 2.0 support).&lt;br /&gt;&lt;br /&gt;I'm also interested in the following which also might depend on such a representation of files (and raise similar questions about protocols): &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Links (e.g., using a custom protocol) which can indicate a package of files to download and store locally--e.g., for offline browsing--if they are not yet downloaded, and reference page numbers, special views of the data, etc. if it is already downloaded; this would work like HTML 5's offline applications, but would allow links which could refer to someone else's data--e.g., if someone downloaded a specific book (in XML or database form) from a particular site (or with a particular URN perhaps), one could click a link at another site to trigger a view of that same book (a specific page or paragraph range, a selection of font and colors, etc.). (Maybe this is like combining the cross-site Ajax with offline applications--let links be made to reference the same data in different ways?)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Navigable site maps, ala &lt;a href="http://www.standard-navigation.org/faq.en.php"&gt;"Standard sitemap"&lt;/a&gt;, but which can have links lead to browse other sites as well...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Both of the above would benefit from being able to represent a hierarchy of files...I wonder whether that could be solved by such as the following:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='html'&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head profile="http://example.com/our_sitemap_protocol"&gt;&lt;br /&gt;&lt;!-- Indicate the hierarchical relationships here --&gt;&lt;br /&gt;&amp;lt;meta name="next" scheme="sitemap" content="level1:level2" /&gt;&lt;br /&gt;&lt;!-- All files in the sitemap here --&gt;&lt;br /&gt;&amp;lt;link title="Home page" id="level1" &lt;br /&gt;   href="http://mysite.com/home.html" /&gt;&lt;br /&gt;&amp;lt;link title="Contact page" id="level2" &lt;br /&gt;    href="http://mysite.com/contact.html"  /&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-4736787856061789639?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/4736787856061789639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=4736787856061789639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4736787856061789639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4736787856061789639'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/05/gopher-20.html' title='Gopher 2.0?'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-9167950251753157019</id><published>2009-04-05T20:19:00.001-07:00</published><updated>2009-04-05T20:35:17.271-07:00</updated><title type='text'>XML DOM Support Test</title><content type='html'>After getting over a nasty cold, I'm just clearing off my old "shelf" so I can get back to work.&lt;br /&gt;&lt;br /&gt;I don't have time to work on it now, but I wanted to put the beginnings of an &lt;a href="http://bahai-library.com/zamir/XMLSupportTest.xhtml"&gt;XML Support Test&lt;/a&gt; (true XHTML form only at this point, so won't work in IE) here in case anyone were interested in building off of it, comment on it, etc., as well as for my own future reference.&lt;br /&gt;&lt;br /&gt;Basically, inspired by web tests like &lt;a href="http://www.acidtests.org/"&gt;Acid&lt;/a&gt;, I was hoping we XML and XHTML afficianados could stimulate better compliance from the browsers (including the "good" ones who normally try to adhere to standards but who still can fall short out of a perceived lack of community interest, or frankly their own occasional tendencies to "exceptionalism"), by having a test to highlight support for the DOM focused on XML features, up to DOM Level 3 (Acid seems to be covering a lot of the rest of the DOM, at least levels 1 and 2).&lt;br /&gt;&lt;br /&gt;While the Acid test preparers have a high level of expertise both in awareness of the standards and creating a clever and appealing test output, for now at least, my own plan is just going to be to start with a simple chart, and hope that others may offer feedback and/or code as time goes on. No guarantees about how much time I may be able to give to this, etc., but I just wanted to take some step forward given my frustration at the seeming hopelessness of mere bug reports toward getting action on this front. As much as we may resist them, we all know that tests do inspire us, even normally fairly self-motivated people, and Acid is proof of that.&lt;br /&gt;&lt;br /&gt;Again, I don't mean to be presumptuous to comparing my own test that I've barely begun to something like Acid (and which I'm not even guaranteeing I'll finish!), but just wanted to put this out there, both the little code I had as well as the idea...You are free to share or remix the code with attribution to "Brett Zamir" under the &lt;a href="http://creativecommons.org/licenses/by-sa/2.0/"&gt;Creative Commons Attribution Share-Alike license&lt;/a&gt;. If we get things going, hopefully we can also choose a more interesting name than "XML DOM Support Test"... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-9167950251753157019?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/9167950251753157019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=9167950251753157019' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/9167950251753157019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/9167950251753157019'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/04/xml-dom-support-test.html' title='XML DOM Support Test'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-1215467522544199612</id><published>2009-03-19T19:55:00.001-07:00</published><updated>2009-03-19T20:21:04.324-07:00</updated><title type='text'>Observations on prototype</title><content type='html'>Came across the following interesting prototype behavior while trying to define methods on the class conditionally (for use in a large library where one might only wish to add certain groups of functions to the prototype, but which would be fine and memory-friendly for any instance which did want to use them).&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='javascript'&gt;&lt;br /&gt;function A () {&lt;br /&gt;    // this.prototype.b = function () {alert('c');}; // this.prototype is undefined&lt;br /&gt;    this.prototype = {b:function () {alert('c');}}; // rewrites prototype, but doesn't behave like a prototype, since by using 'this', we're creating our own copy; we can of course call items on the prototype but by dropping the word 'prototype'&lt;br /&gt;    this.__proto__ = {c:function () {alert('d');}}; // Mozilla only; works as probably intended&lt;br /&gt;    // A.prototype.b = function () {alert('e');}; // will work but requires hard-coding the class name here&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var z = new A();&lt;br /&gt;z.prototype.b(); // 'c'&lt;br /&gt;z.c(); // 'd'&lt;br /&gt;z.b(); // 'z.b is not a function' error&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If your purpose in trying something like I was to conditionally add functions to the prototype (and thus for use by all instances), use of a static method on A() might be a better approach since it wouldn't involve building a large function into memory each time.&lt;br /&gt;&lt;br /&gt;On another subject, here's I think a helpful way to distinguish between prototype and __proto__ in Mozilla:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='javascript'&gt;&lt;br /&gt;function a () {&lt;br /&gt;    this.b = function () {alert('our own b');};    &lt;br /&gt;    this.__proto__.b(); // 'prototype b' (this only works in Mozilla)&lt;br /&gt;    this.b(); // 'our own b' (we've covered b() on our prototype, though it is still there)&lt;br /&gt;} &lt;br /&gt;a.prototype.b = function () {alert('prototype b');};&lt;br /&gt;&lt;br /&gt;var z = new a();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or to build on this example, a little:&lt;br /&gt;&lt;br /&gt;&lt;pre name='code' class='javascript'&gt;&lt;br /&gt;function a () {&lt;br /&gt;    this.b(); // 'prototype b' &lt;br /&gt;&lt;br /&gt;    this.b = function () {alert('our own b');};    &lt;br /&gt;    this.__proto__.b(); // 'prototype b' (this only works in Mozilla)&lt;br /&gt;    this.b(); // 'our own b' (we've temporarily covered b() on our prototype)&lt;br /&gt;&lt;br /&gt;    delete this.b;&lt;br /&gt;    this.b(); // now we get 'prototype b' again&lt;br /&gt;}&lt;br /&gt;a.prototype.b = function () {alert('prototype b');};&lt;br /&gt; &lt;br /&gt;var z = new a();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-1215467522544199612?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/1215467522544199612/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=1215467522544199612' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/1215467522544199612'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/1215467522544199612'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/03/observations-on-prototype.html' title='Observations on prototype'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3496579567670910287</id><published>2009-03-08T22:11:00.000-07:00</published><updated>2009-03-08T22:35:19.280-07:00</updated><title type='text'>Favorite bugs</title><content type='html'>No, don't worry, this is not an entomology post.&lt;br /&gt;&lt;br /&gt;There is just some awesome work out there on open source projects, but often the bugs or missing features drive a person even more crazy to want to see them implemented (especially if you are a developer, as your feeling may be compounded by guilt for not learning enough to make the patch yourself).&lt;br /&gt;&lt;br /&gt;Here are two missing features in two open source projects that I'm just dying to see implemented, and I invite anyone who feels the same to consider registering and voting on them.&lt;br /&gt;&lt;br /&gt;(Note that feature requests on such trackers are often still described as "bugs".)&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Songbird: Selectively disable rather than delete individual songs&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Songbird is an awesome open-source music player, working similarly to iTunes, but missing one feature of iTunes and which is keeping me from moving my songs to it: &lt;a href="http://bugzilla.songbirdnest.com/show_bug.cgi?id=15011"&gt;Bug 15011, the ability to disable songs in the interface without deleting them&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;External DTDs in Firefox/Mozilla&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Another feature request I'm dying to see is for Firefox/Mozilla to &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=22942"&gt;support external DTDs over the web&lt;/a&gt;. DTDs, while a bit outdated for one of their purposes (schema validation, for the techies here), offer a simple way for a person to define shortcuts (potentially even for XHTML) which can be used in one's documents to:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;represent an often larger piece of text&lt;/li&gt;&lt;br /&gt;&lt;li&gt;offer a means of translating a document--just swap the DTD, and you get the document in another language without having to repeat the code&lt;/li&gt;&lt;br /&gt;&lt;li&gt;represent characters in one's document such as &amp;copy; with a simple code like &amp;amp;copy; instead of having to find and paste the symbol. While HTML already offers many such shortcuts without a need for a DTD, you cannot define your own, add to them, and if you are using another XML language (such as TEI used in classical or important religious texts, or DocBook for technical writing), you must use a DTD.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;While this is easily doable by those who have a server and familiarity with scripting languages, for those who wish a simpler means of localizing or defining shortcuts, DTDs are the easiest means of doing so. We have the ability to define external stylesheets or scripts, but not for something so basic as this (text replacement). Moreover, many such documents already exist off the web, but some have, I feel, mistakenly argued that there is some dichotomy between on-web and off-web. If someone has a use for a document offline, why wouldn't one wish to have the ability to share it online, if so desired? &lt;br /&gt;&lt;br /&gt;While it is possible to define these shortcuts at the top of each document (internal document subset), this reduces the usability of this functionality, as you do not have the option to reuse one frequently used file--you have to combine these into each of your documents rather than just making a quick reference to an external file.&lt;br /&gt;&lt;br /&gt;Mozilla is already using external DTD's for translating its own documents, yet we cannot use these DTD's for remote XUL or other XML.&lt;br /&gt;&lt;br /&gt;If you want this feature too in Mozilla, vote for it!!!!! Otherwise, there are many XML documents that one cannot put them as is on the web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3496579567670910287?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3496579567670910287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3496579567670910287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3496579567670910287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3496579567670910287'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/03/favorite-bugs.html' title='Favorite bugs'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-7735378584969238500</id><published>2009-02-23T20:49:00.000-08:00</published><updated>2009-02-23T21:01:46.022-08:00</updated><title type='text'>Cleaner private instance methods in JavaScript</title><content type='html'>Though the Relator requires extra code in places, the benefits are made up in readability in being clear what is private or not, as well as avoid needing the cumbersome 'this' everywhere (whose ubiquity makes its role less clear and also often requires adding a line to assign 'this' to 'that' anyways)&lt;br /&gt;&lt;br /&gt;Here I point out a way to avoid needing to make a call() on each reference of a private instance method, again drawing from &lt;a href="http://webreflection.blogspot.com/2008/04/natural-javascript-private-methods.html"&gt;Andrea Giammarchi's approach to private methods&lt;/a&gt;, as I have also covered.&lt;br /&gt;&lt;br /&gt;By assigning our static method to the scope of 'this' (as we do if we call call() on the method) and assigning the returned function to a private variable, we can get instance methods throughout our class. The disadvantage is that we add one function per instance (as with privileged methods), but the advantages are 1) the method is truly private, and 2) The syntax is cleaner. If you don't care about #2, just call a regular static method (but which can use 'this') with _privInstanceMethod.call(this, arg1, arg2);&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;var Constructor = (function () {var __ = Relator.$();&lt;br /&gt;&lt;br /&gt;    // Harder setup, more memory, easier calling within the class&lt;br /&gt;    function _setupPrivInstanceMethod (that) {var _ = __.method(that);&lt;br /&gt;        return function () {&lt;br /&gt;            alert(_.privateInstanceVariable);&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;    // Easier setup, and less memory, more complex calling within the class&lt;br /&gt;    function _privInstanceMethod () {var _ = __.method(this);&lt;br /&gt;        alert(_.privateInstanceVariable);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function Constructor () {var _ = __.constructor(this);&lt;br /&gt;        _.privateInstanceVariable = 5; // Set up an instance variable to prove we're dealing with an instance method below&lt;br /&gt;        _.privInstanceMethod = _setupPrivInstanceMethod(this); // add our instance's scope to return a function which is aware of the instance&lt;br /&gt;    }&lt;br /&gt;    Constructor.prototype = {&lt;br /&gt;        constructor: Constructor,&lt;br /&gt;        someMethod : function () {var _ = __.method(this);&lt;br /&gt;            _.privInstanceMethod(); // '5'&lt;br /&gt;            // more complex call (additional args would get added after 'this')&lt;br /&gt;            _privInstanceMethod.call(this);  // '5' &lt;br /&gt;        }&lt;br /&gt;    };&lt;br /&gt;    return Constructor;&lt;br /&gt;})();&lt;br /&gt;var a = new Constructor();&lt;br /&gt;a.someMethod();&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-7735378584969238500?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/7735378584969238500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=7735378584969238500' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7735378584969238500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7735378584969238500'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/cleaner-private-instance-methods-in.html' title='Cleaner private instance methods in JavaScript'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-368486662009229203</id><published>2009-02-23T04:58:00.000-08:00</published><updated>2009-03-08T20:45:27.699-07:00</updated><title type='text'>Relator Zombies</title><content type='html'>I referred to the "Borg" option in the code comments for &lt;a href="http://brettz9.blogspot.com/2009/02/enhancing-relator.html"&gt;this post&lt;/a&gt;, in that we can call getAll() on the Relator for any object to access and manipulate any or all private instances variables for other objects already created. Thus, one can create an object, create another object, and then use the latter object to change data on all previous objects.&lt;br /&gt;&lt;br /&gt;If we add a 'that' property to all of our Relator instances (easily achievable by adding one line to the middle of the "constructor" method we added for Relator in our &lt;a href="http://brettz9.blogspot.com/2009/02/further-relator-enhancements.html"&gt;last post&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;constructor : function (that) {&lt;br /&gt;    this.set(that);&lt;br /&gt;    this.get(that).that = that;&lt;br /&gt;    return this.get(that); // Assign to var _ = __.constructor(this);&lt;br /&gt;},&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;we can then reference any public methods or members on all objects of this class (along with their private variables) after calling getAll() on the Relator instance:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var Person = (function () {var __ = Relator.$();&lt;br /&gt;    function Person (name) {var _ = __.constructor(this);&lt;br /&gt;        _.name = name;&lt;br /&gt;    }&lt;br /&gt;    Person.prototype.getName = function () {var _ = __.method(this);&lt;br /&gt;        alert('My name is '+_.name);&lt;br /&gt;    };&lt;br /&gt;    Person.prototype.zombie = function () {&lt;br /&gt;        var zombies = __.getAll();&lt;br /&gt;        zombies.forEach(function(zombie){&lt;br /&gt;            zombie.that.getName();&lt;br /&gt;            // convenient syntax as we could also do something with zombie.name (or access other private instance variables we added)&lt;br /&gt;        });&lt;br /&gt;    };&lt;br /&gt;    return Person;&lt;br /&gt;})();&lt;br /&gt;&lt;br /&gt;var bob = new Person('Bob');&lt;br /&gt;var sarah = new Person('Sarah');&lt;br /&gt;sarah.zombie(); // Alerts "My name is Bob" and then "My name is Sarah"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;We could also have done the above by adding the following to the Relator class:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;getInstances : function () {&lt;br /&gt;    return Stack;&lt;br /&gt;},&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and then use the following method on Person (instead of the previous implementation):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;    Person.prototype.zombie = function () {&lt;br /&gt;        var zombies = __.getInstances();&lt;br /&gt;        zombies.forEach(function(zombie){&lt;br /&gt;            zombie.getName();&lt;br /&gt;            // var z = __.get(zombie); // Getting a private variable now requires an extra step&lt;br /&gt;            // alert(z.name);&lt;br /&gt;        });&lt;br /&gt;    };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This syntax is shorter to access the whole object and its public methods/members, but does not allow us to use the same syntax to access the zombies' private instances (unless we assign "__.get(zombie);" to a variable within the forEach and access the private data from there, as in the commented out text above).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-368486662009229203?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/368486662009229203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=368486662009229203' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/368486662009229203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/368486662009229203'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/relator-zombies.html' title='Relator Zombies'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5946626216575720303</id><published>2009-02-21T04:06:00.000-08:00</published><updated>2009-02-21T04:13:02.222-08:00</updated><title type='text'>Further Relator enhancements</title><content type='html'>Here are two other useful Relator methods:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;constructor : function (that) {&lt;br /&gt;    this.set(that);&lt;br /&gt;    return this.get(that); // Assign to var _ = __.constructor(this);&lt;br /&gt;},&lt;br /&gt;method : function (that) { // Alias for get()&lt;br /&gt;    return this.get(that); // Assign to var _ = __.method(this);&lt;br /&gt;},&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now we can just do this to get our private variables:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var Constructor = function () {var __ = Relator.$(); // We use two underscores here (doing it for brevity, as we may use this often)&lt;br /&gt;    function Constructor (doc) {var _ = __.constructor(this); // Set up and gets private access&lt;br /&gt;        // ...&lt;br /&gt;    }&lt;br /&gt;    Constructor.prototype = {&lt;br /&gt;        constructor : Constructor,&lt;br /&gt;        someMethod : function () {var _ = __.method(this); // Gets private access&lt;br /&gt;            // ... &lt;br /&gt;        }&lt;br /&gt;    };&lt;br /&gt;    return Constructor;&lt;br /&gt;})();&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5946626216575720303?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5946626216575720303/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5946626216575720303' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5946626216575720303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5946626216575720303'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/further-relator-enhancements.html' title='Further Relator enhancements'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5427518237981966917</id><published>2009-02-20T20:23:00.000-08:00</published><updated>2009-02-20T21:10:53.007-08:00</updated><title type='text'>Subobjects</title><content type='html'>While I'd guess that the following might be called private classes (though they seem different from those defined at &lt;a href="http://en.wikipedia.org/wiki/Private_class_data_pattern"&gt;Wikipedia&lt;/a&gt;), I don't know what the objects created to function inside of another object would be called. This is not mere namespacing because the subobject (I'm hesitant to call them child/parent objects in order to avoid confusion with subclasses) has access to the superobject as well as to its own methods and properties. If anyone can help with terminology, let me know.&lt;br /&gt;&lt;br /&gt;But anyways, I just wanted to point out, if this wasn't already a readily familiar pattern, that there is a way to define private classes which can be instantiated within another class object, while having access to its own methods and properties (including instance ones, and private ones if we wish), as well as those of the object above it.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var Constructor = function () {&lt;br /&gt;    var _PrivateClass1Closure = function () {var top = this;&lt;br /&gt;        function PrivateClass1 () {&lt;br /&gt;            this.myProperty=4;&lt;br /&gt;        }&lt;br /&gt;        PrivateClass1.prototype.callTopMethod = function () {&lt;br /&gt;                alert('My own myProperty is '+this.myProperty+', while the object above me has someProperty equal to '+top.constructorMethod()); // We can also get the latter value by top.someProperty&lt;br /&gt;        };&lt;br /&gt;        return PrivateClass1;&lt;br /&gt;    }; // Don't instantiate this closure yet&lt;br /&gt;&lt;br /&gt;    function Constructor () {&lt;br /&gt;        var _PrivateClass1 = _PrivateClass1Closure.call(this); // Let the closure have access to this context when generating the private class, so that its objects (the subobject below) can call the instance methods and properties of this nesting Constructor&lt;br /&gt;        this.subObject = new _PrivateClass1();&lt;br /&gt;        this.someProperty = 5;&lt;br /&gt;    }&lt;br /&gt;    Constructor.prototype.constructorMethod = function () {return this.someProperty;};&lt;br /&gt;    return Constructor;&lt;br /&gt;}();&lt;br /&gt;&lt;br /&gt;var obj = new Constructor();&lt;br /&gt;obj.subObject.callTopMethod(); // My own myProperty is 4, while the object above me has someProperty equal to 5&lt;br /&gt;alert(obj.constructorMethod()); // 5&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5427518237981966917?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5427518237981966917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5427518237981966917' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5427518237981966917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5427518237981966917'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/subobjects.html' title='Subobjects'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-7318451807473783096</id><published>2009-02-19T22:20:00.000-08:00</published><updated>2009-03-08T20:45:55.971-07:00</updated><title type='text'>Enhancing Relator and Extending Classes using Relator for private instance variables</title><content type='html'>One addition to my &lt;a href="http://brettz9.blogspot.com/2009/02/true-private-instance-variables-in.html"&gt;previous blog post&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;These two methods on the Relator could be interesting:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;getAll: function () { // Be able to read or manipulate ALL instances within any instance (kind of violates privacy, but offers what I call the "Borg" option)&lt;br /&gt;    return Array;&lt;br /&gt;},&lt;br /&gt;readonly : function (obj) { // Call, especially from an extending class, to get access to the original class' private/protected variables without fear of manipulating them&lt;br /&gt;    var newObj = {};&lt;br /&gt;    for (var i in Array[Stack.indexOf(obj)]) {&lt;br /&gt;        newObj[i] = Array[Stack.indexOf(obj)][i];&lt;br /&gt;    }&lt;br /&gt;    return newObj;&lt;br /&gt;    // ...OR...&lt;br /&gt;    // return function (value) {return Array[Stack.indexOf(obj)][value];} // copies of scalars, not references&lt;br /&gt;},&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then your extending class could look something like this (the following also demonstrates protected variables and extending classes):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var ExtClass = (function (ParentClass) { // We pass in the parent class as an argument, so we can copy-paste the rest of the code, always using "ParentClass" in the closure.&lt;br /&gt;&lt;br /&gt; // var _extendedPrivate = Relator.$(); // we could define our own set of private variables for this extended class to, &lt;br /&gt;&lt;br /&gt; function ExtClass (){&lt;br /&gt;  ParentClass.call(this); // We have to call the parent constructor in order to extend the class in a way that its public methods operating on private variables there still work--if you still want a constructor in the base class with side effects not triggered by extending classes, put a conditional in the constructor and pass in (or don't pass in) a certain argument or type of argument to avoid the rest of the set-up besides the necessary line "_private.set(this);".&lt;br /&gt;  /* We could also define and use private variables for just inside this extending class&lt;br /&gt;  _extendedPrivate.set(this);var _ = _extendedPrivate.get(this);&lt;br /&gt;  _.extendedPrivateVar = 5;&lt;br /&gt;  */&lt;br /&gt;  var _protect = _private.get(this); // Let's us use the "private" variables from the base class here too (note that "_private" must be accessible somehow for us to do this--either this extending class should be defined in the same closure as the base class (more like protected access since the extending class CAN access the variables if it wishes), or it could be passed in as an argument/a global (more like a public variable since public code could also access it)&lt;br /&gt;  _protect.privateInstanceVar = 7; // We can manipulate a private instance set up in the base class (the private become protected when we access them this way)&lt;br /&gt;  var _readonly = _private.readonly(this); // allows read-only protected access of the private variables in the base class&lt;br /&gt;  alert(_readonly.privateInstanceVar); // Gets base class' privateInstanceVar but won't be able to set it (except as a copy here)&lt;br /&gt;  // alert(_readonly('protectedInstanceVar')); // Or using the "return function" approach commented out in readonly() to do the same&lt;br /&gt; }&lt;br /&gt; ExtClass.prototype = new ParentClass; // ParentClass also gets called here (again, you can use a conditional in the parent class to avoid repeating any unnecessary set-up code)&lt;br /&gt; ExtClass.prototype.constructor = ExtClass;&lt;br /&gt;&lt;br /&gt; return ExtClass;&lt;br /&gt;&lt;br /&gt;})(MyClass); // Just need to add specific base class here, then use the generic code above&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-7318451807473783096?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/7318451807473783096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=7318451807473783096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7318451807473783096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7318451807473783096'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/enhancing-relator.html' title='Enhancing Relator and Extending Classes using Relator for private instance variables'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3846519903522621205</id><published>2009-02-19T04:03:00.000-08:00</published><updated>2009-09-01T22:23:19.959-07:00</updated><title type='text'>True Private Instance Variables in JavaScript Without Any Public Properties</title><content type='html'>As a follow-up to my article on &lt;a href="http://brettz9.blogspot.com/2009/01/i-came-across-this-very-clever-method.html"&gt;True Private Instance Variables&lt;/a&gt;, I've since discovered &lt;a href="http://webreflection.blogspot.com/2008/10/new-relator-object-plus-unshared.html"&gt;Andrea Giammarchi's fully private technique&lt;/a&gt; which also works across the constructor and prototype methods and has the benefits of not creating separate privileged functions on each instantiation, but which does not create any public properties &lt;em&gt;at all&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;His latest code is &lt;a href="http://www.devpro.it/code/192.html"&gt;available here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here's my own slightly cleaned up version (basically just fixed/added some brackets, semi-colons, and usage notes):&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;// Used for giving privacy&lt;br /&gt;var Relator = function () { &lt;br /&gt;    // Code from http://www.devpro.it/code/192.html&lt;br /&gt;    // Relator explained at http://webreflection.blogspot.com/2008/07/javascript-relator-object-aka.html&lt;br /&gt;    // Its use as privacy technique described at http://webreflection.blogspot.com/2008/10/new-relator-object-plus-unshared.html&lt;br /&gt;    // 1) At top of closure, put: var _private = Relator.$();&lt;br /&gt;    // 2) In constructor, put: _private.set(this);var _ = _private.get(this);&lt;br /&gt;    // 3) At top of each prototype method, put: var _ = _private.get(this);&lt;br /&gt;    // 4) Use like:  _.privateVar = 5;&lt;br /&gt;    //&lt;br /&gt;    // ******************************************&lt;br /&gt;    // (c) Andrea Giammarchi - Mit Style License&lt;br /&gt;    // ******************************************&lt;br /&gt;    // Relator.set(123).description = "Number 123";&lt;br /&gt;    // Relator.get(123).description;    // Number 123&lt;br /&gt;    // Relator.len();                   // 1&lt;br /&gt;    // Relator.del(123).len();          // 0&lt;br /&gt;    // Relator.set("abc");              // object Object&lt;br /&gt;    // Relator.len();                   // 1&lt;br /&gt;    // var anotherRelator = Relator.$();&lt;br /&gt;    // anotherRelator.len();            // 0&lt;br /&gt;    // Relator.get("abc");              // object Object&lt;br /&gt;    // anotherRelator.get("abc");       // undefined&lt;br /&gt;    // ******************************************&lt;br /&gt;    function indexOf (value) {&lt;br /&gt;        for (var i = 0, length=this.length; i &lt; length; i++) {&lt;br /&gt;            if (this[i] === value) {&lt;br /&gt;                return i;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        return -1;&lt;br /&gt;    }&lt;br /&gt;    function Relator () {&lt;br /&gt;        var Stack = [], Array = [];&lt;br /&gt;        if (!Stack.indexOf) {&lt;br /&gt;            Stack.indexOf = indexOf;&lt;br /&gt;        }&lt;br /&gt;        return {&lt;br /&gt;            // create a new relator&lt;br /&gt;            $ : function () {&lt;br /&gt;                return Relator();&lt;br /&gt;            },&lt;br /&gt;            // remove a referenced object&lt;br /&gt;            del: function (value) {&lt;br /&gt;                var i = Stack.indexOf(value);&lt;br /&gt;                if (~i) {&lt;br /&gt;                    Stack.splice(i, 1);&lt;br /&gt;                    Array.splice(i, 1);&lt;br /&gt;                }&lt;br /&gt;                return this;&lt;br /&gt;            },&lt;br /&gt;            // get a referenced object, if any, or undefined&lt;br /&gt;            get: function (value) {&lt;br /&gt;                return Array[Stack.indexOf(value)];&lt;br /&gt;            },&lt;br /&gt;            // return total number of referenced objects&lt;br /&gt;            len: function () {&lt;br /&gt;                return Stack.length;&lt;br /&gt;            },&lt;br /&gt;            // set a reference for a generic object, if it is not present&lt;br /&gt;            set: function (value) {&lt;br /&gt;                var i = Stack.indexOf(value);&lt;br /&gt;                return ~i ? Array[i] : Array[Stack.push(value) - 1] = {};&lt;br /&gt;            }&lt;br /&gt;        };&lt;br /&gt;    }&lt;br /&gt;    return Relator();&lt;br /&gt;}();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What follows is an example of a closure creating a class and using the Relator for private variables. Note that if you don't even want to introduce the above Relator object/class into the global namespace (say if you are distributing your class as part of a library), you can just add it at within the closure creating your class at the very top of the closure (instead of just calling it, as I do below).&lt;br /&gt;&lt;br /&gt;Note that in my example, I put the boring repetitive code at the very top of each function, right after the bracket, as I find this lets one focus on the main logic of one's class, without getting distracted by the private instance variable set-up code (and also makes it easy for me to find the code for pasting into other methods or classes).&lt;br /&gt;&lt;br /&gt;I've also stuffed the code with comments to demonstrate where all of the other types of common variable and method types could go&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;&lt;br /&gt;var MyClass = (function () {&lt;br /&gt;&lt;br /&gt;   // Put Relator class here if you don't want it to be public (but it is VERY useful to have available without putting it inside of each class)&lt;br /&gt;&lt;br /&gt;   var _private = Relator.$(); // At top of each closure where private variables are needed, put this for set up (in combination with set() call at top of constructor below&lt;br /&gt;&lt;br /&gt;   // Note that you can also put private static variables and methods here, or private instance methods (which are really private static methods to which 'this' is passed in methods below; e.g., myPrivMethod.call(this, arg1, arg2);)&lt;br /&gt;&lt;br /&gt;   function Constructor () { var _ = _private.set(this); // At top of each constructor&lt;br /&gt;       _.privateInstanceVar = 3; // You can now define and use private variables in the constructor (just put the desired variable name after "_."&lt;br /&gt;       // _.privateInstanceMethod = function () {}; // You could even make private instance methods dynamically which could be available throughout the methods&lt;br /&gt;       // this.publicInstanceVar = ... ; // You can use public instance variables&lt;br /&gt;       // this.privilegedMethod = ... ; // If you actually want a privileged method&lt;br /&gt;   }&lt;br /&gt;   Constructor.prototype.somePublicMethod = function () {var _ = _private.get(this); // At top of each prototype method needing to use private variables, so you can define and use private variables here too&lt;br /&gt;           _.anotherPrivateVar = 5;&lt;br /&gt;           alert('My first private variable is '+_.privateInstanceVar+' and my new one is '+_.anotherPrivateVar);&lt;br /&gt;   };&lt;br /&gt;   // Constructor.prototype.someVariable = 5; // Default public variables (which can be overridden by instance or changed for all instances)&lt;br /&gt;   // Constructor.publicStaticMethod = function () {}; // You can put public static methods here&lt;br /&gt;   // Constructor.publicStaticVariable = 5; // You can put public static variables here&lt;br /&gt;   // var consts= {'myconst':5}; Constructor.getConstant = function (name) {return consts[name];}; // Define public static method to get public static constants; MyClass.getConstant('myconst');&lt;br /&gt;   // Constructor.__defineGetter__('myconst', function(){return 5;}); // or, to get Class constants in format MyClass.myconst (Mozilla only)&lt;br /&gt;   return Constructor;&lt;br /&gt;&lt;br /&gt;})();&lt;br /&gt;&lt;br /&gt;var myObj = new MyClass();&lt;br /&gt;myObj.somePublicMethod();  // My first private variable is 3 and my new one is 5&lt;br /&gt;alert(myObj.privateInstanceVar); // undefined&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The only advantage my earlier version offers (if you can call it that), is that, you don't need the Relator class, and it doesn't involve function calls. However, the fact that you don't need ANY public variables (even just counter ones) to get private variables makes this approach highly  worthwhile.&lt;br /&gt;&lt;br /&gt;Finally, JavaScript now can have genuine private instance variables (at least a valid equivalent) without too much pain. [Additional note: With extending the class, you can do so if you're willing to call the parent constructor (you already have to do so at least once when creating the prototype for classical inheritance).]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3846519903522621205?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webreflection.blogspot.com/2008/10/new-relator-object-plus-unshared.html' title='True Private Instance Variables in JavaScript Without Any Public Properties'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3846519903522621205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3846519903522621205' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3846519903522621205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3846519903522621205'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/true-private-instance-variables-in.html' title='True Private Instance Variables in JavaScript Without Any Public Properties'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-2144633478166031513</id><published>2009-02-17T21:12:00.000-08:00</published><updated>2009-02-17T21:55:46.853-08:00</updated><title type='text'>Monopolism in viral licenses?</title><content type='html'>Expanding a little on my last post...&lt;br /&gt;&lt;br /&gt;I'm just posing the following for the sake of argument...&lt;br /&gt;&lt;br /&gt;If you believe that there should be no laws &lt;em&gt;requiring&lt;/em&gt; code to be open source (except perhaps for government contracts, etc.)--i.e., that people should not be compelled to release source code--then, what about the ethics of a future (or even present-day) society in which virally licensed code like the GPL could effectively &lt;em&gt;become&lt;/em&gt; the monopoly? I mean, if you consider it a freedom to be able to keep your code closed (even if you do not wish to exercise that right), then might it not also be an impingement on that freedom if the ubiquity of GPL code makes it non-competitive for you or others to compete against it with your own closed source code? Isn't that a monopoly, when one cannot effectively compete--the competition is too well established (and far along)? With permissive licenses, public domain, etc., you can at least build on them in a closed source way...&lt;br /&gt;&lt;br /&gt;Anyhow, I'm certainly not against the GPL for those who choose to release their projects under it (I have myself), but I think it is worth asking... If compared in the light of a potential monopoly (whenever such code does take over the playing field in a given area), might the state ever seek--as they do in allowing copyright to expire or potentially appropriating (or is it expropriating?) patents--to revoke GPL code for the supposed "common good" (e.g., to force the code into the public domain--or, as with nationalization of former monopolies, expropriate its rights solely to itself)?&lt;br /&gt;&lt;br /&gt;Thoughts?&lt;br /&gt;&lt;br /&gt;Incidentally, there is a passage in the Bahá'í Writings which states:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"And among the teachings of Bahá'u'lláh is voluntary sharing of one's property with others among mankind. This voluntary sharing is greater than equality, and consists in this, that man should not prefer himself to others, but rather should sacrifice his life and property for others. But this should not be introduced by coercion so that it becomes a law and man is compelled to follow it. Nay, rather, man should voluntarily and of his own choice sacrifice his property and life for others, and spend willingly for the poor, just as is done in Persia among the Bahá'ís."&lt;br /&gt;&lt;br /&gt;('Abdu'l-Bahá, &lt;a href="http://bahai-library.com/writings/abdulbaha/swab/swaball.html#302"&gt;Selections from the Writings of 'Abdu'l-Bahá&lt;/a&gt;)&lt;/blockquote&gt;&lt;br /&gt;(See also a similar quotation in the same work on &lt;a href="http://bahai-library.com/writings/abdulbaha/swab/swaball.html#115"&gt;page 115&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Clearly, our Writings advise against being fully compelled by the law of the government to equalize wealth completely (in other passages also), but the GPL is a license entered into voluntarily, as can be copyright--not a law mandated by the government (besides advising against it, the Baha'i Writings argued that &lt;a href="http://bahai-library.com/writings/abdulbaha/pt/pt.html#151"&gt;communism could not work&lt;/a&gt;, though arguing that compulsory laws (progressive taxes) should be made for redistribution to remedy the extremes of wealth, and justified the &lt;a href="http://bahai-library.com/writings/abdulbaha/saq/saqall.html#277"&gt;non-compulsory, but spiritually obligatory religious laws&lt;/a&gt; mandating of the sharing of wealth in the Baha'i Faith (presumably 'Abdu'l-Baha is referring here to the Baha'i law of Huququ'llah). The issue I am raising is not whether GPL is ethical (because I think it can be), but whether it could become effectively monopolistic in certain areas, and thus within the domain of government to break it up.  (By the way, I'm bringing in the above religious quotation for the sake of discussion and to indicate part of my own angle, not to impose the religious belief on others--the subject is inherently more tricky though when we talk about imposing the right to impose restrictions, and even more so when the restrictions are themselves meant to guarantee freedoms for all. Also, please note that I didn't use the quotation for justifying a specific position--only the Universal House of Justice can indicate the applicability of the Baha'i Writings in an official capacity.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-2144633478166031513?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/2144633478166031513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=2144633478166031513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2144633478166031513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2144633478166031513'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/monopolism-in-viral-licenses.html' title='Monopolism in viral licenses?'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-6348272304233411196</id><published>2009-02-17T19:56:00.001-08:00</published><updated>2009-02-21T20:14:50.918-08:00</updated><title type='text'>Timing the addition of permissive licensing</title><content type='html'>There has been a lot of debate on the ethics of copycenter (permissive like BSD, MIT, or Apache) vs. copyleft (e.g., viral licenses like the GPL).&lt;br /&gt;&lt;br /&gt;Of course, it's a matter of choice, as well explained, I think, in &lt;a href="http://itmanagement.earthweb.com/osrc/article.php/12068_3803101_1/Bruce-Perens-How-Many-Open-Source-Licenses-Do-You-Need.htm"&gt;this article&lt;/a&gt;. (The article raises another separate question for me as to there were a nearly completely permissive license which allowed inclusion in closed source works, but which virally prohibited Digital Rights Management or being used on &lt;em&gt;hardware&lt;/em&gt; restricting access to code--not sure if that makes sense...I'm also unclear on whether GPL3 prohibits use on machines that use DRM at all or only if the GPL3 code itself (and its derivatives) must be accessible. And while I'm posing questions, I also need to find out whether GPL3 as opposed to GPL2 allows requiring attribution in the original or derivative works--I'm personally not a fan of attribution in truly open projects, as it can become cumbersome ("How many people do I have to list here??") or effectively non-free (if you're a company) to have to do so. And if one contributes to an open-source project, to retain the copyright on one's own contributions, is it really necessary to list "copyright 2009", etc.? Ok, on with the post, Brett...)&lt;br /&gt;&lt;br /&gt;Anyhow, strictly from an altruistic point of view, my current thoughts are as follows. (p.s. IANAL--I am not a lawyer, so nothing here constitutes legal advice)&lt;br /&gt;&lt;br /&gt;If the project is such that a vendor could end up hijacking it, or if you feel it really needs contributions from vendors, then a viral license (including the lesser GPL) might work. &lt;em&gt;But&lt;/em&gt;... unless you are philosophically opposed to closed source (which is not necessarily what those who use copyleft licenses automatically are), you might arguably be helping the development of society along if you released under a more permissive license--once your own project reached sufficient maturity.&lt;br /&gt;&lt;br /&gt;For example, I'm thinking that if the PHP.JS had been under a copyleft license originally (it is under MIT), once the &lt;a href="http://kevin.vanzonneveld.net/techblog/article/phpjs_namespaced/"&gt;PHP.JS&lt;/a&gt; project manages to implement the bulk of the functions, although no doubt the implementations can continue to improve, it would be less of a concern that the project could be hijacked, and if code improvements needed to be made to the library itself by a closed source project, they could still do so.&lt;br /&gt;&lt;br /&gt;Granted, you might argue that society would be better served if companies lost all incentives to close the source, due to viral licenses taking over, so, according to such a position, viral licenses are more helpful to society even if it means a company cannot bring a cool idea into fruition, since they might feel forced to find closed source incentives elsewhere. I think there may be a difference here as to whether we are talking about code which can turn into a whole infrastructure (e.g., Apple proved they could run with BSD, and if they had or would become a monopoly, it could cause trouble for others), or whether it is just part of the infrastructure.&lt;br /&gt;&lt;br /&gt;For example, if toll roads were ubiquitous, that could really impact our freedom (though, it may be arguable that allowing some such roads (perhaps with a time limit on their exclusive rights--like copyright expiration) ensures they are better maintained and provide useful access routes, etc., and also don't burden tax payers who do not use such roads). However, it may be less clear in certain cases. For example, a browser also provides a kind of infrastructure, even though it is not as fundamental as the operating system. In any case, I think that closed file formats are worse for interoperability, no matter how critical (though I guess some might argue closed file formats are themselves potential innovations).&lt;br /&gt;&lt;br /&gt;One possibility which I'm not sure has been raised (no doubt somewhere it has), is the approach of starting out with a copyleft license, and explicitly informing would-be contributors that the code can be dual-licensed at some future point (assuming the contributors hand over copyright, so other developers' contributions can indeed escape GPL viral issues in the future) under a more permissive license, assuming certain conditions were first met (e.g., that all functions would have some agreeable implementation). Perhaps the original developer could write an agreement indicating that they would not use the code given to them under any license besides the current copyleft one, until such time as they might feel the conditions were met to publish under the permissive license--at which point the original developer would need to fully publish all such contributions in order to himself/herself begin to freely use the contents of the permissive license which were based on others' submissions (and of course others could then use the contents of the permissively-licensed code as well).&lt;br /&gt;&lt;br /&gt;I would think that the above approach might invite more contributions--and even more fast-paced contributions, at least among those who were serious to contribute. The closed-source developers would at least have SOME incentive to help out, as they might not if the code were in the beginning under a permissive license or if there was no indication that the license could ever be made permissive.&lt;br /&gt;&lt;br /&gt;In any case, I think it is helpful to distinguish between different incentives and different approaches, to consider idealistic ethics or practical concerns, rather than lumping them together. However, I also agree with Bruce Perens' point (in the article cited above), that having too many choices can also be a burden (for the developer). Although the arguments about GPL3 dealing with later legal issues are persuasive (I'm still unclear on the DRM issue however, as per the question I posed above), I am concerned that the GPL itself (whose licenses are mutually incompatible) can cause a proliferation of licenses (if there can be a GPL3, then there may well be a mutually incompatible GPL4).&lt;br /&gt;&lt;br /&gt;Heck, maybe the &lt;abbr title="Free Software Foundation"&gt;FSF&lt;/abbr&gt; should just make a version of GPL which states that it is an auto-updating license which automatically subjects itself to future versions of the GPL as soon as publicly available! If we all do start using the GPL3, it really can be a pain not to have access to all of the work done by others in GPL2. What if some company writes their code in some manner, that when exposed to air (as might happen when trying to open an embedded device), it vanishes. While the &lt;a href="http://www.gnu.org/licenses/gpl-3.0.html"&gt;GPL3&lt;/a&gt; does insist on "durable physical medium" when releasing the code by conveying "the object code in, or embodied in, a physical product", maybe "durable" can be twisted by the right lawyers. Anyways, this is just an example, but I don't think we can guarantee that GPL3 is the last license from FSF forever (assuming you think theirs is the best viral license). &lt;strong&gt;[Update: I see that this eventuality of a changing license was, as I should have imagined, already anticipated. Suggestions are given at &lt;a href="http://www.gnu.org/licenses/rms-why-gplv3.html"&gt;http://www.gnu.org/licenses/rms-why-gplv3.html&lt;/a&gt; for releasing under "GPL version 3 or any later version" or assigning a proxy to be able to make decisions about later versions.]&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-6348272304233411196?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/6348272304233411196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=6348272304233411196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6348272304233411196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6348272304233411196'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/02/timing-addition-of-permissive-licensing.html' title='Timing the addition of permissive licensing'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8863745288766565130</id><published>2009-01-10T19:12:00.000-08:00</published><updated>2009-02-19T04:45:41.092-08:00</updated><title type='text'>True Private Instance Variables (and Methods) in JavaScript</title><content type='html'>[Additon: Feb. 19, 2009]: I now recommend &lt;a href="http://brettz9.blogspot.com/2009/02/true-private-instance-variables-in.html"&gt;this approach&lt;/a&gt; instead.&lt;br /&gt;&lt;br /&gt;[Addition: Jan. 12, 2008: Notice how, despite this approach being slightly cumbersome, it may be the most frequent need and recommended case for adding privacy--having private instance variables--as it is usually the data which must be kept private (and which varies per object) and which is often recommended to be always accessed through public methods which allow for potential future further changes in processing before handing over (or setting) the data.]&lt;br /&gt;&lt;br /&gt;I came across this &lt;a href="http://webreflection.blogspot.com/2008/04/natural-javascript-private-methods.html"&gt;very clever method&lt;/a&gt; of giving true private instance methods to JavaScript (which did not require (publicly-accessible and constructed-on-each-instance)　privileged methods). One thing his approach does not deal with, however, is private instance variables. (Note that we're not referring to private (static) variables which are the same across each instance and created in a closure; we're talking about genuine (private) instance variables.) Where he says in his code that "private stuff" can go, besides his private instance methods (which are really private static methods cleverly used as private instance methods by the call() method and which are handling public instance variables), only private static variables can go, and not private instance variables.&lt;br /&gt;&lt;br /&gt;My approach that follows (which builds on his) has a few disadvantages of which I'm aware:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It  requires some unsightly code in places (albeit just one pasteable line in a constructor and , for convenience, a pasteable line for each public method that wishes to use a private instance variable with shorthand syntax)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It requires one public instance variable (an integer)--an incrementor for each instance (and a single private static iterator and private static container of instance objects across all instances) ; if this instance variable is altered (just as is usually the case with a privileged method being altered), the functioning of any derived object (including previously instantiated ones) can be compromised.&lt;sup&gt;1&lt;/sup&gt;  However, if all consumers of the code are trusted, it should not be too difficult to enforce a no-external-access policy for any obj._$ (this is not an issue for front-end users unless your code uses insecure methods like eval() or the like).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Its advantages:&lt;br /&gt;&lt;ol&gt;&lt;li&gt; There will only be one set of private instance methods produced across all instances (contrast this with potentially multiple (cumbersome and high memory) privileged functions added upon each instance in order to serve as a bridge to the prototype for the private instance variables in the constructor; our approach here doesn't need any such bridge (though it does produce an object for each instance to hold the private instance variables).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Allows private variables and methods to be shared across constructor and public methods; the instance variables (and methods) are available everywhere in the class (constructor, and private and public instance methods) if accessed through __[this._$], or _. if a shortcut line is added to each method where private instance variables will be used)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;It operates transparently without need for any helper functions or prototype overloading, etc.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var SomeClass = function () {&lt;br /&gt;var privStatic; // Not being used here&lt;br /&gt;function privateStaticMethod () {} // Not being used here&lt;br /&gt;&lt;br /&gt;// Private instance holder (will be used as such)&lt;br /&gt;var _$ = 0; // Our private static incrementor (increment once per instantiation to distinguish objects)&lt;br /&gt;var __ = []; // Each index on this array will be an object holding private instance variables, with each index corresponding to a unique id generated by each constructor and stored on each of its objects; see also note 2 below&lt;br /&gt;&lt;br /&gt;// Private instance methods (to be used as such below)&lt;br /&gt;function  privInstMethod (instName) {&lt;br /&gt; return  __[this._$][instName];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function Constructor () {&lt;br /&gt; this._$=_$; _$++; var _=__[this._$]={}; // Copy this line for each constructor&lt;br /&gt;&lt;br /&gt; // Private instances code&lt;br /&gt; _.privInst = 5;&lt;br /&gt;}&lt;br /&gt;Constructor.prototype.someMethod = function () {&lt;br /&gt; var _=__[this._$]; // copy this line for each method which uses a private instance variable (to have a more convenient shortcut)&lt;br /&gt;&lt;br /&gt; _.privInst++;&lt;br /&gt;};&lt;br /&gt;Constructor.prototype.getMethod = function () {&lt;br /&gt; var _=__[this._$];&lt;br /&gt;&lt;br /&gt; return _.privInst;&lt;br /&gt;};&lt;br /&gt;Constructor.prototype.anotherGetMethod = function () {&lt;br /&gt; return privInstMethod.call(this, 'privInst'); // Call a private instance method as per Andrea Giammarchi's approach (i.e., treat a private static method as a private instance one); only the first argument is always required, the remaining arguments are the real arguments passed to the private instance method; we could also define, as he did, a shortcut, but that is defining an additional public method&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;return Constructor;&lt;br /&gt;}();&lt;br /&gt;&lt;br /&gt;var cl = new SomeClass();&lt;br /&gt;cl.someMethod();&lt;br /&gt;&lt;br /&gt;cl.someMethod();&lt;br /&gt;alert(cl.getMethod()); // 7&lt;br /&gt;&lt;br /&gt;var cl2 = new SomeClass();&lt;br /&gt;// cl2._$=0; // The biggest down-side of our approach is that things can really get messed up if consumer code does something like this (or if an inheriting class similarly tampers with the variable), but at least there is only one such variable to mess up, making it less likely to happen (and it is not named in such a way as for most trusted consumers to be tempted to alter it), and does not provide access to the private members&lt;br /&gt;cl2.someMethod();&lt;br /&gt;alert(cl2.getMethod()); // 6&lt;br /&gt;&lt;br /&gt;alert(cl.getMethod()); // still 7&lt;br /&gt;&lt;br /&gt;alert(cl.anotherGetMethod()); // also 7&lt;br /&gt;alert(cl2.anotherGetMethod()); // also 6&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;NOTES&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt; One could replace the first line in the constructor with this:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;this._$= function get_$ (_$) { return function () {return _$}}(_$); _$++; var _=__[get_$()]={}; // Copy this line for each constructor&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and then replace all other instances of "this._$" in the code with "this._$()" except for within the constructor, where you can use get_$().&lt;br /&gt;&lt;br /&gt;This would add one privileged method to each instance (but only one--not one for each private variable) and be slightly more unattractive. An advantage of this would be that the function used internally within the constructor would be secure for previously instantiated objects (resetting obj._$() externally would not affect it), but it would only be secure within the constructor--not within its public methods (as would be the case for any privileged method).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The line "var __ = [];" might be divided into protected and private holders to allow inheriting classes to share access by passing in an object to this anonymous function (or create a global storage object for shared "protected" instance variables (or protected static ones)). I aim to discuss this possibility (as for a different approach to protected methods) in a future post.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8863745288766565130?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webreflection.blogspot.com/2008/04/natural-javascript-private-methods.html' title='True Private Instance Variables (and Methods) in JavaScript'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8863745288766565130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8863745288766565130' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8863745288766565130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8863745288766565130'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/01/i-came-across-this-very-clever-method.html' title='True Private Instance Variables (and Methods) in JavaScript'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3959518994434686407</id><published>2009-01-09T17:43:00.000-08:00</published><updated>2011-04-25T19:49:59.273-07:00</updated><title type='text'>The World's Most Dangerous Drug: Nationalism ?</title><content type='html'>Among the world's top most dangerous drugs--nationalism... (We might also take racism as being akin to nationalism...)&lt;br /&gt;&lt;br /&gt;This drug's most obvious effect is (selective) blindness. The addict will filter and process everything through the distorted vision caused by this drug. Only the addict (and by extension his country) will be right in all situations, and others are suspect of blame, weakness, aggression, etc.&lt;br /&gt;&lt;br /&gt;As with drug addiction, the addict will most likely vigorously deny the dependence, but it will be clear from their actions that, for the most part, they will only be able to place blame on others (other nations or people in other countries) and not take account for their own actions (often because this is indeed more difficult to do). While fault may indeed be found with others (or other countries and their people), this is often used as an excuse for failing to address and overcome the system of mutually enabling behavior which affects both addicts in their relation to one another--such as an unjust or weak international order cannot resolve disputes adequately and leads to further national animosities (and to look at one's own faults (and one's own country) in the process).&lt;br /&gt;&lt;br /&gt;Here's a twelve-step program (based largely on the original one for alcoholics) to overcoming this dependence... They apply equally no matter your country of origin...&lt;br /&gt;&lt;br /&gt;Note that, needless to say, none of this is professional psychiatric advice.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We admitted we were powerless over nationalism—that our lives (and those of our fellow national and world citizens, and our international relations as countries) had become unmanageable.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Came to believe that a Power (or at a minimum, a federated world power) greater than ourselves (and greater than our country alone) could restore us to sanity.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Made a decision to turn our will and our lives over to the care of God as we understood Him (or at least to a higher representative authority which encompassed all people).&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Made a searching and fearless moral inventory of ourselves (including ourselves as national citizens). [One of the most important and difficult steps, in my opinion - B.Z.]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Admitted to God, to ourselves, and to another human being the exact nature of our wrongs as an individual and national citizen. [I don't really agree with the part about admitting it to another human being as far as small offenses by individuals, as I don't believe in humiliation before another human being, but I do believe disclosure may be truly needed in some larger cases for therapy or justice (e.g., like in South Africa's Truth and Reconciliation Commission or even payment of reparations).]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Were entirely ready to have God remove all these defects of character in ourselves and our country (and/or let a justly constituted international system of governance by the people of the world monitor and prescribe remedies for serious defects not handled adequately by our own national authorities).&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Humbly asked Him to remove our shortcomings as individuals and as a country.  [Note that, as with addiction recovery, one need not focus blame excessively on oneself as a country or people, and there are advantages to taking note of steps toward progress, but without letting such pride or contentment degenerate into laxity or regression, or ignoring the need (as discussed in the next steps) to redress serious wrongs one (or one's country) has committed. - B.Z.]&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Made a list of all persons, peoples, and nations we had harmed, and became willing to make amends to them all.&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Made direct amends to such people or nations wherever possible (as an individual or country), except when to do so would injure them or others.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Continued to take personal inventory and when we (as individuals or as a country) were wrong promptly admitted it.&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Sought through prayer and meditation to improve our conscious contact with God as we understood Him (or at least seek to improve our conscious knowledge of, participation in, reformation of, and adherence to His current higher legal body for humanity, the United Nations and other international institutions), praying only for knowledge of His Will for us (or at least for knowledge of international opinion and consensus, as God favors unity except where unity is truly amoral, as in Hitler's Germany) and the power to carry that out (or at least that a justly constituted United Nations, comprised of our nation and others, will be given the authority and power by God to act as the executive for such consensus and act as the global policemen to adequately defend individual and national liberties as necessary, as our world so sorely needs).&lt;/li&gt;&lt;br /&gt; &lt;li&gt;Having had a spiritual awakening as the result of these steps, we tried to carry this message to other nationalists, and to practice these principles in all our affairs (as individuals or as a nation).&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;[&lt;span style="font-weight: bold;"&gt;Updated 4/26/2011:&lt;/span&gt; Added a little extra content for step 6.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3959518994434686407?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3959518994434686407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3959518994434686407' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3959518994434686407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3959518994434686407'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2009/01/among-worlds-top-most-dangerous-drugs.html' title='The World&apos;s Most Dangerous Drug: Nationalism ?'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5573140758795171653</id><published>2008-12-26T18:05:00.000-08:00</published><updated>2008-12-26T18:24:17.143-08:00</updated><title type='text'>War, patriotism, pacifism</title><content type='html'>&lt;blockquote&gt;Fortunate Son - Creedence Clearwater Revival&lt;br /&gt;&lt;br /&gt;Some folks are born made to wave the flag,&lt;br /&gt;Ooh, they're red, white and blue.&lt;br /&gt;And when the band plays hail to the chief,&lt;br /&gt;Ooh, they point the cannon at you, Lord,&lt;br /&gt;&lt;br /&gt;But it ain't me, it ain't me, I ain't no senator's son, son.&lt;br /&gt;It ain't me, it ain't me; I ain't no fortunate one, no...&lt;br /&gt;&lt;br /&gt;Some folks are born silver spoon in hand,&lt;br /&gt;Lord, don't they help themselves, yo.&lt;br /&gt;But when the taxman comes to the door,&lt;br /&gt;Lord, the house looks like a rummage sale, yes,&lt;br /&gt;&lt;br /&gt;It ain't me, it ain't me, I ain't no millionaire son, no, no.&lt;br /&gt;It ain't me, it ain't me; I ain't no fortunate one, yo.&lt;br /&gt;&lt;br /&gt;Some folks inherit star-spangled eyes,&lt;br /&gt;Ooh, they send you down to war, Lord!&lt;br /&gt;And when you ask them, how much should we give?&lt;br /&gt;Ooh, they only answer more! more! more! yo,&lt;br /&gt;&lt;br /&gt;It ain't me, it ain't me, I ain't no military son, son.&lt;br /&gt;It ain't me, it ain't me; I ain't no fortunate one, one.&lt;br /&gt;&lt;br /&gt;It ain't me, it ain't me, I ain't no fortunate one, no no no,&lt;br /&gt;It ain't me, it ain't me, I ain't no fortunate son, no no no...&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Its [the world-wide Law of Bahá'u'lláh] purpose is neither to stifle the flame of a sane and intelligent patriotism in men's hearts, nor to abolish the system of national autonomy so essential if the evils of excessive centralization are to be avoided. It does not ignore, nor does it attempt to suppress, the diversity of ethnical origins, of climate, of history, of language and tradition, of thought and habit, that differentiate the peoples and nations of the world. It calls for a wider loyalty, for a larger aspiration than any that has animated the human race. It insists upon the subordination of national impulses and interests to the imperative claims of a unified world. It repudiates excessive centralization on one hand, and disclaims all attempts at uniformity on the other. &lt;br /&gt;&lt;br /&gt;(Shoghi Effendi, World Order of Baha'u'llah, pp. 41-42)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"With reference to the absolute pacifists, or conscientious objectors to war; their attitude, judged from the Bahá'í standpoint is quite anti-social and due to its exaltation of the individual conscience leads inevitably to disorder and chaos in society. Extreme pacifists are thus very close to the anarchists, in the sense that both of these groups lay an undue emphasis on the rights and merits of the individual. The Bahá'í conception of social life is essentially based on the subordination of the individual will to that of society. It neither suppresses the individual nor does it exalt him to the point of making him an anti-social creature, a menace to society. As in everything, it follows the `golden mean'. The only way that society can function is for the minority to follow the will of the majority.&lt;br /&gt;&lt;br /&gt;"The other main objection to the conscientious objectors is that their method of establishing peace is too negative. Non-cooperation is too passive a philosophy to become an effective way for social reconstruction. Their refusal to bear arms can never establish peace. There should first be a spiritual revitalization which nothing, except the Cause of God, can effectively bring to every man's heart." &lt;br /&gt;&lt;br /&gt;(Shoghi Effendi, Directives from the Guardian, http://bahai-library.com/writings/shoghieffendi/dg/sec-145.html )&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5573140758795171653?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5573140758795171653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5573140758795171653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5573140758795171653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5573140758795171653'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/12/war-patriotism-pacifism.html' title='War, patriotism, pacifism'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8606778864942098296</id><published>2008-12-17T20:03:00.000-08:00</published><updated>2009-01-10T19:40:12.134-08:00</updated><title type='text'></title><content type='html'>Although this is covered in many JavaScript books, such as the excellent &lt;a href="http://www.amazon.com/gp/product/0596517742?ie=UTF8&amp;tag=brettsblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0596517742"&gt;JavaScript: The Good Parts&lt;/a&gt;,&lt;img src="http://www.assoc-amazon.com/e/ir?t=brettsblog-20&amp;l=as2&amp;o=1&amp;a=0596517742" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /&gt; I find the following issue with the potentially very powerful nested functions (or closures) to be especially under-explained in the literature.&lt;br /&gt;&lt;br /&gt;The following is sample code which adds a method to three different objects, expecting that the alert will indicate a different value on each object.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="js"&gt;function add (objs) {&lt;br /&gt;    for (var i=0; i &amp;lt; objs.length; i++) {&lt;br /&gt;        objs[i].showIValue = function () {&lt;br /&gt;            alert(i);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var a = {};&lt;br /&gt;var b = {};&lt;br /&gt;var c = {};&lt;br /&gt;var objs = [a, b, c];&lt;br /&gt;add(objs);&lt;br /&gt;&lt;br /&gt;a.showIValue(); // Gives '3'&lt;br /&gt;b.showIValue(); // Also gives '3'&lt;br /&gt;c.showIValue(); // And, yet again, '3'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, what's going on here? Nested functions inherit the scope of those functions in which they are nested, with the variables in that scope treated as the variables themselves--not as mere copies of the variables. And the variable is considered for its value by the end of the function call, in this case, the last increment of 'i', which was equal to the length of the passed-in array.&lt;br /&gt;&lt;br /&gt;You can confirm this strangeness if you add a line at the end of the function to produce this:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;function add (objs) {&lt;br /&gt;    for (var i=0; i &lt; objs.length; i++) {&lt;br /&gt;        objs[i].showIValue = function () {&lt;br /&gt;            alert(i);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    i += 100;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now each of your method calls will give '103', even though the increment is at the end of the function!  (This is therefore a different case from one you may have heard of in which the function uses define-time values--more on that below.)&lt;br /&gt;&lt;br /&gt;If you change the function to have 'i' become a global variable, and then tamper with the 'i' variable after the &lt;code&gt;add()&lt;/code&gt; method is called, you can also see how the variable is considered for its call-time value.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;&lt;br /&gt;var i;&lt;br /&gt;function add (objs) {&lt;br /&gt;    for (i=0; i &lt; objs.length; i++) {&lt;br /&gt;        objs[i].showIValue = function () {&lt;br /&gt;            alert(i);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var a = {};&lt;br /&gt;var b = {};&lt;br /&gt;var c = {};&lt;br /&gt;var objs = [a, b, c];&lt;br /&gt;add(objs);&lt;br /&gt;i += 500;&lt;br /&gt;a.showIValue(); // Gives '503'&lt;br /&gt;i += 500;&lt;br /&gt;b.showIValue(); // Gives '1003'&lt;br /&gt;i += 500;&lt;br /&gt;c.showIValue(); // Gives '1503'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I think the easiest way to summarize this might be to say that the variable is considered for its latest outer call-time value, bearing in mind that for local variables, a kind of memory is retained of their latest state at call-time--i.e., their value at the end of the function (since if we considered it as a global, 'i' would be undefined since it has no value in our global scope).&lt;br /&gt;&lt;br /&gt;So, what's the solution?&lt;br /&gt;&lt;br /&gt;We can do:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;function add (objs) {&lt;br /&gt;    for (var i=0; i &lt; objs.length; i++) {&lt;br /&gt;        (function (i) {&lt;br /&gt;            objs[i].showIValue = function () {&lt;br /&gt;                alert(i);&lt;br /&gt;            }&lt;br /&gt;        })(i);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;function add (objs) {&lt;br /&gt;    for (var i=0; i &lt; objs.length; i++) {&lt;br /&gt;        objs[i].showIValue = function (i) {&lt;br /&gt;            return function () {&lt;br /&gt;                alert(i);&lt;br /&gt;            }&lt;br /&gt;        }(i);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In either case, we get the following results:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;var a = {};&lt;br /&gt;var b = {};&lt;br /&gt;var c = {};&lt;br /&gt;var objs = [a, b, c];&lt;br /&gt;add(objs);&lt;br /&gt;&lt;br /&gt;a.showIValue(); // Gives '0'&lt;br /&gt;b.showIValue(); // Gives '1'&lt;br /&gt;c.showIValue(); // Gives '2'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Note: I added the color highlighting for the above using the information &lt;a href="http://urenjoy.blogspot.com/2008/10/publish-source-code-in-blogger.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8606778864942098296?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8606778864942098296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8606778864942098296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8606778864942098296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8606778864942098296'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/12/although-this-is-covered-in-many.html' title=''/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3665997510378415671</id><published>2008-10-22T20:26:00.000-07:00</published><updated>2008-10-22T21:07:14.685-07:00</updated><title type='text'>Interface Ideas ("Intrinisic Flexibility")</title><content type='html'>I have a fairly small laptop screen but know how much I like to be able to use up the full screen real estate when I'm using a larger monitor (and despite the fixed layout aficionados out there, I believe many others feel similarly--ok, maybe fixed layouts can be potentially made resizable too, but...).&lt;br /&gt;&lt;br /&gt;Anyhoo, one great widget of the future (the kind a self-learning robot might invent for its purposes--great motivator, by the way, to compete against such eventualities) is to be able to turn portions of a layout (e.g., HTML fieldset, a XUL groupbox, etc.) into a separate tab, and convert tabs (tabs such as created by the latter, as well as those already in use, e.g., Firefox browser tabs) into unified screens.&lt;br /&gt;&lt;br /&gt;This kind of widget would really relieve a lot of the headaches of programmers trying to provide an adequate interface, as they could rest assured that their users will have some flexibility in customizing it to their own needs. &lt;br /&gt;&lt;br /&gt;(Unlike in XUL, it'd be great to have flex attributes be inheritable to avoid needing to place them everywhere.)&lt;br /&gt;&lt;br /&gt;One should have the ability to turn a multiple select box into a series of checkboxes (and vice versa), or a single select box into a series of radio buttons (and vice versa). One should have the option to turn a condensed (XUL-style menuitem) into an HTML optgroup-style integrated view and vice versa.&lt;br /&gt;&lt;br /&gt;I'd even like to be able to auto-convert fixed layouts into fluid ones and vice versa.&lt;br /&gt;&lt;br /&gt;Although one can do this with overlays, it'd be nice to have more "intrinsically flexible" features to convert any sidebar into a dialog (extensions exist to do this), a dialog into a sidebar, etc.&lt;br /&gt;&lt;br /&gt;I really hope more interface languages (or their parsers) will become more intrinsically flexible.&lt;br /&gt;&lt;br /&gt;Oh, and the ability to turn displays of one type into another (richlistbox into a tree, etc., a wrapping table into a list, and vice versa, etc., or any of these into flashcards, etc.; also, trees into &lt;a href="http://www.assembla.com/spaces/brettz9"&gt;column browsers&lt;/a&gt; and vice versa). Yes, one can program this to occur in individual cases, but one does not have the flexibility within the Firefox interface at present to do this at will (and it is unrealistic to expect that all extension developers or even Firefox developers will have the foresight (or skills) to make things as flexible as others might want).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3665997510378415671?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3665997510378415671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3665997510378415671' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3665997510378415671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3665997510378415671'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/10/interface-ideas-intrinisic-flexibility.html' title='Interface Ideas (&quot;Intrinisic Flexibility&quot;)'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5159533319947614478</id><published>2008-10-22T19:41:00.000-07:00</published><updated>2008-10-22T19:56:31.303-07:00</updated><title type='text'>Two Future Inventions</title><content type='html'>One future invention (not too far down the road) which I believe will have an enormous impact on learning: The ability to wear goggles (or some other device over or in the eye) which use pattern recognition to identify features in one's environment and then query databases, such as Wikipedia (or search engines) which are wirelessly connected to grab live information from the web. You could be strolling in the park and see some animal that you'd like to know more about (or to generate sounds back at it!) or wish to identify some material, etc. Yes, films like the Terminator have popularized this kind of item from a militaristic angle, but the learning potential is far greater (and more important).&lt;br /&gt;&lt;br /&gt;One socially interesting invention of the future I see is to be able to use the "telepathic" devices that detect tiny vibrations in one's vocal cords (or perhaps brain-related ones) to transmit one's thoughts (willingly!) to those in one's immediate environment, including even strangers--anyone who has such a device. Of course, there is a potential for auto-translation, even customized to the listener (though I still believe that an official world auxiliary language is even more important). Imagine walking down the street and being able to 'hear' others thoughts to those who have chosen to broadcast them, whether they are targeted to specific person(s) or just to anyone willing to listen. The thoughts could thus be ignored or responded to (even anonymously). Could make walking among strangers a more interesting and even instructive experience (not to mention socially engaging)...&lt;br /&gt;&lt;br /&gt;No doubt others have thought of these, and if I cared to search the net, I probably could find something, but I'll leave that for now to any would-be commenters... :)&lt;br /&gt;&lt;br /&gt;One idea I still can't believe no one's implemented are "real" chat rooms. Places like a coffee house where you can go and where people set up tables to discuss specific topics. Yes, there are book clubs, etc., but I'm talking about a more exact analogue for online chat rooms--where people have an excuse to talk to and meet others, around some subject rather than from a frequently physical angle...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5159533319947614478?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5159533319947614478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5159533319947614478' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5159533319947614478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5159533319947614478'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/10/two-future-inventions.html' title='Two Future Inventions'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5702632151355656044</id><published>2008-09-04T12:12:00.000-07:00</published><updated>2008-09-05T03:19:12.589-07:00</updated><title type='text'>Separate But Equal....</title><content type='html'>We all (Americans if not other world citizens) know about the so-called "separate-but-equal" principle which had justified separate lives and facilities between whites and blacks.&lt;br /&gt;&lt;br /&gt;Before pursuing my theme, however, I should ask whether someone living at such a time of "separate-but-equal" should have been "proud" of their country? Sure, you could find some things to be proud of. Even in the midst of injustice, one can be rightly proud of steps taken by one's countrymen to undo the injustices committed by other of one's countrymen (the abolitionist movement, the many soldiers who died in the Civil War with the aim to bring freedom, and so on). And it is not helpful in any time period to harp excessively on one's shortcomings ("one" being oneself, one's group, etc.). But does anyone have so much business dwelling on patting themselves on the back and being heartily proud when such drastic inequalities still existed? Or going further back, if you are a self-declared American patriot, should you have been, without qualification, proud of being British at the time America was deciding to become an independent political entity, since at that time you would still have been British? (though the perception of high-minded dignity with which we view the founding of our nation tend to ignore the facts that an apparently large part of our supposedly high-minded incentive for independence was resisting such annoying restrictions the British authorities were imposing on us like not being able to &lt;a href="http://en.wikipedia.org/wiki/Royal_Proclamation_of_1763"&gt;encroach into native American land&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;While I am not suggesting that a sense of solidarity with a larger group inevitably leads to provincialism--there can be powerful and beneficial motivations in love-based identification with a larger group--I am suggesting that JUSTICE--a virtue above other virtues which implies the ability to think for oneself--demands that we attempt to transcend appeals to our group identity when we must make decisions, consider what is true and right, and evaluate what is fair.&lt;br /&gt;&lt;br /&gt;I firmly believe that future generations of Americans--who will celebrate and take greater pride in their world citizenship than in their identity as Americans, just as most citizens of Illinois today take greater pride in the greater visionary wholeness of being an American, even while they recognize the need to take care of Illinoisans first--will look back and shake their heads in shame at our living with another separate-but-equal hypocrisy in this time--our continuation of support for the notion of permanent membership in the U.N. Security Council (of which the U.S., France, Great Britain, Russia, and China--the victors of the 2nd World War--are the sole members) whose individual members can veto any vote of significance in the U.N. (despite the way the U.N. is laughably painted by its enemies as some organization opposed to us) in contrast to the separate-but-equal non-permanent members of the U.N.--i.e., the rest of the world.&lt;br /&gt;&lt;br /&gt;No doubt someone might wish to claim, by my attempting to draw a parallel, that I am somehow insisting that the separate-but-equal racial policies and current U.N. Security Council situations are equivalent. I most certainly am not, as the latter had some basis in reason in that the powers granted to these members was intended to deter them from declaring war on one another. However, one should also not underestimate the gross travesties to justice and serious implications that the current anarchic yet dictatorial quintuplocracy has in the world--ones whose severe implications might in fact even surpass the terrible damages of the separate-but-equal policies (as through genocides that might have been prevented, had the U.N. not been held back from intervening).&lt;br /&gt;&lt;br /&gt;American politicians often like to throw around the "importance" of the U.S. as a superpower by assuming the insignificance of lesser powers. You don't have to look hard for such examples, but such attitudes can take the form of big clubs of so-called important nations, to choosing "lesser" countries as the indirect butt of jokes, to a more insidious form of threatening to destroy a whole but less powerful country because we can. &lt;br /&gt;&lt;br /&gt;Imagine if such politicians were to denigrate a smaller town or state within the U.S., just because it was small. They would immediately (and rightfully) be accused of lacking patriotism, of being arrogant, insensitive, and so on (and probably driven from office), yet when these things go on on a regular basis toward other countries, since the target is not around to defend itself, very few Americans (as would be the case for other countries' citizens) seem to stick up for those who are absent (similar to how few individuals are just enough to stick up for those not present who are the targets of backbiting).&lt;br /&gt;&lt;br /&gt;Even minorities who hail from the countries in question are often only too eager to show their American-ness (or forget their otherness) that these seemingly likely candidates shy away from the opportunity, often even more quickly then the majority. &lt;br /&gt;&lt;br /&gt;And yet just the other day I read an intellectual denigrating the phrase "citizen of the world", as if it had no meaning. It has a strong meaning--that we believe in world law and order, transcendence of nationalism, and resistance against those who would instigate aggression against anyone in the brotherhood of man. Surely this intellectual would celebrate the sentiment "We're all Americans", and this sentiment does not need to be asserted against anyone else (though in today's shrinking world, I do find such appeals to nationality as being embarrassingly circumscribed--as if one were to say to a mostly Illioisan audience, "We're all Illinoisans, aren't we? We wouldn't do such a thing." while people from other states were present).&lt;br /&gt;&lt;br /&gt;But it is not only tiny countries which are subject to this denigration. Even countries in Europe (or Europe itself) are not immune, and are even more strongly abused or dismissed as they are looked down upon in some aspect and find their cultures or attitudes dismissively mocked. Japan's culture too is treated in a similar fashion. You'd think we'd actually know something about the life of the people in the 2nd largest economy next to ours (one great mainstream exception was the excellent film Gung Ho! from the 1980's, which I heartily applaud--one of the only kind of films to make me feel proud as an "American"---because it is celebrating our role along with celebrating the different but potentially complementary role of others).&lt;br /&gt;&lt;br /&gt;Not a friendly or even hostile banter where the country is actually represented with a live person from that country, but a dismissiveness of the culture as a whole in is absence. (I really believe most of our pundits on television who confidently talk about other countries (about their politics, but not, God forbid, their manners as a whole), sadly do not have a single minority or foreign friend, and even if they did, it would be in the context of exoticism or tokenistic political debate--and I'm not even talking here about the foaming-at-the-mouth jingoistic media types which have seemed to come out of nowhere over the past few years.)&lt;br /&gt;&lt;br /&gt;While America has made great strides in multi-culturalism (without being too rosy-eyed, I swear things have visibly improved each time I go back to visit the States, assuming I can ignore certain vocally nasty segments of society), it still uses itself as the frame of reference (e.g., "come here and learn English and we'll accept you") but immensely far from a global outlook which sees itself as one part of a larger whole (e.g., "Let's collectively agree on a world language, and if it can't be English, we'll learn it too."). The lack of endorsement of the metric system is another example. We have all kinds of excuses for not playing along with others. We just can't fathom the possibility that WE are not the standard, but rather that the world (including us) can be a standard. So-called academics in the U.S. can equally fall into this trap and often even moreso. We are the objective ones, and the others have ethnicity and culture. Of course, we have the best system, and while we might learn a thing here or there (e.g., "How could China have such a developed .... and here in the U. S. of A. we still don't have it! Unconscionable!"), we don't really expect to learn that much for the sake of changing ourselves. (That's sarcasm, by the way, folks.)&lt;br /&gt;&lt;br /&gt;I look forward to the day when the lamb can lie down with the lion and the leopard with the kid--the large and small nations together. The coming of that day is inevitable, but it is a question of how soon, and after how much turmoil. We cannot and should not be "separate but equal" as large and small, or "powerful" and "weak" nations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5702632151355656044?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5702632151355656044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5702632151355656044' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5702632151355656044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5702632151355656044'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/09/separate-but-equal.html' title='Separate But Equal....'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-722722978636500071</id><published>2008-08-29T19:35:00.000-07:00</published><updated>2008-09-02T08:26:01.855-07:00</updated><title type='text'>There is no god but God...</title><content type='html'>I mentioned in my last post about the need for people to drop a self-defeating cynicism about what humanity as a whole is able to accomplish.&lt;br /&gt;&lt;br /&gt;However, I also felt the urge today to post a couple of quotes on the stupidity of we human beings, because one can really, really marvel at our stupidity, stubbornness, and slowness to accept reason as a race.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;God must love the common man, He made so many of them.&lt;br /&gt;&lt;br /&gt;Abraham Lincoln&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;God must love the common man, because He made him so common.&lt;br /&gt;&lt;br /&gt;(Unknown)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;While I know some may be surprised an outwardly religious person is making such arguments (and not as a political weapon), those who have some real experience with religious belief and practice beyond trite or partisan dialogues (whether pro or anti religion), know that true religious belief actually makes one more cynical about human beings (at least in many ways).&lt;br /&gt;&lt;br /&gt;I can't find the clipping now, but there was a study recently in the news about how religious people who attended worship services were less likely to believe in the occult than even non-believers.&lt;br /&gt;&lt;br /&gt;Here's a quote from the Baha'i Writings on this topic of belief and cynicism:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;If one is not allowed to associate with another, how can one guide him out of the dark and empty night of denial, of "there-is-no-God," into the bright morning of belief, and the affirmation, "but God."&lt;br /&gt;&lt;br /&gt;'Abdu'l-Baha, &lt;a href="http://bahai-library.com/index.php5?file=abdulbaha_secret_divine_civilization.html#54"&gt;Secret of Divine Civilization&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Implicit in this is a sympathy with the step of "there-is-no-God" (especially given other Baha'i Writings urging a study of rational proofs above a merely sentimental basis of faith).&lt;br /&gt;&lt;br /&gt;The above refers to the beginning of the first pillar of Islam, or Shahada, the Muslim declaration of belief, "There is no god but God..." Accepting this statement in its totality mandates skepticism--a mandate which is well justified and will well serve those who follow it.&lt;br /&gt;&lt;br /&gt;While areligious skeptics might be tempted to vaunt their coming to such a conclusion of skepticism of human beings, unaided of any direct knowledge of religion as being superior to such a "forced" mandate, religious belief inherently suggests that far from dropping our intellect, we utilize religion as a tool to enhance and foster it. One might claim for example, that a person who uses an alarm clock is using the fear of the alarm as a kind of crutch; they might maintain that a true person would have no need of such artificial contraptions and look down on their willingly submitting to the fear induced by the alarm (or the approach of the alarm if one wakes up a little before it), even while they ignore the fact that they themselves are motivated by fear on other occasions, use other such "artificial" contraptions themselves, etc. &lt;br /&gt;&lt;br /&gt;Hopefully we can agree that using an alarm clock is not inevitably superstitious unless its use indeed is so (e.g., if I were to believe that the alarm could take over my body if I didn't turn it off within a few seconds). Nor is it inevitably (an unnecessary dependence on) a crutch; as indeed it might provide the only way to ensure one makes an important meeting, for example.&lt;br /&gt;&lt;br /&gt;No doubt within pre-scientific societies, there are those who come to the conclusion that superstitious claims or practices could be debunked. But dissemination of the knowledge and methods of science is surely superior (as we understand them today), both for helping people who would otherwise be oblivious to them, as well as enhancing the understanding of those who already recognize its merits.  Likewise do I believe that religion helps facilitates natural motivations to divorce oneself from excessive faith in others--especially in the Baha'i Faith which eliminates the role of any professional clergy. (I was recently reading about the "Magical negro" phenomenon and thought there should be an equivalent name for the "Magical clergyman" as people like to outsource spiritual sacrifice and vicariously draw from a perception of quaint holiness from such individuals (yet only briefly, naturally).)&lt;br /&gt;&lt;br /&gt;Religion not only inspires one in the principle of it (and the motivation), but, being from God, provides guidance that is well ahead of the time (even it can only be imperfectly understood). Whether it is the race amity gatherings and interracial weddings encouraged in the early 1900's when the Baha'i Faith first came to the U.S., the abstention from partisan politics whose fruitlessness and corruption and violence-engendering tendencies daily become more apparent, to avoidance of the pop psychology promotion of self-esteem as a means but rather as a result of purposeful service, to the promotion of the United Nations before Woodrow Wilson even proposed his 14 Points / League of Nations, to the global non-partisan system of administration governing the Baha'i community, there are so, so many other ways in which Baha'is were--because of belief (and to the extent of which), not any inherent insight--ahead of the times and not sucked into wasteful, divisive, and fruitless ventures--even those Baha'is with otherwise low intelligence or education.&lt;br /&gt;&lt;br /&gt;Granted, the statement above of 'Abdu'l-Baha was itself addressing religious fanatics who refuse to associate or show kindness to those from other religions, in a book that was written to present arguments to persuade fundamentalist Muslims to learn from the advantages of modernity (such as indicating Qur'anic statements in support of democracy, etc.), so naturally I could not be maintaining that religion cannot be poorly applied, but surely an objective observer can admit that such attachments are hardly based on a deep study of the religion (on the contrary) and are often tied up in nationalist/tribalistic bigotry rather than genuine belief in a higher humbling-for-everyone-including-oneself authority.&lt;br /&gt;&lt;br /&gt;In refuting arguments by those who have "taken as their criterion the behavior of a few religious hypocrites and measured all religious persons by that yardstick", 'Abdu'l-Baha points out that religion is like a lamp which can be used for good or ill:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;A lighted lamp in the hands of an ignorant child or of the blind will not dispel the surrounding darkness nor light up the house--it will set both the bearer and the house on fire. Can we, in such an instance, blame the lamp? No, by the Lord God! To the seeing, a lamp is a guide and will show him his path; but it is a disaster to the blind. &lt;br /&gt;&lt;br /&gt;'Abdu'l-Baha, &lt;a href="http://bahai-library.com/index.php5?file=abdulbaha_secret_divine_civilization.html#54"&gt;Secret of Divine Civilization&lt;/a&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-722722978636500071?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/722722978636500071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=722722978636500071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/722722978636500071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/722722978636500071'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/08/there-is-no-god-but-god.html' title='There is no god but God...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3597375491721734</id><published>2008-08-22T19:36:00.000-07:00</published><updated>2008-08-22T21:09:57.481-07:00</updated><title type='text'>It's time for the rule of law...</title><content type='html'>While the Cold War has ended, there are of course still regularly conflicts around the world where one group claims the right to self-determination (as enshrined in the &lt;a href="http://www.un.org/aboutun/charter/"&gt;United Nations charter&lt;/a&gt;) and another (or others) disputes the "self" or "determination" of the other. Widows, widowers, and orphans are made regularly out of this anarchy.&lt;br /&gt;&lt;br /&gt;The only way in which an impartial determination can be made is for a higher representative authority (read: a reformed United Nations) to agree on and establish such borders. We all recognize that city disputes can be regulated by national authorities. It's high time national disputes become regulated by international institutions.&lt;br /&gt;&lt;br /&gt;And in order for this to be able to occur, while not being rosy-eyed about the realities and challenges, its also high time for humanity to drop its self-defeating (and unscientific) cynicism about the race's capacity to organize itself into a higher unit of organization and to drop its irrational, self-defeating, and frankly childish fear that such a reorganization would inevitably lead to some kind of stifling Orwellian Big Brother state, any more than our history of organizing into nation-states has inevitably led to Big Brother nations (yes, the threat of terrorism may have led to more intrusive or excessive measures within some nation-states of late, but that threat itself occurred and occurs more readily because of a lack of a viable and just international order). Indeed, in order to establish a sufficiently strengthened world state, justice, common ground, and respect for diversity is necessary (as was the case with the formation of the United States itself) and would facilitate unhampered expression of human potential in its diversity, just as a just rule of law within a nation, enables diverse people to coexist and find expression for their own potential. The &lt;a href="http://en.wikipedia.org/wiki/Articles_of_Confederation"&gt;Articles of Confederation&lt;/a&gt; proved that a weak constitution cannot bring unity, while a federated one can.&lt;br /&gt;&lt;br /&gt;So, with a more scientific approach, one which doesn't take fashionable statements about human beings being inevitable war-mongers; even for stark nationalists who are solely concerned with their own country--the only promise for the development of oneself (or one's country) is a balanced integration with the world.&lt;br /&gt;&lt;br /&gt;While it may be reasonable and even incumbent on me to defend my neighbor, if police are not around to do so, if I become embroiled in a local conflict (let's say with a neighbor who claimed his property extended to another neighbor's), my own objectivity might be called into question by other neighbors if I were to take sides in the dispute. So, humanity has learned enough, through trial and error, that laws must be made to make clear exactly what land boundaries are, and so within nations, to a large extent, we don't inevitably have problems with say Illinois trying to forcefully push its borders into Indiana. Sure there are water disputes, etc., but these also can often be handled by appeals to a higher authority--and they certainly don't inevitably lead to armed conflict! It's not because Illinoisans are inherently more civilized than other peoples living where border disputes occur (though being originally an Illinoisan myself, I might wish to make that argument). It's foremost because there is a mindset that we all belong to one higher unit (the U.S.)--a mindset which did not occur on its own but which had to be actively promoted through education and P.R. at the country's inception by the state's founders (just as world citizenship needs to be promoted actively around the world now)--and that higher unit has the authority (and is respected through elected and balance-of-powers accountability) to intervene if there is a local conflict because the borders have been blessed by legal recognition. The problem is that if we only bow to the false god of nationalism, the mindset that my identity is foremost a U.S. citizen (just as if say some Mexicans, to take one border issue impinging with the U.S., only believe they are Mexicans), I will inevitably be closed to international solutions which in some cases might alone bring peace to myself as well as to Mexicans. People must shake off the mental shackles that they must be wholly allied to some narrowly-defined, man-made grouping, with partisan mindsets incapable of transcending their thinking to a broader, more sympathetic level. This is not to encourage undermining legitimate loyalties and understandable primary concern for those more close-to-home; rather, it is to fulfill them. If you really love your country, you must love the world, just as if you really love your home-town, you must love the country which enables it to flourish.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"True civilization will unfurl its banner in the midmost heart of the world whenever a certain number of its distinguished and high-minded sovereigns -- the shining exemplars of devotion and determination -- shall, for the good and happiness of all mankind, arise, with firm resolve and clear vision, to establish the Cause of Universal Peace. They must make the Cause of Peace the object of general consultation, and seek by every means in their power to establish a Union of the nations of the world. They must conclude a binding treaty and establish a covenant, the provisions of which shall be sound, inviolable and definite. They must proclaim it to all the world and obtain for it the sanction of all the human race. This supreme and noble undertaking -- the real source of the peace and well-being of all the world -- should be regarded as sacred by all that dwell on earth. All the forces of humanity must be mobilized to ensure the stability and permanence of this Most Great Covenant. In this all-embracing Pact the limits and frontiers of each and every nation should be clearly fixed, the principles underlying the relations of governments towards one another definitely laid down, and all international agreements and obligations ascertained. In like manner, the size of the armaments of every government should be strictly limited, for if the preparations for war and the military forces of any nation should be allowed to increase, they will arouse the suspicion of others. The fundamental principle underlying this solemn Pact should be so fixed that if any government later violate any one of its provisions, all the governments on earth should arise to reduce it to utter submission, nay the human race as a whole should resolve, with every power at its disposal, to destroy that government. Should this greatest of all remedies be applied to the sick body of the world, it will assuredly recover from its ills and will remain eternally safe and secure."&lt;br /&gt;&lt;br /&gt;`Abdu'l-Bahá, The Secret of Divine Civilization. Trans. Marzieh Gail. (Wilmette, Ill.: Bahá'í Publishing Trust. 1957.) pp. 64-65.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3597375491721734?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3597375491721734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3597375491721734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3597375491721734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3597375491721734'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/08/its-time-for-rule-of-law.html' title='It&apos;s time for the rule of law...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8493465845934173476</id><published>2008-07-01T07:09:00.000-07:00</published><updated>2008-07-01T07:14:54.015-07:00</updated><title type='text'>Then They Came for the Bahai</title><content type='html'>This is very &lt;a href="http://www.forward.com/articles/13602/"&gt;moving article&lt;/a&gt; from The Jewish Daily Forward. A graciously candid acknowledgment of the long-suffering of the heavily oppressed Baha'i community in Iran by a member of a religious community which faces its own cruel burden there as elsewhere.&lt;br /&gt;&lt;br /&gt;As far as the last sentence of the article, Baha'is do advocate on their own behalf, but as we are to abide by laws of our country which do not compromise serious spiritual principles (e.g., during the Nazi regime in Germany, or apartheid in South Africa, the Baha'i administration disbanded, but Baha'is would not renounce the unity of all races), there is little recourse for the Baha'is in Iran. However, Baha'i institutions abroad and at the United Nations certainly do seek to appeal on behalf of our long-suffering community in Iran, and the efforts have certainly led to the curbing of open violence such as death sentences which occurred at the beginning of the regime.&lt;br /&gt;&lt;br /&gt;But it is true Baha'is do not take up arms in retaliation or become involved in religious conflict, for as Baha'u'llah wrote in His Tablet of Bisharat (Glad-Tidings):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The first Glad-Tidings which the Mother Book hath, in this Most Great Revelation, imparted unto all the peoples of the world is that the law of holy war hath been blotted out from the Book&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8493465845934173476?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.forward.com/articles/13602/' title='Then They Came for the Bahai'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8493465845934173476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8493465845934173476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8493465845934173476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8493465845934173476'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/07/then-they-came-for-bahai.html' title='Then They Came for the Bahai'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-6932793614646682915</id><published>2008-06-12T03:41:00.001-07:00</published><updated>2008-06-28T04:07:12.925-07:00</updated><title type='text'>Chinese Artists, Tian Zhen (田震), etc.</title><content type='html'>Chinese I have met as a teacher often ask what my favorite Chinese songs are. Besides having an interest in traditional music (I like the sound of Henan opera), as far as popular music, I have not come across many artists that I like, partly because of a lack of exposure, partly because of a lack of my ability to identify the artists I like to find out more about, and partly because of what seems to be a large focus on pop music in the country. I do like some pop music, and there are some good songs. "Zui langmande shi" (The Most Romantic Thing" is a very, very sweet song about how growing old together is just that (the most romantic thing--not growing old!)--Chinese have sweetness and/or subtlety down to an art form (or many). There are other catchy tunes like "Zou ba" (let's go), and a whole lot of other things I enjoy when I hear. There's a hip hop artist Jay Chou who has some songs that I think could be popular with Western hip hop fans (I believe Wyclef Jean praised/worked with Jay Chou for something or other). Very artful.&lt;br /&gt;&lt;br /&gt;However, this is often not the general style of music that I like to just keep on as I'm working--usually light rock I guess. One artist I do highly and consistently enjoy though (and which inspired the post) is &lt;a href="http://global.yesasia.com/en/artIdxDept.aspx/section-music/code-c/version-all/aid-11341/"&gt;Tian Zhen (田震)&lt;/a&gt;. This is a very versatile artist. Lots of interesting instrumental sounds, and such a captivating voice, that when I heard her singing on television once, I had to ask my wife to buy it for me (the song, not the tv). As with most artists, there are certain songs I like better, but overall, this is an artist in a true sense, and most of whose music I can just let run...&lt;br /&gt;&lt;br /&gt;And while I'm highlighting Chinese arts, there is a television series which, from what I could understand of it at least, really deserved some serious awards and must be translated into English. "Chang hui jia kan kan". The title means "Come home often and visit" and features a lightly soul-wrenching (don't know how else to describe it) song from a mother wishing her son to come home often and visit. It has a very professional cast, extremely sensitive, and also some great humor, especially from an Academy-award-worthy actor playing a mentally challenged adult. (Though Academy Awards might not be the standard to shoot for.)&lt;br /&gt;&lt;br /&gt;Either Chinese need to be bolder, I think, in recognizing there must be at least some market out there in the West for their often touching/sensitive arts (not just the crappy ones that mainstream audiences in the West often esteem--shiver) or some Westerners have to pick up and work to import some of this stuff. The show above was not available in English, as are many other well-produced programs. When is globalization going to be more of a 2-way street? Hopefully someone after surfing through the Crime fictions on TV, the Crime forensic science programs, the crime news, and the Court channels in the U.S. will be inspired to provide a different dose of reality; one which is both good for you but also is very artfully done.  (This is not to say there are not violent programs here, btw (usually only with rare violence though)--there actually seems to be some things like real bloodiness, wife slapping, etc. which is rightfully not shown as commonly on regular TV in the U.S., but it is more rare and usually part of a more broad program.)&lt;br /&gt;&lt;br /&gt;Brett&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-6932793614646682915?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://global.yesasia.com/en/artIdxDept.aspx/section-music/code-c/version-all/aid-11341/' title='Chinese Artists, Tian Zhen (田震), etc.'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/6932793614646682915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=6932793614646682915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6932793614646682915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6932793614646682915'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/06/tian-zhen.html' title='Chinese Artists, Tian Zhen (田震), etc.'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-786135948474573407</id><published>2008-05-27T08:17:00.000-07:00</published><updated>2008-05-27T08:19:31.552-07:00</updated><title type='text'>From the Baha'i World News Service</title><content type='html'>&lt;h1&gt;Iranian Baha’i leaders being held incommunicado; growing concern for their fate&lt;/h1&gt;&lt;br /&gt;   &lt;span class="date"&gt;27 May 2008&lt;/span&gt;&lt;br /&gt;        &lt;br /&gt;  &lt;p&gt;&lt;span class="dateline_city"&gt;NEW YORK, &lt;/span&gt; &amp;mdash; &lt;/span&gt;Six Baha’i leaders who were arrested nearly two weeks ago are being held incommunicado, without access to lawyers or relatives, and the Baha’i International Community is increasingly concerned about their fate.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;“Although initial reports indicated they were taken to Evin prison, in fact we don’t know where they are, and we are extremely concerned,” said Bani Dugal, the principal representative of the Baha’i International Community to the United Nations.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“What is clear is that none of their fundamental rights are being upheld. They have had no access to family members or counsel. We don’t even know if they have been before a judge or whether they have been formally charged.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“All we know is what a government spokesperson said last week, which is that they were arrested for ‘security reasons,’ a charge that is utterly baseless.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“We appeal to the international community, human rights groups, and people of conscience, as well as the news media, to continue their efforts to press the Iranian government so that the rights of these people as detainees be upheld and that they be allowed access to counsel and general communication with the outside -- as a minimum step,” said Ms. Dugal.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The six, all members of the national-level group that helped see to the minimum needs of Baha’is in Iran, were arrested on 14 May 2008 in an early morning sweep that is ominously similar to episodes in the 1980s when scores of Iranian Baha’i leaders were rounded up and killed.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;A seventh member of the national coordinating group was arrested in early March in Mashhad after being summoned by the Ministry of Intelligence office there.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The whereabouts of none of the seven are known, said Ms. Dugal. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;“We understood that the six were taken to Evin prison -- the seventh remaining in Mashhad -- principally because some of the government agents who arrested the six on the 14th had documents indicating they would be taken to that notorious place,” she said.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“However, in light of the fact that relatives have made repeated attempts to learn more about the fate of the seven, and in all cases have been met with evasion and conflicting stories from government officials, we must now say that we don’t know where they are -- and that our level of concern for their fate is at the highest,” Ms. Dugal said. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Arrested on 14 May were: Mrs. Fariba Kamalabadi, Mr. Jamaloddin Khanjani, Mr. Afif Naeimi, Mr. Saeid Rezaie, Mr. Behrouz Tavakkoli, and Mr. Vahid Tizfahm. All live in Tehran. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Arrested in Mashhad on 5 March was Mrs. Mahvash Sabet, who also resides in Tehran. Mrs. Sabet was summoned to Mashhad by the Ministry of Intelligence, ostensibly on the grounds that she was required to answer questions related to the burial of an individual in the Baha’i cemetery in that city.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Last week, Iranian government spokesman Gholam-Hossein Elham gave a press conference at which he acknowledged the arrest and imprisonment of the six. News reports quoted Mr. Elham as saying on 20 May that the six were arrested for “security issues” and not because of their religious beliefs. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Those assertions -- the only public statement by the government about the arrests -- were immediately rebutted by Ms. Dugal.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;“The group of Baha’is arrested last week, like the thousands of Baha’is who since 1979 have been killed, imprisoned, or otherwise oppressed, are being persecuted solely because of their religious beliefs,” Ms. Dugal said on 21 May.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-786135948474573407?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.bahai.org/story/635' title='From the Baha&apos;i World News Service'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/786135948474573407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=786135948474573407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/786135948474573407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/786135948474573407'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/from-bahai-world-news-service.html' title='From the Baha&apos;i World News Service'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-6190807386058036035</id><published>2008-05-22T13:06:00.000-07:00</published><updated>2008-05-22T13:09:42.442-07:00</updated><title type='text'>A longing...</title><content type='html'>God give us strength, courage, and wisdom to discuss race and religion...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-6190807386058036035?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/6190807386058036035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=6190807386058036035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6190807386058036035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/6190807386058036035'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/longing.html' title='A longing...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-26956122104382568</id><published>2008-05-20T05:50:00.000-07:00</published><updated>2008-05-20T06:25:56.200-07:00</updated><title type='text'>Open is not just for code anymore</title><content type='html'>Ok, I know this is not really a new thing, but my discovery of it for myself is recent. &lt;br /&gt;&lt;br /&gt;I really like these two artists (haven't tried too many so far). This site seems to have a nice selection and interface.&lt;br /&gt;&lt;br /&gt;First is Josh Woodward's &lt;a href="http://www.jamendo.com/en/album/23755"&gt;The Simple Life&lt;/a&gt;. This is mostly pop-folk which could easily be on commercial radio, yet this individual has generously put it under a non-commercial license which even allows derivative works. A nice selection of songs. "Memorized", "Afterglow", and "Go" could surely become hits, "Shadows in the Moonlight" has a pleasant retro feel. "The Mission" and "Me and Billy Barnum" provide other genres. The songs are well-produced yet keep some nice idiosyncrasies. Some songs remind me of REM.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.jamendo.com/en/artist/Pierre_Lacroix"&gt;Pierre Lacroix&lt;/a&gt;'s work is under a non-commercial license as well, and has some really nifty mellow pieces, a few of which sound like the Beatles: "On the Road Again" on the Sunshine album is interesting. "Nobody Care" on his album "The River" is also a memorable one. Some have the feel of Bob Dylan, and there are mellow instrumentals. Across his albums (I downloaded all I think) here are a few songs that I didn't care too much for (maybe 20%), but overall there are some really enjoyable songs. The production sounds like it was recorded in the early-mid 1900's like it was playing on an old radio, yet it seems to work for the music. The music is not overproduced, and in a few cases, I think is underproduced.&lt;br /&gt;&lt;br /&gt;Others can surely give better synopses and commentary, but I just enjoyed them enough to plug them a little...&lt;br /&gt;&lt;br /&gt;I really dig this open music phenomenon and hope it will challenge the status quo way of doing things.&lt;br /&gt;&lt;br /&gt;Love to hear my bud Caleb's thoughts on this... You have any music you'd release this way? I hear Nine Inch Nails and a few other mainstream artists are trying this out a little (for a few of their songs in the hope people may go and buy others). A Brazilian musician (and the culture minister) who is a proponent of and is releasing his music under "copyleft" licenses was an interesting person to read about.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-26956122104382568?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.jamendo.com/' title='Open is not just for code anymore'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/26956122104382568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=26956122104382568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/26956122104382568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/26956122104382568'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/open-is-not-just-for-code-anymore.html' title='Open is not just for code anymore'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3494173859723931552</id><published>2008-05-19T18:20:00.000-07:00</published><updated>2008-05-19T18:57:13.398-07:00</updated><title type='text'>Some rationales behind Visa restrictions</title><content type='html'>Ok, I'm not quite as exasperated as before. I talked to a woman at the consulate who was extremely helpful in answering my questions and being genuinely empathic (though I'm unfortunately still stuck in the same position as before) and restoring some faith in the sanity of the system (though certainly not the people who burden the system).&lt;br /&gt;&lt;br /&gt;1) I asked her whether "green card marriages" (her word) were significant enough that some laxness could not occur for the sake of those of us who honestly just want to visit, our relatives and she replied to the effect that there were in fact quite a large portion (relative to the total fraud?) as such marriages. She also mentioned how human smuggling/trafficking (man is that heinously despicable) is particularly prominent in the provinces served by that consulate (I guess for those who are deceived to voluntarily visit, because they must apply for the interview themselves and unaccompanied...) as well as a very high number of general visa fraud mixed in with the high volume of people seeking visitor visas (though I still believe a U.S. citizen ought to get some kind of special hearing, both because we are citizens and because the numbers are less--I think ideally tourist visa interviews could allow a U.S. citizen spouse to attend).&lt;br /&gt;&lt;br /&gt;2) The reason she said visiting is restricted, even though we are married, while immigration is not, is because the standard is lower for those who visit the U.S. and then apply for immigration there (apparently since the authorities are overtaxed in the U.S.). Those expressly intending to immigrate from abroad have to prove stronger financial support, etc. (though again, I don't think we should need to apply for immigration with its requirement of a return visit each year, the need for her to file taxes, etc.).&lt;br /&gt;&lt;br /&gt;3) The visa application process is up to an individual's decision for visitor visas, but the immigration process is governed more specifically by certain laws.&lt;br /&gt;&lt;br /&gt;Anyways, this still leaves those couples or individual spouses who don't wish or aren't able to go back to visit the U.S. every year (or have the hassle of filing income taxes), in a very nasty position. I guess the lesson is, if you actually dare to get married to the person you love who is a foreign national, be sure to have lots of money to be able to travel back-and-forth for the sake of satisfying the bureaucracy.  Ok, that's my bitterness talking, and while I should view this as just an accidental unfixed problem, and whereas I really should be more upset about the diseased monsters who exploit the innocent and thereby create this situation for the rest of us, about the need for poverty alleviation and development programs to curb the demand for immigration, and about the lack of scruples which characterize those who would deceive their own or another government, but I still hope some way can be found to make things fair for those of us who are innocent of all of this. C'mon, a wife can't visit her husband's family?&lt;br /&gt;&lt;br /&gt;I am glad for one thing though... At least I can see now that the system itself has some rationale reason why they are forced to put up some barriers, even if I think a better way needs to be provided for the innocent to get around them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3494173859723931552?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3494173859723931552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3494173859723931552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3494173859723931552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3494173859723931552'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/some-rationales-behind-visa.html' title='Some rationales behind Visa restrictions'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8254173216516657840</id><published>2008-05-15T15:44:00.000-07:00</published><updated>2008-05-15T15:56:30.309-07:00</updated><title type='text'>Six Bahá'í leaders arrested in Iran; pattern matches deadly sweeps of early 1980s</title><content type='html'>This is a very disturbing development.&lt;br /&gt;&lt;br /&gt;One would think that the detainment of the top national leaders of the largest religious minority in Iran, a country under high scrutiny now ought to garner headlines, yet given that that religious minority doesn't engage in heinous suicide bombings or other violent tactics (despite the &lt;a href="http://www.bahai.org/persecution/iran"&gt;cruel attacks&lt;/a&gt; leagued against it since its inception), if recent experience is any guide, I guess it just won't be saucy enough for the media.... &lt;br /&gt;&lt;br /&gt;I hope someone will prove me wrong...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8254173216516657840?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://news.bahai.org/story/632' title='Six Bahá&apos;í leaders arrested in Iran; pattern matches deadly sweeps of early 1980s'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8254173216516657840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8254173216516657840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8254173216516657840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8254173216516657840'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/six-bah-leaders-arrested-in-iran.html' title='Six Bahá&apos;í leaders arrested in Iran; pattern matches deadly sweeps of early 1980s'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-4004976919731793087</id><published>2008-05-15T06:37:00.000-07:00</published><updated>2008-05-15T07:33:14.597-07:00</updated><title type='text'>An International Family Contemplating International Problems on the International Day of Families</title><content type='html'>Did you realize that if you get married to a woman you love from another country and decide you want to live abroad, that you will not necessarily be able to bring her back with you for a visit, to say meet your own parents??&lt;br /&gt;&lt;br /&gt;I am a U.S. citizen and have been my whole life. Neither my wife or I have or are working in any sensitive position, we've never been convicted of a crime, and yet I can't take my own wife home for a visit?&lt;br /&gt;&lt;br /&gt;The irony of ironies is that if she wanted to emigrate to the U.S., there would be no problem. But they told my wife that due to her relative youth (in her mid-twenties), etc. she was considered a flight risk! If we immigrate, it is ok, but if we go for a short visit to visit my parents, she's a flight risk??&lt;br /&gt;&lt;br /&gt;Please, someone, help me understand this!!!&lt;br /&gt;&lt;br /&gt;I can't appeal for her (she has to apply herself for a mere visit, and her English is just fine, even though that would be pretty irrelevant if we wanted to visit our parents, I'd say). Do all U.S. citizens in such a position have to resort to appeals to their representatives to TAKE THEIR OWN SPOUSE BACK HOME FOR A VISIT??? She tried this twice no less. By the second time, our home here was in her name, she had a job with an American company, and she is still seen as a flight risk?&lt;br /&gt;&lt;br /&gt;Thankfully, the "Legal Immigration Family Equity Act" allowed people to come into the U.S. as "nonimmigrants" while they applied for immigrant status, but this doesn't help us I have read that one is discouraged from applying for immigration if one does not plan to stay.&lt;br /&gt;&lt;br /&gt;This is not to mention the discouraging instances of rudeness I and my wife respectively encountered at an embassy and consulate respectively, making it hard for my wife or extended family here to get any kind of good impression from the government for which I am otherwise proud to be a citizen.&lt;br /&gt;&lt;br /&gt;What is more basic than a right to marry whom you choose? And what meaning is that right, if you can't share that unity with your own family??&lt;br /&gt;&lt;br /&gt;I was watching a program here in China about a fish farmer who developed his business by going to the U.S., learning something or other, etc. While I'm happy for him, how is it possible that a U.S. citizen cannot come back for a visit with his own wife, but one (and DEFINITELY NOT JUST ONE) with no prior connections to the country, can come freely??  Business--even a small business--from a foreign country trumps a native (U.S.) citizen and his family's rights???? Now, we can apply for our newborn son with no problem, but is that "family friendly" to allow one's son to visit, but not one's spouse?&lt;br /&gt;&lt;br /&gt;Sorry, I am only this exasperated because I believe in the higher ideals espoused by the U.S., and find this situation just inexplicable... Something really needs to change here...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-4004976919731793087?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/4004976919731793087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=4004976919731793087' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4004976919731793087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4004976919731793087'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2008/05/international-family-contemplating.html' title='An International Family Contemplating International Problems on the International Day of Families'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8068561640195341670</id><published>2007-11-12T19:30:00.000-08:00</published><updated>2007-11-12T19:59:01.689-08:00</updated><title type='text'>Maybe just maybe...</title><content type='html'>ADDENDUM TO PREVIOUS POST:&lt;br /&gt;&lt;br /&gt;Maybe just maybe, the huge economic crunch which is facing the U.S., as well as the rest of the world, as it has to make trade-offs between security and even the health of its own citizens (obviously its soldiers, but also the rest of the country) may make us reconsider a certain and very sizable portion of our national budgets--one which any reasonable person would love to get rid of the need of having its expenses in the first place--the military budget. &lt;br /&gt;&lt;br /&gt;I'm not talking about lowering it at the expense of security. But if a just world order is built up, INCLUDING terms for disarmament and monitoring which apply to ALL countries (since that is the only way that legitimacy can ever be given to attempts at limiting disarmament), then security costs will be able to be DRASTICALLY reduced. As countries become confident that their neighbors are not stockpiling weapons, and that they are not being bullied by those who have more than they do, all can agree to such means of disarmament. But to try to do so without a universally multilateral agreement (backed up by the threat of force from all nations) would be like doing a surgery which removed a bullet from someone's vital organ without taking the necessary steps to support the surrounding tissues.&lt;br /&gt;&lt;br /&gt;Despite the fact that war can be an economic motivator and benefit SOME segments of society, wars are at best zero sum-gains where there are winners and losers, and as is more common, prisoners' dilemmas, where both suffer more because of their mutual animosities. The alternative would be the huge peace dividends such as were experienced by the end of the Cold War, only the dividends could be so much larger, and the benefits to scientific development, economic growth, and so on, would be unprecedented. &lt;br /&gt;&lt;br /&gt;Do stockpiled weapons produce any valuable service? Used weapons certainly do not, except in necessary policing pursuits where means of prevention did not exist. But can we not recognize that for a police force to be effective--and in fact be a police force rather than a vigilante group, it must be directed by representatives elected by all those concerned? Just because a vigilante may sometimes bring justice when the government will not or cannot act, does not mean that vigilantism should predominate! So too on the world stage. And just because a few vigilantes (even sometimes rationally-minded ones) get together (read: the Security Council) and agree to police the world, does that constitute real and sustainable justice. It will be only when all districts of the world (where they have a minimal system of development established within themselves such as to respect basic rights) have an equal say in the policing, law-making, and court administration at the global as well as more local levels, that justice can come as a result, and perhaps more importantly in the minds of the entrenched powers, that government can thus successfully assert its necessary authority.  Otherwise, we will continue to have the same lose-lose situation perpetuated into the future...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8068561640195341670?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8068561640195341670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8068561640195341670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8068561640195341670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8068561640195341670'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/11/maybe-just-maybe.html' title='Maybe just maybe...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-2822989967344952931</id><published>2007-11-12T18:17:00.000-08:00</published><updated>2008-09-03T15:41:44.822-07:00</updated><title type='text'>Unitable Nations</title><content type='html'>Imagine the U.S. government running like the way the the U.N. was set up (by, in large, the U.S. itself) to run:&lt;br /&gt;&lt;br /&gt;1) The Presidency, while being extended to more than one party (let's say New York, California, Florida, and Illinois), could never have its veto overridden by the Congress. Not only that, but each of those states would have such a veto, so if say New York didn't like some law, it could never become a law. They would also be able to negate any court decision as well (even though they could avoid agreeing to the courts deciding on an issue affecting them in the first place).&lt;br /&gt;2) There would be no House of Representatives--only a Senate. So, Rhode Island would have the same number of votes as the much more populous California. Actually, it'd be in some cases, more like a few small towns having a vote, and big states also having only one vote. For example, in the U.N. General Assembly, India, with 1 billion plus people has one vote, and the island nation of Tuvalu (of about 10,000 people) also has one vote: a 100,000 times difference. No offense to my friends from the good island of Tuvalu, but it's a bit of a stretch to say that the importance of representing the interests of smaller states should be at a scale of one to 100,000 (not that this is anything compared to the absolute veto power mentioned above).&lt;br /&gt;3) The Supreme Court could not have cases taken to it by individuals, but only by states, and then only if both states agreed to follow the decision! Otherwise, the states could do as they like to resolve the issue, such as by fighting each other.&lt;br /&gt;&lt;br /&gt;Of course, this imbalance DOES reflect a much older historical reality: the Articles of Confederation, which you may recall reading about in high school--the weak and ineffectual predecessor to the stronger and present-day U.S. Constitution. This model didn't work to buttress the new nation against the British, and it didn't work for the Confederacy which also patterned its government on such an extremely decentralized system, and as a result, contributed to its demise (albeit thankfully).&lt;br /&gt;&lt;br /&gt;The similarities to the present situation at the U.N. also extend to a later period of U.S. history where "states' rights" were (still) used on unjust pretenses to justify non-interference from the higher union in defense of minority peoples. And, as with the prior historical issue of unrepresented blacks in America, at the U.N. are represented countries who do not fully (if at all) represent the people they govern--and yet they can vote in the General Assembly (World Congress) as if they do represent their people (and in some cases, the government only represents a minority).&lt;br /&gt;&lt;br /&gt;I have read that when the president of the Philippines at the time of the formation of the U.N. objected to the absolute veto of the Security Council members, that he was told by the U.S. official that if there were no veto, there would be no United Nations. Beautifully--and effectually--democratic, eh? Gee, I wonder why other nations peoples' don't universally love our foreign policy... Shall we say hypocrisy? (Ok, to be fair, the claim is only "land of the free", it never had been "land extending freedoms to other lands when having collective relationships with them", but with all the talk of spreading democracy, one might think it ought to include ourselves in relation to other countries as well as encouraging it within countries.)&lt;br /&gt;&lt;br /&gt;This is not to blame us in the U.S. fully, as some of the other problems mentioned above would need to be resolved for the U.S. to legitimately agree to submit itself to a higher authority (such as it has most historically done within the World Trade Organization)--just as certain security issues would need to be resolved were it (or any other country) to agree to disarmament (another hypocrisy issue which a non-respecter of human rights country like Iran has, sadly legitimately, been able to thumb in our faces). For example, the U.S., as a quite populous country (seconded and thirded only by China and India), wouldn't appreciate having only one vote in the General Assembly (i.e., the World Congress), if the U.S. were to have the insight to recognize that it, along with the other Security Council veto wielders, must forgo (or at least curb) its absolute veto power. Nor would it appreciate (understandably so) being put on a level playing field with countries which did not have basic human rights standards such as free and open elections. But this should indicate that these issues must all be simultaneously addressed in order for the organism which is the U.N. to find balance and to become effectual in handling the problems which the U.S. cannot handle alone.&lt;br /&gt;&lt;br /&gt;I hope in the future, that peoples of the U.S. and elsewhere around the world recognize that it is in fact in their self-interest to have a stronger (though admittedly not overly strong) United Nations, albeit one which is comprised of civilized members with whom unity is possible (just as the European Union has been selective in its membership, and as a result, stimulated important reforms in would-be members), just as it is in our interest to have a strong, though not overly strong, federal government within our country. I find it deplorable that it is actually illegal (though non-punishable) to display the United Nations flag above the U.S. flag in America, even though, by any reasonable moral standard, the will of the world ought to outweigh the will of one country (granted, the law was probably more intended to discourage people from displaying another COUNTRY's flag above the U.S. flag, but the case of the U.N. ought to be different, in my opinion). &lt;br /&gt;&lt;br /&gt;But, I believe wiser generations of Americans will, in the future, lament our slowness to adopt such an understanding and recognize it was not only idealistic to do so, but also pragmatic. We can't police the world alone--BUT--the world does in fact need some real policing! If your crazy neighbor starts stockpiling grenades, AK-47s and starts building a tank, you might feel this is an inherently agitating situation which calls for some police intervention. Otherwise, other neighbors might stark stockpiling, and then there is a dangerous unsustainable situation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-2822989967344952931?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/2822989967344952931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=2822989967344952931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2822989967344952931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2822989967344952931'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/11/unitable-nations.html' title='Unitable Nations'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3484470133182918688</id><published>2007-09-25T20:21:00.000-07:00</published><updated>2007-09-25T21:40:06.761-07:00</updated><title type='text'>XQuery</title><content type='html'>Wow, is XQuery cool... I'm looking now at making sites I run to be more &lt;a href="http://www.w3.org/TR/WAI-WEBCONTENT/"&gt;accessibility friendly&lt;/a&gt; and I wanted to extract all of the official checkpoints so that I could reorganize them in a way which I feel would be more useful to developers (more by type, e.g., having all relevant concerns grouped under "language", "images", "forms", "tables", etc.). While regular expressions might have done the trick (another technology which should be taught to high school students, along with XQuery, imho), I liked the greater predictability of working with XQuery.&lt;br /&gt;&lt;br /&gt;With my &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5515"&gt;XqUSEme Firefox extension&lt;/a&gt;, I was able to XQuery the current window in Firefox (i.e., the accessibility page) and perform the following pretty straightforward query (if you know XPath) to get the results:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;lt;html&gt;&amp;lt;body&gt; {&lt;br /&gt;for $dt in doc('XQuseMeContainer.dbxml/mytest.xml')//dt[@class='checkpoint'] &lt;br /&gt;let $url := 'http://www.w3.org/TR/WAI-WEBCONTENT/'&lt;br /&gt;return &amp;lt;p&gt;&amp;lt;a href="{$url}#{$dt/span[@class='checkpoint']/a/@name}"&gt;{$dt/span[@class='checkpoint']/a/string()}&amp;lt;/a&gt; {$dt/text()}&lt;/p&gt; } &amp;lt;/body&gt;&amp;lt;/html&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;which returned results such as this:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.w3.org/TR/WAI-WEBCONTENT/#tech-table-summaries"&gt;5.5&lt;/a&gt;  Provide summaries for tables.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.w3.org/TR/WAI-WEBCONTENT/#tech-abbreviate-labels"&gt;5.6&lt;/a&gt;  Provide abbreviations for header labels.  &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.w3.org/TR/WAI-WEBCONTENT/#tech-order-style-sheets"&gt;6.1&lt;/a&gt;  Organize documents so they may be read without style sheets.  For example, when an HTML document is rendered without associated style sheets, it must still be possible to read the document.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Pretty neat...&lt;br /&gt;&lt;br /&gt;addendum: Well, I see the above XQuery is a little too simplistic. While the text() node test does avoid the link I didn't want to copy, it also manages to fail to grab the inner text of some other elements such as &amp;lt;em&gt; which I did want to grab. I suppose I should just use string() and use regexp to remove the preceding numbers or investigate whether XPath 2.0 can deal better with text nodes and then apply that... Anyways, it's all still cool...&lt;br /&gt;&lt;br /&gt;addendum2: Looks like I should have researched more carefully. There already is an official page with the items organized by element type: &lt;a href="http://www.w3.org/TR/WCAG10-HTML-TECHS/"&gt;http://www.w3.org/TR/WCAG10-HTML-TECHS/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3484470133182918688?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3484470133182918688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3484470133182918688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3484470133182918688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3484470133182918688'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/09/xquery.html' title='XQuery'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-3245757744029763236</id><published>2007-09-25T12:25:00.000-07:00</published><updated>2007-09-25T13:10:43.710-07:00</updated><title type='text'>Incredible Media Vacuum</title><content type='html'>Hello all,&lt;br /&gt;&lt;br /&gt;Just wanted to point out what I feel is an absolutely stunning silence on the part of the media and academics regarding the plight of the Baha'is in Iran (well, given the Rwanda coverage during the genocide, it shouldn't be so stunning, but still...). You'd think that the focus on Iran might draw to light some of the &lt;a href="http://bahai.org/persecution/iran"&gt;reprehensible&lt;/a&gt; yet oh-so-skillfully-duplicitous dealings of the government of Iran with the law-abiding Baha'is there.&lt;br /&gt;&lt;br /&gt;I noticed that in the recent Columbia address, the president of the university did raise the issue of the treatment of Baha'is (just one time, but &lt;a href="http://www.azstarnet.com/sn/hourlyupdate/202820.php"&gt;toward the beginning&lt;/a&gt; as he referred to him as exhibiting "all the signs of a petty and cruel dictator"), yet this systematic campaign of repression (I'm not exaggerating here--there was an &lt;a href="http://question.bahai.org/002_2.php"&gt;actual blueprint&lt;/a&gt; of plans (see also &lt;a href="http://question.bahai.org/002.php"&gt;this background&lt;/a&gt;) for repression leaked to the U.N., not to mention the constant and tragic evidence), doesn't even get a blip of coverage. While it may not be constant killings (the killings of Baha'is in the early 1980's weren't very good for international relations), you'd think that &lt;a href="http://bahai.org/persecution/newsreleases/02-11-06"&gt;secret orders by the military&lt;/a&gt; to monitor all Baha'is, the largest religious minority in the country, might get a little more press or a &lt;a href="http://news.bahai.org/story/575"&gt;leaked memo&lt;/a&gt; to expel any Baha'is from universities. This is not to speak of the &lt;a href="http://www.bahai.org/persecution/iran/update"&gt;other abuses&lt;/a&gt; such as denial of pensions, the confiscation of properties, the destruction of holy sites and Baha'i cemeteries, arbitrary detentions, propagandized media hatred, intimidation of children, denial of jobs, and other calculated measures to weaken the community there. When the issue is raised, Iran will post some lies or do some double-talk, and it seems to quell interest in the subject.&lt;br /&gt;&lt;br /&gt;Some might assume this is some political rivalry between obscure factions and dismiss it as such, but look at the &lt;a href="http://news.bahai.org/story/577"&gt;recent letter&lt;/a&gt; of the international governing body of the Baha'i Faith to Iranian students there. They write "With an illumined conscience, with a world-embracing vision, with no partisan political agenda, and with due regard for law and order, strive for the regeneration of your country. By your deeds and services, attract the hearts of those around you, even win the esteem of your avowed enemies". Baha'is also live in countries around the world and is, according to the Encyclopedia Brittanica, the most widespread religion in the world after Christianity in terms of geographic distribution. Hardly an obscure and narrow sect either--though even if it were, the outrages against the community deserve, I would say, quite a bit more attention than they are presently getting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-3245757744029763236?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/3245757744029763236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=3245757744029763236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3245757744029763236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/3245757744029763236'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/09/incredible-media-vacuum.html' title='Incredible Media Vacuum'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-540811159635954729</id><published>2007-09-25T11:59:00.001-07:00</published><updated>2007-09-25T12:24:33.838-07:00</updated><title type='text'>Milk</title><content type='html'>Strange observation...&lt;br /&gt;&lt;br /&gt;I can consistently give myself nightmares by drinking milk or eating ice cream at night.&lt;br /&gt;&lt;br /&gt;Since paying attention to this phenomenon, I've also discovered that I have slightly more paranoid tendencies when I drink milk. No, I don't mean hearing voices, believing helicopters are going to get me, or anything like that... But I do notice I am more prone to suspiciousness, etc.&lt;br /&gt;&lt;br /&gt;This is really interesting to me. While I must admit, this could have some idiosyncratic connection, this really has me wondering about paranoia in cultures, etc.  I swear, after waking up, I felt like I'd be able to write horror films (though God forbid I'd ever want to).&lt;br /&gt;&lt;br /&gt;Food for thought... (especially since milk is, as they say, a food)&lt;br /&gt;&lt;br /&gt;In searching the net to see if there were any known medical connection between the two, I came across this article (which doesn't refer to my supposed connection) which I thought was interesting: &lt;a href="http://www.vegsource.com/attwood/milk.htm"&gt;http://www.vegsource.com/attwood/milk.htm&lt;/a&gt;. I then went to the &lt;a href="http://en.wikipedia.org/wiki/Milk"&gt;Wikipedia article on milk&lt;/a&gt; and was disappointed to find something which read, in parts, like a milk brochure from some dairy farmer's association--which then made me think of &lt;a href="http://wikiscanner.virgil.gr/"&gt;Wikiscanner&lt;/a&gt;, the fascinating project to identify the source of Wikipedia edits -- see also &lt;a href="http://www.maltastar.com/pages/msFullArt.asp?an=14323"&gt;http://www.maltastar.com/pages/msFullArt.asp?an=14323&lt;/a&gt; and for ongoing examples, see &lt;a href="http://wired.reddit.com/wikidgame/"&gt;http://wired.reddit.com/wikidgame/&lt;/a&gt; ) and I wondered whether the dairy industry was editing the milk page. Then again, maybe this is a paranoid delusion brought on by the milk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-540811159635954729?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/540811159635954729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=540811159635954729' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/540811159635954729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/540811159635954729'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/09/milk.html' title='Milk'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-8930836807000648664</id><published>2007-09-04T17:34:00.000-07:00</published><updated>2007-09-04T18:30:03.268-07:00</updated><title type='text'>Pride and Medicine</title><content type='html'>I recently had some bad headaches. I never get headaches, but this headache was not so localized so that I could even tell for sure it was a headache. Then I finally took some Tylenol, and I marveled at the wonders of Western medicine (I'm living in China).&lt;br /&gt;&lt;br /&gt;I've also been having problems sleeping. I am easily provoked to lose sleep by caffeine, even if I have some during the daytime, but this time I hadn't had any. Well, actually, I had one chocolate ice cream cone one of the nights, so when I started to suspect some medicine I was taking (I didn't suspect it before as I didn't see it as "serious" medicine, as it was just for some heartburn), I decided to try taking it at night before sleep to make sure. (No, I didn't obsess to the point of sleeplessness over the thought of it being a potential cause.) Sure enough, I could not sleep at all, and the headaches returned.&lt;br /&gt;&lt;br /&gt;Small wonder then that when I searched for the side effects of this medicine, that I should find that its potential side effects include insomnia and headaches.&lt;br /&gt;&lt;br /&gt;So, how great is this Western medicine that allows such commercial medicines to be so freely distributed and whereby only strong medicines such as these are researched, whereby such medicines are readily approved and made available and doctors fail to sufficiently warn you of the side effects either due to a fear of inducing 'medical students' disease' (whereby one thinks one has every disease one reads about), or for some financial interest on their part? And why did I have heart-burn in the first place? Could it be caused by yet another flaw in the civilization?&lt;br /&gt;&lt;br /&gt;I can imagine some cold-hearted person blaming me saying "I always read the labels carefully before taking any medicine" or "It's your responsibility" and so on. As a programmer, this reminds me of the arrogance among programmers who scoff at other programmers or users who make mistakes or those who scoff at others who failed to the see the fine print within a contract or license. Good for you, you are so worthy of praise for reading every fine print detail of any product you buy or use and never making mistakes, and we are so unworthy and minimal to fail to find the time to do so.&lt;br /&gt;&lt;br /&gt;Yet, I am also willing to take some blame, but not as much for those reasons. The blame I take is, I think, shared by many. The reason is nationalism/racialism/culturalism. Sound far-fetched? (Actually, the tendency to be cynical against these "soft" issues having any influence is itself a form of a covert pride in one's culture--cynics are worshiped in our society when they are not only often wrong, but themselves perpetrators.) While I may be tempted to look down on people of other countries who have so worshiped their leaders or religious leaders, yet I realize how easily I have been duped to have so much faith in the "system" so as to not only timidly question the cycle of buying medicines to treat conditions caused by other medicines.&lt;br /&gt;&lt;br /&gt;If it were not for a certain news channel which has demonstrated to me beyond a doubt the potential for sickening corruption and propaganda among my fellow national citizens, I might not have come to this realization, at least not with the anger to write about it, so I must be grateful for the rapid decline of this "old world order", as it is necessary toward recognizing the steps needed toward the positive "new world order".&lt;br /&gt;&lt;br /&gt;But we dare not question the system because what alternative do we have?&lt;br /&gt;&lt;br /&gt;Baha'u'llah, the Prophet-Founder of the Baha'i Faith--a religion which began in 19th century Persia holds, I believe, the answer.&lt;br /&gt;&lt;br /&gt;He addressed an enormous array of topics which are only becoming more relevant as time passes.&lt;br /&gt;&lt;br /&gt;While this issue of medicine is only one small part of Baha'u'llah's vast Revelation (sorry if it scares you to hear such words as "Revelation", but it is the only fitting way to describe it), it is significant, and since I brought up medicine, I will mention a little bit.&lt;br /&gt;&lt;br /&gt;In a Tablet to a Physician, Baha'u'llah recommended the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;O God! The Supreme Knower! The Ancient Tongue speaks that which will satisfy the wise in the absence of doctors.&lt;br /&gt;&lt;br /&gt;O People, do not eat except when you are hungry. Do not drink after you have retired to sleep.&lt;br /&gt;&lt;br /&gt;Exercise is good when the stomach is empty; it strengthens the muscles. When the stomach is full it is very harmful.&lt;br /&gt;&lt;br /&gt;Do not neglect medical treatment, when it is necessary, but leave it off when the body is in good condition.&lt;br /&gt;&lt;br /&gt;Do not take nourishment except when (the process of) digestion is completed. Do not swallow until you have thoroughly masticated your food.&lt;br /&gt;&lt;br /&gt;Treat disease first of all through diet, and refrain from medicine. If you can find what you need for healing in a single herb do not use a compound medicine. Leave off medicine when the health is good, and use it in case of necessity.&lt;br /&gt;&lt;br /&gt;If two diametrically opposite foods are put on the table do not mix them. Be content with one of them. Take first the liquid food before partaking of solid food. The taking of food before that which you have already eaten is digested is dangerous....&lt;br /&gt;&lt;br /&gt;When you have eaten walk a little that the food may settle.&lt;br /&gt;&lt;br /&gt;That which is difficult to masticate is forbidden by the wise. Thus the Supreme Pen commands you.&lt;br /&gt;&lt;br /&gt;A light meal in the morning is as a light to the body.&lt;br /&gt;&lt;br /&gt;Avoid all harmful habits: they cause unhappiness in the world.&lt;br /&gt;&lt;br /&gt;Search for the causes of disease. This saying is the conclusion of this utterance.&lt;br /&gt;      (Star of the West, vol. 13, no. 9, December 1922, p. 252)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Much of this would be quite interesting to be correlated with existing research, but much of it is "common sense" which is no longer so common, as we come to believe in the infallibility of our doctors and technology--even while a simple natural life (which does not mean embracing pseudo-science or refraining from medicine entirely) holds so much more promise--especially were science to gear itself in the directions of cures which were more natural. One such avenue recommended by the predecessor of Baha'u'llah (a John-the-Baptist-like Figure, but of an equally high position as Baha'u'llah), the Bab ('Gate' in Persian), recommended that Baha'is advance the study of the science of medicine to the point of being able to heal through foods. (&lt;cite&gt;Selections from the Writings of 'Abdu'l-Baha&lt;/cite&gt;, &lt;a href="http://bahai-library.com/writings/abdulbaha/swab/swaball.html#153"&gt;153&lt;/a&gt;-154). This does not necessarily mean that existing foods can simply be combined together. This may, I might venture, involve specialized techniques for adding more vitamins, etc. within a particular food. But it makes sense to me that food would allow the most reasonable absorption. Maybe one sign of this is my understanding that zinc lozenges works to reduce a cold while taking mere zinc tablets does not have the same effect. Anyhow, I leave that to the experts.&lt;br /&gt;&lt;br /&gt;It is not a necessary evil to be forever complacent with the corporate-sponsored status quo. No, the alternative is not Leftism. It is, I wholeheartedly believe, a turn to Spirituality with Practicality--as embodied in the teachings of the Faith for today, &lt;a href="http://bahai.org"&gt;the Baha'i Faith&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-8930836807000648664?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/8930836807000648664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=8930836807000648664' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8930836807000648664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/8930836807000648664'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/09/pride-and-medicine.html' title='Pride and Medicine'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-7728371725259398358</id><published>2007-08-12T23:17:00.000-07:00</published><updated>2007-08-12T23:35:28.076-07:00</updated><title type='text'>XqUSEme</title><content type='html'>Feel free to leave comments here pertaining to my &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/5515"&gt;XqUSEme&lt;/a&gt; extension for Firefox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-7728371725259398358?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/7728371725259398358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=7728371725259398358' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7728371725259398358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7728371725259398358'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/08/xquseme.html' title='XqUSEme'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-7333725352753065549</id><published>2007-07-31T02:16:00.000-07:00</published><updated>2007-07-31T02:37:00.652-07:00</updated><title type='text'>Tidying a CMS</title><content type='html'>Here are some of the advantages and disadvantages I see of various approaches a CMS might take when attempting to move styles off into separate files including a site-wide stylesheet (in order to provide clean XHTML 1.1+ and CSS code which has no formatting content for the sake of browser caching of reused stylesheets, accessibility (special browsers can ignore stylesheets if external), manipulation of style code (if semantic and separated, it is easier), borrowability of structural code (should have no style information inside), etc.)&lt;br /&gt;&lt;table class="bordered"&gt;&lt;br /&gt;&lt;tr&gt;&lt;th class="bordered"&gt;Situations&lt;/th&gt;&lt;th class="bordered"&gt;Disadvantages&lt;/th&gt;&lt;th class="bordered"&gt;Advantages&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td class="bordered"&gt;Incorporate site-wide stylesheet&lt;/td&gt;&lt;td class="bordered"&gt;Could get to large with all authors' styles&lt;br /&gt;Could lose semantics if automatically encapsulating inline styles&lt;br /&gt;Potential conflict between various author-created classes and complexity of numbering and integrating their inline style classes&lt;/td&gt;&lt;td class="bordered"&gt;Best for caching, site-wide control, accessibility&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td class="bordered"&gt;Page-specific stylesheet&lt;/td&gt;&lt;td class="bordered"&gt;Too many files would need saving (each author's)--but only need to process/save when editing)&lt;br /&gt;Slower to make a PHP-generated CSS file called on each non-cached visit by a different user, though could also save and check for cached file if not user-specifiable style combo (e.g., if letting them type in any old CSS info with a decimal, RGB, etc.&lt;/td&gt;&lt;td class="bordered"&gt;accessibility&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td class="bordered"&gt;Style tag in head&lt;/td&gt;&lt;td class="bordered"&gt;All browsers must  download the code even if they don't handle or want to handle styles (unless server could be made to detect content type request and remove the tag by XPath/XSLT/XQuery!)&lt;/td&gt;&lt;td class="bordered"&gt;Allows indefinite # of combos when user-defined styles are added without requiring extra files for each and garbage collection nor is a script required&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td class="bordered"&gt;Inline style attributes&lt;/td&gt;&lt;td class="bordered"&gt;Deprecated attribute&lt;br /&gt;All browsers must download the code...&lt;br /&gt;Difficulty in ignoring by humans and to a small degree by computers and can't be reused so may get large unless "style=''" smaller than "class='blah'" which is doubtful&lt;/td&gt;&lt;td class="bordered"&gt;Avoids duplication, need for unique id, etc.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Could consolidate via Tidy styles found from Inline -&gt; head -&gt; page-specific (including imported page-specific ones) with no disadvantages as far as semantics (would actually improve), but when going further to -&gt; Site-wide, would be a problem in consolidating.&lt;br /&gt;&lt;br /&gt;As a compromise, document submitter could offer independent or dependent stylesheet for potential reuse site-wide or across some files.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-7333725352753065549?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/7333725352753065549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=7333725352753065549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7333725352753065549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7333725352753065549'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/07/here-are-some-of-advantages-and.html' title='Tidying a CMS'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-4742236821151746003</id><published>2007-07-15T11:32:00.000-07:00</published><updated>2007-07-15T12:16:53.287-07:00</updated><title type='text'>Transformers film</title><content type='html'>Well, I was pleasantly surprised at how good of a film Transformers was. Special effects were mind-blowing, and though prolonged action sequences can get tedious for me in any film, this one did a fine job of combining a human/family storyline, some good subtle and open humor, the charm of the lead actor and nuances of the characters (at least for such a film), and conveying military might in an awe-inspiring way (i.e., it wasn't full of the annoying "You are talking to the President of the United States" kind of bravado, nor do I think it was it glorifying violence, being nationalistic, etc.). By "awe-inspiring", I simply mean that it made you feel humbled by the awesomeness of the technology as it felt so real, and as you could sympathize with the beleagured characters.&lt;br /&gt;&lt;br /&gt;I was expecting a more cheesy plotline and dialogue, but was presently surprised. Yet, it didn't go too overboard in trying to make itself "dark" in the stupid race-to-the-bottom way that so many films, etc. now try to relish and one-up each other (due in large measure to an audience that has acquired such tastes). It thankfully had the original comic kid feel (though a few jokes and attitudes displayed were not suitable for kids or others either, though that is the case for practically every film now) where the good characters were genuinely self-sacrificing, there was a subtle but overt moral tone, etc. This one hit the mark pretty well. And I liked that the potentially-would-be hate-him-bad-guy (played by John Torturro) was not played out so one-dimensionally. And death (except for possibly one small bit) was not something treated lightly, as it so often is.&lt;br /&gt;&lt;br /&gt;The directing was done really well. Even the old governmet-concealing-aliens conspiracy used in the film was conveyed convincingly enough that the usually ridiculous idea felt plausible.&lt;br /&gt;&lt;br /&gt;Both the sound effects and music did the job quite well for me too. The music was more subtle than say that in Star Wars, but it really played your strings well (in a way you might not notice). (On the other hand, there were interesting uses of music in a more overt way, but I'm referring to those used for mid-action dramatic effects.)&lt;br /&gt;&lt;br /&gt;Really quite a technical marvel. I don't think I've left a movie theater in a while and felt like a kid again, in the amount of wonder this produced. Though despite my praise, again, I think it could have done with a little less action.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-4742236821151746003?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/4742236821151746003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=4742236821151746003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4742236821151746003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/4742236821151746003'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/07/transformers-film.html' title='Transformers film'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-7475716079989825322</id><published>2007-06-29T02:45:00.000-07:00</published><updated>2007-06-29T02:50:31.849-07:00</updated><title type='text'>Unicode Converter</title><content type='html'>Please leave any comments here for my Unicode Converter Firefox extension.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-7475716079989825322?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://addons.mozilla.org/en-US/firefox/addon/5235' title='Unicode Converter'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/7475716079989825322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=7475716079989825322' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7475716079989825322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/7475716079989825322'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/06/unicode-converter.html' title='Unicode Converter'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-5622834672827154297</id><published>2007-06-18T18:03:00.000-07:00</published><updated>2007-06-18T18:50:04.635-07:00</updated><title type='text'>The nerve...</title><content type='html'>Wow, I'm really amazed at the nerve of some people. I've heard a few foreigners (yes, we Americans can be foreigners too) here in China talking with impatience about the accuracy of Chinese translations into English... Hello!! This is their own country!&lt;br /&gt;&lt;br /&gt;What would these same people say if common government signs in the U.S. such as on street signs were even shown in Chinese at all?  They'd probably huff-and-puff about the fact that everybody needs to know English...  But to carry on their U.S.-centrism and apply that within other countries? Now that takes gall...&lt;br /&gt;&lt;br /&gt;While I am appreciative of China seeking to bolster their image and economy and in the process make life more convenient for foreigners, these people are independently governed and can choose whatever language or languages or lack of languages on their signs that they like.&lt;br /&gt;&lt;br /&gt;What a contrast in character... You can argue about the motives (boost tourism, etc.), but I find the more tolerant attitudes boil down to the common people too. Many people in China consciously consider that they think life should be made easier for foreigners, whereas in the U.S., they are just expected to fit in without the slightest concern (that I have seen anyway) for how easy it may be (assuming these people are not faced with even more hostile attitudes). On the contrary, you commonly find attitudes in America that it is much harder to find in such a degree elsewhere: abandon any trace of your "ethnicity", "language", etc., and get on board with being the model white citizen.&lt;br /&gt;&lt;br /&gt;Besides, the U.S. could also improve its tourism as well as its international image if its citizens showed a bit more tolerance of others (do you really think cheesy stereotypical roles for Asians, etc. in Hollywood films, etc. are just unnoticed by the rest of the world, for example?)&lt;br /&gt;&lt;br /&gt;Granted, the number of foreigners in China is a lot less, but the whole world could really take a big, big lesson from Chinese hospitality. I don't know how many times I've struggled in vain to pay for a meal here. Can I imagine a common American (at least in the cities; people in the countryside generally have much better manners unless they belong to the also still large bigoted class) paying for the meal of a Chinese visitor to show them extra kindness for the difficulties they face? Oh, that would be something...&lt;br /&gt;&lt;br /&gt;Now, if anyone actually ends up reading this, I can imagine some Americans jumping it with characteristic lack of tolerance for any self-criticism and complaining about this as being anti-American or saying something else predictably arrogant and unwilling to self-examine. Guess you can't say, "If you don't like it here, get out of the country" since I'm already out of the country. :)  That phrase should probably be turned back on them when they complain about policies that allow multilingual signs, etc.&lt;br /&gt;&lt;br /&gt;I should say though that there are indeed many generous-hearted Americans, but for some reasons even many of these seem to be amazingly oblivious to the fact that their fellow compatriots can indeed be selfish to foreigners or minorities.&lt;br /&gt;&lt;br /&gt;Chinese media also has one focus that America does not. Consideration of culture and daily life of people in many other countries. America has its self-absorbed lens and mirror pointed in constant self-obsession back at itself---to a degree which is quite amazing. The only chance to learn about other cultures in America is if it is a hot-dog eating contest in Japan, a human tower of people that tumbles down in Spain, or whatever extreme thing like this that can hold the attention-span of most American TV junkies (which by the way includes the absolutely disgusting and inexplicable obsession with topics revolving around murder and other dark aspects of human nature which are quite rightly held by other culture's as unworthy of such extreme attention).&lt;br /&gt;&lt;br /&gt;Now, such selfishness will only get its own deserts. Ignorance of the world has its costs. The greater moderation and less confrontational attitudes actually, I would say, harbor well for China's economic as well as cultural future. Does China have its own citizens who are so China-centric that they will hurt themselves by so doing, just as Americans hurt our own country by extreme nationalism? Yes, it does. And I hope, for example, that China, as with America and the rest of the world, will agree on a U.N. education platform which includes "world citizenship" as a part of the basic curriculum to cultivate attitudes which both better benefit all on earth but also best address self-interest. But first take the sliver out of your own eye, my fellow Americans... Now if that attitude would prevail ever more in America, we would really have something to be proud of in the world...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-5622834672827154297?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/5622834672827154297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=5622834672827154297' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5622834672827154297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/5622834672827154297'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/06/nerve.html' title='The nerve...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-2733650797158618762</id><published>2007-05-24T04:01:00.000-07:00</published><updated>2007-05-24T04:36:07.885-07:00</updated><title type='text'>XSL Results</title><content type='html'>Feel free to leave comments here to leave me a message about XSL Results (coming soon to allow XSL transformation results to show up in Firefox by attaching an XSL stylesheet (local or URL) to the current page.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-2733650797158618762?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/2733650797158618762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=2733650797158618762' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2733650797158618762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/2733650797158618762'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/05/xsl-results.html' title='XSL Results'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-117547876121496472</id><published>2007-04-01T18:50:00.000-07:00</published><updated>2007-05-24T04:36:36.212-07:00</updated><title type='text'>Firefox extensions</title><content type='html'>Feel free to leave comments here to leave me a message about &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4750"&gt;"Copy Link Text"&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-117547876121496472?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/117547876121496472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=117547876121496472' title='20 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117547876121496472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117547876121496472'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/04/firefox-extensions.html' title='Firefox extensions'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>20</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-117533064799379762</id><published>2007-03-31T02:17:00.000-07:00</published><updated>2007-03-31T02:44:10.286-07:00</updated><title type='text'>Programmability, Dell, Mozilla Add-ons</title><content type='html'>Every menu bar item, context menu item, toolbar (including the tear-off kind), sidebar button, status bar button, hotkey, etc. should be programmable by the user and each one (except where not possible such as with some contextual menu items) should be allowed to be changed into any other type or assignment (e.g., into a different hotkey, from a hotkey to a menu bar item, a context menu item to a hotkey, etc.). &lt;br /&gt;&lt;br /&gt;I'd love to try to have such a tool developed for Firefox, as Firefox can really house almost any kind of application potentially... I'd especially love to see it take off for desktop browsing and file editing...&lt;br /&gt;&lt;br /&gt;There are so many extensions out there that, while they add a useful feature, should ideally already have been doable if the interface allowed itself to be programmed. While it is true a person can write their own extensions with a little programming knowledge, the more power that is brought to the GUI and away from programmers, the better. Of course, people could share their specifics--if I have a contextual menu item that allows you to jump directly to the edit page of a wiki page (the wiki page not having been visited yet but its link being ctrl-clicked on), this would be nice to share and publicize through the interface (as I love that Firefox now allows you to get more Bookmark extensions via the bookmarks menu bar), but it would be ideal if a contextual menu extension let you append any specifiable amount of text to such actions.&lt;br /&gt;&lt;br /&gt;Great news about Dell responding to put Linux on their computers. About time for some real hardware company to do it. Please, powers-that-be, fix the hardware compatibility issues. Hopefully, by such advances, the demand and thus will be hardware manufacturers will be there to make it possible and easy to use any device at least with Linux.&lt;br /&gt;&lt;br /&gt;One small thing bothering me about Mozilla's add-ons site is that, besides the inherent trouble of not having enough categorization options, too many companies' products have made it into their listings. I really dislike having to sift through all of these. It's fine if companies want to offer their add-ons, but I really hope Mozilla will add a category to any extensions which make you depend on registering with some site or using the extension with a particular site, etc. (and then be able to exclude items with this category from view). And rather than just one hodge-podge of categories, it'd be nice not to be limited to such broad conceptual categories like "navigation", and have things show up by identifiable part of the browser--context menu, menu bar, window, sidebar, etc. Granted, many fall across these lines, but it'd be nice to narrow down your choices when you want to find, say, a particular context menu item. &lt;br /&gt;&lt;br /&gt;That's all for now,&lt;br /&gt;Brett&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-117533064799379762?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/117533064799379762/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=117533064799379762' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117533064799379762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117533064799379762'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/03/programmability-dell-mozilla-add-ons.html' title='Programmability, Dell, Mozilla Add-ons'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-117504931466035997</id><published>2007-03-27T19:59:00.000-07:00</published><updated>2007-03-27T20:35:14.680-07:00</updated><title type='text'>Long time no blog</title><content type='html'>Ok, so it's been over a year since I've posted anything...&lt;br /&gt;&lt;br /&gt;Trying to do a brain dump... pardon the lack of an exact or clear organization in the following...&lt;br /&gt;&lt;br /&gt;To my mind, two great open source communities out there are Mozilla and PHP, and very little exists (from what I can tell) to bridge them. The best resource I can find on joining the two in some manner are the various files at this site, such as: http://www.phppatterns.com/docs/develop/xul_to_phpgtk&lt;br /&gt;&lt;br /&gt;But first, here's where my thinking has led me...&lt;br /&gt;&lt;br /&gt;I have wanted to add the feature to Mozilla Thunderbird to have a Mail filter rule which will open a file when the rule is met. This is handy on the Mac such as to be able to open an Applescript which raises up the system volume and announces to you if someone you are waiting on has emailed you, but I'm sure many other uses are out there (even home automation).&lt;br /&gt;&lt;br /&gt;A big deterrent to me for this is that you have to navigate both Mozilla source's large base of Javascript and C++ code (the latter especially being something I'm not too familiar with at the moment). Which got me thinking...&lt;br /&gt;&lt;br /&gt;Why not an open-source PHP/Javascript mail program? Since Yahoo and other mail clients require SSL, I sniffed around on the net and found http://xpertmailer.sourceforge.net/ which I think should be a great foundation for such a project. One could also do the interface using Mozilla widgets, but that would reduce the contributor and user base a bit (but could of course be more powerful than regular HTML--e.g., using it as a Firefox extension with preferences, etc. yet still not require C programming). &lt;br /&gt;&lt;br /&gt;There are so many snobs out there against PHP, but if you really want "open source" to be "open", in my mind, it has to be easy for new developers to join in too, and PHP is that. If people spent half the time that they do complaining about weaknesses they perceive in PHP (besides the inherent differences of PHP like its typing) in improving the language or adding the functionality they seek, I think this would be a much better world.&lt;br /&gt;&lt;br /&gt;Anyhow, while PHP/Ajax-Javascript could work for an email client (Yahoo/Gmail's own interfaces could have uses this combination presumably), it would be a little strange as its own browser (but still doable). Basically, you'd have a browser in a browser (and minimize all the main browser toolbars to have enough screen space to use the browser-in-a-browser. In other words, you could have a text input box to type in your URL (as a location box), and other assorted buttons, etc. to access your preferences, etc.&lt;br /&gt;&lt;br /&gt;Another desirability is just having one language to do everything. Server-side Javascript (even more interesting now with Firefox POW extension) would seem to be a nice advantage.&lt;br /&gt;&lt;br /&gt;Or, at least allow PHP to be one of the languages that work with Mozilla. Why in the world aren't there any bindings yet for PHP to work with XPCOM? How about developing some ideas for having Javascript open PHP files and get their results, or have PHP create Javascript files for Mozilla/Firefox extensions.&lt;br /&gt;&lt;br /&gt;Questions: If PHP can generate XUL, can it be used as an extension (e.g., with preferences, etc.) (with Xajax, there would seem to be more possibilities to the mix).&lt;br /&gt;&lt;br /&gt;And then there is the XUL to PHP-GTK (see the link above). I haven't explored this yet, but this seems very cool in using a nice standard (XUL--though there is no absolute user-interface standard unfortunately--what would it take for the W3C to make one?) for the user interface (albeit only on Mozilla) and be able to use PHP on the client-side. Maybe even a strictly DHTML to PHP-GTK could be done, whereby Javascript widgets would handle things instead of XUL. That would be even more standard and accessible.&lt;br /&gt;&lt;br /&gt;But how to package such software so that it can be distributed easily? Why isn't PHP and MySQL packaged with every computer? I'd love to see it and Berkeley DB XML packaged with every computer and easily turned on so that you could easily distribute apps which leveraged these. As far as Berkeley DB XML, one very cool idea would be for an XPIDL/XPCOM interface to be made for it (e.g., using the C++ API) so that Javascript could be used to query BDBXML.&lt;br /&gt;&lt;br /&gt;Another interesting idea is having a very trusted portal where you could load a URL containing PHP text and then run that code as privileged PHP on your own system. That way, you could always have the most current software, not need to restart the system (e.g., with Firefox extensions) and configuration could be quickly automated.&lt;br /&gt;&lt;br /&gt;Also, I want to see a DHTML IDE with syntax coloring and customizable tag addition (e.g., Smarty) and hierarchical adding of elements (e.g., HTML-&gt;Form-&gt;input) with attributes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-117504931466035997?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/117504931466035997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=117504931466035997' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117504931466035997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/117504931466035997'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2007/03/long-time-no-blog.html' title='Long time no blog'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113440586455806359</id><published>2005-12-12T08:27:00.000-08:00</published><updated>2005-12-12T08:44:30.363-08:00</updated><title type='text'>It was just my imagination, running away with me...</title><content type='html'>When you look at the file browser, a web browser, an email client, or even a blog, message forum, or wiki—in other words, virtually if not all information systems, there are several higher order functions which potentially if not yet actually unite them. Based on these functions, it will be shown that it is possible for one single interface to integrate these in a unified manner, while still allowing for the range of healthy diversity which is possible when the programs are not independent—and in fact expanding this diversity by making more cross-interaction possible between the different “organs” of the digital organism. As in all aspects of life and reality, an ever-widening and perfecting unity-in-diversity is the ideal impulse and aim.&lt;br /&gt;&lt;br /&gt;To take one of these functions for information browsing, creation and storage, we can say that there is a desire to receive information by time/date according to wholly new information (updated information to be discussed later) and to be able to view these items globally (i.e., all together at once) and sequentially (a calendar format is also possibly for all the possible permutations as well, but more perhaps on that later). For email, this is the primary, though not exclusive, means of display. One can see all of one’s email in order (that will fit into the window at least). Thunderbird developers have had the insight to realize that RSS fits this paradigm as well and can be integrated within the same interface (though it can be integrated even further as also discussed later, both among RSS and between RSS and emails). When examining this functionality at the web browser level, one may be tempted to say that this is not relevant. However, upon looking closer, one can see a missing functionality of most if not all browsers (at least as a central feature): the ability to receive in a kind of “inbox” a sequential listing of all subscribed to webpages—those which appear whenever a webpage has been added.&lt;br /&gt;&lt;br /&gt;Of course, there are a plethora of ways in which one may be notified of new information. There can be icon changes, pop-up notifications (local or global), etc. And even in the display of global sequential new information described above, we may wish to resort the list by some other means, add or utilize categories, tie together automatically or manually such as through threads or “paperclips”, and filter the list (by any means imaginable to the developer and user—by message headers, message content, by being marked read or unread, etc.). But it is nice to at least have the basic functionality expressed for each type of content (and to have it integrated together with all common if not all types of content as well).&lt;br /&gt;&lt;br /&gt;To extrapolate ideal features still missing from our “ideal” system, we can also begin with the web browser for ideas. Although there are bookmarks (which are analogous to email folders) and other means of browsing, the most familiar it would seem, is the URL window. In general information terms, this functionality is the ability to type in an absolute location (or relative in the case of URL window shortcuts) to find one’s information. So, why then is this functionality missing from email programs? With a mass of emails and folders to scroll through or perform an imperfect search for, it might be nice to have an auto-complete window (as with the URL window) to go in such a manner to the right email. The analogy could be extended further to think of email bookmarks (for frequently or recently referenced emails), email shortcuts for such a URL-like window (e.g., “wikip 5” could jump to my fifth email in my Wikipedia email folder).&lt;br /&gt;&lt;br /&gt;If I have the time, I would like to elaborate on all of these ideas much more, particularly on the advantages of being able to browse or edit all of one’s content in an integrated fashion (e.g., storing emails, websites, blog entries, etc. in the same categorization scheme). But hopefully such a global, bird’s eye view of development planning could help focus on some really time-saving, power-enhancing innovations, rather than mere tweaking of a babel of imperfections brought about by a lack of a unified (yet flexible and vastly expressive) system.&lt;br /&gt;&lt;br /&gt;Hopefully existing components can be considered for a wider application, and then brought into an integrated framework for viewing, editing, etc. all knowledge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113440586455806359?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113440586455806359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113440586455806359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113440586455806359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113440586455806359'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/12/it-was-just-my-imagination-running.html' title='It was just my imagination, running away with me...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113405889970106457</id><published>2005-12-08T08:20:00.002-08:00</published><updated>2005-12-08T09:10:20.210-08:00</updated><title type='text'>My new blog?</title><content type='html'>I didn't like how this blog does not allow side-by-side diffs as wiki does for each and every change to the blog (I like to reedit old posts, not to mention have the ability to transclude them inside of other, more organized pages.) However, I really like Blogger's template ability. So, I am trying here the best of both worlds. I hope Wikicities will expand to encourage this kind of blogging. It can only help their revenue (and it wouldn't hurt Blogger's either, since I am using AdSense through them, etc.)&lt;br /&gt;&lt;br /&gt;The following shows all changes to my blog entries (actually changes to all Wikicities pages linking to my blog), not only new pages (like RSS usually does--though see Feedster.com and search for "wikicities.com" and "Brettz9" and then get the XML link (if it is working--not apparently working now) and use that as the feed for the below wiki blog (all changes)). &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://wikicities.com/index.php?title=Special:Recentchangeslinked&amp;target=User%3ABrettz9/blog" width="450" height="300"&gt;&lt;br /&gt;If you can see this, your browser doesn't &lt;br /&gt;understand IFRAME.  However, we'll still &lt;br /&gt;&lt;a href="http://wikicities.com/index.php?title=Special:Recentchangeslinked&amp;target=User%3ABrettz9/blog"&gt;link&lt;/a&gt; &lt;br /&gt;you to the file.&lt;br /&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;My main user page at Wikicities is &lt;a href="http://wikicities.com/wiki/User:Brettz9"&gt;here&lt;/a&gt; (includes links to various other items of interest for me), but here is the main page of the blog iteself (a page which transcludes all the entries):&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://wikicities.com/wiki/User:Brettz9/blog" width="450" height="300"&gt;&lt;br /&gt;If you can see this, your browser doesn't &lt;br /&gt;understand IFRAME.  However, we'll still &lt;br /&gt;&lt;a href="http://wikicities.com/wiki/User:Brettz9/blog"&gt;link&lt;/a&gt; &lt;br /&gt;you to the file.&lt;br /&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113405889970106457?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wikicities.com/wiki/User:Brettz9' title='My new blog?'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113405889970106457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113405889970106457' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113405889970106457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113405889970106457'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/12/my-new-blog_08.html' title='My new blog?'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113274262338306672</id><published>2005-11-23T02:35:00.000-08:00</published><updated>2005-11-23T03:25:25.546-08:00</updated><title type='text'>Success - Addendum and Misc. other ideas</title><content type='html'>Although this does not really relate to user-generated comments fields (at least non-public-wiki ones, the concept of adding a user-editable field would be very useful for book authors, I think. They could have an online version (perhaps supported by ads, or much less desirably, with fees) and then allow, in a wiki corresponding to the page in question (which they could view alongside it), notes to further references, suggested corrections, etc. (or a separate wiki for each type of comments which could then be viewable in an additional column or columns). This would be useful especially for time-dependent books such as programming books, in that the person reading the print book could be referred to the website to see updated information, further resources, etc. (optionally viewing only those pages which had wiki information added already) corresponding to the whole book or to a particular passage which seemed incomplete or incorrect. There could even be a discussion forum (or wiki) which allowed the posting of questions to the author pertaining to the section at hand (which would also be viewable, if desired, as an extra column alongside the book, and in addition, separately as an organized discussion forum without the book data). This would really allow (especially those authors who were concerned about giving a good value to their customers and didn't mind responding in a timely fashion) (maybe the questions wiki/discussion forum could be only for those who purchased the book--that would be fair enough)...(The discussion forum could automatically be set to generate pages or subforums according to each book or discussion of a particular paragraph, page, section, and/or chapter/unit.) The license at the wiki/discussion forum could allow the author to use the user-contributed contents in future editions of the print work under particular conditions (e.g., GNU, with pre-definable and/or negotiable compensation to the author, etc.) and allow donations to be made directly to the other contributors by anyone as well, such as if they were helpful in answering the user's questions.&lt;br /&gt;&lt;br /&gt;As an aside, having a link to "donate" to this person's Paypal, etc. account (in any discussion forum--phpBB, for example, as well as in Mediawiki software alongside author's names) would be an ideal option to allow potentially some compensation--without over-monitizing by making it too prominent or required to make everyone guilty if they don't contribute but still allowing for these people who give their effort in such forums to find some compensation if their services are deemed worthwhile--even a defaultable $1.00 or $.50 or whatever might encourage piecemeal donations which could add up).&lt;br /&gt;&lt;br /&gt;On another aside, if revver.com allows compensation for videos, why not wikicities.com or the equivalent sharing profits with the administrator (and, as mentioned above, with contributors--some of whom could be ideally employable through the wiki software) for wikis, an equivalent discussion forum hoster for discussions (discussion forums should allow user-definable infinite subforums to give forums the power of collaboration that wiki has such as having perpetual forums on well-organized topics and subtopics (e.g., for specific paragraphs of a specific book)--but, unlike wiki, without ever letting users destroy posts others have made (or destroy them in the order posted)), or a compensation system for music/audio (probably already is one for the latter--anybody know?)?&lt;br /&gt;&lt;br /&gt;And, with Google ads searching content to determine ads, what about the idea of sophisticated pattern recognition software searching music, voice, or even video for patterns to determine relevant ads (even relevant ads for other music based on the same sound themes!)?&lt;br /&gt;&lt;br /&gt;And while on the topic of pattern recognition, one of the coolest educational inventions of the future I believe will be pattern-recognition goggles (or implants) which will allow one to interact with one's environment--e.g., you are standing in front of a tree, and your goggles identify the type of tree, search Wikipedia (or the web--or a wiki from a particular angle such as one's religion) and give you information to learn more about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113274262338306672?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113274262338306672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113274262338306672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113274262338306672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113274262338306672'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/success-addendum-and-misc-other-ideas.html' title='Success - Addendum and Misc. other ideas'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113274131460298333</id><published>2005-11-23T02:20:00.000-08:00</published><updated>2006-01-04T05:38:47.126-08:00</updated><title type='text'>Success - Part III</title><content type='html'>The following is an implementation of the previous post (please read it for details). You must have followed the directions there in order for the following to work:&lt;br /&gt;&lt;br /&gt;First, choose the website which has (simple) tabular data (in this case, &lt;a href="http://bahai-library.com/browse0.php"&gt;here&lt;/a&gt;). (Note: these files have since moved to http://bahai-library.com/browser/ )&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz009.0.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz009.0.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Second, choose a book (in this case, the Kitab-i-Aqdas, or "Most Holy Book" of the Baha'i Faith, &lt;a href="http://bahai-library.com/browse.php?file=aqdas"&gt;here&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz010.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz010.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Third, add a range of verses (in this case, I have chosen &lt;a href="http://bahai-library.com/browse9.php?blevela1=5&amp;elevela1=10&amp;option0=yes&amp;field0=0&amp;option1=yes&amp;field1=1&amp;field2=2&amp;color2=black&amp;color=%23&amp;bgcolor=white&amp;bgcolor2=%23&amp;font=Times+New+Roman%2C+serif&amp;fontstyle=normal&amp;fontvariant=normal&amp;fontweight=normal&amp;fontsize=&amp;fontstretch=normal&amp;lineheight=normal&amp;headings=n&amp;border=1&amp;arw=200&amp;levels=1&amp;file=aqdas&amp;fields_name1=Paragraph&amp;fields_name2=&amp;fields_name3=&amp;fields_name7=Paragraph&amp;fields_name8=&amp;fields_name9="&gt;verses 5 to 10&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz012.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz012.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fourth, hit enter and then view the results once they load.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz013.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz013.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Fifth, choose the Javascript you have saved from the bookmarks menu.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz014.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz014.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sixth, notice the extra column and cells in this column.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz015.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz015.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Seventh, edit the notes corresponding to each row of the table, being sure to save in each cell one has edited (the corresponding save button too).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz016.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz016.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz017.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz017.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5705/263/1600/FirefoxScreenSnapz018.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5705/263/400/FirefoxScreenSnapz018.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Finally, if you repeat these steps exactly next time, you will see that your notes you have added are still waiting for you.&lt;br /&gt;&lt;br /&gt;Addendum to last blog entry: One may notice that the script does not (cannot?) write out a longer URL than the length showing up...I may need to alter the script to fix this, but in the meantime, one might overwrite one's notes if the beginning of the URL (a lot of it) is the same as another set of notes one tries to set up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113274131460298333?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113274131460298333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113274131460298333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113274131460298333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113274131460298333'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/success-part-iii.html' title='Success - Part III'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113273955295805469</id><published>2005-11-23T00:35:00.000-08:00</published><updated>2005-11-23T02:13:23.983-08:00</updated><title type='text'>Success - Part 2</title><content type='html'>A big disclaimer: What I am about to describe, you have to use this at your own risk. This could compromise the security of your system, so only try this if you are the risky type or know what you're doing. I am also a big novice at all this, so I may also be using very round-a-bout, inefficient, insecure, etc. means to achieve this. I hope others may either direct me to better solutions if there are any (as long as they are sufficiently powerful and sufficiently simple) as well as expand the ideas and implementations. This is mostly a proof-of-concept experiment (with hopefully some interim utility), though I do hope I can gradually make more secure and powerful versions.&lt;br /&gt;&lt;br /&gt;So, continuing from my last post, in order to allow the user the freedom to choose to add notation alongside even specific columns of tabular data (I'm still working on the for-some-reason more difficult task of getting frames to work with having just one column successfully added alongside ANY webpage, with or without tabular data--the files I have been working on are &lt;a href="http://bahai-library.com/zamir/pagetotextbox.js"&gt;here&lt;/a&gt; (the Javascript), &lt;a href="http://bahai-library.com/zamir/basepage.php"&gt;here&lt;/a&gt; (the main PHP processing file) and &lt;a href="http://bahai-library.com/zamir/temp.php"&gt;here&lt;/a&gt; (an additional file I was not sure was necessary or not to facilitate loading of the data into the new frame/iframe), I developed &lt;a href="http://bahai-library.com/zamir/tablestotextboxes.js"&gt;this Javascript&lt;/a&gt; (visit the page then select all to copy the code). This code will not do anything successfully at this point. In this code, you will need to edit it to be able to work on your computer. Find the line "/Users/Brett/Sites/textarea/" in the Javascript above (you can copy the link then edit it in a text editor before pasting it into your bookmarks--it's handy to have on your bookmarks toolbar, if nothin else in a drop-down menu--I use one for all my Javascript bookmarklets) and then replace it with the base folder where you wish your notes to be saved (actually where the folders will be saved where your notes will be stored). You could just replace "Brett" with your user folder's name.&lt;br /&gt;&lt;br /&gt;You will also need to have a number of items installed first for this to work (I have only implemented it on a Mactinosh OS 10.4, using the Firefox browser (see my sidebar to get it)). You will need to have PHP installed (the shareware "PageSpinner" has good instructions on how to do this) and Personal Web Sharing enabled on your computer (in Mac System Preferences under "Sharing"). You will also need to load &lt;a href="http://bahai-library.com/zamir/base.php"&gt;this PHP file&lt;/a&gt; into the directory described above (For testing, you could also try &lt;a href="http://bahai-library.com/zamir/addtextboxestotables2.html"&gt;this file&lt;/a&gt; as it is an HTML file with the Javascript already built in, and has a few more comments about my design of the script).&lt;br /&gt;&lt;br /&gt;Once you have these items in place, you should be able to visit a website with tables (it seems to only work with simple tables... try &lt;a href="http://bahai-library.com/browse0.php"&gt;http://bahai-library.com/browse0.php&lt;/a&gt; and choose a small range of paragraphs from one of the books in the list (e.g., paragraphs 5 to 10 of the Kitab-i-Aqdas) and then run the javascript (called a bookmarklet) you copied and edited by placing it, after you have loaded the page with tabular data, in the URL window and hitting return. This will run the script against the current webpage. It should then add a column to the table with cells at the right-most end of each row which will allow you to store and save notes corresponding to that paragraph.  Just type some notes and save them (for each cell you add data, click the "save" button in its window). They will persist there the next time you run the script on the same URL&lt;br /&gt;&lt;br /&gt;One big disadvantage at this time is that the script only stores a folder for the exact URL (converting slashes into + signs since slashes are not allowed in Mac folder names) and doesn't intelligently sense out the data you are using. For example, if you do another search (let's say paragraphs 3-8 of the same book), it will start a new folder for these notes (since the URL is different for such a browse request), even though you are referring to some of the same contents. So, if you want to see these notes again, you will need to come back to the exact URL. At least this will in fact keep your notes there.&lt;br /&gt;&lt;br /&gt;I do hope to add intelligent storage (e.g., using Javascript with specified wildcards to realize that a slightly different URL will still apply to the same book and then perhaps detect whether the number in the paragraph cell is the same as one already in storage). And as mentioned before, I also hope to create a script to just add one simple large textbox which could appear alongside any webpage. Ideally, I could also develop a Greasemonkey script which would determine whether this bookmarklet should be automatically run on websites that one wishes to use them for.&lt;br /&gt;&lt;br /&gt;Although it is presently a little complicated, I think that this approach has a number of advantages (though I admit I am not familiar enough with dealing with its potential security risks--i.e., in mixing local content with web content--but I'm sure this can be surmounted in some way, since it is too powerful an opportunity to avoid by simply accepting this division as a unsacrificeable sacred cow). I also know that there are some Javasript tools to directly manipulate the file structure, but it is complicated for me (I just discovered &lt;a href="http://www.phppatterns.com/docs/develop/connecting_xul_applications_with_php"&gt;this&lt;/a&gt; which apparently makes it easier for PHP users, but still).&lt;br /&gt;&lt;br /&gt;The advantages of this overall approach of saving personal notes as individual files and folers into the file hiearchy include:&lt;br /&gt;&lt;br /&gt;1) Allowing the user the ability to add notation even when the site's developer did not allow for this (and the notes can be stored locally rather than publicly if one is concerned about privacy, even for password-protected sites)&lt;br /&gt;&lt;br /&gt;2) One could conceivably expand the features of this script to not only be able to save the notes, but actualy email them from the same interface, save the notes as a webpage, add categories (such as through a pop-up menu), add tasks (such as through a WYSIWYG Javascript expandable add an infinite number of tasks/calendar events pertaining to the textbox in question--this would be useful to store one's goals pertaining to a particular sacred verse, but also view it in one's task manager/calendar--ideally also a Mozilla product integrated into Firefox, as such a calendar-integrated-into-the-browser product is intended to be released in a future Firefox edition as I recall reading), etc. I desperately hope someone will answer my question &lt;a href="answers.wikicities.com/wiki/What_is_the_Mediawiki_PHP_code_to_convert_%22cur_text%22_to_wiki_code?"&gt;here&lt;/a&gt; to allow us to transclude wiki pages here without all the extra sidebar junk (just converting the wiki code into formatted content (or getting a WYSIWYG one to work in these windows instead) and only adding back a few important links like "edit"/"save" and forward and backward links for the individual iframe (the main back/forward buttons on the browser will trace the exact sequence, and not allow tracing the sequence for an individual window--it may also bump one out of the framed setting entirely--note: Mediawiki servers must be manualy configured to allow frames--I have the webpage stored somewhere if anyone needs it). One could even have the PHP script write and open an Applescript to interface this data to send it to other scriptable programs such as an Instant Messaging program (though I hope fully open source programs can be made to work with it, especially within Firefox itself without needing the proprietary, albeit system-included Applescript).&lt;br /&gt;&lt;br /&gt;3) One of the coolest advantages of this approach is that, especially using some of the extensions I mentioned in an earlier blog posting (which allow viewing the folder contents while also viewing the files themeslves--if HTML, images, text, PDF, etc.), one can use Firefox as a file browser. Thus, these notes that one is storing will also be accessible as individual files (as well as corresponding to individual files--you could even take notes about your notes!). In the future, I hope even better extensions may be developed for Firefox which allow convenient file browsing and previewing/editing (e.g., column/list-tree/icon views for websites and local files through Firefox itself--i.e., everything that Mac OSX can do and more!). Thus, if one saves other files in these URL-specific directories, one can choose to view all of one's files together. No more developing a category hierarchy separately for one's emails, for one's webpages, and for one's notes, etc. One can simply opt to view all of them together (and if good sorting options become available--some Javascript bookmarklets actually works when one browses the local file structure in Firefox--one of the most useful is to &lt;a href="http://www.squarefree.com/bookmarklets/pagedata.html#sort_table"&gt;Sort tables&lt;/a&gt;--perhaps one could be developed to detect what type of data was being stored, and even add columns to indicate what type of file it is intended to be--e.g., an email, note, etc.--as it is now, you will notice that these comment fields can even be added to files--thus, one could take notes alongside one's specific files and view them later). Thus, one should be able to selectively view the fields (automatically (through Greasemonkey?) if, for example, one is choosing to only browse emails at the time) though one could also view all the data types together (if Greasemonkey's built-in wildcard search patterns are too simplistic, one could perhaps design a Javascript to run against all websites to make the determination itself as to whether the add-notes bookmarklet should be run against it).&lt;br /&gt;&lt;br /&gt;4) If MySQL could be made to automatically store all files stored to this program-set's directory and subdirectories whenever a change was made (is this the support for "events" that I remember reading newer versions of MySQL support?), one could then design a PHP front-end to allow the user to perform sophisticated searches and sorts on these notes, categories, etc. (or other files stored in this hierarchy--potentially all files on one's hard-drive, I hope?!?) one had assigned to particular websites. Ideally, one could also use this to store information not pertaining to specific websites (though one could ideally also assign data after-the-fact to be cross-listed with the URL-sorted data).&lt;br /&gt;&lt;br /&gt;The goal of all of this is to provide a fully open source (Firefox/XUL, PHP, Javascript) means of creating not only a cross-platform expandable web browser, but also file browser--one which might even be a bridge for those wishing to support and take advantage of full open source, but not (yet) willing to switch to Linux (and unlike Linux, as I understand it, Mozilla applications have not significantly forked away into being mutually incompatible). Rather than waiting or hoping for Apple or Microsoft to add the feature to one's desktop browser, this could, I imagine, perhaps be a powerful means to do so, only limited by one's familiarity with the above, fairly easy-to-learn-at-a-basic-level technologies, and one's imagination.&lt;br /&gt;&lt;br /&gt;Please let me have any comments, especially if you decide to try this out (or if you are a developer and can anticipate problems, etc.).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113273955295805469?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113273955295805469/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113273955295805469' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113273955295805469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113273955295805469'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/success-part-2.html' title='Success - Part 2'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113265920117767033</id><published>2005-11-22T02:54:00.001-08:00</published><updated>2005-11-22T08:09:20.666-08:00</updated><title type='text'>Success - Part 1</title><content type='html'>Today was a day I should be particularly grateful for.&lt;br /&gt;&lt;br /&gt;I have made very tangible progress on an idea for which I have been seeking a means of implementation for quite some time.&lt;br /&gt;&lt;br /&gt;Looking back, the idea started with a &lt;a href="http://bahai-library.com/?file=uhj_balance_planning_pioneering"&gt;response from the Universal House of Justice&lt;/a&gt;--a response which has really remolded my entire life.&lt;br /&gt;&lt;br /&gt;In response to some psychological-type questions I had asked, they responded with an set of advice, the nature of which was quite unexpected by me.  Rather than address my points like a psychologists, they urged me into practical matters of planning for service. Once absorbed in these suggested pursuits, I realized I had no such time for worrying about the other matters that had preoccupied me.&lt;br /&gt;&lt;br /&gt;When they mentioned that "One should seek to identify practical steps in each important area of one's life and then make a plan to effect these...", in order to do this effectively, my questions then became "What is "each important area of one's life?'" and "What does the infallible guidance from our Writings have to say about each of these areas of life?"&lt;br /&gt;&lt;br /&gt;I believe I was already working on an idea from college time to create a comprehensive handbook which could be used by future Baha'i Assocations. Although this format was not adopted by our NSA, the process led me to develop one for consideration of a framework of planning for life, especially from an individual's perspective, but also accommodating for community, administrative, family, etc. and on other institutional planning.&lt;br /&gt;&lt;br /&gt;Although I had, for the college club book, attempted to incorporate a lot of my own ideas (or those of others) into the list (e.g., possible social activities such as pizza parties, coffee houses, etc.), and although I still think such a list has its place (possibly as a &lt;a href="http://wikipedia.org"&gt;wiki&lt;/a&gt;), I realized that what was really lacking was a comprehensive, well-organized, and most importantly, as it turns out, expandable/updatable resource which showed us what the Writings already had to say about the subject--once we had this information, we could confidently make our own plans to fulfill them. For, if we were following our duty to read the Writings, were we just turning the page on the guidance and neglecting to implement what we had read? Having an easily expandable tool (which led me to wiki technology) would allow this to be possible. But would this resource simply be developed by an individual or even an institution and go undeveloped, when there were individuals out there who had the power to make contributions to enhance the work? In order to tap this full potential, it would thus be especially important for such a resource to be potentially collaborative (except perhaps in the component of personal notes and goal-making, though even these might collaborative, at least with granting of selective access to others) and have content that was free and could be open content (as in "open source" software). Again, this was wiki.&lt;br /&gt;&lt;br /&gt;And although institutional questions have, at least for the present, led to this project being on hold, the other component, of allowing individuals the power to make goals alongside information they have collected (or alongside the Writings themselves) but accessible in different formats (such as integrated into one's calendar, categorizable to be also viewable according, for example, as to who the protagonist of the goal is), without requiring any duplication which would unduly increase the need for extra work and increase the likelihood of incomplete storage for any particular view (i.e., a real "unity-in-diversity" as our Writings put it--one which allowed for many differences, but which harmonized and tapped them effectively and efficiently) is still on my to-do list. &lt;br /&gt;&lt;br /&gt;As I developed &lt;a href="http://bahai-library.com/browse0.php"&gt;http://bahai-library.com/browse0.php&lt;/a&gt; to serve as a user-manipulatable tool for choosing the Baha'i Writings one desired to view (with the potential to transclude these pages into other pages, such as discussion forums--especially with user-editable infinite subforums--and wiki pages) and showing alongside them any other relevant notations (whether public wikis we could produce or private notes), I also started to think that it was silly that one should expect that the user should be restricted to add relevant columns defined by the developer. &lt;br /&gt;&lt;br /&gt;More to come...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113265920117767033?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113265920117767033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113265920117767033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113265920117767033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113265920117767033'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/success-part-1.html' title='Success - Part 1'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113230782570957942</id><published>2005-11-18T01:44:00.000-08:00</published><updated>2005-11-18T01:57:05.716-08:00</updated><title type='text'>Handy, handy, handy...</title><content type='html'>&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+learned%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Learned&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;I have discovered some very useful Firefox extensions today... "Content Holder", "EZ Sidebar", "2 Pane Bookmarks", . I submitted various ideas at the programmer's forums including some scripts on how to make frames out of a selection (and also move it into a "content holder" (i.e., an extra browser window that one can slide into or out of view and drag links from into one's main browser window). With extra screen space becoming possible, it is cool to see the tools come about to allow one to integrate different data sources together (in this case webpages or file directories since Firefox can browse these too) in one view. It's a real pity his Tab extensions program is not so stable or compatible with other extensions, because it is a brilliant conception. "Tab Catalog" is pretty cool too, though not as essential for navigation, I think.&lt;br /&gt;&lt;br /&gt;Last night I made huge progress on a PHP/Javascript program I have been making...I am eager to try a PHP/Javascript combination to allow column file-browsing and viewing/editing in one's browser...&lt;br /&gt;&lt;br /&gt;I got AdSense to work today! Now, I just hope the account is approved to give me a potential outlet down the road for some extra income (I don't expect much if anything, especially with my blog as it is now, but...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113230782570957942?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://piro.sakura.ne.jp/xul/' title='Handy, handy, handy...'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113230782570957942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113230782570957942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113230782570957942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113230782570957942'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/handy-handy-handy.html' title='Handy, handy, handy...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113214346706543097</id><published>2005-11-16T04:06:00.000-08:00</published><updated>2005-11-16T04:19:53.706-08:00</updated><title type='text'>Today</title><content type='html'>&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+learned%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Learned&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Cool...Upon searching the internet this time, I came across an apparently easy-to-use distribution of Linux for the Mac, &lt;a href="http://mirror.cs.umn.edu/ubuntu-releases/5.10/"&gt;Ubuntu&lt;/a&gt;...The nice thing is that it can run on just the CD if desired...I'm interested to support open-source as much as possible...&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+to-do%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: To-do&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;I want to learn if there are mass-produced open-patent computers which only use patents under a license like GPL, so that people can modify the hardware freely... &lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+wish%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Wish&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;It'd be cool for Firefox (SeaMonkey?) to be able to include OpenOffice inside of its windows for editing from live HTML source (including local HTML or text files)...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113214346706543097?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://mirror.cs.umn.edu/ubuntu-releases/5.10/' title='Today'/><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113214346706543097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113214346706543097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113214346706543097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113214346706543097'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/today_16.html' title='Today'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113204797111765385</id><published>2005-11-15T01:42:00.000-08:00</published><updated>2005-11-15T01:46:11.120-08:00</updated><title type='text'>Evening update</title><content type='html'>All right, the story so far...&lt;br /&gt;&lt;br /&gt;Most useful thing I did today was probably finally submitting some of my ideas for Firefox and Thunderbird in a place where the real developers can see them: &lt;a href="http://forums.mozillazine.org/"&gt;http://forums.mozillazine.org/&lt;/a&gt;. Not very structured, but at least it is in a good location.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113204797111765385?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113204797111765385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113204797111765385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113204797111765385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113204797111765385'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/evening-update.html' title='Evening update'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113202900662428307</id><published>2005-11-14T20:26:00.000-08:00</published><updated>2005-11-14T20:42:26.396-08:00</updated><title type='text'>Another day</title><content type='html'>&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Ok, so far, I have added a key command for invoking &lt;a href="https://addons.mozilla.org/extensions/moreinfo.php?id=1457"&gt;foXpose&lt;/a&gt;, a helpful Firefox extension to get a bird's eye view of all of one's tabs.&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+waiting%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Waiting&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;I completed a submission to &lt;a href="http://sourceforge.net"&gt;http://sourceforge.net&lt;/a&gt; for &lt;a href="http://bahai-library.com/browse0.php"&gt;http://bahai-library.com/browse0.php&lt;/a&gt; to be open-sourced there (perhaps alongside Jonah's site?--awaiting a reply).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113202900662428307?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113202900662428307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113202900662428307' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113202900662428307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113202900662428307'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/another-day.html' title='Another day'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113198527951491647</id><published>2005-11-14T08:19:00.000-08:00</published><updated>2005-11-14T20:42:56.946-08:00</updated><title type='text'>Nawww...</title><content type='html'>&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+wish%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Wish&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;No, I don't think I'll switch, at least for now, to trying a wiki blog...This one is too nice for categorizing as well as for template customizability...It'd be too much of a hassle to do it at a wiki, unless I went through the trouble of doing a separate page/post and categorizing that...I hope Mediawiki will allow categorization of individual sections (maybe someone could make an extension).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113198527951491647?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113198527951491647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113198527951491647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113198527951491647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113198527951491647'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/nawww.html' title='Nawww...'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113195794703191968</id><published>2005-11-14T00:33:00.000-08:00</published><updated>2005-11-14T20:47:44.843-08:00</updated><title type='text'>Stuff</title><content type='html'>&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;I need to look at my page history to see what I did today, since I've mostly been online. Added keyboard shortcuts tips to the relevant &lt;a href="http://kb.mozillazine.org/"&gt;http://kb.mozillazine.org/&lt;/a&gt; pages (though neglected to mention many are already in the Help of the program)&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+Recommendation%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Recommendation&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;I highly recommend (for Mac users at least) the program &lt;a href="http://www.dejal.com/blogassist/"&gt;BlogAssist&lt;/a&gt; for doing blogging. Nice to paste in links that way (though I am really thinking of switching into a wiki for the easier code).&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+To-do%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: To-do&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Looked for way to get Google results in RSS (to search for my user name in recent posts, since Wikicities has so many sites I may contribute to that I don't want to have to check each watchlist or even recentchanges list. Didn't have much luck finding any existing feeds that would work on the web. Maybe I could make one for PHP and add one to &lt;a href="http://bahai-library.com/?file=rss"&gt;http://bahai-library.com/?file=rss&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+waiting%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Waiting&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Very interested to get http://bahai-library.com open-sourced, perhaps through &lt;a href="http://sourceforge.net"&gt;http://sourceforge.net&lt;/a&gt; . &lt;a href="http://bugzilla.org"&gt;Bugzilla&lt;/a&gt; seemed only oriented for bugs and the plugins or whatever third-party solutions didn't seem so intelligible to this newbie.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113195794703191968?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113195794703191968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113195794703191968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113195794703191968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113195794703191968'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/stuff.html' title='Stuff'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18897806.post-113180560215058375</id><published>2005-11-12T05:59:00.000-08:00</published><updated>2005-11-14T23:32:41.216-08:00</updated><title type='text'>Hello</title><content type='html'>Ok, so I've come to believe that blogs can be more than just belly-button picking exercises...If nothing else, I can keep track of what I am doing.&lt;br /&gt;&lt;br /&gt;I'm moving from &lt;a href="http://360.yahoo.com/brettz9"&gt;http://360.yahoo.com/brettz9&lt;/a&gt; after hitting the back button erased what I had been doing. I also like the AdSense feature here, though I doubt this is going to be a page of interest to millions.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;What I did today&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;The first day of my summer vacation, I... Sorry...&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Chinese&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;1) Submitted Chinese Writings as permitted by publisher&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+to-do%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: To-do&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;2) Waiting on seeing if &lt;a href="http://www.chinese-forums.com/showthread.php?t=2271&amp;highlight=asian+ocr+add-on"&gt;someone can help&lt;/a&gt; convert Chinese to text with a few further books which are in PDF (as images).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Chinese study&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;1) Reached a very basic level for the "basic" 1062 characters of my study book. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+to-do%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: To-do&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;2) Find a way (SQL--FileMakerPro won't sort Chinese characters) to add mnemonics in a relational database (using other free existing resources). (see if chinalanguage.com/ or other places have free databases or make one--get info on radical, additional root, pinyin, simple and traditional characters, component characters, compounds, word frequency, topical category, etc.; do for Persian and Arabic at some point--transliterator--see &lt;a href="http://allyourideas.com"&gt;http://allyourideas.com&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Baha'i&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+done%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Done&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;1) Cross-referenced &lt;a href="http://bahai-library.com/?file=scripture_search"&gt;this&lt;/a&gt;, &lt;a href="http://bahai-library.com/?file=rss"&gt;this&lt;/a&gt;, and &lt;a href="http://bahai-library.com/?file=abbreviations"&gt;this&lt;/a&gt; for the sake of http://www.bahaiblog.net/?p=118 to show what Firefox tools exist related to the &lt;a href="http://bahai.org"&gt;Baha'i Faith&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;To move to Wikipedia if/when I am not somewhere it is blocked (volunteers to do it for me?)&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+to-do%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: To-do&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://search.blogger.com/?q=%22category+waiting%22+blogurl%3Abrettz9.blogspot.com&amp;btnG=Search+Blogs&amp;hl=en&amp;ie=UTF-8&amp;bl_url=brettz9.blogspot.com&amp;x=0&amp;y=0&amp;ui=blg"&gt;Category: Waiting&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;* To add &lt;a href="http://mozilla.wikicities.com/wiki/CMEScript:Edit_wiki"&gt;http://mozilla.wikicities.com/wiki/CMEScript:Edit_wiki&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Tools/Browser_Integration"&gt;here&lt;/a&gt; and &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Tools#"&gt;here&lt;/a&gt;. This is a useful script for a Firefox extension to allow you to jump immediately to a wiki page's edit page. This script can be modified for adding customized context menus where one wishes to append something within or at the beginning or end of a URL.&lt;br /&gt;* Go to the former Wikipedia how-to page &lt;a href="http://en.wikipedia.org/wiki/How-to"&gt;here&lt;/a&gt; to get the old code (the latest edit after mine which did not resort the items into skill, etc.--i.e., by topic) and bring it over to &lt;a href="http://en.wikibooks.org/wiki/Wikibooks:How-tos_bookshelf"&gt;Wikibooks:How-tos_bookshelf&lt;/a&gt; to replace or as an alternate categorization. Question also at the Wikipedia why short how-tos should go to a domain about "books". See why it could not be kept there for shorter how-tos...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18897806-113180560215058375?l=brettz9.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://brettz9.blogspot.com/feeds/113180560215058375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=18897806&amp;postID=113180560215058375' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113180560215058375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18897806/posts/default/113180560215058375'/><link rel='alternate' type='text/html' href='http://brettz9.blogspot.com/2005/11/hello.html' title='Hello'/><author><name>Brett</name><uri>http://www.blogger.com/profile/04637501061198463702</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
