<?xml version="1.0"?>
<News hasArchived="true" page="8970" pageCount="10793" pageSize="10" timestamp="Sat, 05 Sep 2026 01:44:16 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=8970&amp;range=30">
<NewsItem contentIssues="true" id="27197" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27197">
<Title>AASHE @ Clinton Global Initiative University</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>President Clinton launched the Clinton Global Initiative University (CGI U) in 2007 to engage the next generation of leaders on college campuses around the world. Each year, CGI U hosts a meeting where students, youth organizations, topic experts, and celebrities come together to discuss and develop innovative solutions to pressing global challenges. This year, CGI U will be held at Washington University in St. Louis from April 5 - 7, 2013, bringing together nearly 1,200 attendees to make a difference in CGI U's five focus areas: Education, Environment and Climate Change, Peace and Human Rights, Poverty Alleviation, and Public Health. <span><img src="http://www.aashe.org/files/screen_shot_2013-04-03_at_1.07.40_pm_0.png" alt="screen_shot_2013-04-03_at_1.07.40_pm_0.png" style="max-width: 100%; height: auto;"><br>
    </span></p>
    <p>We are proud to have AASHE student representatives attending and promoting the important work of campus sustainability - read more about them and their commitments below!</p>
    <p><strong>Renee Dickman - University of South Carolina Columbia</strong>. Renee's CGIU commitment is "Columbia: Swap and Save!".  The plan is designed to promote sustainability in the Columbia, SC community. With environmental concerns and economic hardship at the forefront of our nation’s challenges, this commitment will strive to tackle both issues by engaging the community in sustainable practices. The EcoReps at the University of South Carolina and their partners will engage Columbia citizens in money saving, sustainable actions such as light bulb swaps and health and earth-friendly cleaning.  Our organization will cultivate collaborative relationships with local businesses and organizations to support and host educational information sessions across Columbia, paying particular attention to low income neighborhoods.</p>
    <p><strong>Ashley Fallon - The New School</strong>. Born and raised in Breezy Point, Queens, NY, Ashley has sometimes felt a bit of an outsider as an environmentalist in a blue collar, Tea Party-like town. On October 29th, Superstorm Sandy ripped through the community, where the massive flooding caused a fire that notoriously destroyed a section of homes just a stone's throw from her house. Ashley's commitment involves taking a needs assessment of the area, determining the appropriate response, and coordinating with private corporations, nonprofits, and local/federal governments to initiate action. This project is ongoing and would hopefully serve as a disaster response template for future events.</p>
    <p><strong>Gill Matan - University of Nebraska-Lincoln</strong>. Through the Clinton Global Initiatives program, Gill is partnering with his campus to develop a campus sustainability master plan whose objectives and vision are being crafted by a panel of students and administrators.</p>
    <p><strong>Niles Barnes - Duke University/AASHE</strong>. Full time graduate student and full time AASHE staffer, Niles is promoting various AASHE initiatives and programs at the CGI U event. One specific resource that will be highlighted is the new database of <a href="http://www.aashe.org/resources/campus-sustainability-revolving-loan-funds/" rel="nofollow external" class="bo">Green Revolving Funds</a> developed in partnership with the <a href="http://www.endowmentinstitute.org/" rel="nofollow external" class="bo">Sustainable Endowments Institute</a>. With colleges and universities seeking ways to finance campus sustainability, green revolving funds can be one mechanism to provide dedicated funding for institutions to invest in energy efficiency and resource efficiency projects. In addition, Niles will be promoting AASHE's upcoming <a href="http://conference.aashe.org/2013/" rel="nofollow external" class="bo">conference</a>,  <a href="http://conference.aashe.org/2013/student-summit" rel="nofollow external" class="bo">Student Summit</a> and <a href="http://www.aashe.org/about/aashe-awards" rel="nofollow external" class="bo">Sustainability Awards Program</a>.</p>
    <p>For those not attending but who want to keep up with the action check out the below sites:<br>
    *   <a href="http://new.livestream.com/CGI/CGIU2013" rel="nofollow external" class="bo">Live stream of CGI U plenary sessions</a><br>
    *  <a href="https://twitter.com/cgiu" rel="nofollow external" class="bo"> CGI U Twitter</a> and <a href="https://www.facebook.com/cgiuniversity" rel="nofollow external" class="bo">CGI U on Facebook</a><br>
    *   <a href="https://twitter.com/AASHENews" rel="nofollow external" class="bo">AASHE Twitter</a> and <a href="https://www.facebook.com/aasheorg" rel="nofollow external" class="bo">AASHE Facebook</a></p>
    </div>
]]>
</Body>
<Summary>President Clinton launched the Clinton Global Initiative University (CGI U) in 2007 to engage the next generation of leaders on college campuses around the world. Each year, CGI U hosts a meeting...</Summary>
<Website>http://feedproxy.google.com/~r/CampusSustainabilityPerspectives/~3/bc6pVtvqA4o/aashe-clinton-global-initiative-university</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27197/guest@my.umbc.edu/4edc6de4a92f33adb2e0a1219b102d08/api/pixel</TrackingUrl>
<Tag>aashe-biz</Tag>
<Tag>co-curricular-education</Tag>
<Tag>community-engagement</Tag>
<Tag>events</Tag>
<Tag>government-and-legislation</Tag>
<Tag>international</Tag>
<Group token="sustainability">Sustainability Matters at UMBC</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/sustainability</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xsmall.png?1586269437</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/original.png?1586269437</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xxlarge.png?1586269437</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xlarge.png?1586269437</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/large.png?1586269437</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/medium.png?1586269437</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/small.png?1586269437</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xsmall.png?1586269437</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xxsmall.png?1586269437</AvatarUrl>
<Sponsor>UMBC SUSTAINABILITY</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 12:31:52 -0400</PostedAt>
<EditAt>Wed, 03 Apr 2013 12:31:52 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="27169" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27169">
<Title>Have a Burning Business Question? Ask the Expert</Title>
<Body>
<![CDATA[
    <div class="html-content">Serial entrepreneur Mike Jones wants to answer your big questions about launching and growing a small business.</div>
]]>
</Body>
<Summary>Serial entrepreneur Mike Jones wants to answer your big questions about launching and growing a small business.</Summary>
<Website>http://feedproxy.google.com/~r/YoungentrepreneurcomBlog/~3/EtI1AVDxsMc/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27169/guest@my.umbc.edu/4198b5fd220cd135170b19083f4d6fb6/api/pixel</TrackingUrl>
<Tag>angel-investors</Tag>
<Tag>ask-the-expert</Tag>
<Tag>business-management</Tag>
<Tag>mentors</Tag>
<Tag>q-and-a</Tag>
<Tag>startup-basics</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, 03 Apr 2013 12:30:48 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="27171" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27171">
<Title>What Would-Be Entrepreneurs Fear Most About Starting Up</Title>
<Body>
<![CDATA[
    <div class="html-content">An unstable income is almost always guaranteed when just starting your business, but research shows it's one of the top fears that keeps Americans from becoming entrepreneurs.<br><br><a href="http://da.feedsportal.com/r/161990928646/u/49/f/625555/c/34343/s/2a4d0136/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/161990928646/u/49/f/625555/c/34343/s/2a4d0136/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>An unstable income is almost always guaranteed when just starting your business, but research shows it's one of the top fears that keeps Americans from becoming entrepreneurs.</Summary>
<Website>http://feedproxy.google.com/~r/entrepreneur/startingabusiness/~3/fpBQRrX3ars/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27171/guest@my.umbc.edu/d90bea7a902efd19902f9925e8523e4c/api/pixel</TrackingUrl>
<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, 03 Apr 2013 12:30:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="27166" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27166">
<Title>JOB: Meet Baltimore startups looking for upcoming and recent technology grads, May 2</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="Screen Shot 2013-04-03 at 12.21.04 PM" height="292" src="//www.csee.umbc.edu/wp-content/uploads/2013/04/Screen-Shot-2013-04-03-at-12.21.04-PM.png" width="784" style="max-width: 100%; height: auto;"></p>
    <p><a href="http://betamore.com/" rel="nofollow external" class="bo">Betamore</a> is an urban campus for technology and entrepreneurship that is home to dozens of startups and entrepreneurs and located at 1111 Light St. in Baltimore's Federal Hill neighborhood. They are holding a "startup crawl" on Thusday, 2 May 2013 from 6:00pm to 9:00pm where students and recent graduates can meet with people from the Baltimore technology and startup community.</p>
    <blockquote>
    <p>"Are you a current student or recent graduate looking to enter the startup market through an internship or job? Are you a startup looking for the next best thing? Join us here at Betamore for our first Startup Crawl, an event that puts talented college and graduate students in the same room with the startup / tech community to learn the industry, create beneficial connections and discover what the Baltimore Tech community has to offer.</p>
    <p>Shake a few hands, have a couple beers, and experience how fun working for a startup can be. This event is exclusive to students and recent grads (must be less than one year out of school)."</p>
    </blockquote>
    <p>If you are interested, see their Facebook <a href="https://www.facebook.com/events/127860117403877/" rel="nofollow external" class="bo">Startup Crawl</a> event page and register for this free event.</p>
    </div>
]]>
</Body>
<Summary>Betamore is an urban campus for technology and entrepreneurship that is home to dozens of startups and entrepreneurs and located at 1111 Light St. in Baltimore's Federal Hill neighborhood. They...</Summary>
<Website>http://www.csee.umbc.edu/2013/04/job-meet-baltimore-startups-looking-for-upcoming-and-recent-technology-grads-may-2/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27166/guest@my.umbc.edu/c6727851e08e8937c930e715637cbbe5/api/pixel</TrackingUrl>
<Tag>jobs</Tag>
<Tag>news</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 12:29:31 -0400</PostedAt>
<EditAt>Tue, 23 Apr 2013 10:29:31 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="27167" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27167">
<Title>JOB: Meet Baltimore startups looking for upcoming and recent technology grads, May 2</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="Screen Shot 2013-04-03 at 12.21.04 PM" height="292" src="http://www.csee.umbc.edu/wp-content/uploads/2013/04/Screen-Shot-2013-04-03-at-12.21.04-PM.png" width="784" style="max-width: 100%; height: auto;"></p>
    <p><a href="http://betamore.com/" rel="nofollow external" class="bo">Betamore</a> is an urban campus for technology and entrepreneurship that is home to dozens of startups and entrepreneurs and located at 1111 Light St. in Baltimore's Federal Hill neighborhood. They are holding a "startup crawl" on Thusday, 2 May 2013 from 6:00pm to 9:00pm where students and recent graduates can meet with people from the Baltimore technology and startup community.</p>
    <blockquote>
    <p>"Are you a current student or recent graduate looking to enter the startup market through an internship or job? Are you a startup looking for the next best thing? Join us here at Betamore for our first Startup Crawl, an event that puts talented college and graduate students in the same room with the startup / tech community to learn the industry, create beneficial connections and discover what the Baltimore Tech community has to offer.</p>
    <p>Shake a few hands, have a couple beers, and experience how fun working for a startup can be. This event is exclusive to students and recent grads (must be less than one year out of school)."</p>
    </blockquote>
    <p>If you are interested, see their Facebook <a href="https://www.facebook.com/events/127860117403877/" rel="nofollow external" class="bo">Startup Crawl</a> event page and register for this free event.</p>
    </div>
]]>
</Body>
<Summary>Betamore is an urban campus for technology and entrepreneurship that is home to dozens of startups and entrepreneurs and located at 1111 Light St. in Baltimore's Federal Hill neighborhood. They...</Summary>
<Website>http://www.csee.umbc.edu/2013/04/job-meet-baltimore-startups-looking-for-upcoming-and-recent-technology-grads-may-2/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27167/guest@my.umbc.edu/47276e6b0aa034905c53d2e6d5a2aba2/api/pixel</TrackingUrl>
<Tag>jobs</Tag>
<Tag>news</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>2</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 12:29:31 -0400</PostedAt>
<EditAt>Tue, 23 Apr 2013 10:29:31 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="27164" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27164">
<Title>Decoding the iOS 6 SDK Available Now!</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31108&amp;c=286989909" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31108&amp;c=286989909" alt="" style="max-width: 100%; height: auto;"></a><p>Rockable Press is proud to present our latest release: <em><a href="http://rockablepress.com/books/decoding-the-ios6-sdk" rel="nofollow external" class="bo">Decoding the iOS 6 SDK</a></em>. Written by five seasoned iOS experts and packed with almost 500 pages of essential iOS 6 development fundamentals, this great new eBook will quickly get you up to speed with the iOS 6 SDK and all the fundamental changes that occurred to Xcode and the iOS device landscape in 2012. Get your copy now!<br> </p>
    <hr>
    <h2>Who This Book is For</h2>
    <p><em>Decoding the iOS 6 SDK</em> is written for intermediate iOS developers who want to quickly get up to speed with the iOS 6 SDK and all the fundamental changes that occurred to Xcode and the iOS device landscape in 2012.</p>
    <p>Beginning iOS developers who understand the fundamentals of the SDK and Xcode will also benefit from reading this work.</p>
    <p>The book follows a non-linear format that allows the reader to decide how much time to spend on any given topic. This is accomplished by dividing each chapter into a “Theoretical Overview” section and a “Tutorial Project” section.</p>
    <p>While it’s certainly possible to read the entire book from cover-to-cover (we think you’ll enjoy doing so!), it’s also possible to simply read the “Theoretical Overview” of each chapter to get a high-level understanding of the iOS 6 SDK changes, and then go back and focus in on the most relevant or interesting tutorial projects on a more selective basis.</p>
    <p>Regardless of how you approach the book, expect to learn about the most essential aspects of developing with the iOS 6 SDK, Xcode, and all the iOS devices released from Cupertino in 2012.</p>
    <hr>
    <h2>Hear From an Author…</h2>
    <p>Hello, I’m Mark Hammonds, and I’m one of the authors of <em>Decoding the iOS 6 SDK</em>.</p>
    <p>As I’m sure you know, many exciting new enhancements and changes were introduced with the release of iOS 6. These changes are all the more relevant as over 60% of iOS devices upgraded to iOS 6 within just the first month of release.</p>
    <p>In addition to a new major iOS release, developers also saw the introduction of three new iOS devices, two of which, the iPhone 5 and the iPad mini, had completely new form-factors. The iOS development workflow received many new changes as well.</p>
    <p>Xcode received 9 new releases in 2012, and the LLVM Compiler received updates that will fundamentally alter the way many of us write Objective-C code. For those who already work full-time in the industry, keeping pace with these changes can feel like a second job!</p>
    <p>The purpose of this book is to provide one convenient resource for sharpening your iOS skills and keeping pace with all the latest advances from Cupertino.</p>
    <p>The content is organized in such a fashion that you can quickly jump to the sections that matter the most to you, and that means you can spend less time simply reading about the iOS 6 SDK and more time actually building the next great iOS 6 app!</p>
    <hr>
    <h2>What the Book Covers</h2>
    <p><strong>CHAPTER 1: IOS 6 SDK ESSENTIALS by <a href="http://mobile.tutsplus.com/author/mark-hammonds/" rel="nofollow external" class="bo">Mark Hammonds</a></strong></p>
    <p>Start off by learning about all the most important changes to the iOS ecosystem and the iOS 6 SDK. The tutorial project from this chapter covers enhancements to Xcode, the LLVM Compiler, autorotation changes in iOS 6, writing backwards compatible code, and deploying to the iPhone 5, the iPad 3, and the iPad mini.</p>
    <p><strong>CHAPTER 2: UITABLEVIEW CHANGES &amp; ENHANCEMENTS by <a href="http://mobile.tutsplus.com/author/aron-bury/" rel="nofollow external" class="bo">Aron Bury</a></strong></p>
    <p>Table views are one of the most widely used components in iOS development. iOS 6 introduces several important changes to table views, including a paradigm shift for generating table view cells, the ability to provide header and footer content, and a new “pull-to-refresh” control from Apple.</p>
    <p><strong>CHAPTER 3: DATA ISOLATION CONTROLS by <a href="http://mobile.tutsplus.com/author/mark-hammonds/" rel="nofollow external" class="bo">Mark Hammonds</a></strong></p>
    <p>iOS 6 introduces several important privacy enhancements that provide more control over the level of access apps are granted to user data. This chapter demonstrates how to interact with the address book, calendars, reminders, location data, and user media using the new API calls.</p>
    <p><strong>CHAPTER 4: APPLE MAPS AND MAP KIT by <a href="http://mobile.tutsplus.com/author/aaron-crabtree/" rel="nofollow external" class="bo">Aaron Crabtree</a></strong></p>
    <p>In combination with the release of Apple Maps, Map Kit also received a significant number of API improvements and changes. This chapter will get you up-to-speed while teaching you how to build a simple app for tracking cycling routes.</p>
    <p><strong>CHAPTER 5: REMINDERS AND EVENT KIT by <a href="http://mobile.tutsplus.com/author/aaron-crabtree/" rel="nofollow external" class="bo">Aaron Crabtree</a></strong></p>
    <p>Event Kit will now allow developers to access user Reminders and set proximity or time- based alarms. Learn how to take advantage of these features and build a Dinner Reservations app.</p>
    <p><strong>CHAPTER 6: UIKIT THEMING CONTROLS by <a href="http://mobile.tutsplus.com/author/aron-bury/" rel="nofollow external" class="bo">Aron Bury</a></strong></p>
    <p>Customizing an app’s interface is a great way to stand out in the App Store. This chapter will demonstrate the many new theming capabilities provided by UIKit in iOS 6!</p>
    <p><strong>CHAPTER 7: AUTO LAYOUT FUNDAMENTALS by <a href="http://mobile.tutsplus.com/author/akiel-khan/" rel="nofollow external" class="bo">Akiel Khan</a></strong></p>
    <p>Developing applications that will look great across the 3.5” iPhone, the 4” iPhone, the iPad, and the iPad mini can be a challenge. Fortunately, Apple’s new Auto Layout system makes this much easier to accomplish, and this chapter will introduce you to the fundamentals.</p>
    <p><strong>CHAPTER 8: ADVANCED AUTO LAYOUT TECHNIQUES by <a href="http://mobile.tutsplus.com/author/akiel-khan/" rel="nofollow external" class="bo">Akiel Khan</a></strong></p>
    <p>Picking up where chapter 7 left off, this chapter will dive into more advanced Auto Layout concepts, including the the new Visual Format Language (VFL) for managing layout constraints.</p>
    <p><strong>CHAPTER 9: COLLECTION VIEW FUNDAMENTALS by <a href="http://mobile.tutsplus.com/author/bart-jacobs/" rel="nofollow external" class="bo">Bart Jacobs</a></strong></p>
    <p>With the rise of the iPad, many iOS developers have begun using advanced, grid-based layouts in their applications. The UICollectionView class makes doing so easier and more robust than ever, and collection views are sure to become a favorite tool among iOS developers.</p>
    <p><strong>CHAPTER 10: ADVANCED COLLECTION VIEW TECHNIQUES by <a href="http://mobile.tutsplus.com/author/bart-jacobs/" rel="nofollow external" class="bo">Bart Jacobs</a></strong></p>
    <p>This chapter demonstrates the versatility and genius of collection views by showcasing several of the more advanced aspects of their architecture. The tutorial project in this chapter will teach you how to build a music playlist application that pulls content from the local device music library.</p>
    <p><strong>CHAPTER 11: SOCIAL FRAMEWORK FUNDAMENTALS by <a href="http://mobile.tutsplus.com/author/bart-jacobs/" rel="nofollow external" class="bo">Bart Jacobs</a></strong></p>
    <p>The introduction of the Social Framework makes it easier than ever before to share application content on Twitter, Facebook, or Sina Weibo. This chapter will get you up to speed with the basics and teach you how to build a simple photo sharing app.</p>
    <p><strong>CHAPTER 12: ADVANCED SOCIAL FRAMEWORK TECHNIQUES by <a href="http://mobile.tutsplus.com/author/bart-jacobs/" rel="nofollow external" class="bo">Bart Jacobs</a></strong></p>
    <p>This chapter expands on the principles introduced in Chapter 11 and demonstrates how to build a basic Twitter client using a combination of the Accounts Framework and the Social Framework.</p>
    <p><strong>CHAPTER 13: STATE PRESERVATION AND RESTORATION by <a href="http://mobile.tutsplus.com/author/akiel-khan/" rel="nofollow external" class="bo">Akiel Khan</a></strong></p>
    <p>This chapter will show you how to get the most out of the new state preservation and restoration capabilities of the SDK, making it easier than ever to convey a sense of continuity and efficiency within your apps!</p>
    <p><strong>CHAPTER 14: PASS KIT FUNDAMENTALS by <a href="http://mobile.tutsplus.com/author/aaron-crabtree/" rel="nofollow external" class="bo">Aaron Crabtree</a></strong></p>
    <p>One of the most promising new additions to iOS 6 is the Passbook application. This chapter will teach you how to build a demo snowboarding ticket that interacts with Passbook and the Pass Kit framework.</p>
    <hr>
    <h2>Still Undecided?</h2>
    <p>If you’re undecided, you can <a href="http://rockable-books.s3.amazonaws.com/decoding-the-ios6-sdk/SAMPLE-Decoding-the-iOS6-SDK.zip" rel="nofollow external" class="bo">download the sample pages of the book</a> to get a feel for the layout and style!</p>
    <hr>
    <h2>Buy Now!</h2>
    <p>If you’ve heard enough and would like to pick up your own copy, you can buy <em>Decoding the iOS 6 SDK</em> by <a href="http://rockablepress.com/books/decoding-the-ios6-sdk" rel="nofollow external" class="bo">visiting the Rockable Press lander page.</a></p>
    </div>
]]>
</Body>
<Summary>Rockable Press is proud to present our latest release: Decoding the iOS 6 SDK. Written by five seasoned iOS experts and packed with almost 500 pages of essential iOS 6 development fundamentals,...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/wZvDrOfbKbc/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27164/guest@my.umbc.edu/419f6a6cb26b1b23f3a5a9cbd780d344/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>news</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 11:54:16 -0400</PostedAt>
<EditAt>Wed, 03 Apr 2013 11:54:16 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="110221" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110221">
<Title>Department of Education and CADVC Partner on Exhibit Highlighting Outreach to Area Schools</Title>
<Body>
<![CDATA[
    <div class="html-content">UMBC’s Department of Education joins the Center for Art, Design and Visual Culture (CADVC) to celebrate their year long K-12 Educational Outreach Collaboration with an art exhibition by students from their partnership schools. After experiencing the CADVC gallery and/or virtual exhibition, For All the World to See: Visual Culture and the Struggle for Civil Rights, the students were invited to create visual artwork, poetry, or prose for display at UMBC as well. Their work is a creative interpretation of the interaction between visual culture and social justice. The exhibition is featured at the UMBC Commons Mezzanine Gallery beginning with an artist’s …</div>
]]>
</Body>
<Summary>UMBC’s Department of Education joins the Center for Art, Design and Visual Culture (CADVC) to celebrate their year long K-12 Educational Outreach Collaboration with an art exhibition by students...</Summary>
<Website>https://news.umbc.edu/department-of-education-and-cadvc-partner-on-exhibit-highlighting-outreach-to-area-schools/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110221/guest@my.umbc.edu/5551f59d61bcae5da10c083bb9074de8/api/pixel</TrackingUrl>
<Tag>arts-and-culture</Tag>
<Tag>cadvc</Tag>
<Tag>cahss</Tag>
<Tag>education</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, 03 Apr 2013 11:44:33 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="27157" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27157">
<Title>Join us for ECOFEST: UMBC's Weeklong Earth Day Celebrations!</Title>
<Tagline>From April 22nd: series of ecofriendly events &amp; activities!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p><span><u>Mon 4/22 10am-2pm</u>: </span></p>
    <p><strong><span>Ecofest
    Kickoff Fair</span></strong><span> <br>
    on the Quad (rain location: lower Flat Tuesday)<br>
    Hosted by Students for Environmental Awareness<br>
    <br>
    <span><u>Mon 4/22, 4pm-5pm</u>: </span></span></p>
    <p><strong><span>Silent
    Spring in the Age of Environmental Crisis</span></strong><span><br>
    <span>at the Proscenium Theater, Performing Arts and
    Humanities Building</span><br>
    <span>Hosted by Gender &amp; Women's Studies</span><br>
    <br>
    <span><u>Tues 4/23, 4pm</u>: </span></span></p>
    <p><strong><span>Global
    Solar Technology Lecture</span></strong><span><br>
    <em>Clean Energy</em><span> Technology Incubator @bwtech
    (CETI)</span><br>
    <br>
    <span><u>Wed 4/24, 3pm</u>: </span></span></p>
    <p><strong><span>On Campus</span></strong><span></span><strong><span>Tree Planting</span></strong><span><br>
    <span>hosted by Parks &amp; People, AKA Sorority &amp;
    the Arbor Day Foundation </span><br>
    <br>
    <span><u>Thurs 4/25, 12-1pm</u>: </span></span></p>
    <p><strong><span>Sustainable
    foods brown bag lunch discussion</span></strong><br>
    <span>at Fine Arts Room 529, INDS conference room</span><br>
    <br></p>
    <p><u>Thurs 4/25, 2pm-3pm:</u></p>
    <p><strong>Herbert</strong></p>
    <p><strong>Run Greenway Tour</strong></p>
    <p>Joseph Beuys Sculpture Garden Rock Garden</p>
    <p>Hosted by Patricia La Noue</p>
    <p><u><br></u></p>
    <p><u>Fri 4/26, 12-1pm:</u></p>
    <p><strong>Bike pro tips clinic &amp;</strong></p>
    <p><strong>group ride</strong></p>
    <p>Commons Terrace, adjacent to the Quad</p>
    <p>hosted by the Cycling Club</p>
    <p><span>
    <br>
    <span><u>Fri 4/26, 12-1pm</u>: </span></span></p>
    <p><strong><span>Make Your
    Own Tree</span></strong><span></span><span><br>
    <span>Commons Mainstreet</span><br>
    <span>Hosted by Student Events Board </span></span></p>
    </div>
]]>
</Body>
<Summary>Mon 4/22 10am-2pm:   Ecofest Kickoff Fair   on the Quad (rain location: lower Flat Tuesday)  Hosted by Students for Environmental Awareness    Mon 4/22, 4pm-5pm:   Silent Spring in the Age of...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27157/guest@my.umbc.edu/90d7a58d1c4960e91b0da209f543a469/api/pixel</TrackingUrl>
<Group token="sustainability">Sustainability Matters at UMBC</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/sustainability</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xsmall.png?1586269437</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/original.png?1586269437</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xxlarge.png?1586269437</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xlarge.png?1586269437</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/large.png?1586269437</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/medium.png?1586269437</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/small.png?1586269437</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xsmall.png?1586269437</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/086/91091ac32f525d88daa6d6b721420ac1/xxsmall.png?1586269437</AvatarUrl>
<Sponsor>UMBC SUSTAINABILITY</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/xxlarge.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/xlarge.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/large.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/medium.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/small.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/xsmall.jpg?1365003825</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/027/157/039b28c0e2a52524890797e9e0f29899/xxsmall.jpg?1365003825</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 11:44:02 -0400</PostedAt>
<EditAt>Wed, 10 Apr 2013 19:22:30 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="27168" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27168">
<Title>HTML5 outpaces Flash in website vote</Title>
<Body>
<![CDATA[
    <div class="html-content">But the site's creators say they love everything equally<div><table border="0"><tbody><tr>
    <td><a href="http://share.feedsportal.com/viral/sendEmail.cfm?lang=en&amp;title=HTML5+outpaces+Flash+in+website+vote&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Fhtml5-outpaces-flash-website-vote-132662" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/emailthis2.gif" style="max-width: 100%; height: auto;"></a></td>
    <td><a href="http://res.feedsportal.com/viral/bookmark.cfm?title=HTML5+outpaces+Flash+in+website+vote&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Fhtml5-outpaces-flash-website-vote-132662" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/bookmark.gif" style="max-width: 100%; height: auto;"></a></td>
    </tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/161990931348/u/49/f/502346/c/32632/s/2a4d0a01/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/161990931348/u/49/f/502346/c/32632/s/2a4d0a01/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>But the site's creators say they love everything equally</Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/O5YZM24oLo0/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27168/guest@my.umbc.edu/0782f88f75f7562da4498b5547135887/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 11:10:03 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="27155" important="false" status="posted" url="https://my3.my.umbc.edu/posts/27155">
<Title>Building Large, Maintainable, and Testable Knockout.js Applications</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30996&amp;c=81680316" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=30996&amp;c=81680316" alt="" style="max-width: 100%; height: auto;"></a><p><a rel="nofollow external" class="bo">Knockout.js</a> is a popular open source (MIT) <a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" rel="nofollow external" class="bo">MVVM</a> JavaScript framework, created by <a href="http://blog.stevensanderson.com/" rel="nofollow external" class="bo">Steve Sandersen</a>. Its website provides great information and demos on how to build simple applications, but it unfortunately doesn’t do so for larger applications. Let’s fill in some of those gaps!</p>
    <p></p>
    <hr>
    <h2>AMD and Require.js</h2>
    <p>AMD is a JavaScript module format, and one of the most popular (if not the most) frameworks is <a href="Require.js" rel="nofollow external" class="bo">http://requirejs.org</a> by <a href="James%20Burke" rel="nofollow external" class="bo">https://twitter.com/jrburke</a>. It consists of two global functions called <code>require()</code> and <code>define()</code>, although require.js also incorporates a starting JavaScript file, such as <code>main.js</code>.</p>
    <pre>&lt;script src="js/require-jquery.min.js" data-main="js/main"&gt;&lt;/script&gt;</pre>
    <p>There are primarily two flavors of require.js: a vanilla <code>require.js</code> file and one that includes jQuery (<code>require-jquery</code>). Naturally, the latter is used predominately in jQuery-enabled websites. After adding one of these files to your page, you can then add the following code to your <code>main.js</code> file:</p>
    <pre>require( [ "<a href="https://twitter.com/jrburkeapp">https://twitter.com/jrburkeapp</a>" ], function( App ) {&#x000A;        App.init();&#x000A;    })</pre>
    <p>The <code>require()</code> function is typically used in the <code>main.js</code> file, but you can use it to directly include a module anywhere. It accepts two arguments: a list of dependencies and a callback function.</p>
    <blockquote><p>The callback function executes when all dependencies finish loading, and the arguments passed to the callback function are the objects <strong>required</strong> in the aforementioned array.</p></blockquote>
    <p>It’s important to note that the dependencies load asynchronously. Not all libraries are AMD compliant, but require.js provides a mechanism to shim those types of libraries so that they can be loaded.</p>
    <p>This code requires a module called <code>app</code>, which could look like the following:</p>
    <pre>define( [ "jquery", "ko" ], function( $, ko ) {&#x000A;        var App = function(){};&#x000A;    &#x000A;        App.prototype.init = function() {&#x000A;            // INIT ALL TEH THINGS&#x000A;        };&#x000A;    &#x000A;        return new App();&#x000A;    });</pre>
    <p>The <code>define()</code> function’s purpose is to define a <strong>module</strong>. It accepts three arguments: the name of the module (which is <strong>typically</strong> not included), a list of dependencies and a callback function. The <code>define()</code> function allows you to separate an application into many modules, each having a specific function. This promotes decoupling and separation of concerns because each module has its own set of specific responsibilities.</p>
    <h3>Using Knockout.js and Require.js Together</h3>
    <p>Knockout is AMD ready, and it defines itself as an anonymous module. You don’t need to shim it; just include it in your paths. Most AMD-ready Knockout plugins list it as “knockout” rather than “ko”, but you can use either value:</p>
    <pre>require.config({&#x000A;        paths: {&#x000A;            ko: "vendor/knockout-min",&#x000A;            postal: "vendor/postal",&#x000A;            underscore: "vendor/underscore-min",&#x000A;            amplify: "vendor/amplify"&#x000A;        },&#x000A;        shim: {&#x000A;            underscore: {&#x000A;                exports: "_"&#x000A;            },&#x000A;            amplify: {&#x000A;                exports: "amplify"&#x000A;            }&#x000A;        },&#x000A;        baseUrl: "/js"&#x000A;    });</pre>
    <p>This code goes at the top of <code>main.js</code>. The <code>paths</code> option defines a map of common modules that load with a key name as opposed to using the entire file name.</p>
    <p>The <code>shim</code> option uses a key defined in <code>paths</code> and can have two special keys called <code>exports</code> and <code>deps</code>. The <code>exports</code> key defines what the shimmed module returns, and <code>deps</code> defines other modules that the shimmed module might depend on. For example, <a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" rel="nofollow external" class="bo">jQuery Validate</a>‘s shim might look like the following:</p>
    <pre>shim: {&#x000A;        // ...&#x000A;        "jquery-validate": {&#x000A;            deps: [ "jquery" ]&#x000A;        }&#x000A;    }</pre>
    <h3>Single- vs Multi-Page Apps</h3>
    <p>It’s common to include all the necessary JavaScript in a single page application. So, you may define the configuration and the initial require of a single-page application in <code>main.js</code> like so:</p>
    <pre>require.config({&#x000A;        paths: {&#x000A;            ko: "vendor/knockout-min",&#x000A;            postal: "vendor/postal",&#x000A;            underscore: "vendor/underscore-min",&#x000A;            amplify: "vendor/amplify"&#x000A;        },&#x000A;        shim: {&#x000A;            ko: {&#x000A;                exports: "ko"&#x000A;            },&#x000A;            underscore: {&#x000A;                exports: "_"&#x000A;            },&#x000A;            amplify: {&#x000A;                exports: "amplify"&#x000A;            }&#x000A;        },&#x000A;        baseUrl: "/js"&#x000A;    });&#x000A;    &#x000A;    require( [ "<a href="https://twitter.com/jrburkeapp">https://twitter.com/jrburkeapp</a>" ], function( App ) {&#x000A;        App.init();&#x000A;    })</pre>
    <p>You might also need separate pages that not only have page-specific modules, but share a common set of modules. James Burke has <a href="https://github.com/requirejs/example-multipage-shim" rel="nofollow external" class="bo">two</a> <a href="https://github.com/requirejs/example-multipage" rel="nofollow external" class="bo">repositories</a> that implement this type of behavior.</p>
    <p>The rest of this article assumes you’re building a multi-page application. I’ll rename <code>main.js</code> to <code>common.js</code> and include the necessary <code>require.config</code> in the above example in the file. This is purely for semantics.</p>
    <p>Now I’ll require <code>common.js</code> in my files, like this:</p>
    <pre>&lt;script src="js/require-jquery.js"&gt;&lt;/script&gt;&#x000A;        &lt;script&gt;&#x000A;            require( [ "./js/common" ], function () {&#x000A;                //js/common sets the baseUrl to be js/ so&#x000A;                //can just ask for 'app/main1' here instead&#x000A;                //of 'js/app/main1'&#x000A;                require( [ "pages/index" ] );&#x000A;            });&#x000A;        &lt;/script&gt;&#x000A;    &lt;/body&gt;&#x000A;    &lt;/html&gt;</pre>
    <p>The <code>require.config</code> function will execute, requiring the main file for the specific page. The <code>pages/index</code> main file might look like the following:</p>
    <pre>require( [ "app", "postal", "ko", "viewModels/indexViewModel" ], function( app, postal, ko, IndexViewModel ) {&#x000A;        window.app = app;&#x000A;        window.postal = postal;&#x000A;    &#x000A;        ko.applyBindings( new IndexViewModel() );&#x000A;    });</pre>
    <p>This <code>page/index</code> module is now responsible for loading all the neccessary code for the <code>index.html</code> page. You can add other main files to the pages directory that are also responsible for loading their dependent modules. This allows you to break multi-page apps into smaller pieces, while avoiding unnecessary script inclusions (e.g. including the JavaScript for <code>index.html</code> in the <code>about.html</code> page).</p>
    <hr>
    <h2>Sample Application</h2>
    <p>Let’s write a sample application using this approach. It’ll display a searchable list of beer brands and let us choose your favorites by clicking on their names. Here is the app’s folder structure:</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/authors/jeremymcpeak/ko-app-folders.png" alt='"Folder structure"' style="max-width: 100%; height: auto;"></div>
    <p>Let’s first look at <code>index.html</code>‘s HTML markup:</p>
    <pre>&lt;section id="main"&gt;&#x000A;        &lt;section id="container"&gt;&#x000A;            &lt;form class="search" data-bind="submit: doSearch"&gt;&#x000A;                &lt;input type="text" name="search" placeholder="Search" data-bind="value: search, valueUpdate: 'afterkeydown'" /&gt;&#x000A;                &lt;ul data-bind="foreach: beerListFiltered"&gt;&#x000A;                    &lt;li data-bind="text: name, click: $parent.addToFavorites"&gt;&lt;/li&gt;&#x000A;                &lt;/ul&gt;&#x000A;            &lt;/form&gt;&#x000A;    &#x000A;            &lt;aside id="favorites"&gt;&#x000A;                &lt;h3&gt;Favorites&lt;/h3&gt;&#x000A;                &lt;ul data-bind="foreach: favorites"&gt;&#x000A;                    &lt;li data-bind="text: name, click: $parent.removeFromFavorites"&gt;&lt;/li&gt;&#x000A;                &lt;/ul&gt;&#x000A;            &lt;/aside&gt;&#x000A;        &lt;/section&gt;&#x000A;    &lt;/section&gt;&#x000A;    &#x000A;    &lt;!-- import("templates/list.html") --&gt;&#x000A;    &#x000A;    &lt;script src="js/require-jquery.js"&gt;&lt;/script&gt;&#x000A;    &lt;script&gt;&#x000A;        require( [ "./js/common" ], function (common) {&#x000A;            //js/common sets the baseUrl to be js/ so&#x000A;            //can just ask for 'app/main1' here instead&#x000A;            //of 'js/app/main1'&#x000A;            require( [ "pages/index" ] );&#x000A;        });&#x000A;    &lt;/script&gt;</pre>
    <h3>Pages</h3>
    <p>The structure of our application uses multiple “pages” or “mains” in a <code>pages</code> directory. These separate pages are responsible for initializing each page in the application.</p>
    <p>The <strong>ViewModels</strong> are responsible for setting up the Knockout bindings.</p>
    <h3>ViewModels</h3>
    <p>The <code>ViewModels</code> folder is where the main Knockout.js application logic lives. For example, the <code>IndexViewModel</code> looks like the following:</p>
    <pre>// <a href="https://github.com/jcreamer898/NetTutsKnockout/blob/master/lib/js/viewModels/indexViewModel.js">https://github.com/jcreamer898/NetTutsKnockout/blob/master/lib/js/viewModels/indexViewModel.js</a>&#x000A;    define( [&#x000A;        "ko",&#x000A;        "underscore",&#x000A;        "postal",&#x000A;        "models/beer",&#x000A;        "models/baseViewModel",&#x000A;        "shared/bus" ], function ( ko, _, postal, Beer, BaseViewModel, bus ) {&#x000A;    &#x000A;        var IndexViewModel = function() {&#x000A;            this.beers = [];&#x000A;            this.search = "";&#x000A;    &#x000A;            BaseViewModel.apply( this, arguments );&#x000A;        };&#x000A;    &#x000A;        _.extend(IndexViewModel.prototype, BaseViewModel.prototype, {&#x000A;            initialize: function() { // ... },&#x000A;    &#x000A;            filterBeers: function() { /* ... */ },&#x000A;    &#x000A;            parse: function( beers ) { /* ... */ },&#x000A;    &#x000A;            setupSubscriptions: function() { /* ... */ },&#x000A;    &#x000A;            addToFavorites: function() { /* ... */ },&#x000A;    &#x000A;            removeFromFavorites: function() { /* ... */ }&#x000A;        });&#x000A;    &#x000A;        return IndexViewModel;&#x000A;    });</pre>
    <p>The <code>IndexViewModel</code> defines a few basic dependencies at the top of the file, and it inherits <code>BaseViewModel</code> to initialize its members as knockout.js observable objects (we’ll discuss that shortly).</p>
    <p>Next, rather than defining all of the various ViewModel functions as instance members, underscore.js’s <code>extend()</code> function extends the <code>prototype</code> of the <code>IndexViewModel</code> data type.</p>
    <h3>Inheritance and a BaseModel</h3>
    <p>Inheritance is a form of code reuse, allowing you to reuse functionality between similar types of objects instead of rewriting that functionality. So, it’s useful to define a base model that other models or can inherit from. In our case, our base model is <code>BaseViewModel</code>:</p>
    <pre>var BaseViewModel = function( options ) {&#x000A;        this._setup( options );&#x000A;    &#x000A;        this.initialize.call( this, options );&#x000A;    };&#x000A;    &#x000A;    _.extend( BaseViewModel.prototype, {&#x000A;        initialize: function() {},&#x000A;    &#x000A;        _setup: function( options ) {&#x000A;            var prop;&#x000A;    &#x000A;            options = options || {};&#x000A;    &#x000A;            for( prop in this ) {&#x000A;                if ( this.hasOwnProperty( prop ) ) {&#x000A;                    if ( options[ prop ] ) {&#x000A;                        this[ prop ] = _.isArray( options[ prop ] ) ?&#x000A;                            ko.observableArray( options[ prop ] ) :&#x000A;                            ko.observable( options[ prop ] );&#x000A;                    }&#x000A;                    else {&#x000A;                        this[ prop ] = _.isArray( this[ prop ] ) ?&#x000A;                            ko.observableArray( this[ prop ] ) :&#x000A;                            ko.observable( this[ prop ] );&#x000A;                    }&#x000A;                }&#x000A;            }&#x000A;        }&#x000A;    });&#x000A;    &#x000A;    return BaseViewModel;</pre>
    <p>The <code>BaseViewModel</code> type defines two methods on its <code>prototype</code>. The first is <code>initialize()</code>, which should be overridden in the subtypes. The second is <code>_setup()</code>, which sets up the object for data binding.</p>
    <p>The <code>_setup</code> method loops over the properties of the object. If the property is an array, it sets the property as an <code>observableArray</code>. Anything other than an array is made <code>observable</code>. It also checks for any of the properties’ initial values, using them as default values if necessary. This is one small abstraction that eliminates having to constantly repeat the <code>observable</code> and <code>observableArray</code> functions.</p>
    <h3>The “<code>this</code>” Problem</h3>
    <p>People who use Knockout tend to prefer instance members over prototype members because of the issues with maintaining the proper value of <code>this</code>. The <code>this</code> keyword is a complicated feature of JavaScript, but it’s not so bad once fully grokked.</p>
    <p><a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this" rel="nofollow external" class="bo">From the MDN</a>:</p>
    <blockquote><p>“In general, the object bound to <code>this</code> in the current scope is determined by how the current function was called, it can’t be set by assignment during execution, and it can be different each time the function is called.”</p></blockquote>
    <p>So, the scope changes depending on HOW a function is called. This is clearly evidenced in jQuery:</p>
    <pre>var $el = $( "#mySuperButton" );&#x000A;    $el.on( "click", function() {&#x000A;        // in here, this refers to the button&#x000A;    });</pre>
    <p>This code sets up a simple <code>click</code> event handler on an element. The callback is an anonymous function, and it doesn’t do anything until someone clicks on the element. When that happens, the scope of <code>this</code> inside of the function refers to the actual DOM element. Keeping that in mind, consider the following example:</p>
    <pre>var someCallbacks = {&#x000A;        someVariable: "yay I was clicked",&#x000A;        mySuperButtonClicked: function() {&#x000A;            console.log( this.someVariable );&#x000A;        }&#x000A;    };&#x000A;    &#x000A;    var $el = $( "#mySuperButton" );&#x000A;    $el.on( "click", someCallbacks.mySuperButtonClicked );</pre>
    <p>There’s an issue here. The <code>this.someVariable</code> used inside <code>mySuperButtonClicked()</code> returns <code>undefined</code> because <code>this</code> in the callback refers to the DOM element rather than the <code>someCallbacks</code> object.</p>
    <p>There are two ways to avoid this problem. The first uses an anonymous function as the event handler, which in turn calls <code>someCallbacks.mySuperButtonClicked()</code>:</p>
    <pre>$el.on( "click", function() {&#x000A;        someCallbacks.mySuperButtonClicked.apply();&#x000A;    });&#x000A;    </pre>
    <p>The second solution uses either the <code>Function.bind()</code> or <code>_.bind()</code> methods (<code>Function.bind()</code> is not available in older browsers). For example:</p>
    <pre>$el.on( "click", _.bind( someCallbacks.mySuperButtonClicked, someCallbacks ) );</pre>
    <p>Either solution you choose will achieve the same end-result: <code>mySuperButtonClicked()</code> executes within the context of <code>someCallbacks</code>.</p>
    <h3>“<code>this</code>” in Bindings and Unit Tests</h3>
    <p>In terms of Knockout, the <code>this</code> problem can show itself when working with bindings–particularly when dealing with <code>$root</code> and <code>$parent</code>. Ryan Niemeyer wrote a <a href="https://github.com/rniemeyer/knockout-delegatedEvents" rel="nofollow external" class="bo">delegated events plugin</a> that mostly eliminates this issue. It gives you several options for specifying functions, but you can use the <code>data-click</code> attribute, and the plugin walks up your scope chain and calls the function with the correct <code>this</code>.</p>
    <pre>&lt;form class="search"&gt;&#x000A;        &lt;input type="text" name="search" placeholder="Search" data-bind="value: search" /&gt;&#x000A;        &lt;ul data-bind="foreach: beerListFiltered"&gt;&#x000A;            &lt;li data-bind="text: name, click: $parent.addToFavorites"&gt;&lt;/li&gt;&#x000A;        &lt;/ul&gt;&#x000A;    &lt;/form&gt;</pre>
    <p>In this example, <code>$parent.addToFavorites</code> binds to the view model via a <code>click</code> binding. Since the <code>&lt;li /&gt;</code> element resides inside a <code>foreach</code> binding, the <code>this</code> inside <code>$parent.addToFavorites</code> refers to an instance of a the beer that was clicked on.</p>
    <p>To get around this, the <code>_.bindAll</code> method ensures that <code>this</code> maintains its value. Therefore, adding the following to the <code>initialize()</code> method fixes the problem:</p>
    <pre>_.extend(IndexViewModel.prototype, BaseViewModel.prototype, {&#x000A;        initialize: function() { &#x000A;            this.setupSubscriptions();&#x000A;    &#x000A;            this.beerListFiltered = ko.computed( this.filterBeers, this );&#x000A;    &#x000A;            _.bindAll( this, "addToFavorites" );&#x000A;        },&#x000A;    });</pre>
    <p>The <code>_.bindAll()</code> method essentially creates an instance member called <code>addToFavorites()</code> on the <code>IndexViewModel</code> object. This new member contains the prototype version of <code>addToFavorites()</code> that is bound to the <code>IndexViewModel</code> object.</p>
    <p>The <code>this</code> problem is why some functions, such as <code>ko.computed()</code>, accepts an optional second argument. See line five for an example. The <code>this</code> passed as the second argument ensures that <code>this</code> correctly refers to the current <code>IndexViewModel</code> object inside of <code>filterBeers</code>.</p>
    <p>How would we test this code? Let’s first look at the <code>addToFavorites()</code> function:</p>
    <pre>addToFavorites: function( beer ) {&#x000A;        if( !_.any( this.favorites(), function( b ) { return b.id() === beer.id(); } ) ) {&#x000A;            this.favorites.push( beer );&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>If we use the <a href="http://visionmedia.github.com/mocha/" rel="nofollow external" class="bo">mocha</a> testing framework and <a href="https://github.com/LearnBoost/expect.js/" rel="nofollow external" class="bo">expect.js</a> for assertions, our unit test would look like the following:</p>
    <pre>it( "should add new beers to favorites", function() {&#x000A;        expect( this.viewModel.favorites().length ).to.be( 0 );&#x000A;    &#x000A;        this.viewModel.addToFavorites( new Beer({&#x000A;            name: "abita amber",&#x000A;            id: 3&#x000A;        }));&#x000A;    &#x000A;        // can't add beer with a duplicate id&#x000A;        this.viewModel.addToFavorites( new Beer({&#x000A;            name: "abita amber",&#x000A;            id: 3&#x000A;        }));&#x000A;    &#x000A;        expect( this.viewModel.favorites().length ).to.be( 1 );&#x000A;    });</pre>
    <p>To see the full unit testing setup, <a href="https://github.com/jcreamer898/NetTutsKnockout" rel="nofollow external" class="bo">check out the repository</a>.</p>
    <p>Let’s now test <code>filterBeers()</code>. First, let’s look at its code:</p>
    <pre>filterBeers: function() {&#x000A;        var filter = this.search().toLowerCase();&#x000A;    &#x000A;        if ( !filter ) {&#x000A;            return this.beers();&#x000A;        }&#x000A;        else {&#x000A;            return ko.utils.arrayFilter( this.beers(), function( item ) {&#x000A;                return ~item.name().toLowerCase().indexOf( filter );&#x000A;            });&#x000A;        }&#x000A;    },&#x000A;    </pre>
    <p>This function uses the <code>search()</code> method, which is databound to the <code>value</code> of a text <code>&lt;input /&gt;</code> element in the DOM. Then it uses the <code>ko.utils.arrayFilter</code> utility to search through and find matches from the list of beers. The <code>beerListFiltered</code> is bound to the <code>&lt;ul /&gt;</code> element in the markup, so the list of beers can be filtered by simply typing in the text box.</p>
    <p>The <code>filterBeers</code> function, being such a small unit of code, can be properly unit tested:</p>
    <pre> beforeEach(function() {&#x000A;        this.viewModel = new IndexViewModel();&#x000A;    &#x000A;        this.viewModel.beers.push(new Beer({&#x000A;            name: "budweiser",&#x000A;            id: 1&#x000A;        }));&#x000A;        this.viewModel.beers.push(new Beer({&#x000A;            name: "amberbock",&#x000A;            id: 2&#x000A;        }));&#x000A;    });&#x000A;    &#x000A;    it( "should filter a list of beers", function() {&#x000A;        expect( _.isFunction( this.viewModel.beerListFiltered ) ).to.be.ok();&#x000A;    &#x000A;        this.viewModel.search( "bud" );&#x000A;    &#x000A;        expect( this.viewModel.filterBeers().length ).to.be( 1 );&#x000A;    &#x000A;        this.viewModel.search( "" );&#x000A;    &#x000A;        expect( this.viewModel.filterBeers().length ).to.be( 2 );&#x000A;    });&#x000A;    </pre>
    <p>First, this test makes sure that the <code>beerListFiltered</code> is in fact a function. Then a query is made by passing the value of “bud” to <code>this.viewModel.search()</code>. This should cause the list of beers to change, filtering out every beer that does not match “bud”. Then, <code>search</code> is set to an empty string to ensure that <code>beerListFiltered</code> returns the full list.</p>
    <hr>
    <h2>Conclusion</h2>
    <p>Knockout.js offers many great features. When building large applications, it helps to adopt many of the principles discussed in this article to help your app’s code remain manageable, testable, and maintainable. Check out the <a href="https://github.com/jcreamer898/NetTutsKnockout" rel="nofollow external" class="bo">full sample application</a>, which includes a few extra topics such as <code>messaging</code>. It uses <a href="http://github.com/postaljs/postal.js" rel="nofollow external" class="bo">postal.js</a> as a message bus to carry messages throughout the application. Using messaging in a JavaScript application can help decouple parts of the application by removing hard references to each other. Be sure and take a look!</p>
    </div>
]]>
</Body>
<Summary>Knockout.js is a popular open source (MIT) MVVM JavaScript framework, created by Steve Sandersen. Its website provides great information and demos on how to build simple applications, but it...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/IfYJEM4gW1U/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/27155/guest@my.umbc.edu/9ffa5a86dbb4d9208250a75d7824af02/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>databinding</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>knockout</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 03 Apr 2013 11:06:11 -0400</PostedAt>
<EditAt>Wed, 03 Apr 2013 11:06:11 -0400</EditAt>
</NewsItem>

</News>
