<?xml version="1.0"?>
<News hasArchived="true" page="9059" pageCount="10794" pageSize="10" timestamp="Tue, 08 Sep 2026 01:40:27 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=9059&amp;range=30">
<NewsItem contentIssues="false" id="25491" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25491">
<Title>Ryan Cook Named to America East Second Team</Title>
<Body>
<![CDATA[
    <div class="html-content">UMBC senior guard Ryan Cook has been named to the America East Conference Second Team, it was announced on the eve of the league tournament. Cook becomes the 13th Retriever to earn a postseason America East All-Conference honor in ten years of league competition. He becomes UMBC's third consecutive second team honoree, following Chris De La Rosa in 2010-11 and Chase Plummer in 2011-12.</div>
]]>
</Body>
<Summary>UMBC senior guard Ryan Cook has been named to the America East Conference Second Team, it was announced on the eve of the league tournament. Cook becomes the 13th Retriever to earn a postseason...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7748</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25491/guest@my.umbc.edu/ca831af818bc7b13f345a656efda9f3b/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 08 Mar 2013 00:00:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="25442" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25442">
<Title>UMBC Volleyball to Host Two Sets of Camps During Summer 2013</Title>
<Body>
<![CDATA[
    <div class="html-content">BALTIMORE � The UMBC volleyball team will host a pair of camps this summer, head coach Ian Blanchard announced on Friday.</div>
]]>
</Body>
<Summary>BALTIMORE � The UMBC volleyball team will host a pair of camps this summer, head coach Ian Blanchard announced on Friday.</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7743</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25442/guest@my.umbc.edu/9668ae8a38410647397a67771568e873/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 08 Mar 2013 00:00:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="25490" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25490">
<Title>UMBC Women's Basketball Edged by Vermont in Conference Quarterfinals, 47-43</Title>
<Body>
<![CDATA[
    <div class="html-content">Despite shooting its second-lowest percentage of the season (24.6 percent), the third-seeded UMBC women's basketball tied Friday's afternoon's America East Championship Quarterfinal contest at 43 with 36 seconds to go, but Vermont's Lauren Wheeler knocked down her only trey of the game to lead the sixth-seeded Catamounts to a 47-43 victory over the Retrievers at SEFCU Arena.</div>
]]>
</Body>
<Summary>Despite shooting its second-lowest percentage of the season (24.6 percent), the third-seeded UMBC women's basketball tied Friday's afternoon's America East Championship Quarterfinal contest at 43...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7747</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25490/guest@my.umbc.edu/9875bc324b68851ebbb2f42b6936d64b/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 08 Mar 2013 00:00:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="25457" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25457">
<Title>Women's Lacrosse Returns Home to Take on (rv) Drexel</Title>
<Body>
<![CDATA[
    <div class="html-content">UMBC women's lacrosse looks to avenge last season's one goal loss, 9-8, to Drexel on Saturday, March 9, when the Dragons travel to the UMBC Stadium for a 1 p.m. matchup. All the action can be seen live on UMBCRetrievers.tv.</div>
]]>
</Body>
<Summary>UMBC women's lacrosse looks to avenge last season's one goal loss, 9-8, to Drexel on Saturday, March 9, when the Dragons travel to the UMBC Stadium for a 1 p.m. matchup. All the action can be seen...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7744</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25457/guest@my.umbc.edu/3d6782c6ef58259d416c134f9410d7f7/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 08 Mar 2013 00:00:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="25428" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25428">
<Title>URI (Urban Resources Initiative) Summer 2013 Internships</Title>
<Tagline>Sustainability, Mapping, Recycling Opportunities and more</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p><span>Intern with
    Parks &amp; People Foundation and the Baltimore City Department of Recreation
    and Parks this Summer! </span></p>Projects are offered in many areas:<br>
    Sustainability<br>
    Mapping<br>
    Outdoor Recreation<br>
    Recycling<br>
    Urban Gardens<br>
    Tree Canopy Initiatives and more!<br><br><p><span>Internships
    may be for credit or non-credit, paid or unpaid (180 hours)</span></p>
    
    <p><span>For more information and application information, visit </span><a href="www.parksandpeople.org/about/employment%20" rel="nofollow external" class="bo"><span>www.parksandpeople.org</span></a><a rel="nofollow external" class="bo"><span><span>/about/employment</span></span></a><span>or email Dr. Edward Orser, URI
    Program Manager at </span><a href="mailto:info@parksandpeople.org" rel="nofollow external" class="bo"><span>info@parksandpeople.org</span></a><span>. </span></p>
    
    <p><span>To apply,
    submit a letter of interest, resume and contact information for a faculty
    mentor or advisor to </span><a href="mailto:jobs@parksandpeople.org" rel="nofollow external" class="bo"><span>jobs@parksandpeople.org</span></a><span>. <br></span></p>
    <p>
    
    </p>
    <p><em><span>URI is a
    partnership of the Baltimore City Department of Recreation and Parks, the Parks
    &amp; People Foundation, and Area Universities</span></em></p>
    
    
    
    </div>
]]>
</Body>
<Summary>Intern with Parks &amp; People Foundation and the Baltimore City Department of Recreation and Parks this Summer!  Projects are offered in many areas:  Sustainability  Mapping  Outdoor Recreation...</Summary>
<AttachmentKind>Document</AttachmentKind>
<AttachmentUrl>https://assets3-my.umbc.edu/system/shared/attachments/7e7599397c892c03daf7d067029c2c4d/6a9f9fcb/news/000/025/428/eb6dc8aba23375061b6f07b137617096/URI Internships for Summer 2013.docx?1362716688</AttachmentUrl>
<Attachments>
<Attachment kind="Document" url="https://my3.my.umbc.edu/posts/25428/attachments/9259"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25428/guest@my.umbc.edu/45f6d807303e8ed003e6558fc5939da1/api/pixel</TrackingUrl>
<Group token="shriver">The Shriver Center</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/shriver</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/original.jpg?1441293069</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/large.png?1441293069</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/medium.png?1441293069</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/small.png?1441293069</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxsmall.png?1441293069</AvatarUrl>
<Sponsor>Shriver Center:Intern, Co-op, Research &amp; Service-Learning</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/xxlarge.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/xlarge.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/large.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/medium.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/small.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/xsmall.jpg?1362716536</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/025/428/2d02a252e43e9717a88413651fdddf4c/xxsmall.jpg?1362716536</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 07 Mar 2013 23:25:13 -0500</PostedAt>
<EditAt>Thu, 07 Mar 2013 23:26:54 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="123444" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123444">
<Title>Laura Hussey, Political Science, in the Gazette</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em><a href="http://www.gazette.net/article/20130305/NEWS/130309530/1016/federal-law-x2019-s-passage-helps-frederick-domestic-violence-center&amp;template=gazette" rel="nofollow external" class="bo">The Gazette </a></em>reports that following Congressional reauthorization of the Violence Against Women Act (VAWA) Frederick’s Heartly House will be able to continue providing counseling services for victims of domestic abuse without worrying about major program cuts. Heartly House receives about $30,000 in federal funding under the law each year. House Republicans had resisted reauthorizing the legislation because it expands coverage to new groups.</p>
    <p><a href="/wp-content/uploads/2012/10/laura-hussey.jpg" rel="nofollow external" class="bo"><img alt="Laura Hussey" src="/wp-content/uploads/2012/10/laura-hussey.jpg" width="216" height="144" style="max-width: 100%; height: auto;"></a>UMBC assistant professor of political science Laura Hussey told the <em>Gazette</em> that blocking VAWA put House Republicans in a tough position. Although some stated that they opposed VAWA because they want to curb federal spending and involvement in state issues, Hussey notes that their position played into the Democratic message that Republicans are waging a “war Against women.” <a href="http://www.gazette.net/article/20130305/NEWS/130309530/1016/federal-law-x2019-s-passage-helps-frederick-domestic-violence-center&amp;template=gazette" rel="nofollow external" class="bo">Read the full article online</a>.</p>
    </div>
]]>
</Body>
<Summary>The Gazette reports that following Congressional reauthorization of the Violence Against Women Act (VAWA) Frederick’s Heartly House will be able to continue providing counseling services for...</Summary>
<Website>https://umbc.edu/stories/laura-hussey-political-science-in-the-gazette-3/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123444/guest@my.umbc.edu/5a348a10b7e9f98b4256827d9d9ffdf4/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>policy-and-society</Tag>
<Tag>politicalscience</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Thu, 07 Mar 2013 22:07:39 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26019" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26019">
<Title>Streamline your Process with Volo</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30465&amp;c=1707539693" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30465&amp;c=1707539693" alt="" style="max-width: 100%; height: auto;"></a><p>Front-end developers face a variety of challenges when creating sites that have repetitive solutions. All sites use a similar DOM skeleton, as well as many common features and attributes. <a href="http://volojs.org/" rel="nofollow external" class="bo">Volo</a> aims to remove some of the effort out of the process, allowing developers to focus on the new aspects of a project, as apposed to the same.</p>
    <p></p>
    <blockquote><p>If you add a JavaScript file that isn’t AMD compatible, Volo will try and convert it for you.</p></blockquote>
    <p>Volo is an application that aids front-end developers by automating their processes. It lets you create projects based on a template; you can extend these templates and setup custom commands for automating repetitive tasks.</p>
    <p>Volo was created with a very special relationship to GitHub; it understands GIT repos, as well as branches and tags. There is no special Volo package or repository; if something is on GitHub, you can use it in your project. This is what sets Volo apart from similar applications.</p>
    <p>Volo was created by <a href="http://jrburke.com/" rel="nofollow external" class="bo">James Burke</a>, the same James Burke that created the very popular <a href="http://requirejs.org/" rel="nofollow external" class="bo">require.js</a> library.</p>
    <blockquote><p>It may not surprise you that Volo has a very opinionated workflow; it assumes you want to use proper AMD for files, as well as providing presets on where to put files.</p></blockquote>
    <p>Is this a bad thing? Not really–you should be doing this anyway. Besides, you can override the commands if you need to do so.</p>
    <p>So let’s begin by going through some of Volo’s commands.</p>
    <hr>
    <h2>Creating Projects</h2>
    <p>You’ll probably use the <code>create</code> command first. I mentioned that Volo is deeply rooted in GitHub, but interestingly enough, Volo doesn’t actually use GIT. You usually just want a snapshot of a repo, not its entire commit history; so Volo only downloads the repo’s files without the actual GIT data.</p>
    <p>The simplest method of referencing a template is to just provide the repo’s name. For example, if you want to copy a repo named ‘starterTemplate’, you can simply type the following command:</p>
    <pre>volo create myApp starterTemplate</pre>
    <p>Assuming the repo is the first result returned by GitHub, Volo will download and “install” the template to a new directory called <code>myApp</code>.</p>
    <p>This is a little risky, especially if you prefer to name your repos with very generic titles. Thankfully, you can specify more details to narrow the result set. The filtering system is fairly advanced when it comes to deciphering your input. Basically, you can use:</p>
    <pre>volo create appName userName/repoName/[branch|tag]</pre>
    <p>You can also omit certain pieces of information. For example, you can omit the GitHub user name, causing Volo to search for the first project with the given name and branch.</p>
    <blockquote><p>Alternatively, you can specify the user name but omit the version/branch, and Volo will download the latest tagged version.</p></blockquote>
    <p>If no tags are found, Volo falls back to the master branch.</p>
    <p>Furthermore, you’re not required to specify an exact version. Typing an expression like “<code>&gt;1.0</code>” tells Volo to download a version greater than 1.0.</p>
    <p>Last but not least, you don’t have to use a repo from Github; you simply pass the URL to the zip archive you want to use as your template. To copy a local folder, you can use the following format:</p>
    <pre>local:/path/to/directory</pre>
    <p>So there are a variety of options you can use to select your desired repo, and you can even omit the repo name to use Volo’s own <a href="https://github.com/volojs/create-template" rel="nofollow external" class="bo">default template</a>.</p>
    <hr>
    <h2>Searching and Retrieving Repo Information</h2>
    <p>Unsure who the owner of a popular repo is? Use the <code>search</code> command.</p>
    <pre>volo search repoName</pre>
    <p>It uses the same GitHub search as <code>create</code>; so you can be sure that the first repo in your search results is the repo Volo will download.</p>
    <p>The <code>search</code> command is only for finding a repo or retrieving its information. As a result, it lacks some of the functionality found in the <code>create</code> command. For example, James created a few official templates that you can use, but you may not know their names.</p>
    <blockquote><p>Executing <code>volo search volojs/template</code> displays a few good options to use.</p></blockquote>
    <p>You don’t have to be too accurate with your search criteria; Volo does a decent job finding what you want. It’s surprisingly fast.</p>
    <p>If you want more infoformation about a repo, such as version numbers or links, you can use the appropriately named <code>info</code> command. One of the results from <code>volo search volojs/template</code> is a repo named ‘volojs/create-responsive-template’. You can retrieve more information about this repo by typing:</p>
    <pre>volo info volojs/create-responsive-template</pre>
    <p>Using the <code>create</code>, <code>search</code>, and <code>info</code> commands, we can assume that we created our app. So what’s next?</p>
    <hr>
    <h2>Adding Files</h2>
    <p>Next, we need to add dependencies. This is fairly easy, and it uses the same options as the <code>create</code> command with a few additions. Besides being able to specify a GitHub user, branch/tag or URL to a zip, the <code>add</code> command lets you append “<code>#&lt;filename&gt;</code>” to intall a specific file from the repo. Many repos tend to have the JaveScript library that you want, but it is packaged together with demos and documentation. More often than not, you want just the library, and the <code>add</code> command lets you do this.</p>
    <p>Let’s pretend you want to download a library called ‘foo.js’. You can simply type:</p>
    <pre>volo add user/fooRepo/v1.5#foo.js</pre>
    <p>This downloads the entire zip file from GitHub, extracts only the <code>foo.js</code> file and adds it to your project. This hashtag feature is not specific to filenames; you can pass a folder name to add only the specified folder to your project.</p>
    <p>Earlier I mentioned that Volo expects you to practice proper AMD. So if you add a JavaScript file that isn’t AMD compatible, Volo will try and convert it for you. The process is pretty simple.</p>
    <blockquote><p>It begins by asking what dependencies your JavaScript file uses.</p></blockquote>
    <p>You can either pass the dependecies’ names in a comma separated list, or you can optionally give them a variable name. Here is an example of what you may type for a jQuery plugin:</p>
    <pre>jquery1.9=jQuery,jqueryui&#x000A;    </pre>
    <p>This tells Volo that the specified library requires the file named <code>jquery1.9</code> and to pass it under the variable name <code>jQuery</code>. Then we add a comma to declare the next dependency: <code>jqueryui</code>.</p>
    <p>After you finish declaring your dependencies, you can declare what you want to export from your script. You don’t usually export anything in a jQuery plugin; that’s handled by jQuery itself. But if you have a JavaScript library that does need to export something, you would just type the name of the desired variable in your script. You can use this conversion feature on the fly with the <code>amdify</code> command:</p>
    <pre>volo amdify &lt;filename&gt;</pre>
    <p>Just pass the desired filename.</p>
    <p>You can also automatically rename a downloaded file. For example, you may want to add a file named <code>jquery.pluginName.1.3.min.js</code>, but it’s not a convenient file to reference in your scripts. You can pass a new name as the final parameter to the <code>add</code> command, and Volo will rename the file.</p>
    <p>To sum up, we can install this pseudo jQuery plugin from within a repo by typing the following:</p>
    <pre>volo add userName/RepoName/v1.3#jquery.pluginName.1.3.min.js newName.js</pre>
    <p>Volo will download the specified repo, extract only the given file for the plugin, ask you how to convert it to be AMD compliant and place it in your project under the new name. It’s a lot of control and automation in a very easy to use command.</p>
    <p>Now let’s move on to Volofiles.</p>
    <hr>
    <h2>Volofiles</h2>
    <p>Volofiles allow you to automate tasks by creating macro-like commands. For example, CoffeeScript and SCSS users may manually issue the following commands to compile their files:</p>
    <pre>coffee -c coffee-lib/ -o lib/&#x000A;    coffee -c app.coffee&#x000A;    sass css/main.scss css/main.css</pre>
    <p>This is a lot of commands to repeatedly execute. Naturally, one can add these commands to a bash file, but automating multiple operations more than likely involves a semi-complicated bash file or multiple bash files. With Volo, you create a file named <code>volofile</code>. Inside this file, you create a JavaScript object that contains the commands you want to execute. Then you can simply call the them as if they were native commands.</p>
    <p>Here is a sample <code>volofile</code> using common parameters:</p>
    <pre>module.exports = {&#x000A;    	'hi': {&#x000A;    		'summary' : 'A command to say Hello',&#x000A;    &#x000A;    		'doc' : 'Enter Doc Text Here or Load a file',&#x000A;    &#x000A;    		'validate' : function(namedArgs, arg1){&#x000A;    			if(namedArgs.cancel == "true"){&#x000A;    				return new Error('The "cancel" parameter has been set');&#x000A;    			}&#x000A;    		},&#x000A;    &#x000A;    		'run' : [&#x000A;    			'echo "Hello World"',&#x000A;    			'echo "How are you Today?"'&#x000A;    		]&#x000A;    	},&#x000A;    	'nextCommand' : {&#x000A;    		…&#x000A;    	}&#x000A;    }</pre>
    <p>You could then type <code>volo -h</code> to view these commands and their summary. Entering <code>volo hi -h</code> shows whatever is in the <code>doc</code> field. The <code>validate</code> key is optional, and you can use it for testing purposes to optionally exit if there is a problem. Last but not least, we have the <code>run</code> property, which contains the list of command to execute. You can enter a simple string or an array of strings, and Volo will process and run each one accordingly.</p>
    <p>With the above command, I would be able to type:</p>
    <pre>volo hi</pre>
    <p>To get the output, or:</p>
    <pre>volo hi cancel=true</pre>
    <p>To trigger the <code>if</code> statement and exit with the provided error message. This is probably the most basic of examples, and you have many more options available when creating your own commands.</p>
    <p>I mentioned Volo processes each string in the <code>run</code> property. The above sample uses the ‘last-resort’ setting. Volo first looks for certain characteristics in your commands, and it only executes the string in the standard terminal if it cannot determine what you want. You have two options before that though, and they are named ‘<code>v</code>‘ and ‘<code>n</code>‘.</p>
    <h3>The ‘<code>v</code>‘ and ‘<code>n</code>‘ Keywords</h3>
    <p>These two keywords allow you to inject custom functionality into your run strings. If you need to read files, execute processes, or other OS-specific tasks, you want to use the ‘<code>v</code>‘ keyword. Just writing the command (e.g. <code>rm file.js</code>) only works on operating systems that support the given command. By using <code>v</code>‘s commands, you assure cross-platform support of your <code>volofile</code>. For example, you can add the following run string if you want to copy a file from one location to another:</p>
    <pre>run : 'v.copyFile file_one file_two'</pre>
    <p>This command is cross-platform. To see the full list of ‘<code>v</code>‘ options, take a look at the <a href="https://github.com/volojs/volo/blob/master/lib/v.js#L42" rel="nofollow external" class="bo">source file</a>. You can add parameters with a space (like in the terminal) instead of using brackets.</p>
    <p>Next we have the <code>n</code> keyword, which maps to executable node.js modules. If you specify a command under the <code>n</code> keyword, Volo checks if it can find the node.js executable in the current project’s private <code>node_modules</code> folder, and it falls back to the global node.js modules folder if one is not found.</p>
    <blockquote><p>Node.js, or more specifically NPM, has a very large collection of quality development tools created by many smart and creative people.</p></blockquote>
    <p>Volo leverages that enormous resource by allowing you to plugin their executables right into your Volofiles. James Burke has even created a template for creating your own node.js modules specifically for Volo, but we will get to that in a minute.</p>
    <p>An example of using the <code>n</code> keyword is the CoffeeScript module. If you want to compile a directory containing CoffeeScript files, we could write the following command:</p>
    <pre>'run' : 'n.coffee -c coffee-lib/ -o lib/'</pre>
    <p>Even if CoffeeScript isn’t globally installed, you can ensure it will run on all OSs from the local <code>node_modules</code> folder.</p>
    <p>Now you can use the command template I mentioned (<a href="https://github.com/volojs/create-command-template" rel="nofollow external" class="bo">download here</a>, by the way) to create a reusable Volo command to use in all your projects. For example, if you have a module that backs up your app, you may want to include it in all your projects.</p>
    <blockquote><p>Create a standard NPM module that exports the aforementioned properties (<code>summary</code>, <code>run</code> etc) and require the module into your Volofile.</p></blockquote>
    <p>So, with your package added to NPM, you can just type:</p>
    <pre>npm install commandName</pre>
    <p>And in your volofile, just type:</p>
    <pre>module.exports = {&#x000A;        'commandName': require('node_modules/commandName/index')&#x000A;    };</pre>
    <p>Where <code>index.js</code> is the name of your extension. Because your file exports the necessary properties, the options will be directly injected into your volofile under the given command name. I wouldn’t really call it a custom feature (it’s standard JavaScript), but it’s still nice to know you have this option.</p>
    <p>Now with the theory out of the way, let’s look into a real-world example. We’ll build an app using Volo.</p>
    <hr>
    <h2>Getting Started</h2>
    <p>Volo is a NPM package, so installing it is as simple as:</p>
    <pre>(sudo) npm install -g volo</pre>
    <p>For this article, I thought I would create a small web page for generating a map of your area, showing who the FourSquare mayors of your favorite sites. It’s not an incredible deep idea, but it will put Volo through the paces.</p>
    <p>So to begin, we need a repo. You can find a number of starter templates, created specifically for Volo, by simply searching GitHub. The default template comes with the bare necessities: a simple HTML skeleton and a JavaScript folder with an AMD barebones setup.</p>
    <blockquote><p>You also get a volofile with a build command for compiling the project’s JavaScript and CSS files.</p></blockquote>
    <p>I’m not going to use the standard template, as I would like to have a few more resources. After a quick GitHub search, I found <a href="https://github.com/volojs/create-responsive-template" rel="nofollow external" class="bo">an official template</a> that contains the defaults, the bootstrap framework, and other resources.</p>
    <p>So to create our new project (which I named ‘turf’), you can simply type the following in a terminal window:</p>
    <pre>volo create turf volojs/create-responsive-template&#x000A;    cd turf</pre>
    <p>This creates the project folder and downloads a snapshot of the specified repo. Next, to download other resources. We will obviously use jQuery, so let’s add it:</p>
    <pre>volo add jquery</pre>
    <p>We also need a way to display a map on the page. Google Maps comes to mind, so we’ll use a library named <a href="https://github.com/HPNeo/gmaps" rel="nofollow external" class="bo">gmaps</a>. The JavaScript file contains the entire library; therefore, we don’t really need the rest of the repo. Additionally, you can see that the library is stored within a variable named <code>GMaps</code>, and it requires the Google maps API as a dependency.</p>
    <blockquote><p>There is one small problem with this: the Google Maps API is not AMD compliant and is an asynchronous library.</p></blockquote>
    <p>When you load the single URL, it continues to load other resources on its own. This makes using standard require.js a problem, but there’s a plugin that handles this exact situation. It’s part of a repo called “requirejs-plugins”, but once again, we don’t need the entire repo. So, type the following in the terminal window:</p>
    <pre>volo add requirejs-plugins#src/async.js</pre>
    <p>With the async plugin, we can load our special asynchronous dependencies.</p>
    <p>We have two options to install the actual plugin:</p>
    <ul>
    <li>Convert the library to be AMD-compliant.</li>
    <li>Use require.js’ shim feature for adding non-AMD files.</li>
    </ul>
    <p>I’ll show you how to use both options. To convert the file, just add it. Volo will automatically detect that the file needs to be converted:</p>
    <pre>volo add HPNeo/gmaps#gmaps.js</pre>
    <blockquote><p>Volo was created with a very special relationship to GitHub; it understands GIT repos, as well as branches and tags.</p></blockquote>
    <p>According to the project’s Github page, it relies on the google maps API. There is a small issue with entering the URL because it contains unsupported characters (the equals sign). So let’s use a placeholder; just type <code>googlemaps</code> and hit enter. Next, we need to specify what we want to export. Type <code>GMaps</code> (with the two capital letters; that’s the name of the variable) and hit enter. Volo will finish converting it and add it to the <code>js/lib</code> folder.</p>
    <p>Why the <code>js/lib</code> folder? If you take a look at the <code>package.json</code> file in the root of your project, you will see an entry called <code>baseUrl</code> under the <code>amd</code> property. This tells Volo where to put all downloaded JavaScript files. There is actually a number of locations Volo looks in to decide where to put stuff:</p>
    <ol>
    <li>
    <code>baseDir</code> property under an entry named <code>volo</code>
    </li>
    <li>
    <code>baseUrl</code> property again under <code>volo</code>
    </li>
    <li>
    <code>baseUrl</code> under <code>amd</code> like we have here</li>
    <li>a <code>js</code> folder in your current directory</li>
    <li>a <code>scripts</code> folder in your current directory</li>
    </ol>
    <p>If none of these locations exist, Volo puts the file in the current directory.</p>
    <p>With the module installed, we still need to replace the placeholder we created for the Google Maps API. Open the <code>www/js/lib/gmaps.js</code> file and replace the placeholder in the first (or second) line with the following:</p>
    <pre>async!<a href="http://maps.google.com/maps/api/js?sensor=false&amp;amp;libraries=places">http://maps.google.com/maps/api/js?sensor=false&amp;amp;libraries=places</a></pre>
    <p>This tells Volo to include the async plugin and pass it the URL for the Google Maps API.</p>
    <p>The GMaps module is now fully installed, but it requires you to enter specific longitude and latitude coordinates–something most users will not know. So we should have some kind of autocomplete plugin that converts location names to coordinates.</p>
    <p>After another quick Github search, I found a jQuery plugin called <a href="https://github.com/ubilabs/geocomplete" rel="nofollow external" class="bo">geocomplete</a> by ubilabs. It too is not AMD compliant, but we will use require.js’ shim feature. In the terminal type the following command:</p>
    <pre>volo add -amdoff ubilabs/geocomplete#jquery.geocomplete.js geocomplete</pre>
    <p>The <code>amdoff</code> option prevents Volo from converting the file, and the ending parameter renames the file from <code>jquery.geocomplete.js</code> to <code>geocomplete.js</code>. This is not mandatory, but it makes referencing it more convenient.</p>
    <p>Now open the <code>www/js/app.js</code> file, and replace the require.js config declaration at the top:</p>
    <pre>requirejs.config({&#x000A;        baseUrl: 'js/lib',&#x000A;        paths: {&#x000A;            app: '../app'&#x000A;        },&#x000A;        shim: {&#x000A;            'geocomplete' : {&#x000A;                deps: ['jquery', 'async!<a href="http://maps.google.com/maps/api/js?sensor=false&amp;amp;libraries=places">http://maps.google.com/maps/api/js?sensor=false&amp;amp;libraries=places</a>']&#x000A;            }&#x000A;        }&#x000A;    });</pre>
    <p>Just to run through the settings that were already there, <code>baseUrl</code> tells require.js where to look for relative files, and the <code>paths.app</code> option tells require.js that if a module name has a reference to a location named “app”, then to replace with what is specified (‘../app’).</p>
    <p>The <code>shim</code> section is what I added to the file. It tells require.js to first load jQuery and the Google Maps API when someone loads a file named <code>geocomplete</code>. You could optionally set another property called <code>exports</code>, the name of the variable to export. We don’t need to export anything because this is a plugin and it attaches to the jQuery object.</p>
    <p>At this point, we have the files necessary to display the map and retrieve the necessary coordinates. We haven’t written any code, but we do have all the dependencies.</p>
    <hr>
    <h2>The Outline</h2>
    <p>To begin prototyping our app, we need to write some HTML. Open up the <code>index.html</code> file and remove everything inside the body tags except the <code>&lt;script /&gt;</code> element at the bottom. You should be left with a file like the following:</p>
    <pre>&lt;!DOCTYPE html&gt;&#x000A;    &lt;html&gt;&#x000A;    &lt;head&gt;&#x000A;        &lt;meta charset="utf-8"&gt;&#x000A;        &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;&#x000A;        &lt;link href="css/app.css" rel="stylesheet"&gt;&#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;&#x000A;        &lt;script async data-main="js/app" src="js/lib/require.js" charset="utf-8"&gt;&lt;/script&gt;&#x000A;    &lt;/body&gt;&#x000A;    &lt;/html&gt;</pre>
    <p>Next, add a text input field for the search box and a placeholder for the actual map. Your new body area should look something like this:</p>
    <pre>&lt;body&gt;&#x000A;        &lt;div class="container"&gt;&#x000A;            &lt;div class="row"&gt;&#x000A;                &lt;div class="span8 offset2"&gt;&#x000A;                    &lt;div class="row text-center"&gt;&#x000A;                        &lt;input class="input-xxlarge" id="search"&gt;&#x000A;                    &lt;/div&gt;&#x000A;                    &lt;div class="row text-center"&gt;&#x000A;                        &lt;div id="map"&gt;&lt;/div&gt;&#x000A;                    &lt;/div&gt;&#x000A;                &lt;/div&gt;&#x000A;            &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;        &lt;script async data-main="js/app" src="js/lib/require.js" charset="utf-8"&gt;&lt;/script&gt;&#x000A;    &lt;/body&gt;</pre>
    <p>It’s a little more than the basics so that it conforms to bootstrap’s CSS rules. I gave the text input an ID of <code>search</code> and the map’s <code>&lt;div /&gt;</code> an ID of <code>map</code>. Now let’s open the JavaScript file.</p>
    <blockquote><p>Volo is an application that aids front-end developers by automating their processes.</p></blockquote>
    <p>I’ll break it down for those of you who are new to require.js. The primary reason to use something like require.js is to make sure your scripts’ dependencies are loaded when, and only when, your script actually needs them. This increases the overall speed of your site and simplifies your HTML files (you don’t need reference many scripts).</p>
    <p>You can see the script at the bottom of the HTML file points to the require.js library, and it also has a <code>data-main</code> attribute that automatically runs once require.js is ready.</p>
    <p>If you open <code>js/app.js</code>, our modified config section and a require statement at the bottom. Notice that you don’t need the file extension. In the index file, we referenced <code>js/app</code> (without the <code>.js</code>), and here load <code>app/main</code>.</p>
    <p>Normally, a reference to <code>app/main</code> would map to a file called <code>main.js</code> inside a folder called <code>app</code> (all relative to the <code>js/lib</code> folder). But remember in the config, we said any reference to a location called <code>app</code>, should be replaced with <code>../app</code>. Instead of searching for <code>js/lib/app/main.js</code>, require.js will retrieve <code>js/app/main.js</code>.</p>
    <p>Next, open <code>js/app/main.js</code>, remove everything and type the following:</p>
    <pre>define(['jquery', 'gmaps', 'geocomplete'], function ($, gmaps) {&#x000A;        $(document).ready(function () {&#x000A;             $("#search").geocomplete();&#x000A;        });&#x000A;    });</pre>
    <p>The first parameter is an array of our dependencies. The second is a function with parameter names for jQuery (<code>$</code>) and GMaps (<code>gmaps</code>). Remember that geocomplete is a jQuery plugin, so there’s no reason to give it a corresponding parameter..</p>
    <blockquote><p>The function passed as the second parameter executes after the dependencies finish loading.</p></blockquote>
    <p>Inside this function, we execute the <code>geocomplete()</code> method when the document is ready.</p>
    <p>You can now open the page in your browser, and if all went well, the text box should say “Enter a Location”. Start typing, and you’ll see some results.</p>
    <p>Next, we need to handle the event when a match is found, i.e. when the user presses the Enter key on a place’s name. These events are: <code>geocode:result</code> and the <code>geocode:error</code>. Add the code to handle these events:</p>
    <pre>$(document).ready(function () {&#x000A;        $("#search").geocomplete()&#x000A;        .bind("geocode:result", function(event, result){&#x000A;            //On Result&#x000A;        })&#x000A;        .bind("geocode:error", function(event, result){&#x000A;             alert("Location not Found");&#x000A;        });&#x000A;    });</pre>
    <p>The next step is to retrieve the latitude and longitude and generate a new map. The lat/long are stored in properties named <code>geometry.location.hb</code> and <code>geometry.location.ib</code>, respectively. Add the following code inside the <code>geocode:result</code> handler:</p>
    <pre>var lat = result.geometry.location.hb;&#x000A;    var lng = result.geometry.location.ib;&#x000A;    &#x000A;    var map = new gmaps({&#x000A;        div : "#map",&#x000A;        lat : lat,&#x000A;        lng : lng,&#x000A;        height : '380px' &#x000A;    });</pre>
    <p>We store the coordinates and load a new map. Creaing a map is simple: we pass the container’s ID along with the coordinates and height.</p>
    <p>You should now be able to search and display a map. Next, we need to interface with Foursquare and display the “mayors” of your city.</p>
    <hr>
    <h2>Interfacing with Foursquare</h2>
    <p>We first need an interface to the foursquare API. To save time, and to stay on topic, I created a repo that we can clone. So in the terminal window, type:</p>
    <pre>git clone <a href="https://github.com/gmanricks/MayorAPI">https://github.com/gmanricks/MayorAPI</a> www/foursquare</pre>
    <p>This downloads the repo and places it in a folder named <code>foursquare</code> under the <code>www</code> directory.</p>
    <p>Next, open <code>foursquare.php</code> and insert your client-id and client-secret into the class’ constants. If you don’t already have this information, you can get it from <a href="https://developer.foursquare.com/" rel="nofollow external" class="bo">Foursquare</a> by registering an app.</p>
    <p>The other file in the repo (<code>data.php</code>) retrieves the map coordinates via GET parameters and returns a JSON object. So to add the mayors to the map, we need to rewrite the <code>geocomplete:result</code> event handler:</p>
    <pre>.bind("geocode:result", function(event, result){&#x000A;        var lat = result.geometry.location.hb;&#x000A;        var lng = result.geometry.location.ib;&#x000A;        $.get("foursquare/data.php?lat=" + lat + "&amp;lng=" + lng, function(d){&#x000A;            var map = new gmaps({&#x000A;                div : "#map",&#x000A;                lat : lat,&#x000A;                lng : lng,&#x000A;                height : '380px' &#x000A;            });&#x000A;            var places = JSON.parse(d);&#x000A;            if(places.error){&#x000A;                alert("The rate limit has been hit");&#x000A;            }&#x000A;            else{&#x000A;                for (var index in places) {&#x000A;                    var place = places[index];&#x000A;                    if(place.mayor.photo){&#x000A;                        var html = '&lt;div class="mayor"&gt;'&#x000A;                                 +     '&lt;div class="person"&gt;'&#x000A;                                 +         '&lt;img class="img-circle img-polaroid" src="'&#x000A;                                 +               place.mayor.photo.prefix + "60x60" + place.mayor.photo.suffix &#x000A;                                 +           '" /&gt;' &#x000A;                                 +     '&lt;/div&gt;'&#x000A;                                 +     '&lt;div class="label label-inverse"&gt;' + place.mayor.name + '&lt;/div&gt;'&#x000A;                                 + '&lt;/div&gt;';&#x000A;                        map.drawOverlay({&#x000A;                            lat : place.lat,&#x000A;                            lng : place.lng,&#x000A;                            content : html&#x000A;                        });&#x000A;                    }&#x000A;                }&#x000A;            }&#x000A;        });&#x000A;    })</pre>
    <p>We first define the <code>lat</code> and <code>lng</code> variables, but instead of immediately creating the map, we wait for our Ajax request to complete. We’re making about eleven API calls behind the scenes, so it might take ten or fifteen seconds.</p>
    <p>Next, we make sure the rate limit hasn’t been hit and alert the user appropriately. Finally, we cycle through the results, adding each one to the map using a command from the GMaps library.</p>
    <p>You can now open the page and test it out; everything should work! With a little styling and some design, it could look something like this:</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/gabriel-manricks/Screenshot.png" style="max-width: 100%; height: auto;"></div>
    <hr>
    <h2>Optimizing with Volo</h2>
    <p>Our app is complete, and the last step is to optimize it. Let’s first delete the files we do not use. In the <code>js/app/</code> folder, you can remove everything but the <code>main.js</code> file. In the <code>js/lib/</code> folder, remove the files named <code>appCache.js</code> and <code>network.js</code>. You also don’t need the <code>manifest.webapp</code> file, but you could keep if you so desire.</p>
    <p>Now open the <code>volofile</code>, and you can see that the template came with a pretty complicated build command for optimizing and setting up the project’s JavaScript and CSS files. We don’t need such an elaborate script, so delete everything from the file and replace it with the following:</p>
    <pre>module.exports = {&#x000A;        'build' : {&#x000A;            'summary' : 'Command to compile the source files',&#x000A;            'run' : [&#x000A;                'v.rm www-built',&#x000A;                'v.copyDir www www-built',&#x000A;                'v.rm www-built/js',&#x000A;                'node tools/r.js -o baseUrl=www/js/lib paths.app=../app paths.requireLib=require name=app include=requireLib out=www-built/js/lib/require.js',&#x000A;                'v.rm www-built/css',&#x000A;                'node tools/r.js -o cssIn=www/css/app.css out=www-built/css/app.css'&#x000A;            ]&#x000A;        }&#x000A;    };</pre>
    <blockquote><p>Volo is an omni-tool: you get what you put into it.</p></blockquote>
    <p>This is much more simple. Here, we create a command named <code>build</code> that removes the previous built folde if it exists. It then copies the entire <code>www</code> folder as a base for our compiled version. Next, we delete the <code>js</code> directory (we’ll replace it with the optimized version).</p>
    <p>Then we run require.js’ optimizer to compile the JavaScript files into a single file. You may notice it renames the final product to <code>require.js</code>; this is kind of a “hack” because it’s not really the require.js library. But since our HTML file has a reference to <code>require.js</code> already, it’s easier to rename the Javascript file than to parsing all HTML files and change the script references.</p>
    <p>Once that command completes, we remove the CSS folder (again to replace it with the optimized version). And last but not least, we run the require.js optimizer again, this time for the CSS.</p>
    <p>You can now execute <code>volo build</code> from your terminal window and Volo will run this series of commands.</p>
    <p>In your browser, you can navigate to the <code>www-built</code> folder instead of the <code>www</code> folder to make sure it still works. On my computer, building the project cut the file size in half, from just under a megabyte to ~400kb. You can probably get it even smaller if you minify the CSS.</p>
    <hr>
    <h2>Summary</h2>
    <p>In this article, I taught you Volo’s syntax and we built an example application. We learned how to use Volo to create a project, add dependencies, add custom commands for automating common tasks and optimize an entire project.</p>
    <p>To sum up, Volo is an omni-tool: you get what you put into it. You have a few, but powerful, commands, but Volo’s true power comes from it’s incredible extendibility and ultimately its community.</p>
    <p>So what do you think about Volo? Will you be creating custom Volo commands? Leave a comment with your questions and opinions.</p>
    <p>Thank you for reading.</p>
    </div>
]]>
</Body>
<Summary>Front-end developers face a variety of challenges when creating sites that have repetitive solutions. All sites use a similar DOM skeleton, as well as many common features and attributes. Volo...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/WCK1cRuup2w/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26019/guest@my.umbc.edu/5678cb8fde8749aa16e742545489a51a/api/pixel</TrackingUrl>
<Tag>automation</Tag>
<Tag>build</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tools-and-tips</Tag>
<Tag>tutorials</Tag>
<Tag>volo</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>Thu, 07 Mar 2013 19:51:28 -0500</PostedAt>
<EditAt>Thu, 07 Mar 2013 19:51:28 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="25797" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25797">
<Title>Client-Hints</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>We all know UA sniffing sucks. But it's really common because there is a real need to know stuff about the browser on the other end when serving up content and resources. What if instead of just a UA string, we got information about the browser in the headers as well? Client-Hints aims to be that. It's in the RFC (Request for Comments) stage now and there is <a href="https://github.com/igrigorik/http-client-hints/issues/3" rel="nofollow external" class="bo">great discussion</a> about what kind of information it should be making available.</p>
    <p><a href="https://github.com/igrigorik/http-client-hints/" title="Direct link to featured article" rel="nofollow external" class="bo">Direct Link to Article</a> — <a href="http://css-tricks.com/client-hints/" rel="nofollow external" class="bo">Permalink</a></p>
    <hr>
    
    <p>The CSS-Tricks feed is sponsored by Wufoo, the best online form builder there is. I use it on every project I've done as long as I've been a web worker. Quickly build any type of form you need, from the humble contact form to the epic multi-page, logic-riddled, mobile-friendly, custom-designed, spam-protected, payment-taking super form. <a href="http://www.wufoo.com/?utm_source=csstricks&amp;utm_medium=ppc&amp;cmpid=brand&amp;utm_network=d&amp;utm_term=csstricksrss" rel="nofollow external" class="bo">Try Wufoo for free today!</a></p>
    
    <p><small><a href="http://css-tricks.com/client-hints/" rel="nofollow external" class="bo">Client-Hints</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>We all know UA sniffing sucks. But it's really common because there is a real need to know stuff about the browser on the other end when serving up content and resources. What if instead of just a...</Summary>
<Website>https://github.com/igrigorik/http-client-hints/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25797/guest@my.umbc.edu/0c560a9f8ea575edd93aced89ceda775/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>link</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>Thu, 07 Mar 2013 19:14:25 -0500</PostedAt>
<EditAt>Thu, 07 Mar 2013 19:14:25 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="110255" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110255">
<Title>Laura Hussey, Political Science, in the Gazette</Title>
<Body>
<![CDATA[
    <div class="html-content">The Gazette reports that following Congressional reauthorization of the Violence Against Women Act (VAWA) Frederick’s Heartly House will be able to continue providing counseling services for victims of domestic abuse without worrying about major program cuts. Heartly House receives about $30,000 in federal funding under the law each year. House Republicans had resisted reauthorizing the legislation because it expands coverage to new groups. UMBC assistant professor of political science Laura Hussey told the Gazette that blocking VAWA put House Republicans in a tough position. Although some stated that they opposed VAWA because they want to curb federal spending and involvement …</div>
]]>
</Body>
<Summary>The Gazette reports that following Congressional reauthorization of the Violence Against Women Act (VAWA) Frederick’s Heartly House will be able to continue providing counseling services for...</Summary>
<Website>https://news.umbc.edu/laura-hussey-political-science-in-the-gazette-3/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110255/guest@my.umbc.edu/d89400d838c49e93aeea88251d98617e/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>policy-and-society</Tag>
<Tag>politicalscience</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>Thu, 07 Mar 2013 17:07:39 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="25423" important="false" status="posted" url="https://my3.my.umbc.edu/posts/25423">
<Title>Online Microlenders Offer Capital to Young Businesses</Title>
<Body>
<![CDATA[
    <div class="html-content">An eBay merchant quadruples his revenue with help from an online microlender.</div>
]]>
</Body>
<Summary>An eBay merchant quadruples his revenue with help from an online microlender.</Summary>
<Website>http://feedproxy.google.com/~r/YoungentrepreneurcomBlog/~3/UxZ128WjVlg/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/25423/guest@my.umbc.edu/a5f5aa0c83bfff947be6fee0899f588b/api/pixel</TrackingUrl>
<Tag>business-growth-strategies</Tag>
<Tag>loans</Tag>
<Tag>money-management</Tag>
<Tag>raising-capital</Tag>
<Tag>startup-finance</Tag>
<Tag>startup-financing</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>Thu, 07 Mar 2013 17:00:28 -0500</PostedAt>
</NewsItem>

</News>
