<?xml version="1.0"?>
<News hasArchived="true" page="8913" pageCount="10712" pageSize="10" timestamp="Wed, 01 Jul 2026 13:01:51 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8913">
<NewsItem contentIssues="true" id="26820" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26820">
<Title>Yahoo Acquires Teen Entrepreneur&#8217;s News Gathering App, Summly</Title>
<Body>
<![CDATA[
    <div class="html-content">Summly to shut down but founder and his team expected to join Yahoo.</div>
]]>
</Body>
<Summary>Summly to shut down but founder and his team expected to join Yahoo.</Summary>
<Website>http://feedproxy.google.com/~r/YoungentrepreneurcomBlog/~3/wwM074lYXh0/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26820/guest@my.umbc.edu/6dada4e7bb7b0f59d62bc2cbc98dfe88/api/pixel</TrackingUrl>
<Tag>apps</Tag>
<Tag>selling-a-business</Tag>
<Tag>starting-up</Tag>
<Tag>tech</Tag>
<Tag>technology-news</Tag>
<Tag>teen-entrepreneurs</Tag>
<Tag>yahoo</Tag>
<Group token="entrepreneurship">Alex. Brown Center for Entrepreneurship</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/entrepreneurship</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/original.jpg?1771000363</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/large.png?1771000363</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/medium.png?1771000363</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/small.png?1771000363</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxsmall.png?1771000363</AvatarUrl>
<Sponsor>The Alex. Brown Center for Entrepreneurship</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 17:00:06 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26821" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26821">
<Title>How do I change my keyboard to another language?</Title>
<Body>
<![CDATA[
    <div class="html-content"><div>    <p>
            Page
                <strong>edited</strong> by
                        <a href="https://wiki.umbc.edu/display/~jcoste1" rel="nofollow external" class="bo">Joan Costello</a>
                </p>
            <div>
            <h2>Tell Me</h2>
    <p><strong>For PCs, Windows 7</strong></p>
    <ol>
    <li>Go to Start, click on control panel</li>
    <li>region and language</li>
    <li>click on keyboards and languages tab at top</li>
    <li>change keyboards</li>
    <li>click on add on right</li>
    <li>click on + by desired language, then + for keyboard</li>
    <li>check the box for specific keyboard, ok at the top right of that area</li>
    <li>then click apply, ok then ok</li>
    <li>at the bottom toolbar on the right, click on EN to see other languages and choose</li>
    <li>click on keyboard icon to the right of language choice and choose specific keyboard</li>
    </ol>
    <p><strong>MAC, OS X</strong></p>
    <ol>
    <li>At Apple icon, choose system preferences</li>
    <li>Under Personal, choose International or  Language &amp; Text (depending on version)</li>
    <li>Click on Input Source tab (top right), check all keyboards you want activated, close box</li>
    <li>Click on the flag at the top right to choose language</li>
    <li>If you want additional languages, click on the flag, open Language &amp; Text Preferences and check the other languages to activate<br>Can check Keyboard &amp; Character Viewer  in the  input source area (top left) to gain access to on-screen keyboard.</li>
    </ol>
    <h2>Rate this Article</h2>
    <p>
    
    
    
    
    <strong>Was this helpful?</strong>
    <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422575&amp;q=0&amp;v=1&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Yes</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422575" rel="nofollow external" class="bo">No</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422575" rel="nofollow external" class="bo">Correct or Suggest an Article</a>
     | <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422575&amp;q=0&amp;v=0&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Request Help</a></p>
    <p><a href="http://my.umbc.edu/help/request" rel="nofollow external" class="bo"><img src="https://wiki.umbc.edu/download/attachments/29853066/RequestHelpicon.png?version=1&amp;modificationDate=1335472984000&amp;api=v2" style="max-width: 100%; height: auto;"></a></p>
        </div>
            <div>
           <a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=35422575" rel="nofollow external" class="bo">View Online</a>
                  ·
           <a href="https://wiki.umbc.edu/pages/diffpagesbyversion.action?pageId=35422575&amp;revisedVersion=4&amp;originalVersion=3" rel="nofollow external" class="bo">View Changes Online</a>       
                      </div>
    </div></div>
]]>
</Body>
<Summary>Page             edited by                     Joan Costello                                  Tell Me  For PCs, Windows 7   Go to Start, click on control panel  region and language  click on...</Summary>
<Website>https://wiki.umbc.edu/pages/viewpage.action?pageId=35422575</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26821/guest@my.umbc.edu/f077f3bcbf2d2993b75eceb27eb8f2e6/api/pixel</TrackingUrl>
<Tag>faq</Tag>
<Tag>imc</Tag>
<Group token="retired-428">UMBC FAQ</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-428</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/images/avatars/group/1/original.png?1782921639</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/images/avatars/group/1/xxlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/1/xlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/images/avatars/group/1/large.png?1782921639</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/images/avatars/group/1/medium.png?1782921639</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/images/avatars/group/1/small.png?1782921639</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/images/avatars/group/1/xxsmall.png?1782921639</AvatarUrl>
<Sponsor>UMBC FAQ</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 16:56:11 -0400</PostedAt>
<EditAt>Fri, 29 Mar 2013 15:43:39 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="110231" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110231">
<Title>Manil Suri, Mathematics, on the Marc Steiner Show</Title>
<Body>
<![CDATA[
    <div class="html-content">Manil Suri, professor of mathematics, was a guest on the Marc Steiner show on March 14 to discuss his new book “The City of Devi.” Steiner asked Suri how he reconciles his background in mathematics with the spiritual themes that run through his books, which feature Hindu deities. “There’s a lot of contrast. On the one hand, I’m very enamored by these ideas from spirituality and almost mysticism,” “But on the other hand, the logical part of me says, ‘hey, wait a minute, that’s not really what’s happening.’” The full segment can be heard here.</div>
]]>
</Body>
<Summary>Manil Suri, professor of mathematics, was a guest on the Marc Steiner show on March 14 to discuss his new book “The City of Devi.” Steiner asked Suri how he reconciles his background in...</Summary>
<Website>https://news.umbc.edu/manil-suri-mathematics-on-the-marc-steiner-show/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110231/guest@my.umbc.edu/ebe2d6b8f691db5c43937f88faf7de5a/api/pixel</TrackingUrl>
<Tag>cnms</Tag>
<Tag>mathstat</Tag>
<Tag>policy-and-society</Tag>
<Group token="umbc-news">UMBC News</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/original.png?1632921809</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/large.png?1632921809</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/medium.png?1632921809</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/small.png?1632921809</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxsmall.png?1632921809</AvatarUrl>
<Sponsor>UMBC News</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 16:51:59 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26822" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26822">
<Title>How do I access an on-screen keyboard display?</Title>
<Body>
<![CDATA[
    <div class="html-content"><div>    <p>
            Page
                <strong>edited</strong> by
                        <a href="https://wiki.umbc.edu/display/~jcoste1" rel="nofollow external" class="bo">Joan Costello</a>
                </p>
            <div>
            <h2>Tell Me</h2>
    <p>Other languages  must already be activated - see <span><a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=35422575" rel="nofollow external" class="bo">How do I change my keyboard to another language?</a></span></p>
    <p><strong>PC, Windows 7</strong></p>
    <ol>
    <li>open program you will use like Word</li>
    <li>go to Start, all programs</li>
    <li>Accessories</li>
    <li>Ease of access</li>
    <li>On-screen keyboard</li>
    <li>go to EN on bottom toolbar and choose language (must already have language enabled, see How do I change my keyboard to another language)</li>
    <li>can click on letters on display or use keyboard</li>
    </ol>
    <p><strong>MAC,  OSX 10.7</strong></p>
    <ol>
    <li>open program you will be using</li>
    <li>switch keyboard by clicking on the America flag at the top right - down arrow to language needed</li>
    <li>return to  flag/keyboard menu and select Show Keyboard Viewer - a virtual keyboard will open.<br>If not available, click on open Language and Text Preferences then click Input Source Tab, put check in Keyboard &amp; Character Viewer.<br>Press the Shift, Option or Shift + Option for hot keys( e.g. accents) - may appear yellow in newer versions</li>
    </ol>
    <h2>Rate this Article</h2>
    <p>
    
    
    
    
    <strong>Was this helpful?</strong>
    <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422578&amp;q=0&amp;v=1&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Yes</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422578" rel="nofollow external" class="bo">No</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422578" rel="nofollow external" class="bo">Correct or Suggest an Article</a>
     | <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422578&amp;q=0&amp;v=0&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Request Help</a></p>
    <p><a href="http://my.umbc.edu/help/request" rel="nofollow external" class="bo"><img src="https://wiki.umbc.edu/download/attachments/29853066/RequestHelpicon.png?version=1&amp;modificationDate=1335472984000&amp;api=v2" style="max-width: 100%; height: auto;"></a></p>
        </div>
            <div>
           <a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=35422578" rel="nofollow external" class="bo">View Online</a>
                  ·
           <a href="https://wiki.umbc.edu/pages/diffpagesbyversion.action?pageId=35422578&amp;revisedVersion=4&amp;originalVersion=3" rel="nofollow external" class="bo">View Changes Online</a>       
                      </div>
    </div></div>
]]>
</Body>
<Summary>Page             edited by                     Joan Costello                                  Tell Me  Other languages  must already be activated - see How do I change my keyboard to another...</Summary>
<Website>https://wiki.umbc.edu/pages/viewpage.action?pageId=35422578</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26822/guest@my.umbc.edu/4075668485e61405c031f88a80726842/api/pixel</TrackingUrl>
<Tag>faq</Tag>
<Tag>imc</Tag>
<Group token="retired-428">UMBC FAQ</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-428</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/images/avatars/group/1/original.png?1782921639</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/images/avatars/group/1/xxlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/1/xlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/images/avatars/group/1/large.png?1782921639</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/images/avatars/group/1/medium.png?1782921639</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/images/avatars/group/1/small.png?1782921639</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/images/avatars/group/1/xxsmall.png?1782921639</AvatarUrl>
<Sponsor>UMBC FAQ</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 16:51:33 -0400</PostedAt>
<EditAt>Fri, 29 Mar 2013 15:50:44 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="26816" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26816">
<Title>Volunteer for URCAD 2013</Title>
<Tagline>Be a part of an amazing day!</Tagline>
<Body>
<![CDATA[
    <div class="html-content"><div>
    <div>
    <p>UMBC Students, Staff, Faculty, Individuals and Organizations all volunteer to help on the day of URCAD and in the days before and after. </p>
    <p>Sign up to be a part of UMBC's premiere campus-wide undergraduate research event.</p>
    <ul>
    <li>Read the <a href="http://www.umbc.edu/undergrad_ed/research/urcad/rolesvolunteer.html" rel="nofollow external" class="bo">URCAD Roles</a>
    </li>
    <li>
    <a href="https://docs.google.com/a/umbc.edu/forms/d/10ZDSj4K582kmATH2m3ggRTdFyhVLwLTkuPDJ0R9zN_Y/viewform" rel="nofollow external" class="bo">Sign up</a> to help</li>
    </ul>
    <p>Note: Volunteer dress for URCAD is neat but business attire is <strong>NOT</strong> expected. <br>    Comfortable shoes are a <strong>must</strong>.</p>
    <p>If you would like to help and have questions about the process, e-mail <a href="mailto:kerryk@umbc.edu" rel="nofollow external" class="bo">kerryk@umbc.edu</a>.</p>
    </div>
    </div></div>
]]>
</Body>
<Summary>UMBC Students, Staff, Faculty, Individuals and Organizations all volunteer to help on the day of URCAD and in the days before and after.   Sign up to be a part of UMBC's premiere campus-wide...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26816/guest@my.umbc.edu/ba3d220c5bb4e25709170ac14664c1cb/api/pixel</TrackingUrl>
<Group token="undergradresearch">Undergraduate Research</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/undergradresearch</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xsmall.png?1600355057</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/original.jpg?1600355057</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xxlarge.png?1600355057</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xlarge.png?1600355057</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/large.png?1600355057</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/medium.png?1600355057</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/small.png?1600355057</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xsmall.png?1600355057</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xxsmall.png?1600355057</AvatarUrl>
<Sponsor>Undergraduate Research</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/xxlarge.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/xlarge.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/large.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/medium.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/small.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/xsmall.jpg?1364415243</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/816/8f2a580cb0f40eab3546cdf886ee0797/xxsmall.jpg?1364415243</ThumbnailUrl>
<PawCount>22</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 16:15:18 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="26815" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26815">
<Title>Slide In (as you scroll down) Boxes</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>I was playing with my new Nexus 7 (I really wanted to own a real Android device) and I noticed a neat little effect in the Google+ app that comes with it. As you swipe down, new modules of content slide up into place. Video is best here:</p>
    <p></p>
    <p></p>
    <div class="embed-container"><iframe src="http://www.youtube.com/embed/bToBgJYI8Pc?rel=0" frameborder="0" webkitallowfullscreen="webkitAllowFullScreen" mozallowfullscreen="mozallowfullscreen" allowfullscreen="allowFullScreen">[Video]</iframe></div>
    <p>We can do that! It's a pretty easy two-step process:</p>
    <h3>When the window scrolls, check if module is visible</h3>
    <p>jQuery has a :visible selector, but that isn't what we need here. We need to see if any part of the element is within the visual viewport. That is, an element may be technically visible, but located off-screen. We can figure out if an element is within the visual viewport through math. How wide and tall is the window, how far down is it scrolled, how wide and tall is the element, where is it positioned, etc. Fortunately that math is summed up super nicely by the <a href="http://www.teamdf.com/web/jquery-element-onscreen-visibility/194/" rel="nofollow external" class="bo">visible plugin</a> by Digital Fusion. </p>
    <pre><code>(function($) {&#x000A;    &#x000A;      /**&#x000A;       * Copyright 2012, Digital Fusion&#x000A;       * Licensed under the MIT license.&#x000A;       * <a href="http://teamdf.com/jquery-plugins/license/">http://teamdf.com/jquery-plugins/license/</a>&#x000A;       *&#x000A;       * @author Sam Sehnert&#x000A;       * @desc A small plugin that checks whether elements are within&#x000A;       *     the user visible viewport of a web browser.&#x000A;       *     only accounts for vertical position, not horizontal.&#x000A;       */&#x000A;    &#x000A;      $.fn.visible = function(partial) {&#x000A;        &#x000A;          var $t            = $(this),&#x000A;              $w            = $(window),&#x000A;              viewTop       = $w.scrollTop(),&#x000A;              viewBottom    = viewTop + $w.height(),&#x000A;              _top          = $t.offset().top,&#x000A;              _bottom       = _top + $t.height(),&#x000A;              compareTop    = partial === true ? _bottom : _top,&#x000A;              compareBottom = partial === true ? _top : _bottom;&#x000A;        &#x000A;        return ((compareBottom &lt;= viewBottom) &amp;&amp; (compareTop &gt;= viewTop));&#x000A;    &#x000A;      };&#x000A;        &#x000A;    })(jQuery);</code></pre>
    <p>All that's left for us is using it when the window "scrolls" to add a class name.</p>
    <pre><code>$(window).scroll(function(event) {&#x000A;      &#x000A;      $(".module").each(function(i, el) {&#x000A;        var el = $(el);&#x000A;        if (el.visible(true)) {&#x000A;          el.addClass("come-in"); &#x000A;        } &#x000A;      });&#x000A;      &#x000A;    });</code></pre>
    <p>CSS will handle the slide-in:</p>
    <pre><code>.come-in {&#x000A;      transform: translateY(150px);&#x000A;      animation: come-in 0.8s ease forwards;&#x000A;    }&#x000A;    .come-in:nth-child(odd) {&#x000A;      animation-duration: 0.6s; /* So they look staggered */&#x000A;    }&#x000A;    &#x000A;    @keyframes come-in {&#x000A;      to { transform: translateY(0); }&#x000A;    }</code></pre>
    <h3>If elements are already visible, let them be</h3>
    <p>So we don't trigger the animation on the already visible modules on the very first swipe, we'll add a class name to remove that animation. And we can get a bit more efficient here too, "caching" selectors so we don't have to find them on each scroll event (which fires tons of times).</p>
    <pre><code>var win = $(window);&#x000A;    var allMods = $(".module");&#x000A;    &#x000A;    // Already visible modules&#x000A;    allMods.each(function(i, el) {&#x000A;      var el = $(el);&#x000A;      if (el.visible(true)) {&#x000A;        el.addClass("already-visible"); &#x000A;      } &#x000A;    });&#x000A;    &#x000A;    win.scroll(function(event) {&#x000A;      &#x000A;      allMods.each(function(i, el) {&#x000A;        var el = $(el);&#x000A;        if (el.visible(true)) {&#x000A;          el.addClass("come-in"); &#x000A;        } &#x000A;      });&#x000A;      &#x000A;    });</code></pre>
    <p>That'll do:</p>
    <pre><a href="http://codepen.io/chriscoyier/pen/DjmJe" rel="nofollow external" class="bo">Check out this Pen!</a></pre>
    <p>And note, the CSS transition could be anything. They could slide in from the sides, they could use scaling and opacity and look like they were flying in. There could be color involved. Whatevs.</p>
    <p><small>Need a template for your WordPress website? The fine folks at <a href="http://thethemefoundry.com" rel="nofollow external" class="bo">The Theme Foundry</a> have been building WordPress themes from scratch since 2008. You won't find a huge assortment on their site either — they keep a small curated collection and focus on quality over quantity.</small></p>
    
    <p><small><a href="http://css-tricks.com/slide-in-as-you-scroll-down-boxes/" rel="nofollow external" class="bo">Slide In (as you scroll down) Boxes</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>I was playing with my new Nexus 7 (I really wanted to own a real Android device) and I noticed a neat little effect in the Google+ app that comes with it. As you swipe down, new modules of content...</Summary>
<Website>http://css-tricks.com/slide-in-as-you-scroll-down-boxes/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26815/guest@my.umbc.edu/fbb5c6067bd7063290e2c04b8d68450c/api/pixel</TrackingUrl>
<Tag>article</Tag>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</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>Wed, 27 Mar 2013 15:34:25 -0400</PostedAt>
<EditAt>Wed, 27 Mar 2013 15:34:25 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="26597" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26597">
<Title>Course Development Grants Available for Summer 2013</Title>
<Tagline>GWST seeks courses for Critical Sexuality Studies Curriculum</Tagline>
<Body>
<![CDATA[
    <div class="html-content">Are you interested in creating a course in the field of sexuality studies? Gender and Women's Studies wants to invite you to apply for funding for curriculum development, to be included in the courses available to our new Critical Sexuality Studies minors! <div><br></div>
    <div>Please see the attached announcement and application for more information.</div>
    </div>
]]>
</Body>
<Summary>Are you interested in creating a course in the field of sexuality studies? Gender and Women's Studies wants to invite you to apply for funding for curriculum development, to be included in the...</Summary>
<Website>http://gwst.umbc.edu/faculty-resources/</Website>
<AttachmentKind>Document</AttachmentKind>
<AttachmentUrl>https://assets2-my.umbc.edu/system/shared/attachments/32c1b5632efecf18fead78eb942b6f56/6a4547ff/news/000/026/597/1b356667c9a682f8b0215d9d16d286fe/CSST course development announcement and application.pdf?1364412489</AttachmentUrl>
<Attachments>
<Attachment kind="Document" url="https://my3.my.umbc.edu/posts/26597/attachments/9450"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26597/guest@my.umbc.edu/db917b87d2c30d1a347a5686f8ad4379/api/pixel</TrackingUrl>
<Group token="gwst">Department of Gender, Women's, + Sexuality Studies</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/gwst</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/xsmall.png?1551107229</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/original.png?1551107229</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/xxlarge.png?1551107229</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/xlarge.png?1551107229</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/large.png?1551107229</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/medium.png?1551107229</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/small.png?1551107229</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/xsmall.png?1551107229</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/442/0951c34dc17cf35be31bb59fa96435df/xxsmall.png?1551107229</AvatarUrl>
<Sponsor>Gender + Women's Studies</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/xxlarge.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/xlarge.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/large.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/medium.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/small.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/xsmall.jpg?1364412538</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/026/597/c5677f71b1968b865a1570e182b7a18e/xxsmall.jpg?1364412538</ThumbnailUrl>
<PawCount>2</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 15:29:49 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26811" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26811">
<Title>What&#8217;s Trending With&#8230;Baratunde Thurston? The Comedian/Digital Savant Talks Business</Title>
<Body>
<![CDATA[
    <div class="html-content">YoungEntrepreneur.com columnist and 'What's Trending' host Shira Lazar sat down with author Baratunde Thurston to chat about his comedy/technology startup Cultivated Wit.</div>
]]>
</Body>
<Summary>YoungEntrepreneur.com columnist and 'What's Trending' host Shira Lazar sat down with author Baratunde Thurston to chat about his comedy/technology startup Cultivated Wit.</Summary>
<Website>http://feedproxy.google.com/~r/YoungentrepreneurcomBlog/~3/L7p1KTmlYtE/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26811/guest@my.umbc.edu/1521b92b73a03b62a8285b431d37d4de/api/pixel</TrackingUrl>
<Tag>leadership</Tag>
<Tag>startup-business-ideas</Tag>
<Tag>sxsw-2013</Tag>
<Tag>tech-leaders</Tag>
<Tag>technology-news</Tag>
<Tag>video</Tag>
<Group token="entrepreneurship">Alex. Brown Center for Entrepreneurship</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/entrepreneurship</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/original.jpg?1771000363</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/large.png?1771000363</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/medium.png?1771000363</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/small.png?1771000363</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxsmall.png?1771000363</AvatarUrl>
<Sponsor>The Alex. Brown Center for Entrepreneurship</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 15:00:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26814" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26814">
<Title>Round Table #1: Should Exceptions Ever be Used for Flow Control?</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30947&amp;c=1045412941" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30947&amp;c=1045412941" alt="" style="max-width: 100%; height: auto;"></a><p> I’m pleased to release our first ever round table, where we place a group of developers in a locked room (not really), and ask them to debate one another on a single topic. In this first entry, we discuss exceptions and flow control.</p>
    <p></p>
    <strong>Round Table?</strong> Have you ever gone out to dinner with some developer friends, and found yourself engaging in long programming-specific discussions/debates? Well, now, we’re bringing that format to Nettuts+. A group of friends casually debating one another on a given topic.<br><hr>
    <h2>Should Exceptions Ever be Used for Flow Control?</h2>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> From my point of view, exceptions are situations in your code that you should never reach. By their name, they suggest exceptional, unexpected and uncontrollable situations. Throwing an exception should stop the execution of your code all together.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> There are three broad categories of “abnormal” condition in software, as defined by Bertrand Meyer: Failure, Exception and Error.<p>Failure is the inability of a software element to perform its function. Exception is an abnormal condition in software. Errors are due to unmet expectation/specification.</p>
    <p>Errors cause Failures and are propagated, via Exceptions.</p>
    </div>
    </div>
    <hr>
    <div> <img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cuttrell" style="max-width: 100%; height: auto;"><div> I like the idea of explaining what we consider to be exceptions. My idea of an exception is a named error class that can be handled in a try-catch statement.<p>So:</p>
    <pre>try {&#x000A;      something();&#x000A;    } catch(SomeErrorType e){&#x000A;      return respondTo(e);&#x000A;    }&#x000A;    </pre>
    <p>Catching exceptions, as Csaba mentioned, is engineered to be fringe, unexpected cases. These are often a result of malformed input or failed data transfer.</p>
    <p>Control flow structures in most languages are optimized to handle known cases, whether that’s via an if/else stack or a switch/case. Error throwing, in general, wouldn’t be as optimized as control flow in most programming languages.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> So, essentially, exceptions are an “abstraction” purely to model the abnormality. There is a natural flow defined by most language runtimes, starting with the close to metal “C” language, or something as dynamic as “JavaScript” or “Ruby,” which is to exit the runtime altogether, unless handled, via an “exception handler.”</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Nice scientific definition Pavan. Jonathan, I agree. The part of the code / program / module that throws the exception should stop its execution.<p>The client of that code can use a try-catch to prevent the automatic propagation of the exception (as most languages will propagate it). However, I believe that try-catch should be used only for logic that is required to handle these unexpected situations. For example, a broken data transfer can be retried when the exception occurs. Or, some exceptions do not affect the outcome (such as when you want to create a directory that already exists). In this case, it can simply be suppressed.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> So what’s the use case we are talking about where it is used for control flow?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> Can someone who <em>is</em> for exceptions as control flow provide us with an example of code that conceptually is an acceptable scenario for your opinion?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> <a href="http://docs.cartalyst.com/sentry-2/authentication" rel="nofollow external" class="bo">Here’s an example</a> that kind of spawned a flame war on Reddit, which lead to this discussion.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I think that the use there seems perfectly valid. Is the argument against it that it’s not as “optimized.” Because it is much more verbose when it comes to reading your code, and you don’t have to deal with numbers or constants in a switch statement.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> There is an underlying assumption in the code there: the calls to the service are synchronous. In the real world, I doubt if it is that straightforward.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> Personally, I envision exceptions more as “objections.” While they are typically used to represent errors, I think that they can be utilized to raise a flag against any kind of undesired result in your application and be handled specifically by type (if desired). As a simple example, attempting to log a user into an application could be handled on a more granular level than “<em>was this attempt successful?</em>” If not, why not? Perhaps the username didn’t exist, or the password was incorrect. Maybe their account is banned. Throwing and catching exceptions in these scenarios can give a developer a lot more control over how they handle the result.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Also worth noting is that exceptions are caught naturally in synchronous code and require “special propagation” in async code.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> That is my opinion as-well. Exceptions do not have to be relative to the app, like it seems people were suggesting earlier. The app shouldn’t end. It’s an error related to the specific class.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Hmm. That code is actually quite okay. Other than not being optimal and being quite lengthy, I see no problem with it. Probably, I would have created only a single exception and would have echoed the message from the exception ,rather than all those catches and hard-coded strings.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> That’s assuming that you just want to echo the error. But to handle each event separately, exceptions are a much cleaner route.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Going back to the original topic for this discussion, should exceptions be used for handling “control flow”?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> And one more thing here: exceptions like this should be caught at some point and transformed into a friendly message to the user. You don’t want you users to see …. PHP stack traces :)</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> Csaba, agreed. Although, in a webapp, I would want to have a global exception handler to show some styled “error” page as a fallback. And, in PHP, you would have <code>display_errors</code> turned off in production.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Since we seem to have a common ground on when an exception makes sense (which is to notify bad situations), for normal control flow, it is not the first goto solution. It is easier to map the happy path with simple control constructs (if/else, while, switch/case, etc).</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Pavan, I think the biggest question right now is what one would understand by “flow control.” The example given above simply has a bunch of echoes.<p>Aaron, exactly. What you’ve said does not contradict what I said about catching errors. Thanks for pointing out the more detailed solution.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> That’s why I think we need an example of when you think exceptions are wrong. It would be hilarious if we all agree, and it’s an issue of definition.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> I think when you’re talking about control flow, that the “expected” behavior for a login is a correct email and correct password. The fringe case is that a user doesn’t enter these properly, or their account has been suspended, or some unknown server error occurs.<p>If the authentication fails, it fails because of fringe cases – bad input, or some problem outside of the actual authentication function. I think, in these instances, we’re talking more about a definition of control flow and fringe case than whether or not exceptions are a good way to handle the process of logging in.</p>
    <p>This is also an abstraction of the authentication function itself.</p>
    <p>An acceptable alternative might be to return a login object that you could run an if/else control over.</p>
    <pre>$attempt = Sentry::authenticate($credentials);&#x000A;    if ($attempt-&gt;status == "success"){&#x000A;       $user = $attempt-&gt;user;&#x000A;    } else if ($attempt-&gt;status == "no_password") {&#x000A;     // etc&#x000A;    }&#x000A;    </pre>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> I think the auth example is a great one and can be modeled with and without exceptions. I vote for not using exceptions here – especially for more complicated (say 2 step) and distributed (oauth) authentication.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> Really, it’s not about whether or not exceptions are “wrong” in a given scenario. It’s about what is best for the job.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> But Jonathan, surely, if you had a big list of cases like in the auth example, having a registered error handler would be quicker and more verbose then sifting through each option?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> And here comes the question, what is considered an exception, and what is just another situation that you have to deal with.<p>For example, in the authentication form, if the user name must be an email address and the user types in something else, that could be an exception.</p>
    <p>But if the user fills in the form correctly and just the user/pass combination is not a match, that is more likely another case to treat, and not an exception.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> Then perhaps the object that is returned carries a message and a status.<pre>if ($attempt-&gt;status == "success"){&#x000A;       $user = $attempt-&gt;user;&#x000A;    } else if ($attempt-&gt;status == "failure"){&#x000A;       echo $attempt-&gt;message;&#x000A;    } else {&#x000A;       echo "Something unexpected happened. Please try again."&#x000A;    </pre>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Jonathan, or you could throw the error in the last else!</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> If we go async on the code, you will see a different style of propagating errors – especially, via callbacks, which will have all the details of the error.<p> NodeJS has made a name for itself in this regard, and, for that matter, any “event-driven” runtime, like EventMachine or Twisted.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> So you are for it, Pavan?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Pavan, I am not that familiar with asynchronous code. Can you explain how exceptions work there in more detail?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> So I was trying to point out that we are talking about control flow in general, and not just error conditions. I think exceptions are not suitable for general control flow.<p>Csaba, here is a classic async code example:</p>
    <p>Let’s say that you are trying to read a file: <code>/usr/local/app.log</code>. The way you do it in Node is:</p>
    <pre>var fs = require('fs'); // load the filesystem module&#x000A;    &#x000A;    fs.readFile('/usr/local/app.log', function(err, doc){&#x000A;    &#x000A;    if (err) { console.log('failed to read'); return; }&#x000A;    &#x000A;    // process file&#x000A;    });&#x000A;    </pre>
    <p>Because of the callback, you don’t put try/catch around the call. Instead, you use a callback style to handle the result. I hope that makes it clear. In general, any operation that cannot be performed synchronously will have a callback style API to handle the results.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I still don’t think anyone has mentioned an example where exceptions are used incorrectly. I don’t fully understand the counter example.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> Yes, I would like to see an example of exceptions being used for control flow and the explanations as to where the bad points are… as well as how it would be rewritten. That should give us all some common ground to work with.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> Pavan, very true. I think, conceptually, the idea is the same, however, when we talk about things like jQuery’s AJAX implementation, in which you can define <code>.error()</code>, <code>.success()</code>, etc. This is an abstraction from what’s really going on (checking the XHR object).<pre>$.get("<a href="http://example.com/something/remote.json%22).success(function(data)">http://example.com/something/remote.json").success(function(data)</a>{&#x000A;       // do something with data&#x000A;    }).error(function(res){&#x000A;      // do something different; res contains information about the error&#x000A;    });&#x000A;    </pre>
    <p>While this isn’t either exception or if/else, it still solves the problem: handle both successful and non-successful AJAX requests. However, the jQuery implementation itself is not try/catch, because it is asynchronous.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Going back to our auth example, if we were to do it async, where the auth service is remotely located and talks to several other backend services to perform multi-step authentication, then an exception style API will not work. An alternative approach is given below:<pre>var auth = require('authenticator');&#x000A;    var eventbus = EventBus.global();&#x000A;    &#x000A;    auth.login("pavan", "pwd", function(err, result) {&#x000A;       if (err) { &#x000A;          var details = {&#x000A;             username: "pavan",&#x000A;             error: err&#x000A;          };&#x000A;    &#x000A;          eventbus.put("Authentication failed", details); &#x000A;    &#x000A;          return; &#x000A;       }&#x000A;    &#x000A;       eventbus.put("Authentication successful!!");&#x000A;    });&#x000A;    </pre>
    <p>Note that we are using the concept of a system-wide eventbus to propagate messages. In this case, we will have a success or failure message with the appropriate payload. This kind of message passing is common in distributed systems and is a great way to have a control flow that spreads across machines.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> As an add-on to that, this is also pertinent, not only to cross-machine, but also to multi-threaded environments, which is in some ways conceptually similar to async. (Correct me if I’m wrong on that, multi-thread gurus.)</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Isn’t that code just passing the buck? Somewhere, there needs to be some code that performs an unsafe operation and needs to handle the exception and set the error.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Gabriel, that’s exactly what’s happening and is an example of control flow across different software boundaries.<p>Other more generally understood cross-boundary control flow is none other than the venerable “Email” and “SMS” messages. It may not be obvious at first glance, but a little introspection and you will see how it is control flow of a different kind, and not done via exceptions.</p>
    <p>You can disagree or raise hell in an email, but the receiver is told in a message that may arrive much later than the time it was sent (and may be too late).</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Correct me if I’m wrong, but my understanding is that you guys are saying the following is bad:<pre>try&#x000A;    {&#x000A;        $conn = connectToDatabase($credentials);&#x000A;    }&#x000A;    catch (NoDbAtThatUriException $e)&#x000A;    {&#x000A;        //handle it&#x000A;    }&#x000A;    catch (LoginException $e)&#x000A;    {&#x000A;        //handle it&#x000A;    }&#x000A;    </pre>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Gabriel, if the call to <code>connectToDatabase</code> is synchronous, exceptions will work. Otherwise, you need callbacks. Also, there could be several forms of failures (different classes of Exceptions). Do you care what kind of failure it is – especially if you are logging it somewhere?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> Also, what about uncaught exceptions in that example? (Not sure what they would be at the moment, but shouldn’t there be a way to catch everything?) In an if/else block, the final else handles all remaining cases.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> Also, it’s more useful to understand how you propagate errors in your software stack. I assume a <code>LoginException</code> has to be notified to the user?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Potentially, they can all follow a protocol and have a function, like <code>$e-&gt;handleIt()</code>.<p>I happened to have picked a bad example, because, in these situations, you basically need to get new data from the user. But, conceptually, you can have full logic, like:</p>
    <pre>catch (NoDbAtThatUriException $e)&#x000A;    {&#x000A;        $credentials-&gt;uri .= ":3065"; //add port&#x000A;        //recall original function here&#x000A;    }&#x000A;    </pre>
    <p>Obviously, this isn’t the best example and you would probably want to determine if a port is already there, instead of infinitely appending them. But what I’m saying is to use exceptions for actual code, besides simply “alerting” the user.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> In PHP, you can either use <code>set_exception_handler()</code> to handle any uncaught exceptions. You can also have a catch <code>(Exception $e)</code> block as the last catch statement in the control flow, since all exceptions in PHP extend the native <code>Exception</code> class.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I think one of the bonuses to using exceptions instead of an <code>if</code> statement is you will get a detailed error if you forget to accommodate one, whereas with an <code>if</code> statement, it would merely default to the <code>else</code>.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Gabriel, I think that, in your example, it is a sensible solution to allow using logic when you catch the connection problem. Maybe you want to retry the connection because your network is unreliable. But if the user can not authenticate over an already existing connection, then something is very wrong. You don’t want to retry on that one.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> Still not a great example, but here’s a demonstration of handling different scenarios:<pre>try {&#x000A;        $user = $auth-&gt;login($credentials);&#x000A;    } catch (InvalidUsernameException $e) {&#x000A;        // Redirect to login page with error message&#x000A;        // Could even use $e-&gt;getMessage()&#x000A;    } catch (InvalidPasswordException $e) {&#x000A;        // If this is the 5th attempt, redirect to reset password page&#x000A;        // Otherwise, redirect to login page with error message&#x000A;    } catch (AccountLockedException $e) {&#x000A;        // Redirect to special error screen explaining why they aren't allowed&#x000A;    } catch (Exception $e) {&#x000A;        // Fallback for everything else&#x000A;        // Log that we had an unexpected exception&#x000A;        // Redirect to error page or something&#x000A;    }&#x000A;    </pre>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> But with most runtimes, exceptions are seen with special lenses and there is some loss of “control” because the runtime directs the exception in a certain order from the nearest “exception handler” to the top-most exception handler – and, ultimately, to the default runtime’s uncaught exception handler. You lose the contextual information as you go further away and you have to think hard about who should be handling it.<p>Eventually, even if you do decide where it should be handled, debugging is still a problem. If you revisit the code after a few months, you will have little clue what is going on.</p>
    <p>The point that I am trying to make is, with control flows of any kind, you are building an implicit state machine and you should strive hard to keep all possible states of control localized in your code. With exceptions, that can be difficult.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> On the other hand, as Gabriel mentioned, exceptions are a great way to communicate problems in detail. If you decide to not use them at all, and just use <code>return</code> in your functions to communicate both good and bad scenarios, you may and up with some very unpredictable functions. This is mostly a problem with dynamically-typed languages like PHP, where even the some built-in functions have this problem. For some reason, the people who made them decided that, for example, a function returns a string or an array on success, and <code>false</code> or <code>-1</code> on failure.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> Pavan, PHP allows for nested exceptions; so you could throw another and reference the previous exception, allowing for a more granular look in the trace of what happened.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Aaron, about your example: I would consider the wrong user and password to be simple paths my application may go down, not an exception. All other login-specific exceptions, like account locked and account expired, may be threatened by the same handling functions.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Csaba, but why would you nest control statements in exceptions? While your at it, would it be neater to simply handle each one separately (unless, of course, they have the same outcome)?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> I think I was little unclear about exception handling in my earlier post. The point I was attempting to make was that exception handlers spread in multiple layers of your software stack. In this case, an exception in your DB layer, which ultimately needs to be propagated to the user in the form of a “failed to login/connect” message.<p>There has to be a couple exception handlers before it reaches the user, starting from your DB layer to your web layer, and finally rendering it on the client. If you notice the control flow, which is currently spread across many layers, it can be difficult to handle smoothly. What’s been your experience in this regard?</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I would definitely not allow exceptions to be taken out of a class. That is where the status variable can come in handy. That’s what I was referring to earlier, when I mentioned the whole “<em>passing the buck</em>” thing. I agree that, at that point, it is important to use control statements and status variables. But, internally, Exceptions are fine for code flow.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> Gabriel, I wanted to point out that I would throw exceptions only when there is something exceptional happening. The user failing to correctly fill in his/her username and password is not an exception in my eyes. It’s simply another situation that my program has to deal with.<p>As for propagating exceptions between layers. In the project I work on at my job, most exceptions thrown are automatically propagated, and caught very close to the UI, at which point a message is presented to the user.</p>
    <p>In other cases, such as creating a directory that already exists, the exception is simply caught by the client code, and discarded with something along the lines of:</p>
    <pre>try {&#x000A;      $filesystemHandler-&gt;createDirectory('/tmp/dirname');&#x000A;    } catch (DirectoryExistsException $e) {&#x000A;      return true;&#x000A;    }&#x000A;    </pre>
    <p>Of course, other exceptions, like <code>NoPermissionToCreateDirectory</code> will be propagated. I think this is a good example of controlling flow based on an exception.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> The only control flow that we have seen so far is a failure case. Would exceptions still be used for normal control flow? For example, a batch process that is applying some transformation on an image. There can be multiple transforms in a pipeline for an image. I begin with 100 images, and 100 transformed images come out after the batch process. How might you model this program?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Pavan, where would you put a control statement? Are you talking image in -&gt; process -&gt; image out?</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> The transformation on an image can be one of, say, ten different types. Each image has a  specification about the series of transforms that should be performed, and in what order. The image also has a path pointing to the file. The “process” block takes in one image at a time and applies these transforms in order. At the end, the transformed image is collected in some output location.<p>The user needs to be notified about the progress of the batch process, and eventually alerted when the process is complete. There could be failures, like invalid file, invalid transform, not enough disk space to store the file, etc.</p>
    <p>Do you see a control flow here, more like a factory assembly line? How will this be modeled with exceptions, and with regular control constructs?</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> In a simplified way, not with all the details you specified, here is my first take on the image processing problem:<pre>class ImageTransformer {&#x000A;    &#x000A;       private $images = [];&#x000A;       private $transformer;&#x000A;       private $failedTransforms = [];&#x000A;    &#x000A;       function __construct($images) {&#x000A;          $this-&gt;images = $images;&#x000A;          $this-&gt;transformer = new TransformOneImage();&#x000A;       }&#x000A;    &#x000A;       function transformAll() {&#x000A;          foreach ($this-&gt;images as $image) {&#x000A;             try {&#x000A;                $this-&gt;transformer-&gt;transform($image);&#x000A;             } catch (CanNotTranformImageException $e) {&#x000A;                $this-&gt;failedTransforms[] = $e-&gt;getMessage();&#x000A;             }&#x000A;          }&#x000A;    &#x000A;          if (!emptyArray($this-&gt;failedTransforms)) {&#x000A;             // code to notify user here&#x000A;             // and finally&#x000A;             return false;&#x000A;          }&#x000A;          return true;&#x000A;       }&#x000A;    &#x000A;    }&#x000A;    &#x000A;    class TransformOneImage {&#x000A;    &#x000A;       function transform($image) {&#x000A;          $transformedImage = // do image processing here&#x000A;    &#x000A;          if (!$transformedImage) {&#x000A;             throw new CanNotTranformImageException($image);&#x000A;          }&#x000A;    &#x000A;          return $tranformedImage;&#x000A;       }&#x000A;    &#x000A;    }&#x000A;    </pre>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> This is mostly pseudo code, but I would <a href="https://gist.github.com/gmanricks/5209296" rel="nofollow external" class="bo">call this a valid programming style</a>. It demonstrates using exceptions for error reporting, as well as code flow and propagation.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> That’s pretty interesting, Gabriel. I think one danger is the looping retry without any input from the user, but I’m assuming that’s just an example more than a real practice.<p>The real question here is really about what kinds of cases are considered exceptions. We could easily rewrite this to localize the errors, which would reduce the time needed to identify error source. Of course, with this example, it wouldn’t be too difficult to identify a source.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> Jonathan, after sleeping on it, I realized that I could further localize it by moving the loading of the image data into the image class, itself. This would clean up the double <code>try</code> statement, and keep in line with the transformations.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/ben_corlett" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/ben-avatar.gif" alt="Ben Corlett" style="max-width: 100%; height: auto;"></a><div> Being one of the main authors for Sentry I thought I’d throw my two cents in about why we did what we did in Sentry and my thoughts on Exceptions in control flow.<p>When authenticating a user, there essentially two main ways we could have tackled it:</p>
    <ol>
    <li>try/catch</li>
    <li>if/else</li>
    </ol>
    <p>Let me explain the ways that we could have tackled if/else:</p>
    <pre>if (Sentry::authenticate($args))&#x000A;    {&#x000A;        // Great, go ahead&#x000A;    }&#x000A;    else&#x000A;    {&#x000A;        // Right, something went wrong, but what?&#x000A;    }&#x000A;    </pre>
    <p>But, what happens if we want to find out a little more information than a simple “<em>Nope, you’re not allowed</em>“? Getting an object back is a great approach:</p>
    <pre>$response = Sentry::authenticate($args);&#x000A;    &#x000A;    if ($response-&gt;hasError())&#x000A;    {&#x000A;        switch ($response-&gt;getError())&#x000A;        {&#x000A;            case 'login_required':&#x000A;                $message = 'You didn\'t enter any login details.';&#x000A;                break;&#x000A;            case 'password_required':&#x000A;                $message = 'You didn\'t enter a password.';&#x000A;                break;&#x000A;            case 'user_not_found':&#x000A;                $message = 'No user was found with those credentials.';&#x000A;                break;&#x000A;    &#x000A;            // And so on...&#x000A;        }&#x000A;    &#x000A;        // Let's pretend we're working in L4&#x000A;        return Redirect::route('login')-&gt;withErrors([$message]);&#x000A;    }&#x000A;    else&#x000A;    {&#x000A;        return Redirect::route('profile');&#x000A;    }&#x000A;    </pre>
    <p>This has some advantages, primarily due to the switch statement:</p>
    <pre>if ($response-&gt;hasError())&#x000A;    {&#x000A;        switch ($response-&gt;getError())&#x000A;        {&#x000A;            // Consolidate errors&#x000A;            case 'login_required':&#x000A;            case 'password_required':&#x000A;            case 'user_not_found':&#x000A;                $message = 'No user was found with those credentials.';&#x000A;                break;&#x000A;    &#x000A;            // And so on...&#x000A;        }&#x000A;    &#x000A;        return Redirect::route('login')-&gt;withErrors([$message]);&#x000A;    }&#x000A;    else&#x000A;    {&#x000A;        return Redirect::route('profile');&#x000A;    }&#x000A;    </pre>
    <p>However, exceptions give a lot more control because you can let them be handled at any level within your application. Exceptions can also extend each other, while all extend the base <code>Exception</code> class (obviously talking PHP here).</p>
    <p>A downside to the Exceptions used (<a href="http://docs.cartalyst.com/sentry-2/authentication" rel="nofollow external" class="bo">particularly with Sentry</a>) is the verbosity of them. This is because we have separated out the different components within Sentry (groups / users / throttling) so that you can take the components you want and build a totally kickass auth system. So, everything that belongs to the ‘users’ component of Sentry sits in the <code>Cartalyst\Sentry\Users</code> namespace. A dead-simple way to decrease verbosity is either through the <code>use</code> keyword: <code>use Cartalyst\Sentry\Users\LoginRequiredException;</code>. Or, of course, you can go ahead and add a <code>class_alias()</code> for global aliasing of the class. All of the sudden, we bring the verbosity down to (and with some practical examples):</p>
    <pre>try&#x000A;    {&#x000A;        // Set login credentials&#x000A;        $credentials = array(&#x000A;            'email'    =&gt; '<a href="mailto:john.doe@example.com">john.doe@example.com</a>',&#x000A;            'password' =&gt; 'test',&#x000A;        );&#x000A;    &#x000A;        // Try to authenticate the user&#x000A;        $user = Sentry::authenticate($credentials);&#x000A;    }&#x000A;    catch (LoginRequiredException $e)&#x000A;    {&#x000A;        // Or a "goto", take your pick&#x000A;        return $this-&gt;userFail();&#x000A;    }&#x000A;    catch (PasswordRequiredException $e)&#x000A;    {&#x000A;        return $this-&gt;userFail();&#x000A;    }&#x000A;    catch (UserNotFoundException $e)&#x000A;    {&#x000A;        return $this-&gt;userFail();&#x000A;    }&#x000A;    catch (UserNotActivatedException $e)&#x000A;    {&#x000A;        // Take to a page where the user can resend their activation email&#x000A;        return Redirect::to('users/activate');&#x000A;    }&#x000A;    catch (UserSuspendedException $e)&#x000A;    {&#x000A;        return Redirect::to('naughty');&#x000A;    }&#x000A;    catch (UserBannedException $e)&#x000A;    {&#x000A;        return Redirect::to('naughty');&#x000A;    }&#x000A;    catch (Exception $e)&#x000A;    {&#x000A;        // Show a 500 page or something?&#x000A;    }&#x000A;    &#x000A;    return Redirect::route('profile');&#x000A;    </pre>
    <p>Verbosity is one downside to try/catch, but it can be decreased through the use of <code>use</code> (bad wording there, right?) and class aliases.</p>
    <p>Let’s consider the positives:</p>
    <ul>
    <li> Logic can be handled at any level of the app or through a custom registered handler (at least in PHP).</li>
    <li> try/catch are “low-level”. I mean this in the sense that they don’t really change. In PHP, there is always $e-&gt;getMessage() and $e-&gt;getCode() (due to inheritence from “Exception”). If I return an object to (such as $response-&gt;hasError()), the developer needs to know the exposed API for that object. Also, the object may change in the future. try/catch is a syntax which I don’t see changing. It’s intuitive.</li>
    <li> The only real alternative to having multiple catches (with a catch-all) is switch. But the verbosity of a switch statemtn is much the same as try/catch.</li>
    <li> Mixing true/false and try/catch in the same statement is a recipe for confusion. As @philsturgeon said so well “With a mailer for example, a LOT of things can go wrong in the sending of an email, so you want to throw exceptions if the email fails to contact the SMTP server, if it fails to include a from address, if it cannot find the sendmail install, whatever. What if it doesnt have a valid email address? Is that an exception, or should it return false and make you look up an error code? Why half-and-half it?”</li>
    <li> In PHP, there’s no such (real) thing as asynchronous. Before you all jump on my back about spawning processes and all that jank, PHP doesn’t really support it. I don’t see how using a callback can really improve the application (reminder: I’m talking PHP) or the user experience, as you can achieve the same “progress” feedback (through an app polling your script) throughout the process of whatever happens in the “try” block. 10 points for the worst explanation there, but I think the point still comes across. You can do everything the same through a try/catch as you can using a callback in a single-thread language.</li>
    </ul>
    <p>I think, at the end of the day, it comes down to different use-cases. Some may argue that it’s the same as “tabs vs spaces,” but I don’t believe it is. I think there are scenarios when an if/else is appropriate, but, if there is more than one possible non-successful outcome, I believe that a try/catch is usually the best approach.</p>
    <p>Here’s two more examples that we could discuss:</p>
    <pre>function create_user($name)&#x000A;    {&#x000A;        if (strlen($name) === 0) return false;&#x000A;    &#x000A;        if (user_exists($name)) return false;&#x000A;    &#x000A;        // This believe it or not returns a user :P&#x000A;        return super_magic_create_method($name);&#x000A;    }&#x000A;    &#x000A;    // EXAMPLE ONLY, DON'T SHOOT ME&#x000A;    if ($user = create_user($_POST['name']))&#x000A;    {&#x000A;        // Hooray&#x000A;    }&#x000A;    else&#x000A;    {&#x000A;        // What went wrong?!&#x000A;    }&#x000A;    &#x000A;    function create_user($name)&#x000A;    {&#x000A;        if (strlen($name) === 0) throw new InvalidArgumentException("You have not provided a valid name.");&#x000A;    &#x000A;        if (user_exists($name)) throw new RuntimeException("User with name [$name] exists.");&#x000A;    &#x000A;        // This believe it or not returns a user :P&#x000A;        return super_magic_create_method($name);&#x000A;    }&#x000A;    &#x000A;    try&#x000A;    {&#x000A;        $user = create_user($_POST['name']);&#x000A;    }&#x000A;    catch (InvalidArgumentException $e)&#x000A;    {&#x000A;        // Tell the user that some sort of validation failed&#x000A;    }&#x000A;    // Yep, catch any exception&#x000A;    catch (Exception $e)&#x000A;    {&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>And, for another example, in Laravel 4, there is a validation class. It works like so:</p>
    <pre>$rules = ['name' =&gt; 'required', 'email' =&gt; 'required|email'];&#x000A;    $validator = Validator::make(Input::get(), $rules);&#x000A;    &#x000A;    if ($validator-&gt;passes())&#x000A;    {&#x000A;        // Yay&#x000A;    }&#x000A;    else&#x000A;    {&#x000A;        foreach ($validator-&gt;errors() as $error)&#x000A;        {&#x000A;    &#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>What if it worked like this?</p>
    <pre>try&#x000A;    {&#x000A;        $rules = ['name' =&gt; 'required', 'email' =&gt; 'required|email'];&#x000A;        $validator = Validator::make(Input::get(), $rules);&#x000A;        $validator-&gt;run();&#x000A;    }&#x000A;    catch (ValidationFailedException $e)&#x000A;    {&#x000A;        foreach ($e-&gt;getErrors() as $error)&#x000A;        {&#x000A;    &#x000A;        }&#x000A;    }&#x000A;    catch (InvalidRulesException $e)&#x000A;    {&#x000A;        // You made bad rules&#x000A;    }&#x000A;    &#x000A;    </pre>
    <p>Just food for thought. The first one reads “prettier,” but the second one could be seen as optimal. Any thoughts regarding this?</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I agree with Ben; there is always a right and wrong way to do something. It’s not like every <code>if</code> statement should now be replaced with an exception. But they are far more “accurate” and readable than, for example. a function that returns <code>-1</code> or <code>false</code>.</div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/JCutrell" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/jonathan-avatar.gif" alt="Jonathan Cutrell" style="max-width: 100%; height: auto;"></a><div> I think the most pertinent point here is the “<em>multiple bad outcomes</em>” argument. I think that is an important value-based judgement we should consider.<p>Perhaps exceptions, then, are best suited for when something goes wrong by definition. For instance, when there is input error, when there is server error, etcetera.</p>
    <p>Maybe a bad use-case scenario is catching exceptions for things that are expected and good cases. I certainly agree with what Ben laid out, particularly when it comes to what I have now (un)officially trademarked <em>the Un-informed else block™</em>. (You may affectionately refer to it as UEB™.) This poor catch-all doesn’t have anything good to tell us, and unfortunately gets hit with all the bad, with little-to-no recourse. What a shame.</p>
    <p>And, thus, we may happen upon an answer! To keep all of our control flow informed, and to use exceptions for things that are, indeed, exceptions.</p>
    <p>I should be able to try to log in a user, and know why it failed. Now, the question is, how? I think the answer, as we have all agreed, is that it simply depends.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/gabrielmanricks" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/gabriel-avatar.gif" alt="Gabriel Manricks" style="max-width: 100%; height: auto;"></a><div> I agree with Jonathan. Using exceptions for a good case would be wrong. For instance:<pre>try &#x000A;    {&#x000A;        loginUser($creds);&#x000A;    } &#x000A;    catch (LoginSuccess $success)&#x000A;    {&#x000A;       //store session and cookies&#x000A;    }&#x000A;    </pre>
    <p>So my opinion is to use them for errors. Not limited to “unexpected” errors, but any errors.</p>
    <p>Also a point worth adding is that it depends on what you are doing – whether you are performing an action or checking something.</p>
    <p>In my Gist above, I had a method validate, and, within the code, I wrote something like:</p>
    <pre>if ($transform-&gt;validate()) {&#x000A;        //process&#x000A;    } else {&#x000A;        //throw exception&#x000A;    }&#x000A;    </pre>
    <p>I could have thrown the exception inside the validate method, but that would be destructive to the code’s readability. You would have something like:</p>
    <pre>$transform-&gt;validate();&#x000A;    $transform-&gt;process();&#x000A;    </pre>
    <p>This makes it unclear what is going on. To summarize my point of view, I would say: use Exceptions when performing an action, and use <code>if</code> statements when verifying data.</p>
    <p>It also works out syntax-wise, because you can say “<code>if (x) then y</code>“, when you are checking data, and <code>try { x } catch (a snag)</code> for actions. It wouldn’t be grammatically correct to interchange them.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> I’m in total agreement in saying that exceptions should never be used for a positive result. For me, it boils down to these two scenarios:<ul>
    <li>There are multiple points of failure in a particular function/method.</li>
    <li>There is a need to discern the difference between those points of failure and handle them in more than one way.</li>
    </ul>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/PatkosCsaba" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/csaba-avatar.gif" alt="Csaba Patkos" style="max-width: 100%; height: auto;"></a><div> I disagree, especially with the assumption that using only exceptions in the authentication example makes the code more readable, or more obvious.<p>I think the problem is that some people consider the language an impediment to expressing their ideas. Thus, a mix of if/else with try/catch makes the code harder to understand.</p>
    <p>The problem, as I see it, is the exact opposite. The code should reflect the concepts that you want to implement. Using try/catch for everything, except for the happy path, hides a great deal of execution logic details. Anything becomes white or black.</p>
    <p>On the other hand, if you use if/else for the cases when your application goes down paths that are part of its logic (like wrong username – passord pair), and then try/catch for the situations when your application gets into an unexpected / unrecoverable state, it would be much more obvious what the possible behavior and paths of execution are.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/akuzemchak" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/aaron-avatar.gif" alt="Aaron Kuzemchak" style="max-width: 100%; height: auto;"></a><div> The original reason why this got me thinking in the first place was because of the knee-jerk, “<em>NO</em>” responses.<ul>
    <li>
    <strong>Should I ever use JavaScript as a server-side language?</strong> No, because that’s not what it was designed for.</li>
    <li>
    <strong>Should I use LESS to write CSS?</strong> No, because it might confuse someone.</li>
    <li>
    <strong>Is it ever okay to use static methods?</strong> No, it is never okay.</li>
    </ul>
    <p>All extreme and not constructive.</p>
    <p>I think that by presenting valid reasoning from both sides, we reach an even more important conclusion: not condemning other developers for not seeing eye-to-eye with ourselves. If any of you hand me some code, I’m not going to complain about your decision to use exceptions or not. I just want you to be consistent in your approach, and you better comment it! :)</p>
    <p>I doubt this will change anything, but most developers could use some more humility and empathy – me especially. That’s at least my goal in this: not to convince anyone that my way is <em>the</em> way, or even a better way, but to demonstrate that you shouldn’t tell me that my way is flat-out wrong, because maybe we’re not looking at it the same way.</p>
    </div>
    </div>
    <hr>
    <div> <a href="https://twitter.com/pavanpodila" rel="nofollow external" class="bo"><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeffreyway/pavan-avatar.gif" alt="Pavan Podilla" style="max-width: 100%; height: auto;"></a><div> I think we have a group consensus on using Exceptions only for handling the error/failure cases. It should never be used for normal control flow.<p>It is worth noting why Exceptions are particularly suited for propagating errors. It’s all about context and making sure this context is passed on to wherever is best to handle the exception. Most runtimes have an automatic way of bubbling up the exception and that makes it very convenient to inject exception handlers at the right places in the software stack.</p>
    <p>You cannot define a bubbling route for exceptions using any language construct. The only possibility is to raise or throw them. It’s the runtime’s responsibility to do the bubbling. This implicit mechanism makes exceptions the ideal abstraction for propagating errors.</p>
    </div>
    </div>
    <hr>
    <h2>Your Turn</h2>
    <p>So that’s what we have to say on this subject. What are your views? Can an argument be made for using exceptions for flow control?</p>
    </div>
]]>
</Body>
<Summary>I’m pleased to release our first ever round table, where we place a group of developers in a locked room (not really), and ask them to debate one another on a single topic. In this first entry, we...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/wEItkeOfo6o/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26814/guest@my.umbc.edu/213eec9d842c9ca4913fd405e43ed9fd/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>general</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>round-table</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>Wed, 27 Mar 2013 14:57:48 -0400</PostedAt>
<EditAt>Wed, 27 Mar 2013 14:57:48 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="26810" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26810">
<Title>What internet resources are available for international media - tv, newspapers, radio?</Title>
<Body>
<![CDATA[
    <div class="html-content"><div>    <p>
            Page
                <strong>edited</strong> by
                        <a href="https://wiki.umbc.edu/display/~jcoste1" rel="nofollow external" class="bo">Joan Costello</a>
                </p>
            <div>
            <div><table><tbody>
    <tr>
    <td><div><strong> TV:</strong></div></td>
    <td>
    <p><a href="http://www.learner.org/view_programs/view.programs.html" rel="nofollow external" class="bo">Annenberg PBS Videos on Demand</a> use IE</p>
    <p><a href="http://www.beelinetv.com/" rel="nofollow external" class="bo">Beeline TV from around the world</a></p>
    <p><a href="http://www.euronews.net" rel="nofollow external" class="bo">Euronews</a></p>
    <p><a href="http://www.watchfomny.com/index.php" rel="nofollow external" class="bo">Fomny  television</a></p>
    <p><a href="http://broadband-television.com/tv/" rel="nofollow external" class="bo">Hulu Plus International TV</a></p>
    <p><a href="http://www.tvacres.com/tv_resources_networks_internat.htm" rel="nofollow external" class="bo">TV Resources</a><br>  <br> French - <a href="http://www.tv5.org/indextv5.html" rel="nofollow external" class="bo">TV5</a></p>
    <p>Spanish -<a href="http://noticias.univision.com/" rel="nofollow external" class="bo"> Univision</a></p>
    <p> </p>
    </td>
    </tr>
    <tr>
    <td><div><strong>Radio:</strong></div></td>
    <td><a href="http://radio.un.org/" rel="nofollow external" class="bo">UN Radio </a></td>
    </tr>
    <tr>
    <td><div><div><strong>Newspapers:</strong></div></div></td>
    <td><a href="http://www.thepaperboy.com/" rel="nofollow external" class="bo">International newspapers </a></td>
    </tr>
    </tbody></table></div>
    <p> </p>
    <h2>Rate this Article</h2>
    <p>
    
    
    
    
    <strong>Was this helpful?</strong>
    <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422550&amp;q=0&amp;v=1&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Yes</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422550" rel="nofollow external" class="bo">No</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422550" rel="nofollow external" class="bo">Correct or Suggest an Article</a>
     | <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D35422550&amp;q=0&amp;v=0&amp;s=faq&amp;l=imc" rel="nofollow external" class="bo">Request Help</a></p>
    <p><a href="http://my.umbc.edu/help/request" rel="nofollow external" class="bo"><img src="https://wiki.umbc.edu/download/attachments/29853066/RequestHelpicon.png?version=1&amp;modificationDate=1335472984000&amp;api=v2" style="max-width: 100%; height: auto;"></a></p>
        </div>
            <div>
           <a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=35422550" rel="nofollow external" class="bo">View Online</a>
                  ·
           <a href="https://wiki.umbc.edu/pages/diffpagesbyversion.action?pageId=35422550&amp;revisedVersion=3&amp;originalVersion=2" rel="nofollow external" class="bo">View Changes Online</a>       
                      </div>
    </div></div>
]]>
</Body>
<Summary>Page             edited by                     Joan Costello                                    TV:  Annenberg PBS Videos on Demand use IE  Beeline TV from around the world  Euronews  Fomny ...</Summary>
<Website>https://wiki.umbc.edu/pages/viewpage.action?pageId=35422550</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26810/guest@my.umbc.edu/eda24bc43abc6cf15f9181bd977b3e74/api/pixel</TrackingUrl>
<Tag>faq</Tag>
<Group token="retired-428">UMBC FAQ</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-428</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/images/avatars/group/1/original.png?1782921639</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/images/avatars/group/1/xxlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/1/xlarge.png?1782921639</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/images/avatars/group/1/large.png?1782921639</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/images/avatars/group/1/medium.png?1782921639</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/images/avatars/group/1/small.png?1782921639</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/images/avatars/group/1/xsmall.png?1782921639</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/images/avatars/group/1/xxsmall.png?1782921639</AvatarUrl>
<Sponsor>UMBC FAQ</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 27 Mar 2013 14:43:24 -0400</PostedAt>
<EditAt>Wed, 27 Mar 2013 15:29:27 -0400</EditAt>
</NewsItem>

</News>
