fREWdiculous!
10 Aug
One of the first projects I did at work was to make a web/javascript based interface for a piece of hardware that we sell. The machine is very underpowered so pushing a lot of the complexity to the client makes sense. It was a great project and is one of the few that I haven’t had to make modifications to since I finished it nearly two years ago.
Well, it turns out we are making a new version of the hardware and I have to add a ton of options to the UI. That is pretty easy in general, but first I have to get the app up and running. There’s NO WAY I’m going to flash the firmware every time I need to make a change to the javascript. What do I do instead? Mock the hardware with Plack!
Here’s the code I’m using:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | use Plack::App::File; my $app = Plack::App::File->new(root => ".")->to_app; use Plack::Builder; builder { mount '/settings.htm' => Plack::App::File->new(file => "../Web Source/settings.js"); mount '/WebResources/resources/css/extall.css.gz' => Plack::App::File->new(file => "../Web Source/extall.css"); mount '/WebResources/resources/css/xthemeblack.css.gz' => Plack::App::File->new(file => "../Web Source/xthemeblack.css"); mount "/WebResources/$_.gz" => Plack::App::File->new(file => "../Web Source/$_") for ( 'extall.js', 'extprototypeadapter.js', 'harmony_config.css', 'harmony_config.js', 'prototype.js', ); mount '/' => $app; }; |
The first and second line make a basic file server which serves up all the images and whatnot. The rest, the mount commands that is, rearrange things so that instead of using our pre-gzipped files it points to my source files. That way we can leave the html static but I don’t have to waste time copying stuff all over the place all the time.
Awesome!
Leave a reply