<?xml version="1.0"?>
<News hasArchived="true" page="8590" pageCount="10722" pageSize="10" timestamp="Sun, 12 Jul 2026 02:01:58 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8590">
<NewsItem contentIssues="true" id="31680" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31680">
<Title>From Procedural to Object Oriented PHP</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32853&amp;c=425065995" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32853&amp;c=425065995" alt="" style="max-width: 100%; height: auto;"></a><p>This tutorial was inspired by a speech given by Robert C. Martin that I watched a year or so ago. The main subject of his talk is about the possibility of picking <a href="http://skillsmatter.com/podcast/agile-testing/bobs-last-language" rel="nofollow external" class="bo">The Last Programming Language</a>. He addresses topics such as why should such a language exist? And what it should look like? However, if you read between the lines, there was another interesting idea that caught my attention: the limitations that each programming paradigm imposes upon on us programmers. So before we get into how we could go about converting a procedural based PHP app into an object oriented one, I want to cover a little bit of theory beforehand.</p>
    <p></p>
    <hr>
    <h2>Paradigm Limitations</h2>
    <p>So, each programming paradigm limits our ability to do whatever we want to do. Each of them takes something away and provides an alternative to achieve the same result. Modular programming takes away unlimited program size. It enforces the programmer to use maximum sized modules and each module ends with a “go-to” statement to another module. So the first limitation is upon size. Then, structured programming and procedural programming takes away the “go-to” statement and limits the programmer to sequence, selection and iteration. Sequences are variable assignments, selections are if-else decisions, and iterations are do-while loops. These are the building blocks of most programming languages and paradigms today.</p>
    <p>Object oriented programming takes away pointers to functions and introduces polymorphism. PHP doesn’t use pointers in a way that C does, but a variant of these pointers to functions can be observed in <a href="http://us3.php.net/manual/en/functions.variable-functions.php" rel="nofollow external" class="bo">Variable Functions</a>. This allows a programmer to use the value of a variable as the name of a function, so that something like this can be achieved:</p>
    <pre>function foo() {&#x000A;        echo "This is foo";&#x000A;    }&#x000A;    &#x000A;    function bar($param) {&#x000A;        echo "This is bar saying: $param";&#x000A;    }&#x000A;    &#x000A;    $function = 'foo';&#x000A;    $function();        // Goes into foo()&#x000A;    &#x000A;    $function = 'bar';&#x000A;    $function('test');  // Goes into bar()</pre>
    <p>This may not look important at first sight. But think about what we can achieve with such a powerful tool. We can send a variable as a parameter to a function and then let that function call the other one, referenced by the value of the parameter. This is amazing. It allows us to alter the functionality of a function without it knowing it. Without the function even noticing any difference.</p>
    <p>We actually can do polymorphic calls with this technique as well.</p>
    <p>Now, instead of thinking about what pointers to functions provide, think about how they work. Aren’t they just hidden “go-to” statements? Actually, they are, or at least they are very similar to indirect “go-to”s. Which is not very good. What we have here is in fact a clever way to do “go-to” without using it directly. I have to admit that in PHP, as the example above shows, it is quite easy to understand, but it may get confusing with larger projects and many different functions passed from one function to another. In C it is even more obscure and hideously difficult to understand.</p>
    <p>However, just taking away pointers to functions is not enough. Object oriented programming must provide a replacement, and it does, in an elegant way. It offers polymorphism with an easy syntax. And with polymorphism, comes the biggest value object oriented programming offers: The flow of control is opposed to the source code dependency.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/dependency_comparison.png" alt="dependency_comparison" width="600" height="219" style="max-width: 100%; height: auto;"><br> <p>In the image above we illustrated a simple example of how polymorphic calls happen in the two different paradigms. In procedural or structural programming, the flow of control is similar to the source code dependency. They both point toward the more concrete implementation of the printing behavior.</p>
    <p>In object oriented programming, we can reverse the source code dependency and make it point toward the more abstract implementation, while keeping the flow of control pointing to the more concrete implementation. This is essential, because we want our control to go and reach the most possible concrete and volatile part of our code so that we can get our result exactly as we want it, but in our source code we want the exact opposite. In our source code we want the concrete and volatile stuff to stay out of the way, to be easy to change and to affect as little as possible of the rest of our code. Let the volatile parts change frequently but keep the more abstract parts unmodified. You can read more about the Dependency Inversion Principle in the <a href="http://www.objectmentor.com/resources/articles/dip.pdf" rel="nofollow external" class="bo">original research paper</a> written by Robert C. Martin.</p>
    <hr>
    <h2>The Task at Hand</h2>
    <p>In this chapter we will create a simple application to list out Google calendars and the events within them. First we will take a procedural approach, using only simple functions and avoiding any kind of classes or objects. The application will allow you to list your Google calendars and events. Then we will take the problem one step further by keeping our procedural code and starting to organize it by behavior. Finally we will transform it into an object oriented version.</p>
    <hr>
    <h2>PHP Google API Client</h2>
    <p>Google provides an API client for PHP. We will use it to connect to our Google account so that we can manipulate calendars there. If you want to run the code, you must set up your Google account to accept calendar queries.</p>
    <p>Even though this is a requirement for the tutorial, it is not its main subject. So instead of me repeating the steps you have to take, I will point you to the right documentation. Don’t worry, it is very simple to setup and it takes only about five minutes.</p>
    <p>The PHP Google API client code is included in each project from the example code attached to this tutorial. I recommend you use that one. Alternatively, if you are curious about how to install it yourself, <a href="http://code.google.com/p/google-api-php-client/" rel="nofollow external" class="bo">check out the official documentation</a>.</p>
    <p>Then follow the instructions and fill in the information in the <code>apiAccess.php</code> file. This file will be required by both the procedural and object oriented examples, so you do not need to repeat it. I left my keys in there so you can more easily identify and fill in yours.</p>
    <p>If you happen to use NetBeans, I left the project files in the folders containing the different examples. This way you can simply open the projects and run them immediately on a local PHP server (PHP 5.4 is required) by just simply selecting <strong>Run / Run Project</strong>.</p>
    <p>The client library to connect to the Google API is object oriented. For the sake of our functional example, I wrote a small set of functions that wrap in them, the functionalities we need. This way, we can use a procedural layer written over the object oriented client library so that our code will not have to use objects.</p>
    <p>If you want to quickly test that your code and connection to the Google API is working, just use the code below as your <code>index.php</code> file. It should list all the calendars you have in your account. There should be at least one calendar with the <strong>summary</strong> field being your name. If you have a calendar with your contact’s birthdays, that one may not work with this Google API, but don’t panic, just choose another one.</p>
    <pre>require_once './google-api-php-client/src/Google_Client.php';&#x000A;    require_once './google-api-php-client/src/contrib/Google_CalendarService.php';&#x000A;    require_once __DIR__ . '/../apiAccess.php';&#x000A;    require_once './functins_google_api.php';&#x000A;    require_once './functions.php';&#x000A;    session_start();&#x000A;    &#x000A;    $client = createClient();&#x000A;    if(!authenticate($client)) return;&#x000A;    listAllCalendars($client);</pre>
    <p>This <code>index.php</code> file will be the entry point to our application. We won’t use a web framework or anything fancy. We will just simply output some HTML code.</p>
    <hr>
    <h2>A Direct Procedural Approach</h2>
    <p>Now that we know what we’re building and what we’ll be using, go ahead and download the attached source code. I will provide snippets from it, but in order to see the whole thing, you’ll want to have access to the original source.</p>
    <p>For this approach, we just want to get things working. Our code will be organized in a very rudimentary way, with just a few files, like this:</p>
    <ul>
    <li>
    <strong>index.php</strong> – the only file we access directly from the browser and pass to it GET parameters.</li>
    <li>
    <strong>functions_google_api.php</strong> – the wrapper over the Google API we talked about above.</li>
    <li>
    <strong>functions.php</strong> – where everything happens.</li>
    </ul>
    <p><code>functions.php</code> will house everything that our application does. Both the routing logic, the presentations, and whatever values and behavior may be buried in there. This application is pretty simple, the main logic is as follows.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/procedural_schema.png" alt="procedural_schema" width="600" height="261" style="max-width: 100%; height: auto;"><br> <p>We have a single function called <code>doUserAction()</code>, which decides with a long <code>if-else</code> statement, which other methods to call based on the parameters in the <code>GET</code> variable. The methods then connect to Google calendar using the API and print out to the screen whatever we want to request.</p>
    <pre>function printCalendarContents($client) {&#x000A;    	putTitle('These are you events for ' . getCalendar($client, $_GET['showThisCalendar'])['summary'] . ' calendar:');&#x000A;    	foreach (retrieveEvents($client, $_GET['showThisCalendar']) as $event) {&#x000A;    		print('&lt;div style="font-size:10px;color:grey;"&gt;' . date('Y-m-d H:m', strtotime($event['created'])));&#x000A;    		putLink('?showThisEvent=' . htmlentities($event['id']) .&#x000A;    				'&amp;calendarId=' . htmlentities($_GET['showThisCalendar']), $event['summary']);&#x000A;    		print('&lt;/div&gt;');&#x000A;    		print('&lt;br&gt;');&#x000A;    	}&#x000A;    }</pre>
    <p>This example is probably the most complicated function in our code. It calls a helper function named <code>putTitle()</code>, which just prints out some formatted HTML for the heading. The title will contain the name for our calendar which can be obtained by calling <code>getCalendar()</code> from <code>functions_google_api.php</code>. The returned calendar will be an array, containing a <code>summary</code> field. That is what we are after.</p>
    <p>The <code>$client</code> variable is passed all over the place in all of our functions. It is required to connect to the Google API. We will deal with this later.</p>
    <p>Next, we cycle over all of the events in the current calendar. This list of arrays is obtained by running the API call encapsulated in <code>retrieveEvents()</code>. For each event, we print out the date it was created and then its title.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/events_in_a_calendar.png" alt="events_in_a_calendar" width="571" height="259" style="max-width: 100%; height: auto;"><br> <p>The rest of the code is similar to what we’ve already discussed and even easier to understand. Feel free to play around with it before continuing on to the next section.</p>
    <hr>
    <h2>Organizing the Procedural Code</h2>
    <p>Our current code is OK, but I think we can do better and organize it in a more appropriate way. You can find the project with the completed organized code under the name “GoogleCalProceduralOrganized” in the attached source code.</p>
    <h3>Using a Global Client Variable</h3>
    <p>The first thing that annoys me about our unorganized code, is that we are passing this <code>$client</code> variable in as an argument all over the place, several levels deep within nested functions. Procedural programming has a clever way to solve this, a global variable. Since <code>$client</code> is defined in <code>index.php</code> and in the global scope, all we have to change is how our functions use it. So instead of expecting a <code>$client</code> parameter, we can use:</p>
    <pre>function printCalendars() {&#x000A;    	global $client;&#x000A;    	putTitle('These are your calendars:');&#x000A;    	foreach (getCalendarList($client)['items'] as $calendar) {&#x000A;    		putLink('?showThisCalendar=' . htmlentities($calendar['id']), $calendar['summary']);&#x000A;    		print('&lt;br&gt;');&#x000A;    	}&#x000A;    }</pre>
    <p>Compare the current code to the newly organized code to see the difference. Instead of passing in <code>$client</code> as a parameter, we used <code>global $client</code> in all of our functions and passed it as a parameter only to the Google API functions. Technically, even the Google API functions could have used the <code>$client</code> variable from the global scope, but I think it is better to keep the API as independent as possible.</p>
    <h3>Separating Presentation From Logic</h3>
    <p>Some functions are clearly, only for printing things on the screen, others are for deciding what to do, and some are a little bit of both. When this occurs, sometimes it’s best to move these specific-purpose functions into their own file. We’ll start with the functions used purely for printing things to the screen, these will be moved into a <code>functions_display.php</code> file. See them below.</p>
    <pre>function printHome() {&#x000A;    	print('Welcome to Google Calendar over NetTuts Example');&#x000A;    }&#x000A;    &#x000A;    function printMenu() {&#x000A;    	putLink('?home', 'Home');&#x000A;    	putLink('?showCalendars', 'Show Calendars');&#x000A;    	putLink('?logout', 'Log Out');&#x000A;    	print('&lt;br&gt;&lt;br&gt;');&#x000A;    }&#x000A;    &#x000A;    function putLink($href, $text) {&#x000A;    	print(sprintf('&lt;a href="%s" style="font-size:12px;margin-left:10px;"&gt;%s&lt;/a&gt; | ', $href, $text));&#x000A;    }&#x000A;    &#x000A;    function putTitle($text) {&#x000A;    	print(sprintf('&lt;h3 style="font-size:16px;color:green;"&gt;%s&lt;/h3&gt;', $text));&#x000A;    }&#x000A;    &#x000A;    function putBlock($text) {&#x000A;    	print('&lt;div display="block"&gt;'.$text.'&lt;/div&gt;');&#x000A;    }</pre>
    <p>The rest of this process of separating our presentation from logic requires us to extract the presentation part from our methods. Here is how we did it with one of the methods.</p>
    <pre>function printEventDetails() {&#x000A;    	global $client;&#x000A;    	foreach (retrieveEvents($_GET['calendarId']) as $event)&#x000A;    		if ($event['id'] == $_GET['showThisEvent']) {&#x000A;    			putTitle('Details for event: '. $event['summary']);&#x000A;    			putBlock('This event has status ' . $event['status']);&#x000A;    			putBlock('It was created at ' .&#x000A;    					date('Y-m-d H:m', strtotime($event['created'])) .&#x000A;    					' and last updated at ' .&#x000A;    					date('Y-m-d H:m', strtotime($event['updated'])) . '.');&#x000A;    			putBlock('For this event you have to &lt;strong&gt;' . $event['summary'] . '&lt;/strong&gt;.');&#x000A;    		}&#x000A;    }</pre>
    <p>Clearly we can see that whatever is inside of the <code>if</code> statement is just presentation code and the rest is business logic. Instead of one bulky function handling everything, we will break it into multiple functions:</p>
    <pre>function printEventDetails() {&#x000A;    	global $client;&#x000A;    	foreach (retrieveEvents($_GET['calendarId']) as $event)&#x000A;    		if (isCurrentEvent($event))&#x000A;    			putEvent($event);&#x000A;    }&#x000A;    &#x000A;    function isCurrentEvent($event) {&#x000A;    	return $event['id'] == $_GET['showThisEvent'];&#x000A;    }</pre>
    <p>After the separation, the business logic is now very simple. We even extracted a small method to determine if the event is the current one. All of the presentation code is now the responsibility of a function named <code>putEvent($event)</code> which resides in the <code>functions_display.php</code> file:</p>
    <pre>function putEvent($event) {&#x000A;    	putTitle('Details for event: ' . $event['summary']);&#x000A;    	putBlock('This event has status ' . $event['status']);&#x000A;    	putBlock('It was created at ' .&#x000A;    			date('Y-m-d H:m', strtotime($event['created'])) .&#x000A;    			' and last updated at ' .&#x000A;    			date('Y-m-d H:m', strtotime($event['updated'])) . '.');&#x000A;    	putBlock('For this event you have to &lt;strong&gt;' . $event['summary'] . '&lt;/strong&gt;.');&#x000A;    }</pre>
    <p>Even though this method only displays information, we have to keep in mind that it depends on intimate knowledge about the structure of <code>$event</code>. But, this is OK for now. As for the rest of the methods, they were separated in a similar manner.</p>
    <h3>Eliminating Long if-else Statements</h3>
    <p>The last thing that bothers me about our current code is the long if-else statement in our <code>doUserAction()</code> function, which is used to decide what to do for each action. Now, PHP is quite flexible when it comes to meta-programming (calling functions by reference). This trick allows us to correlate function names with the <code>$_GET</code> variable’s values. So we can introduce a single <code>action</code> parameter in the <code>$_GET</code> variable and use the value from that as a function name.</p>
    <pre>function doUserAction() {&#x000A;    	putMenu();&#x000A;    	if (!isset($_GET['action'])) return;&#x000A;    		$_GET['action']();&#x000A;    }</pre>
    <p>Based on this approach, our menu will be generated like this:</p>
    <pre>function putMenu() {&#x000A;    	putLink('?action=putHome', 'Home');&#x000A;    	putLink('?action=printCalendars', 'Show Calendars');&#x000A;    	putLink('?logout', 'Log Out');&#x000A;    	print('&lt;br&gt;&lt;br&gt;');&#x000A;    }</pre>
    <p>As you can probably see, this reorganization already pushed us toward an object oriented design. It’s not clear what kind of objects we have and with what exact behavior, but we have some clues here-and-there.</p>
    <p>We have presentations that depend on data types from the business logic. This resembles the dependency inversion we were talking about in the introductory chapter. The flow of the control is still from the business logic towards presentation, but the source code dependency started to morph into a reversed dependency. I would say, at this point it is more like a bidirectional dependency.</p>
    <p>Another hint of an object oriented design is the little bit of meta-programming we just did. We call a method, which we know nothing about. It can be anything and it’s like we are dealing with a low level of polymorphism.</p>
    <h3>Dependency Analysis</h3>
    <p>For our current code we could draw a schema, like the one below, to illustrate the first few steps through our application. Drawing all the lines would have been too complicated.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/organized_procedural_schema.png" alt="organized_procedural_schema" width="600" height="409" style="max-width: 100%; height: auto;"><br> <p>We marked with blue lines, the procedure calls. As you can see they flow in the same direction as before. Additionally we have the green lines marking indirect calls. These are all passing through <code>doUserAction()</code>. These two types of lines represent the flow of control, and you can observe that it is basically unchanged.</p>
    <p>The red lines however introduce a different concept. They represent a rudimentary source code dependency. I mean rudimentary, because it is not that obvious. The <code>putMenu()</code> method includes the names of the functions that have to be called for that particular link. This is a dependency and the same rule applies to all the other methods creating links. They <em>depend</em> on the behavior of the other functions.</p>
    <p>A second type of dependency can also be seen here. The dependency on data. I previously mentioned <code>$calendar</code> and <code>$event</code>. The printing functions need to have intimate knowledge about the internal structure of these arrays to do their jobs.</p>
    <p>So after all of that, I think we have plenty of reasons to move on to our last step.</p>
    <hr>
    <h2>An Object Oriented Solution</h2>
    <p>Regardless of the paradigm in use, there is no perfect solution for a problem. So here is how I propose to organize our code in an object oriented manner.</p>
    <h3>First Instinct</h3>
    <p>We already started to separate concerns in business logic and presentation. We even presented our <code>doUserAction()</code> method as a separate entity. So my first instinct is to create three classes <code>Presenter</code>, <code>Logic</code>, and <code>Router</code>. These will most likely change later, but we need a place to start, right?</p>
    <p>The <code>Router</code> will contain only one method and it will remain fairly similar to the previous implementation.</p>
    <pre>class Router {&#x000A;    &#x000A;    	function doUserAction() {&#x000A;    		(new Presenter())-&gt;putMenu();&#x000A;    		if (!isset($_GET['action']))&#x000A;    			return;&#x000A;    		(new Logic())-&gt;$_GET['action']();&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>So now we have to explicitly call our <code>putMenu()</code> method using a new <code>Presenter</code> object and the rest of the actions will be called using a <code>Logic</code> object. However, this immediately causes a problem. We have an action that is not in the Logic class. <code>putHome()</code> is in the Presenter class. We need to introduce an action in <code>Logic</code> that will delegate to the Presenter’s <code>putHome()</code> method. Remember, for the time being we only want to wrap our existing code into the three classes we identified as possible candidates for an OO design. We want to do only what is absolutely necessary to make the design work. After we have working code, we will change it further.</p>
    <p>As soon as we put a <code>putHome()</code> method into the Logic class we have a dilemma. How to call methods from Presenter? Well, we could create and pass a Presenter object into Logic so it always has a reference to presentation. Let’s do that from our Router.</p>
    <pre>class Router {&#x000A;    &#x000A;    	function doUserAction() {&#x000A;    		(new Presenter())-&gt;putMenu();&#x000A;    		if (!isset($_GET['action']))&#x000A;    			return;&#x000A;    		(new Logic(new Presenter))-&gt;$_GET['action']();&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>Now we can add a constructor in Logic and add in the delegation toward <code>putHome()</code> in Presenter.</p>
    <pre>class Logic {&#x000A;    &#x000A;    	private $presenter;&#x000A;    &#x000A;    	function __construct(Presenter $presenter) {&#x000A;    		$this-&gt;presenter = $presenter;&#x000A;    	}&#x000A;    &#x000A;    	function putHome() {&#x000A;    		$this-&gt;presenter-&gt;putHome();&#x000A;    	}&#x000A;    &#x000A;    [...]&#x000A;    &#x000A;    }</pre>
    <p>With a few minor adjustments in <code>index.php</code> and having Presenter wrapping the old display methods, Logic wrapping the old business logic functions, and Router wrapping the old action selector, we can actually run our code and have the “Home” menu element working.</p>
    <pre>require_once './google-api-php-client/src/Google_Client.php';&#x000A;    require_once './google-api-php-client/src/contrib/Google_CalendarService.php';&#x000A;    require_once __DIR__ . '/../apiAccess.php';&#x000A;    require_once './functins_google_api.php';&#x000A;    require_once './Presenter.php';&#x000A;    require_once './Logic.php';&#x000A;    require_once './Router.php';&#x000A;    session_start();&#x000A;    &#x000A;    $client = createClient();&#x000A;    if(!authenticate($client)) return;&#x000A;    &#x000A;    (new Router())-&gt;doUserAction();</pre>
    <p>And here it is in action.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/oo_home_working.png" alt="oo_home_working" width="435" height="149" style="max-width: 100%; height: auto;"><br> <p>Next, in our Logic class, we need to properly change calls to display logic, to work with <code>$this-&gt;presenter</code>. Then we have two methods – <code>isCurrentEvent()</code> and <code>retrieveEvents()</code> – that are used only inside the Logic class. We will make them private and change the calls accordingly.</p>
    <p>We will then take the same approach with Presenter class. We will change all calls to methods to point to <code>$this-&gt;something</code> and make <code>putTitle()</code>, <code>putLink()</code>, and <code>putBlock()</code> private, since they are used only from Presenter. Check out the code in the <strong>GoogleCalObjectOrientedInitial</strong> directory in the attached source code if you have a hard time doing all of these changes by yourself.</p>
    <p>At this point we have a working app. It is mostly procedural code wrapped in OO syntax, which still uses the <code>$client</code> global variable and has tons of other anti-object-oriented smells, but it works.</p>
    <p>If we draw the class diagram with dependencies for this code, it will look like this: &gt;<br> </p> <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/oo_initial_class_diagram.png" alt="oo_initial_class_diagram" width="600" height="388" style="max-width: 100%; height: auto;"><br> <p>Both the flow control and source code dependencies go through the router, then the logic, and finally through the presentation. This last change we did actually fades a little bit of the dependency inversion we observed in our previous step. But don’t let yourself be fooled. The principle is there, we just have to make it obvious.</p>
    <h3>Reverting the Source Code Dependency</h3>
    <p>It’s hard to say that one SOLID principle is more important than another, but I think the Dependency Inversion Principle has the greatest, immediate impact on your design. This principle states:</p>
    <blockquote><p> <strong>A</strong>: High-level modules should not depend on low-level modules. Both should depend on abstractions and <strong>B</strong>: Abstractions should not depend upon details. Details should depend upon abstractions.</p></blockquote>
    <p>To put it simply, this means that concrete implementations should depend on abstract classes. As your classes become abstract, the less they tend to change. So you can perceive the problem as: frequently changing classes should depend on other, much more stable classes. So the most volatile part of any application is probably its user interface, which would be the Presenter class in our application. Let’s make this dependency inversion obvious.</p>
    <p>First we will make our Router use only the Presenter and break its dependency on Logic.</p>
    <pre>class Router {&#x000A;    &#x000A;    	function doUserAction() {&#x000A;    		(new Presenter())-&gt;putMenu();&#x000A;    		if (!isset($_GET['action']))&#x000A;    			return;&#x000A;    		(new Presenter())-&gt;$_GET['action']();&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>Then we will change Presenter to use an instance of Logic and ask it for the information it needs to present. In our case, I consider it acceptable for Presenter to actually create the instance of Logic, but in any production system, you will likely have Factories creating the business logic related objects and injecting them into the presentation layer.</p>
    <p>Now, the function <code>putHome()</code>, present in both the Logic and Presenter classes, will disappear from Logic. This is a good sign, as we’re removing duplication. The constructor and reference to Presenter also disappears from Logic. On the other hand, a constructor creating a Logic object has to be written on Presenter.</p>
    <pre>class Presenter {&#x000A;    &#x000A;    	private $businessLogic;&#x000A;    &#x000A;    	function __construct() {&#x000A;    		$this-&gt;businessLogic = new Logic();&#x000A;    	}&#x000A;    &#x000A;    	function putHome() {&#x000A;    		print('Welcome to Google Calendar over NetTuts Example');&#x000A;    	}&#x000A;    &#x000A;    [...]&#x000A;    &#x000A;    }</pre>
    <p>After those changes, clicking on <strong>Show Calendars</strong> will however produce a nice error. Because all of our actions from within the links are pointing to function names in the Logic class, we will have to do some more consistent changes to reverse the dependency between the two. Let’s take it one method at a time. The first error message says:</p>
    <pre>Fatal error: Call to undefined method Presenter::printCalendars()&#x000A;    in /[...]/GoogleCalObjectOrientedFinal/Router.php on line 9&#x000A;    </pre>
    <p>So, our Router wants to call a method that does not exist on Presenter, <code>printCalendars()</code>. Let’s create that method in Presenter and check what it did in Logic. It printed a title and then cycled through some calendars and called <code>putCalendar()</code>. In Presenter the <code>printCalendars()</code> method will look like this:</p>
    <pre>function printCalendars() {&#x000A;    	$this-&gt;putCalendarListTitle();&#x000A;    	foreach ($this-&gt;businessLogic-&gt;getCalendars() as $calendar) {&#x000A;    		$this-&gt;putCalendarListElement($calendar);&#x000A;    	}&#x000A;    }</pre>
    <p>On the other hand, in Logic, the method becomes quite anemic. Just a forward call to the Google API library.</p>
    <pre>function getCalendars() {&#x000A;    	global $client;&#x000A;    	return getCalendarList($client)['items'];&#x000A;    }</pre>
    <p>This may make you ask yourself two questions, “Do we actually have a need for a Logic class?” and “Does our application even have any logic?”. Well, we don’t know yet. For the time being we will continue the process above, until all of the code works, and Logic does not depend on Presenter anymore.</p>
    <p>So, we will use a <code>printCalendarContents()</code> method in Presenter, like the one below:</p>
    <pre>function printCalendarContents() {&#x000A;    	$this-&gt;putCalendarTitle();&#x000A;    	foreach ($this-&gt;businessLogic-&gt;getEventsForCalendar() as $event) {&#x000A;    		$this-&gt;putEventListElement($event);&#x000A;    	}&#x000A;    }</pre>
    <p>Which in turn, will allow us to simplify the <code>getEventsForCalendar()</code> in Logic, into something like this.</p>
    <pre>function getEventsForCalendar() {&#x000A;    	global $client;&#x000A;    	return getEventList($client, htmlspecialchars($_GET['showThisCalendar']))['items'];&#x000A;    }</pre>
    <p>Now this works, but I have a concern here. The <code>$_GET</code> variable is being used in both the Logic and Presenter classes. Shouldn’t only the Presenter class be using <code>$_GET</code>? I mean, Presenter absolutely needs to know about <code>$_GET</code> because it has to create links which are populating this <code>$_GET</code> variable. So that would mean that <code>$_GET</code> is strictly HTTP related. Now, we want our code to work with a CLI or desktop graphical UI. So we want to keep this knowledge in only the Presenter. This makes the two methods from above, transform into the two below.</p>
    <pre>function getEventsForCalendar($calendarId) {&#x000A;    	global $client;&#x000A;    	return getEventList($client, $calendarId)['items'];&#x000A;    }</pre>
    <pre>function printCalendarContents() {&#x000A;    	$this-&gt;putCalendarTitle();&#x000A;    	$eventsForCalendar = $this-&gt;businessLogic-&gt;getEventsForCalendar(htmlspecialchars($_GET['showThisCalendar']));&#x000A;    	foreach ($eventsForCalendar as $event) {&#x000A;    		$this-&gt;putEventListElement($event);&#x000A;    	}&#x000A;    }</pre>
    <p>Now the last function we have to deal with is for printing a specific event. For the sake of this example, suppose there is no way we can retrieve an event directly and we have to find it by ourselves. Now our Logic class comes in handy. It is a perfect place to manipulate lists of events and search for a specific ID:</p>
    <pre>function getEventById($eventId, $calendarId) {&#x000A;    	foreach ($this-&gt;getEventsForCalendar($calendarId) as $event)&#x000A;    		if ($event['id'] == $eventId)&#x000A;    			return $event;&#x000A;    }</pre>
    <p>And then the corresponding call on Presenter will take care of printing it:</p>
    <pre>function printEventDetails() {&#x000A;    	$this-&gt;putEvent(&#x000A;    		$this-&gt;businessLogic-&gt;getEventById(&#x000A;    			$_GET['showThisEvent'],&#x000A;    			$_GET['calendarId']&#x000A;    		)&#x000A;    	);&#x000A;    }</pre>
    <p>That’s it. Here we are. Dependency inverted!</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/oo_dip_class_diagram.png" alt="oo_dip_class_diagram" width="600" height="387" style="max-width: 100%; height: auto;"><br> <p>Control still flows from Logic towards Presenter. The content presented is totally defined by Logic. If, for example tomorrow, we want to connect to another calendar service, we can create another Logic, inject it into Presenter, and Presenter will not even notice any difference. Also, the source code dependency was inverted successfully. Presenter is the only one that creates and directly depends on Logic. This dependency is crucial in allowing Presenter to change how it shows data, without effecting anything in Logic. Additionally, it allows us to switch our HTML Presenter with a CLI Presenter or any other method of displaying the information to the user.</p>
    <h3>Getting Rid of the Global Variable</h3>
    <p>Probably the last remaining serious design flaw is the use of a global variable for <code>$client</code>. All of the code in our application has access to it. Miraculously, the only class actually needing <code>$client</code> is our Logic class. The obvious step is to make a private class variable. But doing so requires us to propagate <code>$client</code> through the Router, into the Presenter, so that it can create a Logic object with the <code>$client</code> variable. This solves little of our problems. We need to build our classes in an isolated place and properly inject the dependencies into each other.</p>
    <p>For any larger class structure we would use Factories, but for our small example, the <code>index.php</code> file will be a great place to hold the creation logic. And being the entry point to our application, aka the “main” file in the high level architecture schema, it is still outside the boundaries of our business logic.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/HighLevelDesign.png" alt="HighLevelDesign" width="600" height="388" style="max-width: 100%; height: auto;"><br> <p>So we change <code>index.php</code> into the code below, keeping all of the includes and the session_start() command:</p>
    <pre>$client = createClient();&#x000A;    if(!authenticate($client)) return;&#x000A;    &#x000A;    $logic = new Logic($client);&#x000A;    $presenter = new Presenter($logic);&#x000A;    (new Router($presenter))-&gt;doUserAction();</pre>
    <hr>
    <h2>Final Thoughts</h2>
    <p>And we’re finished. There are surely some other things we could do to make our design even better. If nothing else, we could write a couple tests for our methods on the Logic class. Maybe our Logic class could also be renamed to something more representative, like GoogleCalendarGateway. Or we could create Event and Calendar classes to even better control the data and behavior on these concepts and break the Presenter’s dependency on an array for these data types. Another improvement and extension would be to actually create polymorphic action classes instead of just calling functions by reference from <code>$_GET</code>. There are endless little things we could do to further improve even this simple design. I will let you have this great opportunity to experiment, starting from this final version of the code you can find in the attached archive under the <strong>GoogleCalObjectOrientedFinal</strong> directory.</p>
    <p>If you are adventurous, you can extend this little application to connect to other calendar services and present information in different ways and on different platforms. For all of you using NetBeans, each source code folder contains a NetBeans project, so you should be able to directly open them. In the final version, PHPUnit is also prepared for you, but in rest of the projects, I removed it because we did no testing.</p>
    <p>Thank you for reading.</p>
    </div>
]]>
</Body>
<Summary>This tutorial was inspired by a speech given by Robert C. Martin that I watched a year or so ago. The main subject of his talk is about the possibility of picking The Last Programming Language. He...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/08Xb49SGSmI/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31680/guest@my.umbc.edu/6f17986ef7c92689a92555ee0b036a70/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>oop</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 17:35:50 -0400</PostedAt>
<EditAt>Fri, 21 Jun 2013 17:35:50 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31683" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31683">
<Title>Projects Gone Bad Part 2: 4 Ways to Avoid Projects Gone Bad</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em>This is part two in a two-part series on Projects Gone Bad. We looked at <a href="http://blog.teamtreehouse.com/projects-gone-bad-part-1-what-now" title="Projects Gone Bad Part 1: What Now?" rel="nofollow external" class="bo">what to do when a project has already taken a turn for the worst</a>. Next, we’ll look at how to avoid this problem and keep projects running smoothly.</em></p>
    <p>I run a small web shop called <a href="http://bottlerocketcreative.com" rel="nofollow external" class="bo">Bottlerocket</a> and over the years, I’ve found myself in situations where a project has not gone as planned and my client is unhappy. Sometimes it’s because I made a bad choice in taking on a client that wasn’t the best fit or with whom there were red flags that I ignored. Most of the time, however, it comes down to one thing: expectations. </p>
    <p>How you set and meet expectations has everything to do with how your client will “feel” about you and your work. </p>
    <p>Suppose I show you a hotel room and in preparation I say, “You’re going to love it; it’s a honeymoon suite.” You walk in and see an average hotel room and think, “What a dump.” But what if before walking into the exact same room, I said, “You need to be prepared; this is a jail cell.” You walk in and think, “Hey, this is pretty nice.” Why? Because your expectations where set differently. </p>
    <p>Here are a few ways to manage expectations in a way that will not only keep projects from going bad, but leave your clients feeling wowed.  </p>
    <h2>Under-promise and over-deliver</h2>
    <p>It’s a tried-and-true business principle: under-promise and over-deliver. A client can feel great or terrible with the exact same work, depending on how you set their expectations. </p>
    <p>For example: </p>
    <p><strong>Bad:</strong> You promise a mansion and deliver a two-bedroom house. </p>
    <p><strong>Good:</strong> You promise a studio apartment and deliver a two-bedroom house. </p>
    <p>You delivered the exact same work, but the client feels let down with option 1 and ecstatic with option 2. It’s the same principal at play in the analogy above about the hotel room. </p>
    <p>A simple and effective way to do this is with your timelines. If a project will take two weeks to complete, give the client and estimate of three weeks, but still deliver in two. It’s subtle, but the impact is huge. </p>
    <h2>Always meet deadlines</h2>
    <p>Not meeting deadlines is a great way to kill a project. It’s important that your clients can take you at your world. Your reputation depends on it. </p>
    <blockquote><p>It takes many good deeds to build a good reputation, and only one bad one to lose it. ~ Benjamin Franklin</p></blockquote>
    <p>When you miss deadlines, you do the opposite of step one; you over-promise and under-deliver. You may think it’s not a big deal if you’re one day late. You may even have a really good reason for missing your deadline. But, it doesn’t matter. Do whatever you have to do to meet your deadlines. </p>
    <p>When I first started freelancing, I was terrible with time management. Because of this, I would often find myself one or two days from a deadline with more work than I could accomplish. Instead of miss the deadline, I would pull all-nighters to get it done. All-nighters suck. But I turned in the work on time and my clients were happy. </p>
    <p>Pulling all-nighters is not sustainable and is a terrible way to do business. And if you’ve planned well, you shouldn’t have to do something so drastic. However, it’s worth doing whatever you have to do to deliver on time.  </p>
    <p>The practical application here is the same as in step one. Pad your timelines enough so that you can deliver early.  </p>
    <h2>Respond quickly</h2>
    <p>Have you ever tried to get a hold of someone and couldn’t? Did you feel valued or taken for granted? If you are difficult to reach, your clients will feel like you don’t value them.</p>
    <p>Respond quickly to your clients inquiries. I set a goal when I started to always answer client emails the day I received them. I have office hours and I respect those, but I do respond to emails and calls before I leave the office. </p>
    <p>Even if you don’t have an answer to an inquiry, just send a quick note letting your client know you’ve received their email and are looking into it. This builds a lot of trust and confirms to your client that you value them. </p>
    <h2>Be transparent</h2>
    <p>You don’t ever want your client to feel like you don’t have their back or like they can’t trust you. This will lead to micro-management and quickly turn a good project into a bad one. </p>
    <p>One way to do this is to be transparent. There are different degrees of transparency in relationships, but what I mean is basically, be yourself. Be authentic. Let your personality come through in your engagements with your clients. If you’re funny, be funny. If you’re all business, go with that. Transparency builds trust. </p>
    <h2>Conclusion</h2>
    <p>Under-promise and over-deliver, always meet deadlines, respond quickly and be transparent. These are four ways you can set and exceed your client’s expectations. It takes a lot of work, but it’s much easier than trying to fix a project once it’s gone bad. </p>
    <p>How have you kept projects from going bad? I would love to hear your thoughts in the comments.</p>
    <p>The post <a href="http://blog.teamtreehouse.com/projects-gone-bad-part-2-4-ways-to-avoid-projects-gone-bad" rel="nofollow external" class="bo">Projects Gone Bad Part 2: 4 Ways to Avoid Projects Gone Bad</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>This is part two in a two-part series on Projects Gone Bad. We looked at what to do when a project has already taken a turn for the worst. Next, we’ll look at how to avoid this problem and keep...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/jMi7UHD8pSw/projects-gone-bad-part-2-4-ways-to-avoid-projects-gone-bad</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31683/guest@my.umbc.edu/844910a9f76b18a9b7452534e0339a3d/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>business</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>responsive</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 17:32:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="31679" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31679">
<Title>Stories from Around the Web (Week Ending June 21, 2013)</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>A roundup of the most interesting stories from other sites, collected by the staff at <em>MIT Technology Review</em>.</p>
    <p><a href="http://www.theatlantic.com/magazine/archive/2013/07/how-junk-food-can-end-obesity/309396/" rel="nofollow external" class="bo">How Junk Food Can End Obesity</a><br> An interesting take on how science is engineering healthy junk food—and a counterargument to the glorification of natural foods laden with fat and salt—in <em>The Atlantic</em>’s cover story by David H. Freedman.<br>—David Rotman, editor</p>
    </div>
]]>
</Body>
<Summary>A roundup of the most interesting stories from other sites, collected by the staff at MIT Technology Review.  How Junk Food Can End Obesity  An interesting take on how science is engineering...</Summary>
<Website>http://www.technologyreview.com/view/516376/stories-from-around-the-web-week-ending-june-21-2013/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31679/guest@my.umbc.edu/04a67069ffc379c64f8aaeb11c7b8e66/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 15:20:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="110122" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110122">
<Title>David Zimring, History Instructor, in The Intelligencer</Title>
<Body>
<![CDATA[
    <div class="html-content">The history of the creation of the 35th state, West Virginia, was the topic of conversation at a Lunch with Books Program presentation at the Ohio County Public Library, held on Tues., June 19. According to David Zimring, history instructor at UMBC, it was described as “Secession in favor of the Constitution.” Zimring recounted the series of events that led to western Virginia seceding from Virginia at a time when the nation was becoming increasingly divided about the constitutionality of slavery. “West Virginia’s leaders needed to convince the federal government that West Virginia statehood was a legal and necessary measure that …</div>
]]>
</Body>
<Summary>The history of the creation of the 35th state, West Virginia, was the topic of conversation at a Lunch with Books Program presentation at the Ohio County Public Library, held on Tues., June 19....</Summary>
<Website>https://news.umbc.edu/david-zimring-history-instructor-in-the-intelligencer/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110122/guest@my.umbc.edu/a8c8b2857446076723dd543225632350/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>history</Tag>
<Tag>policy-and-society</Tag>
<Group token="umbc-news">UMBC News</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/original.png?1632921809</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/large.png?1632921809</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/medium.png?1632921809</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/small.png?1632921809</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxsmall.png?1632921809</AvatarUrl>
<Sponsor>UMBC News</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 15:17:32 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31681" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31681">
<Title>Bits Blog: Oracle and Salesforce to Enter Into Data-Sharing Deal</Title>
<Body>
<![CDATA[
    <div class="html-content">In a sign of how much cloud computing is changing the tech world, two of the fiercest competitors in enterprise software will allow data sharing between their products.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F21%2Foracle-and-salesforce-a-data-sharing-deal%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Oracle+and+Salesforce+to+Enter+Into+Data-Sharing+Deal" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F21%2Foracle-and-salesforce-a-data-sharing-deal%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Oracle+and+Salesforce+to+Enter+Into+Data-Sharing+Deal" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F21%2Foracle-and-salesforce-a-data-sharing-deal%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Oracle+and+Salesforce+to+Enter+Into+Data-Sharing+Deal" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F21%2Foracle-and-salesforce-a-data-sharing-deal%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Oracle+and+Salesforce+to+Enter+Into+Data-Sharing+Deal" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F21%2Foracle-and-salesforce-a-data-sharing-deal%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Oracle+and+Salesforce+to+Enter+Into+Data-Sharing+Deal" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/165666409643/u/0/f/640387/c/34625/s/2d9fd758/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165666409643/u/0/f/640387/c/34625/s/2d9fd758/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>In a sign of how much cloud computing is changing the tech world, two of the fiercest competitors in enterprise software will allow data sharing between their products.     </Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/21/oracle-and-salesforce-a-data-sharing-deal/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31681/guest@my.umbc.edu/5ed962aa69fd7bc4831263b532c53c4d/api/pixel</TrackingUrl>
<Tag>benioff-marc</Tag>
<Tag>cloud-computing</Tag>
<Tag>dell-inc</Tag>
<Tag>dell-inc-dell-nasdaq</Tag>
<Tag>ellison-lawrence-j</Tag>
<Tag>enterprise-computing</Tag>
<Tag>hurd-mark-v</Tag>
<Tag>international-business-machines-corporation</Tag>
<Tag>international-business-machines-corporation-ibm-nyse</Tag>
<Tag>microsoft-corporation</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>new</Tag>
<Tag>oracle-corporation</Tag>
<Tag>oracle-corporation-orcl-nasdaq</Tag>
<Tag>salesforce-com-inc</Tag>
<Tag>salesforce-com-inc-crm-nyse</Tag>
<Tag>sap-ag</Tag>
<Tag>sap-ag-sap-nyse</Tag>
<Tag>technology</Tag>
<Tag>workday-inc</Tag>
<Tag>workday-inc-wday-nyse</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 14:54:38 -0400</PostedAt>
<EditAt>Mon, 24 Jun 2013 07:16:29 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31712" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31712">
<Title>Gray Matter: There&#8217;s a Fly in My Tweets</Title>
<Body>
<![CDATA[
    <div class="html-content">The rise of social media and the field of data science can provide powerful tools to answer public-health questions.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F23%2Fopinion%2Fsunday%2Ftheres-a-fly-in-my-tweets.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gray+Matter%3A+There%E2%80%99s+a+Fly+in+My+Tweets" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F23%2Fopinion%2Fsunday%2Ftheres-a-fly-in-my-tweets.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gray+Matter%3A+There%E2%80%99s+a+Fly+in+My+Tweets" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F23%2Fopinion%2Fsunday%2Ftheres-a-fly-in-my-tweets.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gray+Matter%3A+There%E2%80%99s+a+Fly+in+My+Tweets" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F23%2Fopinion%2Fsunday%2Ftheres-a-fly-in-my-tweets.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gray+Matter%3A+There%E2%80%99s+a+Fly+in+My+Tweets" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F23%2Fopinion%2Fsunday%2Ftheres-a-fly-in-my-tweets.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gray+Matter%3A+There%E2%80%99s+a+Fly+in+My+Tweets" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    </div>
]]>
</Body>
<Summary>The rise of social media and the field of data science can provide powerful tools to answer public-health questions.     </Summary>
<Website>http://www.nytimes.com/2013/06/23/opinion/sunday/theres-a-fly-in-my-tweets.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31712/guest@my.umbc.edu/9fdc7cd447c1f0cc27b4e8bb1a7e1f64/api/pixel</TrackingUrl>
<Tag>computers-and-the-internet</Tag>
<Tag>data-mining-and-database-marketing</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>new</Tag>
<Tag>restaurants</Tag>
<Tag>social-networking-internet</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 14:43:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31675" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31675">
<Title>Fleischer &#8217;05, &#8217;08, MechEng, Wins Discovery&#8217;s &#8220;Big Brain Theory&#8221;</Title>
<Body>
<![CDATA[
    <div class="html-content">Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction of a 34-foot bridge. But, for Corey Fleischer ’05, ’08, mechanical engineering, the most exciting point of being declared the … <a href="http://umbcalumni.wordpress.com/2013/06/21/fleischer-05-08-mecheng-wins-discoverys-big-brain-theory/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction of a 34-foot bridge. But, for Corey Fleischer ’05, ’08,...</Summary>
<Website>http://umbcalumni.wordpress.com/2013/06/21/fleischer-05-08-mecheng-wins-discoverys-big-brain-theory/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31675/guest@my.umbc.edu/1f36bf5d6854c69ab8363eed69687d10/api/pixel</TrackingUrl>
<Tag>uncategorized</Tag>
<Group token="retired-20">UMBC Alumni</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-20</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/original.png?1280681147</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/large.png?1280681147</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/medium.png?1280681147</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/small.png?1280681147</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxsmall.png?1280681147</AvatarUrl>
<Sponsor>UMBC Alumni</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 14:01:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31836" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31836">
<Title>Fleischer &#8217;05, &#8217;08, MechEng, Wins Discovery&#8217;s &#8220;Big Brain Theory&#8221;</Title>
<Body>
<![CDATA[
    <div class="html-content">Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction of a 34-foot bridge. But, for Corey Fleischer ’05, ’08, mechanical engineering, the most exciting point of being declared the … <a href="https://umbcalumni.wordpress.com/2013/06/21/fleischer-05-08-mecheng-wins-discoverys-big-brain-theory/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction of a 34-foot bridge. But, for Corey Fleischer ’05, ’08,...</Summary>
<Website>https://umbcalumni.wordpress.com/2013/06/21/fleischer-05-08-mecheng-wins-discoverys-big-brain-theory/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31836/guest@my.umbc.edu/11ea3b0f434551740933d44450027a17/api/pixel</TrackingUrl>
<Tag>uncategorized</Tag>
<Group token="retired-20">UMBC Alumni</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-20</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/original.png?1280681147</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/large.png?1280681147</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/medium.png?1280681147</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/small.png?1280681147</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxsmall.png?1280681147</AvatarUrl>
<Sponsor>UMBC Alumni</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 14:01:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="106963" important="false" status="posted" url="https://my3.my.umbc.edu/posts/106963">
<Title>Fleischer &#8217;05, &#8217;08, MechEng, Wins Discovery&#8217;s &#8220;Big Brain Theory&#8221;</Title>
<Body>
<![CDATA[
    <div class="html-content">Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction …</div>
]]>
</Body>
<Summary>Wednesday night’s finale of the Discovery Channel’s “Big Brain Theory” included a drop-in by astronaut Buzz Aldrin and the destruction …</Summary>
<Website>https://magazine.umbc.edu/fleischer-05-08-mecheng-wins-discoverys-big-brain-theory/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/106963/guest@my.umbc.edu/becef57009e5082de9fdd7ba1a357460/api/pixel</TrackingUrl>
<Tag>alumni</Tag>
<Group token="retired-1945">UMBC Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-1945</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1783795755</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/images/avatars/group/8/original.png?1783795755</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/images/avatars/group/8/xxlarge.png?1783795755</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/images/avatars/group/8/xlarge.png?1783795755</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/images/avatars/group/8/large.png?1783795755</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/images/avatars/group/8/medium.png?1783795755</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/images/avatars/group/8/small.png?1783795755</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1783795755</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/images/avatars/group/8/xxsmall.png?1783795755</AvatarUrl>
<Sponsor>UMBC Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 14:01:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="123228" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123228">
<Title>30 Days/30 Scholarships: Q&amp;A with Micaela Perez Ferrero</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <img width="150" height="142" src="https://umbc.edu/wp-content/uploads/2022/02/perezferreromicaela-150x142.jpg" alt="" style="max-width: 100%; height: auto;"><p><strong><a href="http://umbcgiving.files.wordpress.com/2013/06/perezferreromicaela.jpg" rel="nofollow external" class="bo"><img alt="PerezFerrero,Micaela" src="http://umbcgiving.files.wordpress.com/2013/06/perezferreromicaela.jpg?w=300" width="325" height="155" style="max-width: 100%; height: auto;"></a></strong>When students have the scholarship support they need, they can do AMAZING things. And during the month of June, we’re working hard to help students do just that — make the most of their time at UMBC, and change the world for the better, with the aid of scholarships. Our aim? To raise enough money to award 30 scholarships of $1,000. <a href="https://givecorps.com/en/umbc/projects/463-annual-giving-causes-30-days-30-scholarships" rel="nofollow external" class="bo">It’s a big goal, but you can help us reach it, and when you do, you’ll be helping students in need.</a></p>
    <p>Today we’re featuring an outstanding scholarship winner and future teacher,<strong> Micaela Perez Ferrero ’13, political science</strong>, who received a number of scholarships while at UMBC, including the Alumni Association Scholarship, Sondheim Public Affairs Scholars Program, The Shattuck Family Entrepreneurial Scholars Program, and The UMBC Political Science Department.</p>
    <p><strong>Q:</strong>  <em>How important is it for you to have received these scholarships?</em><br>
    <strong>A:</strong>  Without scholarships, I would not be at UMBC. Scholarships have not only allowed me to attend a 4 year university, but it also allowed me to attend UMBC. Scholarships have given me the opportunity to achieve my goals and dreams, and I am sincerely grateful for all those who have contributed to each of my scholarships.</p>
    <p><strong>Q:</strong> <em>Why did you choose UMBC?</em><br>
    <strong>A:</strong> I decided to come to UMBC due to my acceptance into the Sondheim Public Affairs Scholars Program. I knew that I wanted to spend my four years as an undergraduate surrounded by a community that believed in helping others and making change in order to improve communities.</p>
    <p><strong>Q:</strong> <em>What’s the most amazing thing you’ve noticed so far?</em><br>
    <strong>A:</strong> The most amazing discovery that I have made as a student here is how willing faculty and staff want to help you achieve your dreams. This year, I have the opportunity to not only intern in New York City, but also study abroad in Costa Rica. I would have never have achieved either of these dreams without the support and encouragement from my professors.</p>
    <p><strong>Q:</strong> <em>Is there a particular class that has really opened your eyes?</em><br>
    <strong>A:</strong> POLI 450, Seminar in Public Administration and Management, really opened my mind to the idea of working in the public sector. Along with my internships in non-profit organizations, this class helped me learn more about my future career interests and what it means to be an effective leader in the public realm.</p>
    <p><strong>Q:</strong> <em>What are your plans for after graduation next spring?</em><br>
    <strong>A:</strong> After I graduate, I hope to be admitted into the Teach For America Corps. I interned with TFA this summer and felt truly inspired and motivated by their mission to provide all children with a quality education. I hope to also pursue a Master’s in Public Policy in order to further my career. Ultimately, I wish to work either for the government or a non-profit organization.</p>
    <p><strong>Q:</strong> <em>What would you like to say to alumni who have supported your scholarships?</em><br>
    <strong>A:</strong> To the alumni who contributed to my scholarship: thank you. Your contribution not only allowed for me to be able to study abroad, but it also allows me to continue my education at UMBC. My entire undergraduate degree is based on scholarships and so your contribution is of extreme value to me.</p>
    <p><a href="http://www.umbc.edu/classof2013/" rel="nofollow external" class="bo">Read more about Micaela on the Class of 2013 page.</a></p>
    <p><a href="https://givecorps.com/en/umbc/projects/463-annual-giving-causes-30-days-30-scholarships" rel="nofollow external" class="bo">Interested in helping students like Micaela? Give today.</a></p>
    </div>
]]>
</Body>
<Summary>When students have the scholarship support they need, they can do AMAZING things. And during the month of June, we’re working hard to help students do just that — make the most of their time at...</Summary>
<Website>https://umbc.edu/stories/30-days30-scholarships-qa-with-micaela-perez-ferrero-13/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123228/guest@my.umbc.edu/121d7a918ded8a54881c218c64feb989/api/pixel</TrackingUrl>
<Tag>impact</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Jun 2013 13:20:37 -0400</PostedAt>
</NewsItem>

</News>
