<?xml version="1.0"?>
<News hasArchived="true" page="9025" pageCount="10793" pageSize="10" timestamp="Sun, 06 Sep 2026 21:22:48 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=9025&amp;range=30">
<NewsItem contentIssues="false" id="29635" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29635">
<Title>Analyzing my DNA</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>I recently bought <a href="http://23andme.com" rel="nofollow external" class="bo">23andme</a>, a service which requires you to send off a DNA sample, and in return performs a series of interesting tests concerning your health and ancestry. I bought the test as a birthday present to myself, somewhat because I was interested in the results, but also because I wanted to treat it as a catalyst for learning more about the subject.</p>
    
    <hr>
    
    <p>The first step in the process of getting your DNA analyzed by 23andme, is to put a substantial amount of saliva into to a specialized container they mail you. This saliva contains cheek cells, which is what 23andme use for genotyping. They don’t need many cells, but the reason why they ask for so much saliva is so that it’s harder to take someone else’s DNA without their permission!</p>
    
    <p>Then the DNA sample is mailed off to 23andme’s laboratory where it’s <a href="http://en.wikipedia.org/wiki/Polymerase_chain_reaction" rel="nofollow external" class="bo">amplified through PCR</a>, a process where the DNA is separated from the nucleus and replicated. Lastly it’s put through a machine which, rather than sequence the whole genome, looking for specific <a href="http://en.wikipedia.org/wiki/Single-nucleotide_polymorphism" rel="nofollow external" class="bo">SNPs</a>. These SNPs are responsible for a lot of the biological differences between people, and variations influence a variety of traits such as height, eye color and disease susceptibility. </p>
    
    <hr>
    
    <p>So now 23andme have analyzed about a million of your SNPs, it’s time to draw some conclusions from the genotyping. Most of the health and trait reports are based on genetic association studies, taking a specific SNP and testing for associations with factors like eye color and diseases like Parkinson’s. Furthermore, 23andme can correlate diseases and symptoms from all their users to specific SNPs, furthering research and understanding of how they affect our bodies. </p>
    
    <p>Genetic associations are not a certainty that a specific SNP will have a specific outcome, but rather a probability. Correlations doesn’t mean causation either, and while there may be an association, additional research is needed to show whether the factor has a causal effect.</p>
    
    <p>There are a bunch of heritable genetic disorders that 23andme tests carrier status for, such as Cystic Fibrosis. While the gene for Cystic Fibrosis is recessive, if you mate with someone who also has the same recessive gene, then the likelihood is that your child will develop the disease is one quater. Other disorders like Huntington’s are dominant, and only requires one parent to be a carrier. 23andme doesn’t seem to do much testing of dominant genetic disorders, as it’s likely that the parents are already aware of the issue.</p>
    
    <p>Working out how SNP affects a phenotype trait is tricky. Most SNP changes have no effect, while other characteristics are due to environmental factors. One way of investigating this, is by studying identical twins. Since they have the exact same DNA, any differences between the two can be attributed to environmental factors. Some phenotypes like height are mostly influenced by your genetics (assuming you have a good nutrition), while others like freckles are more affected by the environment.</p>
    
    <p>This difference between environmental and heritable traits is often called <a href="http://en.wikipedia.org/wiki/Nature_versus_nurture" rel="nofollow external" class="bo">nature vs nuture</a>, and can be fairly controversial at times. Take, for example, IQ. The effect that parents have upon their children’s intelligence is in serious dispute and, while a neglectful and abusive upbringing can have an adverse effect, given a base minimum supportive parenting doesn’t have have much of an influence on IQ. <a href="http://en.wikipedia.org/wiki/Nature_versus_nurture#IQ_debate" rel="nofollow external" class="bo">Studies have shown</a> that identical twins who grow up in separate families have an IQ correlation of 0.74, while adoptive siblings have no more similar IQ than strangers. </p>
    
    <hr>
    
    <p>I’m not going to talk about the more sensitive health information I gleaned from the report, as while President Bush signed the Genetic Information Nondiscrimination Act I’m still wary of how it could affect my insurance in the future. However, let’s talk about a non sensitive trait, <em>lactose intolerance</em>. Lactose intolerance is fairly heritable and is influenced by an SNP near the LCT gene which encodes lactase, an enzyme required for digestion of milk. </p>
    
    <p>Normally, the lactase enzyme is only produced in the first few years of a mammals life. However, certain European populations have a mutation that causes lactase to be produced throughout their lives. Dairy farming, which is widespread primarily in Europe, provided additional sources of nutrition to early inhabitants of Europe. Thus, it is thought, being able to drink milk throughout adulthood would have provided them with an evolutionary advantage.</p>
    
    <p>My genotype for this SNP is AG, or adenine and guanine. This has been correlated with higher adult lactase levels. This allele is rarer in Africa and Asia, hence the high cases of lactose intolerance in those regions.</p>
    <blockquote>
    <p>SNP: rs4988235 (A or G)<br>
    Alex’s Genotype: AG<br>
    Gene: MCM6<br>
    Chromosome: 2   </p>
    </blockquote>
    <p>As I say, while this trait is heritable, it is also influenced by environmental characteristics such as the bacteria in your gut. In other words, having a AG genotype doesn’t always mean you’ll be lactose tolerant, and vice versa. It’s all about probability, and in this case 23andme were correct - I am lactose tolerant, which is useful as I enjoy milk! </p>
    
    <hr>
    
    <p>Calculating ancestry through DNA is an interesting process, because it turns out that the variations between you and your ancestor’s DNA make it impossible to detect relations after a few generations or so. However the Y chromosome is passed down from father to son without much alteration, which means it makes a perfect candidate for looking into your past. Maternal descent is calculated from DNA found in the mitochondria, as this too is passed down unaltered from mother to child. Using these two pieces of information we can look hundreds of thousands of years into our past, as well as at our more recent history.</p>
    
    <p>My ancestors, on both my mother’s and father’s side, are from Europe - mostly from the UK, Ireland and Scotland, with a little Spanish and German mix. My DNA is 2.9% neanderthal, which puts me in the top 91% of 23andme’s members (not sure what conclusions to draw from that!). I’m also distantly related to Jesse James on my mother’s side, and have found a previously unknown second cousin in Scotland.</p>
    
    <p>Genetic family trees can be identified by looking at haplogroups, a set of genetic mutations that are shared by everyone in the group. The likelihood is that if you share a lot of specific genetic mutations with someone, than you’re related. All haplogroups can be traced back to a mutation in a single individual. </p>
    
    <p>For example, 8 percent of asian males are in the <a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1180246/" rel="nofollow external" class="bo">same haplogroup as Genghis Khan</a>,  and carry Y chromosomes that share many of the same SNPs. Y chromosomes aren’t recombined when they’re inherited, so genetic mutations in them act as markers, allowing geneticists to trace them back and predict in time the moment they occurred. Such a rapid spread of this particular mutation is unlikely to have happened by chance, and suggests that 0.5% of the world’s population are descendants of Genghis Khan and his male relatives - quite a staggering amount. </p>
    
    <p>Geneticists can trace back humans to a single male and female, <a href="http://en.wikipedia.org/wiki/Y-chromosomal_Adam" rel="nofollow external" class="bo">a genetic “Adam and Eve”</a>. What’s fascinating is that while Adam lived about 142,000 years ago, Eve lived much earlier, about 200,000 years ago - they never met each other. Y-chromosomal Adam lived at a time close to the <a href="http://en.wikipedia.org/wiki/Recent_African_origin_of_modern_humans" rel="nofollow external" class="bo">migration from Africa</a>, and this turmoil could suggest a reason why so few males lineages survived.</p>
    
    <hr>
    
    <p>Analyzing my DNA has given me a fascinating insight into my health and ancestry, and something I’d recommend to everyone. However, personally the best part of the whole process was learning more about DNA and how it effects us. It’s a fascinating subject which is undergoing a lot of research.</p>
    
    <p>On a separate note, 23andme’s service is really commendable. Businesses that combine commercial products with scientific research and advances are close to my heart. Other examples of this kind of approach are SpaceX and Tesla. </p>
    </div>
]]>
</Body>
<Summary>I recently bought 23andme, a service which requires you to send off a DNA sample, and in return performs a series of interesting tests concerning your health and ancestry. I bought the test as a...</Summary>
<Website>http://blog.alexmaccaw.com/analyzing-my-dna</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29635/guest@my.umbc.edu/adf4c1d2afbf5b078e70d52b6a59b8e8/api/pixel</TrackingUrl>
<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, 18 Mar 2013 12:47:00 -0400</PostedAt>
<EditAt>Mon, 18 Mar 2013 12:47:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="26181" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26181">
<Title>Are Your Eyes Bigger Than Your Budget? 3 Tips to Rein in Your Startup Costs</Title>
<Body>
<![CDATA[
    <div class="html-content">Startups simply must make a budget and stick to it. Otherwise, you could wind up a statistic. Here are just three ways to keep your costs down.</div>
]]>
</Body>
<Summary>Startups simply must make a budget and stick to it. Otherwise, you could wind up a statistic. Here are just three ways to keep your costs down.</Summary>
<Website>http://feedproxy.google.com/~r/YoungentrepreneurcomBlog/~3/cMQBPYuLmlc/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26181/guest@my.umbc.edu/7d85985de2a935e776139d14f0b16d19/api/pixel</TrackingUrl>
<Tag>business-management</Tag>
<Tag>expenses</Tag>
<Tag>office-space</Tag>
<Tag>resources</Tag>
<Tag>startup-budget</Tag>
<Tag>startup-finance</Tag>
<Tag>work-from-home</Tag>
<Group token="entrepreneurship">Alex. Brown Center for Entrepreneurship</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/entrepreneurship</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/original.jpg?1771000363</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/large.png?1771000363</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/medium.png?1771000363</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/small.png?1771000363</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxsmall.png?1771000363</AvatarUrl>
<Sponsor>The Alex. Brown Center for Entrepreneurship</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 18 Mar 2013 12:30:38 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26183" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26183">
<Title>Startup Offers a Fresh Take on Online Auctions</Title>
<Body>
<![CDATA[
    <div class="html-content">Yumani lets vendors duke it out to give you the best price.<br><br><a href="http://da.feedsportal.com/r/159490574540/u/49/f/625555/c/34343/s/29b4a3c2/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/159490574540/u/49/f/625555/c/34343/s/29b4a3c2/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Yumani lets vendors duke it out to give you the best price.</Summary>
<Website>http://feedproxy.google.com/~r/entrepreneur/startingabusiness/~3/l_QO5bn91Fo/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26183/guest@my.umbc.edu/44014a1c251d7f37f640f705a74ad6a5/api/pixel</TrackingUrl>
<Group token="entrepreneurship">Alex. Brown Center for Entrepreneurship</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/entrepreneurship</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/original.jpg?1771000363</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xlarge.png?1771000363</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/large.png?1771000363</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/medium.png?1771000363</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/small.png?1771000363</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xsmall.png?1771000363</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/092/53c03b106bdc6e19e4bf0a41b5a37add/xxsmall.png?1771000363</AvatarUrl>
<Sponsor>The Alex. Brown Center for Entrepreneurship</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 18 Mar 2013 12:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26185" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26185">
<Title>Rock Hammer replaces 320 and Up</Title>
<Body>
<![CDATA[
    <div class="html-content">New toolkit aimed at getting web designers out of Photoshop<div><table border="0"><tbody><tr>
    <td><a href="http://share.feedsportal.com/viral/sendEmail.cfm?lang=en&amp;title=Rock+Hammer+replaces+320+and+Up&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Frock-hammer-replaces-320-and-132632" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/emailthis2.gif" style="max-width: 100%; height: auto;"></a></td>
    <td><a href="http://res.feedsportal.com/viral/bookmark.cfm?title=Rock+Hammer+replaces+320+and+Up&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Frock-hammer-replaces-320-and-132632" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/bookmark.gif" style="max-width: 100%; height: auto;"></a></td>
    </tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/159490359198/u/49/f/502346/c/32632/s/29b5258c/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/159490359198/u/49/f/502346/c/32632/s/29b5258c/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>New toolkit aimed at getting web designers out of Photoshop</Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/5LHD85Bfexk/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26185/guest@my.umbc.edu/4617421194f149e395ccacb9098cdbd9/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 18 Mar 2013 11:42:28 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26179" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26179">
<Title>Give Photoshop a chance</Title>
<Body>
<![CDATA[
    <div class="html-content">Responsive web design doesn’t mean we should abandon Photoshop, says Dan Rose – but we do need to redefine how we use it<div><table border="0"><tbody><tr>
    <td><a href="http://share.feedsportal.com/viral/sendEmail.cfm?lang=en&amp;title=Give+Photoshop+a+chance&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fopinions%2Fgive-photoshop-chance" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/emailthis2.gif" style="max-width: 100%; height: auto;"></a></td>
    <td><a href="http://res.feedsportal.com/viral/bookmark.cfm?title=Give+Photoshop+a+chance&amp;link=http%3A%2F%2Fwww.netmagazine.com%2Fopinions%2Fgive-photoshop-chance" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/images/bookmark.gif" style="max-width: 100%; height: auto;"></a></td>
    </tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/159490762622/u/49/f/502346/c/32632/s/29b4748a/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/159490762622/u/49/f/502346/c/32632/s/29b4748a/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Responsive web design doesn’t mean we should abandon Photoshop, says Dan Rose – but we do need to redefine how we use it</Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/h6ygJikneRM/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26179/guest@my.umbc.edu/e43abb7ca88d6f745d272ee96d8fbcae/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 18 Mar 2013 10:58:59 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="26175" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26175">
<Title>Digital Societies and Social Technologies Summer Institute, UMCP</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" rel="nofollow external" class="bo"><img alt="CASCI: Center for the Advanced Study of Communities and Information" height="147" src="//www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" width="700" style="max-width: 100%; height: auto;"></a></p>
    <p>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 <a href="http://bit.ly/DSST13" rel="nofollow external" class="bo">Digital Societies and Social Technologies Summer Institute</a>, 7/28 to 8/1 at the University of Maryland College Park.</p>
    <blockquote><p>"MOOCs, Education and learning; personal health and well-being; open innovation, eScience, and citizen science; co-production, open source, and new forms of work; cultural heritage and information access; energy management and climate change; civic hacking, engagement and government; disaster response; cybersecurity and privacy – these are just a few problem domains where effective design and robust understanding of complex sociotechnical systems is critical. To meet these challenges a trans-disciplinary community of scholars has come together from fields as wide ranging as CSCW, HCI, social computing, organization studies, information visualization, social informatics, sociology, information systems, medical informatics, computer science, ICT for development, education, learning science, journalism, and political science."</p></blockquote>
    <p>Lodging, meals, and other onsite costs will be covered for all Summer Institute participants. Applications are due by April 5.</p>
    </div>
]]>
</Body>
<Summary>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 Digital Societies and Social Technologies...</Summary>
<Website>http://www.csee.umbc.edu/2013/03/digital-societies-and-social-technologies-summer-institute-umcp/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26175/guest@my.umbc.edu/a0a428836e57a824b716385871433abe/api/pixel</TrackingUrl>
<Tag>fyi</Tag>
<Tag>graduate</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, 18 Mar 2013 10:29:27 -0400</PostedAt>
<EditAt>Mon, 18 Mar 2013 10:29:27 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="57847" important="false" status="posted" url="https://my3.my.umbc.edu/posts/57847">
<Title>Digital Societies and Social Technologies Summer Institute, UMCP</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" rel="nofollow external" class="bo"><img alt="CASCI: Center for the Advanced Study of Communities and Information" height="147" src="//www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" width="700" style="max-width: 100%; height: auto;"></a></p>
    <p>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 <a href="http://bit.ly/DSST13" rel="nofollow external" class="bo">Digital Societies and Social Technologies Summer Institute</a>, 7/28 to 8/1 at the University of Maryland College Park.</p>
    <blockquote><p>"MOOCs, Education and learning; personal health and well-being; open innovation, eScience, and citizen science; co-production, open source, and new forms of work; cultural heritage and information access; energy management and climate change; civic hacking, engagement and government; disaster response; cybersecurity and privacy – these are just a few problem domains where effective design and robust understanding of complex sociotechnical systems is critical. To meet these challenges a trans-disciplinary community of scholars has come together from fields as wide ranging as CSCW, HCI, social computing, organization studies, information visualization, social informatics, sociology, information systems, medical informatics, computer science, ICT for development, education, learning science, journalism, and political science."</p></blockquote>
    <p>Lodging, meals, and other onsite costs will be covered for all Summer Institute participants. Applications are due by April 5.</p>
    </div>
]]>
</Body>
<Summary>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 Digital Societies and Social Technologies...</Summary>
<Website>https://www.csee.umbc.edu/2013/03/digital-societies-and-social-technologies-summer-institute-umcp/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/57847/guest@my.umbc.edu/d4b1f1a461e14e169a7ea0838a18fb5d/api/pixel</TrackingUrl>
<Tag>fyi</Tag>
<Tag>graduate</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, 18 Mar 2013 10:29:27 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42636" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42636">
<Title>Digital Societies and Social Technologies Summer Institute, UMCP</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" rel="nofollow external" class="bo"><img alt="CASCI: Center for the Advanced Study of Communities and Information" height="147" src="//www.csee.umbc.edu/wp-content/uploads/2013/03/cropped-cropped-new-header.png" width="700" style="max-width: 100%; height: auto;"></a></p>
    <p>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 <a href="http://bit.ly/DSST13" rel="nofollow external" class="bo">Digital Societies and Social Technologies Summer Institute</a>, 7/28 to 8/1 at the University of Maryland College Park.</p>
    <blockquote><p>"MOOCs, Education and learning; personal health and well-being; open innovation, eScience, and citizen science; co-production, open source, and new forms of work; cultural heritage and information access; energy management and climate change; civic hacking, engagement and government; disaster response; cybersecurity and privacy – these are just a few problem domains where effective design and robust understanding of complex sociotechnical systems is critical. To meet these challenges a trans-disciplinary community of scholars has come together from fields as wide ranging as CSCW, HCI, social computing, organization studies, information visualization, social informatics, sociology, information systems, medical informatics, computer science, ICT for development, education, learning science, journalism, and political science."</p></blockquote>
    <p>Lodging, meals, and other onsite costs will be covered for all Summer Institute participants. Applications are due by April 5.</p>
    </div>
]]>
</Body>
<Summary>Doctoral students, postdocs and established researchers working in the intersection of technology and social systems might consider applying to the 2013 Digital Societies and Social Technologies...</Summary>
<Website>http://www.csee.umbc.edu/2013/03/digital-societies-and-social-technologies-summer-institute-umcp/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=digital-societies-and-social-technologies-summer-institute-umcp</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42636/guest@my.umbc.edu/5e9943091ce3d94087e301df876d300d/api/pixel</TrackingUrl>
<Tag>fyi</Tag>
<Tag>graduate</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, 18 Mar 2013 10:29:27 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="26176" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26176">
<Title>Writing Your Own jQuery Plugins</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://jquery.com" rel="nofollow external" class="bo">jQuery</a> is great. It’s cross-browser, easy to learn, and makes adding interactivity to your website a breeze. It also comes with plenty of <a href="http://plugins.jquery.com/" rel="nofollow external" class="bo">plugins</a> to do almost whatever you need it to do.</p>
    <p>But what if you can’t find just the right plugin to suit your needs? Or you’re just looking to keep your project <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself" rel="nofollow external" class="bo">DRY</a> by combining some oft-used functionality into one nice, neat package? The solution might be to roll your own plugin to meet exactly your needs.</p>
    <p>Writing your own jQuery plugin isn’t as hard as it might seem at first. This tutorial will go through the process of writing a simple plugin, adding some options, and even perform a callback.</p>
    <h2>Setting Up</h2>
    <p>We’ll start with the old chesnut of programming tutorials, a “Hello, World!” plugin. Before we can do anything, we need to establish our file and link it to our HTML document. First, we’ll create our plugin file and put it in the “js” directory of our website. It’s traditional to start our filename with “jquery,” followed by the actual plugin name, so we’ll call this “jquery.hello-world.js”.</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/finder.png" rel="nofollow external" class="bo"><img alt="Our web directory." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/finder.png" width="760" height="448" style="max-width: 100%; height: auto;"></a><p>Our “Hello, World!” plugin, snuggly next to our jQuery core file.</p>
    </div>
    <p>Next, we’ll need to make sure our plugin file, as well as it’s jQuery core big brother, are linked in our HTML file, so place the following two lines at the bottom of your HTML document, just before the closing <code>&lt;/body&gt;</code> tag:</p>
    <pre><code>&lt;script src="js/jquery-1.9.1.min.js"&gt;&lt;/script&gt;&#x000A;    &lt;script src="js/jquery.hello-world.js"&gt;&lt;/script&gt;&#x000A;    </code></pre>
    <h2>The jQuery Plugin Structure</h2>
    <p>jQuery comes with all the necessary hooks to build your plugin file easily. But we still want to be mindful of good JavaScript practices, and make sure we keep everything inside a local scope. We’ll start with the very basic shell of a traditional jQuery plugin:</p>
    <pre><code>(function($) {&#x000A;    &#x000A;        $.fn.helloWorld = function() {&#x000A;    &#x000A;            // Future home of "Hello, World!"&#x000A;    &#x000A;        }&#x000A;    &#x000A;    }(jQuery));&#x000A;    </code></pre>
    <p>Let’s take a quick moment to understand what’s going on. By including everything in the <code>(function() {})</code> self-enclosed JavaScript pattern, we’re making sure that all the variables in our plugin will stay safely outside of the global namespace. We don’t want to cause any collisions with any other JavaScript used on the page, after all.</p>
    <p>The other thing you might notice is that we’re defining our plugin as if jQuery was in it’s “no-conflict” mode. Again, we’re seeking to avoid colliding with other JavaScript on the page, and thus we want to make sure that our plugin isn’t reliant on the default <code>$</code>, which could be used by another library.</p>
    <p>Finally, <code>$.fn</code> is jQuery’s way of allowing you to define your plugin, which we’ve named <code>helloWorld</code>. With all of our pieces in place, let’s actually do something!</p>
    <h2>Making Our Plugin Do Something</h2>
    <p>For our plugin, we’re going to do something pretty silly, but also simple enough for our demonstration purposes, and that is to change all the text for the acted upon elements with (what else?) the text “Hello, World!”.</p>
    <pre><code>(function($) {&#x000A;    &#x000A;        $.fn.helloWorld = function() {&#x000A;    &#x000A;            this.each( function() {&#x000A;                $(this).text("Hello, World!");&#x000A;            });&#x000A;    &#x000A;        }&#x000A;    &#x000A;    }(jQuery));&#x000A;    </code></pre>
    <p>When we’re invoking the plugin by attaching it to a jQuery selector, the object we’re acting upon is already a jQuery object, so we don’t need to wrap it in the <code>$(this)</code> structure you’re used to. However, once we start looping through each instance of the matching selector, we use the <code>$(this)</code> structure as we would any time we ran our selectors through <code>$.each()</code>.</p>
    <p>Suppose we wanted to change the text of all of our <code>&lt;h2&gt;</code> headers on the following page:</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/before.png" rel="nofollow external" class="bo"><img alt='A screenshot of our web page before we run our "Hello, World!" plugin.' src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/before.png" width="760" height="443" style="max-width: 100%; height: auto;"></a><p>Our web page, ripe for the text swapping via jQuery.</p>
    </div>
    <p>We would invoke the plugin as you’re already familiar, like so:</p>
    <pre><code>&lt;script&gt;&#x000A;    $(document).ready( function() {&#x000A;        $('h2').helloWorld();&#x000A;    });&#x000A;    &lt;/script&gt;&#x000A;    </code></pre>
    <p>To yield this:</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/after.png" rel="nofollow external" class="bo"><img alt='A screenshot of our webpage with the &lt;h2&gt; headers swapped out with "Hello, World!"' src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/after.png" width="760" height="443" style="max-width: 100%; height: auto;"></a><p>Seems silly, I know, but we’ve now replaced all the &lt;h2&gt; headers with “Hello, World!”</p>
    </div>
    <p>We’re not quite done yet. While our plugin technically <em>works</em>, it’s living in its own little isolated world. That is, if you try and <em>chain</em> another jQuery action onto it, nothing’s going to happen because our plugin has led to a dead end. To fix this, be sure to <em>return</em> the results of the plugin as it loops through the DOM elements:</p>
    <pre><code>(function($) {&#x000A;    &#x000A;        $.fn.helloWorld = function() {&#x000A;    &#x000A;            return this.each( function() {&#x000A;                $(this).text("Hello, World!");&#x000A;            });&#x000A;    &#x000A;        }&#x000A;    &#x000A;    }(jQuery));&#x000A;    </code></pre>
    <p>And congratulations! You’ve just written you’re first jQuery plugin!</p>
    <h2>But Wait, There’s More!</h2>
    <p>Now that you’re all happy that you’ve built your jQuery plugin, your boss comes back and says that they need to be able to translate the site into Spanish. Uh oh, what do we do now?</p>
    <p>Well, we could start by just adding an argument. Let’s take our plugin above, and instead of hard-coding the text into the plugin, we can replace it with a variable and pass that along when we invoke the plugin.</p>
    <pre><code>(function($) {&#x000A;    &#x000A;        $.fn.helloWorld = function( customText ) {&#x000A;    &#x000A;            return this.each( function() {&#x000A;                $(this).text( customText );&#x000A;            });&#x000A;    &#x000A;        }&#x000A;    &#x000A;    }(jQuery));&#x000A;    </code></pre>
    <p>There, now we can pass any text we’d like to our plugin. Our offices in Madrid have given us the Spanish translation we need, which we now use as the parameter of our plugin:</p>
    <pre><code>&lt;script&gt;&#x000A;    $(document).ready( function() {&#x000A;        $('h2').helloWorld('¡Hola, mundo!');&#x000A;    });&#x000A;    &lt;/script&gt;&#x000A;    </code></pre>
    <p>Our web page now looks like this:</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/despues.png" rel="nofollow external" class="bo"><img alt='Screenshot of our "Hello, World!" plugin in Spanish.' src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/despues.png" width="760" height="443" style="max-width: 100%; height: auto;"></a><p>Our plugin, with “Hello, World!” translated into Spanish.</p>
    </div>
    <h2>Complete Customization FTW</h2>
    <p>But already we’re a little nervous. What if no text was passed when we called the plugin? As it’s written, the plugin would simply blank out the text of our matched elements, and we probably don’t want <em>that</em>. Also, our boss has already come back to us once asking to make a variable. What if he wants more customization options? Simply adding options <em>ad infinitum</em> isn’t going to work in the long term. A more future-proof solution is the <code>options</code> object.</p>
    <p>We already know that the specific text needs to be customizable. Now our boss is asking that the text color and font style be customizable as well. (Yes, I know these are simple options to chain onto our selector via built-in jQuery functions, but go with me here.) Let’s add an options object to our plugin, along with some sensible defaults using the <code>$.extend</code> method:</p>
    <pre><code>(function($) {&#x000A;    &#x000A;        $.fn.helloWorld = function( options ) {&#x000A;    &#x000A;            // Establish our default settings&#x000A;            var settings = $.extend({&#x000A;                text         : 'Hello, World!',&#x000A;                color        : null,&#x000A;                fontStyle    : null&#x000A;            }, options);&#x000A;    &#x000A;            return this.each( function() {&#x000A;                // We'll get back to this in a moment&#x000A;            });&#x000A;    &#x000A;        }&#x000A;    &#x000A;    }(jQuery));&#x000A;    </code></pre>
    <p>Now we have a <code>settings</code> object that, when the plugin is invoked devoid of any parameters, will use what we’ve established as the default text. We also have two other properties of our <code>settings</code> object, “color” and “fontStyle”, that have no default beyond <code>null</code>. For this plugin, we don’t <em>need</em> to establish any color or font style beyond what is laid out in our CSS, but they’re there for the overriding if we want. We just have to make use of them:</p>
    <pre><code>return this.each( function() {&#x000A;        $(this).text( settings.text );&#x000A;    &#x000A;        if ( settings.color ) {&#x000A;            $(this).css( 'color', settings.color );&#x000A;        }&#x000A;    &#x000A;        if ( settings.fontStyle ) {&#x000A;            $(this).css( 'font-style', settings.fontStyle );&#x000A;        }&#x000A;    });&#x000A;    </code></pre>
    <p>Since the purpose of this plugin is to replace text, it makes sense to <em>always</em> replace the text with whatever is provided, which is why it also makes sense to provide a default value so that <em>something</em> appears if the plugin is invoked without any options. But the color and font style options are tested for and only acted upon if they are provided.</p>
    <p>Our boss has come back and says now they’re going to translate the site into French, and beyond that they want the text to be blue and italic. Fortunately, our plugin can now handle all these requests:</p>
    <pre><code>$('h2').helloWorld({&#x000A;        text        : 'Salut, le monde!',&#x000A;        color       : '#005dff',&#x000A;        fontStyle   : 'italic'&#x000A;    });&#x000A;    </code></pre>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/apres.png" rel="nofollow external" class="bo"><img alt="A screenshot of our web page, now in French with blue, italic text." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/apres-1024x597.png" width="584" height="340" style="max-width: 100%; height: auto;"></a><p>With several options available to us, our plugin can now speak French, and even change the appearance of the text.</p>
    </div>
    <p><em>Et voilà</em>! We now have a plugin with a number of possible objects, and the ability to easily add more (or subtract what’s there) in the future without impacting legacy users of the plugin. Hooray for maintainability!</p>
    <p>But our boss has come back with yet another request: once the plugin has completed whatever task it was called to do, it should sound an alert informing us of that fact. For this, we have two options: either quit because our boss has obviously never heard of a requirements document, or go the less drastic route and give our plugin the ability to handle <em>callbacks</em>.</p>
    <p>Callbacks are options to JavaScript functions that are themselves JavaScript functions. They’re also not unique to jQuery. Again, it may seem like it would be a complicated thing to do, but actually it’s quite simple.</p>
    <p>All we need is to establish one more variable in our options object:</p>
    <pre><code>// Establish our default settings&#x000A;    var settings = $.extend({&#x000A;        text         : 'Hello, World!',&#x000A;        color        : null,&#x000A;        fontStyle    : null,&#x000A;        complete     : null&#x000A;    }, options);&#x000A;    </code></pre>
    <p>Now we have a “complete” variable to perform an action when, well, our plugin completes its action. To invoke it, we’ll want to make sure that what we’re given is actually a function. Fortunately, jQuery helps us with this with the <code>$.isFunction</code> test:</p>
    <pre><code>return this.each( function() {&#x000A;        // Our plugin so far&#x000A;    &#x000A;        if ( $.isFunction( settings.complete ) ) {&#x000A;            settings.complete.call( this );&#x000A;        }&#x000A;    });&#x000A;    </code></pre>
    <p>On the invocation side, our code becomes:</p>
    <pre><code>$('h2').helloWorld({&#x000A;        text        : 'Salut, le monde!',&#x000A;        color       : '#005dff',&#x000A;        fontStyle   : 'italic',&#x000A;        complete    : function() { alert( 'Done!' ) }&#x000A;    });&#x000A;    </code></pre>
    <p>And as a result, we see our callback as our plugin is executed:</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/complete.png" rel="nofollow external" class="bo"><img alt="Screenshot of our web page displaying an alert." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/03/complete.png" width="760" height="444" style="max-width: 100%; height: auto;"></a><p>Our plugin now displays an alert every time it executes, thanks to our callback.</p>
    </div>
    <h2>Conclusion</h2>
    <p>Custom jQuery plugins are a great option when you know you’re going to be doing a lot of the same things over and over in your JavaScript. By writing your own jQuery plugin, you’re both keeping your code DRY and your global namespace nice and clean.</p>
    <p>If you’d like to play around with the code from this example, you can grab it from <a href="https://github.com/taupecat/jquery-plugin" rel="nofollow external" class="bo">my GitHub</a>.</p>
    <p>The post <a href="http://blog.teamtreehouse.com/writing-your-own-jquery-plugins" rel="nofollow external" class="bo">Writing Your Own jQuery Plugins</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>jQuery is great. It’s cross-browser, easy to learn, and makes adding interactivity to your website a breeze. It also comes with plenty of plugins to do almost whatever you need it to do.   But...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/UdMS0Tsyxiw/writing-your-own-jquery-plugins</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26176/guest@my.umbc.edu/aeb71140ef1f97670db347042915f481/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>jquery</Tag>
<Tag>jquery-plugins-tutorial</Tag>
<Tag>jquery-tutorials</Tag>
<Tag>learn-to-code</Tag>
<Tag>responsive</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, 18 Mar 2013 09:30:39 -0400</PostedAt>
<EditAt>Mon, 18 Mar 2013 09:30:39 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="26165" important="false" status="posted" url="https://my3.my.umbc.edu/posts/26165">
<Title>How can I find primary sources?</Title>
<Body>
<![CDATA[
    <div class="html-content"><div>    <p>
            Page
                <strong>edited</strong> by
                        <a href="https://wiki.umbc.edu/display/~jhack" rel="nofollow external" class="bo">Janet Hack</a>
                </p>
            <div>
            <h2><span>Answer</span></h2>
    <p>Primary sources are original accounts of historical events. Primary sources may include diaries, letters, newspaper articles, speeches, interviews, oral histories, and other sources.</p>
    <p>See our <a href="http://lib.guides.umbc.edu/content.php?pid=376476&amp;sid=3083674" rel="nofollow external" class="bo">History Subject Guide</a> for more information on locating primary sources.</p>
    <br><p><strong><br></strong></p>
    <hr>
    <h4>Need further assistance?</h4>
    <p><strong>Phone: 410-455-2346</strong><br><strong><a href="http://aok.lib.umbc.edu/askus/chat.php" rel="nofollow external" class="bo">Chat with a Librarian</a></strong></p>
    <h2>Rate this Article</h2>
    <p>
    
    
    
    
    <strong>Was this helpful?</strong>
    <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D31196778&amp;q=0&amp;v=1&amp;s=faq&amp;l=research+primary-resources" rel="nofollow external" class="bo">Yes</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D31196778" rel="nofollow external" class="bo">No</a>
     | <a href="https://docs.google.com/a/umbc.edu/spreadsheet/viewform?formkey=dEpyOEZxa29QY05BaVpBVzZSYmRMM0E6MA&amp;entry_15=http%3A%2F%2Fwiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D31196778" rel="nofollow external" class="bo">Correct or Suggest an Article</a>
     | <a href="https://apps-my.umbc.edu/apps/rt-track/script.php?u=http://wiki.umbc.edu%2Fpages%2Fviewpage.action%3FpageId%3D31196778&amp;q=0&amp;v=0&amp;s=faq&amp;l=research+primary-resources" rel="nofollow external" class="bo">Request Help</a></p>
    <div><table><tbody>
    <tr>
    <th><p>Page Information</p></th>
    <th><p> </p></th>
    </tr>
    <tr>
    <td><p>Tiny URL</p></td>
    <td><a href="https://wiki.umbc.edu/x/agbcAQ" rel="nofollow external" class="bo">https://wiki.umbc.edu/x/agbcAQ</a></td>
    </tr>
    <tr>
    <td><p>Email this Page</p></td>
    <td><p><a href="https://wiki.umbc.edu/pages/mailpage/mailpage.action?pageId=31196778" rel="nofollow external" class="bo">Email</a></p></td>
    </tr>
    </tbody></table></div>
        </div>
            <div>
           <a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=31196778" rel="nofollow external" class="bo">View Online</a>
                  ·
           <a href="https://wiki.umbc.edu/pages/diffpagesbyversion.action?pageId=31196778&amp;revisedVersion=4&amp;originalVersion=3" rel="nofollow external" class="bo">View Changes Online</a>       
                      </div>
    </div></div>
]]>
</Body>
<Summary>Page             edited by                     Janet Hack                                  Answer  Primary sources are original accounts of historical events. Primary sources may include diaries,...</Summary>
<Website>https://wiki.umbc.edu/pages/viewpage.action?pageId=31196778</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/26165/guest@my.umbc.edu/743267cbd00fa7195e180b4dd6b23734/api/pixel</TrackingUrl>
<Tag>faq</Tag>
<Tag>primary-resources</Tag>
<Tag>research</Tag>
<Group token="retired-428">UMBC FAQ</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-428</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/images/avatars/group/1/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/images/avatars/group/1/original.png?1787842820</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/images/avatars/group/1/xxlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/images/avatars/group/1/xlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/images/avatars/group/1/large.png?1787842820</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/images/avatars/group/1/medium.png?1787842820</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/images/avatars/group/1/small.png?1787842820</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/images/avatars/group/1/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/images/avatars/group/1/xxsmall.png?1787842820</AvatarUrl>
<Sponsor>UMBC FAQ</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 18 Mar 2013 09:23:07 -0400</PostedAt>
</NewsItem>

</News>
