<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>From the Ground Up</title>
	<atom:link href="http://blog.mediabymrb.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.mediabymrb.com</link>
	<description>Chronicling the Life of Marc Budofsky</description>
	<lastBuildDate>Sun, 22 Jan 2012 13:04:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Geektool, v2</title>
		<link>http://blog.mediabymrb.com/2012/01/geektool-v2/</link>
		<comments>http://blog.mediabymrb.com/2012/01/geektool-v2/#comments</comments>
		<pubDate>Sat, 21 Jan 2012 17:10:28 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[GeekTool]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1118</guid>
		<description><![CDATA[I was just looking through the analytics and stats for my blog, and realized that almost 1 year later, my Geektool post is generating the most traffic to my site. Given that I recently got a new computer and began using some new geeklets, I figured an update was in order. I&#8217;ll try my best [...]]]></description>
			<content:encoded><![CDATA[<p>I was just looking through the analytics and stats for my blog, and realized that almost 1 year later, my <a href='http://blog.mediabymrb.com/2011/01/mac-os-x-only-geektool/'>Geektool post</a> is generating the most traffic to my site.  Given that I recently got a <a href='http://blog.mediabymrb.com/2012/01/late-2011-mbp/'>new computer</a> and began using some new geeklets, I figured an update was in order.  I&#8217;ll try my best to follow the same format that I used last time &#8211; for geeklets that remain unchanged from my old computer to my new one, I will not be reposting the code; please head over to the <a href='http://blog.mediabymrb.com/2011/01/mac-os-x-only-geektool/'>original post</a> for those geeklets.</p>
<p>And, without any further ado, my current GeekTool setup:<br />
<div id="attachment_1121" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-21-at-11.38.32-AM.png"><img src="http://blog.mediabymrb.com/wp-content/uploads/2012/01/Screen-Shot-2012-01-21-at-11.38.32-AM-1024x640.png" alt="" title="GeekTool Setup" width="500" height="313" class="size-large wp-image-1121" /></a><p class="wp-caption-text">Click to Enlarge</p></div></p>
<p>For the most part, it&#8217;s almost identical to what I was using on my last MBP.  The major changes are (1) ToDo.txt, (2) GCal, and (3) iTunes.  I know that I had iTunes embedded on my desktop in the last post, but with Lion now out, the program I was using did not behave the way I was hoping it would.  I&#8217;ve since switched to a completely GeekTool related way of handling iTunes information.  As was the case last time, some of these scripts are not my own &#8211; I&#8217;ve tried my best to give credit where I can, but if there are any problems, please leave a comment.</p>
<h3 style='margin-top:24px;'>ToDo.txt</h3>
<p><a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_ToDo.png"><img src="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_ToDo.png" alt="" title="GeekTool: ToDo.txt" width="251" height="242" class="aligncenter size-full wp-image-1124" /></a><br />
Header: <code>echo "ToDo's"</code><br />
ToDo.txt  (Local Copy Only): <code>/path/to/todo.sh</code><br />
ToDo.txt (Web Synchronized): <code>/path/to/unison todo.prf -silent -auto -batch; sed -i.bak 's/\\//g' /path/to/todo.txt; /path/to/todo.sh</code></p>
<p>I&#8217;ve written about <a href='http://blog.mediabymrb.com/2011/12/todo-txt-on-the-web/'>ToDo.txt</a> before, and included some screenshots of how I was embedding it on the desktop.  If you only use ToDo.txt on one computer, embedding it on the desktop is as simple as executing the shell script, as shown in the second line above.  If you want to synchronize your todo list between your computer and a remote server, you&#8217;ll need a copy of <a href='http://www.cis.upenn.edu/~bcpierce/unison/'>unison</a> installed on both systems.  In the last line of code above, the first statement synchronizes the text files between both systems, the second statement handles some formatting to ensure everything displays properly, and the last statement prints it out on the desktop.  For those who are interested in the web interface, I will try my best to do a write up on it once I&#8217;m back at school and settle in.</p>
<h3 style='margin-top:24px;'>Calendar</h3>
<p><a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_Calendar.png"><img src="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_Calendar.png" alt="" title="GeekTool: Calendar" width="230" height="85" class="aligncenter size-full wp-image-1122" /></a><br />
Header: <code>echo "Calendar"</code><br />
Calendar Script: <a href='http://blog.mediabymrb.com/wp-content/uploads/2012/01/gcal.pl_.txt'>Download</a> and change the extension to &#8216;.pl&#8217;<br />
Calendar Script Execution: <code>perl ~/Desktop/Perl/gcal.pl</code></p>
<p>There really isnt much to say about the Calendar script &#8211; it pulls upcoming events from your Google Calendar and allows you to display them on your desktop.  If you want to read more about how the script handles it, head over the author&#8217;s <a href='http://www.devangoldstein.com/87/bringing-google-calendar-to-my-desktop/'>post</a> for all the details.</p>
<h3 style='margin-top:24px;'>iTunes</h3>
<p><div id="attachment_1123" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_iTunes.png"><img src="http://blog.mediabymrb.com/wp-content/uploads/2012/01/GeekTool_iTunes-300x73.png" alt="" title="GeekTool: iTunes" width="300" height="73" class="size-medium wp-image-1123" /></a><p class="wp-caption-text">Click to Enlarge</p></div><br />
Unfortunately, CoverStream stopped working properly after I switched to Lion due to the change from Spaces to Mission Control.  Whereas the rest of my geeklets appear to be fixed to the desktop when I move between work spaces, CoverStream looked like an application moving from space to space.  I began the hunt for an alternative, and although I&#8217;ve lost the album artwork, am very happy with the end result.</p>
<p>iTunes Script: <a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/iTunesInfo.scpt_.txt">Download</a> and change the extension to &#8216;.scpt&#8217;<br />
iTunes Script Execution: <code>osascript /path/to/iTunesInfo.scpt</code></p>
<p>As with the Calendar, a simple script is used to display the album information.  The only real drawback from CoverStream is that, due to the refresh rate in GeekTool, this geeklet doesn&#8217;t operate in real time.  That is, if you change a song, it might take a few seconds for your desktop to update with the new information.  Check out the original author&#8217;s <a href='http://www.keynote2keynote.com/2007/04/10/ultimate-geektool-setup-pimp-your-desktop-part-2/'>post</a> for some more information on how the script works.</p>
<p>I know there aren&#8217;t as many geeklets as last time, but with all of them combined, my desktop has become much more functional.  The ability to see my calendar and todo&#8217;s without having to open any additional programs is a huge time saver.  As always, any questions, please don&#8217;t hesitate to post a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2012/01/geektool-v2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Late 2011 MBP</title>
		<link>http://blog.mediabymrb.com/2012/01/late-2011-mbp/</link>
		<comments>http://blog.mediabymrb.com/2012/01/late-2011-mbp/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 00:45:06 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[OS X]]></category>
		<category><![CDATA[Macbook Pro]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[SSD]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1109</guid>
		<description><![CDATA[As I briefly mentioned in my last post, I recently got a new MacBook Pro as an early graduation present to replace my old MBP. Even though it was a brand new computer, I only upgraded a few components when I purchased it &#8211; opting to upgrade the remaining items by myself after. This was [...]]]></description>
			<content:encoded><![CDATA[<p>As I briefly mentioned in my last <a href='http://blog.mediabymrb.com/2011/12/todo-txt-on-the-web/'>post</a>, I recently got a new MacBook Pro as an early graduation present to replace my <a href='http://blog.mediabymrb.com/2010/11/macbook-pro-upgrades/'>old MBP</a>.  Even though it was a brand new computer, I only upgraded a few components when I purchased it &#8211; opting to upgrade the remaining items by myself after.  This was mostly due to the fact that a lot of the upgrades Apple offers are insanely overpriced.  For instance, going from 4 GB to 8 GB of RAM adds $200 onto the price of the computer.  An 8 GB kit of RAM off of <a href='http://www.newegg.com/'>Newegg</a> typically runs between $30 &#8211; $50, depending on the brand and speed.  Additionally, when you have Apple do it for you, they keep the original 4 GB of RAM &#8211; when you do it yourself, you can reuse the 4 GB of RAM in a later project.  </p>
<p>Anyway, the two main components I decided to leave stock were the hard drive and RAM (if you couldn&#8217;t tell already).  The RAM I quickly found on Newegg for $30 &#8211; it was a G.Skill kit (which happens to be my personal go to brand for RAM) at the same speed as the stock RAM in MBP.  By quickly found, I mean the 8 GB of RAM was installed within 3 hours of bringing the computer home.  As for the hard drive, I thought I would be able to handle the switch from the SSD in my old MBP to a 7200 RPM drive in the new computer, but quickly came to realize that the speed difference is HUGE.  Last week I found a 256 GB Samsung 830 Series on Newegg for $350 &#8211; if that sounds a little high to anyone, Apple charges $500 for the 256 GB SSD option, and, again, they keep the original hard drive.  After debating if I should just get it already or wait a little longer, I ended up buying it.  One interesting thing to note is that the hard drive that came in the computer was 9 mm tall, while the SSD was only 7 mm &#8211; there&#8217;s no issue using a smaller drive in the MBP, but I was definitely surprised when I placed the drives side by side.  Here&#8217;s a picture of the SSD fully installed.<br />
<div id="attachment_1110" class="wp-caption aligncenter" style="width: 610px"><a href="http://blog.mediabymrb.com/wp-content/uploads/2012/01/AiYKz4_CMAAmhZ8.jpg"><img src="http://blog.mediabymrb.com/wp-content/uploads/2012/01/AiYKz4_CMAAmhZ8.jpg" alt="" title="Samsung 830 Series SSD, 256 GB" width="600" height="448" class="size-full wp-image-1110" /></a><p class="wp-caption-text">256 GB Samsung 830 Series in Late 2011 MacBook Pro</p></div></p>
<p>After upgrading the RAM and swapping out the HDD for an SSD, the computer is insanely fast.  Not to say it was a slouch before &#8211; the quad core i7 is definitely a huge improvement over the Core 2 Duo that was in my old MBP &#8211; but the difference between a traditional hard drive and a solid state drive is staggering.  The computer is virtually quiet during normal operation, and only audible when the fans kick on if its working a little harder than normal.  Overall, I&#8217;m loving my new MBP &#8211; its amazing how much of a difference 4 years makes in the computer world.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2012/01/late-2011-mbp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another One Down</title>
		<link>http://blog.mediabymrb.com/2012/01/another-one-down/</link>
		<comments>http://blog.mediabymrb.com/2012/01/another-one-down/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 02:47:30 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1105</guid>
		<description><![CDATA[Just wanted to take a moment and wish everyone a happy and healthy 2012 &#8211; I have some new projects in the works, so new posts are on the horizon. Stay tuned!]]></description>
			<content:encoded><![CDATA[<p>Just wanted to take a moment and wish everyone a happy and healthy 2012 &#8211; I have some new projects in the works, so new posts are on the horizon.  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2012/01/another-one-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ToDo.txt on the Web</title>
		<link>http://blog.mediabymrb.com/2011/12/todo-txt-on-the-web/</link>
		<comments>http://blog.mediabymrb.com/2011/12/todo-txt-on-the-web/#comments</comments>
		<pubDate>Thu, 29 Dec 2011 23:45:09 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[GeekTool]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1074</guid>
		<description><![CDATA[While I was home over Thanksgiving break, I got an early graduation gift from my parents &#8211; a new 2.5 GHz i7 MacBook Pro. In the process of transferring all of my programs and documents to the new computer, I decided to look into some new programs to install, specifically a better way to keep [...]]]></description>
			<content:encoded><![CDATA[<p>While I was home over Thanksgiving break, I got an early graduation gift from my parents &#8211; a new 2.5 GHz i7 MacBook Pro.  In the process of transferring all of my programs and documents to the new computer, I decided to look into some new programs to install, specifically a better way to keep track of my todo list.  Recently, my todo list consisted of a 1/4 piece of printer paper that I would write out each Sunday when starting my work for the week, and hope that I would still be able to find by the middle of the week.  I remembered reading about <a href='http://todotxt.com/'>todo.txt</a> a while back, and looked into it.  The basic premise behind the program is a simple, text-based todo list that is updatable via the terminal and a few basic shell script commands.  I set it up on my new MBP, and was immediately impressed by the program.  I was talking to my friend <a href='http://alexbeutel.com'>Alex</a> about the program, and started thinking about how convenient it would be to have a web based todo list.  I looked into a few web apps that already existed, but quickly found a web-wrapper for todo.txt.  It was written in PHP, and wrapped the shell commands in a convenient web interface.  After getting the basic web functionality working, I began looking into ways to synchronize the local todo list on my computer with the copy stored on my server.  I was originally going to try and use rsync, but found out it was a one way algorithm.  Upon further searching, I came across unison &#8211; it operates using the same concepts as rsync, but allows for two-way syncing.  The next hurdle was getting my hands on the appropriate binaries for each operating system (OS X for the MBP, and Linux, specifically CentOS, for my server) and making sure that they were the same version.  Unison only allows syncing between identical versions of the binary &#8211; if you have 2.44 installed on your local system, 2.44 must also be installed on the server; there is no backward compatibility.  The OS X binary was easy; I fired up Terminal and issued the appropriate commands and was up and running.  For my server, I set up a CentOS virtualization to create the binary and then copied it over ssh to the appropriate location on my server.  After everything was set up, I began tweaking a preference file that would automatically and silently handle the synchronization, and be fired from Geektool every couple of minutes.  Additionally, by using Geektool to handle the synchronization between the server and the local copy, displaying the output on my desktop was also easily done.  By handling the entire system the way that I have, I can update my todo list from any of my computers, or from the web interface, and always ensure that the latest copy will be downloaded and displayed locally.  </p>
<p>Check out the screenshots below, and check back in the next few weeks &#8211; I&#8217;m hoping to clean up some of my modifications to the web-wrapper and repackage it for others to use.  I only made a few changes with regard to security and formatting the output, but I think they&#8217;ll be helpful so that someone else doesn&#8217;t have to worry about.  Any questions, leave a comment below.</p>
<p>GeekTool:<br />
<div id="attachment_1081" class="wp-caption aligncenter" style="width: 275px"><img src="http://blog.mediabymrb.com/wp-content/uploads/2011/12/GeekTool.jpg" alt="" title="GeekTool" width="265" height="152" class="size-full wp-image-1081" /><p class="wp-caption-text">ToDo.txt Embedded on Desktop via Geektool</p></div><br />
Terminal:<br />
<div id="attachment_1083" class="wp-caption aligncenter" style="width: 554px"><img src="http://blog.mediabymrb.com/wp-content/uploads/2011/12/Terminal1.jpg" alt="" title="Terminal" width="544" height="266" class="size-full wp-image-1083" /><p class="wp-caption-text">ToDo.txt in Terminal</p></div><br />
Web:<br />
<div id="attachment_1084" class="wp-caption aligncenter" style="width: 660px"><img src="http://blog.mediabymrb.com/wp-content/uploads/2011/12/Web.jpg" alt="" title="Web" width="650" height="365" class="size-full wp-image-1084" /><p class="wp-caption-text">ToDo.txt via the Web</p></div></p>
<p><strong>Update [1/6/2012]:</strong> It seems that the organization behind ToDo.txt realized that they needed official iOS support and recently released their own native client.  You can check it out <a href='http://itunes.apple.com/us/app/todo.txt-touch/id491342186?ls=1&#038;mt=8'>here</a>.  I havent bought it yet (the $1.99 seems a little steep for what its actually doing), but from reading the reviews of it, you need to keep your todo file in your dropbox; not as clean a solution as I was hoping they would come out with, but probably offers a little more functionality than my web interface.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/12/todo-txt-on-the-web/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New Google Bar</title>
		<link>http://blog.mediabymrb.com/2011/12/new-google-bar/</link>
		<comments>http://blog.mediabymrb.com/2011/12/new-google-bar/#comments</comments>
		<pubDate>Fri, 09 Dec 2011 21:30:27 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Cookies]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Toolbar]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1071</guid>
		<description><![CDATA[The other day, one of my friend&#8217;s showed me the blog he had been working on for one of his classes during the past semester. One of the posts explained how to enable the new Google Bar, but was strictly tailored to Google Chrome. After a quick search, I found the necessary plugin for Firefox [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, one of my friend&#8217;s showed me the <a href='http://www.thetechupload.com/'>blog</a> he had been working on for one of his classes during the past semester.  One of the posts explained how to <a href='http://www.thetechupload.com/2011/12/dont-wait-for-new-google-bar-get-it-now.html'>enable the new Google Bar</a>, but was strictly tailored to Google Chrome.  After a quick search, I found the necessary plugin for Firefox to achieve the same functionality:</p>
<p>1. Download and install <a href='https://addons.mozilla.org/en-US/firefox/addon/cookies-manager-plus/?src=search'>Cookies Manager+</a> for Firefox.  Restart to complete the installation.<br />
2. Open &#8216;Cookies Manager+&#8217; and enter &#8216;PREF&#8217; in the search bar.<br />
3. Under sites, find the cookie for &#8216;google.com&#8217; &#8211; the name of the cookie should be &#8216;PREF&#8217;<br />
4. Double click the cookie to edit it.  Change the &#8216;Content&#8217; to &#8216;ID=03fd476a699d6487:U=88e8716486ff1e5d:FF=0:LD=en:CR=2:TM=1322688084:LM=1322688085:S=McEsyvcXKMiVfGds&#8217;<br />
5. Reload any Google site (Gmail/Calendar/+/etc) and you should have the new Google Bar enabled.</p>
<p>Its a nice change from the toolbar approach Google was using before &#8211; everything is contained in a single drop down menu from the Google logo.  Make sure to check out my friends blog (<a href='http://www.thetechupload.com/'>TheTechUpload.com</a>) for some more interesting tricks and hacks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/12/new-google-bar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyBroadway</title>
		<link>http://blog.mediabymrb.com/2011/11/mybroadway/</link>
		<comments>http://blog.mediabymrb.com/2011/11/mybroadway/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 11:03:32 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Binghamton University]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Binghamton]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Information Systems]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MIS]]></category>
		<category><![CDATA[MyBroadway]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1064</guid>
		<description><![CDATA[In order to finish my MBA with a concentration in Management Information Systems (MIS), I&#8217;m required to take Information Systems. The general concept behind the class is to understand the necessary steps that go into the analysis and design of IT systems. For the second half of the semester, we&#8217;ve focused on creating and analyzing [...]]]></description>
			<content:encoded><![CDATA[<p>In order to finish my MBA with a concentration in Management Information Systems (MIS), I&#8217;m required to take Information Systems.  The general concept behind the class is to understand the necessary steps that go into the analysis and design of IT systems.  For the second half of the semester, we&#8217;ve focused on creating and analyzing <a href='http://en.wikipedia.org/wiki/Data_flow_diagram'>Data Flow Diagrams</a> (DFDs) and <a href='http://en.wikipedia.org/wiki/Entity-relationship_model'>Entity-Relationship Diagrams</a> (ERDs).  Throughout the entire semester, we&#8217;ve been working in groups to do analysis of the fictitious MyBroadway Video Rental Company.  Each case builds on the previous one &#8211; we started looking at a broad overview of the system, then moved into creating DFDs and ERDs to model and mockup a finished product.  Instead of having a traditional final for the class, we were given the option to do a final project and presentation.  The final project was to implement the databases we designed during the ERD analysis and create a working prototype.  My professor gave us two options for creating the database: (1) use Microsoft Access to design the tables and just create basic user interface to test them or (2) use PHP/MySQL to create a functional website to demonstrate how the product would work for both customers and employees.  I immediately gravitated towards the PHP option and began coding.</p>
<p>I started by designing a simple layout that was aesthetically pleasing, and added in the basic functionality: register a new account and login to the system.  Given that it was supposed to be a movie rental portal, I next had to figure out where to get a decent sized movie library that I could store in my database.  After some thinking and googling, I decided to use IMDBs Top 250 as a starting point.  I originally thought of writing a scraper from scratch to obtain the relevant information, but quickly found out that <a href='http://imdbapi.com/'>IMDB API</a> was freely available.  However, in order to use IMDB API, I needed to have the movie list stored somewhere; either in the database or as a text file.  A little more googling led me to <a href='https://scraperwiki.com/'>ScraperWiki</a>, where I found a <a href='https://scraperwiki.com/scrapers/imdb_top_250_2/'>scraper</a> that was already written to dump the Top 250 into a .CSV file.  After uploading the .CSV file to my server, I put together a quick PHP script to parse it out and save the IMDB IDs into a table.  Now I was in business &#8211; another quick script to run the IDs through IMDB API and I had a working movie database.  I also ended up saving the movie posters from IMDB locally on my server to avoid hotlinking them every time the page was loaded.  After getting the movies all put together, I started building out the rest of the functionality: rent/buy movies, checkout, request a new title, view/return rentals, view purchases, and view transaction history.  To reduce the amount of reloads the user would have when navigating the site, I ended up linking almost all of the operations to AJAX requests that queried PHP scripts and updated the DOM using jQuery.  </p>
<p>Some of the other fun features that stand include:</p>
<ul>
<li>Facebook/Google+ like notifications for when items are in the cart or rentals are overdue.</li>
<li>A &#8216;Quick Cart&#8217; dropdown that appears when the notification for the Shopping Cart is clicked.</li>
<li>A few CSS3 hacks to create a wrapping effect around the body of the page.</li>
<li>Embedded Trailers when viewing the details of a single movie.</li>
<li>A scrolling interface for the movies page that allows the user to view all of the movies in the catalog without reloading the page</li>
<li>&#8220;Employee&#8221; reviews of movies, with a 5-star rating system.</li>
<li>The ability to request a new movie, or vote for a movie requested by another customer.</li>
<li>Similar Movies (when on a Movie detail page) and Suggestions calculated on the fly based off of the genre of the current movie or previous transactions, respectively.</li>
</ul>
<p>I&#8217;m sure I left a few things out &#8211; I&#8217;ve been working on the site for about 3 weeks now, so I know what I&#8217;m expecting to see at this point.  Overall, it was a fun project to work on, and it allowed me to test out some new features that I probably wouldn&#8217;t have had the time to on a real production site.  Anyway, you can check out the working prototype <a href='school.mediabymrb.com/mybroadway/'>here</a> &#8211; just register an account and start playing around with it.  Any questions or comments, leave me a post below.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/11/mybroadway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Damien Walters Showreel</title>
		<link>http://blog.mediabymrb.com/2011/11/damien-walters-showreel/</link>
		<comments>http://blog.mediabymrb.com/2011/11/damien-walters-showreel/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 06:44:47 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1059</guid>
		<description><![CDATA[Completely unrelated to programming, but I came across this the other night and proceeded to watch every video on his YouTube channel. Damien Walters is a gymnast from the UK that&#8217;s helped pioneer some of the new tricks in freerunning &#8211; some of the stuff is pretty crazy. Kind of makes me wish my parents [...]]]></description>
			<content:encoded><![CDATA[<p>Completely unrelated to programming, but I came across this the other night and proceeded to watch every video on his YouTube channel.  Damien Walters is a gymnast from the UK that&#8217;s helped pioneer some of the new tricks in freerunning &#8211; some of the stuff is pretty crazy.  Kind of makes me wish my parents had enrolled me in gymnastics when I was younger so I could do this stuff now.  Anyway, check out the video below.  I&#8217;ll be writing up a post about a new website I built for one of my classes in the next couple of weeks, so check back for that &#8211; you can play around with the site <a href='http://school.mediabymrb.com/mybroadway/'>here</a> if you want to see it out beforehand.</p>
<p><center><iframe width="560" height="315" src="http://www.youtube.com/embed/zQgFxDSqft4" frameborder="0" allowfullscreen></iframe></center></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/11/damien-walters-showreel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Purely Functional Programming</title>
		<link>http://blog.mediabymrb.com/2011/11/purely-functional-programming/</link>
		<comments>http://blog.mediabymrb.com/2011/11/purely-functional-programming/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 02:40:08 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Functional]]></category>
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1056</guid>
		<description><![CDATA[Registration for the Spring semester opens tomorrow, so I&#8217;ve been trying to figure out what classes I want/need to take to finish my MBA on time. After looking over the Management/MIS classes I need, I realized I have a little extra room in my schedule and decided, given that I&#8217;m in the process of applying [...]]]></description>
			<content:encoded><![CDATA[<p>Registration for the Spring semester opens tomorrow, so I&#8217;ve been trying to figure out what classes I want/need to take to finish my MBA on time.  After looking over the Management/MIS classes I need, I realized I have a little extra room in my schedule and decided, given that I&#8217;m in the process of applying to MS Computer Science Programs, that it might be beneficial to try and fit in a CS or Engineering class.  I&#8217;ve always been interested in taking Algorithms, especially after working on <a href='http://youruniversitymaps.com'>Your University Maps</a> and implementing Dijkstra&#8217;s Algorithm, so I headed over to the CS department to talk to the director.  I knew it was a long shot &#8211; even as an CoE, I was never allowed to take CS classes beyond the required ones, but thought if I explained my intentions of pursuing a MS in CS, I might be able to talk my way into the class.  Long story short, the head of the CS department hadn&#8217;t changed her opinion of allowing non-CS students into CS classes before the start of the semester, and she said no.  However, in the process of trying to work my way into the class, I asked if there were any languages that I should look into on the off chance there is an open spot come next semester, and she mentioned Haskell.  I originally thought she said Pascal, but after glancing at the bookshelf in her office, realized my mistake.  I thanked her for meeting with me and went on my way.</p>
<p>Once I got back to my room, I decided to look into Haskell &#8211; I always enjoy playing with new languages, even if its just to brush the surface.  After reading a little about Haskell, I came to the conclusion that its unlike any language I&#8217;ve ever programmed in before.  Whereas Java/C++/C are imperative languages with control structures and a defined structure, Haskell is a functional language.  The concept itself is a very interesting one &#8211; rather than modifying variables and data as the program executes, Haskell focuses on the functions.  From one of the <a href='http://learnyouahaskell.com/chapters'>tutorials</a> off <a href='http://www.haskell.org/haskellwiki/Tutorials'>HaskellWiki</a>, &#8220;In purely functional programming you don&#8217;t tell the computer what to do as such but rather you tell it what stuff <em>is</em>.&#8221;  </p>
<p>I&#8217;ll do some write-ups as I start to mess around with the language more &#8211; I&#8217;m excited to start working in a new programming paradigm.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/11/purely-functional-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMS, AJAX, and Custom Analytics</title>
		<link>http://blog.mediabymrb.com/2011/10/cms-ajax-and-custom-analytics/</link>
		<comments>http://blog.mediabymrb.com/2011/10/cms-ajax-and-custom-analytics/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 16:14:18 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Binghamton University]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=986</guid>
		<description><![CDATA[My boss asked me a few weeks ago to develop a site for one of the professors at Binghamton University. The site was to just be a redesign for some content the professor already had hosted, and needed to be clean and simple to use. After talking to my boss, we decided on a basic [...]]]></description>
			<content:encoded><![CDATA[<p>My boss asked me a few weeks ago to develop a site for one of the professors at Binghamton University.  The site was to just be a redesign for some content the professor already had hosted, and needed to be clean and simple to use.  After talking to my boss, we decided on a basic layout, with a CMS to easily change the content using <a href='http://ckeditor.com/'>CKEditor</a>.</p>
<p>I started by setting up a basic framework for the site, throwing some dummy text in to help me visualize everything.  After getting the look the way I wanted it, I decided to switch gears over to the CMS implementation to get that squared away.  Once I had the ability to add new pages, including whether they should be in the menu as a top level or a submenu, and could add the appropriate text, I threw a couple of pages into the database and went to check the front end.  </p>
<p>At first I was going to use some .htaccess rewrites to make the URL look clean, and just pass the page names via the $_GET parameter &#8211; I&#8217;ve done this on a couple of sites already, and it helps keep a clean layout.  After looking at the content that was actually being loaded, I realized that I wanted to take this site a step further.  Rather than reloading the page each time a link was clicked, I decided to throw together a small PHP script to query the database, and use Javascript and AJAX to dynamically alter the page &#8211; I wanted to make it so that the user never left the &#8216;index.php&#8217; page.  After some testing, and re-testing, I finally had it working, and even got it to display a 404 error if the page wasn&#8217;t found in the database.  I even tried to add a loading image, to be displayed while the database was being queried, but the whole process was firing so fast that it never got a chance to show up.</p>
<p>The final step was to add some analytics &#8211; I usually immediately turn to Google for this, but given that the site never left the index, I realized that this wouldn&#8217;t provide accurate tracking.  After some quick searching, I found a <a href='http://www.noupe.com/php/how-to-create-your-own-stats.html'>tutorial</a> on how to make a basic analytics tracker.  I ended up modifying it slightly to fit into the AJAX implementation, but ended up getting it to save an entry each time a page was loaded from the database.</p>
<p>I&#8217;m putting the finishing touches on the site as I&#8217;m writing this, but expect a more in-depth tutorial in the coming weeks &#8211; I plan on using the entire framework from this site as my starting point for more projects in the future.  To check out the site, head over <a href='http://harvey.binghamton.edu/~ccarpen/_new/'>here</a> to test it out. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/10/cms-ajax-and-custom-analytics/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Modifying Banner via the DOM</title>
		<link>http://blog.mediabymrb.com/2011/10/modifying-banner-via-the-dom/</link>
		<comments>http://blog.mediabymrb.com/2011/10/modifying-banner-via-the-dom/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 13:48:42 +0000</pubDate>
		<dc:creator>Marc Budofsky</dc:creator>
				<category><![CDATA[Binghamton University]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[Banner]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Hack]]></category>
		<category><![CDATA[Name]]></category>
		<category><![CDATA[Unofficial Transcript]]></category>

		<guid isPermaLink="false">http://blog.mediabymrb.com/?p=1043</guid>
		<description><![CDATA[I recently decided to redo my resume in LaTex, and the template/tutorial I was following linked their GPA to a copy of their unofficial transcript. I thought this was a good idea, and decided to follow suit. I headed over to BUBrain (Binghamton University&#8217;s student backend) and printed a copy of my unofficial transcript to [...]]]></description>
			<content:encoded><![CDATA[<p>I recently decided to redo my resume in LaTex, and the <a href='http://www.thelinuxdaily.com/2008/10/latex-resume-examples/'>template/tutorial</a> I was following linked their GPA to a copy of their unofficial transcript.  I thought this was a good idea, and decided to follow suit.  I headed over to BUBrain (Binghamton University&#8217;s student backend) and printed a copy of my unofficial transcript to a PDF.  In the process, I removed the header and navigation from the transcript to provide it with an overall cleaner look, leaving only the essential information.  However, the process of removing the header also removed the only reference to my name on the transcript.  I found this a little odd and sent an email to the helpdesk, inquiring how I would go about requesting a change to the system to include a students name in the body of the transcript.  They proceeded to forward my email to the registrar, who informed me that there were no plans to correct my &#8216;problem&#8217;; the name was placed where it was &#8220;to make it more obvious that this was an unofficial transcript&#8221;.  I was told the only way to obtain a copy of a transcript with my name in a clear location would be to purchase an official transcript.</p>
<p>Rather than continue arguing with the registrar, I decided to work up a quick hack that would provide me with the end result I desired.  I fired up Chrome and opened the developer console.  I originally tried using some jQuery syntax, but quickly realized that Banner does not include jQuery by default.  After some quick googling, I found two StackOverflow threads that addressed my needs: 1. <a href='http://stackoverflow.com/questions/7474354/include-jquery-in-the-chrome-javascript-console'>Include jQuery via the console</a>, and 2. <a href='http://stackoverflow.com/questions/3577860/jquery-insert-new-row-into-table-at-a-certain-index'>Add a row to a specific location in a table</a>.  After some quick testing, I put together what was needed to add the student name under the heading of &#8216;Student Information&#8217;, placing it together with &#8216;Birth Date&#8217; and &#8216;Student Type&#8217;.</p>
<p>First, you must add jQuery:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1043code3'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10433"><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code" id="p1043code3"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> jq <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'script'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
jq.<span style="color: #660066;">src</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js&quot;</span><span style="color: #339933;">;</span>
document.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'head'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">appendChild</span><span style="color: #009900;">&#40;</span>jq<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Then add the data:</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1043code4'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p10434"><td class="line_numbers"><pre>1
</pre></td><td class="code" id="p1043code4"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.datadisplaytable &gt; tbody &gt; tr'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">eq</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">after</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'&lt;TR&gt;&lt;TH COLSPAN=&quot;2&quot; CLASS=&quot;ddlabel&quot; scope=&quot;row&quot; &gt;Student Name:&lt;/TH&gt;&lt;TD COLSPAN=&quot;10&quot; CLASS=&quot;dddefault&quot;&gt;[NAME GOES HERE]&lt;/TD&gt;&lt;/TR&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>The code simply adds jQuery into the DOM, then finds the table (.datadisplaytable in my case), moves into the body of the table, then the rows, finds the 3rd row (starting from 0, so row 2 in this case) and appends the provided html after this row.  Following the format of the original markup, I add an extra row with the appropriate information.</p>
<p>Finally, I had to enter the commands in Firebug, as Firefox was the only browser that I tested this on that placed a page break between the content I wanted to remove and the information that I actually needed.  The end result: my unofficial transcript, with my name in an easily identifiable location, minus all of the unnecessary markup added to it by the system.</p>
<p>This should theoretically work for any school utilizing the Banner system for their student portal/unofficial transcripts.  Any questions, leave a comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.mediabymrb.com/2011/10/modifying-banner-via-the-dom/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

