<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>woggie.net</title>
	<atom:link href="http://www.woggie.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.woggie.net</link>
	<description>The life of a PhD Candidate in Software Engineering</description>
	<pubDate>Tue, 18 Nov 2008 05:50:04 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Second Star Trek Trailer</title>
		<link>http://www.woggie.net/2008/11/18/second-star-trek-trailer/</link>
		<comments>http://www.woggie.net/2008/11/18/second-star-trek-trailer/#comments</comments>
		<pubDate>Tue, 18 Nov 2008 05:50:04 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=96</guid>
		<description><![CDATA[The second trailer for the next Star Trek movie is out. I looks like quite an exciting action movie. The trailer almost has the same tone as the Transformers movie. Definitely not the Star Trek I used to know and love, but hey, I&#8217;m open to a series &#8220;reboot&#8221;.
]]></description>
			<content:encoded><![CDATA[<p>The second trailer for the next Star Trek movie <a href="http://www.apple.com/trailers/paramount/startrek/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">is out</a>. I looks like quite an exciting action movie. The trailer almost has the same tone as the Transformers movie. Definitely not the Star Trek I used to know and love, but hey, I&#8217;m open to a series &#8220;reboot&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/11/18/second-star-trek-trailer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Yet Another Groovy Spelling Corrector</title>
		<link>http://www.woggie.net/2008/11/05/spelling-corrector-implementation/</link>
		<comments>http://www.woggie.net/2008/11/05/spelling-corrector-implementation/#comments</comments>
		<pubDate>Wed, 05 Nov 2008 05:48:04 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=74</guid>
		<description><![CDATA[I&#8217;ve taken some time implementing Peter Norvig&#8217;s spelling corrector in an attempt to learn Groovy, a dynamic language that compiles to bytecode and is compatible with standard Java classes and libraries.
There are a couple differences (most likely deficiencies) with my implementation. First, I use a list instead of a set when constructing the candidate word [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve taken some time implementing <a href="http://norvig.com/spell-correct.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/norvig.com');">Peter Norvig&#8217;s spelling corrector</a> in an attempt to learn <a href="http://groovy.codehaus.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/groovy.codehaus.org');">Groovy</a>, a dynamic language that compiles to bytecode and is compatible with standard Java classes and libraries.</p>
<p>There are a couple differences (most likely deficiencies) with my implementation. First, I use a list instead of a set when constructing the candidate word list. Second, I created a separate occurrence function in order to provide the smoothing capability for our occurrence distribution. Third, I didn&#8217;t really care much for a low line count. It&#8217;s not the LOC that matter in the end, it&#8217;s how easily <em>you</em> can comprehend the code! <img src='http://www.woggie.net/wp-content/plugins/tango-smilies/tango/face-smile.png' alt=':)' class='wp-smiley' width='16' height='16' /> </p>

<div class="wp_syntax"><div class="code"><pre class="groovy groovy" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SpellingCorrector <span style="color: #66cc66;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">def</span> wordoccur <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>:<span style="color: #66cc66;">&#93;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> words<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">File</span> file<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    Scanner scanner <span style="color: #66cc66;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Scanner<span style="color: #66cc66;">&#40;</span>file<span style="color: #66cc66;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">def</span> words <span style="color: #66cc66;">=</span> scanner.<span style="color: #663399;">findAll</span><span style="color: #66cc66;">&#123;</span> x <span style="color: #66cc66;">-&gt;</span> x.<span style="color: #006600;">toLowerCase</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">==</span>~ ~/<span style="color: #66cc66;">&#91;</span>a<span style="color: #66cc66;">-</span>z<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">+</span>/  <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> train<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">List</span> words<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    words.<span style="color: #663399;">each</span> <span style="color: #66cc66;">&#123;</span>
      wordoccur<span style="color: #66cc66;">&#91;</span>it<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">=</span> wordoccur.<span style="color: #006600;">containsKey</span><span style="color: #66cc66;">&#40;</span>it<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">?</span> wordoccur<span style="color: #66cc66;">&#91;</span>it<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> <span style="color: #cc66cc;">1</span> : <span style="color: #cc66cc;">1</span>
    <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> edits1<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> word<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> results <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>
    <span style="color: #993333;">int</span> n <span style="color: #66cc66;">=</span> word.<span style="color: #006600;">length</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #808080; font-style: italic;">//Deletion. Remove a character.</span>
    <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #006699;">in</span> 0..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#41;</span>
      results <span style="color: #66cc66;">&lt;&lt;</span> word<span style="color: #66cc66;">&#91;</span>0..<span style="color: #66cc66;">&lt;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">+</span>1..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#93;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">//Transposition. Swap adjacent characters.</span>
    <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #006699;">in</span> 0..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">-</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span>
      results <span style="color: #66cc66;">&lt;&lt;</span> word<span style="color: #66cc66;">&#91;</span>0..<span style="color: #66cc66;">&lt;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">+</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">+</span>2..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#93;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">//Alteration. Change one character for another letter.</span>
    <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #006699;">in</span> 0..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#41;</span>
      <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>c <span style="color: #006699;">in</span> <span style="color: #ff0000;">'a'</span>..<span style="color: #ff0000;">'z'</span><span style="color: #66cc66;">&#41;</span>
        results <span style="color: #66cc66;">&lt;&lt;</span> word<span style="color: #66cc66;">&#91;</span>0..<span style="color: #66cc66;">&lt;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> c <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">+</span>1..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#93;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">//Insertion. Add a letter in between the others.</span>
    <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>i <span style="color: #006699;">in</span> 0..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#41;</span>
      <span style="color: #006699;">for</span> <span style="color: #66cc66;">&#40;</span>c <span style="color: #006699;">in</span> <span style="color: #ff0000;">'a'</span>..<span style="color: #ff0000;">'z'</span><span style="color: #66cc66;">&#41;</span>
        results <span style="color: #66cc66;">&lt;&lt;</span> word<span style="color: #66cc66;">&#91;</span>0..<span style="color: #66cc66;">&lt;</span>i<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> c <span style="color: #66cc66;">+</span> word<span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">+</span>1..<span style="color: #66cc66;">&lt;</span>n<span style="color: #66cc66;">&#93;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">return</span> results
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> knownedits2<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> word<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> candidates <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span><span style="color: #66cc66;">&#93;</span>
    edits1<span style="color: #66cc66;">&#40;</span>word<span style="color: #66cc66;">&#41;</span>.<span style="color: #663399;">each</span> <span style="color: #66cc66;">&#123;</span>
      candidates.<span style="color: #006600;">addAll</span><span style="color: #66cc66;">&#40;</span> edits1<span style="color: #66cc66;">&#40;</span>it<span style="color: #66cc66;">&#41;</span>.<span style="color: #663399;">findAll</span> <span style="color: #66cc66;">&#123;</span> wordoccur.<span style="color: #006600;">containsKey</span><span style="color: #66cc66;">&#40;</span>it<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#125;</span> <span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">return</span> candidates
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;">/**
   * Smoothing distribution. If the word hasn't been encountered (novel words),
   *  we give it an occurence value of 1.
   */</span>
  <span style="color: #000000; font-weight: bold;">def</span> <span style="color: #993333;">int</span> occurrence<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> word<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> wordoccur<span style="color: #66cc66;">&#91;</span>word<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">==</span> <span style="color: #000000; font-weight: bold;">null</span> <span style="color: #66cc66;">?</span> <span style="color: #cc66cc;">1</span> : wordoccur<span style="color: #66cc66;">&#91;</span>word<span style="color: #66cc66;">&#93;</span>;  
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> <span style="color: #aaaadd; font-weight: bold;">List</span> known<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">List</span> words<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> words.<span style="color: #663399;">findAll</span> <span style="color: #66cc66;">&#123;</span> wordoccur.<span style="color: #006600;">containsKey</span><span style="color: #66cc66;">&#40;</span>it.<span style="color: #006600;">toLowerCase</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">def</span> correct<span style="color: #66cc66;">&#40;</span><span style="color: #aaaadd; font-weight: bold;">String</span> word<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">def</span> candidates <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>word<span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">+</span> known<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#91;</span>word<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> known<span style="color: #66cc66;">&#40;</span>edits1<span style="color: #66cc66;">&#40;</span>word<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">+</span> knownedits2<span style="color: #66cc66;">&#40;</span>word<span style="color: #66cc66;">&#41;</span>
    <span style="color: #000000; font-weight: bold;">return</span> candidates.<span style="color: #663399;">max</span> <span style="color: #66cc66;">&#123;</span>  occurrence<span style="color: #66cc66;">&#40;</span>it<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#125;</span>
  <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></div></div>

<p>First, we don&#8217;t attempt to split words into two sub-words. For example, a common typo may be &#8220;Ihave&#8221; rather than &#8220;I have&#8221;. Second, the training and known function can definitely be improved to with support for proper nouns, stemming, and more. I think it would be a fun exercise to try and to create a simple implementation of these features, much like the SpellingCorrector.</p>
<p>So, Groovy has great support for regular expressions, list construction and compositions and best of all, <em>closures</em>! I also had a chance to play with the Groovy NodeBuilder (on a separate program), which is a great way for constructing tree structures. All said and done, I would <em>hate</em> to implement this in Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/11/05/spelling-corrector-implementation/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Phone Obsession</title>
		<link>http://www.woggie.net/2008/10/21/phone-obsession/</link>
		<comments>http://www.woggie.net/2008/10/21/phone-obsession/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 16:22:28 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=64</guid>
		<description><![CDATA[I think some of you can relate. I know I can, but which character? Maybe all three!

]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">I think some of you can relate. I know I can, but which character? Maybe all three!</p>
<p><a title="Dilbert.com" href="http://dilbert.com/strips/comic/2008-10-20/" onclick="javascript:pageTracker._trackPageview('/outbound/article/dilbert.com');"><img src="http://dilbert.com/dyn/str_strip/000000000/00000000/0000000/000000/20000/9000/000/29061/29061.strip.gif" border="0" alt="Dilbert.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/10/21/phone-obsession/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sample Spaces and Feature Models: There and Back Again</title>
		<link>http://www.woggie.net/2008/09/08/splc-2008/</link>
		<comments>http://www.woggie.net/2008/09/08/splc-2008/#comments</comments>
		<pubDate>Mon, 08 Sep 2008 16:05:46 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Presentations]]></category>

		<category><![CDATA[School]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=45</guid>
		<description><![CDATA[I presented the paper &#8220;Sample Spaces and Feature Models: There and Back Again&#8221; by K. Czarnecki, S. She, and A. Wąsowski at this year&#8217;s Software Product Line Conference.
Update: The slides for my presentation have been uploaded. Download them here: SPLC 2008 Slides (20).
]]></description>
			<content:encoded><![CDATA[<p>I presented the paper &#8220;<a href="http://doi.ieeecomputersociety.org/10.1109/SPLC.2008.49" onclick="javascript:pageTracker._trackPageview('/outbound/article/doi.ieeecomputersociety.org');">Sample Spaces and Feature Models: There and Back Again</a>&#8221; by K. Czarnecki, S. She, and A. Wąsowski at this year&#8217;s <a href="http://www.lero.ie/SPLC2008" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.lero.ie');">Software Product Line Conference</a>.</p>
<p>Update: The slides for my presentation have been uploaded. Download them here: <code><a href="http://www.woggie.net/download/splc2008_slides.pdf" onclick="javascript:pageTracker._trackPageview('/downloads/download/splc2008_slides.pdf');" title="Downloaded 20 times" >SPLC 2008 Slides (20)</a>.</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/09/08/splc-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MMath Thesis: Feature Model Mining</title>
		<link>http://www.woggie.net/2008/08/28/mmath-thesis-feature-model-mining/</link>
		<comments>http://www.woggie.net/2008/08/28/mmath-thesis-feature-model-mining/#comments</comments>
		<pubDate>Thu, 28 Aug 2008 20:59:57 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Course Work]]></category>

		<category><![CDATA[School]]></category>

		<category><![CDATA[feature models]]></category>

		<category><![CDATA[master's thesis]]></category>

		<category><![CDATA[model mining]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=62</guid>
		<description><![CDATA[Abstract
Software systems have grown larger and more complex in recent years. Generative software development strives to automate software development from a systems family by generating implementations using domain-specific languages. In current practice, specifying domain-specific languages is a manual task requiring expert analysis of multiple information sources. Furthermore, the concepts and relations represented in a language [...]]]></description>
			<content:encoded><![CDATA[<h3>Abstract</h3>
<p>Software systems have grown larger and more complex in recent years. Generative software development strives to automate software development from a systems family by generating implementations using domain-specific languages. In current practice, specifying domain-specific languages is a manual task requiring expert analysis of multiple information sources. Furthermore, the concepts and relations represented in a language are grown through its usage. Keeping the language consistent with its usage is a time-consuming process requiring manual comparison between the language instances and its language specification. Feature model mining addresses these issues by synthesizing a representative model bottom-up from a sample set of instances called configurations.</p>
<p>This thesis presents a mining algorithm that reverse-engineers a probabilistic feature model from a set of individual configurations. A configuration consists of a list of features that are defined as system properties that a stakeholder is interested in. Probabilistic expressions are retrieved from the sample configurations through the use of conjunctive and disjunctive association rule mining. These expressions are used to construct a probabilistic feature model.</p>
<p><span id="more-62"></span>The mined feature model consists of a hierarchy of features, a set of additional hard constraints and soft constraints. The hierarchy describes the dependencies and alternative relations exhibited among the features. The additional hard constraints are a set of propositional formulas which must be satisfied in a legal configuration. Soft constraints describe likely defaults or common patterns.</p>
<p>Systems families are often realized using object-oriented frameworks that provide reusable designs for constructing a family of applications. The mining algorithm is evaluated on a set of applications to retrieve a metamodel of the Java Applet framework. The feature model is then applied to the development of framework-specific modeling languages (FSMLs). FSMLs are domain-specific languages that model the framework-provided concepts and their rules for development.</p>
<p>The work presented in this thesis provides the foundation for further research in feature model mining. The strengths and weaknesses of the algorithm are analyzed and the thesis concludes with a discussion of possible extensions.<br />
Software systems have grown larger and more complex in recent years. Generative software development strives to automate software development from a systems family by generating implementations using domain-specific languages. In current practice, specifying domain-specific languages is a manual task requiring expert analysis of multiple information sources. Furthermore, the concepts and relations represented in a language are grown through its usage. Keeping the language consistent with its usage is a time-consuming process requiring manual comparison between the language instances and its language specification. Feature model mining addresses these issues by synthesizing a representative model bottom-up from a sample set of instances called configurations.</p>
<p>This thesis presents a mining algorithm that reverse-engineers a probabilistic feature model from a set of individual configurations. A configuration consists of a list of features that are defined as system properties that a stakeholder is interested in. Probabilistic expressions are retrieved from the sample configurations through the use of conjunctive and disjunctive association rule mining. These expressions are used to construct a probabilistic feature model.</p>
<p>The mined feature model consists of a hierarchy of features, a set of additional hard constraints and soft constraints. The hierarchy describes the dependencies and alternative relations exhibited among the features. The additional hard constraints are a set of propositional formulas which must be satisfied in a legal configuration. Soft constraints describe likely defaults or common patterns.</p>
<p>Systems families are often realized using object-oriented frameworks that provide reusable designs for constructing a family of applications. The mining algorithm is evaluated on a set of applications to retrieve a metamodel of the Java Applet framework. The feature model is then applied to the development of framework-specific modeling languages (FSMLs). FSMLs are domain-specific languages that model the framework-provided concepts and their rules for development.</p>
<p>The work presented in this thesis provides the foundation for further research in feature model mining. The strengths and weaknesses of the algorithm are analyzed and the thesis concludes with a discussion of possible extensions.</p>
<p><a href="http://hdl.handle.net/10012/3915" onclick="javascript:pageTracker._trackPageview('/outbound/article/hdl.handle.net');"><strong>Download</strong> via UWSpace</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/08/28/mmath-thesis-feature-model-mining/feed/</wfw:commentRss>
		</item>
		<item>
		<title>MMath Thesis Presentation: Feature Model Mining</title>
		<link>http://www.woggie.net/2008/08/06/mmath-thesis-presentation-feature-model-mining/</link>
		<comments>http://www.woggie.net/2008/08/06/mmath-thesis-presentation-feature-model-mining/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 16:55:53 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Event]]></category>

		<category><![CDATA[Presentations]]></category>

		<category><![CDATA[School]]></category>

		<category><![CDATA[feature models]]></category>

		<category><![CDATA[master's thesis]]></category>

		<category><![CDATA[model mining]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=57</guid>
		<description><![CDATA[I will be holding a seminar describing my Master&#8217;s thesis work. It is open to all, so please attend if you&#8217;re interested. Feature Model Mining. Wednesday, August 6 at 1:30pm in EIT 3145.
Update: Here are the slides that I&#8217;ve used for my presentation.

Abstract
Software systems have grown larger and more complex in recent years. Generative software [...]]]></description>
			<content:encoded><![CDATA[<p>I will be holding <a href="http://www.cs.uwaterloo.ca/odyssey/event/687" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cs.uwaterloo.ca');">a seminar</a> describing my Master&#8217;s thesis work. It is open to all, so please attend if you&#8217;re interested. <strong>Feature Model Mining</strong>. Wednesday, August 6 at 1:30pm in EIT 3145.</p>
<p><strong>Update</strong>: <a href="http://www.woggie.net/download/mmath_seminar.pdf" onclick="javascript:pageTracker._trackPageview('/downloads/download/mmath_seminar.pdf');">Here are the slides</a> that I&#8217;ve used for my presentation.<br />
<span id="more-57"></span><br />
<strong>Abstract</strong></p>
<p>Software systems have grown larger and more complex in recent years. Generative software development strives to automate software development from a systems family by generating implementations using domain-specific languages. In current practice, such languages are built using a top-down approach. In addition, keeping the language specifications consistent with its usage is a difficult and manual task.</p>
<p>An algorithm for reverse-engineering a probabilistic feature model from a sample set of configurations is presented in this thesis. The expressions needed to construct a feature model are discovered by mining for so called association rules. The mined feature model consists of two components: a hierarchy of features that represent feature dependencies and alternative choices, in addition to a set of soft constraints that describe likely defaults or patterns exhibited in the sample set. Consequently, the mined model represents a language that describes the dependencies between features and its exhibited variability in a given sample set.</p>
<p>The mining algorithm is evaluated on a set of Java Applets to retrieve a model representing its framework usage. The retrieved feature model is further applied towards the development of framework-specific modeling languages (FSMLs), which are domain-specific languages that model framework-provided concepts and their rules for development.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/08/06/mmath-thesis-presentation-feature-model-mining/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adobe Acrobat.com</title>
		<link>http://www.woggie.net/2008/08/04/adobe-acrobatcom/</link>
		<comments>http://www.woggie.net/2008/08/04/adobe-acrobatcom/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 16:29:08 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[Development]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/08/04/adobe-acrobatcom/</guid>
		<description><![CDATA[It seems that Adobe doesn&#8217;t want to be left out of the Web 2.0 office application fad with it&#8217;s Acrobat.com. It provides document writing, desktop sharing, PDF creation, and a neat online PDF reader. All of this was made possible by employing the formerly Macromedia&#8217;s Flash technology. I was initially excited about the online Acrobat [...]]]></description>
			<content:encoded><![CDATA[<p>It seems that Adobe doesn&#8217;t want to be left out of the Web 2.0 office application fad with it&#8217;s <a href="https://www.acrobat.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.acrobat.com');">Acrobat.com</a>. It provides document writing, desktop sharing, PDF creation, and a neat online PDF reader. All of this was made possible by employing the formerly Macromedia&#8217;s Flash technology. I was initially excited about the online Acrobat reader since the Linux reader is <em>quite slow</em>, and the other online solutions, such as <a href="http://scribd.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/scribd.com');">Scribd</a> are less than impressive. However, the Flash plug-in for Linux isn&#8217;t very impressive either. Well, in any case, Adobe seems to have gotten the right idea, by starting work on an <a href="http://www.adobe.com/openscreenproject/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adobe.com');">open-source Flash</a> and certifying <a href="http://blogs.adobe.com/spartacusacrobat/2008/01/pdf_iso_standard.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.adobe.com');">PDF as an ISO standard</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/08/04/adobe-acrobatcom/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Phishing Terms of Agreement?</title>
		<link>http://www.woggie.net/2008/08/03/phishing-sites-terms-of-agreement/</link>
		<comments>http://www.woggie.net/2008/08/03/phishing-sites-terms-of-agreement/#comments</comments>
		<pubDate>Sun, 03 Aug 2008 19:49:15 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=58</guid>
		<description><![CDATA[I&#8217;ve been recieving spam via Live Messenger and have mostly ignored them to-date. Feeling adventurous today, I decided to click and view one of these sites and noticed that they had a Terms of Use agreement. It&#8217;s actually quite a humourous read if you&#8217;re interested, so take a look below.


Terms of Use / Privacy Policy:

By [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been recieving spam via Live Messenger and have mostly ignored them to-date. Feeling adventurous today, I decided to click and view one of these sites and noticed that they had a <em>Terms of Use</em> agreement. It&#8217;s actually quite a humourous read if you&#8217;re interested, so take a look below.</p>
<p><span id="more-58"></span></p>
<pre>
Terms of Use / Privacy Policy:

By filling out this form, you authorize [spam company], Inc to spread the word about this 100% real and upcomming Messenger Community Site.  You will receive your share of the credit in helping us spread the word.  This is a harmless Community site which is offering users a platform to meet each other for free.
</pre>
<p>Right, real and &#8220;upcomming&#8221; Community site, sounds encouraging to me! In fact, they offer to share the credit in spreading the word. What exactly are they they going to share, their revenue? They even state that the site is harmless. I feel safer already.</p>
<pre>We do not share your private information with any third parties.  By using our service/website  you hereby fully authorize [spam company], Inc to send messages of a commercial nature via Instant Messages and E-Mails on behalf of third parties via the information you provide us. This is not a "phishing" site that attempts to "trick" you into revealing personal information. Everything we do with your information is disclosed here. If you are under eighteen (18), you MUST obtain permission from a parent or guardian before using our website/service.</pre>
<p>Great! They state that they will send &#8220;messages of a commercial nature&#8221;, ie. SPAM, via IM and E-Mail, on behalf of third parties. The quotes around &#8220;phishing&#8221; and &#8220;trick&#8221; definitely make me feel safe. Afterall, the meaning of phishing and trick must be ambiguous, which necessitates the quotes&#8230; right?</p>
<pre>
This page is not affiliated with or operated by Microsoft(tm) or MSN Network(tm).

...

We may temporarily access your MSN account to do a combination of the following:
1.  Send Instant Messages to your friends promoting this site.
2.  Introduce new entertaining sites to your friends via Instant Messages.
</pre>
<p>Sign me up!</p>
<pre>
This is a free service. You will not be asked to pay at any time.  You will not be subscribed to anything asking for payment.  This service is made possible by many hours of human effort.
</pre>
<p>Wow, all these features&#8230; for free. Who woulde have thought? A project of such caliber, that was made possible by <em>many hours of human effort</em>, all for free!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/08/03/phishing-sites-terms-of-agreement/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DHS Can Detain Your Laptop for No Reason</title>
		<link>http://www.woggie.net/2008/08/02/dhs-can-detain-your-laptop-for-no-reason/</link>
		<comments>http://www.woggie.net/2008/08/02/dhs-can-detain-your-laptop-for-no-reason/#comments</comments>
		<pubDate>Sat, 02 Aug 2008 17:53:25 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[Life]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=56</guid>
		<description><![CDATA[The United States&#8217; Department of Homeland Security now has the power to detain a traveler&#8217;s laptop indefinitely at the border, without any cause for suspicion. This is frightening, especially since all of my work and personal life is stored inside this machine. Not to mention that I use Linux, which might set off a cyber-terrorist [...]]]></description>
			<content:encoded><![CDATA[<p>The United States&#8217; Department of Homeland Security now has <a href="http://www.washingtonpost.com/wp-dyn/content/article/2008/08/01/AR2008080103030.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.washingtonpost.com');">the power to detain a traveler&#8217;s laptop <em>indefinitely</em></a> at the border, without any cause for suspicion. This is frightening, especially since <em>all</em> of my work and personal life is stored inside this machine. Not to mention that I use Linux, which might set off a cyber-terrorist alert, since it is the <a href="http://www.adequacy.org/stories/2001.12.2.42056.2147.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adequacy.org');">OS of hackers&#8230; apparently</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/08/02/dhs-can-detain-your-laptop-for-no-reason/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Toronto Traffic Cameras using Google Maps</title>
		<link>http://www.woggie.net/2008/07/22/toronto-traffic-cameras-using-google-maps/</link>
		<comments>http://www.woggie.net/2008/07/22/toronto-traffic-cameras-using-google-maps/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 18:24:00 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[Course Work]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=53</guid>
		<description><![CDATA[I was looking for traffic conditions prior to my drive to Toronto and found that the Ministry of Transportation uses Google Maps to display the location and images from the highway traffic cameras around Toronto. Very neat!
]]></description>
			<content:encoded><![CDATA[<p>I was looking for traffic conditions prior to my drive to Toronto and found that the Ministry of Transportation uses Google Maps to display the location and images from the <a href="http://www.mto.gov.on.ca/english/traveller/compass/camera/camhome.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mto.gov.on.ca');">highway traffic cameras</a> around Toronto. Very neat!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/22/toronto-traffic-cameras-using-google-maps/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Batman: The Movie</title>
		<link>http://www.woggie.net/2008/07/18/batman-the-movie/</link>
		<comments>http://www.woggie.net/2008/07/18/batman-the-movie/#comments</comments>
		<pubDate>Fri, 18 Jul 2008 23:01:06 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=51</guid>
		<description><![CDATA[In anticipation for the Dark Knight, here is a clip of the dynamic duo from the original Batman starring Adam West and Burt Ward. A batcopter, a batladder, four cans of ocean repellent batspray&#8230; &#8220;Holy Sardines!&#8221;
Source
]]></description>
			<content:encoded><![CDATA[<p>In anticipation for the <a href="http://www.rottentomatoes.com/m/the_dark_knight/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.rottentomatoes.com');">Dark Knight</a>, <a href="http://www.youtube.com/watch?v=X0UJaprpxrk" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.youtube.com');">here is a clip</a> of the dynamic duo from the original Batman starring <a href="http://www.imdb.com/name/nm0001842/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.imdb.com');">Adam West</a> and <a href="http://www.imdb.com/name/nm0911431/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.imdb.com');">Burt Ward</a>. A batcopter, a batladder, four cans of ocean repellent batspray&#8230; &#8220;Holy Sardines!&#8221;</p>
<p><a href="http://www.rottentomatoes.com/m/the_dark_knight/news/1741782/total_recall_its_the_bat" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.rottentomatoes.com');">Source</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/18/batman-the-movie/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Distributed Source Control using Mercurial</title>
		<link>http://www.woggie.net/2008/07/17/distributed-source-control-using-mercurial/</link>
		<comments>http://www.woggie.net/2008/07/17/distributed-source-control-using-mercurial/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 05:52:15 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[git]]></category>

		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=47</guid>
		<description><![CDATA[I&#8217;ve recently started to experiment with distributed source control systems for my personal repository. I had been using Subversion previously, but it had several issues with directories that bothered me. In addition, since my primary computer was a laptop, I also wanted to have full commit and change tracking when I was offline.
So distributed source [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started to experiment with distributed source control systems for my personal repository. I had been using <a href="http://subversion.tigris.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/subversion.tigris.org');">Subversion</a> previously, but it had several issues with directories that bothered me. In addition, since my primary computer was a laptop, I also wanted to have full commit and change tracking when I was offline.</p>
<p>So distributed source control systems seemed to fit the bill. I looked at two systems in particular, <a href="http://www.selenic.com/mercurial/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.selenic.com');">Mercurial</a> and <a href="http://git.or.cz" onclick="javascript:pageTracker._trackPageview('/outbound/article/git.or.cz');">git</a>. Mercurial caught my eye because of its simplicity, and similarity with the traditional, centralized SCMs such as CVS and Subversion. However, I actually started using git first. The reason was that many open source projects had switched to git and I needed to compile several bleeding edge packages. So, I had no choice but to learn to use git. However, I couldn&#8217;t really wrap my head around it. While git is no doubt, a very powerful SCM, it was also a very complicated SCM. I took me a good hour or so before I understood how to track branches.</p>
<p>So, I settled for Mercurial. While I was worried that Mercurial was too immature, the fact that the <a href="http://www.mozilla.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mozilla.com');">Mozilla</a> projects are <a href="http://weblogs.mozillazine.org/preed/2007/04/version_control_system_shootou_1.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/weblogs.mozillazine.org');">also using Mercurial</a> was very comforting.</p>
<p><span id="more-47"></span></p>
<h4>Usage, Tips and Tricks</h4>
<p>I will not describe the setup and typical usage of Mercurial, since there are plenty of <a href="http://blog.medallia.com/2007/02/a_guided_tour_of_mercurial.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.medallia.com');">good tutorials</a> out there. What I will do, is highlight some of the features that have really caught my eye and I find indispensible now.</p>
<p>The first great feature of Mercurial is the <code>addremove</code> command, which removes deleted files and adds newly created files to the repository. The command also has an optional parameter which you can specify the directory to process. I typically use <code>.</code>, such that my next commit would only contain the changes that I&#8217;ve made in the current directory.</p>
<pre>hg addremove   #For the entire repository
hg addremove . #For the current directory</pre>
<p>Another nice feature of Mercurial is its ability to ignore certain files and file patterns specified using a <em>single</em> <code>.hgignore</code> file. This is very convenient, for excluding temporary files, such as the intermediary files that are left behind after compiling LaTeX source code. Mercurial supports two syntax types when specifying patterns in <code>.hgignore</code>, <em>glob</em> and <em>regex</em>. The glob syntax allows you to specify patterns using wildcards (*). I primarily use regex, since <a href="http://xkcd.com/208/" onclick="javascript:pageTracker._trackPageview('/outbound/article/xkcd.com');">regular expressions are very powerful</a>.</p>
<p>Here are the contents of my current <code>.hgignore</code>:</p>
<pre>syntax: regexp
.*.swp
.*.swo
^results/.*
^projects/.*/bin/
^lab/[0-9][0-9](winter|spring|fall)/.+\.(log|glo|glg|gls|dvi|aux|bm|bbl|blg|brf|ist|lof|lot|out|toc|vrb|ps)</pre>
<p>After creating the <code>.hgignore</code> file, don&#8217;t forget to add it to the repository for tracking using:</p>
<pre>hg add .hgignore</pre>
<h4>Tracking Branches</h4>
<p>For those interested in how to track branches using git, here is the command that I used. the -b modifer creates a branch in the local repository. The checkout command further require the <code>origin/</code> prefix for branches. In addition, the <code>--track</code> modifier tracks the remote branch such that a future pull will retrieve updates from the branch.</p>
<p>Using Mercurial:</p>
<pre>hg co somebranch</pre>
<p>Using git:</p>
<pre>git checkout --track -b localbranch origin/somebranch</pre>
<p><strong>Update on git</strong><br />
Thanks to the comment by Jakub, tracking a remote branch is actually rather easy using the <code>git remote</code> command. Here is an example I had to do with retrieving a xf86-video-ati git repository.</p>
<pre>git remote add agd5f git://cgit.freedesktop.org/~agd5f/xf86-video-ati/</pre>
<p>To restrict the remote repository to a particular branch, use <code>-t</code> like the following:</p>
<pre>git remote add agd5f -t agd-powerplay git://cgit.freedesktop.org/~agd5f/xf86-video-ati/</pre>
<p>We can now fetch data from the remote repository using the command:</p>
<pre>git fetch agd5f</pre>
<p>We can list the branches that are present in our repository by executing the command. Note that the remote repository shows up just like a separate branch to our local repository:</p>
<pre>git branch -r</pre>
<p>Now, we can pull from this remote repository, and merge the changes from the branch <code>agd-powreplay</code>:</p>
<pre>git pull agd5f agd-powerplay</pre>
<h4>Restoring a Single File to a Previous Revision</h4>
<p>It seems that Mercurial is currently not able to checkout a single file or subdirectory. It is one of the &#8220;todo&#8221; items in <a href="http://code.google.com/soc/2008/hg/appinfo.html?csaid=B091D9B819911D09" onclick="javascript:pageTracker._trackPageview('/outbound/article/code.google.com');">their Google Summer of Code project</a> this year, so perhaps we&#8217;ll have this feature soon enough. However, this is rather inconvenient at the moment. A workaround for this issue is to use the <code>hg cat</code> command, to view a previous revision of a file. In my case, I had overwritten a file <code>applet.svg</code> with changes that I did not want to keep. To revert the file, I executed:</p>
<pre>hg cat applet.svg &gt; applet.svg</pre>
<h4>Tags</h4>
<p>In Mercurial, <a href="http://www.selenic.com/mercurial/wiki/index.cgi/Tag" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.selenic.com');">tags</a> are simply aliases for changesets.</p>
<pre>hg checkout -r tagname</pre>
<p>git treats tags, branches and trunk/master as one and the same, in the sense that they are all <a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html#def_refspec" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.kernel.org');">refspecs</a>. This is similar to Subversion&#8217;s model, however, tags and branches aren&#8217;t simply another directory in the repository. You have to add the <code>tags/</code> prefix when checking out a tag:</p>
<p>Using git:</p>
<pre>git checkout -b localtag tags/remotetag</pre>
<h4>Conclusions</h4>
<p>I am very happy with Mercurial. I ran into a very annoying issue with Mercurial early on, when I executed <code>hg fetch</code>, and it used my repository URI, along with my username and <em>password</em> as a commit message. However, luckily this issue was fixed in the Mercurial 1.0 release. Admittedly, I&#8217;ve only been using a single person Mercurial repository for the past couple months, so I haven&#8217;t really experienced a situation where I needed the full power of a SCM. However, Mercurial has been so far, been smooth sailing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/17/distributed-source-control-using-mercurial/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Developers are charged $99 for iPhone SDK</title>
		<link>http://www.woggie.net/2008/07/16/developers-are-charged-99-for-iphone-sdk/</link>
		<comments>http://www.woggie.net/2008/07/16/developers-are-charged-99-for-iphone-sdk/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 03:25:02 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/07/16/developers-are-charged-99-for-iphone-sdk/</guid>
		<description><![CDATA[So the iPhone aka &#8220;something big&#8221; according to Roger&#8217;s has been released, and one of its greatest strengths is it&#8217;s extensible application platform. The iPhone SDK is available for free&#8230; but in order to have your application run on an actual iPhone, it will cost a developer $99 and an Intel powered Mac. Hmm.. great [...]]]></description>
			<content:encoded><![CDATA[<p>So the iPhone aka &#8220;something big&#8221; according to <a href="http://www.rogers.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.rogers.com');">Roger&#8217;s</a> has been released, and one of its greatest strengths is it&#8217;s extensible application platform. The iPhone SDK is available for free&#8230; but in order to have your application run on an actual iPhone, it will <a href="http://www.ilounge.com/index.php/news/comments/iphone-sdk-99-and-mac-required-apple-sole-app-vendor/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ilounge.com');">cost a developer $99 and an Intel powered Mac</a>. Hmm.. great idea there, Apple. Charge the very people who might write applications promote the sales of the iPhone.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/16/developers-are-charged-99-for-iphone-sdk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pseudo-Random vs. True Random</title>
		<link>http://www.woggie.net/2008/07/16/pseudo-random-vs-true-random/</link>
		<comments>http://www.woggie.net/2008/07/16/pseudo-random-vs-true-random/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 00:23:12 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/07/16/pseudo-random-vs-true-random/</guid>
		<description><![CDATA[A visual comparison between using the PHP rand() pseudo-random  generator and  the numbers generated by random.org, a truly random generator.
]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.boallen.com/random-numbers.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.boallen.com');">visual comparison</a> between using the PHP <code>rand()</code> pseudo-random  generator and  the numbers generated by <a href="http://random.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/random.org');">random.org</a>, a truly random generator.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/16/pseudo-random-vs-true-random/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Stephen Hawking moving to Waterloo, perhaps</title>
		<link>http://www.woggie.net/2008/07/16/stephen-hawking-moving-to-waterloo-perhaps/</link>
		<comments>http://www.woggie.net/2008/07/16/stephen-hawking-moving-to-waterloo-perhaps/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 18:16:23 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[School]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/07/16/stephen-hawking-moving-to-waterloo-perhaps/</guid>
		<description><![CDATA[We may have a celebrity moving into Waterloo&#8230; Stephen Hawking!

]]></description>
			<content:encoded><![CDATA[<p>We may have a celebrity moving into Waterloo&#8230; <a href="http://www.thestar.com/News/Ontario/article/461065">Stephen Hawking!<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/16/stephen-hawking-moving-to-waterloo-perhaps/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Beamer, PDFTeX and XeTeX</title>
		<link>http://www.woggie.net/2008/07/16/beamer-pdftex-and-xetex/</link>
		<comments>http://www.woggie.net/2008/07/16/beamer-pdftex-and-xetex/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 05:17:35 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[Life]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Site]]></category>

		<category><![CDATA[beamer]]></category>

		<category><![CDATA[latex]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=44</guid>
		<description><![CDATA[I&#8217;ve recently started using the beamer class to create slides for my presentation. Up till now, I&#8217;ve been using powerdot, and found it more than sufficient. I initially thought beamer to be far more complex than necessary. However, one feature convinced me to switch: PDFTeX and XeTeX support.
Both PDFTeX and XeTeX create a PDF directly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently started using the beamer class to create slides for my presentation. Up till now, I&#8217;ve been using powerdot, and found it more than sufficient. I initially thought beamer to be far more complex than necessary. However, one feature convinced me to switch: PDFTeX and XeTeX support.</p>
<p>Both PDFTeX and XeTeX create a PDF directly from the LaTeX source. XeTeX is built on PDFTeX, and is of particular interest since it has added support for TrueType and OpenType fonts. For beamer presentations, this was <em>great</em>, since it opens up a huge selection of fonts for use in presentations. To change the default font in the document with XeTeX, use the <code>fontspec</code> package. The <code>xunicode</code> package provides additional mapping between LaTeX accents and the selected font. A third package, <code>xltxtra</code> provides some fixes relating to fonts.</p>

<div class="wp_syntax"><div class="code"><pre class="latex latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\documentclass</span><span class="br0">&#91;</span><span style="color: #2222D0; font-weight: normal;">xetex,mathserif,serif</span><span class="br0">&#93;</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">beamer</span><span class="br0">&#125;</span>
&nbsp;
<span style="color: #800000; font-weight: normal;">\usepackage</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">fontspec</span><span class="br0">&#125;</span>
<span style="color: #800000; font-weight: normal;">\usepackage</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">xunicode</span><span class="br0">&#125;</span> <span style="color: #808080; font-style: italic;">%Unicode extras!</span>
<span style="color: #800000; font-weight: normal;">\usepackage</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">xltxtra</span><span class="br0">&#125;</span>  <span style="color: #808080; font-style: italic;">%Fixes</span>
<span style="color: #800000; font-weight: normal;">\setmainfont</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">Calibri</span><span class="br0">&#125;</span>
<span style="color: #800000; font-weight: normal;">\setmonofont</span><span class="br0">&#91;</span><span style="color: #2222D0; font-weight: normal;">Scale=0.86</span><span class="br0">&#93;</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">Andale Mono</span><span class="br0">&#125;</span></pre></div></div>

<p>Of course, you should replace <code>Calibri</code> and <code>Andale Mono</code> with a font of your choice.</p>
<p>Another nice package to use with PDFTeX, is the <code>microtype</code> package, which provides better font output. Enable the package with this line:</p>

<div class="wp_syntax"><div class="code"><pre class="latex latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\usepackage</span><span class="br0">&#91;</span><span style="color: #2222D0; font-weight: normal;">final,expansion=true,protrusion=true,spacing=true,kerning=true</span><span class="br0">&#93;</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">microtype</span><span class="br0">&#125;</span></pre></div></div>

<h3>XeTeX and PGF / TiKZ</h3>
<p>PGF / TiKZ is a TeX library for drawing graphics using the PDFTeX and XeTeX drivers. However, you may encounter the following error message when attempting to compile a presentation with PGF / TiKZ pictures in your Beamer slides:</p>
<pre>Package pgf Warning: Your graphic driver pgfsys-dvipdfm.def does not supported marking the current position.</pre>
<p>Unfortunately, the included TiKZ library in the TeXLive 2007 distribution does not support XeTeX. This causes cross-picture coordinates to break, which can be used to <a href="http://www.fauskes.net/pgftikzexamples/beamer-arrows/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.fauskes.net');">draw arrows between various TiKZ pictures</a> in a Beamer frame.</p>
<p>While we wait for TeXLive 2008, you can install the <a href="http://www.ctan.org/tex-archive/help/Catalogue/entries/pgf.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ctan.org');">new version of PGF from the CTAN</a> which adds support for the XeTeX driver. Simply download the package, and copy the files to your local <code>~/texmf/tex/</code> directory and execute <code>texhash</code> to update the TeX listings.</p>
<h3>XeTeX and Wide Pages</h3>
<p>Although I haven&#8217;t had much time to investigate the issue, but it seems that the <code>pgfpages</code> package that is used with beamer, is not entirely compatible with XeTeX. In particular, the commands:</p>

<div class="wp_syntax"><div class="code"><pre class="latex latex" style="font-family:monospace;"><span style="color: #800000; font-weight: normal;">\setbeameroption</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">show notes on second screen</span><span class="br0">&#125;</span>        <span style="color: #808080; font-style: italic;">%beamer</span>
<span style="color: #800000; font-weight: normal;">\pgfpagesuselayout</span><span class="br0">&#123;</span><span style="color: #2222D0; font-weight: normal;">two screens with optional second</span><span class="br0">&#125;</span> <span style="color: #808080; font-style: italic;">%pgfpages</span></pre></div></div>

<p>does not have any effect on the page dimensions when compiling with <code>xelatex</code>. Compiling with <code>pdflatex</code> does generate a double wide page that is suitable for displaying on two screens.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/16/beamer-pdftex-and-xetex/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Streets of Waterloo</title>
		<link>http://www.woggie.net/2008/07/14/streets-of-waterloo/</link>
		<comments>http://www.woggie.net/2008/07/14/streets-of-waterloo/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 19:32:16 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<category><![CDATA[School]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=43</guid>
		<description><![CDATA[If you&#8217;re looking for some Waterloo school spirit, check out the UW rap anthem.
]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking for some Waterloo school spirit, check out the UW <a href="http://www.youtube.com/watch?v=l_IPZ1QSoUY" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.youtube.com');">rap anthem</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/14/streets-of-waterloo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Server Move and Redesign</title>
		<link>http://www.woggie.net/2008/07/14/server-move-and-redesign/</link>
		<comments>http://www.woggie.net/2008/07/14/server-move-and-redesign/#comments</comments>
		<pubDate>Mon, 14 Jul 2008 19:17:42 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Asides]]></category>

		<guid isPermaLink="false">http://www.woggie.net/?p=42</guid>
		<description><![CDATA[Switched providers and updated design. I found the old design far too distracting, so I hope this one is an improvement!
]]></description>
			<content:encoded><![CDATA[<p>Switched providers and updated design. I found the old design far too distracting, so I hope this one is an improvement!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/07/14/server-move-and-redesign/feed/</wfw:commentRss>
		</item>
		<item>
		<title>fmp 0.7.0 Development Release</title>
		<link>http://www.woggie.net/2008/04/01/fmp-070-development-release/</link>
		<comments>http://www.woggie.net/2008/04/01/fmp-070-development-release/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 20:31:48 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[School]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/04/01/fmp-070-development-release/</guid>
		<description><![CDATA[
I&#8217;ve been doing some development on the feature modeling plug-in during the past week and have implemented several new features and bug fixes (shown below).
I&#8217;m releasing the plug-in as a development release, for now. I have started rewriting the configuration backend, but my thesis deadline is fast approaching and I will not have enough time [...]]]></description>
			<content:encoded><![CDATA[<p class="bordered" align="center"><a title="fmp 0.7.0 Screenshot" href="http://www.woggie.net/wp-content/uploads/2008/04/fmp-070.gif" ><img class="imageframe imgalignleft" src="http://www.woggie.net/wp-content/uploads/2008/04/fmp-070.gif" alt="fmp 0.7.0 Screenshot" width="650" height="210" /></a></p>
<p>I&#8217;ve been doing some development on the <a href="http://gsd.uwaterloo.ca/projects/fmp-plugin" onclick="javascript:pageTracker._trackPageview('/outbound/article/gsd.uwaterloo.ca');">feature modeling plug-in</a> during the past week and have implemented several new features and bug fixes (shown below).</p>
<p>I&#8217;m releasing the plug-in as a <em>development release</em>, for now. I have started rewriting the configuration backend, but my thesis deadline is fast approaching and I will not have enough time to complete the changes in <em>fmp</em>. In any case, please let me know of any bugs you find, or if you have a feature request. The source code is also included in the plug-in, so feel free to hack away at it yourself if you are inclined. When the plug-in is sufficiently tested, I will merge this branch into the trunk of the CVS repository on SourceForge. Give it a try!</p>
<h4>New Features</h4>
<ul>
<li>New, more robust and featureful constraint view.</li>
<li>Constraints are shown for the feature hierarchy in addition to additional constraints.</li>
<li>When a configuration is selected in the feature model editor, the constraints are evaluated and the status of each constraint is shown (ie. satisfied or not satisfied).</li>
<li>Support for arbitrary propositional formulas when writing additional constraints. <strong>NOTE:</strong> constraints are written using node Id instead of an XPath expression. However, feature models created using fmp 0.6.6 are compatible, but will require re-writing the constraints using the new grammar. See below for examples.</li>
<li>Ability to view Node Ids next to feature names in the feature model.</li>
<li>Constraint input validation.</li>
<li>Constraint resolution. An unsatisfied constraint can be resolved in a configuration by right-clicking and selecting ‘Resolve Constraint’.</li>
</ul>
<h4>Installation</h4>
<ul>
<li>Download <a href="http://gsd.uwaterloo.ca/%7Eshshe/ca.uwaterloo.gp.fmp_0.7.0.jar" onclick="javascript:pageTracker._trackPageview('/outbound/article/gsd.uwaterloo.ca');">ca.uwaterloo.gp.fmp_0.7.0.jar</a></li>
<li>Compiled for Java 5 (Java 6 compatible), Eclipse 3.2</li>
</ul>
<p>Project Homepage: <a href="http://gsd.uwaterloo.ca/projects/fmp-plugin/fmp-070/" onclick="javascript:pageTracker._trackPageview('/outbound/article/gsd.uwaterloo.ca');">http://gsd.uwaterloo.ca/projects/fmp-plugin/fmp-070/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/04/01/fmp-070-development-release/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Loading an Ecore model without initializing all necessary packages or schemas</title>
		<link>http://www.woggie.net/2008/03/29/loading-an-ecore-model-without-initializing-all-necessary-packages-or-schemas/</link>
		<comments>http://www.woggie.net/2008/03/29/loading-an-ecore-model-without-initializing-all-necessary-packages-or-schemas/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 17:57:26 +0000</pubDate>
		<dc:creator>Steven She</dc:creator>
		
		<category><![CDATA[Development]]></category>

		<category><![CDATA[ecore]]></category>

		<category><![CDATA[emf]]></category>

		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://www.woggie.net/2008/03/29/loading-an-ecore-model-without-initializing-all-necessary-packages-or-schemas/</guid>
		<description><![CDATA[Here&#8217;s a small snippet of code to load an Ecore resource without having to initialize all the necessary packages needed to read all elements. This is useful if we&#8217;re interested in only a subset of the schema elements that are present in the Ecore model.

public static EList open&#40;File file&#41; throws IOException &#123;
	ResourceSet resourceSet = new [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a small snippet of code to load an Ecore resource without having to initialize all the necessary packages needed to read all elements. This is useful if we&#8217;re interested in only a subset of the schema elements that are present in the Ecore model.</p>

<div class="wp_syntax"><div class="code"><pre class="java5 java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> EList open<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">File</span> file<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">throws</span> <span style="color: #003399; font-weight: bold;">IOException</span> <span style="color: #009900;">&#123;</span>
	ResourceSet resourceSet = <span style="color: #000000; font-weight: bold;">new</span> ResourceSetImpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
	<span style="color: #666666; font-style: italic;">//Initialize the FSML Package information (ie. URI)</span>
	MyPackageImpl.<span style="color: #006633;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
	<span style="color: #666666; font-style: italic;">//Set OPTION_RECORD_UNKNOWN_FEATURE prior to calling getResource</span>
	Resource.<span style="color: #006633;">Factory</span>.<span style="color: #003399; font-weight: bold;">Registry</span>.<span style="color: #006633;">INSTANCE</span>.<span style="color: #006633;">getExtensionToFactoryMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">&quot;*&quot;</span>, <span style="color: #000000; font-weight: bold;">new</span> EcoreResourceFactoryImpl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			@<span style="color: #003399; font-weight: bold;">Override</span>
			<span style="color: #000000; font-weight: bold;">public</span> Resource createResource<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">URI</span> uri<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			XMIResourceImpl resource = <span style="color: #009900;">&#40;</span>XMIResourceImpl<span style="color: #009900;">&#41;</span> <span style="color: #000000; font-weight: bold;">super</span>.<span style="color: #006633;">createResource</span><span style="color: #009900;">&#40;</span>uri<span style="color: #009900;">&#41;</span>;
			resource.<span style="color: #006633;">getDefaultLoadOptions</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>XMLResource.<span style="color: #006633;">OPTION_RECORD_UNKNOWN_FEATURE</span>, <span style="color: #003399; font-weight: bold;">Boolean</span>.<span style="color: #006633;">TRUE</span><span style="color: #009900;">&#41;</span>;
			<span style="color: #000000; font-weight: bold;">return</span> resource;
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
	XMIResource resource = <span style="color: #009900;">&#40;</span>XMIResource<span style="color: #009900;">&#41;</span> resourceSet.<span style="color: #006633;">getResource</span><span style="color: #009900;">&#40;</span>
	<span style="color: #003399; font-weight: bold;">URI</span>.<span style="color: #006633;">createFileURI</span><span style="color: #009900;">&#40;</span>file.<span style="color: #006633;">toString</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>,
	<span style="color: #006600; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span>;
&nbsp;
	<span style="color: #666666; font-style: italic;">//Unknown elements will appear in this map</span>
	<span style="color: #003399; font-weight: bold;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>resource.<span style="color: #006633;">getEObjectToExtensionMap</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
	resource.<span style="color: #006633;">load</span><span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">Collections</span>.<span style="color: #006633;">EMPTY_MAP</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #000000; font-weight: bold;">return</span> resource.<span style="color: #006633;">getContents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Be aware that any unrecognized elements will be null in the retrieved Ecore model.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.woggie.net/2008/03/29/loading-an-ecore-model-without-initializing-all-necessary-packages-or-schemas/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
