<?xml version="1.0"?>
<News hasArchived="true" page="7645" pageCount="10793" pageSize="10" timestamp="Fri, 04 Sep 2026 20:18:31 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7645&amp;range=2">
<NewsItem contentIssues="false" id="43298" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43298">
<Title>Frosting Glass with CSS Filters</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em>The following is a guest post by Bear Travis, a Web Standards Engineer at Adobe. I'm a fan of how Adobe is pushing the web forward with new design capabilities, and doing it in a responsible way. CSS filters is a good example. They knew they were desired because Photoshop paved the way. They brought them to the web with a sensible syntax and they helped with both the spec and browser implementation. Now we're seeing them in stable browsers, and they are advocating use through responsible progressive enhancement. Hallelujah. Here's Bear with a tutorial about just that.</em></p>
    <p></p>
    <p>While filters such as contrast, saturate, and blur have existed in image editors for some time, delivering them on the web has historically required serving images with those filters already applied. As browsers begin to incorporate filters as part of the web platform, we can begin breaking down complex visual effects into their component parts, and implementing them on the web. This article will examine one such effect, frosted glass, and how CSS filters provide a cleaner, more flexible solution than static images.</p>
    <h3>Old School: Frosted Glass with Images</h3>
    <p>The frosted glass effect has been kicking around the internet for a while; we even saw it here on CSS-Tricks <a href="http://css-tricks.com/blurry-background-effect/" rel="nofollow external" class="bo">back in 2008</a>. The idea behind the effect is relatively simple: just blur and lighten the area behind overlaid content. The content gains higher contrast with its background, but you still maintain a rough idea of what's going on behind it. The CSS-Tricks article uses two images: a standard version and a frosted version (blurred with a white tint). In our example, a card slides up to reveal content, while frosting over the background.</p>
    <h4>Demo</h4>
    <p>See the Pen <a href="http://codepen.io/adobe/pen/40cd4258f2d72a60f37a5e2f47124b7e/" rel="nofollow external" class="bo">Frosted Glass Effect Using Multiple Images</a> by Adobe Web Platform (<a href="http://codepen.io/adobe" rel="nofollow external" class="bo">@adobe</a>) on <a href="http://codepen.io" rel="nofollow external" class="bo">CodePen</a>.</p>
    <h4>The HTML</h4>
    <p>The markup is relatively simple. We only have a single article that contains content.</p>
    <pre><code>&lt;article class="glass down"&gt;&#x000A;      &lt;h1&gt;Pelican&lt;/h1&gt;&#x000A;      &lt;p&gt;additional content...&lt;/p&gt;&#x000A;    &lt;/article&gt;</code></pre>
    <h4>The CSS</h4>
    <p>We first size everything to the viewport. Then, we overlay a blurred version of the background on top of the original background. Finally, we add a white tint. The overflow is hidden to prevent scrolling and to clip the effect to the <code>.glass</code> element.</p>
    <pre><code>html, body, .glass {&#x000A;        width: 100%;&#x000A;        height: 100%;&#x000A;        overflow: hidden;&#x000A;    }&#x000A;    body {&#x000A;        background-image: url('pelican.jpg');&#x000A;        background-size: cover;&#x000A;    }&#x000A;    .glass::before {&#x000A;        display: block;&#x000A;        width: 100%;&#x000A;        height: 100%;&#x000A;        background-image: url('pelican-blurry.jpg');&#x000A;        background-size: cover;&#x000A;        content: ' ';&#x000A;        opacity: 0.4;&#x000A;    }&#x000A;    .glass {&#x000A;        background-color: white;&#x000A;    }</code></pre>
    <p>The above CSS will create our blurred and lightened overlay. We also need to shift the overlay down to the bottom of the page, leaving just enough space to view the header text. Since the blurred image is a child of the overlay, we also need to shift it back up by the opposite amount in order to keep it aligned with the body background. Because the demo uses transitions, I chose to use CSS transforms rather than the <code>background-attachment</code> property, as <a href="http://blogs.adobe.com/webplatform/2014/03/18/css-animations-and-transitions-performance/" rel="nofollow external" class="bo">CSS transforms can be hardware accelerated</a>.</p>
    <pre><code>.glass.down {&#x000A;        transform: translateY(100%) translateY(-7rem);&#x000A;    }&#x000A;    .glass.down::before {&#x000A;        transform: translateY(-100%) translateY(7rem);&#x000A;    }&#x000A;    .glass.up, .glass.up::before {&#x000A;        transform: translateY(0);&#x000A;    }</code></pre>
    <h4>Notes</h4>
    <p>If you'd like a further breakdown, I built a <a href="http://cdpn.io/4dba97b7d03412ed1e9dcb62a23dfaa8" rel="nofollow external" class="bo">deconstructed version</a> of the effect.</p>
    <p>The above technique is straightforward, and has solid browser support. Although I spruced up the demo a bit with <a href="http://caniuse.com/#feat=css-transitions" rel="nofollow external" class="bo">transitions</a>, the other required features – <a href="http://caniuse.com/#feat=css-gencontent" rel="nofollow external" class="bo">generated content</a>, <a href="http://caniuse.com/#feat=css-opacity" rel="nofollow external" class="bo">opacity</a>, <a href="http://caniuse.com/#feat=transforms2d" rel="nofollow external" class="bo">transforms</a> and <a href="http://caniuse.com/#feat=background-img-opts" rel="nofollow external" class="bo">background-size</a> – all have solid browser support ranging back to IE 9 (with the exception of Opera Mini).</p>
    <h3>New School: Frosted Glass with Filters</h3>
    <p>The duplicate image technique requires maintaining a blurred image along with the original, which can become a pain if you need to reuse the effect for multiple images. For example, responsive designs may require swapping in different images at different screen sizes. Or, template layouts may drop in images dynamically (eg, a different header image for every blog post). For these cases, it would be nice to generate the effect using only the source image. After all, we're just blurring it.</p>
    <p>This is where CSS Filters come in handy. They allow us to apply the blur in the browser, using <a href="http://css-tricks.com/almanac/properties/f/filter/" rel="nofollow external" class="bo">the CSS <code>filter</code> property</a>. </p>
    <h4>The CSS</h4>
    <p>We can adjust the CSS for the frosted glass overlay to be the original image with a <code>blur</code> filter applied.</p>
    <pre><code>.glass::before {&#x000A;        background-image: url('pelican-blurry.jpg');&#x000A;    }</code></pre>
    <pre><code>.glass::before {&#x000A;        background-image: url('pelican.jpg');&#x000A;        filter: blur(5px);&#x000A;    }</code></pre>
    <h4>Demo</h4>
    <p>See the Pen <a href="http://codepen.io/adobe/pen/d056d1b26b9683c018f9bb9e0f1b0e1c/" rel="nofollow external" class="bo">Frosted Glass Effect Using Filter Effects</a> by Adobe Web Platform (<a href="http://codepen.io/adobe" rel="nofollow external" class="bo">@adobe</a>) on <a href="http://codepen.io" rel="nofollow external" class="bo">CodePen</a>.</p>
    <h4>Caveats</h4>
    <p>Easy peasy, right? Unfortunately, CSS Filters are somewhat new. That means they may be vendor prefixed, and that <a href="http://caniuse.com/#feat=css-filters" rel="nofollow external" class="bo">their browser support</a> is not yet universal. However, filters have a longer history in SVG, and applying SVG filters to HTML content via CSS <a href="http://caniuse.com/#feat=svg-html" rel="nofollow external" class="bo">has wider browser support</a>. You can easily add them as a fallback for when CSS filters are not supported. The above demo actually does just that.</p>
    <p>To add an SVG filter, we include some inline SVG in our HTML markup, and reference the filter with a <code>url()</code>. Pro tip: An alternative is to encode the SVG filter and reference as a data url, but that format is a bit more difficult to read in an article.</p>
    <pre><code>&lt;svg xmlns="<a href="http://www.w3.org/2000/svg">http://www.w3.org/2000/svg</a>" version="1.1"&gt;&#x000A;      &lt;defs&gt;&#x000A;        &lt;filter id="blur"&gt;&#x000A;          &lt;feGaussianBlur stdDeviation="5" /&gt;&#x000A;        &lt;/filter&gt;&#x000A;      &lt;/defs&gt;&#x000A;    &lt;/svg&gt;</code></pre>
    <pre><code>.glass::before {&#x000A;        background-image: url('pelican.jpg');&#x000A;        /* Fallback to SVG filters */&#x000A;        filter: url('#blur');&#x000A;        filter: blur(5px);&#x000A;    }</code></pre>
    <p>There will still be cases where neither CSS nor SVG Filters are supported by a browser. In that case, the user will see text on a lightened (tinted but unblurred) background, which isn't too shabby.</p>
    <h3>Conclusion</h3>
    <p>Filters allow us to use effects in the browser that were previously only available in image editors. As an element's style, rather than a rendered image, they are easier to alter and reuse. You can use CSS Filters in current versions of Chrome, Safari, and Opera, and they are under <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=869828" rel="nofollow external" class="bo">active development in Firefox</a> (no word yet on Internet Explorer). With a little care towards fallback behavior, you can start using them today.</p>
    <hr>
    <p><small><a href="http://css-tricks.com/frosting-glass-css-filters/" rel="nofollow external" class="bo">Frosting Glass with CSS Filters</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>The following is a guest post by Bear Travis, a Web Standards Engineer at Adobe. I'm a fan of how Adobe is pushing the web forward with new design capabilities, and doing it in a responsible way....</Summary>
<Website>http://css-tricks.com/frosting-glass-css-filters/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43298/guest@my.umbc.edu/32dd314894c5eb75a68f67192f31e853/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>Mon, 07 Apr 2014 12:36:40 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="43299" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43299">
<Title>In spirit of our #webinar with Instructor Gib Mason, learn nine different ways o...</Title>
<Body>
<![CDATA[
    <div class="html-content">In spirit of our #webinar with Instructor Gib Mason, learn nine different ways of becoming a better leader: entm.ag/1imbOE3 (via entrepreneur.com) <br><br><a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fentm.ag%2F1imbOE3&amp;h=JAQEQe68U&amp;s=1" title="" rel="nofollow external" class="bo"><img src="https://fbexternal-a.akamaihd.net/safe_image.php?d=AQCAnpDLMDe4HkH5&amp;w=154&amp;h=154&amp;url=http%3A%2F%2Fwww.entrepreneur.com%2Fdbimages%2Farticle%2Fh0%2F1395441129-9-ways-become-better-leader.jpg" alt="" style="max-width: 100%; height: auto;"></a><br><a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fentm.ag%2F1imbOE3&amp;h=jAQFG8uzA&amp;s=1" rel="nofollow external" class="bo">9 Ways to Become a Better Leader</a><br><a href="http://www.entrepreneur.com">www.entrepreneur.com</a><br>From encouraging dissenting voices to showing compassion, here are tips for leading with purpose and poise.</div>
]]>
</Body>
<Summary>In spirit of our #webinar with Instructor Gib Mason, learn nine different ways of becoming a better leader: entm.ag/1imbOE3 (via entrepreneur.com)    9 Ways to Become a Better Leader...</Summary>
<Website>http://www.facebook.com/umbctraining/posts/10151948490966076</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43299/guest@my.umbc.edu/ed9c252f4b0abb21a18f9d120a5e91ee/api/pixel</TrackingUrl>
<Tag>ccna</Tag>
<Tag>ceh</Tag>
<Tag>centers</Tag>
<Tag>cisco</Tag>
<Tag>cyber</Tag>
<Tag>cybersecurity</Tag>
<Tag>information</Tag>
<Tag>it</Tag>
<Tag>leadership</Tag>
<Tag>management</Tag>
<Tag>microsoft</Tag>
<Tag>project</Tag>
<Tag>security</Tag>
<Tag>technology</Tag>
<Tag>training</Tag>
<Tag>umbc</Tag>
<Group token="retired-575">UMBC Training Centers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-575</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/original.jpg?1361981335</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/large.png?1361981335</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/medium.png?1361981335</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/small.png?1361981335</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxsmall.png?1361981335</AvatarUrl>
<Sponsor>UMBC Training Centers</Sponsor>
<PawCount>1</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 12:34:33 -0400</PostedAt>
<EditAt>Mon, 07 Apr 2014 12:34:33 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="43304" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43304">
<Title>Why Google&#8217;s Modular Smartphone Might Actually Succeed</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Google believes open hardware innovation could help it find industries and markets for its software and services.</p>
    <p>In a two-story building in an industrial district of Cambridge, Massachusetts, Ara Knaian shows off prototypes of what could be the industry’s first completely modular smartphone.</p>
    </div>
]]>
</Body>
<Summary>Google believes open hardware innovation could help it find industries and markets for its software and services.  In a two-story building in an industrial district of Cambridge, Massachusetts,...</Summary>
<Website>http://www.technologyreview.com/news/525386/why-googles-modular-smartphone-might-actually-succeed/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43304/guest@my.umbc.edu/ae8e6c2458ef3d03b176ca4e26ab8a13/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 12:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="43295" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43295">
<Title>talk: A multi-scale approach to analyze large clinical datasets, Noon Thr 4/10</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h2><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/04/EEG_Recording_Cap.jpg" width="700" height="308" style="max-width: 100%; height: auto;"></h2>
    <h2>A multi-scale approach to analyze large clinical datasets:<br>
    Towards the understanding of the complex effects of concussions</h2>
    <h3>Dr. Jesus Caban<br>
    National Intrepid Center of Excellence<br>
    Walter Reed, Bethesda, MD</h3>
    <h3>Noon Thursday, 10 April 2014, ITE325b</h3>
    <p>Mild traumatic brain injuries (mTBIs) or concussions are invisible injuries that are poorly understood and their sequelae can be difficult to diagnose. Individuals who have had concussions are at an increased risk of depression, post-traumatic stress disorder (PTSD), headaches, concentration difficulties, and other problems. During the last decade, a significant amount of attention has been given to the acquisition of clinical data from patients suffering from mTBI. Unfortunately, most of the data collection and analysis have focused on individual aspects of the injury, not necessarily on comprehensive and multi-modal analytical techniques to capture the complex biological state of mTBI patients.</p>
    <p>This talk will discuss a large-scale informatics database that has been developed to enable interdisciplinary research on mTBI and will introduce a multi-scale approach to mine complex clinical datasets. The millions of multi-modal elements originated from different clinical disciplines are treated as weak features and modeled independently to generate stronger features. Three cases of going from weak to stronger features will be discussed including (a) an inductive/transductive model to extract stable image features from multi-modal MRI scans, (b) a rule-based model used to infer knowledge from blood measurements, and (c) a sentiment analysis-based model to extract behavioral signals from writing samples. Once stronger features are obtained, a relational model is used to integrate the data and extract new knowledge from such a complex dataset.</p>
    <p>Dr. Caban is the Acting Chief of Clinical &amp; Research Informatics at the National Intrepid Center of Excellence (NICoE) at Walter Reed Bethesda. He received a Ph.D. in Computer Science from UMBC (2009), his M.S. degree in Computer Science from the University of Kentucky (2005), and his B.S. in Computer Science from the University of Puerto Rico (2002). Over the last eight years Dr. Caban’s research has focused on the design and development of techniques to analyze clinical and imaging data. His research and experience has given him the opportunity to work at top research and healthcare organizations including the National Institutes of Health (NIH), John Hopkins University, the University of Maryland Medical Center, and IBM Research. Dr. Caban is presently an adjunct faculty member at John Hopkins University Applied Physics Lab and a part-time instructor at the Department of Computer Science at UMBC. Recently, he received the 2013-14 JHU/APL Junior faculty award for his commitment to teaching. Currently, he is serving as the Associate Editor of the JAMIA special issue on Visual Analytics in Healthcare and as the contracting officer representative (COR) for the DoD program on “Watson-Like Technologies for TBI/PTSD Clinical Decision Support and Predictive Analytics”.</p>
    </div>
]]>
</Body>
<Summary>A multi-scale approach to analyze large clinical datasets:  Towards the understanding of the complex effects of concussions   Dr. Jesus Caban  National Intrepid Center of Excellence  Walter Reed,...</Summary>
<Website>http://www.csee.umbc.edu/2014/04/talk-a-multi-scale-approach-to-analyze-large-clinical-datasets-1pm-fri-411/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=talk-a-multi-scale-approach-to-analyze-large-clinical-datasets-1pm-fri-411</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43295/guest@my.umbc.edu/ae99eaaec5c9c5183e70d773c3c9e7d5/api/pixel</TrackingUrl>
<Tag>news</Tag>
<Tag>research</Tag>
<Tag>talks</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>Mon, 07 Apr 2014 11:47:03 -0400</PostedAt>
<EditAt>Mon, 07 Apr 2014 11:47:03 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="43873" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43873">
<Title>talk: A multi-scale approach to analyze large clinical datasets, Noon Thr 4/10</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h2><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/04/EEG_Recording_Cap.jpg" width="700" height="308" style="max-width: 100%; height: auto;"></h2>
    <h2>A multi-scale approach to analyze large clinical datasets:<br>
    Towards the understanding of the complex effects of concussions</h2>
    <h3>Dr. Jesus Caban<br>
    National Intrepid Center of Excellence<br>
    Walter Reed, Bethesda, MD</h3>
    <h3>Noon Thursday, 10 April 2014, ITE325b</h3>
    <p>Mild traumatic brain injuries (mTBIs) or concussions are invisible injuries that are poorly understood and their sequelae can be difficult to diagnose. Individuals who have had concussions are at an increased risk of depression, post-traumatic stress disorder (PTSD), headaches, concentration difficulties, and other problems. During the last decade, a significant amount of attention has been given to the acquisition of clinical data from patients suffering from mTBI. Unfortunately, most of the data collection and analysis have focused on individual aspects of the injury, not necessarily on comprehensive and multi-modal analytical techniques to capture the complex biological state of mTBI patients.</p>
    <p>This talk will discuss a large-scale informatics database that has been developed to enable interdisciplinary research on mTBI and will introduce a multi-scale approach to mine complex clinical datasets. The millions of multi-modal elements originated from different clinical disciplines are treated as weak features and modeled independently to generate stronger features. Three cases of going from weak to stronger features will be discussed including (a) an inductive/transductive model to extract stable image features from multi-modal MRI scans, (b) a rule-based model used to infer knowledge from blood measurements, and (c) a sentiment analysis-based model to extract behavioral signals from writing samples. Once stronger features are obtained, a relational model is used to integrate the data and extract new knowledge from such a complex dataset.</p>
    <p>Dr. Caban is the Acting Chief of Clinical &amp; Research Informatics at the National Intrepid Center of Excellence (NICoE) at Walter Reed Bethesda. He received a Ph.D. in Computer Science from UMBC (2009), his M.S. degree in Computer Science from the University of Kentucky (2005), and his B.S. in Computer Science from the University of Puerto Rico (2002). Over the last eight years Dr. Caban’s research has focused on the design and development of techniques to analyze clinical and imaging data. His research and experience has given him the opportunity to work at top research and healthcare organizations including the National Institutes of Health (NIH), John Hopkins University, the University of Maryland Medical Center, and IBM Research. Dr. Caban is presently an adjunct faculty member at John Hopkins University Applied Physics Lab and a part-time instructor at the Department of Computer Science at UMBC. Recently, he received the 2013-14 JHU/APL Junior faculty award for his commitment to teaching. Currently, he is serving as the Associate Editor of the JAMIA special issue on Visual Analytics in Healthcare and as the contracting officer representative (COR) for the DoD program on “Watson-Like Technologies for TBI/PTSD Clinical Decision Support and Predictive Analytics”.</p>
    </div>
]]>
</Body>
<Summary>A multi-scale approach to analyze large clinical datasets:  Towards the understanding of the complex effects of concussions   Dr. Jesus Caban  National Intrepid Center of Excellence  Walter Reed,...</Summary>
<Website>http://www.csee.umbc.edu/2014/04/talk-a-multi-scale-approach-to-analyze-large-clinical-datasets-1pm-fri-411/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43873/guest@my.umbc.edu/3ba36b966a6a56d3e76234f0946f1452/api/pixel</TrackingUrl>
<Tag>news</Tag>
<Tag>research</Tag>
<Tag>talks</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>Mon, 07 Apr 2014 11:47:03 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="43293" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43293">
<Title>Photo contest- Win $ for your student organization</Title>
<Body>
<![CDATA[
    <div class="html-content"><div>
    <div><strong><u><span><div><strong><u><span>PHOTO CONTEST!!!</span></u></strong></div></span></u></strong></div>
    <div><span>Send us the best photo of your student org in action this year! Winning photographs will be framed &amp; displayed in the student org space for all to see and will be revealed at our end of year event, CelebratingOrgs. Winners get a cash prize for their org. </span></div>
    <div><span><br></span></div>
    <div>
    <span>Email your photos to: <a href="mailto:jasonp1@umbc.edu">jasonp1@umbc.edu</a> by April 24th!</span><br><div><br></div>
    <div><strong><u>CelebratingOrgs (Thurs May 8th 7-9pm, Student Org Space)</u></strong></div>
    <div>Don't forget to RSVP to attend CelebratingOrgs (an end of the year event for student organizations sponsored by Student Life &amp; SGA! Celebrate all you've done and enjoy a dinner buffet!)<br>
    </div>
    <div><br></div>
    <div>RSVP here: <a href="https://docs.google.com/a/umbc.edu/forms/d/160hg6gRlOM4v06pjJAdQhx-mqL_8qlwyHkO0HAWUf8I/viewform">https://docs.google.com/a/umbc.edu/forms/d/160hg6gRlOM4v06pjJAdQhx-mqL_8qlwyHkO0HAWUf8I/viewform</a><br>
    </div>
    <div><br></div>
    <div><br></div>
    <div>Hope to see you there! </div>
    <div><br></div>
    <div>Sara</div>
    </div>
    </div></div>
]]>
</Body>
<Summary>PHOTO CONTEST!!!   Send us the best photo of your student org in action this year! Winning photographs will be framed &amp; displayed in the student org space for all to see and will be revealed...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43293/guest@my.umbc.edu/2b46573fe2e002bcd45a1f52e5b323d9/api/pixel</TrackingUrl>
<Group token="retired-769">UMBC Student Organizations </Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-769</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/xsmall.png?1383677072</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/original.jpg?1383677072</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/xxlarge.png?1383677072</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/xlarge.png?1383677072</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/large.png?1383677072</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/medium.png?1383677072</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/small.png?1383677072</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/xsmall.png?1383677072</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/769/c1de2111b16e6b21b794451fe54ef86f/xxsmall.png?1383677072</AvatarUrl>
<Sponsor>UMBC Student Organizations</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 11:21:01 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="43288" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43288">
<Title>Project Mah Jongg featured on CBS Sunday Morning and Sun</Title>
<Tagline>Touring exhibit on Mah Jongg continues to draw attention</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p><span><a href="http://www.cbsnews.com/videos/mah-jongg-madness/" rel="nofollow external" class="bo">CBS Sunday Morning</a>, <a href="http://articles.baltimoresun.com/2014-04-04/entertainment/bs-ae-mah-jongg-20140404_1_jewish-museum-mah-jongg-exhibit" rel="nofollow external" class="bo">The Baltimore Sun</a>, and the <a href="http://jewishtimes.com/21343/americas-other-pastime/#.U0K0p9xqtFw" rel="nofollow external" class="bo">Baltimore Jewish Times</a> have run</span><span> <a href="http://jewishtimes.com/21343/americas-other-pastime/#.U0K0p9xqtFw" rel="nofollow external" class="bo">features</a></span><span> on </span><a href="http://www.projectmahjongg.com/" rel="nofollow external" class="bo">Project Mah Jongg</a><span>, now appearing at the Jewish Museum of Maryland </span><span>and is on view in Baltimore through June 29, 2014.</span><span>. </span></p>
    <p><span><a href="http://www.projectmahjongg.com/about.html" rel="nofollow external" class="bo">The show</a>, which originated at the Museum of Jewish Heritage, NYC has also garnered notice in the New Yorker, The Wall Street Journal, The New York Times and The LA Times. The show has travelled to Portland, Cleveland, LA, Miami Beach, Atlanta, and will continue on to </span><a href="http://www.thecjm.org/on-view/upcoming/project-mah-jongg/about" rel="nofollow external" class="bo">San Francisco</a><span> this summer.</span></p>
    <p><span>CIRCA Director Timothy Nohe produced sound designs for three "Muji" players, documenting games in Chinatown and the Upper East Side. The sound work was invited by curator Melissa Martens Yaverbaum. Abbot Miller, a partner at Pentagram Design, designed the exhibit to highlight the intriguing objects and imagery surrounding the game. Original works by fashion icon Isaac Mizrahi, and renowned illustrators Maira Kalman, Christoph Niemann, and Bruce McCall pay homage to the influence mah jongg has had on design and contemporary artists. The exhibition's sumptuous companion publication "</span><a href="http://www.newyorker.com/online/blogs/books/2010/05/crak-bam-dot.html" rel="nofollow external" class="bo">Mah Jongg: Crak, Bam, Dot,</a><span>" was edited by Abbott Miller and Patsy Tarr, and published by twice books.</span></p>
    </div>
]]>
</Body>
<Summary>CBS Sunday Morning, The Baltimore Sun, and the Baltimore Jewish Times have run features on Project Mah Jongg, now appearing at the Jewish Museum of Maryland and is on view in Baltimore through...</Summary>
<Website>http://www.projectmahjongg.com</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43288/guest@my.umbc.edu/e13f3449c726cb9f6f2c91386d799ecc/api/pixel</TrackingUrl>
<Tag>baltimore</Tag>
<Tag>cbs</Tag>
<Tag>design</Tag>
<Tag>jewish</Tag>
<Tag>jongg</Tag>
<Tag>mah</Tag>
<Tag>maryland</Tag>
<Tag>museum</Tag>
<Tag>nohe</Tag>
<Tag>of</Tag>
<Tag>sound</Tag>
<Tag>sun</Tag>
<Tag>the</Tag>
<Tag>times</Tag>
<Tag>timothy</Tag>
<Group token="circa">CIRCA</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/circa</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/xsmall.png?1762367739</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/original.jpg?1762367739</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/xxlarge.png?1762367739</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/xlarge.png?1762367739</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/large.png?1762367739</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/medium.png?1762367739</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/small.png?1762367739</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/xsmall.png?1762367739</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/746/c82b5d452621302114ac215d91fcf846/xxsmall.png?1762367739</AvatarUrl>
<Sponsor>CIRCA</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 10:30:16 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="43289" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43289">
<Title>Componentizing the Web</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>This is the story about a project of mine. A big one. A mixture between <a href="http://php.net/" rel="nofollow external" class="bo">PHP</a> and <a href="http://nodejs.org/" rel="nofollow external" class="bo">Node.js</a>. It's a single page application from one point of view and an SEO optimized website from another. Tons of JavaScript, CSS and HTML was written. In a single word, a spaghetti nightmare for any developer. There were falls and rises. Producing and solving bugs. Fighting with the latest technologies and ending up with a wonderfully simple library, which is the topic of this article.<br></p>
    
    <h2>The Beginning</h2>
    
    <p>As it normally happens, the project was considered not so big. The brief came in, we discussed how the development would be handled, what technologies would be used and how we will use them. We made a plan and got to work. In the beginning we had a few pages, which were controlled by a CMS. There wasn't so much JavaScript code at first because our system delivered most of the content.</p>
    
    <p>Here is a rough structure of the project:</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20602/image/img1.png" style="max-width: 100%; height: auto;">
    
    <p>We put our client side code into different directories. The server side code was only PHP at the moment, so it went in to the <code>php</code> directory. We wrap everything into around 30 files and everything was OK. </p>
    
    <h2>The Journey</h2>
    
    <p>During the period of a few months, we were trying different concepts and changed the project's code several times. From the current point of view, I could spot four big issues which we met.</p>
    
    <h3>Problem #1 - Too Many Badly Structured Files</h3>
    
    <p>It looks like the client was happy with the result and decided to invest more in his Internet appearance. We were asked to build a few new features. Some of them were just new content places, others were additions to already existing pages. We started adding more and more files in all of the folders above. It started to get a little bit messy, so we decided to create subdirectories for the different pages and save the necessary code there.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20602/image/img2.png" style="max-width: 100%; height: auto;">
    
    <p>For example, the CSS styles for the <em>about</em> page were in <code>css/about/styles.css</code>. The JavaScript in <code>js/about/scripts.js</code> and so on. We used a PHP script which concatenates the files. There were, of course, parts of the site that were on several pages and we put them in <code>common</code> directories. This was good for a while, but it did not work well for long because when the directories became full, it was slow to modify something. You had to search for three different directories to find what you needed. The site was still mainly written in PHP.</p>
    
    <h3>Problem #2 - The Big Turning Point or How We Messed Things Up</h3>
    
    <p>At that time, mobile applications became popular. The client wanted to have his site available for mobile devices and this is the big turning point in the project. We had to convert the site to a single page application. And not only that, it had to have tons of real-time features. Of course, not all the content of the site had to be loaded dynamically. The SEO was still an important part of the client's vision. We chose the <a href="http://www.mean.io/" rel="nofollow external" class="bo">MEAN stack</a> for the upcoming parts. The problem was with the old pages. Their content had to be served by PHP, but the pages' logic changed and it was completely made with JavaScript. For several weeks, we felt like the passengers of Titanic. We were in a hurry to release something, but there was hole after hole and very soon, our ship was full of water (bugs).  </p>
    
    <h3>Problem #3 - A Tough Working Process</h3>
    
    <p>We used <a href="http://gruntjs.com/" rel="nofollow external" class="bo">GruntJS</a> for a while, but migrated to <a href="http://gulpjs.com/" rel="nofollow external" class="bo">Gulp</a>. It helped a lot because we increased our development speed. However, it was still too annoying to add or edit existing components. The solid architecture that we had in the beginning was transformed to a complex mixture of files. Yes, there was strict conventions for naming and placing these files, but it was still too messy. We then banged our heads together and came up with the following format:</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20602/image/img3.png" style="max-width: 100%; height: auto;">
    
    <p>We split the site in to different components, that were like black boxes. They live in their own folder. Everything related to the component was saved inside its directory. We designed carefully, the APIs of the classes. They were testable and communicative. We found that a structure such as this worked better for us because we had tons of independent modules. Yes, we are mixing the JavaScript files with CSS styles and HTML templates, but it was just easier to work on a unit basis, instead of digging deeply into several directories.</p>
    
    <h3>Problem #4  - Angular vs. Custom Code</h3>
    
    <p>Those pages which were old and which we had to deliver via PHP, were also full of JavaScript logic. However in some cases, Angular did not work very well. We had to make small hacks to make the things run smoothly. We ended up with a mixture between Angular controllers and custom code. The good news was that the budget of the project was expanded and we decided to use our own framework. At that time, I was developing my own <a href="http://code.tutsplus.com/tutorials/absurdjs-or-why-i-wrote-my-own-css-preprocessor--net-36003" rel="nofollow external" class="bo">CSS preprocessor</a>. The project goes really, really fast. Very soon I ported my library for client side usage. Line by line, it was transformed to a small framework, which we started integrating into the project.</p>
    <h4>Why Create a New Framework?</h4>
    
    <p>This is probably what you're asking. Well, there is a dozen of others that provide a wide range of capabilities. Yes, that's true, but ... we did not need a wide range of capabilities. We needed specific things and nothing more. We were ready to accept the fact that by using a popular framework, we may add a few kilobytes to the overall page load. That wasn't a big problem. </p>
    <p>The status of our code-base was the issue. We were focused on building good architecture and we all agree that sometimes the custom solution fits better. The usage of Angular, Ember, Knockout or Backbone comes with its benefits, but the truth is that there is no universal framework. </p>
    <p>I like the words of <a href="http://adactio.com/" rel="nofollow external" class="bo">Jeremy Keith</a>, in his talk <a href="http://krasimirtsonev.com/blog/article/The-Power-Of-Simplicity-by-Jeremy-Keith" rel="nofollow external" class="bo">The power of Simplicity</a>, he said that the most important thing while choosing your tool is the philosophy of the person who made the tool and if that philosophy aligns with yours. If the ideas of the framework do not align with yours, very soon, you will go against them. The same thing happened to us. We tried using Angular and there were too many difficulties. Problems that we were able to solve, but we used hacks and complex workarounds. </p>
    <p>We also tried Ember, but it did not work, because it is heavily based on its routing mechanisms. Backbone was a nice choice and it was the closest thing to our vision. However, when I introduced <a href="http://absurdjs.com/" rel="nofollow external" class="bo">AbsurdJS</a> we decided to use it.</p>
    
    <h2>What AbsurdJS Did For Us</h2>
    
    <p><a href="http://absurdjs.com/" rel="nofollow external" class="bo">AbsurdJS</a> was originally started as a <a href="http://absurdjs.com/pages/css-preprocessing/" rel="nofollow external" class="bo">CSS preprocessor</a>, expanded to an <a href="http://absurdjs.com/pages/html-preprocessing/" rel="nofollow external" class="bo">HTML preprocessor</a> and it was successfully ported for client side usage. So, in the beginning we use it for compiling JavaScript to HTML or CSS. Yes, you heard me right; we started writing our styles and markup in JavaScript (probably sounds strange, but please keep reading). I pushed the library forward and a dozen of functionalities were added.</p>
    
    <h3>Divide and Rule</h3>
    
    <p>When you have a complex system, with many pages, you really don't want to solve big problems. It is much better to split everything into smaller tasks and solve them one by one. We did the same thing. We decided that our application will be built of smaller components, like so:</p>
    
    <pre>var absurd = Absurd();&#x000A;    var MyComp = absurd.component('MyComp', {&#x000A;        constructor: function() {&#x000A;            // ...&#x000A;        }&#x000A;    });&#x000A;    var instance = MyComp();&#x000A;    </pre>
    
    <p><code>absurd.component</code> defines a class. Calling the <code>MyComp()</code> method creates a new instance.</p>
    
    <h3>Let's Talk to Each Other</h3>
    
    <p>Having all these small components, we needed a channel for communication. The observer pattern was perfect for this case. So, every component is an event dispatcher.</p>
    
    <pre>var MyComp = absurd.component('MyComp', {&#x000A;        doSomething: function() {&#x000A;            this.dispatch('something-happen');&#x000A;        }&#x000A;    });&#x000A;    var instance = MyComp();&#x000A;    instance.on('something-happen', function() {&#x000A;        console.log('Hello!');&#x000A;    });&#x000A;    instance.doSomething();&#x000A;    </pre>
    
    <p>We are also able to pass data along with the message. The definition of the components and their "listen-dispatch" nature is pretty trivial. I adopted this concept from the other popular frameworks, because it looks natural. It was also much easier for my colleagues to start using AbsurdJS.</p>
    
    <h3>Controlling the DOM</h3>
    
    <p>Along with the PHP served markup, we had dynamically created DOM elements. This means that we needed access to the existing DOM elements or new ones, that will be later added to the page. For example, let's say that we have the following HTML:</p>
    
    <pre>&lt;div class="content"&gt;&#x000A;        &lt;h1&gt;Page title&lt;/h1&gt;&#x000A;        &lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.&lt;/p&gt;&#x000A;    &lt;/div&gt;</pre>
    
    <p>Here is a component which retrieves the heading:</p>
    
    <pre>absurd.component('MyComp', {&#x000A;        html: '.content h1',&#x000A;        constructor: function() {&#x000A;            this.populate();&#x000A;            console.log(this.el.innerHTML); // Page title&#x000A;        }&#x000A;    })();&#x000A;    </pre>
    
    <p>The <code>populate</code> method is the only <em>magic</em> method in the whole library. It does several things like compiling CSS or HTML, it binds events and such things. In the example above, it sees that there is an <code>html</code> property and initializes the <code>el</code> variable which points to the DOM element. This works pretty good for us because once we got that reference, we were able to work with the elements and its children. For those components that needed dynamically created elements, the <code>html</code> property accepts an object.</p>
    
    <pre>absurd.component('MyComp', {&#x000A;        html: {&#x000A;            'div.content': {&#x000A;                h1: 'Page title',&#x000A;                p: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'&#x000A;            }&#x000A;        },&#x000A;        constructor: function() {&#x000A;            this.populate();&#x000A;            document.querySelector('body').appendChild(this.el);&#x000A;        }&#x000A;    })();&#x000A;    </pre>
    
    <p>The JSON above is translated to the same HTML markup. I chose JSON because from a JavaScript point of view, it is much more flexible. We are able to merge objects, replace or delete only parts of it. In most of the popular frameworks, the templates are just plain text that makes them difficult for manipulating. AbsurdJS also has its own <a href="http://krasimirtsonev.com/blog/article/Javascript-template-engine-in-just-20-line" rel="nofollow external" class="bo">templating engine</a>.</p>
    
    <pre>absurd.component('MyComp', {&#x000A;        html: {&#x000A;            'div.content': {&#x000A;                h1: '&lt;% this.title %&gt;',&#x000A;                ul: [&#x000A;                    '&lt;% for(var i=0; i',&#x000A;                    { li: '&lt;% this.availableFor[i] %&gt;' },&#x000A;                    '&lt;% } %&gt;'&#x000A;                ]&#x000A;            }&#x000A;        },&#x000A;        title: 'That\'s awesome',&#x000A;        availableFor: ['all browsers', 'Node.js'],&#x000A;        constructor: function() {&#x000A;            this.populate();&#x000A;            document.querySelector('body').appendChild(this.el);&#x000A;        }&#x000A;    })();&#x000A;    </pre>
    
    <p>The result is:</p>
    
    <pre>&lt;div class="content"&gt;&#x000A;        &lt;h1&gt;That's awesome&lt;/h1&gt;&#x000A;        &lt;ul&gt;&#x000A;            &lt;li&gt;all browsers&lt;/li&gt;&#x000A;            &lt;li&gt;Node.js&lt;/li&gt;&#x000A;        &lt;/ul&gt;&#x000A;    &lt;/div&gt;</pre>
    
    <p>The <code>this</code> keyword in the expressions above, points to the component itself. The code between <code>&lt;%</code> and <code>%&gt;</code> is valid JavaScript. So, features like computed properties could be easily developed directly into the template's definition. Of course, we are able to use the same template engine with already existing markup. For example:</p>
    
    <pre>&lt;div class="content"&gt;&#x000A;        &lt;h1&gt;&lt;% this.title %&gt;&lt;/h1&gt;&#x000A;        &lt;ul&gt;&#x000A;            &lt;% for(var i=0; i&amp;amp;lt;this.availableFor.length; i++) { %&gt;&#x000A;            &lt;li&gt;&lt;% this.availableFor[i] %&gt;&lt;/li&gt;&#x000A;            &lt;% } %&gt;&#x000A;        &lt;/ul&gt;&#x000A;    &lt;/div&gt;</pre>
    
    <p>... could be controlled with the following component (the result is the same):</p>
    
    <pre>absurd.component('MyComp', {&#x000A;        html: '.content',&#x000A;        title: 'That\'s awesome',&#x000A;        availableFor: ['all browsers', 'Node.js'],&#x000A;        constructor: function() {&#x000A;            this.populate();&#x000A;        }&#x000A;    })();&#x000A;    </pre>
    
    <p>Anyway, the point is that we were able to define templates or create such from scratch. We are also able to control the data that is injected in an easy and natural way. Everything is just properties of the good old JavaScript object. </p>
    
    <h3>What About the Styling?</h3>
    
    <p>We successfully split the whole system in to small modules. The parts that were before Angular controllers, became AbsurdJS components. We realized that their HTML was tightly attached to their definition, that completely changed the management of the markup in the application. We stopped thinking about the concatenation, conventions or anything like that. We did not have to create HTML files at all. When I look back, I could see this exact moment in our commit history. It is easily visible because many files were removed from the code-base. </p>
    
    <p>Then I thought, what will happen if we do the same thing with the CSS. It was of course possible because AbsurdJS was a CSS preprocessor and could produce CSS. We just got the compiled string, create a new <code>style</code> tag in the <code>head</code> of the current page and inject it there.</p>
    
    <pre>absurd.component('MyComp', {&#x000A;        css: {&#x000A;            '.content': {&#x000A;                h1: {&#x000A;                    color: '#99FF00',&#x000A;                    padding: 0,&#x000A;                    margin: 0&#x000A;                },&#x000A;                p: {&#x000A;                    fontSize: '20px'&#x000A;                }&#x000A;            }&#x000A;        },&#x000A;        html: '.content',&#x000A;        constructor: function() {&#x000A;            this.populate();&#x000A;        }&#x000A;    })();&#x000A;    </pre>
    
    <p>Here is the <code>style</code> tag which is produced:</p>
    
    <pre>&lt;style id="MyComp-css" type="text/css"&gt;&#x000A;        .content h1 {&#x000A;          color: #99FF00;&#x000A;          padding: 0;&#x000A;          margin: 0;&#x000A;        }&#x000A;        .content p {&#x000A;          font-size: 20px;&#x000A;        }&#x000A;    &lt;/style&gt;</pre>
    
    <p>And day by day we transferred the CSS styles from the SASS files (because, at some point, we chose SASS as a CSS preprocessor) to the AbsurdJS components. To be honest, it was pretty easy because all the mixins and variables which we have, were defined as JavaScript functions and variables. The sharing of the styles was even easier because everything was JavasSript. </p>
    
    <h3>That Awkward Moment</h3>
    
    <p>... when everything works perfectly but you feel that something is wrong</p>
    
    <p>We were looking at the code. It worked. AbsurdJS drove even the old parts. The new stuff uses the same library. The HTML and the CSS were nicely separated and placed directly into the components' definition. However, I felt that there was something wrong. I stopped for a while and asked myself: "What is the Web made from?".</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20602/image/img4.png" style="max-width: 100%; height: auto;">
    
    <p>And what we did, is a little bit different. It looks more like the picture below.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20602/image/img5.png" style="max-width: 100%; height: auto;">
    
    <p>I've been building websites for more than ten years and I remember the times when we all fought for the big separation of these three building materials. And what I did in this project is exactly the opposite. There was no CSS and HTML files (almost) at all. Everything was JavaScript. </p>
    <p>Many people will say that this is ridiculous and we should give the client's money back. Yes, this could be true, but this concept worked perfectly in our case. We did not write an application. In fact, we wrote a bunch of independent components. I believe that the Web will be a combination of ready-to-use components. </p>
    <p>We, as developers, will have to develop such components and probably connect with and use such components written by others. Projects like <a href="http://absurdjs.com/" rel="nofollow external" class="bo">AbsurdJS</a> or <a href="http://www.polymer-project.org/" rel="nofollow external" class="bo">Polymer</a> are showing that this is possible and I encourage you to experiment in this direction. </p>
    
    <h2>Back to Reality</h2>
    
    <p>So in the end the client's business went well. It was so good that he decided to launch a new service. And guess what. He wanted some parts of the existing application transferred into the new project. I can't tell you how happy we were to move components from one place to another. We did not have to setup something, copy HTML markup or CSS files. We just got the JavaScript file of the component, placed it somewhere and created an instance of it. It just worked because there were no dependencies. I'd not be surprised if some of these components are put up for sale very soon. They are pretty light and provide nice functionality connected with the client's product.</p>
    
    <p>Yes, we broke some rules. Rules that I personally agree with. Rules that I followed for many years. However, the reality is that we all want quality and sometimes that quality is reachable by breaking the rules. We want to produce good, well structured code which is easily maintainable, flexible and extendable. We do not want to look back and say, "Oh my gosh ... was that written by me!?". When I look back now, I know why the code looks the way it does. It looks like that because it was written for that project specifically.</p>
    
    <h2>Conclusion</h2>
    
    <p>If you found this tutorial interesting, check out the official page of <a href="http://absurdjs.com/" rel="nofollow external" class="bo">AbsurdJS</a>. There are guides, documentation, and articles. You can even try the <a href="http://absurdjs.com/pages/try-it/" rel="nofollow external" class="bo">library online</a>. Like every other tool, AbsurdJS is designed for specific usage. It fit well for our project and may fit for yours. I don't even call it a framework, because I don't like this definition. It's more like a toolbox rather then a full stack framework. Feel free to experiment with it, make pull requests or submit issues. It's completely open source and <a href="https://github.com/krasimir/absurd" rel="nofollow external" class="bo">available at GitHub</a>.</p>
    </div>
]]>
</Body>
<Summary>This is the story about a project of mine. A big one. A mixture between PHP and Node.js. It's a single page application from one point of view and an SEO optimized website from another. Tons of...</Summary>
<Website>http://code.tutsplus.com/tutorials/componentizing-the-web--cms-20602</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43289/guest@my.umbc.edu/7873da6d0acd43b0f550643883344def/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 10:00:09 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="43297" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43297">
<Title>Internet Choice Will Be Crucial Battlefield in Big Cable Merger</Title>
<Body>
<![CDATA[
    <div class="html-content">Comcast’s position that there will be no diminution of cable TV competition in its proposed takeover of Time Warner may be beside the point as Wednesday’s Senate hearing approaches.<br>
    </div>
]]>
</Body>
<Summary>Comcast’s position that there will be no diminution of cable TV competition in its proposed takeover of Time Warner may be beside the point as Wednesday’s Senate hearing approaches.</Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/3916158d/sc/1/l/0L0Snytimes0N0C20A140C0A40C0A80Cbusiness0Cin0Escrutiny0Eof0Ecable0Emerger0Einternet0Echoice0Ewill0Ebe0Ecrucial0Ebattlefield0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43297/guest@my.umbc.edu/ab23e7706b7397f206aa7afe6834246f/api/pixel</TrackingUrl>
<Tag>amazon-com-inc-amzn-nasdaq</Tag>
<Tag>at-and-t-inc-t-nyse</Tag>
<Tag>comcast-corporation-cmcsa-nasdaq</Tag>
<Tag>mergers-acquisitions-and-divestitures</Tag>
<Tag>netflix-inc-nflx-nasdaq</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>time-warner-cable-inc-twc-nyse</Tag>
<Tag>verizon-communications-inc-vz-nyse</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>Mon, 07 Apr 2014 09:56:57 -0400</PostedAt>
<EditAt>Mon, 07 Apr 2014 09:56:57 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="43287" important="false" status="posted" url="https://my3.my.umbc.edu/posts/43287">
<Title>Andreas Seas is Real People Profile of the Week!</Title>
<Body>
<![CDATA[
    <div class="html-content">Meet Honors College freshman, Andreas Seas<div><br></div>
    </div>
]]>
</Body>
<Summary>Meet Honors College freshman, Andreas Seas</Summary>
<Website>https://ur.umbc.edu/home/our-researchers/research-profiles/andreas-seas/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/43287/guest@my.umbc.edu/e751b6565f290051c216225c5b49e842/api/pixel</TrackingUrl>
<Group token="honorscollege">Honors College</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/honorscollege</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/xsmall.png?1339897259</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/original.jpg?1339897259</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/xxlarge.png?1339897259</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/xlarge.png?1339897259</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/large.png?1339897259</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/medium.png?1339897259</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/small.png?1339897259</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/xsmall.png?1339897259</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/413/cd2018beeece5fb0a71a96308e567bde/xxsmall.png?1339897259</AvatarUrl>
<Sponsor>Honors College</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 07 Apr 2014 09:28:20 -0400</PostedAt>
<EditAt>Tue, 20 Aug 2024 15:24:43 -0400</EditAt>
</NewsItem>

</News>
