<?xml version="1.0"?>
<News hasArchived="true" page="7693" pageCount="10781" pageSize="10" timestamp="Tue, 01 Sep 2026 01:14:45 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7693&amp;range=2">
<NewsItem contentIssues="true" id="42714" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42714">
<Title>Round-Up: UMBC in the News, 3/21</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be sharing with you a round-up … <a href="http://umbcalumni.wordpress.com/2014/03/21/round-up-umbc-in-the-news-321/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be...</Summary>
<Website>http://umbcalumni.wordpress.com/2014/03/21/round-up-umbc-in-the-news-321/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42714/guest@my.umbc.edu/3d220017d95d6fcea09cc831adc14935/api/pixel</TrackingUrl>
<Tag>interdisciplinary-studies</Tag>
<Tag>kimberly-moffitt</Tag>
<Tag>matthew-baker</Tag>
<Tag>social-sciences</Tag>
<Tag>the-daily-beast</Tag>
<Tag>the-marc-steiner-show</Tag>
<Tag>the-washington-post</Tag>
<Tag>thomas-schaller</Tag>
<Tag>umbc</Tag>
<Tag>umbc-news</Tag>
<Tag>uncategorized</Tag>
<Tag>university-of-maryland-baltimore-county</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 Mar 2014 11:11:41 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="106840" important="false" status="posted" url="https://my3.my.umbc.edu/posts/106840">
<Title>Round-Up: UMBC in the News, 3/21</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</Summary>
<Website>https://magazine.umbc.edu/round-up-umbc-in-the-news-321/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/106840/guest@my.umbc.edu/22f56ebf8d5ce06cea7ac3361788b38e/api/pixel</TrackingUrl>
<Tag>alumni</Tag>
<Tag>kimberly-moffitt</Tag>
<Tag>matthew-baker</Tag>
<Tag>the-daily-beast</Tag>
<Tag>the-marc-steiner-show</Tag>
<Tag>the-washington-post</Tag>
<Tag>thomas-schaller</Tag>
<Tag>umbc</Tag>
<Tag>university-of-maryland-baltimore-county</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?1787842820</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/images/avatars/group/8/original.png?1787842820</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xxlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/images/avatars/group/8/large.png?1787842820</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/images/avatars/group/8/medium.png?1787842820</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/images/avatars/group/8/small.png?1787842820</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/images/avatars/group/8/xxsmall.png?1787842820</AvatarUrl>
<Sponsor>UMBC Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 11:11:41 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42715" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42715">
<Title>Refactoring Legacy Code: Part 1 - The Golden Master</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Old code. Ugly code. Complicated code. Spaghetti code. Jibberish nonsense. In two words, <em>Legacy Code</em>. This is a series that will help you work and deal with it.</p>
    
    <p>In an ideal world, you would write only new code. You would write it beautiful and perfect. You would never have to revisit your code and you will never have to maintain projects ten years old. In an ideal world...</p>
    
    <p>Unfortunately, we live in a reality that is not ideal. We have to understand, modify and enhance ages-old code. We have to work with legacy code. So what are you waiting for? Let's get our heads into this first tutorial, get the code, understand it a little bit and create a safety net for our future modifications.</p>
    
    <h2>Definition of Legacy Code</h2>
    
    <p>Legacy code was defined in so many ways it is impossible to find a single, commonly accepted definition for it. The few examples at the start of this tutorial are just the tip of the iceberg. So I won't give you any official definition. Instead, I will quote you my favorite one.</p>
    
    <blockquote>To me, <em>legacy code</em> is simply code without tests. ~ Michael Feathers</blockquote>
    
    <p>Well, that is the first formal definition of the expression <em>legacy code</em>, published by Michael Feathers in his book <a href="http://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code?from_search=true" rel="nofollow external" class="bo">Working Effectively with Legacy Code</a>. Of course, the industry used the expression for ages, basically for any code that is difficult to change. However this definition has something different to tell. It explains the problem very clearly, so that the solution becomes obvious. "Difficult to change" is so vague. What should we do to make it easy to change? We have no idea! "Code without tests" on the other hand is very concrete. And the answer to our previous question is simple, make code testable and test it. So let's get started.</p>
    
    <h2>Getting Our Legacy Code</h2>
    
    <p>This series will be based on the exceptional Trivia Game by <a href="http://www.jbrains.ca/" rel="nofollow external" class="bo">J.B. Rainsberger</a> designed for <a href="http://legacycoderetreat.typepad.com/" rel="nofollow external" class="bo">Legacy Code Retreat</a> events. It is made to be like real legacy code and to also offer opportunities for a wide variety of refactoring, at a decent level of difficulty.</p>
    
    <h3>Check Out the Source Code</h3>
    
    <p>The Trivia Game is hosted on GitHub and it is GPLv3 licensed, so you can play around with it freely. We will start this series by checking out the official repository. The code is also attached to this tutorial with all the modifications we will make, so if you get confused at some point, you can take a sneak peek at the end result.</p>
    
    <pre> $ git clone <a href="https://github.com/jbrains/trivia.git">https://github.com/jbrains/trivia.git</a>&#x000A;    Cloning into 'trivia'...&#x000A;    remote: Counting objects: 429, done.&#x000A;    remote: Compressing objects: 100% (262/262), done.&#x000A;    remote: Total 429 (delta 100), reused 419 (delta 93)&#x000A;    Receiving objects: 100% (429/429), 848.33 KiB | 305.00 KiB/s, done.&#x000A;    Resolving deltas: 100% (100/100), done.&#x000A;    Checking connectivity... done.</pre>
    
    <p>When you open the <code>trivia</code> directory you will see our code in several programming languages. We will work in PHP, but you are free to choose your favorite one and apply the techniques presented here.</p>
    
    <h2>Understanding the Code</h2>
    
    <p>By definition, legacy code is difficult to understand, especially if we don't even know what it's supposed to do. So the first step is to run the code and make some kind of reasoning, what it is about.</p>
    
    <p>We have two files in our directory.</p>
    
    <pre>$ cd php/&#x000A;    $ ls -al&#x000A;    total 20&#x000A;    drwxr-xr-x  2 csaba csaba 4096 Mar 10 21:05 .&#x000A;    drwxr-xr-x 26 csaba csaba 4096 Mar 10 21:05 ..&#x000A;    -rw-r--r--  1 csaba csaba 5568 Mar 10 21:05 Game.php&#x000A;    -rw-r--r--  1 csaba csaba  410 Mar 10 21:05 GameRunner.php</pre>
    
    <p><code>GameRunner.php</code> seems to be a good candidate for our attempt to run the code.</p>
    
    <pre>$ php ./GameRunner.php&#x000A;    Chet was added&#x000A;    They are player number 1&#x000A;    Pat was added&#x000A;    They are player number 2&#x000A;    Sue was added&#x000A;    They are player number 3&#x000A;    Chet is the current player&#x000A;    They have rolled a 4&#x000A;    Chet's new location is 4&#x000A;    The category is Pop&#x000A;    Pop Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Chet now has 1 Gold Coins.&#x000A;    Pat is the current player&#x000A;    They have rolled a 2&#x000A;    Pat's new location is 2&#x000A;    The category is Sports&#x000A;    Sports Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Pat now has 1 Gold Coins.&#x000A;    Sue is the current player&#x000A;    They have rolled a 1&#x000A;    Sue's new location is 1&#x000A;    The category is Science&#x000A;    Science Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Sue now has 1 Gold Coins.&#x000A;    Chet is the current player&#x000A;    They have rolled a 4&#x000A;    &#x000A;    ## Some lines removed to keep&#x000A;    ## the tutorial at a reasonable size&#x000A;    &#x000A;    Answer was corrent!!!!&#x000A;    Sue now has 5 Gold Coins.&#x000A;    Chet is the current player&#x000A;    They have rolled a 3&#x000A;    Chet is getting out of the penalty box&#x000A;    Chet's new location is 11&#x000A;    The category is Rock&#x000A;    Rock Question 5&#x000A;    Answer was correct!!!!&#x000A;    Chet now has 5 Gold Coins.&#x000A;    Pat is the current player&#x000A;    They have rolled a 1&#x000A;    Pat's new location is 10&#x000A;    The category is Sports&#x000A;    Sports Question 1&#x000A;    Answer was corrent!!!!&#x000A;    Pat now has 6 Gold Coins.</pre>
    
    <p>OK. Our guess was correct. Our code ran and produced some output. Analyzing this output will help us deduce some basic idea about what the code does.</p>
    
    <ol>
    	<li>We know it's a Trivia game. We knew it when we checked out the source code.</li>
    	<li>Our example has three players: Chet, Pat and Sue.</li>
    	<li>There is some kind of rolling of a dice or similar concept.</li>
    	<li>There is a current location for a player. Possibly on some kind of board?</li>
    	<li>There are various categories from which questions are asked.</li>
    	<li>Users answer questions.</li>
    	<li>Correct answers give players gold.</li>
    	<li>Wrong answers send players to the penalty box.</li>
    	<li>Players can get out of penalty box, based on some not quite clear logic.</li>
    	<li>It seems like the user that first reaches six gold coins wins.</li>
    </ol>
    
    <p>Now that is a lot of knowledge. We could figure out most of the basic behavior of the application by just looking at the output. In real life applications, the output may not be text on the screen, but it can be a web page, an error log, a database, a network communication, a dump file and so on. In other cases, the module you need to modify can not be run isolated. If so, you will need to run it through other modules of the bigger application. Just try to add the minimum, to get some reasonable output from your legacy code.</p>
    
    <h2>Scanning the Code</h2>
    
    <p>Now that we have an idea about what the code outputs, we can start looking at it. We will start with the runner.</p>
    
    <h3>The Game Runner</h3>
    
    <p>I like to start with running all the code through the formatter of my IDE. This greatly improves readability by making the code's form familiar with what I am used to. So this:</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gamerunner-form-before.png" style="max-width: 100%; height: auto;"><p>... will become this:<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gamerunner-form-after.png" style="max-width: 100%; height: auto;"><p>... which is somewhat better. It may not be a huge difference with this small amount of code, but it will be on our next file.<br></p>
    
    <p>Looking at our <code>GameRunner.php</code> file, we can easily identify some key aspects we observed in the output. We can see the lines that add the users (9-11), that a roll() method is called and a winner is selected. Of course, these are far from the inner secrets of the logic of the game, but at least we could start by identifying key methods that will help us discover the rest of the code.</p>
    
    <h3>The Game File</h3>
    
    <p>We should do the same formatting on the <code>Game.php</code> file also.</p>
    
    <p>This file is much larger; About 200 lines of code. Most of the methods are appropriately sized, but some of them are quite large and after the formatting, we can see that in two places the code indentation goes beyond four levels. High levels of indentation usually means lots of complex decisions, so for now, we can assume that those points in our code will be more complex and more sensible to change. </p>
    
    <h2>The Golden Master</h2>
    
    <p>And the thought of change leads us to our lack of tests. The methods we saw in <code>Game.php</code> are quite complex. Don't worry if you don't understand them. At this point, they are a mystery for me also. Legacy code is a mystery that we need to solve and understand. We made our first step to understand it and it is now time for our second one.</p>
    
    <h3>So What Is This Golden Master?</h3>
    
    <p>When working with legacy code, it is almost impossible to understand it and to write code that will surely exercise all the logical paths through the code. For that kind of testing, we would need to understand the code, but we do not yet. So we need to take another approach.</p>
    
    <p>Instead of trying to figure out what to test, we can test everything, a lot of times, so that we end up with a huge amount of output, about which we can almost certainly assume that it was produced by exercising all parts of our legacy code. It is recommended to run the code at least 10,000 (ten thousand) times. We will write a test to run it twice as much and save the output.</p>
    
    <h3>Writing the Golden Master Generator</h3>
    
    <p>We can think ahead and start by creating a generator and a test as separate files for future testing, but is it really necessary? We don't know that yet for certain. So why not just start with a basic test file that will run our code once and build our logic up from there.</p>
    
    <p>You will find in the attached code archive, inside the <code>source</code> folder but outside the <code>trivia</code> folder our <code>Test</code> folder. In this folder, we create a file: <code>GoldenMasterTest.php</code>.</p>
    
    <pre>class GoldenMasterTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testGenerateOutput() {&#x000A;    		ob_start();&#x000A;    		require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    		$output = ob_get_contents();&#x000A;    		ob_end_clean();&#x000A;    &#x000A;    		var_dump($output);&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    
    <p>We could do this in many ways. We could, for example, run our code from the console and redirect its output to a file. However, having it in a test that is easily run inside our IDE is an advantage we should not ignore.</p>
    
    <p>The code is quite simple, it buffers the output and puts it into the <code>$output</code> variable. The <code>require_once()</code> will also run all the code inside the the included file. In our var dump we will see some already familiar output.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-first-run.png" style="max-width: 100%; height: auto;"><p>However on a second run, we can observe something odd:<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-second-run.png" style="max-width: 100%; height: auto;"><p>... the outputs differ. Even though we ran the same code, the output is different. The rolled numbers are different, the players' positions are different.<br></p>
    
    
    <h3>Seeding the Random Generator</h3>
    
    <pre>do {&#x000A;    &#x000A;    	$aGame-&gt;roll(rand(0, 5) + 1);&#x000A;    &#x000A;    	if (rand(0, 9) == 7) {&#x000A;    		$notAWinner = $aGame-&gt;wrongAnswer();&#x000A;    	} else {&#x000A;    		$notAWinner = $aGame-&gt;wasCorrectlyAnswered();&#x000A;    	}&#x000A;    &#x000A;    } while ($notAWinner);</pre>
    
    <p>By analyzing the essential code from the runner, we can see that it uses a the function <code>rand()</code> to generate random numbers. Our next stop is the official PHP documentation to research this <code>rand()</code> function.</p>
    
    <blockquote>The random number generator is seeded automatically.</blockquote>
    
    <p>The documentation tells us that seeding happens automatically. Now we have another task. We need to find a way to control the seed. The <code>srand()</code> function can help with that. Here is its definition from the documentation.</p>
    
    <blockquote>Seeds the random number generator with seed or with a random value if no seed is given.</blockquote>
    
    <p>It tells us, that if we run this before any call to <code>rand()</code>, we should always end up with the same results.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	ob_start();&#x000A;    	srand(1);&#x000A;    	require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    	$output = ob_get_contents();&#x000A;    	ob_end_clean();&#x000A;    &#x000A;    	var_dump($output);&#x000A;    }</pre>
    
    <p>We put <code>srand(1)</code> before our <code>require_once()</code>. Now the output is always the same.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded.png" style="max-width: 100%; height: auto;"><h3>Put the Output in a File<br>
    </h3>
    
    <pre>class GoldenMasterTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testGenerateOutput() {&#x000A;    		file_put_contents('/tmp/gm.txt', $this-&gt;generateOutput());&#x000A;    		$file_content = file_get_contents('/tmp/gm.txt');&#x000A;    		$this-&gt;assertEquals($file_content, $this-&gt;generateOutput());&#x000A;    	}&#x000A;    &#x000A;    	private function generateOutput() {&#x000A;    		ob_start();&#x000A;    		srand(1);&#x000A;    		require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    		$output = ob_get_contents();&#x000A;    		ob_end_clean();&#x000A;    		return $output;&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    
    <p>This change looks reasonable. Right? We extracted the code generation into a method, run it twice, and expected the output to be equal. However they won't be.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-runonce.png" style="max-width: 100%; height: auto;"><p>The reason is that <code>require_once()</code> will not require the same file twice. The second call to the <code>generateOutput()</code> method will produce an empty string. So, what could we do? What if we simply <code>require()</code>? That should be run each time.<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-cannotredecalre.png" style="max-width: 100%; height: auto;"><p>Well, that leads to another problem: <code>"Cannot redeclare echoln()"</code>. But where is that coming from? It is right at the beginning of the <code>Game.php</code> file. The reason why this error is occurring is because in <code>GameRunner.php</code> we have <code>include  __DIR__ . '/Game.php';</code>, which tries to include the Game file twice, each time when we call the <code>generateOutput()</code> method.<br></p>
    
    <pre>include_once __DIR__ . '/Game.php';</pre>
    
    <p>Using <code>include_once</code> in <code>GameRunner.php</code> will solve our problem. Yes, we needed to modify <code>GameRunner.php</code> without having tests for it, yet! However, we can be 99% sure that our change will not break the code itself. It is a small and simple enough change to not scare us very much. And most importantly, it makes the tests pass.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-onerung-working.png" style="max-width: 100%; height: auto;">
    
    <h3>Run It Several Times</h3>
    
    <p>Now that we have code we can run many times, it's time to generate some output.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	$this-&gt;generateMany(20, '/tmp/gm.txt');&#x000A;    	$this-&gt;generateMany(20, '/tmp/gm2.txt');&#x000A;    	$file_content_gm = file_get_contents('/tmp/gm.txt');&#x000A;    	$file_content_gm2 = file_get_contents('/tmp/gm2.txt');&#x000A;    	$this-&gt;assertEquals($file_content_gm, $file_content_gm2);&#x000A;    }&#x000A;    &#x000A;    private function generateMany($times, $fileName) {&#x000A;    	$first = true;&#x000A;    	while ($times) {&#x000A;    		if ($first) {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput());&#x000A;    			$first = false;&#x000A;    		} else {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput(), FILE_APPEND);&#x000A;    		}&#x000A;    		$times--;&#x000A;    	}&#x000A;    }</pre>
    
    <p>We extracted another method here: <code>generateMany()</code>. It has two parameters. One for the number of times we want to run our generator, the other is a destination file. It will put the generated output in the files. On the first run it empties the files, and for the rest of the iterations, it appends the data. You can look into the file to see the generated output 20 times.</p>
    
    <p>But wait! The same player wins every time? Is that possible?</p>
    
    <pre>cat /tmp/gm.txt | grep "has 6 Gold Coins."&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.</pre>
    
    <p>Yes! It is possible! It is more than possible. It is a sure thing. We have the same seed for our random function. We play the same game over and over again.</p>
    
    <h3>Run It Differently Each Time</h3>
    
    <p>We need to play different games, otherwise it is almost certain that only a small part of our legacy code is actually exercised over and over again. The scope of the golden master is to exercise as much as possible. We need to re-seed the random generator each time, but in a controlled way. One option is to use our counter as the seed value.</p>
    
    <pre>private function generateMany($times, $fileName) {&#x000A;    	$first = true;&#x000A;    	while ($times) {&#x000A;    		if ($first) {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput($times));&#x000A;    			$first = false;&#x000A;    		} else {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput($times), FILE_APPEND);&#x000A;    		}&#x000A;    		$times--;&#x000A;    	}&#x000A;    }&#x000A;    &#x000A;    private function generateOutput($seed) {&#x000A;    	ob_start();&#x000A;    	srand($seed);&#x000A;    	require __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    	$output = ob_get_contents();&#x000A;    	ob_end_clean();&#x000A;    	return $output;&#x000A;    }</pre>
    
    <p>This still keeps our test passing, so we are sure we generate the same complete output each time, while the output plays a different game for each iteration. </p>
    
    <pre>cat /tmp/gm.txt | grep "has 6 Gold Coins."&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.</pre>
    
    <p>There are various winners for the game in a random fashion. This looks good.</p>
    
    <h3>Getting to 20,000</h3>
    
    <p>The first thing you may try is to run our code for 20,000 game iterations.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	$times = 20000;&#x000A;    	$this-&gt;generateMany($times, '/tmp/gm.txt');&#x000A;    	$this-&gt;generateMany($times, '/tmp/gm2.txt');&#x000A;    	$file_content_gm = file_get_contents('/tmp/gm.txt');&#x000A;    	$file_content_gm2 = file_get_contents('/tmp/gm2.txt');&#x000A;    	$this-&gt;assertEquals($file_content_gm, $file_content_gm2);&#x000A;    }</pre>
    
    <p>This will almost work. Two 55MB files will be generated.</p>
    
    <pre>ls -alh /tmp/gm*&#x000A;    -rw-r--r-- 1 csaba csaba 55M Mar 14 20:38 /tmp/gm2.txt&#x000A;    -rw-r--r-- 1 csaba csaba 55M Mar 14 20:38 /tmp/gm.txt</pre>
    
    <p>On the other hand, the test will fail with an insufficient memory error. It doesn't matter how much RAM you have, this will fail. I have 8GB plus a 4GB swap and it fails. The two strings are just too big to be compared in our assertion.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-20000runs-memoryexhausted.png" style="max-width: 100%; height: auto;"><p>In other words, we generate good files, but PHPUnit cannot compare them. We need a work-around.<br></p>
    
    <pre>$this-&gt;assertFileEquals('/tmp/gm.txt', '/tmp/gm2.txt');</pre>
    
    <p>That seems to be a good candidate, but it still fails. What a shame. We need to research the situation further.</p>
    
    <pre>$this-&gt;assertTrue($file_content_gm == $file_content_gm2);</pre>
    
    <p>This however, is working.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-20001runs-ok.png" style="max-width: 100%; height: auto;"><div>
    
    <p>It can compare the two strings and fail if they are different. It has however, a small price. It won't be able to exactly tell what is wrong when the strings differ. It will just simply say <code>"Failed asserting that false is true."</code>. But we will deal with that in an upcoming tutorial.</p>
    
    <h2>Final Thoughts</h2>
    
    <p>We are done for this tutorial. We have learned quite a lot for our first lesson and we are on a good start for our future work. We met the code, we analyzed it in different ways and we mostly understood its essential logic. Then we created a set of tests to ensure it is exercised as much as possible. Yes. The tests are very slow. It takes them 24 seconds on my Core i7 CPU to generate the output twice. Fortunately in our future development, we will keep the <code>gm.txt</code> file untouched and generate another one only once per run. But 12 seconds is still a huge amount of time for such a small code base. </p>
    
    <p>By the time we finish this series, our tests should run in less than a second and test all the code properly. So, stay tuned for our next tutorial when we will tackle problems like magic constants, magic strings and complex conditionals. Thanks for reading.</p>
    
    </div>
    </div>
]]>
</Body>
<Summary>Old code. Ugly code. Complicated code. Spaghetti code. Jibberish nonsense. In two words, Legacy Code. This is a series that will help you work and deal with it.    In an ideal world, you would...</Summary>
<Website>http://code.tutsplus.com/tutorials/refactoring-legacy-code-part-1-the-golden-master--cms-20331</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42715/guest@my.umbc.edu/0149b927b4e66049a924113bd9e052e9/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</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 Mar 2014 11:00:02 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 11:00:02 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42717" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42717">
<Title>Revelations of N.S.A. Spying Cost U.S. Tech Companies</Title>
<Body>
<![CDATA[
    <div class="html-content">America’s cloud computing industry could lose billions of dollars in business because of the government’s surveillance program.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F22%2Fbusiness%2Ffallout-from-snowden-hurting-bottom-line-of-tech-companies.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Revelations+of+N.S.A.+Spying+Cost+U.S.+Tech+Companies" 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%2F2014%2F03%2F22%2Fbusiness%2Ffallout-from-snowden-hurting-bottom-line-of-tech-companies.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Revelations+of+N.S.A.+Spying+Cost+U.S.+Tech+Companies" 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%2F2014%2F03%2F22%2Fbusiness%2Ffallout-from-snowden-hurting-bottom-line-of-tech-companies.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Revelations+of+N.S.A.+Spying+Cost+U.S.+Tech+Companies" 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%2F2014%2F03%2F22%2Fbusiness%2Ffallout-from-snowden-hurting-bottom-line-of-tech-companies.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Revelations+of+N.S.A.+Spying+Cost+U.S.+Tech+Companies" 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%2F2014%2F03%2F22%2Fbusiness%2Ffallout-from-snowden-hurting-bottom-line-of-tech-companies.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Revelations+of+N.S.A.+Spying+Cost+U.S.+Tech+Companies" 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/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/sc/1/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801591793/u/0/f/640387/c/34625/s/387529ac/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>America’s cloud computing industry could lose billions of dollars in business because of the government’s surveillance program.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/387529ac/sc/1/l/0L0Snytimes0N0C20A140C0A30C220Cbusiness0Cfallout0Efrom0Esnowden0Ehurting0Ebottom0Eline0Eof0Etech0Ecompanies0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42717/guest@my.umbc.edu/6775b0564b1d780c8a7654b1c646408c/api/pixel</TrackingUrl>
<Tag>cisco-systems-inc-csco-nasdaq</Tag>
<Tag>cloud-computing</Tag>
<Tag>forrester-research-inc-forr-nasdaq</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>international-business-machines-corporation-ibm-nyse</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>national-security-agency</Tag>
<Tag>new</Tag>
<Tag>salesforce-com-inc-crm-nyse</Tag>
<Tag>silicon-valley-calif</Tag>
<Tag>snowden-edward-j</Tag>
<Tag>surveillance-of-citizens-by-government</Tag>
<Tag>technology</Tag>
<Tag>united-states-economy</Tag>
<Tag>yahoo-inc-yhoo-nasdaq</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 Mar 2014 10:54:08 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 10:54:08 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42713" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42713">
<Title>talk: Underwater Acoustic Communication&#8230;, 11:45am Thr 3/27, ITE325b</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/02/song.png" width="700" height="308" style="max-width: 100%; height: auto;"></p>
    <h1>Underwater Acoustic Communication and<br>
    Networking for Ocean Sampling</h1>
    <h2>Dr. Aijun Song</h2>
    <h3>Assistant Research Professor<br>
    College of Earth, Ocean, and Environment<br>
    University of Delaware, Newark, DE 19716</h3>
    <h3>11:45am – 12:45pm Thursday, 27 March 2014, ITE325b, UMBC</h3>
    <p>On our planet Earth, the marine ecosystem is undergoing significant changes due to human activities and natural processes. These changes call for enhanced capabilities to sample and communicate in the oceans. With this background, underwater acoustic communication has attracted much attention across multiple disciplines, as a means to access oceanographic data in real-time and to support navigation of underwater vehicles. This talk will focus on my recent efforts in 1) characterization and modeling of the ocean environment as a communication medium, 2) development of high data rate acoustic modems, both software and hardware, and 3) application of underwater acoustic communication networks in ocean sampling.</p>
    <p>Dr. Aijun Song received his Ph.D. degree in the Department of Electrical Engineering, University of Delaware, Newark, Delaware in 2005. From 2005 to 2008, he was a postdoctoral research associate at the College of Earth, Ocean, and Environment (CEOE), University of Delaware. During this period, he was also an Office of Naval Research (ONR) postdoctoral fellow, supported by the special research award in the Ocean Acoustics program. Since 2008, he has been an Assistant Research Professor of the CEOE, University of Delaware. His research interests include advanced signal processing and communication techniques for mobile radio frequencies as well as for underwater acoustic environments, underwater acoustic signal propagation, and the general area of ocean sampling.</p>
    </div>
]]>
</Body>
<Summary>Underwater Acoustic Communication and  Networking for Ocean Sampling   Dr. Aijun Song   Assistant Research Professor  College of Earth, Ocean, and Environment  University of Delaware, Newark, DE...</Summary>
<Website>http://www.csee.umbc.edu/2014/03/talk-underwater-acoustic-communication-1145am-thr-327-ite325b/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=talk-underwater-acoustic-communication-1145am-thr-327-ite325b</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42713/guest@my.umbc.edu/694e8bd26dc03cad4531f92c313764ed/api/pixel</TrackingUrl>
<Tag>news</Tag>
<Tag>research</Tag>
<Tag>talks</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 10:03:42 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42718" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42718">
<Title>DealBook: Mt. Gox Says It Has Found Missing Bitcoin Worth About $116 Million</Title>
<Body>
<![CDATA[
    <div class="html-content">Mt. Gox, the Tokyo-based Bitcoin exchange that filed for bankruptcy last month, said it had found 200,000 Bitcoins that were held in an “old-format” wallet, or digital storage file.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2014%2F03%2F21%2Fmt-gox-says-it-has-found-200000-bitcoins-worth-about-114-million%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Mt.+Gox+Says+It+Has+Found+Missing+Bitcoin+Worth+About+%24116+Million" 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%2Fdealbook.nytimes.com%2F2014%2F03%2F21%2Fmt-gox-says-it-has-found-200000-bitcoins-worth-about-114-million%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Mt.+Gox+Says+It+Has+Found+Missing+Bitcoin+Worth+About+%24116+Million" 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%2Fdealbook.nytimes.com%2F2014%2F03%2F21%2Fmt-gox-says-it-has-found-200000-bitcoins-worth-about-114-million%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Mt.+Gox+Says+It+Has+Found+Missing+Bitcoin+Worth+About+%24116+Million" 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%2Fdealbook.nytimes.com%2F2014%2F03%2F21%2Fmt-gox-says-it-has-found-200000-bitcoins-worth-about-114-million%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Mt.+Gox+Says+It+Has+Found+Missing+Bitcoin+Worth+About+%24116+Million" 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%2Fdealbook.nytimes.com%2F2014%2F03%2F21%2Fmt-gox-says-it-has-found-200000-bitcoins-worth-about-114-million%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Mt.+Gox+Says+It+Has+Found+Missing+Bitcoin+Worth+About+%24116+Million" 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/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/sc/21/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801510557/u/0/f/640387/c/34625/s/38755233/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Mt. Gox, the Tokyo-based Bitcoin exchange that filed for bankruptcy last month, said it had found 200,000 Bitcoins that were held in an “old-format” wallet, or digital storage file.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/38755233/sc/21/l/0Ldealbook0Bnytimes0N0C20A140C0A30C210Cmt0Egox0Esays0Eit0Ehas0Efound0E20A0A0A0A0A0Ebitcoins0Eworth0Eabout0E1140Emillion0C0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42718/guest@my.umbc.edu/39c409046ae212aa1ff6cb99c230c093/api/pixel</TrackingUrl>
<Tag>bankruptcies</Tag>
<Tag>bitcoin-currency</Tag>
<Tag>financial-services</Tag>
<Tag>karpeles-mark</Tag>
<Tag>mtgox-co-ltd</Tag>
<Tag>new</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 Mar 2014 09:53:35 -0400</PostedAt>
<EditAt>Sat, 22 Mar 2014 13:08:40 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42711" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42711">
<Title>WordPress Performance Improvements That Can Go Wrong</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <table width="650">
    <tbody>
    <tr>
    <td>
    <div>
    <img src="http://statisches.auslieferung.commindo-media-ressourcen.de/advertisement.gif" alt="" style="max-width: 100%; height: auto;"><br><a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=1" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=1" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=2" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=2" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=3" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=3" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
    </td>
    </tr>
    </tbody>
    </table>
    <p>If you’ve searched recently for tips on optimizing WordPress’ performance, then you have definitely come across various techniques that people recommend. These include all sorts of caching mechanisms, such as reverse proxies, object caching and cache plugins, CSS minification, using sprites for images, and so on. All of them are <strong>viable and effective ways to speed up a WordPress website’s performance</strong>. However, be careful when implementing any of these techniques, and always test their effect on your particular website.</p>
    <p>In this article, we’ll cover some of the most common issues with various speed boosters that I have encountered and share solutions to help you fix those problems or find ways around them.</p>
    <h3>Possible Problems When Using Reverse Proxies Such As Varnish And Nginx</h3>
    <p>I will start with the reverse proxies because, when used correctly, they can give you the biggest speed boost and, when used improperly, can cause serious problems, such as making your website inaccessible or showing the wrong information to the wrong visitors.</p>
    <h4>How Do Reverse Proxies Work?</h4>
    <p>Reverse proxies, like Varnish and Nginx, stand between your visitors and your Web server. When a request for one of your pages is made, your Web server usually has to execute the PHP service that makes calls to the database and then provides the page output and the static resources needed to visualize the page. With a reverse proxy enabled, this result is cached, and the next time someone requests that page, the ready output will be delivered by the reverse proxy, which is much faster and causes no load on your server.</p>
    <p>This is great, but to operate correctly, the cache must be purged every time something on the page has changed. <strong>This is where things can go wrong</strong>, mostly because WordPress does not natively support reverse proxies and requires additional tweaks for the cache to be cleared correctly. Usually, such tweaks rely on WordPress’ default core hooks (think of them as events) to purge the cache when necessary — when a post is updated, when a comment is added, when a post is created, etc. However, if an important hook is missed in the implementation of the reverse proxy that you’re using, then you might have a problem. Additionally, numerous events — ones not a part of WordPress’ core hooks but rather performed through plugins — could change the content on your website.</p>
    <h4>Possible Problems During WordPress Updates</h4>
    <p>When updating, WordPress puts your website in maintenance mode, updates its files and then disables maintenance mode. The reverse proxy could possibly cache some of your pages while your website is in maintenance mode. This means that if the cache is not purged, then this maintenance page would continue being served to visitors, actively preventing them from reaching your website even when it is operational on the Web server.</p>
    <p><strong>When you update a plugin, WordPress disables it</strong>, deletes its entire folder and then adds the new files. During that time, the plugin does not actually work. If it’s a big plugin that adds a lot of functionality, such as a gallery or online store, then your reverse proxy could cache pages with errors on them, instead of the actual content.</p>
    <p>When you update manually, the easy fix is either to disable the cache during the update or to purge the cache manually once you are ready with the update. However, when you use WordPress’ native automatic update, these solutions are not very practical. What a good reverse proxy should do instead is <strong>automatically purge the cache on each update event</strong>. Because both core and plugin updates have hooks in the core, this is easily achievable and should be done by you (if you are implementing the reverse proxy yourself) or by your hosting provider (if you rely on the host’s implementation).</p>
    <h4>Problems With Online Store Plugins for WordPress</h4>
    <p>No matter which WordPress plugin you use for your online store, you should be very, very careful when implementing reverse proxy caching.</p>
    <p>For example, you could create a lovely mess with a shopping-cart widget that displays the products that a customer has selected to buy. If that content is cached by the reverse proxies, then all of your visitors would see the products that the first customer has selected for purchase. Things could get even worse if pages containing personal information, such as thank-you pages, are cached and displayed incorrectly to the wrong visitor. Needless to say, this should be avoided at all costs.</p>
    <p>The safest way to avoid such problems is to <strong>exclude the entire e-commerce part of your website from the cache</strong>. Usually, reverse proxies implemented by hosting companies exclude the most common WordPress e-commerce plugins from the cache by default.</p>
    <p>If excluding the whole e-commerce part of your website does not sound to you like an elegant solution — because you would obviously lose the speed benefits — then, theoretically, there is a more intricate way around: using Edge Side Includes (ESI) to specify that parts of your pages should not be cached. In theory, you would simply surround your HTML with ESI tags:</p>
    <pre><code>&#x000A;    &lt;esi:include&gt; Dynamic content &lt;esi:remove&gt;&#x000A;    </code></pre>
    <p>Then, the content between those tags would be dynamically retrieved every time this page is requested.</p>
    <p>Unfortunately, implementing ESI with WordPress is not straightforward at all, due to WordPress’ lack of native support for reverse proxies. Thus, ESI is usually not a viable option with hosts that support reverse proxies. But it is worth considering if you have an online store built with WordPress and you are implementing the reverse proxy yourself.</p>
    <h4>Problems With Rating Plugins</h4>
    <p>When you use a rating plugin on a WordPress website that is cached by a reverse proxy, chances are that visitors will often see an incorrect cached rating, instead of the real up-to-date rating. The reason is that a visitor’s vote given through such a plugin is not part of WordPress’ default hooks and will not trigger a cache purge.</p>
    <p>Similar to the e-commerce issues, you could either exclude pages that you collect rankings for from the cache or implement the ESI model for those pages, if feasible.</p>
    <h3>Issues With Full-Page Caching Plugins</h3>
    <p>In case your hosting provider doesn’t provide you with a reverse proxy caching service, you could rely on one of the so-called full-page caching plugins for WordPress. When a visitor requests a page, the plugin would save the actual HTML output in a physical file on your server. The next time someone requests that page, it would be served as a static HTML file, which is much slower than a reverse proxy but still faster than not caching at all.</p>
    <p>Unfortunately, due to the caching technique being used, all of the possible problems I’ve explained for reverse proxies hold true for the full-page caching plugins, plus some new ones.</p>
    <p><strong>Be careful using such caching</strong> on a website with many posts or pages. When you create content on a WordPress website, more pages are automatically created than just the one you’re working on directly: category pages that list all posts in that category, tag pages, archives, author pages, pages for uploaded images, etc. All of these add up to a big number of URLs that your website serves. Now, imagine all of those URLs being turned into HTML files in some folder (usually the <code>uploads</code> folder) on your Web server.  When thousands of files are in a single directory, even listing those files is difficult, and we’re talking about the Linux OS here. The result for a big website is usually a huge number of files, a heavy I/O load on the server and, eventually, a slower website and problems with the hosting provider.</p>
    <p>There is no exact number of posts above which you should not incorporate this method, and it also depends on the particular way the plugin stores the cache — using multiple folders instead of one, for example, would be more efficient, but still might not be enough for a really large website. Just bear in mind that if you use such a caching technique and your website starts slowing down, then this might be the reason.</p>
    <h3>Object Caching (Memcached) And How To Break It</h3>
    <p>Object caching is great for a website that gets a lot of requests to its database, and it can really speed up some websites. Memcached stores the result of the most commonly executed queries to your database in the server’s RAM and serves the cached results instead of querying the MySQL server each time. Unfortunately, in some scenarios, you could actually decrease your website’s performance, and here is why.</p>
    <p>Some WordPress plugins are coded (badly) to store a huge amount of data in the application database. The Memcached service has a limited amount of memory for caching. Imagine what happens when a plugin stores huge images in the database. Memcached will try to store the result of this query in its buffer but will run out of space. Then, it will start to delete previously cached content on a first-in, first-out basis. If the query’s results are big enough, then no actual content would be cached because it would be removed before being served a second time. <strong>In this case, your website would actually slow down</strong> because not only would you fail to spare this load on the MySQL service, but you would add another service in the process that requires its own computing time.</p>
    <p>If you find your website is working more slowly after enabling Memcached, then unfortunately your only solution is either to disable all plugins that store a huge amount of data in the database or to disable the Memcached service itself.</p>
    <h3>Sprites: Yes, You Can Go Wrong With Them, Too</h3>
    <p>I love sprites for the performance boost they give to a website when used correctly. This is why, when we redesigned <a href="http://www.siteground.com/" rel="nofollow external" class="bo">SiteGround</a> recently, we moved all navigation and UI elements and many other page elements to sprites. Our website became much faster, and we were quite happy with the result. Then, we continued adding elements to the sprite image, until at some point we noticed problems when some pages loaded on iOS devices.</p>
    <p>This happened because we hit mobile Safari’s limit on the maximum number of decoded pixels that can be displayed. This limit is different for different devices. You could easily <strong>generate a sprite with a lot of pixels</strong>, and if it reaches the size limit, then the browser won’t load it, which will leave your website without all of the elements contained in that sprite. Of course, you don’t want this to happen.</p>
    <p>A good man by the name of William Malone has crafted a <a href="http://www.williammalone.com/articles/html5-javascript-ios-maximum-sprite-frames/" rel="nofollow external" class="bo">nifty tool</a> to check whether a sprite image will display correctly on all iOS devices. Enter the dimensions of your sprite image in the calculator, and the answer will appear.</p>
    <p>If your sprite is too big, a possible solution is to split it into two images. If you have to do this, my advice is to relegate only the newest elements to a new image; otherwise you would have to adjust all of the CSS code that uses the sprite, a task that you’d want to avoid if possible.</p>
    <h3>Risks With CSS And JavaScript Minification</h3>
    <p>CSS and JavaScript minification is another of the most common techniques for speeding up a website. Generally, minifying these files entails removing all unnecessary symbols (new lines, semicolons after the final CSS property, comments, etc.), thus reducing the size of the files. This technique applies not only to WordPress but to any page that uses CSS and JavaScript.</p>
    <p><strong>Many tools and plugins will automatically minify files.</strong> However, some minify more aggressively than simply removing empty symbols. Some tools will rearrange CSS selectors, for example, grouping them by property, etc. In some cases, this could break the entire logic of a CSS file and turn your website into something that merely resembles the original.</p>
    <p>To avoid such problems, use basic non-aggressive minification tools that remove only unnecessary data from JavaScript and CSS files, without reordering properties. In addition, always keep a copy of your unminified files because, after minification, they will become practically unreadable, making any further changes much harder. I use either a plugin or the online <a href="http://www.freeformatter.com/" rel="nofollow external" class="bo">FreeFormatter</a>.</p>
    <h3>Gzip: Can’t Go Wrong Here, But We Can Do It Better</h3>
    <p>Enabling Gzip for WordPress will greatly improve loading speed. Gzip compresses a page’s output and transfers it to the visitor’s browser, like a regular ZIP file, whereupon the browser decompresses and renders it. It’s great because the time a browser takes to decompress archived content is many times less than the time needed to physically transfer the uncompressed content from the server to the browser.</p>
    <p><strong>Most WordPress users rely on plugins when they can</strong> — at least the ones who can’t or don’t want to code — including for Gzip. Unfortunately, Gzip plugins run through PHP, which, although fast, is not as fast as running directly from the Apache server. All you need to do is install mod_deflate (ask your hosting provider if it is available — it should be because it is pretty much an industry standard) and add a few lines to your <code>.htaccess</code> file:</p>
    <pre><code>&#x000A;    AddOutputFilterByType DEFLATE text/plain&#x000A;    AddOutputFilterByType DEFLATE text/html&#x000A;    AddOutputFilterByType DEFLATE text/xml&#x000A;    AddOutputFilterByType DEFLATE text/css&#x000A;    AddOutputFilterByType DEFLATE application/xml&#x000A;    AddOutputFilterByType DEFLATE application/xhtml+xml&#x000A;    AddOutputFilterByType DEFLATE application/rss+xml&#x000A;    AddOutputFilterByType DEFLATE application/javascript&#x000A;    AddOutputFilterByType DEFLATE application/x-javascript&#x000A;    </code></pre>
    <h3>Conclusion</h3>
    <p>Knowing all of the risks involved in optimizing the speed of your WordPress website should not stop you from experimenting. To achieve the best results, just follow few simple principles: don’t change too many things at once, benchmark your loading speeds, use staging copies when possible, and test the website’s functionality after applying each new technique. In doing so, you will speed up your website without breaking any functionality or causing problems for visitors.</p>
    <p><em>(dp, al, il)</em></p>
    <hr>
    <p><small>© Hristo Pandjarov for <a href="http://www.smashingmagazine.com" rel="nofollow external" class="bo">Smashing Magazine</a>, 2014.</small></p>
    </div>
]]>
</Body>
<Summary>        If you’ve searched recently for tips on optimizing WordPress’ performance, then you have definitely come across various techniques that people recommend. These include all sorts of caching...</Summary>
<Website>http://www.smashingmagazine.com/2014/03/21/wordpress-performance-improvements-that-can-go-wrong/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42711/guest@my.umbc.edu/d9630a2f94abe718cbf44c43454bfbb8/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Tag>wordpress</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 Mar 2014 09:31:40 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 03:31:40 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="109790" important="false" status="posted" url="https://my3.my.umbc.edu/posts/109790">
<Title>Charge to Strategic Planning Strategy Groups</Title>
<Body>
<![CDATA[
    <div class="html-content">The development of Our UMBC: A Strategic Plan for Advancing Excellence is founded upon a broadly inclusive process. Discussions about focus areas for planning began at the 2013 University Retreat and continued through a series of 35 conversations with nearly 800 faculty, staff, students, and alumni this past fall. Based on this campus input, the Strategic Planning Steering Committee has identified four planning focus areas widely viewed as drivers of future success for UMBC: The Student Experience Primary goal: Create vibrant, exceptional, and comprehensive undergraduate and graduate student experiences that integrate in and out of classroom learning to prepare graduates …</div>
]]>
</Body>
<Summary>The development of Our UMBC: A Strategic Plan for Advancing Excellence is founded upon a broadly inclusive process. Discussions about focus areas for planning began at the 2013 University Retreat...</Summary>
<Website>https://news.umbc.edu/charge-to-strategic-planning-strategy-groups/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/109790/guest@my.umbc.edu/8e90e2f250424c9fac0c35afa3c36a8e/api/pixel</TrackingUrl>
<Tag>community</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 Mar 2014 09:21:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42710" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42710">
<Title>Ben Strong: UMBC EHS Alumni</Title>
<Tagline>Maritime Search and Rescue-Flight 370</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <span>EHS Alumnus Update--Today on CNN:  Christiane 
    Amanpour speaks with Ben Strong, director of AMVER, an maritime search 
    and rescue organization.<br> <br> <a href="http://www.cnn.com/video/data/2.0/video/world/2014/03/20/flight-370-ben-strong-amver-malaysia-australia-amanpour.cnn.html" rel="nofollow external" class="bo">http://www.cnn.com/video/data/2.0/video/world/2014/03/20/flight-370-ben-strong-amver-malaysia-australia-amanpour.cnn.html</a></span><br>
    </div>
]]>
</Body>
<Summary>EHS Alumnus Update--Today on CNN:  Christiane  Amanpour speaks with Ben Strong, director of AMVER, an maritime search  and rescue organization....</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42710/guest@my.umbc.edu/ffbbde373f65b0d06407d8835b60bc7d/api/pixel</TrackingUrl>
<Tag>ehs</Tag>
<Tag>ems</Tag>
<Tag>flight370</Tag>
<Tag>search-and-rescue</Tag>
<Group token="ehs-dept">Emergency and Disaster Health Systems (EDHS)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/ehs-dept</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xsmall.png?1709658082</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/original.png?1709658082</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xxlarge.png?1709658082</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xlarge.png?1709658082</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/large.png?1709658082</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/medium.png?1709658082</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/small.png?1709658082</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xsmall.png?1709658082</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xxsmall.png?1709658082</AvatarUrl>
<Sponsor>Emergency Health Services</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 09:19:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42707" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42707">
<Title>Sako Narita: Calm in a Storm</Title>
<Tagline>Calm in a Storm - Disaster Relief in the Philippines</Tagline>
<Body>
<![CDATA[
    <div class="html-content">EHS Graduate Program Student, <span>Sako Narita, and her efforts to help out in the relief effort in the Philippines</span>.<br><br><div>
        <p>UMBC: Calm in a Storm</p>
        <p><a href="http://umbc.edu/window/ehs_2014.html">http://umbc.edu/window/ehs_2014.html</a></p>
    </div>
    <br>
    </div>
]]>
</Body>
<Summary>EHS Graduate Program Student, Sako Narita, and her efforts to help out in the relief effort in the Philippines.   
     UMBC: Calm in a Storm 
     http://umbc.edu/window/ehs_2014.html</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42707/guest@my.umbc.edu/1569fdcd43178534cf5650dd8124aa01/api/pixel</TrackingUrl>
<Tag>disasterrelief</Tag>
<Tag>ehsgraduate</Tag>
<Tag>ems</Tag>
<Tag>graduatestudent</Tag>
<Tag>philippines</Tag>
<Group token="ehs-dept">Emergency and Disaster Health Systems (EDHS)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/ehs-dept</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xsmall.png?1709658082</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/original.png?1709658082</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xxlarge.png?1709658082</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xlarge.png?1709658082</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/large.png?1709658082</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/medium.png?1709658082</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/small.png?1709658082</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xsmall.png?1709658082</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/651/78ee339114856fdb41561ea36fb3aff4/xxsmall.png?1709658082</AvatarUrl>
<Sponsor>Emergency Health Services</Sponsor>
<PawCount>1</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 08:41:04 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 08:43:52 -0400</EditAt>
</NewsItem>

</News>
