How To Publish Screenshots

Friday, May 16, 2008

A forum user recently suggested that a nice feature to add to Raven would be a slick screenshot tool akin to what can be found in OneNote. Apparently they have a cool feature where you can take a screen capture of only a specific part of the screen (by specifying a rectangle using a screen capture tool). Once taken, the screen capture is then injected into OneNote.

This made me realize that, while we could implement such a feature, we should be able to come up with a decent workflow to take screen captures with the current Raven build. Raven has the ability to paste an image that is on the clipboard directly into the blog post. For example, you can do the following:

  1. Open Raven
  2. Create a new Post or edit an existing one
  3. On the keyboard, hit Alt-PrtScrn (the Print Screen key)
  4. This will take a screen capture of just the current window (not the whole screen)
  5. Back in the Raven Editor, paste (Ctrl-V)

I'll try this now, and insert the resulting screen capture...

Of course, after I pasted the image into my blog post, I then created a thumbnail of it. But you get the idea.

The part we're still missing is the ability to capture only certain parts of the screen by specifying a rectangle. To enable that behavior, I think another tool is required. On the forum, it was suggested that Snagit could fulfill this role, although I have not used it myself. Suffice it to say, there must be a handful of utilities out there that one could use to take partial screen captures. Once the capture is taken, and the image is on the clipboard, Raven will let you paste it right into the Editor. Done and done.

Labels: , ,

How To Backup Your Data

Tuesday, April 8, 2008

A question that we recently had asked on the forums was "How do I backup my Raven profile data?" This particular user was interested in doing this due to a needed re-install of Windows. I think it's a good question in general, so here's how you do it.

Raven stores all user data in your profile. You may have as many profiles as you want, but most users will likely have only one. You use the Zoundry Profile Manager to add, import, create new profiles. For backup purposes, simply backup the entire profile directory (or directories). By default, the profiles are located in your Application Data directory, for example:

C:\Documents and Settings\ZoundryMan\Application Data\Zoundry\Zoundry Raven

Of course, unless you log in as "ZoundryMan", that part of the path will be different (your username). For the record, I don't mind if you use "ZoundryMan" as the username for your computer. :)

If you are using Raven2Go, then your profiles will be in a "profiles" directory within the Zoundry Raven installation directory, for example:

E:\Portable Apps\Zoundry Raven\profiles

When restoring from your backup, all you need to do is copy those profile directories back to your computer. Feel free to put them wherever you want, although in most cases putting them back where they were before is best. Once you have done that (and presumably re-installed Raven) it is a simple matter to add them back in. Run Raven, and choose New in the Profile Manager. You will see the Create New Profile dialog. In that dialog, name your profile whatever you want, and point the path to one of your newly restored profiles.

That's all there is to it.

Labels: , , , ,

Raven2Go - First Post Using Portable Raven

Wednesday, March 19, 2008

The next beta release of Zoundry Raven will support the ability to install as a portable application (e.g. onto a flash or other portable drive). This is a feature that was requested by many users, and I'm happy to say that we have finally finished the initial support for it. In fact, I am composing this post using Raven2Go installed on a Memorex TravelDrive. It's a bit slow when compared to running off a hard drive (obviously) but it works pretty darn well!

The changes to Raven to support Raven2Go are, for the most part, hidden from users. There are a couple of things that I should mention, however. First, there is a new page in the Raven Installer. This custom installer page simply has a checkbox that can be checked if the user wants to install Raven as a portable application. If the checkbox is checked, then no application information will be saved to the registry. In addition, when Raven is run after being installed in this way, it will run in "Portable" mode.

The other relevant change for users when Raven is in "Portable" mode is where profiles are stored by default (and where the profiles.xml registry file is located). When in portable mode, Raven looks for a "profiles" directory in the install location. For instance, if you install Raven2Go to E:\TravelApps\Raven, then the profiles.xml file and the default location for newly created profiles will be E:\TravelApps\Raven\profiles.

Everything else that's different between Raven2Go and Raven is under the covers, so users shouldn't have to worry about it. For the most part, it simply means that where we used to refer to files in your profile using absolute paths, we will now use relative paths. This should allow you to take your portable drive to different machines (where the drive letter might be different) and everything should still work.

One thing to note for existing users - I would recommend doing a clean uninstall/install of Raven2Go if you have previously been using Raven on a portable device. The uninstall step will remove all of the stuff from the registry that Raven put in there (not much, but you clearly don't want it in there). Then the re-install will be clean (little/no registry entries).

Technorati :
Del.icio.us :

Labels: , , , , , , ,

Raven Beta - Looking Good!

Tuesday, February 26, 2008

Well, it's been almost three weeks since we did our first public beta release of Raven. We've been getting a lot of feedback from our users (thanks!) and so far it has been overwhelmingly positive. We have some bugs, and we have a lot of work to do before we can release a 1.0 version, but I think we're off to a good start. I think we're closing in on 1000 users of Raven - we should probably hit that number today or tomorrow, actually. A big thanks to everyone that has downloaded and tried the beta.

Stick with us, Raven will only get better with age!

Technorati :

Labels: ,

Zoundry Raven: Build 0.8.154

Thursday, November 29, 2007

Alpha version 0.8.154 is ready!

Link: http://www.zoundry.com/raven/builds/zRaven-0.8.154.exe

Release Notes

Enhancements

  • All New Template Manager - allows you to add and remove templates and associate them with your blog or account

Bug Fixes

  • Fixed a problem with the Spanish (and possibly other languages) dictionary
  • Fixed the wrong-timezone problem in the background task dialog
  • Fixed tab order in the Edit Table Settings dialog
  • Fixed the problem: "'NoneType' object has no attribute 'getAccountId'" when deleting post from Drafts
  • Fixed a problem with the icon that shows up in the Windows Task Bar when multiple Raven windows are open and all of those windows are "grouped" together in the task bar
  • The title column in the Drafts view is now "Modified" rather than "Published" (since it hasn't been published yet)
  • Fixed problem: "Add Template dialog shows warning icon next to FromBlog even is blog is selected"
  • Fixed a problem where the Preview tab of the blog post editor would sometimes show the wrong template in the combo (though the template content was right)
  • Resolved issue: "Preview Tab sometimes uses the wrong template"
  • Fixed problem: "When closing the app, user is prompted to save dirty editors twice"
  • Fixed problem: "Editor doesn't update to new templates being added."

Known Bugs

  • Standard Perspective - Blog Post preview sometimes steals the focus from other controls
  • Templates don't look exactly like they do in the browser. We know why and are working to fix it.

Labels: ,

Zoundry Raven: Build 0.8.143

Monday, November 19, 2007

Alpha version 0.8.143 is ready!

Link: http://www.zoundry.com/raven/builds/zRaven-0.8.143.exe

Release Notes

Enhancements

  • All New Template Manager - allows you to add and remove templates and associate them with your blog or account

Bug Fixes

  • Fixed error: 'local variable 'idx' referenced before assignment' in Links view

Known Bugs

  • Standard Perspective - Blog Post preview sometimes steals the focus from other controls

----

Ok guys - we finally have the template manager to a point where we'd like you guys to test it out. It's still not 100% there, and the UI for the manager is a little rought yet, but it should be functional and therefore testable. Please have a go at it and let us know what you think (and if there are any problems).

There are several parts to the new template handling:

1) The template manager dialog - lets you add and remove templates
2) Blog Post Editor - Preview panel now lets you choose between your templates (it pre-selects one when applicable)
3) Standard Perspective - Blog Post Preview should use the right template, where applicable
4) Account/Blog Prefs - there is a new section that will let you change which template is the default to use for a particular account or blog

Please note: templates downloaded using previous builds will no longer work. I apologize for this - I just didn't do it right the first time around.

From now until we release into beta, we will be focusing on bug fixes. There won't be any new features until we are in beta.

Labels: , , ,

Zoundry Raven: Build 0.8.134

Friday, November 2, 2007

Alpha version 0.8.134 is ready!

Link: http://www.zoundry.com/raven/builds/zRaven-0.8.134.exe

Release Notes

Enhancements

  • None (but we're working on better Blog Template Management, hopefully next build)


Bug Fixes

  • Fixed a problem where the editor loses focus and selection information when switching to other apps and back
  • HTML table columns can now be deleted more easily (the entire column will be deleted properly)
  • The editor's Save button will now become active when table changes are made
  • The 'insert table' button will now insert a table
  • Fixed a problem with images not centering properly in Firefox
  • Fixed a problem with the pre-publish validation dialog that would sometimes cause a stack trace
  • Fixed a problem where switching from one tab to another could cause a stack trace: 'This command is not supported'
  • Fixed a possible stack trace in the HTML Table dialog: "invalid literal for int()"
  • Fixed a possible stack trace when closing a tab in the Editor: "The C++ part of the ZMSHTMLBlogPostEditControl object has been deleted, attribute access no longer allowed."

Known Bugs

  • Standard Perspective - Blog Post preview sometimes steals the focus from other controls

Labels: ,

Zoundry Raven: Build 0.8.128

Friday, October 26, 2007

Alpha version 0.8.128 is ready!

Link: http://www.zoundry.com/raven/builds/zRaven-0.8.128.exe

Release Notes

Enhancements
- Added support for LJ file upload
- Better prompting for deleting of blog posts: if the post is local-only vs. published to only 1 blog vs. published to multiple blogs
- When creating a new profile, you can now import your settings from Windows Live Writer
- Implemented Download toolbar button (no longer get stack trace)
- Implemented Indent editor toolbar button (no longer get a stack trace)
- Added HTML Table support in editor
- On startup, auto-detect the presence of Zoundry Blog Writer and prompt for import
- On startup, auto-detect the presence of Windows Live Writer and prompt for import
- Picasa WebAlbums image upload support (media storage type)
- LJ Scrapbook image upload support (media storage type)


Bug Fixes
- Save button not becoming active in the editor when changes are made
- Downloading posts in LJ - no longer capped at 20 posts
- When changing font attributes, only those that were changed are updated
- When adding a hyperlink, the focus now gets put AFTER the http://
- When Pasting HTML with IMG tags, bogus width and height attributes are no longer added
- Del key now works to delete a post (standard perspective)
- Filter by time (Today, Yesterday) works properly now (had timezone issues before)
- Fixed local images in Standard Perspective - they now work and display properly
- Feedback dialog now remembers your email address if you enter one (it's still optional)
- bandersnatch42vt's blog post download now works Smile (this was an XML entity issue - xhtml was not well formed)
- Some plain text documents were not getting converted to xhtml correctly
- Better cancelling during blog posting
- Validate blog post when publishing (check for missing resources, etc...)
- Drag and Drop improvements: when you drag over the editor, the editor window will come to the front and there is now some caret movement as you drag around the editor (feedback)


Known Bugs
- Standard Perspective - Blog Post preview sometimes steals the focus from other controls

Labels: ,

Zoundry Raven Alpha Build: 0.8.113

Thursday, October 4, 2007

Alpha version 0.8.113 is ready!

Link: http://www.zoundry.com/raven/builds/zRaven-0.8.113.exe

Release Notes

Enhancements

  • When creating a new media storage, it will now be automatically associated with any blogs that are not already mapped to a storage.
  • Added a right-click context menu item for "Image Properties" when right-clicking on an image in the editor.
  • Added double-click support for images in the editor - double clicking an image will now open the Image Properties dialog.
  • Importing Zoundry Blog Writer 1.0 profiles into Raven will now import the user's personal dictionary (currently only works for US English).
  • Added some meta data to the index (last 'synch' time) which allows us to figure out if a blog post is dirty - so now in the Blog Posts List View, you will see a different icon for blog posts that are dirty (only applicable to published content, obviously).
  • Implemented the "View (online)" toolbar button in the editor.
  • Modified how the main window's views' drop shadows were being drawn to make them faster and less prone to paint problems.
  • Implemented Insert Image Tag in the editor (toolbar item).
  • Find/Replace dialog now remembers the recent searches.
  • Added a shortcut key (Alt-T) that will position the cursor in the editor's "Title" field.
  • Better initial focus when an editor opens - focus is now put in the Title if the post doesn't already have one (new posts, typically) otherwise it is put in the content.
  • Added a Feedback dialog - go to Help->Feedback to either 1) report a bug, 2) request an enhancement, or 3) tell us how awesome we are.
  • Added "New Blog Post" option in the Tray Icon's right-click context menu.
  • If you only have a single Blog, the editor will now always pre-populate the blog selection for you, rather than leaving it blank and making you select it each time.
  • Implemented crash-recovery support. Snapshots of your content are now taken every minute as long as you have a dirty editor open. Then, if the application crashes or is terminated, those snapshots can be recovered on the next startup of the app.
  • Included a new program/application icon for Raven.
  • Implemented the Font Options toolbar item in the editor.
  • Re-ordered publishing tabs so that Categories (the most frequently used one) is shown first.

Bug Fixes

  • When a blog post is deleted, the toolbar no longer remembers it - a new post is selected, if there is one, otherwise an empty selection is made.
  • Drag and Drop an image from a web browse should now be working better. There may still be some lingering width/height problems.
  • Publishing a document using the Publish toolbar item in the main application window (not the editor) now works properly in all cases (there was a problem where old content would get remembered and published, whacking new edits).
  • Removed the "Test Settings" option from certain types of media storage (such as Image Shack) since some storage types don't support delete.
  • Editor toolbar now properly refreshes when content is saved (e.g. the 'View online' button will now become active automatically when a blog post is published).
  • Fixed a problem with image sizes not being updated properly when (re)thumbnailing.
  • Fixed a problem with a border getting added to an image incorrectly when modifying image properties.
  • Fixed a problem where restoration of dialog settings (size and position) could sometimes cause a dialog to be positioned off-screen.
  • When the cursor is in the Tagwords field, hitting Tab will now move the focus to the content.

Known Bugs

  • Standard Perspective - Blog Post preview sometimes steals the focus from other controls

Labels: ,

Zoundry Raven: Build 0.8.88

Monday, August 27, 2007

Zoundry Raven Alpha version 0.8.88 is now ready:

http://www.zoundry.com/raven/builds/zRaven-0.8.88.exe

Give it a try and let us know what you think. Any and all feedback is welcome.


Release Notes

Enhancements

  • Added spell-check UI (simple/standard spell-check dialog)
  • Added find/replace UI support (basic dialog)
  • Added an editor toolbar button for "Extended Entry" marker
  • Added a right-click context menu that appears when right-clicking on an image in the editor
  • Context menu item for copy link/copy image location in UI
  • Context menu option for removing TextMore marker
  • Download main toolbar button is now a drop-down, offering various download options
  • Created a new Progress Dialog that is shown when publishing/downloading tasks
  • Added new main toolbar button: "View (on-line)" that is enabled for Blogs and Documents
  • Added new main toolbar button: "Add Blog Account"
  • Added new main toolbar button: "Add Media Storage"
  • UI now supports publishing to multiple blogs! (well, up to 3).

Bug Fixes

  • Fixed a problem downloading templates for Typepad blogs
  • Editor toolbar buttons (cut, paste, undo, etc) are now disabled when in preview tab
  • Fixed a unicode error that was happening when publishing to Blogger
  • Main toolbar buttons now become active when selecting a Post in the "Where Found" list
  • Temp files are now cleaned up when the app starts

Other

  • Renamed "Media Store" to "Media Storage" to avoid confusion

Labels: , , , , ,

Zoundry Raven: First Post

Thursday, July 19, 2007

Well, this post finally represents the first time I've updated this blog using the new Zoundry Raven product. It's been a long road, but I'm hopeful that it is worth it. Shortly we will be releasing an alpha version of the product to our forums. My hope is that we can get some good feedback from a small set of users so that we can better tailor the product to the needs of our users.

Thanks to everyone for being patient. I know it's hard waiting, but we're really trying to create something that can act as a foundation for a really solid, advanced blog editor/manager.

This is by no means the end of this blog. We still have a lot of neat ideas that I want to share. And even though I don't update the blog as often as I should, it is still a good avenue for getting out information about the product.

And it's a good way to eat our own dog food.

Labels: ,

Zoundry Raven: Custom ToolBar

Tuesday, March 13, 2007

BlogPostEditorFull.pngToday I have a couple of screenshots that I would like to show. My intention was to write up just a quick post about a new UI feature that is minor but often requested. Just to show you that we really do value our user feedback, the screenshot to the right shows off two things. First of all, it shows a still early capture of the new blog post editor. We're not done with it yet, but hopefully you will agree that it's looking good. Secondly, two more screenshots below show how the toolbars in Raven can be easily customized. Many of our users have complained that our toolbars are too small, particularly in the editor. To address this, we have made it so the user can easily change the size of the toolbars. To do this, simply right-click on the toolbar and choose from the handy context menu. Note that this also reinforces something I talked about in an earlier post: simplifying the UI by relying more on context. In this case, rather than clutter the UI with a variety of menu items in the main menu or user preferences, the user's toolbar size preference is decided via a context menu on the toolbar itself.

Screenshot of the toolbar menu:

EditorToolbarMenu.png



How the toolbar looks after choosing "32x32" and "Show Text":

EditorToolbarLarge.png

Technorati : , ,
Del.icio.us : , ,
Ice Rocket : , ,
Flickr : , ,
Zooomr : , ,
Buzznet : , ,
Riya : , ,
43 Things : , ,

Labels: , , ,

Zoundry Raven: Media Stores

Monday, March 5, 2007

One of the limitations in the Blog Writer is that only one Media Repository can be configured. The application does allow the user to associated a new Account with either the configured Media Repository or the built-in uploading capabilities of the given Account (if supported by the blog platform). However, it was always our intention to provide a way to configure multiple instance of media repositories (of different types) and allow the user to associate different media repositories with different blogs and/or blog accounts. In Zoundry Raven, we have done exactly that, and it is the topic of today's post.

media_store_man.jpgZoundry Raven allows the user to create and manage multiple media repositories (media stores) using the Media Store Manager. This manager is simply a dialog that allows the user to add, edit, and remove media stores. There will be a variety of types of media stores, such as FTP, Flickr, ImageShack, etc... (more on that later) Once a media store is created, it can be associated with a Blog Account or a Blog. A media store can be associated with a Blog Account during creation of a Blog Account, or later when editing the account's settings. In addition, for more granular control, a media store can be associated with an individual Blog. This way, different blogs, even if they are within the same Account, can use different media stores.

new_media_store.png

When creating a new media store, the New Media Store Wizard is used. This wizard walks the user through the process of creating a new store. It first asks the user to choose a type of media store (and store name). After that, the wizard asks the user to fill in the information needed by the store, such as username/password. This information is type specific, so page two of the wizard will be different depending on the store type chosen. The media store type might be Custom FTP, or it might be a more specific value, such as Ripway FTP. The more specific types are simply there to pre-populate the necessary fields when creating the store. For instance, Ripway FTP and Custom FTP are the essentially the same, except that page two of the wizard will have some values already filled in, such as 'host' and 'url'.

Finally, I want to explain a little bit about the store types and where the application gets that list from. As I mentioned, we are using the extensibility features of Raven in order to make the media stores highly pluggable. Here's how it works. There are two extension points exposed by Raven that plugins can contribute to. The first is the 'zoundry.blogapp.mediastore.type' extension point. This extension point allows plugins to contribute new media store types to the application. Media store types would be things like FTP, WebDAV, Flickr, etc. For the most part, there would be a single media store type contributed for each protocol/API that might be used to upload images to a remote site. Here is an example of the FTP media store type that will ship with Raven.


      <zoundry-extension point="zoundry.blogapp.mediastore.type">
          <id>zoundry.blogapp.mediastore.type.ftp</id>
          <class>zoundry.blogapp.services.mediastore.providers.ftpprovider.ZFTPMediaStoreProvider</class>
          <extension-data>
              <media-store-type>
                  <icon>icons/types/ftp.png</icon>
                  <properties>
                   <property name="host">
                       <display-name>Host</display-name>
                       <tooltip>The FTP host. (Example: ftp.myftphost.com)</tooltip>
                       <validation-regexp>.+</validation-regexp>
                       <validation-error-message>A value for 'host' is  required.</validation-error-message>
                   </property>
                   <property name="port">
                       <display-name>Port</display-name>
                       <default-value>21</default-value>
                       <tooltip>The FTP Port (Example: 21)</tooltip>
                       <validation-regexp>\d+</validation-regexp>
                       <validation-error-message>A value for 'port' is required (and must be a number).</validation-error-message>
                   </property>
                   <property name="username">
                       <display-name>Username</display-name>
                          <tooltip>Your FTP username.</tooltip>
                       <validation-regexp>.+</validation-regexp>
                       <validation-error-message>A value for 'username' is required.</validation-error-message>
                   </property>
                   <property name="password">
                       <display-name>Password</display-name>
                          <tooltip>Your FTP password.</tooltip>
                       <type>password</type>
                   </property>
                   <property name="path">
                       <display-name>FTP Path</display-name>
                       <tooltip>Path on the remote FTP server. (Example: /mypix)</tooltip>
                       <default-value>/</default-value>
                   </property>
                   <property name="url">
                       <display-name>URL</display-name>
                       <tooltip>URL used to retrieve uploaded files. (Example: http://www.myftphost.com/myusername/mypix/)</tooltip>
                       <validation-regexp>(.+):.+</validation-regexp>
                       <validation-error-message>A valid 'url' is required.</validation-error-message>
                   </property>
                   <property name="passive">
                       <display-name>Use 'passive' FTP</display-name>
                       <tooltip>Active/Passive FTP mode. (If your settings do not work, try changing the value of 'passive')</tooltip>
                       <type>checkbox</type>
                       <default-value>false</default-value>
                   </property>
                  </properties>
                  <capabilities>
                   <capability enabled="true" id="zoundry.raven.capability.mediastore.supports-delete"/>
                   <capability enabled="true" id="zoundry.raven.capability.mediastore.supports-file-list"/>
                  </capabilities>
              </media-store-type>
          </extension-data>
      </zoundry-extension>


Now, media store types are never visible to the user. There is another extension point that is exposed by Raven that is called 'zoundry.blogapp.mediastore.site'. A media store "site" essentially represents a real upload site, such as Ripway or Flickr. Each site refers to a media store type, which it uses to do the actual upload. The site is really just meta data that refines the a store type, making it more specific to an actual real destination. Note that in some cases, there will be a one-to-one relationship between a media store type and a media site. This is generally only the case for sites with their own custom APIs, such as Flickr. In many other cases, such as FTP, there will be a one-to-many relationship between the store type and multiple sites. Here is a quick example of a media store site contribution (in this case, Ripway FTP).


      <zoundry-extension point="zoundry.blogapp.mediastore.site">
          <id>zoundry.blogapp.mediastore.site.ripway</id>
          <class/>
          <extension-data>
              <media-site>
               <media-store-type-id>zoundry.blogapp.mediastore.type.ftp</media-store-type-id>
               <display-name>Ripway FTP</display-name>
                  <icon>icons/sites/ripway.png</icon>
                  <properties>
                   <property name="host">
                    <default-value>ftphost.ripway.com</default-value>
                   </property>
                   <property name="url">
                    <default-value>http://h1.ripway.com/USERNAME/</default-value>
                   </property>
                      <property name="passive">
                          <default-value>true</default-value>
                          <hidden>true</hidden>
                      </property>
                  </properties>
              </media-site>
          </extension-data>
      </zoundry-extension>

The result of all of this complexity is that it is very easy to add new store types and new sites. In fact, third parties could very easily contribute new media store sites without doing any actual coding, as long as those third parties support an API that is already contributed (via a media store type). So if an image host wanted to show up in the list of choices in the New Media Store Wizard, and that image host supports FTP, then they could create a plugin that simply contributed a new media site to the application, much like the Ripway example above.

Technorati : , ,
Del.icio.us : , ,
Ice Rocket : , ,
Flickr : , ,
Zooomr : , ,
Buzznet : , ,
Riya : , ,
43 Things : , ,

Labels: , , ,

Zoundry Raven: Multiple Blogs

Friday, February 9, 2007

One of the challenges we face when designing Raven is how we satisfactorily handle posting to multiple blogs. One of the features of Raven (and Zoundry Blog Writer as well) is the ability to publish the same blog entry to multiple blogs. Our internal data model supports this, but we have struggled to come up with a user interface design that really works. At the same time, we recognize that most of our users will never use this feature. So the challenge becomes designing a user interface that elegantly allows the user to publish to multiple blogs, but doesn't clutter up the interface when not being used.

With Zoundry Raven I think we have started to make some good strides in this direction. When a blog post is being composed, Raven allows the user to configure the publishing settings. The idea is to treat the publishing settings as more tightly coupled with the blog post than it was in Zoundry Blog Writer 1.0. The internal data model hasn't really changed much, only the user interface. I think some screen shots are in order.

BlogChooser.pngFirst, the user must choose a blog. The combo box that pops up makes it easy to find the blog in question. It even includes filtering capabilities for those users with a lot of blogs/accounts (again, we are trying to build a UI that works for light users and power users). Once the blog is selected, the user can configure the publishing meta data by clicking on the associated "Configure..." drop-down. What this screen shot does not show, but I think you can easily imagine, is what happens when the user wants to publish to multiple blogs. We will be adding some sort of little + or "more" button that will add an additional blog drop down. The user will be able to add as many blogs as necessary.

BlogConfig.pngFor each blog selected, the user must configure the publishing information. As mentioned, this is done by clicking the "Configure..." drop-down associated with each Blog drop-down. The "Configure..." drop-down will let the user configure various publishing meta information, such as the post date, draft, categories, trackbacks, etc. It's still a bit unclear exactly what data will go in here, but I think it gives you a pretty good idea of where we are headed. Publishing meta information can actually get pretty complex, but I think this is a pretty decent way of getting all of that information out of the way. The idea being that, when editing a blog post, the user is primarily concerned with editing the actual content. To that end, we have tried to minimize the vertical space take up by the blog post's meta data (blogs, title, tagwords, etc).

There are a couple other things to note. First, when authoring a new post, the default settings for the publishing information will be inherited based on account and/or blog specific settings. For instance, the user will be able to set a default value for the "Upload only thumbnail images" option which can be configured at the Blog level or at the Account level. That way, frequent publishing options can be configured once rather than having to specify them for each new post.

Second, any changes made to publishing options will be saved with the blog post even if the post is not yet published. It would really be a pain if that information was lost just because the user wanted to work on the post later.

If anyone has any thoughts on what other ways we could improve the UI, we are more than happy to hear from you. Just comment here on the blog or post to the forum.

Technorati : , ,
Del.icio.us : , ,
Ice Rocket : , ,

Labels: , , ,

Zoundry Raven: Extensibility

Monday, January 8, 2007

For my first few posts, I want to focus on some of the goals that we have for Raven. One of those goals is for the application to be as extensible as possible. For us, extensibility means easily adding new functionality to the application via the creation of plugins. In this post, I will talk a bit about our plugin system and what sorts of benefits we get from it.

Plugins/Extension Points
Our plugin system will be extremely familiar to anyone who has worked with the Eclipse Java IDE plugin system. A Zoundry Raven plugin consists, minimally, of a plugin descriptor file called zplugin.xml. The zplugin.xml file defines the ways in which the plugin will be extending the application. Here is a simple example:


  <zoundry-plugin xmlns="http://www.zoundry.com/schemas/2006/03/zplugin.rng"
                  version="1.0"
                  name="Zoundry Common User Preferences"
                  id="zoundry.raven.appframework.prefs">
      <dependencies>
          <depends on="zoundry.raven.appframework.services" version="1.0"/>
      </dependencies>
      <!-- My Contributed Preference Page -->
      <zoundry-extension point="zoundry.appframework.ui.preferences.prefpage">
          <id>zoundry.appframework.ui.preferences.prefpage.myprefpage</id>
          <class>foo.bar.ui.prefs.prefpages.MyFirstPreferencePage</class>
          <extension-data>
              <prefpage>
                  <parent/>
                  <name>My First Pref Page</name>
                  <description>This is an example preference page.</description>
                  <header-image>images/prefpages/foobar/header.png</header-image>
                  <icon>icons/prefpages/foobar.png</icon>
              </prefpage>
          </extension-data>
      </zoundry-extension>
  </zoundry-plugin>

The above sample zplugin.xml file defines a new Preference Page that would appear in the User Preferences dialog. In short, new functionality is contributed to the application via extension points declared within the zplugin.xml file found in each Zoundry Raven plugin. In the above example, the plugin is contributing a new User Preference page via the zoundry.appframework.ui.preferences.prefpage extension point. In this case, the plugin would also need to supply the actual implementation class called foo.bar.ui.prefs.prefpages.MyFirstPreferencePage by including some compiled python code as well, but the details of how that is done are beyond the scope of this post.

Extensions Without Python Coding
Now, not all extension points will require compiled python code. There are some extension points that are meaningful simply based on their zplugin.xml declaration. For instance, the application exposes the zoundry.blogapp.mediastore.site extension point, which allows a plugin to contribute a new place to upload media (e.g. images). The extension point would only need to include, for example, the default FTP information for a site. This would allow Zoundry Raven users to easily configure their account at the given site for media uploads. In other words, if a particular FTP-based image hosting company wanted to contribute a plugin that would cause their specific information to show up as a first-class option when a user configures a Media Store in Zoundry Raven, they can do so by simply contributing nothing but the zplugin.xml declaration XML.

Extensible Extensions
Finally, the plugin system (I really love this) is itself extensible! Zoundry Raven will ship with some set of extension points that plugins can contribute functionality to. At present, I would say we have about a dozen or so extension points. However, when a third party plugin contributes some functionality to the application, they may want their functionality to be extensible. This can be accomplished by contributing to the zoundry.extension extension point. The third party functionality can then access the Zoundry Raven plugin registry and query it for any extensions contributed to its extension point. In this way, other plugins can extend the functionality that was provided by the original third party plugin.

Extension Validation
Finally, it is worth noting that extension points will have a Relax NG schema associated with them when they are declared. This schema will be used to validate the XML found in the zplugin.xml file whenever a plugin contributes to an extension point. In this way, the application can be more confident that the extension was properly declared. In addition, for those extension points that require that a python class be specified, the schema will indicate what type (interface/base class) the contributed python class must be.

Ok, so now you know a little bit about how our plugin system works. In my next post, I will hopefully talk a little bit about the main application UI and provide a screen shot of how it looks at the moment (still in progress).

Labels: ,

Welcome To The Zoundry 2.0 (Raven) Development Blog

Tuesday, January 2, 2007

Welcome to the Zoundry 2.0 Development Blog. This has been a long time in coming and I apologize for the delay. Although it's not a great excuse, we've been pretty busy trying to get Zoundry 2.0 into an alpha state so we can get it out to early testers.

Please note that the code name for this product is "Raven", so from now on I will most likely refer to version 2.0 of our Blog Writer product as Zoundry Raven. I think this is a lot easier to manage than "Zoundry Blog Writer x.x".

The reason for this blog is for us to keep our community informed of our progress and, more importantly, to solicit early feedback on the features we are implementing. My hope is that we will post updates here frequently (and with screen shots!) so that everyone can keep appraised of our progress.

My first post (to be written soon) will simply describe the architecture of Zoundry Raven and hopefully give you an idea of why it is taking us so long.

Good night, and good blogging.

Labels: