<?xml version="1.0"?>
<News hasArchived="true" page="8198" pageCount="10737" pageSize="10" timestamp="Fri, 31 Jul 2026 00:17:14 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8198">
<NewsItem contentIssues="false" id="36876" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36876">
<Title>Movie Voting!</Title>
<Tagline>Please vote for the movies you want to see!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">We are having three movie nights the rest of the semester and we want you to <a href="https://docs.google.com/a/umbc.edu/forms/d/1WVHS8xGwGA2oXtpr3Ulrj0LWDxyL6dPXj7no1hJNTJ0/viewform#start=invite" rel="nofollow external" class="bo">vote</a> for what to watch!<div><br></div>
    <div>Please follow <a href="https://docs.google.com/a/umbc.edu/forms/d/1WVHS8xGwGA2oXtpr3Ulrj0LWDxyL6dPXj7no1hJNTJ0/viewform#start=invite" rel="nofollow external" class="bo">this link to vote</a>!</div>
    </div>
]]>
</Body>
<Summary>We are having three movie nights the rest of the semester and we want you to vote for what to watch!    Please follow this link to vote!</Summary>
<Website>https://www.facebook.com/groups/UMBCCatholicRetrievers/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36876/guest@my.umbc.edu/7a7cac2dfd1f6e83d9227d9a370e9adf/api/pixel</TrackingUrl>
<Group token="umbc-catholic">Catholic Retrievers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-catholic</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/xsmall.png?1654654954</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/original.png?1654654954</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/xxlarge.png?1654654954</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/xlarge.png?1654654954</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/large.png?1654654954</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/medium.png?1654654954</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/small.png?1654654954</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/xsmall.png?1654654954</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/290/0c1a2e4fcb6196d920a79012548ae488/xxsmall.png?1654654954</AvatarUrl>
<Sponsor>Catholic Retrievers - Catholic Campus Ministry at UMBC</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 09:35:15 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36875" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36875">
<Title>UMBC's New OutList Speaks Volumes About Community</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h5>by Susan McDonough</h5>
    <div>I organize my life with a lot of lists – names of my future children, items I forgot during the last trip to the grocery store, student papers that need grading, things to pack for the next car trip. Today, on the twenty-fifth anniversary of National Coming Out Day, in a year that saw DOMA struck down, Prop 8 invalidated, and same-sex marriages take place in Maryland, I am excited to participate in the creation of a different kind of list, the UMBC OutList, a list of faculty and staff who have chosen to identify themselves as members of UMBC’s Lesbian, Gay, Bisexual, Transgender, and Queer (LGBTQ) community.... <a href="http://umbcbreakingground.wordpress.com/2013/10/11/umbcs-new-outlist-speaks-volumes-about-community/" rel="nofollow external" class="bo">(continue reading)</a>
    </div>
    </div>
]]>
</Body>
<Summary>by Susan McDonough  I organize my life with a lot of lists – names of my future children, items I forgot during the last trip to the grocery store, student papers that need grading, things to pack...</Summary>
<Website>http://umbcbreakingground.wordpress.com/2013/10/11/umbcs-new-outlist-speaks-volumes-about-community/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36875/guest@my.umbc.edu/2848311c99d2d413c8c235304789cb04/api/pixel</TrackingUrl>
<Group token="bg">UMBC BreakingGround</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/bg</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/original.png?1360169927</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/large.png?1360169927</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/medium.png?1360169927</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/small.png?1360169927</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxsmall.png?1360169927</AvatarUrl>
<Sponsor>UMBC BreakingGround</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/xxlarge.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/xlarge.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/large.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/medium.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/small.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/xsmall.jpg?1381498310</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/036/875/e3efe0ad5b37b75621ec60cc1d3176ef/xxsmall.jpg?1381498310</ThumbnailUrl>
<PawCount>88</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 09:32:47 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36873" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36873">
<Title>Google to Sell Users&#8217; Endorsements</Title>
<Body>
<![CDATA[
    <div class="html-content">A change in its terms of service would let Google include users’ names, photos and comments in ads across the Web.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F12%2Ftechnology%2Fgoogle-sets-plan-to-sell-users-endorsements.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Google+to+Sell+Users%E2%80%99+Endorsements" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F12%2Ftechnology%2Fgoogle-sets-plan-to-sell-users-endorsements.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Google+to+Sell+Users%E2%80%99+Endorsements" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F12%2Ftechnology%2Fgoogle-sets-plan-to-sell-users-endorsements.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Google+to+Sell+Users%E2%80%99+Endorsements" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F12%2Ftechnology%2Fgoogle-sets-plan-to-sell-users-endorsements.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Google+to+Sell+Users%E2%80%99+Endorsements" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F12%2Ftechnology%2Fgoogle-sets-plan-to-sell-users-endorsements.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Google+to+Sell+Users%E2%80%99+Endorsements" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/sc/15/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965819013/u/0/f/640387/c/34625/s/325655b9/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>A change in its terms of service would let Google include users’ names, photos and comments in ads across the Web.      </Summary>
<Website>http://www.nytimes.com/2013/10/12/technology/google-sets-plan-to-sell-users-endorsements.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36873/guest@my.umbc.edu/98ed082baa8bc3c180c804b25bd75200/api/pixel</TrackingUrl>
<Tag>data-mining-and-database-marketing</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>mcdonalds-corporation-mcd-nyse</Tag>
<Tag>new</Tag>
<Tag>online-advertising</Tag>
<Tag>privacy</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 08:58:22 -0400</PostedAt>
<EditAt>Fri, 11 Oct 2013 20:36:01 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="36874" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36874">
<Title>Introversion and UX</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Angela Craven and SuAnne Hall with thoughts, interviews, and research into introversion can be an asset to the UX field. Like the majority of folks in the world of computers, I am introverted and a fairly full-tilt one at that. <a href="http://chriscoyier.net/2013/04/08/introversion/" rel="nofollow external" class="bo">My own thoughts.</a> And a funny reminder not to be <a href="http://www.dilbert.com/strips/comic/2013-10-10/" rel="nofollow external" class="bo">too obnoxious</a> about it.</p>
    <p><a href="http://uxdesign.smashingmagazine.com/2013/10/09/incorporating-quiet-into-ux-design-process/" title="Direct link to featured article" rel="nofollow external" class="bo">Direct Link to Article</a> — <a href="http://css-tricks.com/introversion-ux/" rel="nofollow external" class="bo">Permalink</a></p>
    <hr>
    
    <p><small><a href="http://css-tricks.com/introversion-ux/" rel="nofollow external" class="bo">Introversion and UX</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>Angela Craven and SuAnne Hall with thoughts, interviews, and research into introversion can be an asset to the UX field. Like the majority of folks in the world of computers, I am introverted and...</Summary>
<Website>http://uxdesign.smashingmagazine.com/2013/10/09/incorporating-quiet-into-ux-design-process/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36874/guest@my.umbc.edu/cb95adb79e5955568a85b14a606f1ab3/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>Fri, 11 Oct 2013 08:52:07 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36870" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36870">
<Title>The Chemistry-Biology Interface (CBI) Graduate Program</Title>
<Tagline>Johns Hopkins University</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <span>The CBI Program provides students with research and academic training that enables them to carry out interdisciplinary research as independent scientists. Students completing the program receive a Ph.D. in Chemical Biology.</span><div><span><br></span></div>
    <div><span>The CBI Program brings together 31 faculty members from the Schools of Arts &amp; Sciences, Engineering, Public Health and Medicine at Johns Hopkins University and provides a diverse selection of research projects for CBI students. In order to assist them in choosing a research advisor, first year graduate students are supported by a NIH Chemical Biology Training Grant. During this time the CBI students carry out three 10-week research rotations that enable them to broaden their research skills and make informed choices of research advisors.</span></div>
    </div>
]]>
</Body>
<Summary>The CBI Program provides students with research and academic training that enables them to carry out interdisciplinary research as independent scientists. Students completing the program receive a...</Summary>
<Website>http://www.cbi.jhu.edu/CBI%20Brochure%202013.pdf</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36870/guest@my.umbc.edu/9e8f1ca500db12cae15e57b6272e0837/api/pixel</TrackingUrl>
<Tag>biology</Tag>
<Tag>chemistry</Tag>
<Tag>research</Tag>
<Group token="undergradresearch">Undergraduate Research</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/undergradresearch</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xsmall.png?1600355057</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/original.jpg?1600355057</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xxlarge.png?1600355057</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xlarge.png?1600355057</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/large.png?1600355057</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/medium.png?1600355057</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/small.png?1600355057</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xsmall.png?1600355057</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/006/875606ced2b629148af4caa1a4e8dd3c/xxsmall.png?1600355057</AvatarUrl>
<Sponsor>Undergraduate Research</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/xxlarge.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/xlarge.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/large.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/medium.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/small.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/xsmall.jpg?1381494041</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/036/870/28bdfd5f057764b54c38770f95c69f2f/xxsmall.jpg?1381494041</ThumbnailUrl>
<PawCount>14</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 08:20:57 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36872" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36872">
<Title>Animated Media Queries</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>If you apply a <a href="http://css-tricks.com/almanac/properties/t/transition/" rel="nofollow external" class="bo">transition</a> on an element for a particular supported property, and that property <em>ever</em> changes, it will use that transition. If a class name on that element changes and the new class changes that property, it will transition (assuming what that class does isn't remove the transition). If JavaScript literally changes the that style property, it will transition. </p>
    <p>Likewise, if a new media query takes affect, and that media query has something in it that changes that property on that element, it will transition.  As such, there really isn't a such thing as an "animated media query" so much as elements that just transition as expected when a new media query starts affecting the page.</p>
    <h3>Simple Example</h3>
    <pre><code>.thing-that-moves {&#x000A;      position: absolute;&#x000A;      width: 100px;&#x000A;      height: 100px;&#x000A;      background: red;&#x000A;      top: 0;&#x000A;      left: 0;&#x000A;      transition: left 0.5s; /* BYO prefixes */&#x000A;    }&#x000A;    @media (min-width: 400px) {&#x000A;      left: 50px;&#x000A;    }&#x000A;    @media (min-width: 600px) {&#x000A;      left: 100px;&#x000A;    }</code></pre>
    <p>If you were to resize your browser window across those breakpoints, you'd see a red square moving around in response.</p>
    <h3>Slightly More Complex Layout Example</h3>
    <p>A few versions ago on CSS-Tricks, I had a search form that would slowly float into position using this exact technique. I've recreated that here in a somewhat simple layout, in which a few other things transition as well:</p>
    <p>See the Pen <a href="http://codepen.io/chriscoyier/pen/tynas" rel="nofollow external" class="bo">Animated Media Queries</a> by Chris Coyier (<a href="http://codepen.io/chriscoyier" rel="nofollow external" class="bo">@chriscoyier</a>) on <a href="http://codepen.io" rel="nofollow external" class="bo">CodePen</a></p>
    <p>You might have the best luck checking it out in <a href="http://codepen.io/chriscoyier/full/tynas" rel="nofollow external" class="bo">Full Page View</a>.</p>
    <p>Animated GIF of it working:</p>
    <img src="http://cdn.css-tricks.com/wp-content/uploads/2013/10/mq-animate.gif" alt="" style="max-width: 100%; height: auto;">
    <p>p.s. <a href="http://www.cockos.com/licecap/" rel="nofollow external" class="bo">LICEcap</a> is very useful for creating GIF's like that.</p>
    <h3>What else can I do?</h3>
    <p>They sky is the limit here. It's just CSS. Change and transition whatever you want. In another version of CSS-Tricks, I <a href="http://css-tricks.com/examples/TreehouseFrog/" rel="nofollow external" class="bo">drew</a> <a href="http://www.youtube.com/watch?v=jQNXtyoyHic" rel="nofollow external" class="bo">Mike the Frog</a> from <a href="http://teamtreehouse.com/redirect/css-tricks" rel="nofollow external" class="bo">Treehouse</a> out of simple <a href="http://css-tricks.com/examples/ShapesOfCSS/" rel="nofollow external" class="bo">CSS shapes</a>. When different media queries hit, Mike would <a href="http://cdn.css-tricks.com/wp-content/uploads/2013/10/allsizes_remake_29-590x442.jpg" rel="nofollow external" class="bo">change shape, color, expression, and position</a> - slowly morphing into the next state through transitions. It was well liked!</p>
    <h3>What is the browser support?</h3>
    <p>IE 9+ on the media queries. IE 10+ on the transitions. I wouldn't sweat the transitions as they are strictly funcandy only (if they don't transition, it doesn't matter, they still move). If you need deeper media query support, there is always <a href="https://github.com/scottjehl/Respond" rel="nofollow external" class="bo">Respond.js</a>.</p>
    <h3>Is there any actual reason to do this?</h3>
    <p>Poops and giggles, yo. This is purely for fun. It can be a little touch just to give your site some spirit. It would be hard to make a business case, but if your performance budget doesn't have a few bytes for funzies, I feel bad for you son.</p>
    <h3>Anything to watch out for?</h3>
    <p>If the stylesheet is parsed fast enough and the transitions get applied to an element while the page is <a href="http://www.youtube.com/watch?v=AKZ2fj8155I" rel="nofollow external" class="bo">still being laid out</a>, those transitions might be kinda obnoxious. You might want to apply them <a href="http://css-tricks.com/transitions-only-after-page-load/" rel="nofollow external" class="bo">only after the page is loaded</a>.</p>
    <hr>
    
    <p><small><a href="http://css-tricks.com/animated-media-queries/" rel="nofollow external" class="bo">Animated Media Queries</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>If you apply a transition on an element for a particular supported property, and that property ever changes, it will use that transition. If a class name on that element changes and the new class...</Summary>
<Website>http://css-tricks.com/animated-media-queries/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36872/guest@my.umbc.edu/e2e0eb236a6da992439fac4339ee4c0b/api/pixel</TrackingUrl>
<Tag>article</Tag>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 08:20:24 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36869" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36869">
<Title>25+ Kickstarter projects you won&#8217;t want to miss</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="thumbnail" src="http://netdna.webdesignerdepot.com/uploads/2013/10/thumbnail11.jpg" width="200" height="160" style="max-width: 100%; height: auto;">All creatives have great ideas, it’s what we live for; that moment of inspiration at 4am that sees you leaping from bed and rushing to your desk is the excitement that makes life worthwhile.</p> <p>Sadly, by the cold light of day, the idea that seemed so revolutionary in the early hours, rarely holds the same appeal. Do you really want to quit your job and travel round lapland photographing reindeer? Do you really want give up your day job to manufacture iPhone cases shaped like beagles? By the time we’ve showered, grabbed a coffee and headed out the door the idea has been consigned to the back of a sketchbook, usually for good.</p> <p>Of course, sometimes an idea won’t let go of you, and this collection of <a href="http://www.kickstarter.com/" rel="nofollow external" class="bo">Kickstarter projects</a> just shows what we can do if we commit to making the dream a reality.</p> <p>Some of these ideas will inspire you, some might even make you want to kick in a buck or two. Personally, I’m just glad there are people out there with the perseverance to get this far.</p> <p> </p> <h1>Macaw</h1> <p></p> <p><a href="http://www.kickstarter.com/projects/macaw/macaw-the-code-savvy-web-design-tool" rel="nofollow external" class="bo">Macaw</a> is, in the developers’ words, a next generation web design tool. If you’re sick of the Adobe subscription charges maybe this one’s for you.</p> <p> </p> <h1>Iconic: Advanced icons for the modern web</h1> <p></p> <p>Looking for a good icon set? You’d have to go a long way to beat <a href="http://www.kickstarter.com/projects/207474036/iconic-advanced-icons-for-the-modern-web?ref=category" rel="nofollow external" class="bo">Iconic.</a> Help them turn this project into a commercial venture and you can get the full set of over 200 icons at 50% off, bargain!</p> <p> </p> <h1>REZA lemonade lamp</h1> <p><a href="http://www.kickstarter.com/projects/1331096754/r-e-z-a-hand-made-by-daniel-da-costa?ref=home_location" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/resa.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>Looking for a way to brighten your desktop? Then this minimal <a href="http://www.kickstarter.com/projects/1331096754/r-e-z-a-hand-made-by-daniel-da-costa?ref=home_location" rel="nofollow external" class="bo">Lemonade Lamp</a> could be just the ticket. For around $207 you’ll get a metal and oak frame lamp with a choice of cord; but I’m seriously considering the $304 for the copper and walnut edition, exclusive to Kickstarter funders.</p> <p> </p> <h1>Glyphs &amp; Co.</h1> <p></p> <p>Struggle with grammar, or with punctuation? Even the most visual designers have to write copy sometimes. Alphonso Jordan’s goal is to help with his <a href="http://www.kickstarter.com/projects/929247815/glyphs-and-co?ref=category" rel="nofollow external" class="bo">swiss army knife for grammar.</a></p> <p> </p> <h1>Baltimore: A history, block by block</h1> <p></p> <p>Kickstarter is filled with photographic projects. But if you’re feeling philanthropic, this is a great one to support. James Singwald is <a href="http://www.kickstarter.com/projects/1514746026/baltimore-a-history-block-by-block-continued?ref=category" rel="nofollow external" class="bo">documenting streets in Baltimore</a> and this is an incredible record of a great America city as it changes. Look closely and you might see McNulty in one of those photos.</p> <p> </p> <h1>A night of graphic design straight talk with Aaron Draplin</h1> <p><a href="http://www.kickstarter.com/projects/1953226215/a-night-of-graphic-design-straight-talk-with-aaron" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/aaron-draplin.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>If you’re in or near Fort Wayne, Indiana then you want to <a href="http://www.kickstarter.com/projects/1953226215/a-night-of-graphic-design-straight-talk-with-aaron" rel="nofollow external" class="bo">jump on this.</a> On Novemeber 14th Aaron Draplin will be delivering a lecture on graphic design. With clients including the Obama administration, Nike, Adobe and Wired magazine, he’s someone worth listening to.</p> <p> </p> <h1>Nock Co. pen cases hand made in the USA</h1> <p></p> <p>Sometimes we all need to step away from the screen and work on paper, but where’s that pen you like to draw with? It could be in one of these <a href="http://www.kickstarter.com/projects/637878316/nock-co-pen-cases-hand-made-in-the-usa" rel="nofollow external" class="bo">cool hard-wearing pen cases</a> if you back this project.</p> <p> </p> <h1>Helvetica, objectified, urbanized: The complete interviews</h1> <p></p> <p>Love Helvetica? Then <a href="http://www.kickstarter.com/projects/1019019367/helvetica-objectified-urbanized-the-complete-inter?ref=category" rel="nofollow external" class="bo">this project</a> is for you. A collection of designers being interviewed about one of the world’s most popular fonts.</p> <p> </p> <h1>ProTravel carry-on</h1> <p></p> <p>A <a href="http://www.kickstarter.com/projects/minaal/protravel-carry-on-travel-faster-happier-and-more" rel="nofollow external" class="bo">backpack that packs like a suitcase.</a> Perfect for your morning commute and sure to keep your camera, laptop and other precious possessions safe.</p> <p> </p> <h1>Passive aggressive notepads</h1> <p></p> <p>Idiotic co-workers making a mess of the office? Maybe you need a <a href="http://www.kickstarter.com/projects/bustedtypewriter/solve-lifes-annoying-problems-passive-aggressive-n?ref=category" rel="nofollow external" class="bo">passive aggressive notepad.</a></p> <p> </p> <h1>Spool dock</h1> <p></p> <p>An elegant solution to too many cables, the <a href="http://www.kickstarter.com/projects/1391499881/spool-dock-the-modern-apple-dock-with-a-twist?ref=category" rel="nofollow external" class="bo">Spool Dock</a> is a beautifully simple idea that would look good realized on any desk.</p> <p> </p> <h1>The Brooklyn bridge in letterpress type</h1> <p></p> <p>Who doesn’t love letterpress? If you’ve got a blank space on your office wall then a <a href="http://www.kickstarter.com/projects/cameronmoll/the-brooklyn-bridge-in-letterpress-type?ref=category" rel="nofollow external" class="bo">letterpress poster</a> of the iconic Brooklyn bridge designed entirely in type, is the perfect way to fill it.</p> <p> </p> <h1>Timbre: redefining the desktop speaker</h1> <p></p> <p>With audio design becoming and increasingly important, you’re going to want to make sure that you have some great speakers to work with. <a href="http://www.kickstarter.com/projects/673522836/timbre-redefining-the-desktop-speaker" rel="nofollow external" class="bo">This innovative design</a> not only sounds great, it looks great too.</p> <p> </p> <h1>360 panoramic photography</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/10/360pan.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/360pan.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>Every once in a while an idea of unadulterated genius is delivered unto us. <a href="http://www.kickstarter.com/projects/263612668/one-shot-360-panoramic-photos" rel="nofollow external" class="bo">This is one such idea.</a> Use the panoramic software on your camera phone? Absolutely not, what you need is a curved mirror. Brilliant.</p> <p> </p> <h1>The tastiest cord solution</h1> <p></p> <p>If you’re anything like me, the top drawer of your desk is overflowing with cables of all kinds. <a href="http://www.kickstarter.com/projects/macadaan/the-tastiest-cord-solution-cord-taco-cordito-cordl?ref=category" rel="nofollow external" class="bo">This tasty solution</a> is the perfect way to solve the problem. Why is it tasty? All of the solutions are named after Mexican food, delicious!</p> <p> </p> <h1>TrailPix ultralight tripod</h1> <p></p> <p>Weighing less than an iPhone, this <a href="http://www.kickstarter.com/projects/1312251870/trailpix-ultralight-tripod?" rel="nofollow external" class="bo">fantastic tripod solution</a> is ideal for securing your camera in the great outdoors, helping you get those pictures you would otherwise miss.</p> <p> </p> <h1>Colourful: A letterpress desk calendar</h1> <p><a href="http://www.kickstarter.com/projects/letterpressshoppe/colourful-a-letterpress-desk-calendar?ref=live" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/colourful.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>More letterpress, this time a lovely <a href="http://www.kickstarter.com/projects/letterpressshoppe/colourful-a-letterpress-desk-calendar?ref=live" rel="nofollow external" class="bo">calendar for 2014,</a> perfect as a Christmas gift (it’s closer than you think), or just to keep on your desk for next year.</p> <p> </p> <h1>Photoshop for illustrators and designers</h1> <p></p> <p>Looking to master Photoshop? Then look no further than <a href="http://www.kickstarter.com/projects/540031784/photoshop-for-illustrators-and-designers?ref=category" rel="nofollow external" class="bo">this video course</a> by Michael Cameneti, a tutor at Santa Monica college.</p> <p> </p> <h1>The digital tint book</h1> <p><a href="http://www.kickstarter.com/projects/1575328579/the-digtal-tint-book-project?ref=category" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/digital-tint.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>Looking for an alternative to those expensive Pantone color references? Check out <a href="http://www.kickstarter.com/projects/1575328579/the-digtal-tint-book-project?ref=category" rel="nofollow external" class="bo">this great project</a> aiming to catalogue 20,736 tints.</p> <p> </p> <h1>The artiest iPhone cases</h1> <p></p> <p>There are iPhone cases on every shopping mall, but very few are as attractive as <a href="http://www.kickstarter.com/projects/493251093/the-artiest-iphone-cases?ref=bdbv5y" rel="nofollow external" class="bo">these gems</a> by Lauren Simkin Berke.</p> <p> </p> <h1>SideCar: Laptop to tablet connector</h1> <p><a href="http://www.kickstarter.com/projects/10239846/sidecar-laptop-to-tablet-connector" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/venos.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p>This <a href="http://www.kickstarter.com/projects/10239846/sidecar-laptop-to-tablet-connector" rel="nofollow external" class="bo">ingenious design</a> allows you to position a tablet alongside a laptop screen for dual-screen productivity.</p> <p> </p> <h1>AppsAmuck: 30 online iPhone app lessons</h1> <p></p> <p>Maybe you’re looking to move into iOS development, and if you are, there’s no better way to learn than by example. This <a href="http://www.kickstarter.com/projects/1872716611/appsamuck-over-30-new-online-iphone-app-developmen" rel="nofollow external" class="bo">series of videos</a> will give you a flying start.</p> <p> </p> <h1>Polar pen</h1> <p></p> <p>Another ingenious device, <a href="http://www.kickstarter.com/projects/1171695627/polar-pen-both-tool-and-toy-pen-stylus-made-from-m" rel="nofollow external" class="bo">this pen</a> is made from 10 separate magnetic parts, providing an incredible set of options.</p> <p> </p> <h1>Beastgrip, universal lens adapter for camera phones</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/10/beastgrip.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/beastgrip.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.kickstarter.com/projects/107650693/beastgrip-universal-lens-adapter-for-most-camera-p?ref=category" rel="nofollow external" class="bo">Beastgrip</a> is a sensational adapter that allows you to add real quality lenses directly to your camera phone, turning it into a professional photo solution.</p> <p> </p> <h1>The MultiMod Consoles</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/10/multimod.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/multimod.jpg" width="650" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.kickstarter.com/projects/fitzkits/multimod-consoles-hack-your-workspace?ref=category" rel="nofollow external" class="bo">MultiMod Consoles</a> are the ideal solution for anyone struggling to keep their desk organized. This great scaffolding will handle just about any setup.</p> <p> </p> <h1>Shadow</h1> <p></p> <p>Of course, maybe your problem isn’t acting on your dreams, maybe you have the vision and the determination; the problem is that you don’t remember those ideas when you wake. If so, then you’ll want to back <a href="http://www.kickstarter.com/projects/hunterleesoik/shadow-community-of-dreamers" rel="nofollow external" class="bo">Shadow,</a> and maybe your ideas will be up on Kickstarter next.</p> <p> </p> <p><em><strong>Will you think about backing any of these projects? Do you have your own Kickstarter project in the works? Let us know in the comments.</strong></em></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/vanillaspring-grunge-textures.html?ref=inwidget" rel="nofollow external" class="bo"><strong>100 Colorful Grunge Textures from Florin Gorgin – only $12!</strong></a> </td> <td> <a href="http://www.mightydeals.com/?ref=inwidget" rel="nofollow external" class="bo"><br> <img src="http://mightydeals.com/web/images/widget-logo.png" height="40" width="90" alt="25+ Kickstarter projects you wont want to miss" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2013/10/25-kickstarter-projects-you-wont-want-to-miss/" rel="nofollow external" class="bo">Source</a> <br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2F25-kickstarter-projects-you-wont-want-to-miss%2F&amp;t=25%2B+Kickstarter+projects+you+won%E2%80%99t+want+to+miss" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2F25-kickstarter-projects-you-wont-want-to-miss%2F&amp;t=25%2B+Kickstarter+projects+you+won%E2%80%99t+want+to+miss" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2F25-kickstarter-projects-you-wont-want-to-miss%2F&amp;t=25%2B+Kickstarter+projects+you+won%E2%80%99t+want+to+miss" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2F25-kickstarter-projects-you-wont-want-to-miss%2F&amp;t=25%2B+Kickstarter+projects+you+won%E2%80%99t+want+to+miss" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2F25-kickstarter-projects-you-wont-want-to-miss%2F&amp;t=25%2B+Kickstarter+projects+you+won%E2%80%99t+want+to+miss" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/176968462380/u/49/f/661066/c/35285/s/3254a11b/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176968462380/u/49/f/661066/c/35285/s/3254a11b/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>All creatives have great ideas, it’s what we live for; that moment of inspiration at 4am that sees you leaping from bed and rushing to your desk is the excitement that makes life worthwhile....</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/3254a11b/sc/4/l/0L0Swebdesignerdepot0N0C20A130C10A0C250Ekickstarter0Eprojects0Eyou0Ewont0Ewant0Eto0Emiss0C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36869/guest@my.umbc.edu/b458f486ae71a9af740ced10525b1f90/api/pixel</TrackingUrl>
<Tag>art</Tag>
<Tag>cool-kickstarter-projects</Tag>
<Tag>crowd-funding</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>illustrator</Tag>
<Tag>javascript</Tag>
<Tag>kickstarter</Tag>
<Tag>kickstarter-for-designers</Tag>
<Tag>mysql</Tag>
<Tag>oracle</Tag>
<Tag>photoshop</Tag>
<Tag>php</Tag>
<Tag>resources</Tag>
<Tag>sql</Tag>
<Tag>successful-kickstarter-projects</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 06:15:32 -0400</PostedAt>
<EditAt>Fri, 11 Oct 2013 06:15:32 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="36868" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36868">
<Title>So We Wanted To Build A File Uploader&#8230; (A Case Study)</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <table width="650">
    <tbody>
    <tr>
    <td>
    <div>
    <img src="http://statisches.auslieferung.commindo-media-ressourcen.de/advertisement.gif" alt="" style="max-width: 100%; height: auto;"><br><a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=1" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=1" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=2" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=2" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=3" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=3" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
    </td>
    </tr>
    </tbody>
    </table>
    <p>One day I discovered that I needed to design an API that would upload files from a client to a server. I work on the Russian Web mail provider at <a href="http://corp.mail.ru/en" rel="nofollow external" class="bo">Mail.Ru</a> and deal with JavaScript in all its aspects. A basic feature of any Web mail service is of course <strong>attaching a file to an email</strong>.</p>
    <p><em>Mail.ru</em> is no exception: We used to have a Flash uploader, which was rather good, but still had some problems. HTML markup, graphics, business logic and even localization were all built into it, and it made the uploader pretty bloated. Furthermore, only a Flash developer could make any changes to it. We realized that we needed to build something new and different. This article covers all of our steps in creating what we consider to be a better tool for the job.</p>
    <p>Anyone who has ever written a Flash uploader knows what problems it always brings:</p>
    <ul>
    <li>Cookies for authentication are <a href="http://forums.adobe.com/thread/221811" rel="nofollow external" class="bo">difficult to manage</a> because depending on browser and operating system they have erratic behaviour in Flash (i.e. cookies are not shared between HTTP requests and FileReference upload/download). Officially Flash supports cookies only in IE and they will not be shared among other browsers, or they will be retrieved from IE;</li>
    <li>There are assumptions that with Flash, cookies are read from Internet Explorer although it’s not officially confirmed;</li>
    <li>
    <a href="http://www.ehow.com/how_7571780_update-proxy-flash-player.html" rel="nofollow external" class="bo">Proxy settings are quite inconvenient to update</a>; with Flash, they are always retrieved from IE, independent of the browser used;</li>
    <li>Errors #<a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html#2038" rel="nofollow external" class="bo">2038</a> and #<a href="http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/runtimeErrors.html#2048" rel="nofollow external" class="bo">2048</a>, elusive errors that appear in some combinations of network settings, browser and Flash player version;</li>
    <li>AdBlock and the like (no comment).</li>
    </ul>
    <p>So, we decided that <strong>it was the right time for a change</strong>. Here’s a list of features that we wanted to have with a new approach to this problem:</p>
    <ul>
    <li>Select multiple files;</li>
    <li>Get file information (name, type and mini-type);</li>
    <li>Preview images before uploading;</li>
    <li>Resize, crop and rotate images client-side;</li>
    <li>Upload results to the server, plus <a href="http://enable-cors.org/" rel="nofollow external" class="bo">CORS</a>;</li>
    <li>Make it independent of external libraries;</li>
    <li>Make it extensible.</li>
    </ul>
    <p>Over the last four years, we’ve all read heated debates about various features and options of HTML5, including the <a href="http://caniuse.com/#search=fileapi" rel="nofollow external" class="bo">File API</a>. Many publications touch on this API, and we have a few functioning examples of it. One would think, “Here’s a tool that solves the problem.” But is it as easy as it looks?</p>
    <p>Well, let’s look at the <a href="http://top.mail.ru/browsers?id=250&amp;ago=1#sids=chrome,firefox,opera,msie,safari,others&amp;percent=0" rel="nofollow external" class="bo">browser statistics for Mail.Ru</a>. We have selected only browser versions that support the File API, although in some cases these browsers do not provide full support for the API.</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2013/10/no-full-support-API_opt.png" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2013/10/no-full-support-API_opt.png" alt="The browsers used support File API" width="300" height="219" style="max-width: 100%; height: auto;"></a></p>
    <p>The diagram shows that a bit more than a whopping 87% of browsers indeed support the File API:</p>
    <ul>
    <li>Chrome 10+</li>
    <li>Firefox 3.6+</li>
    <li>Opera 11.10+</li>
    <li>Safari 5.4+</li>
    <li>IE 10+</li>
    </ul>
    <p>Also, we shouldn’t forget about mobile browsers, which are becoming more popular by the day. Take iOS 6+, for example, which already supports the File API. However, 87% is not 100% and in our case it wasn’t feasible to entirely abandon Flash at this point.</p>
    <p>So, our task evolved to <strong>building a tool that combines two techniques (File API and Flash)</strong> and that lets the developer kind of… <em>ignore</em> the way files are actually uploaded. During the development process we decided to combine all preliminary development into a separate library (a unified API) that would work independent of the environment and could be used wherever you like, not only in our service.</p>
    <p>So let’s go into detail on a few specifics of the development process and see what we’ve built, how we built it and what we’ve learned along the way.</p>
    <h3>Retrieve File List</h3>
    <p>Basics first. Here is how files are received in HTML5. Very simple.</p>
    <pre><code>&lt;input id="file" type="file" multiple="multiple" /&gt;&#x000A;    &lt;script&gt;&#x000A;          var input = document.getElementById("file");&#x000A;          input.addEventListener("change", function (){&#x000A;               var files = input.files;&#x000A;          }, false);&#x000A;    &lt;/script&gt;&#x000A;    </code></pre>
    <p>But what do you do if you have only Flash support and no File API? The basic idea that we had for users with Flash support was to make <em>all</em> interactions go through Flash. You couldn’t simply call up a file-selection dialog. Due to the security policy, the dialog would open only after the Flash object has been clicked.</p>
    <p>This is why the Flash object would be positioned above your target input. Then, you would attach a <code>mouseover</code> event handler to the document, and put the Flash object into the input’s parent element when the user hovers over it.</p>
    <p>The user would click the Flash object, open the file-selection dialog and select a file. Data would be transferred from Flash to JavaScript using <code>ExternalInterface</code>. The JavaScript would bind the data received with the input element and emulate the <code>change</code> event.</p>
    <pre><code>&#x000A;    [[Flash]] --&gt; jsFunc([{&#x000A;         id: "346515436346", // unique identifier&#x000A;         name: "hello-world.png", // file name&#x000A;         type: "image/png", // mime-type&#x000A;         size: 43325 // file size&#x000A;       }, {&#x000A;         // etc.&#x000A;     }])&#x000A;    </code></pre>
    <p>All further interactions between JavaScript and Flash are performed through the only available method in Flash. The first argument is a command name. The second parameter is an object with two mandatory fields: the file <code>id</code> and the <code>callback</code> function. The <code>callback</code> is called from Flash once the command is executed.</p>
    <pre><code>&#x000A;    flash.cmd("imageTransform", {&#x000A;        id: "346515436346",    // file identification&#x000A;        matrix: { },    // transformation matrix&#x000A;        callback: "__UNIQ_NAME__"&#x000A;    });&#x000A;    </code></pre>
    <p>The combination of the two methods results in the API, which is very similar to native JavaScript. The only difference is in the way files are received. Now we use the API method because the input has the <code>files</code> property only when the browser supports HTML5 and the File API. In the case of Flash, the list is taken from the data associated with it.</p>
    <pre><code>&lt;span class="js-fileapi-wrapper" style="position: relative"&gt;&#x000A;        &lt;input id="file" type="file" multiple /&gt;&#x000A;    &lt;/span&gt;&#x000A;    &lt;script&gt;&#x000A;        var input = document.getElementById("file");&#x000A;        FileAPI.event.on(input, "change", function (){&#x000A;            var files = FileAPI.getFiles(input);&#x000A;        });&#x000A;    &lt;/script&gt;&#x000A;    </code></pre>
    <h3>Filter</h3>
    <p>Usually, file uploading comes with a set of restrictions. The most common restrictions are on file size, image type and dimensions (width and height). If you look around solutions for this issue, you’ll notice that validation is usually done on the server, and the user would receive an error message if the file doesn’t match any restrictions. <strong>I tried to solve this problem in another way, by validating files on the client side</strong> — before the file has started uploading.</p>
    <p>What’s the catch? The catch is that when we initially get the list of files, we have only the bare minimum of information about the files: name, size and type. To get more detailed information, we need to actually <em>read</em> the files. To do that, we can use <a href="https://developer.mozilla.org/en-US/docs/DOM/FileReader" rel="nofollow external" class="bo">FileReader</a>.</p>
    <p>So if we play around with FileReader, we’ll probably come up with the following filtering technique:</p>
    <pre><code>&#x000A;    FileAPI.filterFiles(files, function (file, info){&#x000A;        if( /^image/.test(file.type) ){&#x000A;            return info.width &gt; 320 &amp;&amp; info.height &gt; 240;&#x000A;        } else if( file.size ){&#x000A;            return file.size &lt; 10 * FileAPI.MB;&#x000A;         } else {&#x000A;             // Unfortunately, there is no support for File API or Flash. We have to validate on the server.&#x000A;             // This case is rather rare, but we must consider it as part of the project.&#x000A;             return true;&#x000A;         }&#x000A;     }, function (files, ignore){&#x000A;         if( files.length &gt; 0 ){&#x000A;            // ...&#x000A;        }&#x000A;    });&#x000A;    </code></pre>
    <p>You can get the file’s dimensions “out of the box,” as well as a way to collect all of the data you’ll need:</p>
    <pre><code>&#x000A;    FileAPI.addInfoReader(/^audio/, function (file, callback){&#x000A;        // collect required information&#x000A;        // and call it back&#x000A;        callback(&#x000A;            false,    // or error message&#x000A;            { artist: "...", album: "...", title: "...", ... }&#x000A;        );&#x000A;    });&#x000A;    </code></pre>
    <h3>Process Images</h3>
    <p>In developing the API, we also wanted a convenient and powerful tool that would allow us to work with images — to create previews, crop, rotate and resize, for example — and whose functionality would be supported in both HTML5 and Flash.</p>
    <h4>Flash</h4>
    <p>First, we needed to understand how to do this via Flash — that is, what to send to JavaScript to build the image. As we of course know, this is usually done using the data URI. Flash reads the file as Base64 and transfers it to JavaScript. So we add <code>data:image/png;base64</code> to it, and use this string as the <code>src</code>.</p>
    <p>A happy ending? Unfortunately, IE 6 and 7 do not support the data URI, and IE 8+, which supports the data URI, cannot process more than 32 KB. In this case, JavaScript would create a second Flash object and transfer the Base64-encoded content into it. This Flash object would restore the image.</p>
    <h4>HTML5</h4>
    <p>In the case of HTML5, we would get the original image first, and then perform all required transformations using the canvas. Getting the original image can be done in one of two ways. The first is to read the file as a dataURI using <code>FileReader</code>. The second is to use <a href="https://developer.mozilla.org/en-US/docs/DOM/window.URL.createObjectURL" rel="nofollow external" class="bo">URL.createObjectURL</a> to create a link to the file, which is bound to the current tab. Of course, the second option is good and is enough to generate a preview, but not all browsers support it. Opera 12, for example, does not support the accompanying <code>URL.revokeObjectURL</code>, which informs the browser that there is no need to keep a link to the file anymore.</p>
    <p>When we combine all of these methods, we get a class of <code>FileAPI.Image</code>:</p>
    <ul>
    <li><code>crop(x, y, width, height)</code></li>
    <li><code>resize(width,[height])</code></li>
    <li><code>rotate(deg)</code></li>
    <li>
    <code>preview(width, height)</code> — crop and resize</li>
    <li>
    <code>get(callback)</code> — get final image</li>
    </ul>
    <p>All of these techniques fill the transformation matrix, which is applied only when the <code>get()</code> method is called. Transformations are performed using the HTML5 <code>canvas</code> or in Flash (when the file is uploaded through the Flash interface).</p>
    <p>Here is our description of the matrix:</p>
    <pre><code>&#x000A;    {   // parameters fragment of original&#x000A;       sx: Number,&#x000A;       sy: Number,&#x000A;       sw: Number,&#x000A;       sh: Number,&#x000A;    &#x000A;       // destination size&#x000A;       dw: Number,&#x000A;       dh: Number,&#x000A;       deg: Number&#x000A;    }&#x000A;    </code></pre>
    <p>And here is a short example:</p>
    <pre><code>&#x000A;    FileAPI.Image(imageFle) // returns FileAPI.Image instance&#x000A;       .crop(300, 300)      // crop the image width and height&#x000A;       .resize(100, 100)    // resize to 100x100px&#x000A;       .get(function (err, img){&#x000A;          if( !err ){&#x000A;            // Append the result in the DOM-node (&lt;div id="images"&gt;).&#x000A;             images.appendChild(img);&#x000A;          }&#x000A;       });&#x000A;    </code></pre>
    <h4>Resize</h4>
    <p>Digital cameras emerged long ago and are still very popular. Some cost about $20 to $30 and can take photos with a resolution of 10 MP and up. We tried to downsize photos taken with such cameras, and this is what we ended up with:</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2013/10/downsize-image_opt.png" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2013/10/downsize-image_opt.png" alt="Downsizing the image one time." width="500" height="228" style="max-width: 100%; height: auto;"></a></p>
    <p>As you can see, the quality is rather poor. However, if we first resize it in half and then do it again several times until we get the desired dimensions, then the quality is much better. This method is actually quite old, and in fact a consequence of the <a href="http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation" rel="nofollow external" class="bo">“nearest neighbor” interpolation</a>; when compressing images at once, we are losing the quality of the image really “quickly”.</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2013/10/resize-image-in-half_opt.png" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2013/10/resize-image-in-half_opt.png" alt="Resize image in half several times." width="500" height="166" style="max-width: 100%; height: auto;"></a></p>
    <p>The <strong>difference is evident:</strong></p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2013/10/quality-difference-images_opt.png" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2013/10/quality-difference-images_opt.png" alt="Quality difference of images." width="429" height="172" style="max-width: 100%; height: auto;"></a></p>
    <p>Apply a slight sharpening effect, and the image will be ideal.</p>
    <p>We also tried other variations, such as bicubic interpolation and the Lanczos algorithm. The result was a bit better, but the process took more time: 1.5 seconds versus 200 to 300 milliseconds. This method also yielded the same results in canvas and Flash.</p>
    <h3>Uploading Files</h3>
    <p>Now let’s sum up our various options for uploading a file to the server.</p>
    <h4>iframe</h4>
    <p>Yes, we still use this many years later:</p>
    <pre><code>&lt;form&#x000A;       target="__UNIQ__"&#x000A;       action="/upload"&#x000A;       method="post"&#x000A;       enctype="multipart/form-data"&gt;&lt;!-- This bit is often forgotten --&gt;&#x000A;            &lt;iframe name="__UNIQ__" height="240" width="320"&gt;&lt;/iframe&gt;&#x000A;            &lt;input type="file" name="files" /&gt;&#x000A;            &lt;input type="hidden" name="foo" value="bar" /&gt;&#x000A;    &lt;/form&gt;&#x000A;    </code></pre>
    <p>At first, we create а <code>form</code> element with a nested <code>iframe</code> inside. (The <code>form</code>’s target attribute and the name of the <code>iframe</code> should be the same.) After that, we move the <code>input[type="file"]</code> into it because if you put a clone there, it will turn up empty.</p>
    <p>To illustrate this issue, imagine that you load a file via <code>iframe</code>. We could use something like this:</p>
    <pre><code>&#x000A;        var inp = document.getElementById('photo');&#x000A;        var form = getIFrameFormTransport();&#x000A;        form.appendChild(inp.cloneNode(true)); // send a "clone"&#x000A;        form.submit();&#x000A;    </code></pre>
    <p>However, such input <a href="http://webstorehouse.blogspot.ru/2009/02/clone-node-issue-in-ie.html" rel="nofollow external" class="bo">would be “empty” in IE</a>, i.e. it wouldn’t contain the selected file, which is why we need to “send” the original file and replace it with a clone.</p>
    <p>That is why we subscribe to events via API methods, to save them during cloning. Then, we call <code>form.submit()</code>, and put the contents of the form through the <code>iframe</code>. We’ll get the results using JSONP.</p>
    <pre><code>&#x000A;        var inp = document.getElementById('photo');&#x000A;        var cloneInp = inp.cloneNode(true);&#x000A;        var form = getIFrameFormTransport();&#x000A;    &#x000A;        // Insert the "clone" after the "original"&#x000A;        inp.parentNode.insertBefore(cloneInp, inp);&#x000A;    &#x000A;        form.appendChild(inp); // Send the "original&#x000A;        form.submit();&#x000A;    </code></pre>
    <p>Yes, erratic indeed.</p>
    <h4>Flash</h4>
    <p>In principle, everything is quite simple: JavaScript calls the method from the Flash object and passes the ID of the file to be uploaded. Flash, in turn, duplicates all states and events in JavaScript.</p>
    <h4>XMLHttpRequest and FormData</h4>
    <p>Now we can send binary data, not just text data. This is easy:</p>
    <pre><code>&#x000A;    // collect data to be sent     &#x000A;    var form = new FormData&#x000A;    form.append("foo", "bar"); // the first parameter is the name of POST-parameter,&#x000A;    form.append("attach", file); // the second parameter is the string, file or Blob&#x000A;    &#x000A;    // send to server&#x000A;    var  xhr = new XMLHttpRequest;&#x000A;    xhr.open("POST", "/upload", true);&#x000A;    xhr.send(form);&#x000A;    </code></pre>
    <p>What if, for example, we want to send not a file, but <code>canvas</code> data? There are two options. The first, which is easiest and correct, is to convert <code>canvas</code> to <a href="https://developer.mozilla.org/en-US/docs/Web/API/Blob" rel="nofollow external" class="bo"><code>Blob</code></a>:</p>
    <pre><code>&#x000A;    canvasToBlob(canvas, function (blob){&#x000A;        var form = new FormData&#x000A;        form.append("foo", "bar");&#x000A;        form.append("attach", blob, "filename.png"); //not all support the third parameter&#x000A;    &#x000A;        // ...&#x000A;    });&#x000A;    </code></pre>
    <p>As you can see, this trick is not universal. In case canvas doesn’t have <code>Canvas.toBlob()</code> (or it cannot be implemented), we will choose another option. This option is also good for browsers that do not support <code>FormData</code>. The point is to create the multipart request manually and then send it to the server. The code for the canvas would look like this:</p>
    <pre><code>&#x000A;    var dataURL = canvas.toDataURL("image/png"); // or result from FileReader&#x000A;    var base64 = dataURL.replace(/^data:[^,]+,/, ""); // cut the beginning&#x000A;    var binaryString = window.atob(base64); // decode Base64&#x000A;    &#x000A;    // now get together multipart, nothing complicated&#x000A;    var uniq = '1234567890';&#x000A;    var data = [&#x000A;          '--_'+ uniq&#x000A;        , 'Content-Disposition: form-data; name="my-file"; filename="hello-world.png"'&#x000A;        , 'Content-Type: image/png'&#x000A;        , ''&#x000A;        , binaryString&#x000A;        , '--_'+ uniq +'--'&#x000A;    ].join('\r\n');&#x000A;    &#x000A;    var xhr = new XMLHttpRequest;&#x000A;    xhr.open('POST', '/upload', true);&#x000A;    xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=_'+uniq);&#x000A;    &#x000A;    if( xhr.sendAsBinary ){&#x000A;      xhr.sendAsBinary(data);&#x000A;    } else {&#x000A;      var bytes = Array.prototype.map.call(data, function(c){&#x000A;         return c.charCodeAt(0) &amp; 0xff; &#x000A;      });&#x000A;      xhr.send(new Uint8Array(bytes).buffer);&#x000A;    }&#x000A;    </code></pre>
    <p>Finally, our efforts result in the following method:</p>
    <pre><code>&#x000A;    var xhr = FileAPI.upload({&#x000A;       url:  '/upload',&#x000A;       data:  { foo: 'bar' },&#x000A;       headers:  { 'Session-Id': '...' },&#x000A;       files:   { images: imageFiles, others: otherFiles },&#x000A;       imageTransform:  { maxWidth: 1024, maxHeight: 768 },&#x000A;       upload: function (xhr){},&#x000A;       progress: function (event, file){},&#x000A;       complete: function (err, xhr, file){},&#x000A;       fileupload: function (file, xhr){},&#x000A;       fileprogress: function (event, file){},&#x000A;       filecomplete: function (err, xhr, file){}&#x000A;    });&#x000A;    </code></pre>
    <p>This has a lot of parameters, but the most important one is <code>imageTransform</code>. It transforms images on the client, and it operates via both Flash and HTML5.</p>
    <p>And that’s not even half of the story. We can have multiple <code>imageTransforms</code>:</p>
    <pre><code>&#x000A;    {&#x000A;         huge:   { maxWidth: 800, maxHeight: 600, rotate: 90 },&#x000A;         medium: { width: 320, height: 240, preview: true },&#x000A;         small:  { width: 100, height: 120, preview: true }&#x000A;    }&#x000A;    </code></pre>
    <p>This means that three copies (besides the original) will be sent to the server. What for? If you can <strong>transfer the load from the server to the client</strong>, it’s a good idea to do it. The server should probably only minimally validate input files. First of all, you are not only removing the load, but also avoid logic on the server, completely moving it to the client.</p>
    <p>Second, if the file doesn’t have to get uploaded to the server, we save bandwidth. In addition, there are often problems when it isn’t possible to make further processing on the server, such as integration with third-party services (Amazon S3, for example). In our experience, it’s OK to move the additional logic that previously was managed server-side to the client.</p>
    <p>The upload function also calls back an <code>XMLHttpRequest</code>-like object; that is, it assumes some properties and methods of <code>XMLHttpRequest</code>, such as:</p>
    <ul>
    <li>
    <code>status</code><br>
    HTTP status code</li>
    <li>
    <code>statusText</code><br>
    HTTP status text</li>
    <li>
    <code>responseText</code><br>
    server’s reply</li>
    <li>
    <code>getResponseHeader(name)</code><br>
    get header of the server’s reply</li>
    <li>
    <code>getAllResponseHeaders()</code><br>
    get all headers</li>
    <li>
    <code>abort()</code><br>
    abort upload</li>
    </ul>
    <p>Although HTML5 allows you to upload several files in one request, standard Flash allows only file-by-file uploading. Moreover, in our opinion, uploading files in a batch proved not to be a good idea. For one, Flash doesn’t support this, and we wanted to have an identical behavior for both Flash and HTML5. Second, the user might simply run out of memory and the browser will fail.</p>
    <p><code>XMLHttpRequest</code>, which has called back the upload, is a proxy <code>XMLHttpRequest</code>, in fact. Its methods and properties reflect states in the file currently being uploaded.</p>
    <h3>Final Word</h3>
    <p>I’ll end with a small example of how we let users upload files using drag’n'drop:</p>
    <pre><code>&lt;div id="el" class="dropzone"&gt;&lt;/div&gt;&#x000A;    &lt;script&gt;&#x000A;        if( FileAPI.support.dnd ){&#x000A;            // element where you can drop the files&#x000A;            var el = document.getElementById("el");&#x000A;    &#x000A;            // subscribe to events associated with Drag'n'Drop&#x000A;            FileAPI.event.dnd(el, function (over){&#x000A;                // method will be activated when you enter/leave the element&#x000A;                if( over ){&#x000A;                    el.classList.add("dropzone_hover");&#x000A;                } else {&#x000A;                    el.classList.remove("dropzone_hover");&#x000A;                }&#x000A;            }, function (dropFiles){&#x000A;                // the user has dropped the files&#x000A;                FileAPI.upload({&#x000A;                    url: "/upload",&#x000A;                    files: { attaches: dropFiles },&#x000A;                    complete: function (err, xhr){&#x000A;                        if( !err ){&#x000A;                            // files are uploaded&#x000A;                        }&#x000A;                    }&#x000A;                });&#x000A;            });&#x000A;        }&#x000A;    &lt;/script&gt;&#x000A;    &#x000A;    </code></pre>
    <p>It took us quite some time to develop the library. We worked on it for about 5 months since it was a little side thing that we had to finish aside from the regular work. The main headache was caused by the little details that different browsers had. Chrome, Firefox and IE10+ were just fine, but Safari and Opera had very different behaviors from version to version, including inconsistencies on Win/Mac platforms. Still, <strong>the main problem was to actually combine all three technologies</strong> — iframe, Flash, HTML5 — to create a bulletproof file uploader.</p>
    <p>The library is <a href="https://github.com/mailru/FileAPI/" rel="nofollow external" class="bo">available on GitHub</a> and we’ve published a <a href="http://mailru.github.io/FileAPI/" rel="nofollow external" class="bo">documentation</a> as well. Bug reports and pull requests are more than welcome!</p>
    <h4>Useful Links</h4>
    <ul>
    <li>
    <a href="https://github.com/mailru/FileAPI" rel="nofollow external" class="bo">FileAPI</a> (and <a href="http://mailru.github.io/FileAPI/examples/demo.html" rel="nofollow external" class="bo">demo</a>), Mail.ru, GitHub </li>
    <li>
    <a href="https://github.com/mailru/" rel="nofollow external" class="bo">Mail.ru</a>, GitHub<br>
    Find Tarantool, fest and much else.</li>
    <li>“<a href="http://caniuse.com/#feat=forms" rel="nofollow external" class="bo">HTML5 Form Features</a>,” Can I Use…?<br>
    See the support for <code>input[type="file" multiple]</code>.</li>
    <li>“<a href="http://caniuse.com/#feat=fileapi" rel="nofollow external" class="bo">File API</a>,” Can I Use…?</li>
    <li>“<a href="https://developer.mozilla.org/en-US/docs/DOM/FileReader" rel="nofollow external" class="bo">FileReader</a>,” Mozilla Developer Network</li>
    <li>“<a href="https://developer.mozilla.org/en-US/docs/DOM/window.URL.createObjectURL" rel="nofollow external" class="bo">URL.createObjectURL</a>” and “<a href="https://developer.mozilla.org/en-US/docs/DOM/window.URL.revokeObjectURL" rel="nofollow external" class="bo">URL.revokeObjectURL</a>,” Mozilla Developer Network</li>
    <li>“<a href="https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest" rel="nofollow external" class="bo">XMLHttpRequest</a>,” Mozilla Developer Network</li>
    <li>“<a href="https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData" rel="nofollow external" class="bo">FormData</a>,” Mozilla Developer Network</li>
    </ul>
    <p>This article has been reviewed and edited by <a href="https://twitter.com/AndrewSumin" rel="nofollow external" class="bo">Andrew Sumin</a>, a front-end engineer working on <a href="http://corp.mail.ru/en" rel="nofollow external" class="bo">Mail.ru</a> front-end team.</p>
    <p><em>(al ea il)</em></p>
    <hr>
    <p><small>© Konstantin Lebedev for <a href="http://www.smashingmagazine.com" rel="nofollow external" class="bo">Smashing Magazine</a>, 2013.</small></p>
    </div>
]]>
</Body>
<Summary>        One day I discovered that I needed to design an API that would upload files from a client to a server. I work on the Russian Web mail provider at Mail.Ru and deal with JavaScript in all...</Summary>
<Website>http://www.smashingmagazine.com/2013/10/11/so-we-wanted-to-build-a-file-uploader-a-case-study/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36868/guest@my.umbc.edu/79680708c60cde7bf09485ee11c7f8b9/api/pixel</TrackingUrl>
<Tag>coding</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 05:30:49 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="36900" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36900">
<Title>Men's Soccer to Welcome Albany in Homecoming Contest in Saturday Matinee</Title>
<Body>
<![CDATA[
    <div class="html-content">The UMBC men�fs soccer team resumes America East Conference competition on Saturday, Oct. 12 when they welcome the Albany Great Danes in a 2:30 match-up to highlight UMBC�fs Homecoming 2013 festivities. The Retrievers (10-1-0, 1-0-0 America East) opened league play with a 2-1 victory at Hartford a week ago, then were postponed after travelling to Willam &amp; Mary for a non-conference contest on Wednesday. Albany (2-7-2, 0-1-0) fell, 1-0, in overtime at Stony Brook on Oct. 5, but rebounded to edge Yale, 2-1, on Tuesday. Live stats and free streaming video will be available for the contest via umbcretrievers.com and umbcretrievers.tv.</div>
]]>
</Body>
<Summary>The UMBC men�fs soccer team resumes America East Conference competition on Saturday, Oct. 12 when they welcome the Albany Great Danes in a 2:30 match-up to highlight UMBC�fs Homecoming 2013...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=8215</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36900/guest@my.umbc.edu/81c5f0a8ba67e9bccf167db47a5b9d40/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, 11 Oct 2013 01:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="36907" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36907">
<Title>Mlemchukwu's 19 Kills Help UMBC Volleyball Hang On for First-Ever Victory at Albany</Title>
<Body>
<![CDATA[
    <div class="html-content">ALBANY, N.Y. � The UMBC volleyball team claimed each of the first two sets on the road Friday night at Albany, but was forced to play five decisive sets to earn its first-ever win on the road against the Great Danes, claiming a 3-2 victory at University Gymnasium.</div>
]]>
</Body>
<Summary>ALBANY, N.Y. � The UMBC volleyball team claimed each of the first two sets on the road Friday night at Albany, but was forced to play five decisive sets to earn its first-ever win on the road...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=8216</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36907/guest@my.umbc.edu/45bac4eaa31c0c99187e30c092267c87/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>1</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 11 Oct 2013 01:00:00 -0400</PostedAt>
<EditAt>Fri, 11 Oct 2013 01:00:00 -0400</EditAt>
</NewsItem>

</News>
