tag:blogger.com,1999:blog-23528827320916601622024-03-05T18:23:40.795-08:00Trose-HFOSSI work on a number of open source projects including <u><a href="http://fedorahosted.org/transbot">Transbot</a></u>, Open Video Chat and WikioticsT_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.comBlogger80125tag:blogger.com,1999:blog-2352882732091660162.post-23540392406917467542012-05-03T11:40:00.001-07:002012-05-03T11:41:21.630-07:00Catching upWow, I haven't posted in a long time. Shortly after my last post I had the flu for a week, then I had a job opportunity come up and I spent half a week flying around for interviews. For two weeks after that I was writing docs and doing more research for OVC and I forgot to blog...<br />
<br />
So I have some docs up for OVC now explaining how the code works (. I also added to the readme and made additional comments in the code. Hopefully my additions will help the next team that can pick up OVC.<br />
<br />
This week and next I hope to add some unit tests to OVC. I'd like to be able to test to make sure the gstreamer interface is working correctly and that the network connection is working. First thing I need to do is figure out how to launch a sugar activity through a unit testing environment. From there it should be easy enough to mock another activity and have it send fake connections.<br />
<br />
<b>Update:</b><br />
<br />
I had a conversation with Cerlyn from OLPC about unit testing. It seems like this will be more difficult than I thought...<br />
<br />
<i><trose> can anyone point me to a good reference or example for unit testing sugar activities? specifically testing video and network interfaces?</i><br />
<i><Cerlyn> trose: As far as Sugar goes, there is no activity specific testing framework I am aware of; I've been begging for one to be made.</i><br />
<i><Cerlyn> Sascha Silbe has been working on unit tests for the core Sugar environment on occasion, but as far as I know progress on that front has been going slow</i><br />
<i><trose> I'd like for just some way to start up an activity and then send it fake signals like another activity is trying to connect. Then I could make sure the activity responds correctly</i><br />
<i><Cerlyn> many tests Silbe's been working on require user involvement to report pass/fail as well :/</i><br />
<i><trose> Cerlyn, well that is frustrating...</i><br />
<i><trose> how exactly does sugar start up an activity? is there a way to emulate that?</i><br />
<i><trose> or is there a way to say like sugar.startActivity() and get a pointer back?</i><br />
<i><Cerlyn> You can start an activity within sugar by running "sugar-launch {fully qualified name of activity here; like org.person.trose.myActivity}"</i><br />
<i><trose> Cerlyn, okay</i><br />
<i><Cerlyn> That probably wraps a DBUS interface to do it</i><br />
<i><trose> but that's cmd right? can i get a handle to inspect the activity?</i><br />
<i><Cerlyn> Historically having one activity directly launch another is something that hasn't been done; I do not recall the reasons offhand (not a developer; rather QA)</i><br />
<i><trose> Cerlyn, hmm</i><br />
<i><trose> i could see how that would cause problems</i><br />
<i><trose> this would be a training script though</i><br />
<i><trose> *testing</i><br />
<i><Cerlyn> trose: In theory, being GTK3 based, GTK-supporting test frameworks should work</i><br />
<i><Cerlyn> but graphical testing is obviously not unit level</i><br />
<br />
So there isn't a good way to start up a sugar activity and maintain a handle on it. I may be able to hack around this somehow though. Stay tuned...T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-62797300169483102622012-03-29T16:17:00.000-07:002012-03-29T16:17:42.743-07:00Measure Twice Cut OnceMore research today. I've been mucking around with some of Collabora's code. They are releasing <a href="http://www.freedesktop.org/wiki/Software/Farstream">Farstream</a> on Fedora 17 soon. I also found out that there will be a version of Sugar on F17 released in July. Farstream comes with python bindings by default and supports a lot of useful things by default including, RTP and ICE. ICE will be useful as it allows the program to navigate around firewalls and NATs. This should be a valid approach so long as I can get a hold of the development build of Sugar. I don't think I'll have any problems with that though.<br />
<br />
If that isn't possible I should be able to continue with current Sugar builds by using telepathy-farsight. This should be very similar to farstream except I'll need to manually pull in the ICE library and perhaps a few other things.<br />
<br />
Overall I feel like I'm getting a firm grasp of what needs to happen to get everything working properly. Next week I'm going to start hacking on the OVC code to figure out how I can integrate these new libraries.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-30915366856011381772012-03-27T18:37:00.001-07:002012-03-28T09:56:53.812-07:00OVC ResearchI dove into the pyGst docs today to try and wrap my head around what exactly is going on. I found the <a href="http://pygstdocs.berlios.de/pygst-reference/index.html">docs</a> to be really confusing at first. Luckily there was an accompanying <a href="http://pygstdocs.berlios.de/pygst-tutorial/index.html">tutorial</a> that explained things very nicely.<br />
<br />
Unfortunately, the tutorial only outlined how to do local streaming. I searched around a little more and discovered that OLPC has a page about gstreamer on the XO's specifically. <a href="http://wiki.laptop.org/go/GStreamer#Doing_live_streaming_video_from_an_xo">This</a> page has a lot of information on it. According to that, I need to use a udpsink with an IP to send video to another XO.<br />
<br />
At this point I started picking through the code to figure out where the problems might be. I know that somewhere along the way the connection isn't being set up correctly. Either the XO's are failing to get each other's IP's or the video connection isn't establishing.<br />
<br />
The part of the code in <a href="https://github.com/OpenVideoChat/Open-Video-chat/blob/master/OpenVideoChat.activity/tube_speak.py">tube_speak.py</a> that deals with IP's is as such:<br />
<blockquote class="tr_bq">@signal(dbus_interface=IFACE, signature='s')<br />
def announce_ip(self, ip):<br />
self.ip = ip</blockquote><br />
<blockquote class="tr_bq">def announce_ip_cb(self, ip, sender=None):<br />
if sender != self.tube.get_unique_name():<br />
self.cb('ip', ip)</blockquote>This is most likely where the problem is occurring. Basically, the XO's are just spitting out their IP and hoping the other one gets it. If this is the root of the problem, I should be able to solve it with a home spun TCP-like interface where it listens for a return signal.<br />
<br />
The other part of the code I've been looking at is here in <a href="https://github.com/OpenVideoChat/Open-Video-chat/blob/master/OpenVideoChat.activity/gst_stack.py">gst_stack.py</a>:<br />
<br />
# Add udpsink<br />
udp_sink = gst.element_factory_make("udpsink")<br />
udp_sink.set_property("host", ip)<br />
self._out_pipeline.add(udp_sink)<br />
video_enc.link(udp_sink)<br />
<br />
It may be the case that I need to find an alternative to udpsink. Maybe there is something like rtpsink? I'm not sure at this point. Next I think I will start picking at the code to try and determine exactly where it's failing to make the connection.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-6776907383013245502012-03-25T18:41:00.000-07:002012-03-25T18:41:46.710-07:00Migrating OVCWell I haven't talked about Open Video Chat lately. The project has been pretty stagnant for a while. I'm picking it up again this quarter as part of an independent study. Expect weekly updates about the project.<br />
<br />
The first order of business is to migrate the project to github. Fedora Hosted was nice but it simply doesn't compare to github for community involvement and collaboration tools. The new repo can be found here: <a href="https://github.com/OpenVideoChat/Open-Video-chat">https://github.com/OpenVideoChat/Open-Video-chat</a>.<br />
<br />
This quarter I would like to get OVC working with RTP. The current system uses UDP steaming 100% of the time. This means that more often than not the connection packets are dropped since the XO's have horrible connection reliability. RTP fixes this by using a hybrid of TCP and UDP. It uses TCP to ensure the connection is made, then UDP for fast media streaming.<br />
<br />
After I complete the RTP conversion I want to focus on getting some more documentation and unit tests for OVC. Right now there is absolutely nothing. When I graduate in May there will no longer be any of the original collaborators at RIT. Providing docs and unit tests will make it easier for other students to pick this up when I'm gone.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com1tag:blogger.com,1999:blog-2352882732091660162.post-32225086121744135882012-02-27T16:36:00.000-08:002012-02-27T16:36:38.604-08:00pyBotWar: State of the CodeTomorrow we are moving into the final hackfest for this class. Before the hackfest I want to outline what we've gotten done so far and what I think we can get done before the project is due.<br />
<br />
<span style="font-size: large;">What We Have</span><br />
<ul><li><span style="font-size: large;"><span style="font-size: small;">Working back end code pushing to a memcache</span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;">Working client reading memcache and properly drawing all elements of the game.</span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;">Updated graphics for all the bots</span></span></li>
</ul><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;">What We Need to Have</span></span></span><br />
<ul><li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Facebook authentication</span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">User uploaded bots</span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Restricted python</span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Starting a game with friends' bots </span></span></span></span></li>
</ul><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;">Would be Nice</span></span></span></span></span><br />
<ul><li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Better selection of starting bots </span></span></span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Different weapons/ body types</span></span></span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Multiple arenas</span></span></span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Game playback</span></span></span></span></span></span></li>
<li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">Communication protocol</span></span></span></span></span></span></li>
<ul><li><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">hacking other bots (mwuhahaha)</span></span></span></span></span></span></li>
</ul></ul><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-size: large;"><span style="font-size: small;">At this point I feel comfortable saying we will have a finished, polished product. The remaining necessary features are fairly low hanging fruit. Given the amount of time we are planning on spending hacking tomorrow I don't think we'll have any problems getting this done.<br />
That means we get to spend most of the hackfest adding cool new features. I'm really excited to implement some new weapons and bodies. Also, I love the idea of hacking other bots through a communication protocol. You could have a bot that could just sit still and use all of it's processor power cracking the encryption of the other bots and telling them to attack each other.</span></span></span></span></span></span>T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-11827600821885807542012-02-15T14:52:00.000-08:002012-02-15T14:52:20.973-08:00PyBotWarFor the Open Source game design class we're going to try and make an online multiplayer version of the classic RoboCode game. We found a python port on google code <a href="http://code.google.com/p/pybotwar/">http://code.google.com/p/pybotwar/</a> that we hope to put up on open shift. Robo Code is a game where you actually program a robot that fights other robots in an arena. The robots rely solely on the code you right as you cannot control them once the match starts. Our goals for the project are as follows:<br />
<br />
Required: <br />
<ul><li>Refactor the graphics stack to support a javascript client. Adding json communication between the server and client.</li>
<li>Upgrade existing sprites and graphics assets</li>
<li>Prevent users from calling dangerous python packages in their robots</li>
<li>Facebook authentication</li>
</ul>Optional:<br />
<ul><li>Add new arenas beyond the basic square one</li>
<li>Add additional weapon </li>
<li>Add different sensors</li>
</ul>Pie in the Sky:<br />
<ul><li>Communication protocol for teams of robots</li>
<li>Ability to hack opposing robot's using communication protocol</li>
<ul><li>stack overflow, false commands, etc.</li>
</ul><li>RPG elements including leveling up and earning new weapons or stats</li>
</ul>At the moment we're still focusing on reverse engineering the graphics stack. We'll then implement a function that exposes the current state of the world using json. From there we simply need to write javascript to draw the game state.<br />
<br />
Once our core goals are complete, we'll hopefully have time to focus on adding fun things like new weapons and body types. These would add value to the game play without requiring much time. If we get to this stage of development we should be able to produce several new options.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-49502434681499682942012-02-10T10:31:00.000-08:002012-02-15T15:00:35.105-08:00AJAXING It up!I learned about ajax this week in class. I knew about it in the past but I haven't had much experience implementing it. Seems like a really good way to send and receive data quickly.<br />
<br />
The basics of AJAX is that you create a function that will serve json whenever it is called. This function is tied into a URL that can be called with optional parameters. Then you can have another program, be it a web client or desktop software send a request to this URL. The program then receives back json formatted information it can use.<br />
<br />
I will be using AJAX to implement my final project for class. I'll be able to run the python pyBotWar program on a server with a modified AJAX function that sends out the state of the game. The client can then ping this function periodically to get information about robot position, angle, health, etc. and draw the state.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-42727680497469994862012-01-31T08:37:00.000-08:002012-02-15T15:03:28.808-08:00Hola Mundo Turbo GearsToday in the open source game design class we boot strapped for Turbo Gears. This, combined with open shift will allow us to quickly get web apps online and running.<br />
<br />
Open shift works by tying it to a Git repository on your computer. When you push the repo to open shift it automatically turns off the Turbo Gears instance running on the cloud, applies the changes you've pushed, and then restarts the server.<br />
<br />
This is incredibly useful for small applications when you don't want to spend a lot of time trying to set up your own server. Updating the server is as simple as git commit && git push openshift.<br />
<br />
We'll be using this system to launch our app for the final project.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-10118182196554976112011-12-11T12:03:00.000-08:002011-12-11T12:03:05.352-08:00My first bug fix!So I just pushed a bug fix to the Tweepy library. I found a bug here: https://github.com/tweepy/tweepy/issues/41 that seemed like low hanging fruit. The loop that was reading information from the server response was very naive and basically assumed there would be no problems. I changed it to check the server status before each loop. This should solve the problem.<br />
<br />
Pull Request: https://github.com/tweepy/tweepy/pull/139<br />
<br />
Diff: https://github.com/tjr1351/tweepy/commit/d459ab929b18409534f15920e32ff35d0adc36f7<br />
<br />
Although the change itself is not huge, I had to do a bit of research to figure out how to get the server status and then what status numbers to look for.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-13076928434852757472011-12-11T09:31:00.000-08:002011-12-11T09:31:33.631-08:00Node.js for gamingSo I'm taking a class now that is focused on open source social/ casual games. We're focusing on creating games with javascript and html5. Because of this I've decided to use Node.js to help write my game.<br />
<br />
<a href="http://nodejs.org/">Node.js</a> is a server architecture written in Javascript that allows for very easy, fast web applications. One of the huge benefits of Node.js is it's callback structure. It wraps a lot of costly, slow operations such as file system calls and database queries in a callback that does not block. Also, everything is run on a single process so, unlike other server architectures, it's very easy to see what users are online and pass information between them or two certain groups. Both of these features make it very easy to create multiplayer games.<br />
<br />
I recently found an awesome <a href="http://www.danielbaulig.de/socket-ioexpress/">blog post</a> by Daniel Baulig showing how to link a Node.js server to a libary called Socket.io. Linking the two libraries to the same session ID allows you to now send dynamic messages to the client using a socket FROM your server. Normally with no configuration these two libraries run independently and cannot be called from within one another.<br />
<br />
I'm still not sure what I want to do for my game but I'm leaning towards some sort of MMO turned based strategy game. Maybe one where it queries popular open source websites for your user name and gives your character bonuses based on your open source contributions.<br />
<br />
Here's some other good Node.js references:<br />
<a href="http://expressjs.com/">Express.js</a><br />
<a href="http://socket.io/">Socket.io</a><br />
<a href="http://nodetuts.com/">nodetuts.com</a>T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com1tag:blogger.com,1999:blog-2352882732091660162.post-46784323733939679302011-08-10T13:16:00.000-07:002011-08-10T13:16:29.478-07:00POSSE Hackfest '11I'm currently hanging out with the Foss Box and some professors from various local schools. We're trying to teach them about all things open source. I've been playing with Open Video Chat again to see if it works on the newest Sugar build. Sugar 0.92.2 is now running on Fedora 14. Hopefully this means it either has the version of Telepathy we need or we can install it. I was able to get OVC running on two XO's and connected them. When it tried to connect the pipes I got an error though. Seems to be a break at a file open :/ I'll have to look at this more.<br />
<br />
Side Note: The XO's automagically start an adhoc network and connect to eachother again! WOOOOO!T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-85906205168717473812011-07-22T13:24:00.000-07:002011-07-22T13:27:11.274-07:00jQuery VideoBoxjQuery VideoBox is a modification of jQuery LightBox designed to work with local video sources using Html5. Video formats currently supported: mp4, ogv, and webm. Source code and download can be found on <a href="https://github.com/tjr1351/jQuery-VideoBox">GitHub</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmoMEV4T4qqUWht-m_InYsaPQ7E4G2jH8Xdrg4Yn7MWy5u1KJwQ936hZFSzGeDUy46jjaoqEaDA1b-oMy_6EIwgH0vbtu0iWAF92Rjdy77DRbXweuoZlRo8y6RMY0infB7NBv9ECvh2SW1/s1600/videobox.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmoMEV4T4qqUWht-m_InYsaPQ7E4G2jH8Xdrg4Yn7MWy5u1KJwQ936hZFSzGeDUy46jjaoqEaDA1b-oMy_6EIwgH0vbtu0iWAF92Rjdy77DRbXweuoZlRo8y6RMY0infB7NBv9ECvh2SW1/s320/videobox.png" width="320" /></a></div><br />
Currently tested on Firefox 5. Please let me know if you have problems with other browsers.<br />
<br />
I should be updating GitHub soon with a detailed user manual. For now consult the example index.html.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-89985982790666900522011-07-18T12:55:00.000-07:002011-07-18T12:55:07.574-07:00PrototypeJust got some web hosting space from my friend Greg. We were trying to get some space on the Foss@Rit servers but they aren't ready yet. You can find our prototype at <a href="http://gregjurman.com/trose/firstemt/">http://gregjurman.com/trose/firstemt/</a>. We deleted the video so we don't nuke his bandwidth. ^_^<br />
<br />
In other news... I got the jQuery plugin working. It's still just a hack so I'm not going to publish it yet... I need to clean the code up a ton before then.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-59498024214844723872011-07-13T08:37:00.000-07:002011-07-13T08:38:21.675-07:00RIP Gnome3 Hot Corner<b>FINALLY!</b><br />
<br />
After weeks of anguish I have finally figured out how to disable the hot corner on Gnome 3 that has been the bain of my existence since switching to Fedora 15.<br />
<u><b><br />
</b></u><br />
<u><b>What's the problem with a Hot Corner?</b></u><br />
<br />
Well if aren't familiar with Gnome 3 there is an Overview that allows you to quickly open programs and switch between currently open ones.<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJhYt4IMpBhgJIKbzwCz8A_Vqyp5XMiWwj2xcbZcAA3fhxtzlJZ8aMcgV_3rkBLmkB9VEj2mZuxDu4LdZOkT_H1RrHfa74YIJFnkCRaWsfvfJQXQpz5b5Y1SSyabe0ci-71dKEI6Zkp5V4/s1600/Overview.png" imageanchor="1"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJhYt4IMpBhgJIKbzwCz8A_Vqyp5XMiWwj2xcbZcAA3fhxtzlJZ8aMcgV_3rkBLmkB9VEj2mZuxDu4LdZOkT_H1RrHfa74YIJFnkCRaWsfvfJQXQpz5b5Y1SSyabe0ci-71dKEI6Zkp5V4/s1600/Overview.png" width="400" /></a></div>The hot corner is in the top left corner of the screen and activates when the cursor is in the (0,0) coordinate. The problem with the hot corner is that you often accidentally activate it when trying to click things close to the top left corner. It's also highly redundant since the "Activities" button there has the same functionality. Personally, when I want to use the Overview I just hit the super key (windows key).<br />
<br />
<u><b>The Solution</b></u><br />
<br />
You need to modify the javascript backend for gnome panel. Yeah Gnome 3 is partly in javascript... You'll find the necessary file under /usr/share/gnome-shell/js/ui/. Next you want to open panel.js in your favorite text editor. I like Geany :P You'll need to find this line:<br />
<br />
this._corner = new Clutter.Rectangle({ width: 1, height: 1, opacity: 0, reactive: true });<br />
<br />
and modify it to say "reactive: false". This will disable the hot corner functionality without disabling Overview.<br />
<br />
I found this solution <a href="http://askubuntu.com/questions/5573/how-do-you-disable-the-automatic-activation-of-gnome-shell-activities-button">here</a> and credit goes to Jinx.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com5tag:blogger.com,1999:blog-2352882732091660162.post-16104468993638551032011-07-11T13:12:00.000-07:002011-07-11T13:12:26.073-07:00Success!!! kind of...So I've got an interactive webpage made that dynamically generates buttons based on an xml file. It even updates on the fly with a drop down menu to switch between languages. One small problem though... the javascript I hacked together to make the pretty video popups is scanning the page before the other javascript has dynamically populated the page. So basically the video isn't working at all. Tomorrow I'll have to look at possible solutions. I think the best route is to actually get around to finishing jQuery-izing the video plugin. Then I can just attach a listener to a <div> and link it to the video proper. Luckily tomorrow is the Foss@Rit hackfest so I'll have plenty of time ^_^T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-56328863596612725112011-07-05T13:59:00.000-07:002011-07-05T13:59:12.481-07:00TIL JavascriptSo I've been banging out my javascript video plugin. Turns out there's more work to do than I thought. I plan on making it fully jQuery compatible as it currently doesn't play well with the other jQuery elements we're using.<br />
<br />
We just had a meeting with Dr. Sutton and he likes our prototypes so far. Next step is to start adding functionality. Our two week goal is to add basic clinical questions. We will model it off of the interaction that receptionists typically have with patients when they first come in. While I'm waiting for example questions from the clinic, I'm going to start creating a dynamic internationalization system. basically all text in the program will be assigned to variables. Then in the backend each variable can have multiple translations stored for it. If we do this right we can make it simple for non-technical humans to add new questions and translations.<br />
<br />
Updates later :-)T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-1757938381445058042011-06-28T14:17:00.000-07:002011-06-28T14:17:35.131-07:00Webpage PrototypesI've been prototyping First EMT using html5 and css3. Things are starting to look pretty sexy. Right now I'm trying to find a work around to display video in a pretty popup. My first thought was the lightbox jQuery plugin. That doesn't support video though. There doesn't seem to be a very good video alternative with the same look. I think what I'm going to have to do is hack something together that looks similar. I'll post a tutorial tomorrow with the best method I come up with.<br />
<br />
In other news, JT and I are going to start putting our prototypes online. We're going to put our source up on github tomorrow. I also want to look at hosting the webpages on Red Hat's cloud app service, Open Shift. Updates tomorrow.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-32816591983762430362011-06-23T10:42:00.000-07:002011-06-23T10:42:14.365-07:00Design Design DesignThey say you should always measure twice and cut once. Well that's our take to project design. This past week we drew up a bunch of paper prototype interfaces. These are basically just pen and paper representations of our interface layout. JT and I had several potential users look over the paper diagrams and give us input. We ended up making a great connection with Matt Purcel, President of the RIT Ambulance. Doctor James Sutton was also able to give us a lot of great input about how to improve our design.<br />
<br />
Now that our design is coming to fruition I can finally start coding. Time to start reading up on HTML 5, CSS 3.0 and Javascript. If I run into any interesting problems I plan on writing up a tutorial here.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-31568688734742496492011-06-16T11:41:00.000-07:002011-06-16T11:41:23.485-07:00Design concerns in a multilingual applicationOne of our biggest design concerns for First EMT is creating an interface that is universally accessible regardless of language, culture, or education. To make language selection universally accessible we are using a combination of a flag icon, text, and audio stating the language a button selects.<br />
<br />
One part of the program will have phrases that a health care provider may want to say to a patient. We originally were going to record audio of each phrase. After speaking with Dr. James Sutton we actually learned that some cultures can be pretty "freaked out" by random talking boxes. As a solution we plan on recording video of translators speaking. This will also allow us to incorporate American Sign Language.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-20015026408962815892011-06-13T11:27:00.000-07:002011-06-15T09:49:57.807-07:00Internationalization in PHP<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Our current game plan with First EMT is to build a Javascript and PHP web application so I've been looking at ways to do internationalization in PHP. If you're writing code that needs to be accessible in many different languages, internationalization is a must. Instead of hard coding text you create a variable for every body of text in your interface. Then you store translation files for every language your UI must support. By changing your locale variable you can quickly and easily switch the language your UI displays. If you make the translation files human readable it is also very easy to add new languages by simply hiring a professional translator for a few hours of work.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">My first searches seemed fruitful... I found this <a href="http://devzone.zend.com/article/4799#ResourceHandler">documentation</a> describing Resource Bundles. It seemed great until I noticed it was under the header "Future Directions". I'm a fairly proficient programmer but I'm certainly not ready to write a patch to PHP... time to look at other options...</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">The best option I've found so far is called <a href="http://framework.zend.com/manual/en/zend.translate.introduction.html">Zend_Translate</a>. Zend's translate framework is really flexible. You can provide something as basic as arrays of words to translate or as complex as importing a Translation Memory file and dynamically translating everything. For my purposes I think I'm going to use the TMX adapter. TMX is an extension of XML and it's an industry standard for this sort of application. It can be modified in any XML editor which makes it very easy to add new translations. An example TMX file would be something like:</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
<span class="Apple-style-span" style="color: #111111; font-family: consolas, monospace, fixed; font-size: 14px; line-height: 21px;"></span><br />
<ol style="list-style-image: initial; list-style-position: outside; list-style-type: decimal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 1em; padding-left: 25px; padding-right: 0px; padding-top: 0px;"><li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><?xml</span> <span style="color: #000066;">version</span>=<span style="color: red;">"1.0"</span> <span style="color: black; font-weight: bold;">?></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #00bbdd;"><!DOCTYPE tmx SYSTEM "tmx14.dtd"></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tmx</span> <span style="color: #000066;">version</span>=<span style="color: red;">"1.4"</span><span style="color: black; font-weight: bold;">></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><header</span> <span style="color: #000066;">creationtoolversion</span>=<span style="color: red;">"1.0.0"</span> <span style="color: #000066;">datatype</span>=<span style="color: red;">"winres"</span><span style="color: #000066;">segtype</span>=<span style="color: red;">"sentence"</span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"> <span style="color: #000066;">adminlang</span>=<span style="color: red;">"en-us"</span> <span style="color: #000066;">srclang</span>=<span style="color: red;">"de-at"</span> <span style="color: #000066;">o-tmf</span>=<span style="color: red;">"abc"</span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"> <span style="color: #000066;">creationtool</span>=<span style="color: red;">"XYZTool"</span> <span style="color: black; font-weight: bold;">></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"></header<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><body<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tu</span> <span style="color: #000066;">tuid</span>=<span style="color: red;">'message1'</span><span style="color: black; font-weight: bold;">></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tuv</span> <span style="color: #000066;">xml:lang</span>=<span style="color: red;">"de"</span><span style="color: black; font-weight: bold;">></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"><seg<span style="color: black; font-weight: bold;">></span></span></span>Nachricht1<span style="color: #009900;"><span style="color: black; font-weight: bold;"></seg<span style="color: black; font-weight: bold;">></span></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tuv<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tuv</span> <span style="color: #000066;">xml:lang</span>=<span style="color: red;">"en"</span><span style="color: black; font-weight: bold;">></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"><seg<span style="color: black; font-weight: bold;">></span></span></span>message1<span style="color: #009900;"><span style="color: black; font-weight: bold;"></seg<span style="color: black; font-weight: bold;">></span></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tuv<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tu<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tu</span> <span style="color: #000066;">tuid</span>=<span style="color: red;">'message2'</span><span style="color: black; font-weight: bold;">></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tuv</span> <span style="color: #000066;">xml:lang</span>=<span style="color: red;">"de"</span><span style="color: black; font-weight: bold;">></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"><seg<span style="color: black; font-weight: bold;">></span></span></span>Nachricht2<span style="color: #009900;"><span style="color: black; font-weight: bold;"></seg<span style="color: black; font-weight: bold;">></span></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tuv<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"><tuv</span> <span style="color: #000066;">xml:lang</span>=<span style="color: red;">"en"</span><span style="color: black; font-weight: bold;">></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"><seg<span style="color: black; font-weight: bold;">></span></span></span>message2<span style="color: #009900;"><span style="color: black; font-weight: bold;"></seg<span style="color: black; font-weight: bold;">></span></span></span><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tuv<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tu<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"></body<span style="color: black; font-weight: bold;">></span></span></span></div></li>
<li style="color: black; font-family: 'Courier New', Courier, monospace; font-style: normal; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><div style="color: rgb(17, 17, 17) !important; font-family: 'Courier New', Courier, monospace; font-weight: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"><span style="color: #009900;"><span style="color: black; font-weight: bold;"></tmx<span style="color: black; font-weight: bold;">></span></span></span></div></li>
</ol><br />
<br />
</div><span class="Apple-style-span" style="font-family: inherit; line-height: 21px;">This examp</span><span class="Apple-style-span" style="font-family: inherit;"><span class="Apple-style-span" style="line-height: 21px;">le is straight from the Zend Framework webs</span><span class="Apple-style-span" style="line-height: 21px;">ite.</span></span><br />
<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="Apple-style-span" style="font-family: consolas, monospace, fixed; font-size: 14px; line-height: 21px;"><br />
</span></div></div>T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-25005459272452723532011-06-08T09:45:00.001-07:002011-06-15T09:49:57.808-07:00ResearchStarting to find some good articles to use for our project and the paper later on in the summer. I'm going to aggregate them here for my own use :-P<br />
<br />
These articles will be good for pointing out the existence of language barriers and the problems they cause in the medical profession:<br />
<br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">Lost in translation? pediatric preventive care and <span class="Apple-style-span" style="border-color: initial; border-style: initial;"><a href="http://www.blogger.com/post-create.g?blogID=2352882732091660162" name="hit1" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; box-sizing: border-box; color: #0156aa; text-decoration: none;"></a></span><span class="hit" style="box-sizing: border-box; margin-bottom: 0px; margin-left: 2px; margin-right: 2px; margin-top: 0px;">language barriers</span></span><br />
<a href="http://www.sciencedirect.com/science/article/pii/S0022347605011194">http://www.sciencedirect.com/science/article/pii/S0022347605011194</a><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="hit" style="box-sizing: border-box; margin-bottom: 0px; margin-left: 2px; margin-right: 2px; margin-top: 0px;"><br />
</span></span><br />
<span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"><span class="hit" style="box-sizing: border-box; margin-bottom: 0px; margin-left: 2px; margin-right: 2px; margin-top: 0px;">Language barriers</span> and the use of interpreters in the public health services. A questionnaire-based surve</span><span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;">y</span><br />
<a href="http://www.sciencedirect.com/science/article/pii/S0738399110002697">http://www.sciencedirect.com/science/article/pii/S0738399110002697</a><br />
<br />
One of the ideas we've been throwing around was a what-if scenario where ambulances could have a 3G connection and send information from the tablet to the hospital before the patient arrives. It turns out this has already been an idea.<br />
<br />
<a href="http://v-scheiner.brunel.ac.uk/bitstream/2438/2430/1/Ambulance%203G.pdf">http://v-scheiner.brunel.ac.uk/bitstream/2438/2430/1/Ambulance%203G.pdf</a><br />
<br />
We'll have to see if the Rochester area ambulances have 3G connections.<br />
<br />
I am also interested in the translation aspect of the project. I want to make sure whatever translation we're using will be correct. Often times machine translation will have errors. This is obviously unacceptable for medical practice. We may need to look at simply providing hard-coded translation for the forms and leave MT for the open ended, less-important questions.<br />
<br />
open source translation: <a href="http://www.apertium.org/">http://www.apertium.org/</a>T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-62723609122629245322011-06-07T09:27:00.000-07:002011-06-15T09:49:57.809-07:00First EMTSo I'm doing research again this summer. This time around I'm working on First EMT. First Encounter Medical Translator will be an EMT assistant providing several multilingual or language independent tools for first responders. I'm going to be working with my buddy JT throughout the summer. You can follow his blog here: <a href="http://www.jtmengel.com/">http://www.jtmengel.com</a>.<br />
<br />
Medical professionals today run into problems with patients who do not speak English. Obviously they must help these people but communication can be very difficult. We're going to design a tablet-based system that will allow first responders to gather data in a number of different languages. It will also have a diagram of a person where a patient can zoom in and let an EMT know where they're injured. We may also add a page where an EMT can pull up common questions in several different languages so they can verbally ask things like "who is your primary doctor?" or "do you have any allergies?".<br />
<br />
This first week we will be writing up the design documents and figuring out exactly what our user experience is going to be. I'm also going to be researching options for translation since Google is dropping their translation API (<a href="http://googlecode.blogspot.com/2011/05/spring-cleaning-for-some-of-our-apis.html?foolio">link</a>). <a href="http://www.statmt.org/moses/">Moses</a> looks like a good alternative. I'll be posting more information on it as I learn more.<br />
<br />
I'm very excited about this project and can't wait to get <strike>cracking</strike> hacking.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-42240114050464180712011-02-01T19:39:00.000-08:002011-02-01T19:39:24.615-08:00Rochester GREAT Student Achievement AwardSo Justin, Fran, and I received a Rochester GREAT Student Achievement Award tonight for our work with Open Video Chat. Thanks to Remy DeCausemaker and Steven Jacobs for making this possible. Special thanks to our project advisors Luke Macken and Mel Chua :D<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://2.bp.blogspot.com/_hxrWrIsxtPg/TUjEPbohZ-I/AAAAAAAA1o0/rJx4HpgC0_4/s640/P1060089.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://2.bp.blogspot.com/_hxrWrIsxtPg/TUjEPbohZ-I/AAAAAAAA1o0/rJx4HpgC0_4/s320/P1060089.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div>p.s. Sorry about the squinty face, I can't deal with camera flash :(T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-62709880494238378762011-01-28T21:03:00.000-08:002011-01-28T21:03:09.215-08:00PHP: SUCCESS!I've got an upload form working on the Rock Climbing Club staging server. As soon as I get the time I'll create and populate a database on the production server and push this live! Now officers will be able to upload photos with the click of a button. Next I want to look at possibly moving to a Flickr API or, if that fails, write a graphical interface with delete functionality. If you haven't yet, check out the club's website! <a href="http://www.rit.edu/rocks/">http://www.rit.edu/rocks/</a> Now with 100% faster picture uploads!T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com0tag:blogger.com,1999:blog-2352882732091660162.post-76984565765062770222011-01-24T14:17:00.000-08:002011-01-24T14:17:35.660-08:00PHP mini-project UpdateI hit a small roadblock this weekend trying to get file uploading to work. That plus my AI homework really slowed down the project. I'm still banging away at it. Today I managed to get uploads to the web server. Next steps: Get the uploads to the right place. Password protect it! (O_O) Then I'm going to get the app pushing information to a database. From there I'll get the front page of the website reading information from that database.T_Rosehttp://www.blogger.com/profile/04910078977986317954noreply@blogger.com3