Home > The Offive


The Official Blog of the Web Tech Group


New Sheriff in Town

August 24th, 2011 by Mark Anderson

Hey everyone, I’m Mark Anderson, and I’m the new Senate CIO. Since most of the WTG has graduated, we’re entering a rebuilding season. As soon as school starts, we’ll be setting up a regular meeting time, and begin to set out projects for the year. If you’re interested in participating or have any ideas, contact us.

And, watch this space. I’ll be updating on a regular basis.

Posted in Student Government | Comments Off

Concerto Development

March 16th, 2011 by Brian Michalski

I recently got back from a conference talking about open source software and walked away with the satisfaction that the Concerto of yesterday was a really successfully project by most measures but the depressing reality that Concerto 2 isn’t so fortunate right now.  I want the Concerto of tomorrow to be more successful, but I can’t do it alone.  I also can’t do it with just “the heavyweights” of Concerto 1′s development.  Many core developers now have jobs that, believe it or not, make it hard for them to cram into our office space and work on features until 2-4am.  In theory I’ll have a full-time job soon, which is why I’m trying to get this off the ground sooner rather than later.

Most of what I’m going to present is centered around this philosophy that our development, in addition to our releases, need to be open.

  1. New mailing list. Our development mailing list is no longer concerto-dev@union.rpi.edu because of the closed nature behind the Union CMS.  The new home for Concerto development is concerto-dev@googlegroups.com.  This mailing list isn’t public, but anyone can sign up for it.  I didn’t want to carry over a bunch of people who don’t care for anymore so YOU NEED TO SIGN UP to get on board (details at the bottom).
  2. Lighthouse is god. Every new feature needs to go through lighthouse, providing an opportunity for targeted discussion.  We should keep a backlog of tasks in lighthouse for anyone to pick up and work on if they’re interested.  If you half-committed a feature, the other half of the feature should be in lighthouse so we remember to finish it.  I don’t know how we’re going to break this down into milestones / iterations, but I have a feeling a few of you have ideas.
  3. Features should be tested. Programmatically (when it’s not too much of a burden).  I think testing is a fairly new concept to most of us and has the potential to slow things down at times… we should test what we can and “come back” to things that work but are just too hard to test for now. I’ve also heard that knowing how to test your code is almost as useful as being able to write it, we’ll see how that works out.  I’ve already got a CI server setup and running, you can see how poorly the latest build is doing here: http://ci.concerto-signage.org. Additionally, there is a nightly build system that checks out the latest code every night and sets it up here: http://nightly.concerto-signage.org for everyone to play around with.
  4. Clear contributor process. Who can and can’t have commit access on GitHub should be easy to figure out.  If someone wants to get involved, we should have a straightforward document that shows how.  We used to just give it to people who seemed to do decent work in the WTG but it no longer makes sense for me to try and personally vouch for people.  I propose a system where commit access is granted by a simple majority consent from all current committers.
  5. Encourage community contributions. We should encourage non-committers to submit tickets and attach patches in lighthouse.  I lose patches pretty easily from Google Groups, but Lighthouse should make it easier to track.
  6. Everyone can help.  Specifically, we need people who not only write code (Ruby, JavaScript, HTML, CSS) but can talk about user scenarios (“what would I want to have happen”), create shiny graphics, write documentation, translate things into different languages, test different setups, etc.

If you’re interested in getting on board with Concerto as we set sail again I encourage you to follow the contributors guide here (https://github.com/wtg/concerto/wiki/Getting-Involved) to sign up for the mailing list and create an account on lighthouse.  Discussion will continue on the new mailing list very soon regarding some of the more brick and mortar contributions that you can start making today.

Welcome aboard.

Tags: , ,
Posted in Concerto | Comments Off

Concerto Video Support – Coming Soon

May 10th, 2010 by Brian Michalski

Everyone love Concerto’s ability to easily enable content creators to get their message out there via graphical slides and text,  a few brave souls have even used the dynamic content support to redistribute RSS feeds and other external data sources to their screens.  What’s missing from this picture? Video.  Video is probably on the top 10 missing features list, something I never thought any significant number of people would want in their digital signage system…. good thing I try to stay away of judging what people want or not when we’re developing features.

That said, you’ve asked and I decided to deliver.  I really hate answering questions without providing a satisfactory answer and saying “we’ll look into video for Concerto 2″ might have been OK to write it off the first two times… but by the fourth and fifth time I really wanted to do something about it.  Luckily I had the opportunity to solve a problem for my IT for the Arts and Performance class at RPI, and this seemed like a great fit.

If you’re not interested in hearing all the details, I’ll skip to the punch: I’ve developed video support for Concerto 1.9.x, and I’m optimistic it will be merged into the trunk and released over the summer.

Onto the details….

Since Concerto is open source, my options to implement this were a little bit limited.  We’re not comfortable (I don’t know if its legal or not) distributing Flash Player on our Live CD images, and I really didn’t want to cheat and use a system that couldn’t be cleanly distributed to everyone.  Luckily, most modern browsers (Firefox, Chrome, Safari) support the HTML 5 <video> element, providing a plugin-free way to play video content.  By the wonder of HTML “standards”, massaging a <video> element into the graphics field enabled  a screen to cycle and play back video clips just like any other piece of content.

Technically speaking, “massage” includes a several fixes to the screen JavaScript to be less destructive when it resizes non-text based elements and a lot of work making the <video> element work and play for as many people as possible in as many places as possible (i.e. admin panel & API).

When you upload a video, a python script is called in the background to start encoding the video to H264 (Safari, Chrome) and OGG Theora (Firefox, Chrome).  Regardless of who you are, the video sits UNAPPROVED while the processing goes on.  Its up to a moderator, to manually approve the video when processing is complete.  In case you didn’t get that the video will not be approved on any feeds, even those which you moderate (I completely forgot this during my demo, resulting in 4 minutes of awkward stalling).  To keep you company, a “processing” graphic is shown to let you know that the python script (and ffmpeg) are doing their best to convert the video.  The longer the video, the longer it will probably take to convert.

Hocus pocus, after the video is encoded the “processing” graphic will go away and you can preview the video everywhere in the admin panel.  Internet Explorer users be warned:  You’ll be shown the video in a Flash Player which may or may not automatically figure out the aspect ratio.   If you are concerned, try another browser.

The python script includes some very basic ffmpeg commands to encode the video, if you’d rather use a different set of options (bitrate, quality, etc) or another command line tool (HandBrake?) to encode your video feel free to edit things around… the only important thing is the output file location.

If all goes well, which I don’t see why it shouldn’t, this code will be committed to the trunk in a week or two.  Since the screen JavaScript was changed, we do have to be extra careful that no memory leaks or bugs were introduced that could break the content-cycling on the screens or cause FireFox to crash.  Testing this usually involves running a development screen for a few days to make sure nothing crashes…

I can’t promise I’ll implement another moderately-desired Concerto feature in the next month or two, but I’d love to hear what we should be working on for Concerto 2.  If you’ve got any ideas, I’m all ears.

Flagship Docs 2 Updates Are Live!

April 28th, 2010 by Brian Zaik

I’d like to thank the efforts of Brian Michalski, Zach Rowe, and Kenley Cheung.  This morning, we pushed out a huge set of much-needed updates to our document manager software.  It’s much better now.

Included in these changes are the following:

  • Table views are now a toggle option instead of just icon-based grids for viewing lists of documents.  In fact, they’re default now for documents inside of categories!  Thanks, Zach!
  • Inspired by Kenley’s ongoing designs, the front page is now much different.  There’s a top block introduction to Flagship Docs, as well as featured categories, which show the top three most recently updated docs within each featured category.  We’ve already got the J-Board and RNE Decisions categories highlighted.  Check it out!
  • All PDF and .doc documents are using the Google Docs Viewer to elegantly allow live previews.  Check out the functionality on this page.  Just click “View Live Preview” to get a popup showing the document.  It now takes three seconds to check out the contents of these documents.  No more downloads required!
  • There’s now a nifty icon to the right of the uploader of each document that will allow you to copy the share link to your clipboard automatically.  Special thanks to Brian Michalski for that little number.  It works just like Github!

We still have a logo set brewing for the Flagship suite of products, and we still have enhancements to make, especially to Flagship’s Quick Search.  But for now, these changes should make Flagship an even more compelling docs package than before!

Shuttle Tracking Upgrades

March 21st, 2010 by Brian Michalski

UPDATE 3/21/2010 9:30pm:  Looks like I’ve managed to break things early.  We might be back online before the scheduled upgrade, but I don’t know for sure.

UPDATE 3/21/2010 10:11pm:  …and we’re back.  Everything should stay online until around 9:45 tomorrow morning.

UPDATE 3/22/2010 12:00pm:  Maintenance complete.  It took only about an hour to bring the new server online, the longest part of the entire process was having to run back to the Student Union to get the right sized screws.  Shuttle Tracking should be in for some smooth sailing.

Shuttle Tracking will be down for maintenance Monday, 3/22/2010, starting at 9:45AM.  If all goes well, the service should resume operation before noon.  During this downtime we’ll be shutting down the old shuttle tracking server and bringing the new one online.  Since we have limited rack space available, the old server has to be shut down and physically removed before we can bring the new one online.

We’ve seen huge increases in traffic to the site as more students are living further away from campus (presumably looking to take a shuttle).  The new shuttle server was purchased after meeting with Claude Rounds, the VP for Administration at RPI who recognized the need to support our program and continue to provide the best shuttle tracking experience possible.  We’re also going to be looking into developing estimated arrival signs for some shuttle stops, a mobile interface, and exploring a technological solution to the shuttle-clumping problem.

Technically speaking, you’ve been experiencing the new server for weeks.  After getting the new server setup, it was brought online in the Student Union and the current shuttle tracking server was adjusted to proxy all of its requests along to the new server.  As a result, we were able to get a lot of the speed increases out of the new server while we waited to get it installed in a more permanent home.  Tomorrow we’ll be able to complete the update and remove the old server from the shuttle tracking stack, it will probably be re-purposed as a development server or staging area for future upgrades.

If things are going poorly, there’s a chance I’ll be tweeting about it (@bamnet) but I don’t foresee us hitting too many bumps in the road.

Tags: ,
Posted in Shuttle Tracking | Comments Off

Flagship Base Development Begins

March 21st, 2010 by Brian Zaik

We just began work on Flagship Base, a new Flagship product that is meant to cleanly and simply allow users to create managed knowledge bases for application support. It’s going to be a really exciting new WTG property that will play nicely with many other applications, such as Concerto 2 and the other Flagship applications that have either launched or are in development, such as Flagship Docs 2 and Flagship Tasks. It will use a lot of common components from past and present projects, including Split-Views from Concerto 2 and the amazing new Quick Search in Flagship Docs 2 (try it out at the RPI installation).

We’ll be talking more about Flagship Base and the future of Flagship soon. Stay tuned!

Concerto 2: The Start to a Roadmap

March 19th, 2010 by Brian Zaik

Concerto 2 looms ever closer, yet it’s still on the horizon. We’re beginning to ramp up development on base Concerto 2 features and functionality. First, we’ll be filling in all of the functionality that Concerto Version 1 had, including basic feed and content management, screens, and browsing. In many cases, and because we’re rebuilding the core of Concerto in Ruby on Rails, the architecture will be vastly streamlined and incorporate a whole heap of feedback that we have received over the years based on Concerto Version 1. For example, the Concerto Wall will be directly integrated into the browsing interfaces as a new Wall View (the counterpart to our more traditional Detail View). Think of this Concerto 2 core as a leaner, meaner rebuild of everything that made Version 1 great.

From that point, we’re going to branch out into new functionality. The Concerto 2 architecture is designed to focus a lot of the additional functionality beyond core functions into plugins that can be “added on” to the core software. These plugins will be for hardware and power management, dynamic content, and other things. We hope to encourage the development of additional plugins to further expand the capabilities of Concerto 2 in the future.

The Roadmap: Part 1

This is the start to our Concerto 2 roadmap. We are organizing the roadmap into milestones (MS) based on types of functionality. This roadmap begins this week. We hope that each milestone will take no more than a couple weeks.

MS1: Feed Management

  • Includes moderation
  • UI forms structure
  • Upload content

MS2: Browse Content

  • Split-View Interface
  • Wall View
  • Detail View

MS3: Screen Backend

  • Simplistic display of content/templates
  • Weighting / scheduling

MS4: Authentication

  • Users
  • Groups

Other Odds and Ends

In addition, there are other parts of Concerto 2 that we’ll put on the big board right now without any great sense of organization. These will enter into our roadmap as additional milestones once the four above are completed. In no particular order, they are:

  • Plugins Architecture
  • API
  • Notifications and Alerts
  • Easy Content Creator
  • Dynamic Content
  • Hardware Management (Power Controls and Firmware Upgrades)
  • EMS
  • Statistics
  • Frontend JS (Plugin Support)
  • Configuration / Installation / Documentation (VMWare Image)

As we get deeper into development, we’ll be talking about other fun things, which may include things like video and Flash support. Please continue to give us comments at our forum and via email at concerto@union.rpi.edu.

Concerto 2 Split-View Partials

March 11th, 2010 by Brian Zaik

Concerto 2 development is booming away, with Brian Michalski scaffolding out a lot of the views in Ruby on Rails 3 and me working on fleshing out a lot of the foundational GUI designs.  We launched Concerto Wall in Update 1.9 last year.  I created the Wall as a new user interface implement to better display lots of graphical messages to the user in an attractive grid view, much like the thumbnail views seen in Windows 7, Mac OS X, and Ubuntu Linux.  However, because it was added late in the development of Version 1, the Wall never became deeply integrated into Concerto’s UI.

For Concerto 2, I’ve wanted to offer the Wall as a method for displaying any kind of serialized content, such as graphical flyers and videos (more on this later).  Granted, it should be an option, not a forced interface.  A more conventional Detail View should also be an option, and the user should be able to toggle between the various views, much like with an OS file browser.

My initial mock-ups separated the content feeds (essentially the “categories”) into a left sidebar with clickable listings.  The right panel would then show the contents of the particular category that has been selected.  What isn’t in the initial mockup is the selector for the Detail View.  The Wall View that is shown is very different from what we had in Concerto 1, which was a sortable, expanding and collapsing table.  That view is probably a lot more like what the Detail View will be for Version 2.

My goal with the Concerto 2 UI mock-ups was to show that we can carry the more visual way of presenting information about screens to the entire interface.  Users should be able to quickly zoom into content and take a look at it.  We found in our interactions with users with Concerto 1 that people often preferred to visually scan the interface for important information and alerts; it was just more natural and intuitive than peering through a details-based view, though certainly the latter is important to keep in order to quickly find important, less common details about Concerto content (duration, date ranges, the person who submitted the message, and so forth).

As I thought about the Concerto 2 sidebar design, I realized that many elements of our core application – browsing screens, looking at content, checking user groups, and so forth, can be organized into the same kind of two-column UI.  Doing so would create important consistency across the entire application.  With Concerto 1, many of our different functions used different interfaces that we made in the rush to move the product out.  With Concerto 2, it’s important to refocus and maintain consistency, as that helps users navigate through the application.

I sketched out on paper how I feel the Split-View Interface, as I call it, should function.  Selectable categories would be listed on the left in the sidebar, and once one is clicked, it would then show its contents on the right.  The categories could be feed names, locations, user groups – whatever.  However, in the case of feeds, we are going to allow nested feed hierarchies for Concerto 2.  These parent-child relationships will allow operators to create much more specific sub-categories of content types.  For example, Japanese Culture could be a sub-feed of Multicultural.  Concerts naturally belong to Entertainment.  Because of this nesting nature, the right panel of the Split-View would be grouped based on the sub-categories, if any, that are within the selected category.  From that point, if a user clicks on the group header in the right panel, the Split-View would change both its left and right panels to show the hierarchy using that specific category as the root.  There would be a back button on the left immediately above the category tree, to allow the user to return to the previous view.  The right panel groupings were actually inspired by Apple’s iPhoto user interface.

This interface is still untested with our actual users, so the next step is to actually build it.  We will be working on leveraging Rails’ partials to create the Split-View Interface and make it extremely modular.  My hope is that we’ll be able to specify the parent of whatever hierarchy exists (such as a feed, user group, or screen) and make it render the full interface based on that information and on the relationships that it sniffs out between objects in the hierarchy.

Oh, and one other thing: we’ll soon be talking about a more formal roadmap for Concerto 2.  What I can tell you is that we’re prepping it for “the spring.”  Stay tuned!

Concerto 2 Menu Design Overview

March 8th, 2010 by Brian Zaik

Concerto 2 represents an extraordinary opportunity to build upon the past successes we have from Version 1 of the software suite with cleaner, more consistent designs and code.  We’re retooling the design from ground level to be faster, more user-friendly, and more flexible for our long-term ambitions with Version 2.  Some of the most overt changes will be right there in the main menu of the web application once you log in.

Concerto 1 had a very conventional tabs system for allowing people to access all of the different parts of the software that they wished to use.  This architecture worked well enough for our purpose, yet it suffered from a few key deficiencies:

  1. It hogged up too much space, especially with logged-in users. Certainly the top menu didn’t take up too much vertical space, but there wasn’t a great way to organize and present content moderation information for administrator users tasked with approving and disapproving content.
  2. It separated user login information (the “user badge”) from the rest of the top menu, which meant that the user then had to look in two different places for basic information pertinent to how they navigate the application. My profile page, for example, should be thought of as being of equal importance to browsing content active on the system.  By separating them, it divides user focus.
  3. It featured a rudimentary form of grouping that just wouldn’t suffice for our new technical architecture. Certain tabs in the top area were grouped based on similar functionality, but our new technical architecture for Concerto 2 divides the functionality of the software into different plugins, such as screen management, content viewing, moderation, and power management for screen hardware.  This means that additional functionality could be added to Concerto 2 by plugin developers.  The menu system needed to be flexible enough to provide for this.
  4. The menu system didn’t age well with Concerto 1 updates. The Concerto Wall update introduced a new means of presenting active Concerto messages to the user in a graphical grid view, but it also introduced a fundamental problem: once the user logs into Concerto, how do we continue to show the important links on the front page and the big, prominent link to the Wall?  So now, in the latest version of Concerto 1, a logged-in user will click the big Concerto logo in the top left to return to the links page, but there’s also the Dashboard, which includes the News Feed updates and other system-wide information.  In Concerto 2, the Wall will be tightly integrated into the whole user interface, and the Dashboard will be restored to its old position (albeit with a lot of major changes).
  5. Users are currently required to log in to access most of the software. The Concerto Wall is the only exception.  Concerto 2 will fix this by taking away the necessity to log in until a special user-bound function, such as Add Content, is visited.

With these weaknesses in mind, I set out to design the next generation of Concerto’s menu architecture.  Even from the start, I wanted to design the UI for Concerto 2 to incorporate the strengths of our visual screens interface in Version 1.  This page allows users to quickly see a visual indicator for the status of each of the screens active in the Concerto network.  For example, if the screen is asleep, it was represented by an icon with little “Z”‘s, so as to appear to be sleeping.  This kind of interface element is a favorite for our users, so it made sense to build upon it.

My first menu design was very unconventional and minimalistic.  The idea was that the user could simply visit the Concerto 2 web application and see visual lists of screens and content without having to log in.  The top button would pull down a login form to facilitate the user authentication if desired or necessary for certain functions (such as uploading new content).  However, I soon realized that such a barebones menu design would not suffice for the plugin architecture that we were designing.  How could I expect to fit specialized controls into this unconventional design?

This semester, with the Concerto 2 release looming on the horizon, I set out to actually implement the menu system, and that involved a redesign.  My new design was more straightforward, yet I included a grouping in the main menu items.  The user login, which again will not be necessary to browse content or do most other things, is now in the top left.  This design, I feel, saves space while leaving plenty of room for plugin-centric controls.  I also included a search area in the top right corner, which might reveal a search box when clicked (much like Apple’s awesome documentation interface, as seen here).

Next was to go through the actual process of implementing the menu interface.  I created a Photoshop mock-up with all of the graphical elements, and then cut it up and built it using HTML and CSS.  I’m very happy with the results.  You can check the new menu system out in early form in our git repository for Concerto 2.

Rails 2 and Rails 3: So Happy Together

February 24th, 2010 by Mike DiTore

Here at the WTG, we love to be on the bleeding edge. Which is why we installed the Rails 3.0.0.beta gem on our development server. But of course, Rails 3 has a way to go, and we might not be upgrading our production apps for a while. So in the meantime, we’re working in both worlds.

A problem comes up if we try to put together a new Rails 2 app. In order to build the app, you need to run the executable for Rails 2, but when we upgraded to Rails 3, running “rails” from the command line results in a shiny Rails 3 app, with no path to execute the older versions easily.

Rubygems provides a nice syntax for dealing with gem versions, in most cases. You can specify a particular version of the gem that you want to use on the commandline as the first argument to the command and in underscores:

rails _2.3.5_ myapp

But between Rails 2 and Rails 3, the rails bin moved from the Rails gem to the Railties gem (Railties is a dependency of Rails). So the above syntax doesn’t work anymore.

Fortunately, the executable that you run when typing /usr/bin/rails is a short ruby script that delegates all the functionality to some scripts located within the gem (see the source here). All we have to do is modify that file to be a little more intelligent. I’m not accounting for Rails 1, just identifying calls requests that look like they want the Rails 2 executable.

Just replace your /usr/bin/rails (or wherever you keep your executable) with the following:

#!/usr/bin/ruby1.8
#
# This file was generated by RubyGems, then edited for Rails 2
# backwards compatibility.
#
# The application 'railties' is installed as part of a gem, and
# this file is here to facilitate running it.
#
 
require 'rubygems'
 
version = ">= 0"
rails_gem = "railties"
 
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end
 
if version =~ /^2.*$/
  rails_gem = "rails"
end
 
gem rails_gem, version
load Gem.bin_path(rails_gem, 'rails', version)

Now you should get:

$ rails _2.3.5_ --version
# => Rails 2.3.5
 
$ rails --version
# => Rails 3.0.0.beta

Now, for convenience, we might just want to have a Rails 2 executable. Put the following /usr/bin/rails2, and set it to be globally executable.

#!/usr/bin/ruby1.8
#
# This file should be run to run the 'rails' command from the
# rails 2 gem. 
# See http://webtech.union.rpi.edu/blog/2010/02/24/rails-2-and-rails-3/
 
require 'rubygems'
 
version = "< 3.0.0.beta"
 
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end
 
gem 'rails', version
load Gem.bin_path('rails', 'rails', version)

Just call “rails2″ to use the latest version of rails 2 available, or specify a particular rails 2 version. You can use this without having the above modification to ‘rails’ or have them both for maximum convenience.

$ rails2 --version
# => Rails 2.3.5
 
$ rails2 _2.3.4_ --version
# => Rails 2.3.4
# Works, but same effect as runnning rails 2.3.4 with the 'rails' script we wrote above.
 
$ rails2 _3.0.0.beta_ --version
# Doesn't work. Just use the 'rails' command.

This should all continue to remain working as future rails 3 gems come out, as long as the above files don’t get overwritten (you may have to re-paste the code if a future gem overwrites that, so keep this link around). It would be really nice to see this sort of functionality handled automatically. In the meantime, though, the above should keep you running comfortably.

All the above code is available here: http://gist.github.com/313946, and the originally generated /usr/bin/rails for Rails 3 is here. Comments welcome.

Posted in Rails 3 | 4 Comments »