<?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>green galoshes &#187; reference</title>
	<atom:link href="http://greengaloshes.cc/category/reference/feed/" rel="self" type="application/rss+xml" />
	<link>http://greengaloshes.cc</link>
	<description>by Justin D. Henry</description>
	<lastBuildDate>Fri, 16 Jul 2010 22:14:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Markdown syntax highlighting and conversion in vim</title>
		<link>http://greengaloshes.cc/2009/12/markdown-syntax-highlighting-and-conversion-in-vim/</link>
		<comments>http://greengaloshes.cc/2009/12/markdown-syntax-highlighting-and-conversion-in-vim/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 01:22:31 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[reference]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[convert]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[markdown]]></category>
		<category><![CDATA[syntax]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/?p=159</guid>
		<description><![CDATA[Recently I&#8217;ve been playing around with vim as an editor. Since I do most of my writing in a text editor, one of the first functions I found myself looking for was a way to do basic markdown syntax highlighting and formatting. Here&#8217;s how I set up my vim environment to do both of that. [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I&#8217;ve been playing around with vim as an editor.   Since I do most of my writing in a text editor, one of the first functions I found myself looking for was a way to do basic <a href="http://daringfireball.net/projects/markdown/">markdown</a> syntax highlighting and formatting.  Here&#8217;s how I set up my vim environment to do both of that.</p>
<h3>Syntax highlighting</h3>
<p><a href="http://plasticboy.com/markdown-vim-mode/">PlasticBoy</a> got me most of the way there when it came to syntax highlighting.  All I had to do was figure out how it fit into my .vim directory structure, which is a <a href="http://github.com/scrooloose/vimfiles">clone</a> of Martin Greffel&#8217;s excellent setup. This turned out to be pretty straightforward </p>
<ul>
<li>Save the <a href="http://github.com/plasticboy/vim-markdown/raw/5693dc9890917399d3177ee5cfb65a550f69c145/mkd.vim">mkd.vim</a> file to <tt>~/.vim/syntax/mkd.vim</tt></li>
<li>Put the following in <tt>~/.vim/ftplugin/mkd.vim</tt>:

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">&quot; markdown filetype file</span>
<span style="color: #804040;">if</span> <span style="color: #25BB4D;">exists</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;did<span style="">\_</span>load<span style="">\_</span>filetypes&quot;</span><span style="color: #000000;">&#41;</span>
 finish
<span style="color: #804040;">endif</span>
augroup markdown
 au<span style="color: #000000;">!</span> BufRead,BufNewFile <span style="color: #000000;">*.</span>mkd   setfiletype mkd
augroup END</pre></div></div>

</li>
<li>For file type auto detection (i.e. if you want syntax highlighting automatically loaded for files with extensions like .markdown and .mdown), add this to <tt>~/.vim/ftdetect/markdown.vim</tt>:

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufNewFile,BufReadPost <span style="color: #000000;">*.</span>mkd,<span style="color: #000000;">*.</span>markdown,<span style="color: #000000;">*.</span>mdown set filetype=mkd</pre></div></div>

</li>
</ul>
<h3>Converting a document or selection from Markdown to HTML</h3>
<p>Converting markdown to html from inside of vim is nice and easy.  In fact, you don&#8217;t even need the syntax files installed.  You do need the markdown script installed somewhere (say, /usr/local/markdown).</p>
<p>We can take advantage of vim&#8217;s <a href="http://www.softpanorama.org/Editors/Vimorama/vim_piping.shtml">command line filtering</a> here, and simply run the markdown command on all or part of the document, right from within vim.  To convert the entire document, use the percent sign:</p>
<pre>:%!/path/to/markdown --html4tags</pre>
<p>If you just want to convert part of a document, say a highlighted visual block, you can just omit the percentage sign:</p>
<pre>:!/path/to/markdown --html4tags</pre>
<p>Bam! Your document is converted. Neat, huh?</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2009/12/markdown-syntax-highlighting-and-conversion-in-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Basic Data Reporting with Blackboard</title>
		<link>http://greengaloshes.cc/2009/12/basic-data-reporting-with-blackboard/</link>
		<comments>http://greengaloshes.cc/2009/12/basic-data-reporting-with-blackboard/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 16:38:09 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[reference]]></category>
		<category><![CDATA[blackboard]]></category>
		<category><![CDATA[campuslx]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[learningobjects]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[reporting]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/?p=155</guid>
		<description><![CDATA[﻿The built in reporting tools available for Blackboard are somewhat limited. To answer specific reporting questions, you may need to run custom SQL queries against the database. What follows are a few rough examples of such queries. All of the below examples are intended to outline the interactions you might need to answer specific reporting [...]]]></description>
			<content:encoded><![CDATA[<p>﻿The built in reporting tools available for Blackboard are somewhat limited.  To answer specific reporting questions, you may need to run custom SQL queries against the database.  What follows are a few rough examples of such queries.  </p>
<p>All of the below examples are intended to outline the interactions you might need to answer specific reporting needs.  It is important to note that these queries are in no way optimized, and could quite possibly put excess load on your system. Further, some of these are not actually tested (i.e. they are pulled or adapted from memory), and are only included as guides to help you get going in the right direction.</p>
<p>These queries are focused on Blackboard Learning System 8.x, however they should run just as well on 9.x (Blackboard Learn) releases.</p>
<p>One of the broader questions that you may be trying to ask is, <em>how are people using the system</em>?  Since there are any number of contexts in which that question can be answered, we&#8217;ll start by breaking it down into more manageable chunks. </p>
<h3>Aggregate Tool usage</h3>
<p>A broad picture of the tools being employed across the application can give hints about how instructors are using the system to actually teach.  For example, we might start by asking how many instructors are using tools like  discussion boards and assessments in their courses.</p>
<p>There are no built in reporting methods with which to view specific tool usage in Blackboard. Looking at the database, we are left with some detective work to determine which tables and fields will be most useful. Like all detective work, there is some guessing involved.  One good guess is that some of the data we are looking for can be found in the ACTIVITY_ACCUMULATOR table.</p>
<p>We also might be able to guess that the column within the ACTIVITY_ACCUMULATOR named internal_handle has a list of tool identifiers available on the system.  From there, we can start building a query to, say, count the most accessed tool pages as listed in the accumulator, grouped by tool and sorted by page view.  </p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> COUNT<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> page_views<span style="color: #66cc66;">,</span> activity_accumulator<span style="color: #66cc66;">.</span>internal_handle
<span style="color: #993333; font-weight: bold;">FROM</span> activity_accumulator
<span style="color: #993333; font-weight: bold;">WHERE</span> activity_accumulator<span style="color: #66cc66;">.</span>event_type <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'COURSE_ACCESS'</span>
<span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> activity_accumulator<span style="color: #66cc66;">.</span>internal_handle
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> COUNT<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">DESC</span></pre></div></div>

<p>This gives us an idea of the tools available for further inspection, as well as which ones we might want to take a closer look at.  </p>
<h3>Tool usage by course</h3>
<p>Now that we have the tools and their identifiers, we can use the ACTIVITY_ACCUMULATOR table to begin piecing together answers for a more specific set of questions, such as: Which courses are using which tools the most?  Are some departments using certain tools more than others?  Can we contact instructors that are using specific tools (i.e. in order to get feedback and offer further training)?</p>
<p>Say we wanted an idea of how many instructors were using assessments in their course.  If we assume that the cp_test_manager is the handle for the Test Manager in the Control Panel, then by looking at how often the instructor views that tool&#8217;s page we can surmise a rough usage pattern.  In other words, courses with a significant number of hits to that tool can be assumed to be using said tool in some fashion.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> COUNT<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">*</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> page_views<span style="color: #66cc66;">,</span> course_main<span style="color: #66cc66;">.</span>course_name<span style="color: #66cc66;">,</span> course_main<span style="color: #66cc66;">.</span>course_id
<span style="color: #993333; font-weight: bold;">FROM</span> activity_accumulator<span style="color: #66cc66;">,</span> course_main
<span style="color: #993333; font-weight: bold;">WHERE</span> activity_accumulator<span style="color: #66cc66;">.</span>course_pk1 <span style="color: #66cc66;">=</span> course_main<span style="color: #66cc66;">.</span>pk1 
<span style="color: #993333; font-weight: bold;">AND</span> activity_accumulator<span style="color: #66cc66;">.</span>internal_handle <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'discussion_board'</span> 
<span style="color: #993333; font-weight: bold;">GROUP</span> <span style="color: #993333; font-weight: bold;">BY</span> course_main<span style="color: #66cc66;">.</span>course_name<span style="color: #66cc66;">,</span> course_main<span style="color: #66cc66;">.</span>course_id 
<span style="color: #993333; font-weight: bold;">ORDER</span> <span style="color: #993333; font-weight: bold;">BY</span> page_views <span style="color: #993333; font-weight: bold;">DESC</span>;</pre></div></div>

<p>This can be done with other tools, such as the discussion board, to make educated guesses about its use.  Note that since the &#8220;cp_&#8221; designation appears to indicate a control panel page, hits to the discussion_board page should be assumed to be by all users in the course, and not limited to the instructor in the case of the test manager. </p>
<h3>Tool deployment</h3>
<p>Learning Objects Campus Pack LX products don&#8217;t show up in Blackboard&#8217;s internal tool handle tables in the same way as native tools.  However, you can get an idea of the usage of these tools by looking at which courses have them installed.  Running queries against the CONTENT_HANDLER table will let you see how many blogs or wiki&#8217;s have been installed a course.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> course_main<span style="color: #66cc66;">.</span>pk1<span style="color: #66cc66;">,</span> course_main<span style="color: #66cc66;">.</span>course_name<span style="color: #66cc66;">,</span> 
course_main<span style="color: #66cc66;">.</span>course_id<span style="color: #66cc66;">,</span> course_contens<span style="color: #66cc66;">.</span>pk1<span style="color: #66cc66;">,</span> course_contents<span style="color: #66cc66;">.</span>title 
<span style="color: #993333; font-weight: bold;">WHERE</span> course_contents<span style="color: #66cc66;">.</span>crsmain_pk1 <span style="color: #66cc66;">=</span> course_main<span style="color: #66cc66;">.</span>pk1 
<span style="color: #993333; font-weight: bold;">AND</span> course_contents<span style="color: #66cc66;">.</span>cnthndlr_handle <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'resource/x-lobj-journal'</span>;</pre></div></div>

<p>While this may not paint as clear a picture of usage as page view counts, it will still allow you to make general assumptions about pedagogical impacts.  </p>
<h3>Enrollment and Participation</h3>
<p>You can also get an approximate idea of enrollment in a course using data in the activity accumulator. This can be done by joining the acumulator on the course_users and course_main tables.  Querying the course user&#8217;s role and their last access is often a better indicator of recent activity in a course than the built in &#8220;active user&#8221; numbers generated by the GUI reporting tools.  This is especially true if you are only looking for activity in a course within a specific timeframe, such as a term/semester.</p>
<p>Course usage by term can also be determined by querying on the start date fields if they are populated.  In this way you can identify not only course usage in general, but also student vs. faculty usage by term.  </p>
<p>If you don&#8217;t have start date fields populated in your tables, you may need to query off of other fields. If your course id&#8217;s contain term data, for example, you might be able to do something along the lines of &#8220;LIKE &#8217;200809%&#8217;&#8221;.</p>
<h3>Other Usage Metrics and Tools</h3>
<p>The administrator manual documents some of the feilds and tables above, but a full schema documentation does not appear to be available at this time.  I&#8217;ve been told that version 10.x will ship with a fully documented (and public?) schema, but that&#8217;s probably more rumor than fact at this point. </p>
<p>How do you aggregate usage on your system?  Are there specific tools you use in your reporting process (i.e. Crystal Reports, SAS)? Are you using GUI-side tools like the nascent <a href="http://projects.oscelot.org/gf/project/astro/">Project ASTRO</a>? Are there open source tools that you are using?  Do you have special queries you run to address certain questions?  </p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2009/12/basic-data-reporting-with-blackboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smart Views and Grade Center Problems in Blackboard 8.0.307.0</title>
		<link>http://greengaloshes.cc/2009/02/smart-views-and-grade-center-problems-in-blackboard-803070/</link>
		<comments>http://greengaloshes.cc/2009/02/smart-views-and-grade-center-problems-in-blackboard-803070/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 21:56:07 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[reference]]></category>
		<category><![CDATA[bb8]]></category>
		<category><![CDATA[blackboard]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[gradecenter]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[loading]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/?p=136</guid>
		<description><![CDATA[Some time ago, we received a report of an instructor having problems accessing the grade center within their course. The confirmed behavior resulted in several similar errors (often depending on the browser used) when attempting to load the grade center. These errors all began with the string &#8220;An unexpected error occurred while loading the Grade [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago, we received a report of an instructor having problems accessing the grade center within their course.  The confirmed behavior resulted in several similar errors (often depending on the browser used) when attempting to load the grade center. These errors all began with the string &#8220;An unexpected error occurred while loading the Grade Center&#8221;, followed by varying statements, such as: </p>
<ul>
<li>TypeError: this.visibleRows[pos] is null</li>
<li>syntax error</li>
<li>TypeError: Result of expression &#8216;a&#8217; [null] is not an object. </li>
</ul>
<p>After digging up a thread with a helpful post by <a href="http://www.mrrena.com/" title="Mr. Renaissance: Spiritual and Philosophic Reflections">Eric Knickerbocker</a> that suggested that this might have been <a href="http://discussions.blackboard.com/jive4/message.jspa?messageID=113092#114847" title="Support Forums: Can't load Grade Center ...">caused by an errant &#8220;smart View&#8221;</a>, we were able to confirm that they had indeed being playing with smart views.  That same thread offered a solution involving some URL hacking. This allowed us to get the tool to load appropriately,using a url that looked something like this:</p>
<pre>https://your.server.edu/webapps/gradebook/do/instructor/manageCustomViews?course_id=THECOURSEID</pre>
<p>While we still have not been able to determine the specific steps to replicate the problem, we have some theories.  It may have something to do with smart view attempting to include disabled users in a view. Shortly after purging a data source, we noticed that the problem seemed to have resolved itself &#8211; only to return a day later.  This was before the instructor had removed all the smart views in the course. A few of the smart views in question were being built on specific users, i.e. the view was created by selecting all the users in the list.  It may be that certain logic behind the smart view function is failing when it attempts to access a record that is no longer enabled.</p>
<h3>Safety First</h3>
<p>If you choose to implement the above solution to get a grade center back, you should back up your data first.  Downloading it in the form of a comma separated or tab delimited file will make sure that you have a local copy that is readily accessible.  </p>
<p>You can do this by using the same method as described above.  For example, to get to the download page without loading the grade center, you should be able to access a url like this:</p>
<pre>https://your.server.edu/webapps/gradebook/do/instructor/downloadGradebook?dispatch=viewDownloadOptions&#038;course_id=THECOURSEID</pre>
<p>Generating a full course export and archive is also highly recommended before proceeding with something like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2009/02/smart-views-and-grade-center-problems-in-blackboard-803070/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Remembering syntax patterns through context</title>
		<link>http://greengaloshes.cc/2008/02/remembering-syntax-patterns-through-context/</link>
		<comments>http://greengaloshes.cc/2008/02/remembering-syntax-patterns-through-context/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 04:37:28 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[arguments]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[context]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[haystack]]></category>
		<category><![CDATA[needle]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[strings]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2008/02/remembering-syntax-patterns-through-context/</guid>
		<description><![CDATA[Speaking of array functions in PHP, ExpressionEngine developer Derek Jones shares a trick for remembering which order to send your arguments in when using various php search functions. All array-related functions use needle, haystack and all string-related functions use haystack, needle. There are certain words in the english language which no matter how many times [...]]]></description>
			<content:encoded><![CDATA[<p>Speaking of <a href="http://greengaloshes.cc/2008/02/brevity-and-readability/" title="Brevity and Readability &raquo; Justin Henry's green galoshes">array functions</a> in PHP, <a href="http://expressionengine.com/" title="ExpressionEngine - Publish Your Universe!">ExpressionEngine</a> developer Derek Jones shares a trick for <a href="http://expressionengine.com/blog/entry/a_haystack_in_a_needle/" title="A Haystack in a Needle | Blog | ExpressionEngine">remembering which order to send your arguments in</a> when using various php search functions.</p>
<blockquote cite="http://expressionengine.com/blog/entry/a_haystack_in_a_needle/"><p>All array-related functions use <em>needle, haystack</em> and all string-related functions use <em>haystack, needle</em>. </p></blockquote>
<p>There are <a href="http://www.answers.com/people&amp;r=67" title="people&amp;amp;r=67: Web Search Results from Answers.com">certain</a> <a href="http://grammar.quickanddirtytips.com/affect-versus-effect.aspx" title="Grammar Girl :: Effect Versus Affect">words</a> in the english language which no matter how many times I spell or use them, I always have to pause and wonder if I got it right.  The best way to conquer such elusive patterns is by placing them in context.  Derek does a nice job of illustrating the context for these PHP search functions.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2008/02/remembering-syntax-patterns-through-context/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Brevity and Readability</title>
		<link>http://greengaloshes.cc/2008/02/brevity-and-readability/</link>
		<comments>http://greengaloshes.cc/2008/02/brevity-and-readability/#comments</comments>
		<pubDate>Thu, 07 Feb 2008 04:12:03 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[arrays]]></category>
		<category><![CDATA[delete]]></category>
		<category><![CDATA[match]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[readability]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[trim]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2008/02/brevity-and-readability/</guid>
		<description><![CDATA[So I&#8217;m cruising along in Ruby one day, when all at once I realize I&#8217;ve stopped writing. I&#8217;m stuck. I needed to compare two arrays, and trim one so that any records in it would be removed if they existed in the other one. In PHP, one way to do this would be to loop [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;m cruising along in Ruby one day, when all at once I realize I&#8217;ve stopped writing. I&#8217;m stuck.  I needed to compare two arrays, and trim one so that any records in it would be removed if they existed in the other one.  In PHP, one way to do this would be to loop through one array and use something like <a href="http://www.php.net/in_array">in_array</a> to check the items in the current loop against those in the other array.  This approach always felt a little verbose to me, and I was hesitant to just hack up an equivalent in Ruby.</p>
<p>After a little digging in the <a href="http://ruby-doc.org/core/classes/Array.html" title="Class: Array">manual</a> and perusing a few conversations, I ended up with something that might look like this:</p>
<p><code>@people.<a href="http://www.noobkit.com/show/ruby/ruby/ruby-core/hash/delete_if.html" title="Method: Hash.delete_if - Noobkit">delete_if</a> { |person| @roster.<a href="http://www.noobkit.com/show/ruby/ruby/ruby-core/hash/include-3f.html" title="Method: Hash.include?(p1) - Noobkit">include?</a>(person) } #short and sweet!</code></p>
<p>I gotta admit &#8211; as much as I love brevity, that is almost <em>too</em> short.  The nice thing about some of these common control structures, and for that matter functions that are named like <code>in_array</code>, is that if you are careful you can write code that is almost self-documenting.  </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$roster</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$participant</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$found_participant</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_search</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$participant</span><span style="color: #339933;">,</span> <span style="color: #000088;">$people</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	    <span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$people</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$found_participant</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That is, if you asked a stranger to just read the words in the passage above out loud to themselves, chances are they will be able to figure it out. I&#8217;m not so sure that&#8217;s the case with that beautiful little line of Ruby. Maybe it&#8217;s just me and my relative inexperience.  </p>
<p>Speaking of readability, <a href="http://henrik.nyh.se/">Henrik Nyh</a> has a nice little piece on <a href="http://henrik.nyh.se/2008/02/non-obvious-method-arguments-in-ruby" title="Non-obvious method arguments in Ruby &ndash;  The Pug Automatic">making your function calls more readable</a> in Ruby.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2008/02/brevity-and-readability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Evolving to Dvorak</title>
		<link>http://greengaloshes.cc/2007/11/evolving-to-dvorak/</link>
		<comments>http://greengaloshes.cc/2007/11/evolving-to-dvorak/#comments</comments>
		<pubDate>Thu, 22 Nov 2007 07:10:29 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[productivity]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[writing]]></category>
		<category><![CDATA[dvorak]]></category>
		<category><![CDATA[keyboard]]></category>
		<category><![CDATA[qwerty]]></category>
		<category><![CDATA[typing]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2007/11/evolving-to-dvorak/</guid>
		<description><![CDATA[I have never learned to touch type. As much as Ma Henry tried, she just couldn&#8217;t get me to spend enough time with Mavis Beacon. Over the years, as my hunt-and-peck style morphed into a jumble of half-memorized keystroke combinations, I began to regret this. Several weeks ago I began to mull over the idea [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/zappowbang/2048547903/" title="peek by zappowbang, on Flickr"><img src="http://farm3.static.flickr.com/2292/2048547903_03e6dd0e3b_m.jpg" width="240" height="159" alt="peek" class="right" /></a>I have never learned to touch type.  As much as Ma Henry tried, she just couldn&#8217;t get me to spend enough time with Mavis Beacon.  Over the years, as my hunt-and-peck style morphed into a jumble of half-memorized keystroke combinations, I began to regret this.  Several weeks ago <a href="http://twitter.com/jhenry/statuses/309807662" title="Twitter / justin: thinking about learning the...">I began to mull over</a> the idea of learning the <a href="http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard" title="Dvorak Simplified Keyboard - Wikipedia, the free encyclopedia">Dvorak keyboard layout</a>.  If I was going to spend the time learning to type, why not do it right?</p>
<p><span id="more-92"></span></p>
<p>After a few weeks of letting the thought stew in the back of my mind, I had almost forgotten about it.  Then serendipity and the interwebs teamed up in the form of a <a href="http://www.boingboing.net/2007/11/10/dvorak-funnies-expla.html" title="Dvorak funnies explain why your QWERTY habit needs to go - Boing Boing">Boing Boing post</a> about the Dvorak layout and the wonderful <a href="http://dvzine.org/">DVzine.org</a>. That was enough to give my motivation a kick in the pants.  Not being entirely comfortable with the thought of rearranging the keys on my keyboard (or washing them, for that matter), I purchased a cover for my keyboard. I started practicing and drilling. </p>
<p>By the time my rubber cover had arrived, I was well on my way to a respectable, peck-free typing speed.  I even got a warm, fuzzy morale boost when a colleague indicated his <a href="http://reparent.blog.uvm.edu/archives/2007/11/memories_of_the.html" title="Digital Digressions v2.0: Memories of the Future of Technology">intent to defect from the QWERTY ranks</a> as well.</p>
<h3>Helpful hints</h3>
<p>Every day I can feel my speed and accuracy improve.  The faster I get the easier it is to learn.  Here are a few concepts I have found useful so far.  </p>
<ul>
<li><strong>Relax, and remember to breathe</strong>.  It&#8217;s hard to concentrate if you are focused on beating the clock. Keeping a consistent pace is more important than trying to increase your words-per-minute. Try to find a rhythm.</li>
<li><strong>Don&#8217;t throw away that QWERTY</strong>.  It makes for a slower start, but not being able to look down will help you memorize the new layout. So don&#8217;t start popping off those keys just yet.  Wait until you are more comfortable with the locations of the Dvorak layout so you&#8217;re not tempted to look down &#8211; otherwise you&#8217;ll be back to hunting and pecking.</li>
<li><strong>Keep a printout of the Dvorak layout</strong> stuck to your monitor for easy reference. This will help with the next tip.</li>
<li><strong>Don&#8217;t Panic</strong>.</li>
<li><strong>Practice</strong>.  Every day, several times a day.  Short 15-30 minute bursts are best.    </li>
<li><strong>Just do it</strong>.  I&#8217;ve seen suggestions to go &#8220;cold turkey&#8221; and drop QWERTY all at once, and I don&#8217;t think I could.  It would be too stressful, and take all the fun out of it.  So try typing an email or a blog post (this post was composed in Dvorak) here and there. </li>
</ul>
<h3>Useful tools</h3>
<ul>
<li>I&#8217;ve found <a href="http://www.powertyping.com/" title="Free typing tutor online with free typing lessons.">PowerTyping</a>&#8217;s Dvorak lessons to be the best mix of drills and word review.</li>
<li><a href="http://dvorak.nl/" title="dvorak.nl (aoeu.nl)">dvorak.nl</a> is also nice, although I found myself needing more drills at first to familiarize myself with the keyboard.</li>
<li><a href="http://www.tenthumbstypingtutor.com/" title="Ten Thumbs Typing Tutor - Award Winning Touch Typing Tutor - Free Online Typing Test">Ten Thumbs</a> is a stand-alone app that works well, though I&#8217;m still not convinced it&#8217;s worth that much dough.  We&#8217;ll see.  It does offer tips on finger placement, which is helpful.</li>
<li>KB Covers offers a <a href="http://www.kbcovers.com/servlet/Categories?category=Dvorak" title="Dvorak">thin rubber cover</a> that is an alternative to dissecting your keyboard.  It is nowhere near as useful as the above tools and concepts have been, but it does serve as a sort of mental safety net and confidence builder.  The cover was a <a href="http://www.flickr.com/photos/zappowbang/2048548567/in/photostream/" title="it's thin">bit thinner</a> than I had expected, but it fits well, looks good, and seems durable.    </li>
</ul>
<p>Happy typing!</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2007/11/evolving-to-dvorak/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disability Etiquette</title>
		<link>http://greengaloshes.cc/2007/11/disability-etiquette/</link>
		<comments>http://greengaloshes.cc/2007/11/disability-etiquette/#comments</comments>
		<pubDate>Sun, 11 Nov 2007 20:41:32 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[activism]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[awareness]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[disability]]></category>
		<category><![CDATA[etiquette]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2007/11/disability-etiquette/</guid>
		<description><![CDATA[The United Spinal Association has a great pamphlet on Disability Etiquette. It&#8217;s light, conversational (plenty of comics with situational examples), and friendly in tone. This goes a long way in increasing awareness about a host of disabilities. It also is a very useful tool in combating the fear that stems from not knowing how to [...]]]></description>
			<content:encoded><![CDATA[<p>The United Spinal Association has a great <a href="http://www.unitedspinal.org/disability-publications-resources/free-disability-awareness-publications/" title="United Spinal Association   &raquo; Awareness Connection">pamphlet on Disability Etiquette</a>.  It&#8217;s light, conversational (plenty of comics with situational examples), and friendly in tone.   </p>
<p>This goes a long way in increasing awareness about a host of disabilities.  It also is a very useful tool in combating the fear that stems from not knowing how to communicate with someone.  How many times have you seen a person completely ignore someone else, for no other than they didn&#8217;t know how to communicate with them? </p>
<p>I found out about it because <a href="http://www.va.gov/opa/vetsday/" title="Veterans Day - November 11 - Public and Intergovernmental Affairs">today is veterans day</a>.  The version I saw, in paper form, was branded with a VA logo instead of the United Spinal brand on the cover.  Whatever form you find it in, grab (or order) a few extra copies to send along to friends and colleagues.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2007/11/disability-etiquette/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Fixing UNIX permissions en masse</title>
		<link>http://greengaloshes.cc/2007/08/fixing-unix-permissions-en-masse/</link>
		<comments>http://greengaloshes.cc/2007/08/fixing-unix-permissions-en-masse/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 17:45:38 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[bulk]]></category>
		<category><![CDATA[chmod]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[directories]]></category>
		<category><![CDATA[files]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[folders]]></category>
		<category><![CDATA[group]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[recursive]]></category>
		<category><![CDATA[umask]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2007/08/fixing-unix-permissions-en-masse/</guid>
		<description><![CDATA[Every once in a while I need to &#8220;fix&#8221; the unix permissions on a directory. This is usually a web directory, so all the folders need to be readable and executable (i.e. 755), and the files need to be readable (i.e. 644). A preventative measure might be to set the umask appropriately (i.e. 022), so [...]]]></description>
			<content:encoded><![CDATA[<p>Every once in a while I need to &#8220;fix&#8221; the unix permissions on a directory.  This is usually a web directory, so all the folders need to be readable and executable (i.e. 755), and the files need to be readable (i.e. 644).  A preventative measure might be to set the <a href="http://en.wikipedia.org/wiki/Umask" title="umask - Wikipedia, the free encyclopedia">umask</a> appropriately (i.e. 022), so that there is less of a chance that I&#8217;d need to fix things. </p>
<p>However, I still need to be able to go back and fix things.  Doing so makes use of some funky looking <a href="http://man.linuxquestions.org/?query=chmod&amp;section=0&amp;type=0" title="LinuxQuestions.org Man Pages Online">chmod</a> wizardry:</p>
<p><code>chmod -R u=rwX,go=rX foldername/</code></p>
<p>Where <code>foldername</code> is the name of the folder and contents you want to &#8220;fix&#8221;.  Note that if you are at UVM and on their <a href="http://www.uvm.edu/ets/zoo/" title="Enterprise Technology Services : University of Vermont">&#8220;zoo&#8221; cluster</a>, they have a form that will let you do this to your entire directory.  The above snippet does the same thing, but gives you a little more fine grained control over what you are &#8220;fixing&#8221;.</p>
<p><strong>Update</strong>: At the time of writing, I couldn&#8217;t find the <a href="http://lists.freebsd.org/pipermail/freebsd-questions/2005-March/080451.html">link to where I found the above recipe</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2007/08/fixing-unix-permissions-en-masse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebCT Orphaned Users</title>
		<link>http://greengaloshes.cc/2007/08/webct-orphaned-users/</link>
		<comments>http://greengaloshes.cc/2007/08/webct-orphaned-users/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 04:56:26 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[reference]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[blackboard]]></category>
		<category><![CDATA[campusedition]]></category>
		<category><![CDATA[cruft]]></category>
		<category><![CDATA[cruftyapplications]]></category>
		<category><![CDATA[fix]]></category>
		<category><![CDATA[lms]]></category>
		<category><![CDATA[old]]></category>
		<category><![CDATA[orphaned]]></category>
		<category><![CDATA[orphans]]></category>
		<category><![CDATA[users]]></category>
		<category><![CDATA[webct]]></category>
		<category><![CDATA[webctce]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2007/08/webct-orphaned-users/</guid>
		<description><![CDATA[The application formerly known as WebCT CE (Campus Edition) 4.x sometimes leaves you with what the documentation sparingly refers to as &#8220;orphaned users&#8221;. This often occurs during the student import process, or while restoring course backups in a manner that restores students and their data (i.e. a &#8220;replace users&#8221; restore). Here&#8217;s how you might be [...]]]></description>
			<content:encoded><![CDATA[<p>The application formerly known as WebCT CE (Campus Edition) 4.x  sometimes leaves you with what the documentation sparingly refers to as &#8220;orphaned users&#8221;.  This often occurs during the student import process, or while restoring course backups in a manner that restores students and their data (i.e. a &#8220;replace users&#8221; restore).  Here&#8217;s how you might be able to restore those orphans.</p>
<p><span id="more-66"></span></p>
<h3 id="how_do_i_know_if_i_have_orphaned_users">How do I know if I have orphaned users?</h3>
<p>Symptoms include a &#8220;+&#8221; (that&#8217;s a &#8220;plus&#8221;, or &#8220;addition&#8221; sign) nexxt to the user&#8217;s id in the manage students listing.  The student often won&#8217;t see the course listed in their &#8220;MyWebCT&#8221; area when they log in, even though they are listed in the course with the fated plus mark next to their id.</p>
<h3 id="how_might_one_find_a_home_for_orphaned_users">How might one find a home for orphaned users?</h3>
<p>It seems that one cause of orphanage among users in WebCT concerns how they are marked for inclusion in the course via the &#8220;Courses&#8221; field and the &#8220;Registered Courses&#8221; field.  For example, the course in question might be listed in their &#8220;Registered Courses&#8221; list for the user, but not listed in their &#8220;Courses&#8221; list.  The solution is to add them to the course (in other words, in admin you are making the courses field look the same as the Registered courses field).  This can be done, starting in Admin -> User Management:</p>
<ol>
<li>querying for the student, </li>
<li>checking the box next to their name</li>
<li>clicking on the &#8220;Courses&#8221; button</li>
<li>adding the student to the course.   </li>
</ol>
<p>The student should no longer be an orphan.  Logging back into the course should show them without a plus next to their name.</p>
<h3 id="great_now_how_do_i_do_this_for_more_than_one">Great! Now how do I do this for more than one?</h3>
<p>Easy enough for one user, but how about a whole course full of users?  This was a  little harder to find, since it doesn&#8217;t seem to let you add more than one user to a course.  Until you find the &#8220;Add Multiple Students&#8221; button.  Then it goes something like this (once again in User Management):</p>
<ol>
<li>Perform a query on the &#8220;Registered Courses&#8221; field, where it equals the course id <del datetime="2007-08-22T18:11:37+00:00">(not equals, as there may be other courses in the fields you are searching for)</del>.</li>
<li>This should give you a list of students. Choose &#8220;Select All&#8221;.</li>
<li>Click &#8220;Add Multiple Students&#8221;.</li>
<li>Select the course or courses you wish to add the students to and select add.</li>
<li>Click &#8220;Verify&#8221; (you might be able to just continue here, but verify seems to work).</li>
<li>Select all</li>
<li>Add.</li>
</ol>
<p>You should now have a course full of non-orphaned users.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2007/08/webct-orphaned-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Date math and documentation</title>
		<link>http://greengaloshes.cc/2007/08/date-math-documentation/</link>
		<comments>http://greengaloshes.cc/2007/08/date-math-documentation/#comments</comments>
		<pubDate>Fri, 10 Aug 2007 21:47:23 +0000</pubDate>
		<dc:creator>Justin D. Henry</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[qotd]]></category>
		<category><![CDATA[reference]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[date]]></category>
		<category><![CDATA[datemath]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[docs]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[math]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[unix]]></category>

		<guid isPermaLink="false">http://greengaloshes.cc/2007/08/date-math-and-documentation/</guid>
		<description><![CDATA[The other day I found this little nugget in the comments of the date page of PHP manual. The real lesson is in the first paragraph: &#8220;One of the most useful skills you can utilize when performing date math is taking full advantage of the UNIX timestamp. The UNIX timestamp was built for this kind [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I found <a href="http://www.php.net/manual/en/function.date.php#64046" title="PHP: date - Manual">this little nugget</a> in the comments of the date page of PHP manual.  The real lesson is in the first paragraph:</p>
<blockquote><p>&#8220;One of the most useful skills you can utilize when performing date math is taking full advantage of the UNIX timestamp. The UNIX timestamp was built for this kind of work.&#8221;</p></blockquote>
<p>The comment goes on to give some relevant examples.  If you aren&#8217;t a fan of doing date math &#8211; in any language &#8211; take this concept to heart.  It will make your life easier.</p>
<p>Comments like this are a great example of why the <a href="http://www.php.net/manual/" title="PHP: PHP Manual - Manual">PHP Manual</a> is one of the best reference manuals out there.  I would bet that this documentation format has been a big driver behind the popularity of the language.  Any good API, manual, or set documentation should include moderated comments.</p>
]]></content:encoded>
			<wfw:commentRss>http://greengaloshes.cc/2007/08/date-math-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

