?
header
Welcome to BeNOW.ca, Andy's tech musings, open source projects and other misc comp shite.

Web API dev tools get smarter.
Development with web api has been facilitated recently via the improvement of the in-site editor, generators within the editor and xsl library auto-documentation.

The editor was improved a few weeks back to now use codemirror, an in-page javascript editor which provides high level editor functions, including syntax highlighting.

Hotkey saving is done via ajax with save errors displayed. The codemirror javascript api is very nice, and provides the ability to query text, cursor position and perform text inserts. Through these functions, I was able to further improve the generation ability. When pages are being edited, there is now the ability to have assisted generation of svc tags (service call includes), service form submission, service javascript calls and xsl library template calls.

These generators allow for easier page design, as the syntax and specifics (ie class name, method name, parameters, etc) don't have to be directly remembered by the coder, but are presented nicely through the generators.

Additionally, I've created a view of XSL libraries, which details the library contents at a high level. This is somewhat akin to a dynamic javadoc, and simplifies the tasks of finding, using and implementing templates within XSL libraries.

- 03:31 PM, 07 Feb 2010 No comments - reply

VMware Server 2.0 on Ubuntu
I recently installed VMware server 2.0 on Ubuntu 9.10. It is being used to host and expose virtual machines. It's quite a gem and I went through quite a bit of work to figure out the solution, so I thought I'd mention it.

It's free, it has a great web interface, it runs on linux and it uses standard (vmplayer compatible) VMware VMs. We have many different systems, on differing operating systems and in differing configurations, so the maintenance of physical boxes was unrealistic. I was using several VMs locally for development and testing, and it made sense to move those VMs onto an accessible box which could expose them directly. I initially thought VMware ESX was the answer, and installed and configured a server, but there were many issues, and VMWare server turned out to be a better choice. Specifically ESX

  • has strict hardware requirements, which made installation and bootstrapping difficult. It only works on 64bit machines and only likes certain hardware (ie only some sata and network chipsets). This meant I could not start it up on the laptop and move VMs from the workstation as it would only boot on the workstation
  • it uses a different (non standard) virtual machines. This meant that I had to juggle existing VMs into new VMs, which lead to more troubles. As ESX does not support IDE virtual hard drives, Windows VMs using IDE interfaces wouldn't boot (without serious wrenching)
  • management client is windows only
  • is not free
I'm sure these issues are not so big when looking at a fresh, dedicated, large scale datacenter deployment. Also, the more advanced features of ESX were not all that useful to the small installation we required, and the advantage of being its own OS (ie hypervisor) was actually a hinderence due to restricted hardware compatibility. For this small shop (ie me), these issues were enough to have me look elsewhere.

Ubuntu is quite solid and light enough to be a host OS, and I remembered hearing of bridged networking in VMware Server. I was quite happy to see that there's been a big change with the new release. VMware Server 2 is now a standalone headless service. It presents itself as a great web app, through which VMs can be added, created and managed. The installation within Ubuntu is a bit tricky (especially with 64bit). The modules failed to compile, and required a patch to compile properly. The existing VMs were imported correctly, for the most part, but no networking. Removing and re-adding the network hardware and upgrading the VMs (through a simple link from the server web page) did the trick. The networking for the VMs is running as bridged, which allows unused IPs of the host to be routed to the VMs directly. The VMs can be reached just as if they were actual boxen on the network... very nice.

This procedure was a bit tedious due to the ESX evaluation, installation headaches and physical/virtual machine juggling, but the end result is fine. We now have a nice, flexible way of testing against anything we can install... and it's free. It's also a fine example of just how powerful web based applications can be. Two thumbs up for VMware Server.

- 08:46 PM, 28 Jan 2010 No comments - reply

Much improved documentation for web project
The web project has much improved documentation, including tutorials and a walkthru of the development of a simple application. The tutorials were done on my trip this summer, while the walkthru is a larger example intended to demonstrate the greater design of a web application. I'm continuing to use the framework professionally, and am using the documentation in the training of a few new employees within the (small) company.

The documentation is quite good enough for you to work and learn from, if you're so inclined.

When there's few updates, it's often for a reason ;) I should be posting more, however. I've added twitter and facebook links at the bottom, if you're missing the more frequent updates, for better or worse.

- 11:41 PM, 14 Dec 2009 No comments - reply

Apache Derby Support into Repository
Apache Derby is now supported by the repository persistence project. Derby is an excellent and quick pure-java JDBC accessible SQL db, which is easily run in embedded mode. Running in embedded mode means that there is no longer any configuration step where the user has to ensure that a database engine is installed, configured, up and functioning. With Derby, the db is automatically created spooled up and the repository automatically handles the table creation, object persistence, query construction and object storage (as it did before). This time around, the metadata is managed through the JDBC metadata facilities and the connection is direct, so the repository is very quick. It seems quite reliable, and has passed all validation tests and I'm now using it as the backend for the TV project. If it can handle a listings grab and persistence of 10,000+ objects, it's doing ok. This is quite the milestone, as it makes applications all that more easy to deploy.

Derby is now the default backend and is available in the repository nightly build or other projects which use the repository, such as web or the tv project.

- 08:36 PM, 13 Oct 2009 No comments - reply

IMDb Favourites and Stream Server developments
Jivo has a couple new things in the works. The favourite mechanism is being worked to allow for different types of favourites and a StreamServer network multiplexer is being constructed.

As it stands, the original favourite mechanism allows for loose specification of listing items. All shows named 'Iron Chef America', all subtitles containing 'Aston Villa', etc. It's been refactored with interfaces and abstraction and implemented as a ListingsFavourite. An IMDb favourite has been created which will allow for querying of IMDb data (fetched nicely during listings grab). Example IMDb favourites might include all movies with rating higher than 7, movies directed by David Cronenberg, movies starring Steve Martin, movies featuring a character named 'Roosevelt', etc. Also combinations, so, dramas featuring John Candy, etc. Favourites have been extracted to registered interface implementations, which allows for autodiscovery (ie a plugin). As in the IMDb favourite plugin works with the Augmentable framework which provides information from various locations to be loosely associated with data. In such a way, other augmentations and plugins allow for data from wherever to be associated and queried. This could extend to information for tv shows, actor data, etc.

Additionally I worked up a StreamServer which multiplexes a singleton source across multiple clients. This is to provide the ability to both watch and record from a source. Currently when recording a source cannot be watched, and vice versa. With multiple receivers (and multiple providers) in the works, things become more interesting without this limitation. I intend to expand the live streaming, so as to be able to see what sources are available and to watch and (if not recording) control the sources. This will allow for switching between recording streams. The StreamServer is data agnostic, and relies on smarter clients. It streams mpeg as well as it streams mp4 as well as it streams audio, etc. There is, of course, the ability to attach an on demand re-encoder/distributor so that multiple clients can stream from a single source... to multiple tv's or across the net. Should be interesting.

One of the long term goals is to capture from many sources from many providers. On a somewhat standard PC, it is possible to have 8+ capture cards. While not typical, such a configuration would be quite useful for fringe geeks... record the entire NHL season, multi-national sources, etc.

- 12:16 AM, 05 Oct 2009 No comments - reply

Nice weekend means more Jivo smoothing.
I hit the backcountry again this weekend. Had a few fine nights in a beautiful empty rec area and coded away. It was chilly at night, and so I think the end of the season is near :(

Jivo, the TV project, got a few refinements this weekend. I wrapped the current record process in a task, so that recording progress can be seen from the task manager, along with listing grabbing progress:

I also updated the initialization process. As defined in the repository project, when the db is not found, tables for objects are created along with security info. Previously, the system would prompt at the command line for an administrator password, but that would be a problem for those with command-line-itis. Now, a random password for the administrator is generated, and the administrator is set to be unconfirmed. Whenever any page in the site is hit, it redirects to a page which asks for a new admin password. In this way, the app is the only interface that's needed. All configuration, etc, can be done thru the app (eventually;). This change has been added to the web api, so all web applications behave in this way. It's another nice step forward:

Additionally, and most excitingly for me, javadb (derby) support within the repository api is nearing completion. This will allow for zero configuration object persistence to a fast and solid SQL backend. The repository api currently works well with firebird (which is an excellent db), but firebird requires installation and configuration by the user. As such, it is an impediment to seamless deployment. Derby is the standard java database written in java, and can (and does) run in imbedded mode. This means that the db will run on any platform that java runs and will require _no_ user intervention at any time. There's still a few syntax and transaction quirks to work out, but it should be supported shortly. I've had it running in tests as the db behind the tv project, and it works well and is faster than firebird. It also uses the JDBC metadata to perform schema queries which results in quite a speedup for automated schema maintenance.

I did also find the time to melt, prodded and re-melt at Radium Hotsprings... very nice.

EDIT: updated with better task shots

- 12:28 AM, 28 Sep 2009 No comments - reply

IMDb Project
I've released a new project, imdb. It forms queries and scrapes imdb pages for results and extracts Search and Movie related objects. I'm using it for data intersection with the TV application, and it works well enough to release it. Someone might find it useful.

- 10:02 PM, 23 Sep 2009 No comments - reply

Summer vacation of sorts
I'm taking off tomorrow on a month-long trip to the northern tip of Vancouver Island and back. I'll be leaving with a friend and hitting Ainsworth and Nakusp hotsprings, Ellison Provincial Park near Vernon and on to the Nanaimo ferry. From there, we'll lazily travel over to Gold River and Thasis, then up to Port Hardy and over to Cape Scott provincial park on the very tip. I'll come back from the island slowly, stopping to visit friends and hotsprings. I'm taking tech with me, and, after a brief respite, will be coding from the road. I'll be extending and improving some of the api's along the way. The little Honda ie2000 generator will be purring away and I'll have a chance to test out the cell phone amplifier, which should help to give me reliable internet from the near back country.

I'll be taking lots of photos and updating the site from the road. Click on the thumb for a somewhat older overview of the trip and read more for the details (updated as we go).

EDIT: it's done. updated to the return

- 08:10 PM, 17 Aug 2009 Read more... (17198 characters) No comments - reply

Jivo iPod Remote Remote Overhaul
I've update the Jivo remote pages to include an in-page remote pane, on all pages. This reduces time for display of the remote pane and provides easy access to a traditional remote interface. It only adds a small amount of time to the page load/render, and makes it more useful. Other small enchancements are being done to usability, and the remote interface is looking and working better.

I found my lost 30G ipod touch deep in the depths of the lazboy, and now have two... which is a good thing, if expensive. There's a dedicated ipod for a remote now, which should mean it sees more use and more features are added/smoothed.

Saw Moon the other day, and it was clone-a-riffic. Sci-fi is a great stage for rumination on theory... exploration of possiblity. If your local indie theatres are as slow showing releases as ours, or hang on to the good ones, it should still be playing...

Click thru for a screenshots of other modified pages...

EDIT: I've added a few more recent screenshots and it now gives a current overall view of the ipod/iphone remote interface.

- 12:23 AM, 09 Aug 2009 Read more... (3393 characters) No comments - reply

Local Video Playback Into Jivo
Streaming video playback (via vlc plugin) has been in jivo for a while, but tonight I added local playback, controlled via ipod/iphone as a remote. What this means is the videos can be browsed from ipod, then selected. When selected the video info is parsed and playback starts with mplayer on the local machine. The ipod/iphone then shows the clip info and buttons for controlling playback, which occurs on the media box OS (ie, on the TV). Mplayer is started in '-slave' mode, where the video is played back and mplayer listens for commands on the standard input of the process. I built up a light wrapper for mplayer which takes care of the process and stdin management, and exposes methods like pause(), seekPercentage(double), seekRelativeSeconds(int), etc. The web page (displayed on the ipod) then uses service calls (via ajax) to invoke commands. It's nice and slick, and one less piece of the puzzle.

The shot to the left is the early page. I hope to introduce percentage seeking bar and volume and osd buttons. It would also be a fine place for future video features, such as rating, video trimming, annotation, etc.

- 03:15 AM, 01 Aug 2009 No comments - reply

older > >