My DREU Blog
Entry 8: Week of August 19th posted Aug 28, 2012 7:25 AM
This week is my last week at UMass Amherst - so I had to wrap everything up and have something to show for my time. I met with my adviser and he agreed on a final project. I don't know how much I should write about it here, as he hopes to continue the project in the future. Suffice it to say I needed to utilize all the knowledge I gained here in order to put it together. I zipped it up and sent it along to him, everything feels finished and done with.
I'm glad I've spent my summer here. Amherst is a wonderful town, and it's been great to have some real experience in a graduate setting. I'll certainly be seriously considering graduate school during my final year at college - which begins Sunday, I don't have much time to get myself together. I leave Amherst this afternoon (It is Friday the 24th today). With returning from overseas and heading to this internship, it's felt like I've been living life at a sprint. I'll be glad to catch a breather soon!
Entry 7: Week of August 12th
posted Aug 20, 2012 10:55 AM by Avery Erwin-McGuire
I had a big breakthrough this week. A lot of the trouble I have been having over the previous week has been due to an issue with my browser, rather than my code. I switched to a different browser and these issues were resolved. With my knowledge of server side programming, I began looking more at file objects on the client (so as to simulate a cache). File objects appear to be created by user events (drag and drop, form upload) and cannot be generated by the program. However, Files inherit many properties from an objects called "blobs". Blobs are composed of immutable binary data and properties which show their type and length. A method called FileReader can transform blobs into something a bit more complicated - such as strings or buffers. I spent a good portion of the week writing simple client/server programs which did interesting stuff with these properties,
In one program, an image was broken into several binary strings which were then sent across to the client. These strings were concatenated together to form a single blob. I was able to then display that image on-screen. This is a major step towards client side caching - I was able to cut a file up into sections, send them to the client, and have the client reassemble them into a single object. I was very proud of this program!
I am fast approaching the end of my internship. It has been quite lonely with the other interns gone - but that has made me look forward to going back to college in a few weeks (and appreciate work keeping me busy in the mean time). Being stationed with graduate students and professors has made me devote a lot of time to considering my future. Many of my fellow interns felt a great motivation towards grad school. I am a bit more ambivalent. I need more time to figure everything out - good thing I have another year of school to go.
I think if I choose to remain in the field of computer science, I will continue on to get more education (which I suppose is the point of DREU). But, I'm not quite sure I want to work with computers. Only time will tell - I hope my courses over the next year will help me come to a decision.
Entry 6: Week of August 5th
posted Aug 15, 2012 8:03 AM
I have spent most of this week working on my own. The professor I am assisting with this project has been away on vacation, and the other REU student intern finished her work here last week. I was left with some guidelines on how to progress on this project - to eventually end up with a client-side cache for a node.js server. I had very little experience with node, so I began with some very simple servers.
I wrote three servers over the week, the first one was simply a chance to import and use several components - AJAX, jQuery, Express, and node.js. AJAX allows asynchronous updates to a page, jQuery lets you write browser agnostic JavaScript, and Express is a tool set built on top of node.js which allows for easier development of servers.
The next two servers attempted to try and work towards a cache. The first of these allowed the client to request a section of a text document with url parameters passed across with jQuery AJAX. The second server gave the client the option of selecting between several different text documents, and loaded the information retrieved into local storage. This server also handled all of these requests dynamically - the client simply said "GET /book", and passed along url parameters with the title of the book and the text index required. The server concatenated the title of the book onto a default file path, and returned the requested substring.
The next step is to try and figure out how to create a file object client side with the data passed from the server. This has been more complicated than I expected. I hope to finish it before my 8th week (when my program ends).
Entry 5: Week of July 29th
posted Aug 3, 2012 12:37 PM
This week was largely taken up with REU related activities. The other interns all started ten weeks ago, so all the final presentations and gatherings happened over the past few days. We've had group activities every day this week - including a large poster session where we had to share our work. It felt a little strange to be presenting on a brand new project which I have only begun to really understand. I still have another three weeks here, hopefully I can spend that time making some real progress.
In the time that I did have to work, I focused mainly on HTML5 and its file API. There have been some really interesting features on the web inspired by this new API - but it is so new that things aren't developing at the same rate. Certain commands don't exist in some browsers or may be called in a very different format. One of the faculty here explained that one sort of development paradigm is "mushiness", features are pushed out at different rates for different machines. I'm accustomed Java and the ultimate authority of the documentation. The mushiness of the web feels off putting to me.
To understand all this, I wrote some simple web pages which utilized the drag and drop features of HTML5. You can gather information about data client side, and avoid a round trip to the server for simple file manipulation. The example I worked with was getting a an image to display as a thumbnail after dropping it on the website. The notion of work being shifted more to the client side has really been cemented in my mind over the past few weeks. Next week I hope to work on doing some client side work using Node.js as the back end.
Entry 4: Week of July 22
posted Aug 3, 2012 10:57 AM
I spent most of this week producing some interesting GWT programs. I ended up running into some pretty big issues with Eclipse which made several of my projects effectively corrupted. I spent a day trying to solve the problem but my adviser finally told me to give up and start everything over again.
On my second round of programming I was able to do some interesting work with local storage on the browser. My previous understanding of the web was very traditional - the client requests data from the server. It's incredibly interesting to see how things have changed. The client is now capable of handling a lot of the computational load, and web developers are beginning to utilize that capability. My program simply requested some data from the server and stored it client side. Even though that sounds simple, it's big strides from where I started out a few weeks ago.
One major and unexpected component of my time here has been learning how to work on my own. Researchers have many projects going on at once and they expect you to be able to manage your own time. I have had to really knuckle down and eliminate distractions - nobody is looking over my shoulder to check if I am on task.
Entry 3: Week of July 15th
posted Jul 23, 2012 10:14
A good portion of this week was filled with REU related activities. On Tuesday all of the undergraduates took a field trip to Boston to visit Kiva Systems, Google Cambridge, Microsoft New England Research & Development Center, and the MIT Media Lab. It gave a good look at what sort of industry and research positions are available (although these were all very top of the line). Some places were more exciting to visit, but I imagine working at these locations is a different experience to touring them.
On Thursday we undergraduates had our weekly group lunch, followed by a long workshop (one of two!) about the ethics of research. Many people don't realize that ethical issues don't only exist in the natural and social sciences, they extend out to computer science and engineering as well. The discussion speaker mentioned the Challenger space shuttle disaster as an example - the flaw which caused the explosion was an engineering issue predicted by a computer model.
In between all of these events, I continued my work. I wrote a simple program in GWT which took input from the client, passed it to the server, saved it server side, and passed back a confirmation message. Writing the program was the least of my issues. It turns out that Java.io is restricted by the Google App Engine - so writing to local memory was restricted. I'm still working to sort this out.
I compiled my program down to JavaScript, and refocused on trying to parse what the code was giving me. The GWT compiler produces very efficient but very difficult to understand code. Especially for a JS newbie this was a lot to take on. I'm still trying to put together exactly where the code is passing information from the client to the server - figuring out that communication is vital to the research.
The faculty member overseeing my work day to day suggested looking into HTML5 local storage. Rethinking the physical location of storage on the network is a component of this research. So far I've been reading diveintohtml5 to try and wrap my head around how all of this works. Luckily enough HTML seems pretty easy to me (and to most people, I hear).
I need to start finishing up these different branches of my research so I have something tangible to show for my work. Then I will begin learning about Node.js and write a few file manipulation programs with my coworker.
Things are moving a little faster, It's good to feel that I am making progress.
Entry 2: Week of July 8th
posted Jul 13, 2012 1:34 PM
Things got off to an energetic start this week. I began trying to get Emscripten (a C++ -> JavaScript compiler) running on my machine. This turned out to be harder than expected, the install kept failing with very cryptic errors My coworker ran into similar problems when they tried to build it. We shifted gears and tried to find a new compiler to work with. I installed GWT - Google Web Toolkit (A Java -> JavaScript compiler)- onto my windows computer.
Alongside setting up these compilers, I have been writing up some simple miniature programs in pseudocode. We will implement these programs in several different languages and compile them down into JavaScript. We're hoping this will give us a better sense of how these compilers are handling the features of other languages. For instance, JavaScript has very limited scoping options (Global, and Functional) - how does a JS compiler implement other scopes?
I have also been getting more acquainted with JavaScript, the online book Eloquent JavaScript has been enormously helpful. The language still feels very alien to me, I'm not sure if I'll have time to really get the hang of it during my time here.
Though I've been working very hard, it feels like we are still working at a slow pace. I have gotten very used to the quick step undergraduate classes have - I'm glad to have the chance to experience a project with a longer lifespan.
Entry 1: Week of July 1st
posted Jul 7, 2012 10:17 AM
This week started on a quiet note. Other interns who have been placed at UMass started their work in late May, and so everyone has long settled into their routines. Meanwhile, I got back from my semester abroad in Korea a couple of weeks ago (the school schedule there run through late June). Many professors are also away on vacation - and so all in all the whole environment seems quite slow and relaxed.
My first few days were filled with settling in - I had to sort out some paperwork, figure out who to talk to, decide which project to work on, etc. The other intern in my lab was working on a project which my mentor was involved with, and I decided to join up with her research.
The research project is in its infancy, and so the details are a little bit fuzzy. But the main idea is to give programmers the tools to connect to the web within the languages they feel comfortable writing in. Just as modern languages assume that a file system or a monitor exists, they can/should also assume that Internet services (such as cloud based storage) exist as well.
However, the Internet is still largely based in JavaScript. This project aims to see JavaScript as a new kind of assembly language - a sufficiently advanced compiler could handle the messy work of generating the code, and the programmer could avoid the nitty-gritty and work in the language of their choice.
I don't know JavaScript. This is a bit of a problem. I spent the second half of the week reading up on the language so I could be useful in the future. Luckily enough the department is not strict about working in the office, so I've had a great time doing my work in pleasant little coffee shops in the town center (where I am writing this blog entry right now). Amherst is a beautiful place to be in the summer, I feel quite lucky to have the opportunity to be here.
Next week the plan is for me to install emscripten (a C++ -> JavaScript compiler) on my linux machine, and spend time looking at how the program does what needs doing.
Hopefully the heatwave which has stricken the northeast will let up by then so I can ride my bike to work.