<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FLiFnotes &#187; Deborah Hawkins</title>
	<atom:link href="http://www.flifnotes.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.flifnotes.com</link>
	<description></description>
	<lastBuildDate>Mon, 22 Aug 2011 13:17:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Purely Incremental Development</title>
		<link>http://www.flifnotes.com/57-purely-incremental-development/</link>
		<comments>http://www.flifnotes.com/57-purely-incremental-development/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 13:17:14 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[flif-risc]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=57</guid>
		<description><![CDATA[Usually in incremental development there&#8217;s a plan which is subject to change as new features are added on incrementally and users have a chance to respond. For Flif Risc, I&#8217;m extending the idea to purely incremental development&#8211;a similar idea but without the overall plan. In purely incremental development, everything is subject to change. This may [...]]]></description>
			<content:encoded><![CDATA[<p>Usually in incremental development there&#8217;s a plan which is subject to change as new features are added on incrementally and users have a chance to respond. For Flif Risc, I&#8217;m extending the idea to <strong>purely incremental development</strong>&#8211;a similar idea but without the overall plan. In purely incremental development, everything is subject to change. This may not be a great idea within a company where business justification is always necessary, but for a personal project it&#8217;s offers the flexibility needed to keep interest up.</p>
<p>Test-driven development goes hand-in-hand with any type of incremental development. Writing tests to define what you want to achieve in each iteration and then writing the code to pass them is exactly what&#8217;s needed to make regular process. As an added benefit, having the tests from previous iterations makes it easy to find out if a new feature&#8217;s implementation breaks existing functionality.</p>
<p>For unit testing in PHP, the natural choice in PHPUnit. At first, I had some difficulty getting PHPUnit set up from the <a href="http://www.phpunit.de/manual/current/en/installation.html" title="install PHPUnit">installation instructions</a>, but adding a <code>sudo</code> to the beginning of each instruction solved all my problems.</p>
<p>At the very basic level, I want my application to be able to take in a string which is the hex representation of a MIPS machine code instruction and output the instruction in assembly code. I&#8217;d like to accomplish this in a class structure, and knowing that the machine code for <code>add $t1, $t2, $t0</code> is 0&#215;01484820, the first test verifies that this is the result my code gives.</p>
<pre><code>public function testGetAssemblyCodeAdd() {
    $input = '01484820';
    $expected = 'add $t1, $t2, $t0';
    $temp = new MipsInstruction($input);
    $this->assertEquals($expected, $temp->getAssemblyCode());
}</code></pre>
<p>The easiest way to code this to make it work is to hardcode the output:</p>
<pre><code>class MipsInstruction {
    public function __construct($machineCode) {
        // does nothing
    }

    public function getAssemblyCode() {
        return 'add $t1, $t2, $t0';
    }
}</code></pre>
<p>Running phpunit on the one test now results in <code>OK (1 test, 1 assertion)</code>, whoo! A commit is in order for this. Unfortunately, the code doesn&#8217;t do anything other than pass this one test, so the next step is to add a couple more tests:</p>
<pre><code>public function testGetAssemblyCodeSub() {
    $input = '01484822';
    $expected = 'sub $t1, $t2, $t0';
    $temp = new MipsInstruction($input);
    $this->assertEquals($expected, $temp->getAssemblyCode());
}

public function testGetAssemblyCodeOr() {
    $input = '01484825';
    $expected = 'or $t1, $t2, $t0';
    $temp = new MipsInstruction($input);
    $this->assertEquals($expected, $temp->getAssemblyCode());
}</code></pre>
<p>resulting in:</p>
<pre><code>FAILURES!
Tests: 3, Assertions: 3, Failures: 2</code></pre>
<p>Once again, I&#8217;m making these pass the easy way first and can improve the code later once I know it works.</p>
<pre><code>class MipsInstruction {
    private $inst;

    public function __construct($machineCode) {
        $this->inst = substr($machineCode, -1);
    }

    public function getAssemblyCode() {
        switch ($this->inst) {
            case '0':
                return 'add $t1, $t2, $t0';
            case '2':
                return 'sub $t1, $t2, $t0';
            case '5':
                return 'or $t1, $t2, $t0';
        }
    }
}</code></pre>
<p>Now that all tests pass, it&#8217;s time to commit and I&#8217;m ready to start refactoring.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/57-purely-incremental-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Origins of Flif Risc</title>
		<link>http://www.flifnotes.com/56-the-origins-of-flif-risc/</link>
		<comments>http://www.flifnotes.com/56-the-origins-of-flif-risc/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 00:19:39 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[flif-risc]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=56</guid>
		<description><![CDATA[It&#8217;s easy to just lounge in front of the tv when you don&#8217;t have any projects to work on. It&#8217;s easy to sleep all weekend and to let blog ideas fade away. Getting started is the hardest part, though, and maybe if I can do that, it&#8217;ll make me that much more productive. Step one: [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s easy to just lounge in front of the tv when you don&#8217;t have any projects to work on. It&#8217;s easy to sleep all weekend and to let blog ideas fade away. Getting started is the hardest part, though, and maybe if I can do that, it&#8217;ll make me that much more productive.</p>
<h4>Step one: Come up with an idea</h4>
<p>This was a project I was interested in doing while studying for <a href="http://www.flifnotes.com/39-semester-in-review-spring-10/" title="Semester in Review – Spring ’10">Computer Architecture</a>. It&#8217;s a simple web application that takes a MIPS instruction in machine code and then displays it in assembly code with details on the conversion. Honestly, the idea originated a semester earlier while learning the LC-3 toy language, and expanding the project to handle multiple languages is a possible future enhancement.</p>
<h4>Step Two: Come up with a plan</h4>
<p>The main reason I never really got started on this project before is because I always started with the architecture. I drew out diagrams of class hierarchies and debated the pros and cons of every possible design decision but never got to the coding part. To avoid this problem, this time I&#8217;m going with a pure incremental development approach and only a general overview of the desired end product.</p>
<p>As far as a technology stack, I&#8217;m using PHP mainly as a language refresher along with Git for my repository.</p>
<h4>Step 3: Set up a repository</h4>
<p>Subversion is my tried-and-true, so this is an opportunity to try another popular version control system that&#8217;s new to me. Fortunately, git has <a href="http://help.github.com/">super easy set-up</a> and hosting on github is free for open-source projects. </p>
<p>As everything is flif to me, you can find this project under the name <a href="https://github.com/flif/Flif-Risc" title="Flif Risc - git repository">Flif Risc</a>. For now, it&#8217;s just an almost empty README, but it&#8217;s a start for things to come.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/56-the-origins-of-flif-risc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a Child Theme in WordPress</title>
		<link>http://www.flifnotes.com/55-creating-a-child-theme-in-wordpress/</link>
		<comments>http://www.flifnotes.com/55-creating-a-child-theme-in-wordpress/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 03:33:02 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[RandoMe]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=55</guid>
		<description><![CDATA[For at least a couple of years, I&#8217;ve been meaning to create a personalized theme for this WordPress blog and never got around to it until this weekend. Fortunately, it was even easier than I thought since realizing that child themes are now supported. This means I can just piggy-back off of an existing theme [...]]]></description>
			<content:encoded><![CDATA[<p>For at least a couple of years, I&#8217;ve been meaning to create a personalized theme for this WordPress blog and never got around to it until this weekend. Fortunately, it was even easier than I thought since realizing that <a href="http://codex.wordpress.org/Child_Themes">child themes</a> are now supported. This means I can just piggy-back off of an existing theme and just override a few CSS rules or templates as needed.</p>
<p>I started by working off of the WordPress Default theme before realizing that I really didn&#8217;t want a fixed-width theme and switched to WordPress Classic. Classic may not be my favorite theme, but it was easy enough to modify to get the layout I wanted.</p>
<p>Obviously, I&#8217;m not a designer. I did start by looking at some reasonable color schemes, but in the end I stuck with the colors that are already in my <a href="http://www.flifnotes.com/36-how-do-you-design-a-favicon/">favicon</a>. Those colors actually looked much, much worse before creating the funky background which integrated the scheme a little bit. Eventually, eventually, I&#8217;ll create something a bit more professional.</p>
<p>Going the easy route of modifying only the CSS, there are a few other things lacking still, like an RSS link with icon as well as a copyright notice at the bottom. Additionally, the titles of the sidebar widgets would be much easier to style if they had their own class. I may end up modifying the templates to make these changes, but for the time being it works. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/55-creating-a-child-theme-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semester in Review – Spring &#8217;11</title>
		<link>http://www.flifnotes.com/53-semester-in-review-%e2%80%93-spring-11/</link>
		<comments>http://www.flifnotes.com/53-semester-in-review-%e2%80%93-spring-11/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 03:38:07 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[UTCS]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=53</guid>
		<description><![CDATA[I guess I was finally getting the hang of school. This was my first semester ever with a full course load and all A&#8217;s, and it was fun too. But oh well, time to move on. CS 341: Automata Theory (Rich) The topics for this course were a succession of finite state machines, pushdown automata, [...]]]></description>
			<content:encoded><![CDATA[<p>I guess I was finally getting the hang of school. This was my first semester ever with a full course load and all A&#8217;s, and it was fun too. But oh well, time to move on.</p>
<dl>
<dt>CS 341: <a href="http://www.cs.utexas.edu/users/ear/cs341/">Automata Theory</a> (Rich)
<dt>
<dd>The topics for this course were a succession of finite state machines, pushdown automata, turing machines, and a bit of complexity theory. Some of the homework assignments take many hours to finish, but unfortunately they&#8217;re necessary to really understand the material. Rich lets you work in groups for the homeworks, which is useful because it&#8217;s easy to just stare at a problem for an hour without any ideas as to how to proceed. Just make sure that after you gain a better understanding you&#8217;re also able to work things out on your own. As long as you can do that, the tests should be alright.</dd>
<dt>CS 345: <a href="http://www.cs.utexas.edu/~cannata/cs345/">Programming Languages</a> (Cannata)
<dt>
<dd>Unfortunately, this is a required course. That&#8217;s about as much as I can say for it.</dd>
<dt>CS 378: <a href="http://www.cs.utexas.edu/~shmat/courses/cs378">Network Security and Privacy</a> (Shmatikov)</dt>
<dd>Last year I was disappointed when this class was cancelled, but after taking it this year I&#8217;m really glad I got that extra year experience. Shmatikov expects you to know some C and Javascript going in, as they&#8217;re required for the projects and parts of the lectures won&#8217;t really make sense if you don&#8217;t already know the basics. There is <em>a lot</em> of material covered quickly in this class, so be prepared to do a bit of extra reading to get a full understanding. Overall, though, it was a great class and was probably one of the classes that I&#8217;ve gotten the most out of.</dd>
<dt>CS 361: <a href="http://www.cs.utexas.edu/~dahlin/Classes/UGOS/index.html">Introduction to Operating Systems</a> (Dahlin)</dt>
<dd>If you love spending long nights coding in the basement labs, you&#8217;ll love this class. The focus is mainly on multi-threading. Dahlin was in the middle of writing a textbook for the class, so we only had the first two or three chapters. Since we went over the same material in lectures, though, it wasn&#8217;t much of a loss. We were also an experimental class in that we had projects in C, C++, and Java just to see how it would work it. I really enjoyed it, because it&#8217;s a way of getting different perspectives at what are sometimes similar problems. Just make sure to do the homeworks also, no matter how little credit they may be, because that&#8217;s the best way to prepare for exams.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/53-semester-in-review-%e2%80%93-spring-11/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>File Uploads over HTTPS with cURL</title>
		<link>http://www.flifnotes.com/49-file-uploads-over-https-with-curl/</link>
		<comments>http://www.flifnotes.com/49-file-uploads-over-https-with-curl/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 02:27:19 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[UTCS]]></category>
		<category><![CDATA[curl]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=49</guid>
		<description><![CDATA[In some classes when we turned in a project all we got was a grade, but when I got a low score I could usually figure out what was wrong eventually. Working as a proctor in a computer science class for non-majors, though, the students could use a bit more feedback. The problem was, it [...]]]></description>
			<content:encoded><![CDATA[<p>In some classes when we turned in a project all we got was a grade, but when I got a low score I could usually figure out what was wrong eventually. Working as a proctor in a computer science class for non-majors, though, the students could use a bit more feedback. The problem was, it was tedious manually uploading 75 comments files for each project since the only method of uploading was a web interface.</p>
<p>When I started as a proctor, I didn&#8217;t expect this problem. Upload scripts from previous semesters had been passed down and looked promising&#8230; but failed.</p>
<p>A quick look over the script was enough to identify the problem. The web addresses in the script were <code>http://</code> when what I really needed to use was <code>https://</code>. The obvious solution was to update the addresses in the script, which of course still failed.</p>
<p>My next idea was to use replace the whole <code>curl</code> part of the script and instead use <code>wget</code>. However, <code>wget</code> doesn&#8217;t support multipart form data so that was another dead end.</p>
<p>At this point, I figured I was stuck using the browser, but maybe a Greasemonkey script would be able to perform bulk uploads. After all, it&#8217;s just adding extra forms to a page and submitting them. But no, modern browsers don&#8217;t let you auto-fill the path of file input in forms, which in retrospect makes complete sense.</p>
<p>So I was stuck with <code>curl</code>, which I was already able to use to set cookies or to fetch a page or text file. However, downloading zip files also wasn&#8217;t working. Time to look up the <a href="http://curl.haxx.se/docs/manpage.html">curl man page</a> and just try anything:</p>
<ul>
<li>Added <code>-i</code> to also include the headers for extra feedback</li>
<li>Added <code>-referer</code>, although no one in their right mind would rely on the referrer given</li>
<li>Added <code>-A</code> to specify Firefox as user agent, also dubious</li>
<li>Used <code>-H 'Accept-Encoding: gzip,deflate'</code> to attempt zip downloads</li>
<li>Changed the keep-alive settings</li>
</ul>
<p>Nothing helped.</p>
<p>I switched between using the <code>-d</code> and <code>-F</code> flags to specify the content type, but only got <code>Error - bad file data</code> and <code>403 Forbidden</code> respectively. One of these must at least be a step in the right direction, but which was it?</p>
<p>Finally, I figured out how to use <code>--trace-ascii dump.txt</code> to see exactly what was going on but didn&#8217;t know what to look for until downloading an <a href="https://addons.mozilla.org/en-us/firefox/addon/httpfox/" title="HttpFox">HTTP analyzer for Firefox</a> and using that for comparison. At last things finally started making some sense. As noted in a <a href="http://iandennismiller.com/blog/2009/09/curl-http1-1-100-continue-and-multipartform-data-post/">blog post from Ian Dennis Miller</a>, an <code>Expect: 100-continue</code> header was also in the trace.</p>
<p>I added <code>-H 'Expect:'</code> to the command and it finally happened. I uploaded a comment file remotely. Halfway through the semester and finally some down time to get things working. Damn, I love Spring Break.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/49-file-uploads-over-https-with-curl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choosing an editor for pair programming</title>
		<link>http://www.flifnotes.com/46-choosing-an-editor-for-pair-programming/</link>
		<comments>http://www.flifnotes.com/46-choosing-an-editor-for-pair-programming/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 23:51:50 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[UTCS]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=46</guid>
		<description><![CDATA[Pair programming works for me because: when we&#8217;re working with unfamiliar code, we can split up and then guide each other through the parts we know hearing/seeing other people&#8217;s thoughts keeps my mind fresh with new ideas I&#8217;m not so tempted to be checking my email or playing Mines at least someone knows how to [...]]]></description>
			<content:encoded><![CDATA[<p>Pair programming works for me because:</p>
<ul>
<li>when we&#8217;re working with unfamiliar code, we can split up and then guide each other through the parts we know</li>
<li>hearing/seeing other people&#8217;s thoughts keeps my mind fresh with new ideas</li>
<li>I&#8217;m not so tempted to be checking my email or playing Mines</li>
<li>at least <em>someone</em> knows how to get C/C++ code to compile</li>
</ul>
<p>However, pair programming does come with its challenges. For college computer science courses, one of the biggest is finding a time you can work together, but the challenge I&#8217;m most interested in is agreeing on an editor to use together. Sometimes it&#8217;s simple. For Network Security and Privacy, there was barely any coding involved so my partner and I managed to do the whole thing with gedit. (Well, okay, I did type up one short script in vim). In Software Design last year, we were learning how to use tools with NetBeans, so there wasn&#8217;t even a choice there.</p>
<p><img src="http://www.flifnotes.com/wp-content/uploads/2011/02/viman.gif" alt="Vim is better than Emacs" title="viman" width="203" height="146" class="alignright size-full wp-image-50" />In Operating Systems, though, my partner and I need an editor that&#8217;s more sophisticated. Okay, there are plenty of those, no problem, right? But the fact of the matter is that he&#8217;s an Emacs afficionado and I&#8217;m vim all the way. I prefer simple keystrokes to Meta-combos, and he just doesn&#8217;t grok command mode.</p>
<p>I&#8217;ll admit it. Honestly, the Esc key often seems kind of far away, and after years of use I&#8217;ve only recently started getting the hang of visual mode. (In retrospect, I have no idea why it took me so long.) But he&#8217;ll open up Emacs with our project, I&#8217;ll have a burst of inspiration, grab the keyboard, and at the end type in <code>:w</code>. Ugh! Other times I&#8217;ll open up vim and then he has a burst of inspiration but causes crazy stuff to happen because I wasn&#8217;t in insert mode.</p>
<p>By now I think he does know how to get into insert mode and I&#8217;ve at least learned how to save in Emacs, but it&#8217;s obvious that one editor isn&#8217;t going to work for the two of us. We needed a new plan&#8230;</p>
<p>So screw the former pair programming paradigm! We now sit happily side-by-side with two different monitors, two different machines, two different keyboards. He keeps Emacs open, and I&#8217;ve got my vim. Whoever&#8217;s driving at the time gets to use their preferred editor and then check in the code once there are any changes or we want to switch off. And whenever we&#8217;re absolutely stuck on something, we both get to fiddle around with the code individually until one of us finds something that looks like progress.</p>
<p>It&#8217;s kind of weird, though. The last time we were working on a project together, I was using DVORAK and having to switch back to QWERTY regularly to pair program. If we managed to agree on an editor, I&#8217;m sure we&#8217;d find something else crazy to disagree on. Then again, anything&#8217;s better than <a href="http://secretgeek.net/fuv_intro.asp" title="I see you're using vim. Let me fix that for you.">fuv</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/46-choosing-an-editor-for-pair-programming/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Semester in Review – Fall &#8217;10</title>
		<link>http://www.flifnotes.com/44-semester-in-review-%e2%80%93-fall-10/</link>
		<comments>http://www.flifnotes.com/44-semester-in-review-%e2%80%93-fall-10/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 23:02:49 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[UTCS]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=44</guid>
		<description><![CDATA[Seeing as I&#8217;m more than a week into my next semester of classes, it&#8217;s probably about time I posted my reviews of last semester&#8217;s courses. My main takeaway from last semester is a disappointment that I couldn&#8217;t take Algorithms due to a strict CS 337 prerequisite, so my only really challenging course was a random [...]]]></description>
			<content:encoded><![CDATA[<p>Seeing as I&#8217;m more than a week into my next semester of classes, it&#8217;s probably about time I posted my reviews of last semester&#8217;s courses. My main takeaway from last semester is a disappointment that I couldn&#8217;t take Algorithms due to a strict CS 337 prerequisite, so my only really challenging course was a random one I took just to fit my schedule. Good thing this term I got into all the classes I wanted. <img src='http://www.flifnotes.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<dl>
<dt>CS 337: <a href="http://www.cs.utexas.edu/users/misra/337F10.dir/index.html">Theory in Programming Practice</a> (Misra)
<dt>
<dd>From the name of the class, I thought this would be a theory class, but it&#8217;s really more just a set of programming exercises to give you a little more practice before you take on the more advanced computer science courses. Of course, there are some proofs thrown in as well, but it&#8217;s not much more advanced than what you learn in CS 336 (as long as you remember it). If you take Misra and aren&#8217;t paying attention in class, prepare to be called on. Otherwise, just make sure you set aside enough time for the programming projects. They often appear easier than they really are.</dd>
<dt>CS 347: Database Management (Miranker)</dt>
<dd>I thought this would be my best class last semester. Since I took Software Design and simulated the Gamma join architecture as one of our projects, I&#8217;ve found databases interesting. Unfortunately, this class just glossed over the areas that I found interesting. The course was also very disorganized (once we had just two lectures between exams and the homeworks were over-vague), which made it difficult to learn anything in much depth. Other students who had no previous experience with databases say they got a lot out of it, but if you already know a bit then doing some reading or taking an online course may be more useful.</dd>
<dt>CS 344M: <a href="http://www.cs.utexas.edu/~pstone/Courses/344Mfall10/index.html">Autonomous Multiagent Systems</a> (Stone)</dt>
<dd>Going into a research class for a topic you have no interest in is never a good idea, but I can see how almost anybody else would have loved it. We worked in pairs to create new or improve on existing teams for the <a href="http://wiki.robocup.org/wiki/Soccer_Simulation_League">Robocup soccer simulator</a> and had a tournament at the end of the class. By starting from a complex team (though not improving much on it), my team won the 2D tournament. We also discussed automated traffic controls, chatbots, bidding agents, and other applications of autonomous agents. If you&#8217;re not familiar with C, getting started may be a bit difficult. This is the only computer science course so far in which I made a B, but it was worth it overall.</dd>
<dt>CS 361: <a href="http://www.cs.utexas.edu/~byoung/cs361/syllabus361.html">Introduction to Computer Security</a> (Young)</dt>
<dd>This is probably one of the easier upper-division CS courses. There wasn&#8217;t any required textbook, which was nice. The lectures were usually pretty straightforward and just a little bit interactive. Other than the occassional stories about security blunders, it could get a little boring, but what really made the class worthwhile was the projects. We learned how to crack UNIX passowrds, implement AES, simulate covert channels, and more. I&#8217;d recommend this class to pretty much anyone.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/44-semester-in-review-%e2%80%93-fall-10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What confidentiality lacks in the Bell-La Padula model</title>
		<link>http://www.flifnotes.com/42-what-confidentiality-lacks-in-the-bell-la-padula-model/</link>
		<comments>http://www.flifnotes.com/42-what-confidentiality-lacks-in-the-bell-la-padula-model/#comments</comments>
		<pubDate>Mon, 06 Sep 2010 16:12:12 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[UTCS]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=42</guid>
		<description><![CDATA[The Bell-La Padula model (BLP) is a type of security system that presents a solution to one of the classic problems in security&#8211;multilevel security. BLP preserves confidentiality in the system and is a model that&#8217;s referenced even today, even though it has some serious flaws. Multilevel security (MLS) presents a set of users and a [...]]]></description>
			<content:encoded><![CDATA[<p>The Bell-La Padula model (BLP) is a type of security system that presents a solution to one of the classic problems in security&#8211;multilevel security. BLP preserves confidentiality in the system and is a model that&#8217;s referenced even today, even though it has some serious flaws.</p>
<p><a href="http://en.wikipedia.org/wiki/Multilevel_security">Multilevel</a> security (MLS)  presents a set of users and a set of objects to be accessed. Both the users and objects are classified hierarchically with a security level as well as need-to-know categories. For example, you may have an &#8220;Unclassified&#8221; user trying to read a &#8220;Classified&#8221; object or a &#8220;Classified Crypto&#8221; user trying to write a &#8220;Classified Nuclear&#8221; object.</p>
<p>The <a href="http://en.wikipedia.org/wiki/Bell-La_Padula_model">Bell-La Padula model</a> defines a way for deciding whether to grant access in each of these cases. This model uses a formula to define whether a certain level combined with a category <em>dominates</em> some other level combined with a category. We&#8217;ll define &#8220;Classified&#8221; as a higher level than &#8220;Unclassified&#8221;, so in the first example &#8220;Classified&#8221; (with no category) dominates &#8220;Unclassified&#8221; (with no category). I&#8217;ll ignore categories here for simplification, but in reality for one classification to dominate another, both its level <em>and</em> category set must dominate the other.</p>
<p>Having this domination function defined, we can describe the two main properties in the Bell-La Padula model:</p>
<ul>
<li>The Simple Security Property &#8211; A user can only read an object if the classification of the user dominates that of the object. (Also known as &#8220;read down&#8221; or &#8220;no read up&#8221;.)</li>
<li>The *-Property &#8211; A user can only write to an object if the classification of the object dominates that of the user. (Also known as &#8220;write up&#8221; or &#8220;no write down&#8221;.)</li>
</ul>
<p>The reasoning behind the Simple Security Property is pretty straight-forward. If you&#8217;re concerned about confidentiality, you definitely don&#8217;t want people to read anything that they don&#8217;t have to. It&#8217;s the second property that raises some eyebrows. Why should a user be able to overwrite something that they can&#8217;t even read? Doesn&#8217;t this create huge issues with integrity?</p>
<p>The answer is simply that BLP doesn&#8217;t concern itself with integrity. But when you look at the property solely from the concept of confidentiality, the idea becomes a bit more clear. A user at a certain level knows information that users at lower levels don&#8217;t, so he shouldn&#8217;t be able to write anything to those other levels. However, users at a higher level already know that information so in that sense it&#8217;s okay to write to a higher level. You don&#8217;t have to worry that someone will see something they shouldn&#8217;t know about.</p>
<p>Another question in this model is how can someone give an order to their subordinate at a lower level? Here BLP adds the concept of trusted users. These are a special type of users who are proven trustworthy and who have the ability to write to lower levels. To me this seems like a cheap way of adding in functionality that should be provided by the basic system. &#8220;How do you make sure someone is trustworthy?&#8221; seems like as much of a complex question as &#8220;how do you make sure information isn&#8217;t written where it shouldn&#8217;t be?&#8221; Perhaps the reason for considering the first is that it&#8217;s easier to just have a person decide the second.</p>
<p>Overall, it&#8217;s interesting to find that the Bell-La Padula model has retained such influence despite its inherent shortcomings. As we continue in my Computer Security course, I look forward to seeing how more modern models compare and how they&#8217;ve solved the integrity problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/42-what-confidentiality-lacks-in-the-bell-la-padula-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My last blog in DVORAK</title>
		<link>http://www.flifnotes.com/40-my-last-blog-in-dvorak/</link>
		<comments>http://www.flifnotes.com/40-my-last-blog-in-dvorak/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 04:05:34 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DVORAK]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/40-my-last-blog-in-dvorak/</guid>
		<description><![CDATA[I gave it a shot. For over a year, my laptop has been set to use the DVORAK keyboard layout. I heard it could possibly help me type faster or be more ergonomic, but at this point I&#8217;m calling it quits. Compared to my former 71 wpm in QWERTY, my peak in DVORAK is only [...]]]></description>
			<content:encoded><![CDATA[<p>I gave it a shot. For over a year, my laptop has been set to use the DVORAK keyboard layout. I heard it could possibly help me type faster or be more ergonomic, but at this point I&#8217;m calling it quits.</p>
<p>Compared to my former 71 wpm in QWERTY, my peak in DVORAK is only around 55 wpm. Of course, this is partly because whenever I use any computer other than my own, it&#8217;s in QWERTY. If there&#8217;s someone who can maintain finger fluency in two keyboard languages, they have all my respect. I&#8217;m not like that. And I&#8217;m not quite sure what my typing speed on QWERTY has dwindled down to. If there&#8217;s a potential to type faster, that&#8217;s just in ideal situations. As for any possible ergonomic benefits, that simply doesn&#8217;t matter. Switching back and forth between two keyboard layouts does not work.</p>
<p>Goodbye, DVORAK. I&#8217;ll miss your home-row words like &#8220;the&#8221; and &#8220;sound&#8221;. I&#8217;ll miss the lack of single-handed words. But none of my friends like you so it just won&#8217;t work out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/40-my-last-blog-in-dvorak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semester in Review &#8211; Spring &#8217;10</title>
		<link>http://www.flifnotes.com/39-semester-in-review-spring-10/</link>
		<comments>http://www.flifnotes.com/39-semester-in-review-spring-10/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 02:45:28 +0000</pubDate>
		<dc:creator>Deborah Hawkins</dc:creator>
				<category><![CDATA[UTCS]]></category>
		<category><![CDATA[software design]]></category>

		<guid isPermaLink="false">http://www.flifnotes.com/?p=39</guid>
		<description><![CDATA[One more semester closer to graduation. This spring I took only three courses&#8211;all of them upper-division computer science&#8211;but fortunately they were all different enough to feel like a balanced course load. I got in each of the three M&#8217;s: mathematics (Analysis of Programs), machines (Computer Systems Architectures), and models (Software Design). CS 336: Analysis of [...]]]></description>
			<content:encoded><![CDATA[<p>One more semester closer to graduation. This spring I took only three courses&#8211;all of them upper-division computer science&#8211;but fortunately they were all different enough to feel like a balanced course load. I got in each of the three M&#8217;s: mathematics (Analysis of Programs), machines (Computer Systems Architectures), and models (Software Design).</p>
<dl>
<dt>CS 336: Analysis of Algorithms (Myers)</dt>
<dd>This class focuses on formal proofs of algorithm correctness, including topics such as weakest preconditions, developing invariants, induction, and probability. Even for a computer science course, it&#8217;s very math-intensive. One of my favorite things about this class, though, was having a support group available. There are some classes where you&#8217;re supposed to figure out everything on your own and not discuss the homeworks at all, while here we were encouraged to attend ACM&#8217;s weekly theory reviews or our own groups to meet up and work on the homeworks. For a class where the students have such varying backgrounds (everyone teaches 313k differently), it&#8217;s really necessary. I may not have been able to get a firm grip on recurrence relations without it.</dd>
<dt>CS 352: Computer Systems Architectures (McKinley)</dt>
<dd>This was McKinley&#8217;s first time teaching CS 352, and unfortunately it was at times very obvious. Reading the textbook was helpful, but the exercises often used terminology not in the rest of the book and were very confusing. The midterms were also insanely difficult. I&#8217;d go in thinking I had a good understanding of the material but then leave completely stunned. (Being able to keep the graded midterms would have been nice.) But for the final at least, I had almost a whole week to study. I read the book, worked out extra exercises, summarized the class notes, checked Wikipedia for clarifications, and everything came together. Sure, there were a couple of small things that I couldn&#8217;t remember ever going over, but in an hour and a half I was done and ended up with a 90.5&#8211;the highest grade on the final for any student. If you want to do well in this class, you need to have a <em>lot</em> of time to devote to it.</dd>
<dt>CS 378: Software Design (Batory)</dt>
<dd>This has been probably my favorite computer science course. We learned how to reason about programs using UML and studied refactorings, design patterns, and architectural patterns. For even common design patterns like hooks, I had never understood before <em>exactly</em> what they were. My favorite part, though, was learning about parallel architectures and having the opportunity to simulate everything from a basic join up to the parallelized Gamma join architecture. It&#8217;s a difficult class, but Batory&#8217;s generally an entertaining lecturer and I would recommend it to any computer science student.</dd>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.flifnotes.com/39-semester-in-review-spring-10/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

