Update on my stuff - June 6, 2008

by Jon 6/7/2008 7:29:00 AM

OK it's been a while since I did any real blogging lately, here's a sum-up:

  • I've still forgotten how to blog. While this is my blog and I can post whatever I want, this blog has become a high-level geek toy discovery dump rather than a software development blog. While I make no apologies for this--I can do whatever I want here--I'm trying to figure out if I should fork my blogs, one for serious software development discoveries and one for shallow geek discoveries. I've already been wishing I could add a personal blog somewhere, not here, and post thoughts and feelings about non-tech stuff. (This is something I used to do but it got carried away so I boycotted it and focused on purely geek speak here. I miss doing personal blogging though, and I feel like it would be good for me to do it again, if I'm just a bit more careful.)
     
  • I keep mentioning the LION Search Service, how we intend to open source it, and how it's been cancelled, and then I deleted that cancellation post, etc. It keeps coming back and going away and coming back again. Well part of that is just the reality of how it's being treated at the office; open sourcing LION required all-or-nothing support on the part of my teammates at the office, and I was getting really pointless "I'm building my own search service instead of yours but I'm gleaning ideas from yours" feedback from others on the team. Lately, though, they've discovered that what they were doing was accomplishing the same tasks as what I had already implemented, and in the absence of time availability they reverted and have adopted LION. So LION is back, the team has adopted it, and we're about to go live with our first faceted-searching web site using LION (a couple other web sites were already using it but without the new faceted searching). It's now a lot more official, LION is our exciting new search platform going forward.

    So,
    • LION is a nearly-sort-of-enterprise-class search engine, written in C#, currently in development, built on Lucene.NET, and its continued development is being inspired in part by the Apache Solr project (but was conceived and put into production before Solr was discovered).
      • It currently offers
        • rich, paginated queries with field and index selection,
        • Lucene.NET break-neck speeds,
        • faceted searching,
        • strong document modeling, and
        • dynamic updates (currently limited to index A/B switching but that will be improved soon).
      • It currently runs on WCF (.NET 3.0). Not BizTalk or anything otherwise weird or expensive to support. It currently does not have, but will soon have, REST and AJAX support.
      • It does not have and might not ever have the high availability "server farm" feature set that I believe Solr offers. Service stability and uptime has been a constant thorn in our sides, so rethinking and possibly rewriting portions of the service itself is going to be necessary before we put it out there for the world to consume in open source.
      • It is currently not, but soon will be, built around IIS 7. Right now it's just a standalone console application, wrapped in a Windows service.
    • We will still be open-sourcing LION, eventually. Right now it's looking like a late-summer or fall time frame.
    • LION will be "internally sourced" first, to be shared to other departments in our large and disperate company, to be evaluated and discovered first. (I think this is very wise, just something I didn't think about until the boss said to do it that way.)
    • LION has been made a team-shared ownership; since I built it on the job, there's little I can do to stop the boss from handing it to a certain other team member and telling him to own it, which would be totally unsurprising. While I wouldn't agree with the situation (I've only put my heart and soul into LION, and I'm also the oldest and most experienced person on the team, even if I have a couple areas of technical weaknesses), a situation like that is not something I can change without throwing the baby out with the bathwater, and I'll live.
        
  • I've been thinking about engaging in one or more side projects I would wholly and independently control. Given the big ideas I have, I'm still not sure I want to do one, though, as it's all a lot of work, some of it very tempting to try to bring into the workplace, and I don't want my authortitative work to be disrespected in the workplace like LION has been. Even so, the ideas are still on the table for consideration
      
    • BlogObjects - I registered BlogObjects.net back when I registered PowerBlog.net (I wrote in VB6 and rewrote in C# a commercial blogging desktop client application about five years or so ago, with zero commercial success but significant personal/professional technical growth for myself) and was considering making PowerBlog's development API a set of open-source blogging tools. I'm thoroughly persuaded that this will never be commercially viable as blogging APIs are a dime a dozen, but, like PowerBlog was five years ago, starting from scratch on a client/server blogging API would be a good refresher on technology in general. This is something that, if I do it, it will be not only open source, it will also be cross-platfom to Mac and to Linux, and will also be complemented with a PowerBlog resurrection or else PowerBlog-like alternative with fewer feature (no Active Scripting [VBScript, Javascript], no team synchronization support).
        
    • CMSObjects - Taking BlogObjects to another level, CMSObjects would build upon BlogObjects's idea (but not the codebase) and add:
      • An enterprise class CMS service
      • Rich support for the Atom Publishing standard API
      • Content typing (for example, a "Story" article type, a "Video browser", a "Photo gallery", a "Product Detail" page, etc), with scripted or compiled coded definitions that support inheritence
      • Rich templating both per content type and per content instance
      • Workflows
        • Team member security (user can post, user can only read, user can only post to a particular category or to a particular URL prefix, etc.)
        • Team members' posts can be flagged for approval, and then approved by a senior editor
        • Content can be annotated, seperately from the publshed output -- ideally, the annotations can be made inline, directly inside of the content
        • Content publishing to the web can be postponed to a digital publish date
      • Content versioning 
      • Again, completely open-sourced, but more web service oriented, possibly web-driven, and much less GUI-driven (so no PowerBlog for CMSObjects except for basic blogging to a CMSObjects service)
          
    • CRMObjects - Yeah the "Objects" suffix is getting a little silly, but my short experience with Sage Software's SalesLogix exposed me to another facet of software and business technology that reflects the genuine needs of businesses in general, which is using technology to support sales and support staff. CRM can be painfully messy and awkward, but tossing together some basic building blocks might be a fun and rewarding experience, even if it is not commercially viable (way too much competition, as with blogging). Who knows, though, businesses might actually use it, and supporting it could actually become lucrative.
        
    • ERPObjects - I'll do that by myself, in my spare time. Just kidding.
        
  • I have a book here on Cocoa programming. I'm curious about Objective-C, how it's a weakly typed, object-oriented C language superset, which just sounds weird (C being object oriented and weakly typed?! .. weird! .. but cool!!), I can see why the book comes right out and says that it can be extremely dangerous, I saw enough of this with VB6 programming's suport for weak typing and evil Variants in my past, but keeping in line with C linguistics and C power, I'm very curious about it. I'm guessing that Microsoft's answer to Objective-C is C++/CLI, but the CLI in itself is still strongy typed, so you have to look at integration points with JScript.NET or something (but then there's Lua, Python, etc., which the non-Microsoft community also has). I watched an introduction to Objective-C video amongst the iPhone SDK videos recently and, while it does look different, I can see how it as been used to give Mac and iPhone developers a lot of shortcuts into fast and efficient software development.
      
  • Over the last two or three weeks I've become less and less excited about cross-platform development libraries and APIs, such as Mono, Java, wxWidgets, Qt4, and SDL, for a few reasons:
    • While cross-platform GUI APIs pretty actually do work across platforms like they promise, their end output is a bit less predictable and/or desirable than one might expect.
      • Choosing a GUI API that uses its own UI rendering results in software that can be predicted by the developer, but it is not predictable by the user in the context of other software. Java Swing apps traditionally demonstrated this a long while back with is blueish, proprietary look and feel, and that's not what users want. Users want software that looks and feel like the software already installed on their systems. Sometimes these cross-platform APIs, like Java, come bundled with visual schemes that simulate these operating systems, but they are clearly faked and do not take advantage of the rendering APIs already offered by the core operating system.
      • Choosing a GUI API that uses the operating system's rendering and layouts (such as how the Mac uses the Aqua scheme but also puts the main menu up on the top of the screen) does not always result in predictable rendering output. Sometimes, for example, the borders or clickable "handles" of a drop-down list sticks out further to the right, above, or below the dimensions specified by the developer, or else the text rendering inside becomes unreadable because the internal padding or inner/inset "border" that contains the content is too small on one operating system while on the developer's operating system it appears fine. Sometimes there is somehow a mismatch of pixels to DPI, and the GUI code is using one unit of measure while the OS has adopted another, and so some "defensive layout programming" needed to have been written but wasn't because the developer's operating system didn't have this or that feature. And so on.
    • Java and C# are both still too slow for my liking, and other non-native languages are not mainstream enough to feel confident in building around with the knowledge that others can help carry the torch.
    • I've found that some cross-platform software applications that use generically cross-platform dependencies such as SDL are actually quite unstable. This doesn't mean that SDL et al are unstable, it just means that it is too easy for developers to build upon such a framework and not hash out platform-specific causes to application failures. There is no such thing as a silver bullet, SDL/wx/Qt/etc notwithstanding.
    • Ultimately, C and C++ (but not Objective-C) are themselves cross-platform languages, with platform-specific dependencies (and, of course, CPU-specific machine code compilation). The best thing to do, I think, is to get a handle on building C++ applications for one platform, but build things out generically enough so that platform-specific dependencis are broken off into libraries. Then, when porting the applications, you only need to port the platform libraries. This is what most cross-platform software I've seen ends up doing when they also take advantage of the features of the operating system like DirectX.
    • Another approach might be to build upon a cross-platform API first, or perhaps even a cross-platform non-native language like C#, and then port each component, piece by piece, to C++ on behalf of the native patform.
    • None of this is to say that I think wx, Qt, SDL, et al, are worthless or that I won't use them on a regular basis (if indeed I can get myself coding C/C++ apps to begin with), I'm just trying to say that there is no silver bullet and use of these libraries, rather than native Cocoa (for Mac) or MFC (et al, for Windows), would be a slight compromise for time and resources, not a magical, perfect answer for excellent software that "just works".
        
  • At the end of the day, I'm still scratching the surface and barely finding time enough to sleep, much less write the software I'm envisioning. Ugh.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , , , ,

Pet Projects | Software Development

My First Mac-Ported C# App

by Jon 5/17/2008 3:10:00 PM

Here's a screenie of my little GDI+ (System.Drawing) based game engine ported to the Mac using MonoDevelop. The sandbox "game" instance is just some bouncing balls that collide against the walls, the rectangular blocks, and each other, with fairly realistic physics, emitting dual-light draw drop-shadows, etc. In Windows, DirectSound is also used to create stereo "bump" sound effects that make the bumping balls feel a little more realistic.

Wow, this only took about ten minutes, from "I wonder if .." to "wow, look at that, it's working!" My steps:

  • Add my home Subversion server as a SCM repostitory in MonoDevelop
  • Check out my game engine (called "Level1Engine") to ~/Documents/dev/Level1Engine
  • Watch MonoDevelop puke on the absolute UNC path of one of the project references
    • Manually add the missing .csproj file to the solution
      • MonoDevelop exits unexpectedly
    • Reopen MonoDevelop, reopen solution
    • Create a new project with the same name/directory as the broken project
    • Remove the generated sample .cs file
    • Add the existing .cs files to the project, in-place
  • Comment out the DirectSound references from the game engine class library. (Sadly, that means there's no sound yet.)
  • Let 'er rip

Overall, this blog post took me about twice as long as porting my app!

The result is not flawless, though. Rendering performance is about 1/3 what it is in GDI+ (in Windows), and apparently the 2D matrix transformations (which I had to touch for the drop shadows) are a little buggy in Mono because that text on the top left, which is rendered with System.Drawing, jiggles around erratically by about two pixels.  

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Pet Projects | Software Development | Mac OS X

Mac OS X 10.5 (Leopard) + VMWare Fusion + Mono = Bliss

by Jon 5/17/2008 8:13:00 AM

I have been using my new Mac Mini for less than 24 hours and it already looks like this:

In the screenshot I have VMWare Fusion with Unity enabled so that I have the Windows Vista Start menu (I can toggle off the Start menu's visibility from VMWare itself) and Internet Explorer 7. (I also have Visual Studio 2008 installed in that virtual machine). Next to Internet Explorer on the left is Finder which is showing a bunch of the apps I have installed, including most of the stuff at http://www.opensourcemac.org/. On the right I have MonoDevelop where I can write C# or VB.NET applications for the Mac, for Linux, or for Windows. And of course, down below I have the Dock popped up because that's where my arrow actually is.

I also, obviously, have an Ubuntu VM I can fire up any time I want if I want to test something in Linux. 

Mac OS X 10.5 (Leopard) comes with native X11, not out of the box but with the installer CD, and it's the first OS X build to do so (previous versions used or required XFree86).

This point in time is a particularly intriguing milestone date for the alignment of the moons and stars for blissful cross-platform development using the Mac as a central hub of all things wonderful:

 

  • X11 on Mac OS X 10.5
  • MonoDevelop 1.0 is generally gold (released, it's very nice)
  • System.Windows.Forms in Mono is API-complete
  • VMWare Fusion's Unity feature delivers jaw-dropping, seamless windowing integration between Windows XP / Vista and Mac OS X. And to make things even more wonderful, VMWare Fusion 2, which comes with experimental DirectX 9 support, will be a free upgrade.
  • For game developers, the Unity game engine is a really nice cross-platform game engine and development toolset. I have a couple buddies I'll be joining up with to help them make cross-platform games, something I always wanted to do. This as opposed to XNA, which doesn't seem to know entirely what it's doing and comes with a community framework that's chock full of vaporware. (But then, I still greatly admire XNA and hope to tackle XNA projects soon.)
  • The hackable iPhone (which I also got this week, hacked, and SSH'd into with rediculous ease), which when supplemented with the BSD core, is an amazing piece of geek gadgetry that can enable anyone to write mobile applications using open-source tools (I'd like to see Mono running on it). The amount of quality software written for the hacked iPhone is staggering, about as impressive as the amount of open source software written for the Mac itself. Judging by the quantity of cool installable software, I had no idea how commonplace hacked iPhones were.
  • Meanwhile, for legit game development, the Unity 3D game engine now supports the iPhone and iPod Touch (so that's where XNA got the Zune support idea!) and the iPhone SDK is no longer just a bunch of CSS hacks for Safari but actually binary compile tools.

 

Embeddable Cross-Platform Silverlight

by Jon 5/14/2008 5:02:00 PM

I've been wanting to start discovering cross-platform development with Mono, MonoDevelop, Gecko#, C++, XPCOM, XUL, XULRunner, WebKit, et al. I have a couple vaporware apps in mind and I have just purchased a Mac Mini and an iPhone mainly for this purpose. And meanwhile since Silverlight happens to be cross-platform as well, I was curious about its licensing. Theoretically, one can accomplish an Adobe AIR-like cross-platform application implementation using Silverlight and XUL or WebKit. Problem is, I had heard that Silverlight was explicitly written to disallow it from being used on anything but a standard HTML web browser (Safari, Firefox, Internet Explorer).

After spending an hour or so poking at the n00b tutorials on XUL and XPCOM, I went to the Silverlight site and spent several minutes looking everywhere for the darn EULA. (Sadly, after finding it, once I hopped on this blog editor I lost it and it took another 15 minutes to find it again.)

http://www.microsoft.com/silverlight/resources/LicenseWin.aspx and http://msdn.microsoft.com/en-us/silverlight/cc307279.aspx

I didn't see any such limitation there, nothing about "thou shalt only use Silverlight in a 'standard web browser', namely Internet Explorer, Firefox, or Safari".  There are some limitations, of course, such as perhaps redistribution, which theoretically if the app is a XUL app can be deal with using HTML+JS+XUL+XPI, getting Silverlight into thinking it's downloading and installing itself through and onto Firefox. (All theory, of course.)

On a side topic, if anyone out there is reading this, can someone tell me why there are almost no open discussions correlating XUL and XAML/WPF? They seem to attempt to do the same basic function--create apps using XML and components--albeit WPF is far more powerful and versatile in itself as a tool in its niche, whereas XUL is Javascript/HTML friendly and is cross-platform.

UPDATE: After discussing with a buddy who's done cross-platform .NET programming with Mono, apparently Glade + GTK# has an XML markup language that also meets the same objective.

On second thought, maybe I just wasn't searching hard enough. I see a lot of hits here: http://www.google.com/search?q=xul+vs+xaml

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , , , ,

Pet Projects | Computers and Internet | Software Development | Linux | Cool Tools | Web Development

EntitySpaces on Silverlight 2: Part One

by Jon 5/4/2008 11:25:00 AM

I managed to get EntitySpaces running on Silverlight over WCF client proxies. I documented the steps as a tutorial and Mike Griffin at EntitySpaces posted it up on the EntitySpaces blog.

http://www.entityspaces.net/blog/2008/05/05/EntitySpacesAndSilverlightDemoPart1.aspx kick it on DotNetKicks.com 

Demo here: http://developer.entityspaces.net/ES2008/Demos/Silverlight/PartOne/

I retained my Word doc so I can retain my personal preference of formatting, fix typos, and add a few annotations and disclaimers here and there like, "So far these steps don’t lend themselves very well to an offline development workflow. Finding a more appropriate workflow pattern, though, is beyond the scope of this initiative. (Good luck.)" We can thank Microsoft for making WCF on IIS 7 such a pain in the behind for binding service endpoints, without any code generation or GUIfication. But enough whining, client-side business objects in Silverlight is a hawt approach to LOB RIAs.

http://www.jondavis.net/misc/EntitySpaces and Silverlight Demo - Part 1.doc

Part two will be short 'n sweet but much more focused on actually working with EntitySpaces. This part didn't give ES justice...

EntitySpaces RIA running in Safari 3.1 (on Windows) with just about 20 lines of hand-written client-server code and XAML markup:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

Pet Projects | Computers and Internet | Software Development | Cool Tools | Web Development

XHTMLJS: Updated to v0.3

by Jon 3/22/2008 4:17:00 PM

I've updated XHTMLJS to version 0.3.

http://cachefile.net/scripts/xhtmljs/0.3/

Try the XHTML editor.

This implements the full strict tagset listed at:

http://www.htmldog.com/reference/htmltags/

It still has some flaws, but this mainly resolves what I observed previously, "a few more failures beyond indentation, namely some XHTML-accepted tags (like <input>) are still going missing in strict mode. The Editor should allow for the de-toggling of strict mode, and IMO I think enabling strict mode for the jQuery extension was a mistake. Also, plain-text '>' (&gt; in markup) is not outputting as '&gt;' but as '>'. "

There are still indentation bugs and missing event handlers, among a few other glitches, but this is an important milestone.

UPDATE: The editor itself had a bug I just fixed (kept the 0.3 version designation) where it would only XHTMLize the first node entered. This required no change to xhtml.js.

kick it on DotNetKicks.com

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Pet Projects | Open Source | Web Development

Introducing jqalert - The jQuery-empowered alert() replacement

by Jon 3/22/2008 9:59:00 AM

I'm releasing a beta build of something I've been working on called jqalert. It's basically a nice, skinnable modal dialog box that defaults to have a certain "fade-in" feel I wanted to have.

Here's the current project URL:

http://www.jondavis.net/codeprojects/jqalert/  

.. or on cachefile:

http://cachefile.net/scripts/jquery/plugins/jqalert/0.9/

I built this having been inspired by a few other similar libraries out there, including:

What sets jqalert apart is that it is a) specifically an alert() replacement, b) prefab'd to be functionally comparable to Visual Basic's MsgBox, which allows the user to set the title and the icon (and the buttons, too, but jqalert currently only supports OK), while c) also adding a lot of customizeability.

What does "specifically an alert() replacement" really mean, when other tools do the same basic thing? It's about the execution...

  • As quick and simple to use as possible: jqalert(message); or jqalert(message, title);
  • Predictable "windowing" appearance; universally recognizeable.
  • You get a titlebar.
  • You can drag the alert window around with the titlebar, for those "emergencies" where you might need to peek back behind the alert window, without closing out the message. 
  • You get an OK button.
  • The OK button claims focus, so that you can close it by just hitting spacebar or enter.
  • The OK button reclaims focus if it loses focus by clicking elsewhere in the alert window.
  • Modality blocks UI.

kick it on DotNetKicks.com

Currently rated 3.3 by 4 people

  • Currently 3.25/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

Pet Projects | Open Source | Computers and Internet | Web Development

Virtual Tarball - Draft 3

by Jon 3/2/2008 8:16:00 PM

I finally got around to kicking the tires of my "virtual tarball" idea, which is basically an XML document that consists of HTML-renderable <ul> / <li> tags that describe the contents of an Internet-based directory structure. This allows a single URL to be used to fetch an entire set of files by using a single list of hyperlinks.

I prototyped this on the server side at cachefile.net using a REST-like approach. Basically, one would simply need to append the path of a known cached directory at cachefile.net to the following URL:

http://cachefile.net/svc/mrr/ [+ known path from root]

For example:

http://cachefile.net/svc/mrr/scripts/OpenAjax/

This would output the contents of the directory at http://cachefile.net/scripts/OpenAjax/ in XML / <li> format, with hyperlinks.

 

<div class="mrr">
    <label>
        Index of <span class="mrrbase">http://cachefile.net/scripts/OpenAjax/</span>
    </label>
    <ul class="mrrparent">
        <li>
            <a href="../">Parent</a>
        </li>
    </ul>
    <!--
        This is a mrr ("mirror") file, also a.k.a. a "virtual tarball".
        For more information, see
http://www.jondavis.net/blog/?tag=/virtual%20tarball
        -->
    <ul class="mrrdirlist">
        <li class="mrrdir">
            <a href="hub">hub</a>
            <ul class="mrrdirlist">
                <li class="mrrdir">
                    <a href="hub/0.6">0.6</a>
                    <ul class="mrrdirlist">
                        <li class="mrrdir">
                            <a href="hub/0.6/release">release</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/0.6/release/OpenAjax.js">OpenAjax.js</a>
                                </li>
                            </ul>
                        </li>
                        <li class="mrrdir">
                            <a href="hub/0.6/src">src</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/0.6/src/OpenAjax.js">OpenAjax.js</a>
                                </li>
                            </ul>
                        </li>
                        <li class="mrrdir">
                            <a href="hub/0.6/testsrc">testsrc</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/0.6/testsrc/TestSuite.html">TestSuite.html</a>
                                </li>
 
                              <!-- .... -->

                            </ul>
                        </li>
                        <li class="mrrfile">
                            <a href="hub/0.6/build.xml">build.xml</a>
                        </li>
                        <li class="mrrfile">
                            <a href="hub/0.6/index.html">index.html</a>
                        </li>
                    </ul>
                </li>
                <li class="mrrdir">
                    <a href="hub/1.0_build117">1.0_build117</a>
                    <ul class="mrrdirlist">
                        <li class="mrrdir">
                            <a href="hub/1.0_build117/release">release</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/1.0_build117/release/OpenAjax.js">OpenAjax.js</a>
                                </li>
                            </ul>
                        </li>
                        <li class="mrrdir">
                            <a href="hub/1.0_build117/src">src</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/1.0_build117/src/OpenAjax.js">OpenAjax.js</a>
                                </li>
                            </ul>
                        </li>
                        <li class="mrrdir">
                            <a href="hub/1.0_build117/testsrc">testsrc</a>
                            <ul class="mrrdirlist">
                                <li class="mrrfile">
                                    <a href="hub/1.0_build117/testsrc/TestSuite.html">TestSuite.html</a>
                                </li>
                                  <!-- ... -->
                            </ul>
                        </li>
                        <li class="mrrfile">
                            <a href="hub/1.0_build117/build.xml">build.xml</a>
                        </li>
                        <li class="mrrfile">
                            <a href="hub/1.0_build117/index.html">index.html</a>
                        </li>
                    </ul>
                </li>
                <li class="mrrfile">
                    <a href="hub/home.href">home.href</a>
                </li>
            </ul>
        </li>
        <li class="mrrfile">
            <a href="home.href">home.href</a>
        </li>
    </ul>
</div>

As an added bonus, you can also get HTML wrapping of the XML file by appending the querystring, "?format=html".

http://cachefile.net/svc/mrr/scripts/OpenAjax/?format=html (click to view) 

You can let your imagination take you wherever you want to go as to what you would do with such a tool from here. I'm opening the uncommented server-side source code for this. The PHP file for my proprietary implementation is here: http://www.jondavis.net/misc/cachefile_mrr_gen.txt

Unfortunately, I have a sinking feeling that this opens up security vulnerabilities. If anyone can spot any, please let me know. I already filter out "..". 

kick it on DotNetKicks.com

Iconize with CacheFile

by Jon 12/3/2007 7:11:00 PM

I still owe myself that virtual tarball / .mrr app.

Meanwhile, I've been busy with CacheFile.net in other ways.

  • I set up a new dedicated machine to host the site without worrying about others' sites taking the server down. It runs on Fedora / Apache.
  • On the new dedicated machine, I finally enabled gzip and caching.
  • I've been regularly adding popular script libraries as I find and qualify them.
  • The Graphics section now has two new additions:
    • famfamfam, and
    • Iconify

The latter addition, Iconify, is worth noting. http://cachefile.net/graphics/iconize/cachefile/index.html If you just drop this tag on your page:

<link rel="stylesheet" type="text/css" href="http://cachefile.net/graphics/iconize/cachefile/iconize.css" />

.. or ..

<link rel="stylesheet" type="text/css" href="http://cachefile.net/graphics/iconize/cachefile/iconize_left.css" />

.. you'll instantly get icons to show up on your hyperlinks. No image downloads necessary!

Update: Of course, this doesn't work across different domains when using Internet Explorer. *sigh* 

kick it on DotNetKicks.com

The Virtual Tarball

by Jon 11/21/2007 9:11:00 AM

AFAIK, no one has done this, at least not in this specific way, I have a need for it, and I can see it being used everywhere. So I'm proposing it, and I'm going to implement it.

My idea: The virtual tarball. (Or something?) A file extension of something like .vtb, or .mrr (mirror file). Inside, it looks like it's just an XML file with XHTML-renderable hyperlinks, but the file type is used by an executable that pulls the files down into the specified directory with the <a> tags' text as the save-to file name.

Example contents:

<ul class="mrr">
 <li class="mrrfile">
  <a
 href="
http://cachefile.net/file_a.bin">file_a.bin</a>
 </li>
 <li class="mrrfile">
  <a
 href="
http://cachefile.net/file_b.bin">file_b.bin</a>
 </li>
 <li class="mrrdir">dir1</li>
 <li class="mrrfile">
  <a
 href="
http://cachefile.net/dir1/file_c.bin">dir1/file_c.bin</a>
 </li>
 <li class="mrrfile-alternate">
  <a
 href="
http://otherurl.net/dir1/file_c.bin">dir1/file_c.bin</a>
 </li>
</ul>

Given this sample, here's what Visual Studio outputted as an XML Schema file from automatic conversion:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified"
 elementFormDefault="qualified"
 xmlns:xs="
http://www.w3.org/2001/XMLSchema">
 <xs:element name="ul">
  <xs:complexType>
   <xs:sequence>
    <xs:element maxOccurs="unbounded" name="li">
     <xs:complexType mixed="true">
      <xs:sequence minOccurs="0">
       <xs:element name="a">
        <xs:complexType>
         <xs:simpleContent>
          <xs:extension base="xs:string">
           <xs:attribute name="href"
             type="xs:string" use="required" />
          </xs:extension>
         </xs:simpleContent>
        </xs:complexType>
       </xs:element>
      </xs:sequence>
      <xs:attribute name="class" type="xs:string" use="required" />
     </xs:complexType>
    </xs:element>
   </xs:sequence>
   <xs:attribute name="class" type="xs:string" use="required" />
  </xs:complexType>
 </xs:element>
</xs:schema>

The point of this is that it would look like HTML but it could be processed like a .zip file. Only difference between a .mrr file and a .zip file, other than the fact that a .zip file is compressed and isn't human-readable when introspected, is that a .zip contains the contents, whereas a .mrr file only contains hyperlinks to the downloadable files. In the above example, I also have an "-alternate" class so that the processor can see that as a mirrored repository for the same file.

Oh, and yeah, the point of the XHTML compatibility is partly for inspection and previewing, but also for Javascript DOM support. I'm thinking this could be my "engine" for a web browser script library pre-loader page idea I have for adding as a new feature for cachefile.net.

I'm going to get to work on an open source C# console application for Windows, as well as a Javascript browser caching implementation.

Update: I've spent most of the night prototyping the C# app. I'm calling it Mrrki ("murky"), and settled on .mrr (for "mirror"). Here's my first rough draft build: http://www.jondavis.net/codeprojects/Mrrki/0.1/Mrrki.zip.

kick it on DotNetKicks.com

Introducing CacheFile.net - The Central Repository for Common Internet Resources

by Jon 11/18/2007 10:23:00 PM

Alright so maybe it's a crappy generic domain name but it's a start. The idea is simple: Get all the popular JavaScript scripts and RSS feed graphics on one common URI. If all web sites can point to that URI for common resources, and the URI never changes for the specified resources, then their users are guarenteed to have a faster and more productive user experience than if all the web sites each had their own copies of the same resources.

It's simple math, really. And a site like this is much needed in the Internet community. Personally I'm shocked and amazed that no one has done it already.

http://cachefile.net/

So then, now it's done. And I'm gonna go get back to work on my other productive projects.

kick it on DotNetKicks.com

Currently rated 4.5 by 2 people

  • Currently 4.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , ,

Pet Projects | Computers and Internet | Web Development

A Perusal of Game Engines and APIs

by Jon 9/15/2007 8:58:00 AM

Today at Desert Code Camp I presented a session called A Perusal of Game Engines and APIs.  This was totally just for fun (I'm not a game developer! .. but I tinker ..)

Fun as it was supposed to be, I took some vacation time to make it happen, and I got through it (and did a moderately decent job I suppose, for getting only two hours of sleep due to cramming), but not without some hair-pulling and the near-shedding of tears.

I covered mostly open-source stuff but also the obvious stuff (including commercial bits) one can find right off the Internet. Here is my PowerPoint 2007 presentation:

http://www.jondavis.net/misc/A_Perusal_of_Game_Engines_and_APIs.pptx

One minor error I made is that I forgot about XInput (which in XNA deprecates DirectInput). I also was not certain about XACT as to whether it complements DirectSound or obsoletes it outright, but I did give a nod to XACT's asset management tool.

Now if you'll all excuse me, I need to get some sleep and prepare for tomorrow's session, An Introduction to Microsoft XNA. (More cramming...  *sigh* )

Open-Source Desktop: Giving It Another Go

by Jon 8/31/2007 8:02:00 AM

A week or so ago I posted a blog entry describing why I felt that Linux simply isn't the long-term answer for the need for an open-source, community-supported desktop operating system. I got some good feedback on this, as well as some not-so-helpful feedback ("here's another troll", "this goes out to everyone ELSE, not to Jon Davis, who has clearly made up his mind", etc). I also commented that Haiku looks beautiful and is quite promising since it is based on (that is, inspired by and compatible with) Be OS, which is the closest I've seen yet to an OS done right, but that Haiku won't be the answer, either, until it gets past R1, which may or may not ever happen. Meanwhile, I brought up ReactOS and how it isn't the answer, either, because if we wanted Windows we can just install Windows. (Couldn't say that about Haiku / Be OS because Be OS is no longer available.) Over the last week I downloaded the latest React OS build and ran it in VMWare. It's not nearly as far along as Haiku is, in terms of stability (not to mention the front-end aesthetic talent). Finally, one of my biggest complaints about Linux--the rediculously arcane file system layout which never seems to go away--seemed to have been resolved in Gobo Linux, until I realized that it's even worse: it's Proper Cased, and since Linux uses a case-sensitive file naming system (which sucks), that makes Gobo Linux nearly unusable for administration, having to constantly check the case of each and every letter rather than just trust that everything will be lower case.

I came across a few interesting tidbits of information since that post. I also received my old laptop from repair (replace the keyboard for a missing 'O' key), an Acer Aspire 5050 that I got at Wal-Mart about ten or eleven months ago, and I decided that since the laptop has since been replaced, before I go pawn it off I should format the drives and actually try installing Ubuntu Linux on it so that no one can say that I've only tried Ubuntu within VMWare. Unfortunately, the latest Ubuntu Live CD doesn't even boot on my newer Toshiba Satellite X205-S9359, so I couldn't even try to install it on my old laptop hard drives that were replaced. Sheesh.

Compiz-Fusion seems to be for Linux what Aero is for Windows, at least in theory. I still have not gotten it to work; "GL Desktop", which I assume is related, doesn't seem to do anything when I turn it on from the System menu. OpenGL stuff does work--I ran the OpenGL implementation of Tux Racer, worked beautifully. I tried the drivers from ATI/AMD but the stuff won't execute. Changing the Compositing option in the xorg.conf file doesn't help. *sigh* Oh well I'll keep tinkering.  UPDATE: I did get it to work, partially. At least, I get the wobbly windows. Not much else, though, like I can't get the Emerald themes to turn on. Seems there's some limitations on my video card chipset such that they disabled 3D support (even though my video chipset fully supports high-performance 3D).

Device support for Linux at install-time is improving, as are the tools for device support, but it is still an awful mess. I have never seen so many files fly across my terminal screen in my life just to try to install the ALSA audio driver. And with it installed, there's still no sound. Hello, guys? If there's no sound, the audio control panels shouldn't behave like everything's hunky dory. For the specific sound card driver I've scoured Google and Ubuntu forums regarding ALC883 support and it's clear that other people are having trouble with this sound card, so I'll have to keep tinkering with this. But that's not the point with regard to it being a mess. Scanning the forums for support, it confounds me how comfortable people are with opening up configuration files and toying with them, the only difference now is that they use gedit instead of vi. Holy cow, someone needs to give these Linux developers a lesson on UX! It has nothing to do with editing in a Windows-like editor--I have actually finally gotten used to vi, and prefer not to have to move my hand to a mouse to reach the scrollbar.

The ideal desktop operating system should not use antiquated techniques like service-proprietary configuration files, or configure / make / make install, not even if that stuff is hidden from view using some wrapper shell which in the long run only makes things more complex. In fact, compiling anything outside of a JIT'er seems rediculously arcane to me. Call it a matter of opinion, but that's one thing I really like about having a central authority (like Microsoft) to basically say this is exactly how hardware drivers should be deployed. Don't get me wrong, Windows is a mess of its own with its Registry mess, etc. But then why do you think the notion of open source desktops has gotten me curious (and critical) lately?

On that point, yes, I get it, I get that Linux's advantage is that, being an open system, it is necessary for stuff to be "recompiled into the system" but really makes me wonder why Bill Gates, rather than Linus Torvolds, is given the Borg treatment, when assimilation is done in Linux at a technical level at runtime in much the same way Microsoft traditionally did using business agreements. For that matter, what's so wonderful about a system being "open" for some source code to compile against any of its many flavors and then (crossing fingers) maybe run, as opposed to having just a few "flavors" and putting time and energy (and, yes, money) into making sure that the stuff has already been compiled, is already known to run, and will almost certainly "just work", assuming that there are no device hardware driver conflicts.

Wouldn't it be ideal if there was a cleaner pluggable hardware abstraction model that the operating system exposed and that drivers could just plug into in a cleaner fashion than the nerdy way the stuff is managed now? Isn't that essentially what a kernel is supposed to do, along with executing user-level applications? Virtual device drivers suddenly popped into my head, a la VMWare and its virtual machine and virtual devices. Abstraction is so cool. Say, why can't each basic hardware function that software expects to be able to use--file system I/O, video card / display, audio, keyboard, mouse--all be cleanly tucked into a clean API that the hardware manufacturers' drivers sit on top of, rather than vice-versa. Why can't we put them into a virtual hardware sandbox? Why can't hypervisors be taken to such an extent as to allow for physical base-level hardware to be virtualized, so that each hardware device driver "sees" a virtualized reality?

Of course, then performance and virtualization management become the huge issues.

More importantly, this isn't particularly a realistic notion since currently hardware drivers literally read/write to/from memory spaces that the kernel maps to the physical device, and execute by way of things like IRQ events. Sometimes I wonder, though, why even that shouldn't be rethought. But now I'm getting into real physical hardware design space, so it's not like I can just pull up a trusty C compiler and recompile a new motherboard. Besides, putting hardware device manufacturers into a software sandbox certainly stifles their opportunities to innovate.

Over last weekend I thought it would be cool, if naive, to actually spawn off YAOS (Yet Another Operating System), derived from nothing, but appended with virtual support for Win32 (like WINE) and Linux (like Cygwin), but inherently have its own system. After all, that is essentially what hypervisor operating systems propose to do. The difference is that it would be ideal if the hypervisor operating system itself could be a viable operating system.

VMWare ESX and Xen, being hypervisor operating systems, run on the Linux kernel variants.

Windows Server 2008, having hypervisor support (however limited, I'm not sure), runs on, well, Windows.

Good starts on hypervisor concepts, but why not take the opportunity to flush out this legacy stuff and build a hypervisor-supporting system that can also be a new OS? Oh how I would love it if, once R1 stablizes, the Haiku operating system added hypervisor support!

I'll post to my blog here at http://www.jondavis.net/blog/ as I continue to tinker with Ubuntu on real hardware.

Map My Mind

by Jon 7/16/2007 7:25:00 PM

At my last job, a business partner was taking notes using some mind mapping software. I had never seen such software before; it got my attention. She managed to capture an outline bullet on every little facet of information that was divulged in a day-long meeting consisting of some thirty or so sales staff all of whom had an opinion about the requirements about the product we were about to implement. I was spellbound. 

The software she was using was MindJet MindManager Pro (http://www.mindjet.com/us/).

Eventually I got PDFs and Word docs of her output, and I had to help compile a legible 200-or-so-page design document (one among a zillion other reasons why I quit that job), I quickly realized that as handy as the tool seemed to be, it didn't seem to be very useful from where I sat after receiving its output. This is NOT a documentation tool!! It is a brainstorming tool, and realistically it can only be fully comprehended by the person who prepared it.

Nonetheless, there have been a few times in the last year or so that I really wanted such a tool. Actually, it was just for pet projects, not so much for work. But I cannot afford MindJet's offering at $350. So I quickly found FreeMind (http://freemind.sourceforge.net/wiki/index.php/Main_Page). It's Java-based, but I forgive. Some parts of it feel a bit obsolete, the diagramming feels a little unpolished, and the icons it seems to demand that you place are rather cheesy. But at the basic level, it does the job.

I came across MindApp (http://www.mindapp.com/) which costs $29 after a free trial, which is far more affordable than the $350 offering from MindJet. After completing my brain dump with it I felt like it's perhaps worth the $29 because of some extra polish and formatting features, but it has quirks, such as messed up font size in the HTML output. However, I didn't find myself compelled; the gap between it and FreeMind is tiny compared to the gap between it and MindJet's MindManager. I want more.

On a side topic, wanna know what I was brain-dumping? Well, a couple months or so ago I heard about another public database going down (this time a free TV listings service). Wouldn't it be nice, I thought, if public access databases were maintained by the Internet community rather than just one company that could shrug its shoulders one day and walk away? This had me thinking about my old Peer-to-Peer file sharing idea...

For many years, before Azureus, before Morpheus, before Kazaa, even before Napster (but somewhere close to the days of Metallica's relevance), I had an idea about peer-to-peer technology. Specifically, seeding a distributed database, by injecting metadata (i.e. XML attachments) to NNTP posts into an alt.* Usenet newsgroup that would contain IP addresses, DNS hostnames, and/or URIs, along with function metadata, describing the whereabouts of a peer service seed. This, in my mind, took hosted distributed peer-to-peer network seed hosts out of the equation; Usenet already propagates the metadata that would be needed to seed something like that.

But acknowledging that some level of organized seeding is necessary, I registered these domain names:

  • DistributedDB.org
  • DistributedDB.net
  • DistributedDB.info

The objective for a site that would use these domain names is NOT just for P2P networks--that backstory was just an example of a trigger that led me down this path. Rather, the objective is to give people a place to either dump tiny data records, or else to proxy or alias their own network services. The service would be free but with some maximum records or limitations.

Here's what my rather small brain dump looks like.. (oh, and yeah, it's alright, I know you can't read it...)

image

I'll divulge more later. Need sleep.

Currently rated 2.5 by 2 people

  • Currently 2.5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Pet Projects | Cool Tools | Distributed Database

Command-Line Google Updated

by Jon 5/26/2007 3:04:00 AM

I toyed around with using my command-line Google interface and noticed a couple serious flaws. I fired up the source code and cleaned it up a bit.

  • Still very lightweight and simple
  • You can now open a URL that was listed in a previous page
  • If you change your query term, the page number correctly resets itself to Page 1

http://www.jondavis.net/codeprojects/CmdGoogle/CmdGoogle.zip

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: ,

Pet Projects