{"id":551,"date":"2008-02-22T00:32:09","date_gmt":"2008-02-22T05:32:09","guid":{"rendered":"http:\/\/blogs.n1zyy.com\/n1zyy\/2008\/02\/22\/roomwizard\/"},"modified":"2008-02-22T00:32:09","modified_gmt":"2008-02-22T05:32:09","slug":"roomwizard","status":"publish","type":"post","link":"https:\/\/blogs.n1zyy.com\/n1zyy\/2008\/02\/22\/roomwizard\/","title":{"rendered":"RoomWizard"},"content":{"rendered":"<p>Even though I got to a business school and am a management major, my real passion is working on websites.<\/p>\n<p>We just build a new library here, for millions and millions of dollars. We use a tool called <a href=\"http:\/\/www.polyvision.com\/products\/roomwizard.asp\">RoomWizard<\/a> for booking rooms. We get a web-based interface to book library rooms. This is a great idea. Unfortunately, it&#8217;s so fraught with bugs that it borders on unusable.<\/p>\n<p>The main &#8220;bug&#8221; is that it&#8217;s basically so slow that it&#8217;s unusable. I tried viewing the source, and it&#8217;s got a HUGE block of JavaScript that&#8217;s a pain to read. Most of the page is being generated on the fly with JavaScript. There are times when this is the best way to do something. This is not one of them.<\/p>\n<p>My current understanding&#8211;I may be wrong, since I&#8217;m still trying to make sense of this&#8211;is that each of the touch-screen units on the wall is a webserver. It&#8217;s responsible for storing all of its reservations. So when you view the main page, JavaScript has you going out to each of the 20+ rooms and requesting their status. The problem is that this takes forever, probably at least 15 seconds. By the time the page has finished drawing, it&#8217;s about time for the 60-second refresh to kick in.<\/p>\n<p>I did a bit of viewing headers. The main page is running on ASP.net, but each individual room controller (probably like a 300 MHz embedded chip?) is running Apache Tomcat. Someone did a quick port scan and found that the devices have a lot of open ports&#8211;ftp, ssh, telnet (!), HTTP, and port 6000, which nmap guessed was X11. So I have a pretty good feeling these things are running embedded Linux.<\/p>\n<p>Another problem is that there&#8217;s always one or two of the devices that, for whatever reason, are unreachable. So you get errors on those ones.<\/p>\n<p>Booking conference rooms is like a Web Programming 101 interface. You get a basic introduction to SQL databases, and write a little interface. You could run this on an old 1 GHz PC with 128 MB of RAM and have pages load in fractions of a second, especially if you really knew how to configure a webserver. (Turn on APC and MySQL query caching, in this case, and you&#8217;re golden.)  I cannot <em>fathom<\/em> why they thought it was a good idea to have a page make connections to 25 different little wall-mounted touchscreens. This places a big load on what have <em>got<\/em> to be underpowered little units, and is just a nightmare any way you look at it. I really see <em>no<\/em> benefit to what they&#8217;re doing.<\/p>\n<p>Furthermore, this breaks off-campus connections, since you can&#8217;t connect to these units remotely.<\/p>\n<p>You convert the wall-mounted RoomWizards from embedded webservers into a little web browser client, and they just pull down the data from the main server.<\/p>\n<p>With a traditional, single database, it would also be easy to write a little search tool&#8211;&#8220;I need a room on <em>Friday<\/em> from <em>3:00<\/em> to <em>5:00<\/em>.&#8221; This is a fairly simple SQL query. This is <em>not<\/em> a fairly simple question to ask 25 wall-mounted touchscreen things.<\/p>\n<p>I&#8217;m tempted to write a little PHP script to go out, retrieve the data, and <em>cache<\/em> it. Essentially a hacked-together proxy&#8230;<\/p>","protected":false},"excerpt":{"rendered":"<p>Even though I got to a business school and am a management major, my real passion is working on websites. We just build a new library here, for millions and millions of dollars. We use a tool called RoomWizard for &hellip; <a href=\"https:\/\/blogs.n1zyy.com\/n1zyy\/2008\/02\/22\/roomwizard\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4,10,18,19,22,24,26],"tags":[],"class_list":["post-551","post","type-post","status-publish","format-standard","hentry","category-business","category-computers","category-ideas","category-ocd","category-performance","category-programming","category-rants-raves","category-school"],"_links":{"self":[{"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/posts\/551","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/comments?post=551"}],"version-history":[{"count":0,"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/posts\/551\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/media?parent=551"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/categories?post=551"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.n1zyy.com\/n1zyy\/wp-json\/wp\/v2\/tags?post=551"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}