<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom">
  <id>http://www4.ncsu.edu/~akmassey/</id>
  <title>Aaron Massey -- NCSU Doctoral Candidate in Computer Science</title>
  <updated>2012-02-20T13:07:09Z</updated>
  <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/" />
  
  <author>
    <name>Aaron Massey</name>
    <uri>http://www4.ncsu.edu/~akmassey</uri>
  </author>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/akmassey-NCSU" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="akmassey-ncsu" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry>
    <id>tag:www4.ncsu.edu,2012-02-20:/~akmassey/posts/2012-02-20-super-simple-introduction-to-git.html</id>
    <title type="html">Super Simple Introduction to Git</title>
    <published>2012-02-20T13:07:09Z</published>
    <updated>2012-02-20T13:07:09Z</updated>
    <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/posts/2012-02-20-super-simple-introduction-to-git.html" />
    <content type="html">&lt;p&gt;With the advent of easily installed distributed version control systems, version control should be one of the first things done in any software project of virtually any size. I believe this is particularly important for college students learning to program for two reasons. First, committing to version control systems is habit forming, and version control is an excellent habit to form. Second, students are likely to want to be able to go back to previous work since the learning process entails making many mistakes.&lt;/p&gt;

&lt;p&gt;My goal with this post is to provide an extremely brief overview of the Git version control tool. You don&amp;#8217;t really need that much to start using Git. There are numerous tutorials and introductions to Git available online, some of which I&amp;#8217;ll link to here as well, but most of these go into far more detail than you really need to get working locally.&lt;/p&gt;

&lt;p&gt;In fact, if you&amp;#8217;re interested in a basic, albeit somewhat longer, introduction to Git, I think the best one available is part of the Pro Git book. Just &lt;a href='http://progit.org/book/ch1-3.html'&gt;start reading here&lt;/a&gt; and go to the end of the chapter. If you&amp;#8217;re still on the fence, keep reading. You should see that using version control really isn&amp;#8217;t that complicated.&lt;/p&gt;

&lt;h2 id='installing_git'&gt;Installing Git&lt;/h2&gt;

&lt;p&gt;To use Git, you have to have Git installed on your system. If you&amp;#8217;re on Mac OS X, use the &lt;a href='http://progit.org/book/ch3-2.html'&gt;Git for Mac&lt;/a&gt; installer. If you&amp;#8217;re on Windows, use the &lt;a href='http://yehudakatz.com/2010/05/13/common-git-workflows/'&gt;Git for Windows&lt;/a&gt; installer. If you&amp;#8217;re on Linux, then you&amp;#8217;re probably able to easily install the latest version of Git with your standard system package manager.&lt;/p&gt;

&lt;h2 id='creating_a_repository'&gt;Creating a Repository&lt;/h2&gt;

&lt;p&gt;Let&amp;#8217;s start out with a simple project in which you want to create a repository. This tutorial assumes you&amp;#8217;re using Git via the command line because that will work for virtually any sort of project.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s probably a good idea to start by double-checking that you have installed Git correctly:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git --version
git version 1.7.6.1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you get an error, then you&amp;#8217;ll need to fix your installation. If you don&amp;#8217;t, then you can setup a repository like this:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ cd ~/my-project
bash$ git init
Initialized empty Git repository in /Users/masseya/my-project/.git/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Congratulations. You&amp;#8217;ve created a git repository for your project. Pretty simple, right?&lt;/p&gt;

&lt;h2 id='adding_and_committing_changes'&gt;Adding and Committing Changes&lt;/h2&gt;

&lt;p&gt;An empty repository is rather boring. You may already have files in your project, but for the sake of this tutorial assume we have the following files:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ ls
awesome.txt markdown.md web.html&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can see that git isn&amp;#8217;t currently tracking any of them with this command:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add [file]..." to include in what will be committed)
#
#	awesome.txt
#	markdown.md
#	web.html
nothing added to commit but untracked files present (use "git add" to track)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that Git is actually telling you how to add these files using the &amp;#8220;git add&amp;#8221; command. Let&amp;#8217;s go ahead and do that for all the files in our directory:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git add .

bash$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached [file]..." to unstage)
#
#	new file:   awesome.txt
#	new file:   markdown.md
#	new file:   web.html
#&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that you&amp;#8217;ve added these files, git will know to commit them when you execute your next commit. If you don&amp;#8217;t commit them, then git won&amp;#8217;t know anything about them. For example, we don&amp;#8217;t currently have any commits in our repository. Thus, the Git command that displays the history of commits will fail like this:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git log
fatal: bad default revision 'HEAD'&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To commit files, you will need to provide a commit message. Commit messages describe the changes that took place in a particular commit. They are important because they explain to the people with whom you&amp;#8217;re collaborating how the project was put together. For now, let&amp;#8217;s just provide a simple commit message that explains this was where we started:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git commit -m "Initial commit."
[master (root-commit) 2b5fa7f] Initial commit.
 3 files changed, 17 insertions(+), 0 deletions(-)
 create mode 100644 awesome.txt
 create mode 100644 markdown.md
 create mode 100644 web.html&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that we have committed changes, we&amp;#8217;ll be able to see our messages in the history using &amp;#8220;git log&amp;#8221;:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git log
commit 2b5fa7f801c2227dd418djkw47ed70906becfafb
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:34:00 2012 -0500

    Initial commit.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Let&amp;#8217;s walk through the process of making a simple change to a file and then committing it to the repository as a way to wrap up this section:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ echo "Here is a simple change." &gt;&gt; markdown.md                     

bash$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add [file]..." to update what will be committed)
#   (use "git checkout -- [file]..." to discard changes in working directory)
#
#	modified:   markdown.md
#
no changes added to commit (use "git add" and/or "git commit -a")

bash$ git add markdown.md 

bash$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD [file]..." to unstage)
#
#	modified:   markdown.md
#

bash$ git commit -m "Just a simple change."
[master 40468b7] Just a simple change.
 1 files changed, 1 insertions(+), 0 deletions(-)

bash$ git log
commit 40468b7b211f28a3fbf8dab99a17283de80af770
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:37:29 2012 -0500

    Just a simple change.

commit 2b5fa7f801c2227dd418djkw47ed70906becfafb
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:34:00 2012 -0500

    Initial commit.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;At this point, you have a repository with two commits to it. You can continue making changes and committing them just like this. If at any point you want to go back to an earlier version or see the differences between the current version and the previous version, you can. Git supports those operations, but I won&amp;#8217;t cover them in this super simple introduction. You will want to refer to some of the additional references at the end of this tutorial to see how to do these things.&lt;/p&gt;

&lt;h2 id='sharing_changes'&gt;Sharing Changes&lt;/h2&gt;

&lt;p&gt;You don&amp;#8217;t have to share changes in Git to take advantage of version control. Even if all you&amp;#8217;re doing is committing changes to a local git repository like the one we just setup, then you&amp;#8217;ll still be able to benefit from having a repository of your work locally. This will allow you to revert to an earlier version, compare your current changes with the last committed version, or any of the other nice features version control provides you.&lt;/p&gt;

&lt;p&gt;Still, you will likely want to share your project with someone else at some point. This is actually far easier than you might think, particularly if everyone you want to share the project with has access to the same server. Let&amp;#8217;s start by creating a bare repository that we can store on our server:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ cd ..

bash$ git clone --bare ./my-project my-project.git
Cloning into bare repository my-project.git...
done.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This creates a new directory, called my-project.git, that contains the bare repository. Now we simply need to put that directory on the server in a location that everyone in our project can access.&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ scp -r my-project.git user@example.com:/opt/git
config                                        100%  142     0.1KB/s   00:00    
description                                   100%   73     0.1KB/s   00:00    
HEAD                                          100%   23     0.0KB/s   00:00    
applypatch-msg.sample                         100%  452     0.4KB/s   00:00    
commit-msg.sample                             100%  896     0.9KB/s   00:00    
post-commit.sample                            100%  160     0.2KB/s   00:00    
post-receive.sample                           100%  552     0.5KB/s   00:00    
post-update.sample                            100%  189     0.2KB/s   00:01    
pre-applypatch.sample                         100%  398     0.4KB/s   00:00    
pre-commit.sample                             100% 1578     1.5KB/s   00:00    
pre-rebase.sample                             100% 4951     4.8KB/s   00:00    
prepare-commit-msg.sample                     100% 1239     1.2KB/s   00:00    
update.sample                                 100% 3611     3.5KB/s   00:00    
exclude                                       100%  240     0.2KB/s   00:00    
55ca36c127697f88eaf45fcff800cf4bee799f        100%  105     0.1KB/s   00:00    
5fa7f801c2227dd418f0df47ed70906becfafb        100%  132     0.1KB/s   00:00    
468b7b211f28a3fbf8dab99a17283de80af770        100%  168     0.2KB/s   00:00    
eb0c665faee38bbaeba503eb5a717a0baee7a0        100%  123     0.1KB/s   00:00    
6f488a0404a703f87ab10e316131752be37661        100%   46     0.0KB/s   00:00    
d953444788ec3119a2a0c8bd86757c34555bc0        100%  124     0.1KB/s   00:00    
2ded0461b3f9b4f162071dc77f1643807575b9        100%  110     0.1KB/s   00:00    
4cc438bc951fb50f16be42deac2492fab20072        100%   93     0.1KB/s   00:00    
packed-refs&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Note that I&amp;#8217;m simply using the secure file copy command to recursively transfer the bare repository we created to the /opt/git directory of the server. The /opt/git directory is in the location on our server where everyone on our project has &amp;#8216;group&amp;#8217; level access. Once it&amp;#8217;s been transferred, everyone should be able to clone the repository to their local machine like this:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git clone user@example.com:/opt/git/my-project.git
Cloning into my-project...
remote: Counting objects: 8, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 8 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (8/8), done.
Resolving deltas: 100% (1/1), done.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will create our original my-project directory on our local file system. Whomever cloned the repository will have access to the history of the project:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git log
commit 40468b7b211f28a3fbf8dab99a17283de80af770
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:37:29 2012 -0500

    Just a simple change.

commit 2b5fa7f801c2227dd418djkw47ed70906becfafb
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:34:00 2012 -0500

    Initial commit.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you&amp;#8217;ve made changes to your project and you want to share them, then you would first add and commit those changes as described in the previous section. Once you&amp;#8217;ve added and committed the changes you will need to push them to the repository. However, we haven&amp;#8217;t told git about the repository yet, so we&amp;#8217;ll need to add a remote repository like this:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git remote add origin user@example.com:/opt/git/my-project.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This will tell our local repository that we have a remote repository we call &amp;#8216;origin&amp;#8217; at the URL provided. Then we can push our changes to that repository as follows:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ echo "Here's another change." &gt;&gt; awesome.txt 

bash$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add [file]..." to update what will be committed)
#   (use "git checkout -- [file]..." to discard changes in working directory)
#
#	modified:   awesome.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

bash$ git add awesome.txt 

bash$ git commit -m "Simple change to awesome.txt"
[master 4ea7421] Simple change to awesome.txt
 1 files changed, 1 insertions(+), 0 deletions(-)

bash$ git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 379 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To user@example.com:/opt/git/my-project.git
   40468b7..4ea7421  master -&gt; master&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Now that there are changes on the server, your colleagues may wish to get access to them. This is accomplished with the git push command, which your colleagues would have to execute on their own machines in the location where they cloned the repository:&lt;/p&gt;
&lt;div class='code bluebox'&gt;&lt;pre&gt;&lt;code&gt;bash$ git log
commit 40468b7b211f28a3fbf8dab99a17283de80af770
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:37:29 2012 -0500

    Just a simple change.

commit 2b5fa7f801c2227dd418djkw47ed70906becfafb
Author: Aaron Massey [akmassey@example.com]
Date:   Mon Feb 20 12:34:00 2012 -0500

    Initial commit.

bash$ git pull origin master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From example.com:/opt/git/my-project
 * branch            master     -&gt; FETCH_HEAD
Updating 40468b7..4ea7421
Fast-forward
 awesome.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Please note that this assumes there were no conflicts in the files that were changed. If there were conflicts, they can be resolved, but that is slightly outside the scope of this super simple introduction. (If you&amp;#8217;re actually experiencing this, perhaps the &lt;a href='http://progit.org/book/ch3-2.html'&gt;basic branching and merging&lt;/a&gt; described in the Pro Git book will help you.)&lt;/p&gt;

&lt;h2 id='standard_git_workflow'&gt;Standard Git Workflow&lt;/h2&gt;

&lt;p&gt;Now that you have Git installed, you&amp;#8217;ve setup a local repository, and you&amp;#8217;ve begun sharing changes with others, you should begin following the standard git workflow. It consists of the following basic steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Update your local repository by pulling the latest changes from the remote.&lt;/li&gt;

&lt;li&gt;Make and commit your local changes.&lt;/li&gt;

&lt;li&gt;Once you feel you have something worth sharing, push it to the repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will work flawlessly if no one else has committed changes to the repository since you began working. If someone has committed changes since you began working, then you may need to resolve those conflicts. Essentially, that means iterating over two basic steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pull the changes from the repository and replay your commits on top of them using the &amp;#8216;git pull &amp;#8211;rebase&amp;#8217; command.&lt;/li&gt;

&lt;li&gt;Git may prompt you to resolve conflicts in a particular file. Once you have them resolved you should add them using &amp;#8216;git add&amp;#8217; and continue replaying your commits on top of the new repository using &amp;#8216;git rebase &amp;#8211;continue&amp;#8217;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are many, many valid ways to use git. If you&amp;#8217;re interested in a little more information about common workflows in Git, please read &lt;a href='http://yehudakatz.com/2010/05/13/common-git-workflows/'&gt;Yehuda Katz&amp;#8217;s post&lt;/a&gt; on the subject.&lt;/p&gt;

&lt;h2 id='additional_references'&gt;Additional References&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;re interested in learning more about Git, I would recommend three basic references. First, &lt;a href='http://gitref.org/'&gt;gitref.org&lt;/a&gt; is an excellent site to go to as a first introduction to git. It provides more detail that you&amp;#8217;ll find here, but not nearly as much as you would find in a book-length treatment of the subject. Chances are, you&amp;#8217;ll find what you need there. However, if you do find you need more information, my next recommendation would be the &lt;a href='http://progit.org/book/'&gt;online version of Pro Git by Scott Chacon&lt;/a&gt;. This is an excellent resource with beautiful diagrams of the examples and tons of information. Still, if that doesn&amp;#8217;t work for you, then I would recommend the &lt;a href='http://book.git-scm.com/index.html'&gt;Git Community Book&lt;/a&gt;, which is similarly comprehensive, and probably has what you need.&lt;/p&gt;

&lt;p&gt;Once you have been using Git locally for a while, you&amp;#8217;re likely to want to share code with others. There are two reasonably good alternatives: &lt;a href='http://github.com'&gt;GitHub&lt;/a&gt; and &lt;a href='http://bitbucket.org'&gt;BitBucket&lt;/a&gt;. I prefer GitHub to BitBucket, but the free account for BitBucket does allow you to create as many private repositories as you want. Thus, you may find it&amp;#8217;s the only solution that&amp;#8217;s practical for you. I wasn&amp;#8217;t aware of this until recently, but you can get an &lt;a href='https://github.com/edu'&gt;educational account with GitHub&lt;/a&gt;. This will allow you to have five private repositories, which might be all you need.&lt;/p&gt;

&lt;p&gt;I hope you have found this introduction helpful. Please contact me if you have any additional questions.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:www4.ncsu.edu,2012-02-15:/~akmassey/posts/2012-02-15-advice-on-reading-academic-papers.html</id>
    <title type="html">Advice on Reading Academic Papers</title>
    <published>2012-02-15T15:04:50Z</published>
    <updated>2012-02-15T15:04:50Z</updated>
    <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/posts/2012-02-15-advice-on-reading-academic-papers.html" />
    <content type="html">&lt;p&gt;Graduate students must learn to read academic papers, but in virtually all cases, these same students are not formally taught how to best read academic papers.  It is not the same process used to read a newspaper, magazine, or novel.  The process of learning how to read academic papers properly can not only be painful, but also waste quite a bit of time.  Here are my quick tips on reading papers of all stripes:&lt;/p&gt;&lt;ul&gt;
	&lt;li&gt;Start with the Introduction and Conclusion: This is the fastest way to determine the problem statement and the approach taken to the problem by the authors.&lt;/li&gt;
	&lt;li&gt;Scan the paper and determine the Purpose, Structure, and Direction before reading for a detailed understanding.  Once you know the general point (purpose), the outline (structure), and the author's slant on a topic (direction) then all the details are much easier to place in the correct context.  Thus, if you find an idea confusing on your first pass reading through a paper, you may know not to worry about it because it is described in detail in a future section.&lt;/li&gt;
	&lt;li&gt;Do not read every single word!  There are bound to be words or phrases that trip you up as you read.  If you take the time to continually re-read a word, phrase, or paragraph until you completely understand it, then you will end up wasting quite a bit of time.  Often, if you simply plow past the part you don't understand, the meaning will be become clear in the next paragraph or section.  Note the part that you found confusing and return to it later to see if the rest of the paper made it clear.&lt;/li&gt;
	&lt;li&gt;After you have read the paper, immediately attempt to identify the main point, the strengths, and the weaknesses.  As academics, we are all curious.  If you start pondering the implications of the paper before you have clearly identified the main point, strengths, and weaknesses &lt;em&gt;as the author presented them&lt;/em&gt;, then you will likely have trouble separating your deeper opinions on the paper from the basic elements of the paper.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;In addition to these tips, please consider consulting with the following resources:&lt;/p&gt;&lt;ul&gt;
	&lt;li&gt;&lt;a href='http://www.u.arizona.edu/~mlindsey/sirls_reading/index.html'&gt;Some Tips on Reading Research Papers&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href='http://www.yukoncollege.yk.ca/~agraham/guides/guidec.shtml'&gt;A Guide to Reading and Analysing Academic Articles&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href='http://www.biochem.arizona.edu/classes/bioc568/papers.htm'&gt;How to Read a Scientific Paper&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href='http://www.lib.purdue.edu/phys/inst/scipaper.html'&gt;Quick Tutorial on Reading Scientific Papers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Although these resources focus on scientific papers, I have found many of the same techniques to be useful when reading law review articles and policy statements, which are also highly structured.  Each of these resources provides a list of additional resources and can serve as a great place to get started.  In addition, &lt;a href='http://www.google.com/search?q=&amp;apos;how+to+read+a+scientific+paper&amp;apos;'&gt;Google can provide even more&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:www4.ncsu.edu,2012-01-17:/~akmassey/posts/2012-01-17-ncsus-library-linker.html</id>
    <title type="html">NCSU's Library Linker</title>
    <published>2012-01-18T03:56:51Z</published>
    <updated>2012-01-18T03:56:51Z</updated>
    <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/posts/2012-01-17-ncsus-library-linker.html" />
    <content type="html">&lt;p&gt;Learning the tools and techniques needed to perform academic research is critical for a young researcher. I&amp;#8217;d like to highlight a tool NCSU provides that doesn&amp;#8217;t get as much use as it should: the &lt;a href='http://www.lib.ncsu.edu/librarylinker/'&gt;NCSU Library Linker&lt;/a&gt;. First, let&amp;#8217;s start with a little background information.&lt;/p&gt;

&lt;p&gt;Academics, essentially, are paid to produce research papers. Thus, it&amp;#8217;s critical for academics to read and write research papers. This is where the saying &amp;#8221;&lt;a href='http://en.wikipedia.org/wiki/Publish_or_perish'&gt;Publish or Perish&lt;/a&gt;&amp;#8221; comes from. (The accuracy of that saying is another matter.) These publications are, in a very real sense, the advancements modern academics contribute to society. They are also, for the most part, not freely available. (Though there are some strong arguments that they should be which I will not cover here.) Prospective academics, students, and anyone else interested in reading these papers typically must access these papers through a proprietary database.&lt;/p&gt;

&lt;p&gt;To ensure that faculty and students have access to these papers, most university libraries pay fees to gain access to those databases. As a condition of their access, universities must limit their services to their faculty, staff, and students. NCSU does this differently if you are on campus or off campus.&lt;/p&gt;

&lt;p&gt;If you are on campus and you are using the NCSU network, then you are automatically recognized as having access and provided it. You can even go directly to the database you&amp;#8217;re interested in and automatically be recognized as being on campus. You don&amp;#8217;t have to visit the library website first.&lt;/p&gt;

&lt;p&gt;If you are off campus, then you can access the &lt;a href='http://www.lib.ncsu.edu/databases/'&gt;databases through the NCSU Libraries website&lt;/a&gt;. The computer science databases are &lt;a href='http://www.lib.ncsu.edu/subjects/content.php?subject=23'&gt;available here&lt;/a&gt;. You will be asked to authenticate with &lt;a href='http://oit.ncsu.edu/iam/shibboleth'&gt;NCSU&amp;#8217;s Shibboleth service&lt;/a&gt;. Once you provide your username and password, you will be granted access.&lt;/p&gt;

&lt;p&gt;Of course, having two methods of accessing the same material does pose some problems. Specifically, it means that the link to a particular paper in a particular database is going to be different based on whether you are on campus or off campus. Thus, if you&amp;#8217;re putting together a collection of links to papers, for a course syllabus or a research project or whatever, you would have to provide two links to each paper.&lt;/p&gt;

&lt;p&gt;Enter the &lt;a href='http://www.lib.ncsu.edu/librarylinker/'&gt;NCSU Library Linker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The NCSU Library Linker is a pretty simple service. You provide it with a &lt;a href='http://en.wikipedia.org/wiki/Digital_object_identifier'&gt;DOI&lt;/a&gt; or a URL for the paper to which you would like to link. It provides you with a proxied link that will work regardless of whether it is clicked on campus or off campus.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:www4.ncsu.edu,2012-01-09:/~akmassey/posts/2012-01-09-reinventing-discovery-on-ieee-spectrums-techwise-podcast.html</id>
    <title type="html">Reinventing Discovery on IEEE Spectrum's Techwise Podcast</title>
    <published>2012-01-09T20:12:23Z</published>
    <updated>2012-01-09T20:12:23Z</updated>
    <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/posts/2012-01-09-reinventing-discovery-on-ieee-spectrums-techwise-podcast.html" />
    <content type="html">&lt;p&gt;Late last month IEEE Spectrum&amp;#8217;s Techwise Conversations podcast looked at a book published last fall called Reinventing Discovery. The &lt;a href='http://spectrum.ieee.org/podcast/at-work/innovation/reinventing-the-scientific-method/'&gt;podcast is worth listening to&lt;/a&gt;, but I would like to highlight part of it here:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Steven Cherry:&lt;/strong&gt; You know, I mentioned at the top that your book is part descriptive and part prescriptive. What are some further changes that you’d like to see wrought by the Internet and social networking?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Michael Nielsen:&lt;/strong&gt; Well, there’s a lot of very promising ideas that seem like they should work in principle and yet they don’t work in practice. One example that I give in the book, for example, is a lot of people have tried building scientific wikis to collaboratively build knowledge bases about the latest research accomplishments. And often these wikis haven’t done quite as well as you think they should, and part of the reason, of course, is that there’s a real opportunity cost involved in contributing to a wiki: Should you—particularly as a young researcher—should you spend your time doing that, or should you spend your time writing, working towards peer-reviewed scientific papers? And from a scientific career point of view, the answer is of course pretty simple: You should work on the scientific papers, because there’s not going to be much credit for you if you adopt these more radical, newfangled tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steven Cherry:&lt;/strong&gt; Are there any other examples?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Michael Nielsen:&lt;/strong&gt; Two very big examples, very broad examples are data sharing and code sharing, both of which are things which in most disciplines people don’t get a whole lot of credit for. Very often there’s a lot of very important scientific knowledge locked up in, for example, code, which you might use to do all sorts of data processing in the laboratory or simulations or whatever. And yet, when I talk to people who write a lot of code as part of their scientific job, they’ll say that very often they’re extremely reluctant to release that code publicly because well, first of all, it’ll end up being a pain; they’ll have all sorts of support and maintenance requests from other people. And second, it’s not something they can use as part of their tenure case; it’s just not something they get a whole lot of credit for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steven Cherry:&lt;/strong&gt; So really it seems like academia has to catch up with the Internet and start rewarding behavior that’s pretty useful to society.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Michael Nielsen:&lt;/strong&gt; I certainly think so. A phrase that’s really stuck in my head is—a biologist commented to me once that he’d been sitting on a genome for an entire species of life for more than a year. And he’d been doing this because his collaborators didn’t want him to share that data, didn’t want him to upload that data online where other people could use it. This, of course, is really not very uncommon within science, and it seems like really a tragedy, a lost opportunity. Other people could potentially have made all sorts of useful discoveries with that data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We regularly end up discussing topics of this nature during our &lt;a href='https://owl.csc.ncsu.edu/journal-club/'&gt;NCSU Software Engineering Journal Club&lt;/a&gt;, so if you, like me, find this interesting, then you might want to come to our next meeting.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>tag:www4.ncsu.edu,2012-01-07:/~akmassey/posts/2012-01-07-ranking-the-beauty-of-the-hunt-library.html</id>
    <title type="html">Ranking the Beauty of the Hunt Library</title>
    <published>2012-01-07T18:39:26Z</published>
    <updated>2012-01-07T18:39:26Z</updated>
    <link rel="alternate" href="http://www4.ncsu.edu/~akmassey/posts/2012-01-07-ranking-the-beauty-of-the-hunt-library.html" />
    <content type="html">&lt;p&gt;Could the &lt;a href='http://www.lib.ncsu.edu/huntlibrary'&gt;Hunt Library&lt;/a&gt;, upon completion, instantly become one of the 25 most beautiful college libraries in the world?&lt;/p&gt;

&lt;p&gt;Find out for yourself. First, take a look at the &lt;a href='http://www.lib.ncsu.edu/huntlibrary/gallery.html'&gt;gallery of images of the Hunt Library&lt;/a&gt;. Then, browse this collection of the &lt;a href='http://flavorwire.com/240819/the-25-most-beautiful-college-libraries-in-the-world'&gt;25 most beautiful college libraries in the world&lt;/a&gt;. If you see any one library in that list that looks worse than the Hunt Library, then your answer is &amp;#8216;yes.&amp;#8217; Personally, I think there&amp;#8217;s more than one in that list that won&amp;#8217;t match up with the Hunt Library, but I&amp;#8217;m probably biased.&lt;/p&gt;</content>
  </entry>
</feed>

