<?xml version="1.0"?>
<News hasArchived="true" page="7867" pageCount="10751" pageSize="10" timestamp="Sat, 15 Aug 2026 15:38:43 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7867">
<NewsItem contentIssues="true" id="45983" important="false" status="posted" url="https://my3.my.umbc.edu/posts/45983">
<Title>Don&#8217;t stop working on the dissertation until you&#8217;re finished, and learn from &#8220;Painful People&#8221;</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="https://dissertationhouse.files.wordpress.com/2014/01/doctorate2.jpg" rel="nofollow external" class="bo"><img alt="Doctor of Philosophy Degree" src="https://dissertationhouse.files.wordpress.com/2014/01/doctorate2.jpg?w=640" style="max-width: 100%; height: auto;"></a>The following message was posted as part of the Dissertation House’s blog within the <a href="https://dissertationhouse.wordpress.com/blog-online-challenge/winter-2014/" rel="nofollow external" class="bo">“Winter 2014 Challenge” thread</a>.  It is repeated here so that those who read the general blog, will receive the message as well. At the time of the original post, there were 112 messages. Now, there are 134. Good job “DHers!”</p>
    <p>The Winter 2014 Challenge thread is here: <a href="https://dissertationhouse.wordpress.com/blog-online-challenge/winter-2014/" rel="nofollow external" class="bo">https://dissertationhouse.wordpress.com/blog-online-challenge/winter-2014/</a>. Feel free to join. The thread will be active until the end of June 2014.</p>
    <p>————————————————————————-</p>
    <p>January 23, 2014</p>
    <p>Buenos tardes a todos!!/Good afternoon to everyone!!</p>
    <p>Estoy en Ecuador y estoy muy feliz porque hay 112 mesajes aqui!/I am in Ecuador and am very happy because there are 112 messages here!</p>
    <p>Congratulations to all of you on your persistence! What does your persistence mean? If you blogged in during the snow storm, you have already proven that you have what it takes. You have drive and determination. That is a large part of the battle. The Dissertation House exists to assist you with navigating the process and adding “knowledge of the process” to your enthusiasm.</p>
    <p>My message for you today is simple:</p>
    <p><strong>1) Don’t stop until you’re done!</strong><br>
    <a href="https://dissertationhouse.wordpress.com/coaching-and-mentoring/dr-wendy-carter/" rel="nofollow external" class="bo">Dr. Carter-Veale</a>, Dr. Cortes, and some of you have seen people in the DH who felt frustrated, tired, and upset, BUT … they finished. They defended, handed in their dissertations, and walked across the stage with the big robe and the thick bars on their arms. That will be you … soon.</p>
    <p><strong>2) Pay close attention to the tips that you will receive in the DH.</strong><br>
    These are tried and tested methods. With a pure heart, I ask you to “just do it.”</p>
    <p><strong>3) As much as possible, stay in close contact with your advisor.</strong><br>
    Your advisor needs to know that you are working.You also want to be sure that you are on the right page and that the expectations are in sync.</p>
    <p><strong>4) Utilize the community that is being established in the DH. It helps!</strong><br>
    Working on the dissertation does not have to be a lonely, isolated process. You are now surrounded by a community of scholars with like minds and goals. There’s energy there. Feed on it. Use it. Bask in it!</p>
    <p><strong>5) Embrace the process.</strong><br>
    This is the hard one. The process is difficult, but there are parts of the process that are worth the frustration. The dissertation process teaches you how to deal with long-term projects, how to deal with contrasting personalities (e.g., your committee), how to deal with rejection, and how to handle your own emotions. This is a maturation process. You may not know all of the answers, but you learn how to investigate solutions, and you learn to think through options. You may not like all of the people with whom you’re working, but you learn how to negotiate for what you need, and you learn to appreciate the strengths that people bring to the table, regardless of whether or not you care for them personally. <span><em>You can still learn from “Painful People.” You can still learn from people, even when they aren’t providing information or assistance in a way that is amiable or projecting a feeling of giving. Take what they provide and find its worth.</em></span> Above all, learn to appreciate the process of becoming more adept in your field.</p>
    <p>Overall, I’m sorry that I’m not there in person for this session, but feel free to make an appointment with me to talk when I return to UMBC in February. Good luck to all of you! Congratulations on your hard work and keep it up. Those letters … “P,” “h,” and “D,” are dangling, hanging around, waiting for you to finish so that they can accompany your name!</p>
    <p>Best regards,<br>
    <em><a href="https://dissertationhouse.wordpress.com/coaching-and-mentoring/dr-renetta-tull/" rel="nofollow external" class="bo">Renetta Tull</a></em></p>
    <p>————————————————————————————–</p>
    <p><em>The Dissertation House is a program of <a href="http://promiseagep.wordpress.com" rel="nofollow external" class="bo">PROMISE: Maryland’s AGEP</a></em></p>
    <p><em><a href="https://dissertationhouse.wordpress.com/coaching-and-mentoring/dr-wendy-carter/" rel="nofollow external" class="bo">Dr. Wendy Carter-Veale</a></em> is the “Head Coach” for the Dissertation House.</p>
    <br>Filed under: <a href="https://dissertationhouse.wordpress.com/category/dissertation-completion/" rel="nofollow external" class="bo">Dissertation Completion</a>, <a href="https://dissertationhouse.wordpress.com/category/dissertation-house/" rel="nofollow external" class="bo">Dissertation House</a>, <a href="https://dissertationhouse.wordpress.com/category/promise-marylands-agep/" rel="nofollow external" class="bo">PROMISE: Maryland's AGEP</a>, <a href="https://dissertationhouse.wordpress.com/category/umbc/" rel="nofollow external" class="bo">UMBC</a>, <a href="https://dissertationhouse.wordpress.com/category/winter-dissertation-house/" rel="nofollow external" class="bo">Winter Dissertation House</a> Tagged: <a href="https://dissertationhouse.wordpress.com/tag/agep/" rel="nofollow external" class="bo">AGEP</a>, <a href="https://dissertationhouse.wordpress.com/tag/agep-t/" rel="nofollow external" class="bo">AGEP-T</a>, <a href="https://dissertationhouse.wordpress.com/tag/dh/" rel="nofollow external" class="bo">DH</a>, <a href="https://dissertationhouse.wordpress.com/tag/dissertation-house/" rel="nofollow external" class="bo">Dissertation House</a>, <a href="https://dissertationhouse.wordpress.com/tag/promise-agep/" rel="nofollow external" class="bo">PROMISE AGEP</a>, <a href="https://dissertationhouse.wordpress.com/tag/promise-marylands-agep/" rel="nofollow external" class="bo">PROMISE: Maryland's AGEP</a>, <a href="https://dissertationhouse.wordpress.com/tag/umbc/" rel="nofollow external" class="bo">UMBC</a>  </div>
]]>
</Body>
<Summary>The following message was posted as part of the Dissertation House’s blog within the “Winter 2014 Challenge” thread.  It is repeated here so that those who read the general blog, will receive the...</Summary>
<Website>https://dissertationhouse.wordpress.com/2014/01/24/dont-stop-working-on-the-dissertation-until-youre-finished-and-learn-from-painful-people/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/45983/guest@my.umbc.edu/d34d157c0d7c47342bebfdeaadc5dc29/api/pixel</TrackingUrl>
<Tag>agep</Tag>
<Tag>agep-t</Tag>
<Tag>dh</Tag>
<Tag>dissertation-completion</Tag>
<Tag>dissertation-house</Tag>
<Tag>promise-agep</Tag>
<Tag>promise-marylands-agep</Tag>
<Tag>umbc</Tag>
<Tag>winter-dissertation-house</Tag>
<Group token="gspd">Grad Student &amp;amp; Postdoc Development </Group>
<GroupUrl>https://my3.my.umbc.edu/groups/gspd</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/xsmall.png?1781730740</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/original.png?1781730740</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/xxlarge.png?1781730740</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/xlarge.png?1781730740</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/large.png?1781730740</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/medium.png?1781730740</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/small.png?1781730740</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/xsmall.png?1781730740</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/066/4b2a0ea3017d894b96de7bd4a45729d5/xxsmall.png?1781730740</AvatarUrl>
<Sponsor>PROMISE @ UMBC: Support for Graduate Students</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 24 Jan 2014 18:53:46 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="40583" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40583">
<Title>Bits Blog: Google Pushes Back Against Data Localization</Title>
<Body>
<![CDATA[
    <div class="html-content">Though Microsoft allows customers to choose to store their data outside the United States, Google has warned against data localization and said it would be nearly impossible to carry out.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F01%2F24%2Fgoogle-pushes-back-against-data-localization%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Pushes+Back+Against+Data+Localization" 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%2F2014%2F01%2F24%2Fgoogle-pushes-back-against-data-localization%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Pushes+Back+Against+Data+Localization" 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%2F2014%2F01%2F24%2Fgoogle-pushes-back-against-data-localization%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Pushes+Back+Against+Data+Localization" 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%2F2014%2F01%2F24%2Fgoogle-pushes-back-against-data-localization%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Pushes+Back+Against+Data+Localization" 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%2F2014%2F01%2F24%2Fgoogle-pushes-back-against-data-localization%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Pushes+Back+Against+Data+Localization" 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/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/sc/5/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187556875968/u/0/f/640387/c/34625/s/36536d9a/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Though Microsoft allows customers to choose to store their data outside the United States, Google has warned against data localization and said it would be nearly impossible to carry out.      </Summary>
<Website>http://bits.blogs.nytimes.com/2014/01/24/google-pushes-back-against-data-localization/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40583/guest@my.umbc.edu/2523db17db52533b55658eccecca6de3/api/pixel</TrackingUrl>
<Tag>cloud-computing</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>data</Tag>
<Tag>data-storage</Tag>
<Tag>enterprise-computing</Tag>
<Tag>google-inc</Tag>
<Tag>internet</Tag>
<Tag>microsoft-corporation</Tag>
<Tag>new</Tag>
<Tag>policy</Tag>
<Tag>security</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, 24 Jan 2014 18:28:13 -0500</PostedAt>
<EditAt>Sat, 25 Jan 2014 11:28:13 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40581" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40581">
<Title>UMBC Suits You: Professional Clothing Closet Drive</Title>
<Tagline>It is time to donate your professional attire!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p>"UMBC Suits You" is collecting new and gently used professional clothing as part of Career Week in April.  Students will have the opportunity to learn about dressing professionally and will then be able to select one free outfit to use in their job search. We are asking staff to donate new and gently used professional clothing at collection bins around campus from <strong>February 11th - March 11th</strong>.</p>
    <p><br></p>
    <p>Starting February 11th, Professional Clothing can be dropped off at the following on-campus locations:</p>
    <p><span>•</span><span> </span>Career Services Center, Math/Psych 212: <span>8:30 a.m. – 5 p.m. (Mon-Fri)</span></p>
    <p>• The Women’s Center, The Commons: </p>
    <p><span>9 a.m. – 7 p.m. (Mon-Thurs), 9 a.m. – 5 p.m. (Fri)</span></p>
    <p>• Commons Info Desk: <span>7:30 a.m. – 12 a.m. (Mon-Thurs), </span></p>
    <p><span>7:30 a.m. – 1 a.m. (Fri), 8 a.m. – 1 a.m. </span><span>(Sat), 10 a.m. – 11 p.m. (Sun)</span></p>
    <p>• Residential Life Office, Erickson Hall: 8:30 – 4:30 p.m. (Mon-Fri)</p>
    <p>CWIT Office (<span>ITE452)  </span><span>8:30 a.m. – 5 p.m. (Mon-Fri)</span></p>
    <p>• RAC Front Desk: <span>7:30 a.m. – 9 p.m. (Mon-Fri), 12 p.m. – 6 p.m. (Sat-Sun)</span></p>
    <p>• The Shriver Center, Public Policy Building: <span>8:30 a.m. – 5 p.m. (Mon-Fri)</span></p>
    <p>• Alumni House: 8:30 a.m. – 5 p.m. (Mon-Fri)</p>
    <p><br></p>
    <p>UMBC Alumni and Community Members are encourage to drop off donations at some of our neighborhood locations:</p>
    <p>• Alumni House: 8:30 a.m. – 5 p.m. (Mon-Fri)</p>
    <p><span>•</span><span> </span>UMBC Training Centers: <span>8:00 a.m. – 5 p.m. (Mon-Fri)</span></p>
    <p>• bwtech (Cyber Incubator): 9 a.m. – 6 p.m. (Mon-Fri)</p>
    <p><span>•</span><span> </span>Catonsville Chamber of Commerce 10<span>:00 a.m. – 3 p.m. (Mon-Fri)</span></p>
    <p><span>•</span><span> </span>Baltimore County Public Library- Arbutus 9<span>:00 a.m. – 5 p.m. </span></p>
    <p><br></p>
    <p> <span>• </span><span>Items that will be accep</span><span>ted: dr</span><span>esses, shell tops, button-up shirts and blouses, skirts, blazers, dress pants, belts, ties, skirt suits and suits. </span></p>
    <p>• Items that will NOT be accepted: jewelry, handbags, shoes, <span>and general</span> accessori<span>es.</span></p>
    <p>For more information on accepted information check out the link <a href="https://umbc.app.box.com/s/h46cvlck6rpxv3gp5sxw" rel="nofollow external" class="bo">here</a>.</p>
    <p><br></p>
    <p>Clothing donations will be used to benefit UMBC students and will not be <span>considered as gift-in-kind or donation to UMBC. Clothing donations are not </span><span>tax deductible. Any leftover clothing will be donated to local non-profits, Suited to Succeed and the Franciscan Center’s Attire 4 Hire program.</span></p>
    <p><br></p>
    <p>Special thanks to ZIPS dry-cleaning and T. Rowe Price for partnering with us once again on this endeavor.</p>
    <p><br></p>
    <p>Any questions or concerns about this project can be addressed to Kate Phelps, Career Services Center, <a href="mailto:kphelps@umbc.edu">kphelps@umbc.edu</a>, 410-455-2216.</p>
    <p><br></p>
    <p>***Students be on the look out for more information about UMBC Suits You occurring on April 5 &amp; 7 when you will be able to pick up a professional outfit.***</p>
    <p><br></p>
    <p>UMBC Career Week will occur April 7- April 10. Detailed information will be available soon. </p>
    </div>
]]>
</Body>
<Summary>"UMBC Suits You" is collecting new and gently used professional clothing as part of Career Week in April.  Students will have the opportunity to learn about dressing professionally and will then...</Summary>
<AttachmentKind>Flyer</AttachmentKind>
<AttachmentUrl>https://assets2-my.umbc.edu/system/shared/attachments/03d3c57ac5399111b0475c336e2466bd/6a80c043/news/000/040/581/b9531e7d2a8f38fe8dcc73f58cae9530/UMBC Suits You Final.pdf?1392662884</AttachmentUrl>
<Attachments>
<Attachment kind="Flyer" url="https://my3.my.umbc.edu/posts/40581/attachments/12582"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40581/guest@my.umbc.edu/3613e2a3b9061741d97dcead4e7fc4d6/api/pixel</TrackingUrl>
<Group token="careers">Career Center</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/careers</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/xsmall.png?1411655278</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/original.jpg?1411655278</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/xxlarge.png?1411655278</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/xlarge.png?1411655278</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/large.png?1411655278</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/medium.png?1411655278</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/small.png?1411655278</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/xsmall.png?1411655278</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/018/729f2c7eeeab66f50f4ab3677539a585/xxsmall.png?1411655278</AvatarUrl>
<Sponsor>Career Services Center</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/xxlarge.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/xlarge.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/large.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/medium.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/small.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/xsmall.jpg?1390600669</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/040/581/32df267df52b7749c84e7e6321c1378b/xxsmall.jpg?1390600669</ThumbnailUrl>
<PawCount>12</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 24 Jan 2014 17:06:46 -0500</PostedAt>
<EditAt>Wed, 05 Mar 2014 09:57:54 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="109860" important="false" status="posted" url="https://my3.my.umbc.edu/posts/109860">
<Title>Pres. Hrabowski Emphasizes Importance of Research Investment, Economic Development, Tech Transfer</Title>
<Body>
<![CDATA[
    <div class="html-content">Maryland Senate President Mike Miller and House Speaker Michael Busch held a press conference today to announce a package of bills relating to economic development initiatives. The proposed legislation would leverage public and private sector resources for higher education research endowments; create a seed fund to invest in cybersecurity and privacy companies; and strengthen ties between key state, federal and higher education institutions and neighboring communities by creating Reduced Tax Zones (called RISE zones). President Hrabowski spoke at the press conference (photo at right), emphasizing the importance of investment in endowed professorships and the RISE economic development zones to increase …</div>
]]>
</Body>
<Summary>Maryland Senate President Mike Miller and House Speaker Michael Busch held a press conference today to announce a package of bills relating to economic development initiatives. The proposed...</Summary>
<Website>https://news.umbc.edu/dr-hrabowski-endorses-proposed-legislation/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/109860/guest@my.umbc.edu/008cea05b4f46120ed10a2d2420c2d51/api/pixel</TrackingUrl>
<Tag>bwtech</Tag>
<Tag>community</Tag>
<Tag>cybersecurity</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, 24 Jan 2014 16:28:11 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="122866" important="false" status="posted" url="https://my3.my.umbc.edu/posts/122866">
<Title>Dawn Biehler, Geography and Environmental Systems, on WHYY Philadelphia</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Entomologists believe bed bugs have started making a comeback in places like Philadelphia in recent years. A report that aired on WHYY in Philadelphia January 17 examines the city’s battle with bedbugs and how it has evolved.</p>
    <p>Dawn Biehler, assistant professor of geography and environmental systems, was interviewed for the story and commented on the history of bedbugs in the United States and how they appeared consistently up until the 40s and 50s.</p>
    <p><a href="/wp-content/uploads/2014/01/dawn-biehler-book-cover.jpg" rel="nofollow external" class="bo"><img alt="Dawn Biehler book cover" src="/wp-content/uploads/2014/01/dawn-biehler-book-cover.jpg" width="198" height="300" style="max-width: 100%; height: auto;"></a></p>
    <p>“It was almost kind of an accepted condition of urban life that every once in a while, you were going to get bedbugs,” Biehler said. “Some people had bedbugs pretty much constantly.”</p>
    <p>Bedbugs have made a comeback in places like Philadelphia as they’ve developed resistance to chemicals aimed at pest control, and Biehler commented how bedbugs can cause many problems such as “degradation of mental health” by creating problems such as loss of sleep and family divisions.</p>
    <p>You can listen to the full story on WHYY and read the accompanying article <a href="http://www.newsworks.org/index.php/local/the-pulse/63858-bed-bugs-" rel="nofollow external" class="bo">here</a>. Biehler also analyzed the history and transformation of the phrase “sleep tight, don’t let the bedbugs bite,” and that can be heard <a href="https://soundcloud.com/whyy-the-pulse/the-history-of-and" rel="nofollow external" class="bo">here</a>.</p>
    <p>Dawn Biehler is author of <em>Pests in the City: Flies, Bedbugs, Cockroaches, and Rats </em>published in 2013.</p>
    </div>
]]>
</Body>
<Summary>Entomologists believe bed bugs have started making a comeback in places like Philadelphia in recent years. A report that aired on WHYY in Philadelphia January 17 examines the city’s battle with...</Summary>
<Website>https://umbc.edu/stories/dawn-biehler-geography-and-environmental-systems-on-whyy-philadelphia/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/122866/guest@my.umbc.edu/cb805fc26d93d9823d9dbf219870ab09/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>ges</Tag>
<Tag>policy-and-society</Tag>
<Tag>research</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, 24 Jan 2014 16:23:55 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="40579" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40579">
<Title>DoIT Update on Recent Webmail, Blackboard Issues</Title>
<Tagline>Load Balancer "Root Cause" to be Reviewed This Semester</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <div>To the UMBC Campus Community,</div>
    <div><br></div>
    <div>Over the past 7-10 days, DoIT has been <a href="http://my.umbc.edu/groups/doit/news/40383" rel="nofollow external" class="bo">troubleshooting</a> technical issues with the Cyrus campus Webmail system and Blackboard. Initially, we saw these as separate issues, but have now determined the root cause to be a new network device, called a load balancer, that distributes demand among multiple servers that collectively make up these highly used systems. One complication was that while the issue with WebMail was widespread across those using it, the issue with Blackboard was mostly present when doing the more complex functions, normally done by administrators and instructors. As such, we missed the connection that the problem in Blackboard was related to the load balancer.</div>
    <div><br></div>
    <div>At approximately 6 p.m. on Wednesday, January 22, we decided to test the possibility that the issues in Blackboard might also be related to the load balancer and replaced the new load balancer with the former one it was replacing. To our knowledge, most of the issues (particularly exporting/importing courses in Bb and creating/importing assessments) appear to be resolved. If you believe this is not the case, please submit an RT (Request Tracker) ticket via the myUMBC help menu or directly at <a href="http://my.umbc.edu/help" rel="nofollow external" class="bo">my.umbc.edu/help</a>.</div>
    <div><br></div>
    <div><strong>Next Steps</strong></div>
    <div><br></div>
    <div>DoIT needs to move to a new load balancer. The vendor no longer supports the original one and campus demand for technology systems has grown steadily. However, DoIT is working closely with the vendor to review these recent issues and will develop a plan for moving forward, but we won’t do anything until the semester has stabilized. For now, our focus is to make certain that highly used systems, such as Blackboard, are running properly for the start of Spring semester this Monday, January 27. Going forward, we will update the Campus IT Steering Committee and Faculty Computer Policy Committee on our findings and plans.</div>
    <div><br></div>
    <div>On behalf of my DoIT colleagues, I want to thank students, faculty and staff for their diligence in reporting issues and their patience while we worked to address them. We know these disruptions were inconvenient, and will work hard to improve our environment going forward.</div>
    <div><br></div>
    <div>Sincerely,</div>
    <div><br></div>
    <div><br></div>
    <div>John Fritz</div>
    <div>Asst. VP, Instructional Technology</div>
    <div>UMBC Division of Information Technology</div>
    </div>
]]>
</Body>
<Summary>To the UMBC Campus Community,     Over the past 7-10 days, DoIT has been troubleshooting technical issues with the Cyrus campus Webmail system and Blackboard. Initially, we saw these as separate...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40579/guest@my.umbc.edu/3f3e9ef3c27ede1fea5fdeb54217ed8d/api/pixel</TrackingUrl>
<Tag>blackboard</Tag>
<Group token="doit">Division of Information Technology (DoIT)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/doit</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xsmall.png?1727453227</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/original.JPG?1727453227</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xxlarge.png?1727453227</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xlarge.png?1727453227</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/large.png?1727453227</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/medium.png?1727453227</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/small.png?1727453227</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xsmall.png?1727453227</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xxsmall.png?1727453227</AvatarUrl>
<Sponsor>Division of Information Technology</Sponsor>
<PawCount>3</PawCount>
<CommentCount>3</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 24 Jan 2014 15:14:24 -0500</PostedAt>
<EditAt>Thu, 07 Aug 2014 11:10:29 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="41058" important="false" status="posted" url="https://my3.my.umbc.edu/posts/41058">
<Title>SOLID: Part 3 - Liskov Substitution &amp; Interface Segregation Principles</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>The <a href="http://net.tutsplus.com/tutorials/php/solid-part-1-the-single-responsibility-principle/" rel="nofollow external" class="bo">Single Responsibility (SRP)</a>, <a href="http://net.tutsplus.com/tutorials/php/solid-part-2-the-openclosed-principle/" rel="nofollow external" class="bo">Open/Closed (OCP)</a>, <em>Liskov Substitution, Interface Segregation,</em> and Dependency Inversion. Five agile principles that should guide you every time you write code.</p>
    <p></p>
    <p>Because both the Liskov Substitution Principle (LSP) and the Interface Segregation Principle (ISP) are quite easy to define and exemplify, in this lesson we will talk about both of them.</p>
    <hr>
    <h2>Liskov Substitution Principle (LSP)</h2>
    <blockquote>
    <p>Child classes should never break the parent class' type definitions.</p>
    </blockquote>
    <p>The concept of this principle was introduced by Barbara Liskov in a 1987 conference keynote and later published in a paper together with Jannette Wing in 1994. Their original definition is as follows:</p>
    <blockquote>
    <p>Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.</p>
    </blockquote>
    <p>Later on, with the publication of the SOLID principles by <a href="http://www.8thlight.com/our-team/robert-martin" rel="nofollow external" class="bo">Robert C. Martin</a> in his book <a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1378755964&amp;sr=1-1&amp;keywords=robert+c+martin" rel="nofollow external" class="bo">Agile Software Development, Principles, Patterns, and Practices</a> and then republished in the C# version of the book <a href="http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258" rel="nofollow external" class="bo">Agile Principles, Patterns, and Practices in C#</a>, the definition became known as the Liskov Substitution Principle. </p>
    <p>This leads us to the definition given by Robert C. Martin:</p>
    <blockquote><p>Subtypes must be substitutable for their base types.</p></blockquote>
    <p>As simple as that, a subclass should override the parent class' methods in a way that does not break functionality from a client's point of view. Here is a simple example to demonstrate the concept.</p>
    <pre>class Vehicle {&#x000A;    &#x000A;    	function startEngine() {&#x000A;    		// Default engine start functionality&#x000A;    	}&#x000A;    &#x000A;    	function accelerate() {&#x000A;    		// Default acceleration functionality&#x000A;    	}&#x000A;    }</pre>
    <p>Given a class <code>Vehicle</code> - it may be abstract - and two implementations:</p>
    <pre>class Car extends Vehicle {&#x000A;    &#x000A;    	function startEngine() {&#x000A;    		$this-&gt;engageIgnition();&#x000A;    		parent::startEngine();&#x000A;    	}&#x000A;    &#x000A;    	private function engageIgnition() {&#x000A;    		// Ignition procedure&#x000A;    	}&#x000A;    &#x000A;    }&#x000A;    &#x000A;    class ElectricBus extends Vehicle {&#x000A;    &#x000A;    	function accelerate() {&#x000A;    		$this-&gt;increaseVoltage();&#x000A;    		$this-&gt;connectIndividualEngines();&#x000A;    	}&#x000A;    &#x000A;    	private function increaseVoltage() {&#x000A;    		// Electric logic&#x000A;    	}&#x000A;    &#x000A;    	private function connectIndividualEngines() {&#x000A;    		// Connection logic&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>A client class should be able to use either of them, if it can use <code>Vehicle</code>.</p>
    <pre>class Driver {&#x000A;    	function go(Vehicle $v) {&#x000A;    		$v-&gt;startEngine();&#x000A;    		$v-&gt;accelerate();&#x000A;    	}&#x000A;    }</pre>
    <p>Which leads us to a simple implementation of the Template Method Design Pattern as we used it in the OCP tutorial.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/template_method1.png" alt="template_method" width="600" height="294" style="max-width: 100%; height: auto;"><br>
    
    <p>Based on our previous experience with the Open/Closed Principle, we can conclude that Liskov's Substitution Principle is in strong relation with OCP. In fact, "a violation of LSP is a latent violation of OCP" (Robert C. Martin), and the Template Method Design Pattern is a classic example of respecting and implementing LSP, which in turn is one of the solutions to respect OCP also.</p>
    <hr>
    <h2>The Classic Example of LSP Violation</h2>
    <p>To illustrate this completely, we will go with a classic example because it is highly significant and easily understandable.</p>
    <pre>class Rectangle {&#x000A;    &#x000A;    	private $topLeft;&#x000A;    	private $width;&#x000A;    	private $height;&#x000A;    &#x000A;    	public function setHeight($height) {&#x000A;    		$this-&gt;height = $height;&#x000A;    	}&#x000A;    &#x000A;    	public function getHeight() {&#x000A;    		return $this-&gt;height;&#x000A;    	}&#x000A;    &#x000A;    	public function setWidth($width) {&#x000A;    		$this-&gt;width = $width;&#x000A;    	}&#x000A;    &#x000A;    	public function getWidth() {&#x000A;    		return $this-&gt;width;&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>We start with a basic geometrical shape, a <code>Rectangle</code>. It is just a simple data object with setters and getters for <code>width</code> and <code>height</code>. Imagine that our application is working and it is already deployed to several clients. Now they need a new feature. They need to be able to manipulate squares.</p>
    <p>In real life, in geometry, a square is a particular form of rectangle. So we could try to implement a <code>Square</code> class that extends a <code>Rectangle</code> class. It is frequently said that a child class <em>is a</em> parent class, and this expression also conforms to LSP, at least at first sight.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/SquareRect.png" alt="SquareRect" width="178" height="259" style="max-width: 100%; height: auto;"><br>
    
    <p>But is a <code>Square</code> really a <code>Rectangle</code> in programming?</p>
    <pre>class Square extends Rectangle {&#x000A;    &#x000A;    	public function setHeight($value) {&#x000A;    		$this-&gt;width = $value;&#x000A;    		$this-&gt;height = $value;&#x000A;    	}&#x000A;    &#x000A;    	public function setWidth($value) {&#x000A;    		$this-&gt;width = $value;&#x000A;    		$this-&gt;height = $value;&#x000A;    	}&#x000A;    }</pre>
    <p>A square is a rectangle with equal width and height, and we could do a strange implementation like in the above example. We could overwrite both setters to set the height as well as the width. But how would that affect client code?</p>
    <pre>class Client {&#x000A;    &#x000A;    	function areaVerifier(Rectangle $r) {&#x000A;    		$r-&gt;setWidth(5);&#x000A;    		$r-&gt;setHeight(4);&#x000A;    &#x000A;    		if($r-&gt;area() != 20) {&#x000A;    			throw new Exception('Bad area!');&#x000A;    		}&#x000A;    &#x000A;    		return true;&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>It is conceivable to have a client class that verifies the rectangle's area and throws an exception if it is wrong.</p>
    <pre>function area() {&#x000A;    	return $this-&gt;width * $this-&gt;height;&#x000A;    }</pre>
    <p>Of course we added the above method to our <code>Rectangle</code> class to provide the area.</p>
    <pre>class LspTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testRectangleArea() {&#x000A;    		$r = new Rectangle();&#x000A;    		$c = new Client();&#x000A;    		$this-&gt;assertTrue($c-&gt;areaVerifier($r));&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>And we created a simple test by sending an empty rectangle object to area verifier and the test passes. If our <code>Square</code> class is correctly defined, sending it to the Client's <code>areaVerifier()</code> should not break its functionality. After all, a <code>Square</code> is a <code>Rectangle</code> in all mathematical sense. But is our class?</p>
    <pre>function testSquareArea() {&#x000A;    	$r = new Square();&#x000A;    	$c = new Client();&#x000A;    	$this-&gt;assertTrue($c-&gt;areaVerifier($r));&#x000A;    }</pre>
    <p>Testing it is very easy and it breaks big time. An exception is thrown to us when we run the test above.</p>
    <pre>PHPUnit 3.7.28 by Sebastian Bergmann.&#x000A;    &#x000A;    Exception : Bad area!&#x000A;    #0 /paht/: /.../.../LspTest.php(18): Client-&gt;areaVerifier(Object(Square))&#x000A;    #1 [internal function]: LspTest-&gt;testSquareArea()</pre>
    <p>So, our <code>Square</code> class is not a <code>Rectangle</code> after all. It breaks the laws of geometry. It fails and it violates the Liskov Substitution Principle.</p>
    <p>I especially love this example because it not only violates LSP, it also demonstrates that object oriented programming is not about mapping real life to objects. Each object in our program must be an abstraction over a concept. If we try to map one-to-one real objects to programmed objects, we will almost always fail.</p>
    <hr>
    <h2>The Interface Segregation Principle</h2>
    <p>The Single Responsibility Principle is about actors and high level architecture. The Open/Closed Principle is about class design and feature extensions. The Liskov Substitution Principle is about subtyping and inheritance. The Interface Segregation Principle (ISP) is about business logic to clients communication.</p>
    <p>In all modular applications there must be some kind of interface that the client can rely on. These may be actual Interface typed entities or other classic objects implementing design patterns like Facades. It doesn't matter which solution is used. It always has the same scope: to communicate to the client code on how to use the module. These interfaces can reside between different modules in the same application or project, or between one project as a third party library serving another project. Again, it doesn't matter. Communication is communication and clients are clients, regardless of the actual individuals writing the code.</p>
    <p>So, how should we define these interfaces? We could think about our module and expose all the functionalities we want it to offer.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/hugeInterface.png" alt="hugeInterface" width="277" height="580" style="max-width: 100%; height: auto;"><br>
    
    <p>This looks like a good start, a great way to define what we want to implement in our module. Or is it? A start like this will lead to one of two possible implementations:</p>
    <ul>
    <li>A huge <code>Car</code> or <code>Bus</code> class implementing all the methods on the <code>Vehicle</code> interface. Only the sheer dimensions of such classes should tell us to avoid them at all costs.</li>
    <li>Or, many small classes like <code>LightsControl</code>, <code>SpeedControl</code>, or <code>RadioCD</code> which are all implementing the whole interface but actually providing something useful only for the parts they implement.</li>
    </ul>
    <p>It is obvious that neither solution is acceptable to implement our business logic.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/specializedImplementationInterface.png" alt="specializedImplementationInterface" width="600" height="413" style="max-width: 100%; height: auto;"><br>
    
    <p>We could take another approach. Break the interface into pieces, specialized to each implementation. This would help to use small classes that care about their own interface. The objects implementing the interfaces will be used by the different type of vehicles, like car in the image above. The car will use the implementations but will depend on the interfaces. So a schema like the one below may be even more expressive.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/carUsingInterface.png" alt="carUsingInterface" width="600" height="423" style="max-width: 100%; height: auto;"><br>
    
    <p>But this fundamentally changes our perception of the architecture. The <code>Car</code> becomes the client instead of the implementation. We still want to provide to our clients ways to use our whole module, that being a type of vehicle.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/oneInterfaceManyClients.png" alt="oneInterfaceManyClients" width="600" height="339" style="max-width: 100%; height: auto;"><br>
    
    <p>Assume we solved the implementation problem and we have a stable business logic. The easiest thing to do is to provide a single interface with all the implementations and let the clients, in our case <code>BusStation</code>, <code>HighWay</code>, <code>Driver</code> and so on, to use whatever thew want from the interface's implementation. Basically, this shifts the behavior selection responsibility to the clients. You can find this kind of solution in many older applications.</p>
    <blockquote><p>The interface-segregation principle (ISP) states that no client should be forced to depend on methods it does not use.</p></blockquote>
    <p>However, this solution has its problems. Now all the clients depend on all the methods. Why should a <code>BusStation</code> depend on the state of lights of the bus, or on the radio channels selected by the driver? It should not. But what if it does? Does it matter? Well, if we think about the Single Responsibility Principle, it is a sister concept to this one. If <code>BusStation</code> depends on many individual implementations, not even used by it, it may require changes if any of the individual small implementations change. This is especially true for compiled languages, but we can still see the effect of the <code>LightControl</code> change impacting <code>BusStation</code>. These things should never happen.</p>
    <p>Interfaces belong to their clients and not to the implementations. Thus, we should always design them in a way to best suite our clients. Some times we can, some times we can not exactly know our clients. But when we can, we should break our interfaces in many smaller ones, so they better satisfy the exact needs of our clients.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2014/01/segregatedInterfaces.png" alt="segregatedInterfaces" width="600" height="406" style="max-width: 100%; height: auto;"><br>
    
    <p>Of course, this will lead to some degree of duplication. But remember! Interfaces are just plain function name definitions. There is no implementation of any kind of logic in them. So the duplications is small and manageable.</p>
    <p>Then, we have the great advantage of clients depending only and only on what they actually need and use. In some cases, clients may use and need several interfaces, that is OK, as long as they use all the methods from all the interfaces they depend on.</p>
    <p>Another nice trick is that in our business logic, a single class can implement several interfaces if needed. So we can provide a single implementation for all the common methods between the interfaces. The segregated interfaces will also force us to think of our code more from the client's point of view, which will in turn lead to loose coupling and easy testing. So, not only have we made our code better to our clients, we also made it easier for ourselves to understand, test and implement.</p>
    <hr>
    <h2>Final Thoughts</h2>
    <p>LSP taught us why reality can not be represented as a one-to-one relation with programmed objects and how subtypes should respect their parents. We also put it in light of the other principles that we already knew.</p>
    <p>ISP teaches us to respect our clients more than we thought necessary. Respecting their needs will make our code better and our lives as programmers easier.</p>
    <p>Thank you for your time.</p>
    </div>
]]>
</Body>
<Summary>The Single Responsibility (SRP), Open/Closed (OCP), Liskov Substitution, Interface Segregation, and Dependency Inversion. Five agile principles that should guide you every time you write code....</Summary>
<Website>http://code.tutsplus.com/tutorials/solid-part-3-liskov-substitution-interface-segregation-principles--net-36710</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/41058/guest@my.umbc.edu/1480b231ed7bda298cde25c7a442059a/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, 24 Jan 2014 14:37:33 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="40580" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40580">
<Title>SOLID: Part 3 &#8211; Liskov Substitution &amp; Interface Segregation Principles</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36710&amp;c=1064257056" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36710&amp;c=1064257056" alt="" style="max-width: 100%; height: auto;"></a><p>The <a href="http://net.tutsplus.com/tutorials/php/solid-part-1-the-single-responsibility-principle/" rel="nofollow external" class="bo">Single Responsibility (SRP)</a>, <a href="http://net.tutsplus.com/tutorials/php/solid-part-2-the-openclosed-principle/" rel="nofollow external" class="bo">Open/Closed (OCP)</a>, <em>Liskov Substitution, Interface Segregation,</em> and Dependency Inversion. Five agile principles that should guide you every time you write code.</p>
    <p></p>
    <p>Because both the Liskov Substitution Principle (LSP) and the Interface Segregation Principle (ISP) are quite easy to define and exemplify, in this lesson we will talk about both of them.</p>
    <hr>
    <h2>Liskov Substitution Principle (LSP)</h2>
    <blockquote><p>Child classes should never break the parent class’ type definitions.</p></blockquote>
    <p>The concept of this principle was introduced by Barbara Liskov in a 1987 conference keynote and later published in a paper together with Jannette Wing in 1994. Their original definition is as follows:</p>
    <blockquote><p>Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.</p></blockquote>
    <p>Later on, with the publication of the SOLID principles by <a href="http://www.8thlight.com/our-team/robert-martin" rel="nofollow external" class="bo">Robert C. Martin</a> in his book <a href="http://www.amazon.com/Software-Development-Principles-Patterns-Practices/dp/0135974445/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1378755964&amp;sr=1-1&amp;keywords=robert+c+martin" rel="nofollow external" class="bo">Agile Software Development, Principles, Patterns, and Practices</a> and then republished in the C# version of the book <a href="http://www.amazon.com/Agile-Principles-Patterns-Practices-C/dp/0131857258" rel="nofollow external" class="bo">Agile Principles, Patterns, and Practices in C#</a>, the definition became known as the Liskov Substitution Principle.</p>
    <p>This leads us to the definition given by Robert C. Martin:</p>
    <blockquote><p>Subtypes must be substitutable for their base types.</p></blockquote>
    <p>As simple as that, a subclass should override the parent class’ methods in a way that does not break functionality from a client’s point of view. Here is a simple example to demonstrate the concept.</p>
    <pre>class Vehicle {&#x000A;    &#x000A;    	function startEngine() {&#x000A;    		// Default engine start functionality&#x000A;    	}&#x000A;    &#x000A;    	function accelerate() {&#x000A;    		// Default acceleration functionality&#x000A;    	}&#x000A;    }</pre>
    <p>Given a class <code>Vehicle</code> – it may be abstract – and two implementations:</p>
    <pre>class Car extends Vehicle {&#x000A;    &#x000A;    	function startEngine() {&#x000A;    		$this-&gt;engageIgnition();&#x000A;    		parent::startEngine();&#x000A;    	}&#x000A;    &#x000A;    	private function engageIgnition() {&#x000A;    		// Ignition procedure&#x000A;    	}&#x000A;    &#x000A;    }&#x000A;    &#x000A;    class ElectricBus extends Vehicle {&#x000A;    &#x000A;    	function accelerate() {&#x000A;    		$this-&gt;increaseVoltage();&#x000A;    		$this-&gt;connectIndividualEngines();&#x000A;    	}&#x000A;    &#x000A;    	private function increaseVoltage() {&#x000A;    		// Electric logic&#x000A;    	}&#x000A;    &#x000A;    	private function connectIndividualEngines() {&#x000A;    		// Connection logic&#x000A;    	}&#x000A;    &#x000A;    } </pre>
    <p>A client class should be able to use either of them, if it can use <code>Vehicle</code>.</p>
    <pre>class Driver {&#x000A;    	function go(Vehicle $v) {&#x000A;    		$v-&gt;startEngine();&#x000A;    		$v-&gt;accelerate();&#x000A;    	}&#x000A;    } </pre>
    <p>Which leads us to a simple implementation of the Template Method Design Pattern as we used it in the OCP tutorial.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/template_method1.png" alt="template_method" width="600" height="294" style="max-width: 100%; height: auto;"><br> <p>Based on our previous experience with the Open/Closed Principle, we can conclude that Liskov’s Substitution Principle is in strong relation with OCP. In fact, “a violation of LSP is a latent violation of OCP” (Robert C. Martin), and the Template Method Design Pattern is a classic example of respecting and implementing LSP, which in turn is one of the solutions to respect OCP also.</p>
    <hr>
    <h2>The Classic Example of LSP Violation</h2>
    <p>To illustrate this completely, we will go with a classic example because it is highly significant and easily understandable.</p>
    <pre>class Rectangle {&#x000A;    &#x000A;    	private $topLeft;&#x000A;    	private $width;&#x000A;    	private $height;&#x000A;    &#x000A;    	public function setHeight($height) {&#x000A;    		$this-&gt;height = $height;&#x000A;    	}&#x000A;    &#x000A;    	public function getHeight() {&#x000A;    		return $this-&gt;height;&#x000A;    	}&#x000A;    &#x000A;    	public function setWidth($width) {&#x000A;    		$this-&gt;width = $width;&#x000A;    	}&#x000A;    &#x000A;    	public function getWidth() {&#x000A;    		return $this-&gt;width;&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>We start with a basic geometrical shape, a <code>Rectangle</code>. It is just a simple data object with setters and getters for <code>width</code> and <code>height</code>. Imagine that our application is working and it is already deployed to several clients. Now they need a new feature. They need to be able to manipulate squares.</p>
    <p>In real life, in geometry, a square is a particular form of rectangle. So we could try to implement a <code>Square</code> class that extends a <code>Rectangle</code> class. It is frequently said that a child class <em>is a</em> parent class, and this expression also conforms to LSP, at least at first sight.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/SquareRect.png" alt="SquareRect" width="178" height="259" style="max-width: 100%; height: auto;"><br> <p>But is a <code>Square</code> really a <code>Rectangle</code> in programming?</p>
    <pre>class Square extends Rectangle {&#x000A;    &#x000A;    	public function setHeight($value) {&#x000A;    		$this-&gt;width = $value;&#x000A;    		$this-&gt;height = $value;&#x000A;    	}&#x000A;    &#x000A;    	public function setWidth($value) {&#x000A;    		$this-&gt;width = $value;&#x000A;    		$this-&gt;height = $value;&#x000A;    	}&#x000A;    } </pre>
    <p>A square is a rectangle with equal width and height, and we could do a strange implementation like in the above example. We could overwrite both setters to set the height as well as the width. But how would that affect client code?</p>
    <pre>class Client {&#x000A;    &#x000A;    	function areaVerifier(Rectangle $r) {&#x000A;    		$r-&gt;setWidth(5);&#x000A;    		$r-&gt;setHeight(4);&#x000A;    &#x000A;    		if($r-&gt;area() != 20) {&#x000A;    			throw new Exception('Bad area!');&#x000A;    		}&#x000A;    &#x000A;    		return true;&#x000A;    	}&#x000A;    &#x000A;    } </pre>
    <p>It is conceivable to have a client class that verifies the rectangle’s area and throws an exception if it is wrong.</p>
    <pre>function area() {&#x000A;    	return $this-&gt;width * $this-&gt;height;&#x000A;    }</pre>
    <p>Of course we added the above method to our <code>Rectangle</code> class to provide the area.</p>
    <pre>class LspTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testRectangleArea() {&#x000A;    		$r = new Rectangle();&#x000A;    		$c = new Client();&#x000A;    		$this-&gt;assertTrue($c-&gt;areaVerifier($r));&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    <p>And we created a simple test by sending an empty rectangle object to area verifier and the test passes. If our <code>Square</code> class is correctly defined, sending it to the Client’s <code>areaVerifier()</code> should not break its functionality. After all, a <code>Square</code> is a <code>Rectangle</code> in all mathematical sense. But is our class?</p>
    <pre>function testSquareArea() {&#x000A;    	$r = new Square();&#x000A;    	$c = new Client();&#x000A;    	$this-&gt;assertTrue($c-&gt;areaVerifier($r));&#x000A;    }</pre>
    <p>Testing it is very easy and it breaks big time. An exception is thrown to us when we run the test above.</p>
    <pre>PHPUnit 3.7.28 by Sebastian Bergmann.&#x000A;    &#x000A;    Exception : Bad area!&#x000A;    #0 /paht/: /.../.../LspTest.php(18): Client-&gt;areaVerifier(Object(Square))&#x000A;    #1 [internal function]: LspTest-&gt;testSquareArea()</pre>
    <p>So, our <code>Square</code> class is not a <code>Rectangle</code> after all. It breaks the laws of geometry. It fails and it violates the Liskov Substitution Principle.</p>
    <p>I especially love this example because it not only violates LSP, it also demonstrates that object oriented programming is not about mapping real life to objects. Each object in our program must be an abstraction over a concept. If we try to map one-to-one real objects to programmed objects, we will almost always fail.</p>
    <hr>
    <h2>The Interface Segregation Principle</h2>
    <p>The Single Responsibility Principle is about actors and high level architecture. The Open/Closed Principle is about class design and feature extensions. The Liskov Substitution Principle is about subtyping and inheritance. The Interface Segregation Principle (ISP) is about business logic to clients communication.</p>
    <p>In all modular applications there must be some kind of interface that the client can rely on. These may be actual Interface typed entities or other classic objects implementing design patterns like Facades. It doesn’t matter which solution is used. It always has the same scope: to communicate to the client code on how to use the module. These interfaces can reside between different modules in the same application or project, or between one project as a third party library serving another project. Again, it doesn’t matter. Communication is communication and clients are clients, regardless of the actual individuals writing the code.</p>
    <p>So, how should we define these interfaces? We could think about our module and expose all the functionalities we want it to offer.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/hugeInterface.png" alt="hugeInterface" width="277" height="580" style="max-width: 100%; height: auto;"><br> <p>This looks like a good start, a great way to define what we want to implement in our module. Or is it? A start like this will lead to one of two possible implementations:</p>
    <ul>
    <li>A huge <code>Car</code> or <code>Bus</code> class implementing all the methods on the <code>Vehicle</code> interface. Only the sheer dimensions of such classes should tell us to avoid them at all costs.</li>
    <li>Or, many small classes like <code>LightsControl</code>, <code>SpeedControl</code>, or <code>RadioCD</code> which are all implementing the whole interface but actually providing something useful only for the parts they implement.</li>
    </ul>
    <p>It is obvious that neither solution is acceptable to implement our business logic.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/specializedImplementationInterface.png" alt="specializedImplementationInterface" width="600" height="413" style="max-width: 100%; height: auto;"><br> <p>We could take another approach. Break the interface into pieces, specialized to each implementation. This would help to use small classes that care about their own interface. The objects implementing the interfaces will be used by the different type of vehicles, like car in the image above. The car will use the implementations but will depend on the interfaces. So a schema like the one below may be even more expressive.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/carUsingInterface.png" alt="carUsingInterface" width="600" height="423" style="max-width: 100%; height: auto;"><br> <p>But this fundamentally changes our perception of the architecture. The <code>Car</code> becomes the client instead of the implementation. We still want to provide to our clients ways to use our whole module, that being a type of vehicle.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/oneInterfaceManyClients.png" alt="oneInterfaceManyClients" width="600" height="339" style="max-width: 100%; height: auto;"><br> <p>Assume we solved the implementation problem and we have a stable business logic. The easiest thing to do is to provide a single interface with all the implementations and let the clients, in our case <code>BusStation</code>, <code>HighWay</code>, <code>Driver</code> and so on, to use whatever thew want from the interface’s implementation. Basically, this shifts the behavior selection responsibility to the clients. You can find this kind of solution in many older applications.</p>
    <blockquote><p>The interface-segregation principle (ISP) states that no client should be forced to depend on methods it does not use.</p></blockquote>
    <p>However, this solution has its problems. Now all the clients depend on all the methods. Why should a <code>BusStation</code> depend on the state of lights of the bus, or on the radio channels selected by the driver? It should not. But what if it does? Does it matter? Well, if we think about the Single Responsibility Principle, it is a sister concept to this one. If <code>BusStation</code> depends on many individual implementations, not even used by it, it may require changes if any of the individual small implementations change. This is especially true for compiled languages, but we can still see the effect of the <code>LightControl</code> change impacting <code>BusStation</code>. These things should never happen.</p>
    <p>Interfaces belong to their clients and not to the implementations. Thus, we should always design them in a way to best suite our clients. Some times we can, some times we can not exactly know our clients. But when we can, we should break our interfaces in many smaller ones, so they better satisfy the exact needs of our clients.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2014/01/segregatedInterfaces.png" alt="segregatedInterfaces" width="600" height="406" style="max-width: 100%; height: auto;"><br> <p>Of course, this will lead to some degree of duplication. But remember! Interfaces are just plain function name definitions. There is no implementation of any kind of logic in them. So the duplications is small and manageable.</p>
    <p>Then, we have the great advantage of clients depending only and only on what they actually need and use. In some cases, clients may use and need several interfaces, that is OK, as long as they use all the methods from all the interfaces they depend on.</p>
    <p>Another nice trick is that in our business logic, a single class can implement several interfaces if needed. So we can provide a single implementation for all the common methods between the interfaces. The segregated interfaces will also force us to think of our code more from the client’s point of view, which will in turn lead to loose coupling and easy testing. So, not only have we made our code better to our clients, we also made it easier for ourselves to understand, test and implement.</p>
    <hr>
    <h2>Final Thoughts</h2>
    <p>LSP taught us why reality can not be represented as a one-to-one relation with programmed objects and how subtypes should respect their parents. We also put it in light of the other principles that we already knew.</p>
    <p>ISP teaches us to respect our clients more than we thought necessary. Respecting their needs will make our code better and our lives as programmers easier.</p>
    <p>Thank you for your time.</p>
    </div>
]]>
</Body>
<Summary>The Single Responsibility (SRP), Open/Closed (OCP), Liskov Substitution, Interface Segregation, and Dependency Inversion. Five agile principles that should guide you every time you write code....</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/EG-a84vyjV8/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40580/guest@my.umbc.edu/208d129ae38e1f11e39180ca71e42cdf/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>interface-segregation-principles</Tag>
<Tag>javascript</Tag>
<Tag>liskov-substitution</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>solid-principles</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, 24 Jan 2014 14:37:33 -0500</PostedAt>
<EditAt>Fri, 24 Jan 2014 14:37:33 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="40578" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40578">
<Title>UMBC spring semester group fitness schedule is now available</Title>
<Tagline>UMBC spring semester group fitness schedule is now available</Tagline>
<Body>
<![CDATA[
    <div class="html-content">The UMBC Recreation Department is pleased to announce that the 2014 spring semester group fitness schedule is now available. We are very excited about some new classes and new class times that are being offered to UMBC students, faculty/staff and RAC members!<br><br>You can find the 2014 spring semester group fitness schedule under the Documents tab or on the bottom right side of the Fitness and Wellness group page!<br>
    </div>
]]>
</Body>
<Summary>The UMBC Recreation Department is pleased to announce that the 2014 spring semester group fitness schedule is now available. We are very excited about some new classes and new class times that are...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40578/guest@my.umbc.edu/8471292298e03346f45263863b0e9afb/api/pixel</TrackingUrl>
<Group token="fitness-at-therac">Fitness and Wellness</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/fitness-at-therac</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/xsmall.png?1661190221</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/original.png?1661190221</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/xxlarge.png?1661190221</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/xlarge.png?1661190221</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/large.png?1661190221</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/medium.png?1661190221</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/small.png?1661190221</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/xsmall.png?1661190221</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/161/ddb53d2daaf1e43c35a2cf744997d6b0/xxsmall.png?1661190221</AvatarUrl>
<Sponsor>UMBC Group Fitness and Wellness</Sponsor>
<PawCount>32</PawCount>
<CommentCount>12</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 24 Jan 2014 14:05:30 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="40577" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40577">
<Title>Seven Must-Read Stories (Week Ending January 24, 2014)</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Another chance to catch the most interesting, and important, articles from the previous week on <em>MIT Technology Review</em>.</p></div>
]]>
</Body>
<Summary>Another chance to catch the most interesting, and important, articles from the previous week on MIT Technology Review.</Summary>
<Website>http://www.technologyreview.com/view/523631/seven-must-read-stories-week-ending-january-24-2014/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40577/guest@my.umbc.edu/0dbcfcf7a7abded094e7cb2c84ea1342/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, 24 Jan 2014 13:25:00 -0500</PostedAt>
</NewsItem>

</News>
