<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29712982</id><updated>2011-04-21T18:00:54.471-07:00</updated><title type='text'>Sakai Times</title><subtitle type='html'>Blood from a stone.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29712982.post-6563529565868574533</id><published>2007-01-18T09:49:00.000-08:00</published><updated>2007-01-18T09:50:05.622-08:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Those of you who live in places where it actually gets cold are going to laugh, but San Marcos Texas has been basically shut down for five days in a winter storm.&lt;/p&gt;

&lt;p&gt;It started early Saturday morning with torrential rains and a tornado. It tore up some guard rails and roofs, but no one was injured. Then it just kept on raining and the temperature kept on falling until we were under a blanket of ice. Tuesday was to have been the first day of Spring classes, but they canceled, and the weather didn&amp;#8217;t let up so they canceled again yesterday.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re thawing out today, and classes are underway. Every tree and cornice and overhang is drip drip dripping.&lt;/p&gt;

&lt;p&gt;Sure, I could have been working from home. But if you haven&amp;#8217;t heard from me, it&amp;#8217;s because I was greedily soaking up some unexpected time with my wife and son.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-6563529565868574533?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/6563529565868574533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=6563529565868574533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/6563529565868574533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/6563529565868574533'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2007/01/those-of-you-who-live-in-places-where.html' title=''/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116785177781075453</id><published>2007-01-03T11:16:00.000-08:00</published><updated>2007-01-03T11:16:17.816-08:00</updated><title type='text'>Big Tickets</title><content type='html'>&lt;p&gt;Here are the five things that Texas State needs the most out of me in the next month:
&lt;ol&gt;
&lt;li&gt;Sakai 2.3 in production (and finally convert our tables to InnoDB while we&amp;#8217;re at it!)&lt;/li&gt;
&lt;li&gt;Document everything in our installation that deviates from stock (providers, scripts, a couple of tools, etc.)&lt;/li&gt;
&lt;li&gt;Solve once and for all the synchronization problems with our eccentric registrar data.&lt;/li&gt;
&lt;li&gt;Catalogue and prioritize the known loose ends (i.e., every time I said &amp;#8220;I should really go back and fix that.&amp;#8221;)&lt;/li&gt;
&lt;li&gt;Bring a couple of programmers up to speed on the Sakai universe.&lt;/li&gt;
&lt;/ol&gt;&lt;/p&gt;

&lt;p&gt;Looks like I need good luck and caffeine!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116785177781075453?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116785177781075453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116785177781075453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116785177781075453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116785177781075453'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2007/01/big-tickets.html' title='Big Tickets'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116785077001928064</id><published>2007-01-03T10:59:00.000-08:00</published><updated>2007-01-03T10:59:30.073-08:00</updated><title type='text'>New New Year</title><content type='html'>&lt;p&gt;Happy new year, denizens of the Web and the Sakai-related. A new year brings in a new outlook and a clean slate. So far (the middle of the third day), I have managed not to do anything I regret. In the spirit of newness, I am happy to announce that I have formed a company called Aeroplane Software LLC and I will be leaving Texas State at the end of January to strike out on my own.&lt;/p&gt;

&lt;p&gt;Texas State has been very good to me, but I have been jonesing to work for myself ever since I started my career. The great thing about working for a state institution is that the risk is very low. The downside is also that the risk is very low. I&amp;#8217;m ready to find out if I can fly under my own steam. Whether I thrive or fail it will all be on me.&lt;/p&gt;

&lt;p&gt;Effective immediately, I&amp;#8217;m available for moonlighting: nights and weekends, small projects. Starting in February, I&amp;#8217;ll be firing on all cylinders. I look forward to a whole lot more Sakai in the coming year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116785077001928064?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116785077001928064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116785077001928064' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116785077001928064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116785077001928064'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2007/01/new-new-year.html' title='New New Year'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116317975490577788</id><published>2006-11-10T09:29:00.000-08:00</published><updated>2006-11-10T11:16:47.100-08:00</updated><title type='text'>NACOL wrapup</title><content type='html'>&lt;p&gt;I gave a talk about Sakai on Tuesday at the North American Council for Online Learning conference in Plano Texas.&lt;/p&gt;

&lt;p&gt;The organization&amp;#8217;s focus is K12, so  I was a little out of my element, but it was interesting to see the similarities and differences. I came away with the impression that K12 is much less autonomous and much more driven by policy than higher ed, even public universities like Texas State.&lt;/p&gt;

&lt;p&gt;The theme that echoed in the conference was that the world is changing faster than our ability to adapt our education strategies. There was also a lot of anecdotal evidence to suggest that the way our schools apply technology in education is to buy a lot of hardware and software and then see what happens. I won&amp;#8217;t deny that that&amp;#8217;s often exactly what we do in my department.&lt;/p&gt;

&lt;p&gt;We heard from Tim Magner, the director of the Office of Educational Technology at the U.S. Department of Education. He depressed me. In a nutshell, it was &amp;#8220;We&amp;#8217;re truly unprepared for the educational needs of the next generation, and the federal government can only give talks and &lt;a href="http://www.school2-0.org/map.htm" title="School 2.0"&gt;make pictures&lt;/a&gt; because my department has, like, no money.&amp;#8221;&lt;/p&gt;

&lt;p&gt;I wish I could be optimistic, but this is a &lt;em&gt;hard&lt;/em&gt; problem. Technology is such a great fit for say, accounting, because it&amp;#8217;s one of the problems that can be mechanized. Your ledger is either balanced to the penny or it&amp;#8217;s not. The root difficulty in education is that we don&amp;#8217;t even know what success means in this domain. We&amp;#8217;re talking about brains and cognition and emotion and motivation. Standardized testing does not reduce this to a binary equation, in spite of what its proponents may say. I believe we need to be free to experiment, to run thousands of skunkworks and find out what sticks. I like what &lt;a href="http://en.wikipedia.org/wiki/Grace_Hopper"&gt;Grace Hopper&lt;/a&gt; said: &amp;#8220;It&amp;#8217;s easier to ask forgiveness than it is to get permission.&amp;#8221; Sakai happened at Texas State because we just put the damn thing up and got to work.&lt;/p&gt;

&lt;p&gt;A couple of highlights: An organization called &lt;a href="http://takingitglobal.org"&gt;TakingITGlobal&lt;/a&gt; builds communities of young people from around the world to learn about global economic and social issues. They create content that educators can use for free, like &lt;a href="http://www.takingitglobal.org/tiged/projects/ayiti/" title="Ayiti"&gt;this game&lt;/a&gt; in which you assume the roles of members of a family in rural Haiti and try to overcome their economic hardship.&lt;/p&gt;

&lt;p&gt;I also loved hearing Bror Saxberg from &lt;a href="http://k12.com"&gt;K12, Inc.&lt;/a&gt; talk about some of the findings of cognitive science and how they may be applied to education. I believe if we don&amp;#8217;t start making a concerted effort to apply science like this to our instructional technology projects, then we&amp;#8217;re doomed to continue building solutions in search of a problem.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116317975490577788?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116317975490577788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116317975490577788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116317975490577788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116317975490577788'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/11/nacol-wrapup.html' title='NACOL wrapup'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116121521257142361</id><published>2006-10-18T16:46:00.000-07:00</published><updated>2006-10-19T06:56:43.186-07:00</updated><title type='text'>A Modest Proposal</title><content type='html'>
&lt;p&gt;I have often said that the software that the Sakai project ultimately produces is not as important as the opportunity to forge an entirely new way for institutions of higher education to collaborate, to build something together that is greater than the sum of its parts. This new way is an exciting alternative to the old buy vs. build dichotomy.&lt;/p&gt;&lt;p&gt;The basic problem right now is that we have a requirements gathering process, but no organized (or better yet, self-organizing) system for getting the work done. Even though the Sakai Foundation oversees the project, they’re not “the boss.” They can’t force anyone to work on anything, because we’re a coalition of volunteers. That’s good, in the sense that we are the masters of our own destinies, but it’s bad because if no one drives the boat, it just sort of drifts. There is no shortage of resources: institutions have people and money, and they’re ready to use it to get software that helps them fulfill their missions. Among all the institutions in the Sakai community, there amounts to rather a &lt;em&gt;lot&lt;/em&gt; of people and money.&lt;/p&gt;&lt;p&gt;There is a gap between what we want and what we get. It’s nobody’s fault; This is a hard problem. We need a (metaphorical) machine that takes people and money as inputs and emits world-class software. At select organizations, this is achieved by world-class software teams. To take it to the next level, we need a means of spawning meta-organizations — purpose-built working groups that swarm to a specific problem and produce great work. This happens now by dint of tremendous effort, currently embodied by the recent Resources work by Jim Eng, Clay Fenlason, and the folks at Unisa. We’ve got to find a way to bottle this up. Wouldn’t it be better if our best people had the mandate and the money to solve community problems full-time, instead of heroically squeezing it in between dinner and Conan O’Brien (I’m looking at you, Aaron Zeckoski)? I personally get frustrated that I can only put in a couple of hours a week to help make Sakai’s data interchange first rate.&lt;/p&gt;&lt;p&gt;I worry that we think this is going to iron itself out. The fact is, crossing institutional boundaries is fairly unnatural, and it’s going to take an intelligent template and a force of will to make it work as well as it should. Our problems are not technical, they’re organizational. Solving them is worth it because we stand a chance of closing the gap and getting what we need and want out of our systems, on our terms. Anybody interested?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116121521257142361?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116121521257142361/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116121521257142361' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116121521257142361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116121521257142361'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/10/modest-proposal.html' title='A Modest Proposal'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116068134942130134</id><published>2006-10-12T12:29:00.000-07:00</published><updated>2006-10-12T12:29:09.480-07:00</updated><title type='text'>NACOL Conference</title><content type='html'>I've been asked to give a presentation about Sakai at the &lt;a href="http://www.nacol.org/"&gt;North American Council for Online Learning&lt;/a&gt; conference in November in Plano Texas. It's a K-12 organization, so I'm going to try to give it the right spin&lt;sup&gt;[1]&lt;/sup&gt; for that audience.

This will be my first chance to use &lt;a href="http://www.apple.com/iwork/keynote/"&gt;Keynote!&lt;/a&gt; Why yes, I &lt;em&gt;am&lt;/em&gt; a shameless Apple fanboy. How could you tell?

[1] Not, in this case, a euphemism for lying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116068134942130134?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116068134942130134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116068134942130134' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116068134942130134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116068134942130134'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/10/nacol-conference.html' title='NACOL Conference'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116067946697808819</id><published>2006-10-12T11:57:00.000-07:00</published><updated>2006-10-12T11:57:47.313-07:00</updated><title type='text'>Data snafu in Samigo</title><content type='html'>&lt;p&gt;We recently had a problem with Samigo that looked like a crisis at first. A professor had just given his second test of the semester, a timed essay &amp;#8212; just one question. The trouble was, Samigo showed all scores from the &lt;em&gt;first&lt;/em&gt; test and submitted them to the gradebook as such, so students were seeing scores that didn&amp;#8217;t make any sense, and since the professor couldn&amp;#8217;t see their responses to the new test, he thought they were &lt;em&gt;gone&lt;/em&gt; which would be muy malo.&lt;/p&gt;&lt;p&gt;Luckily for us and this modest effort to migrate to Sakai, the test answers were not gone, just weirdly mis-recorded. It&amp;#8217;s not easy to debug this, because it involves a lot of digging in Samigo&amp;#8217;s tables, which are big and numerous and kind of inscrutable. For instance, there&amp;#8217;s two of everything: the template version and then the published version. But the foreign keys that refer to things will just say, like &lt;code&gt;SECTIONID&lt;/code&gt;. How do I know if that&amp;#8217;s the &lt;code&gt;SAM_SECTION_T&lt;/code&gt; or the &lt;code&gt;SAM_PUBLISHEDSECTION_T&lt;/code&gt;? A little bit of context and a lot of trial and error.&lt;/p&gt;&lt;p&gt;It turned out that the responses for test 2 had been recorded with the wrong assessment id. I didn&amp;#8217;t figure out how this could have happened; I just fixed the data.&lt;/p&gt;&lt;p&gt;The other thing that was wonky is that the rows in &lt;code&gt;SAM_ASSESSMENTGRADING_T&lt;/code&gt; all had a submit date, but did not have an &lt;em&gt;attempt&lt;/em&gt; date, which caused all the students to have &amp;#8220;No Submission&amp;#8221; show up next to their names. Once I figured that out, it was easy to fix, but again with the trial and error.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116067946697808819?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116067946697808819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116067946697808819' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116067946697808819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116067946697808819'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/10/data-snafu-in-samigo.html' title='Data snafu in Samigo'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116049963346603005</id><published>2006-10-10T10:00:00.000-07:00</published><updated>2006-10-10T10:00:33.890-07:00</updated><title type='text'>Screencast: Mirror Up</title><content type='html'>People have been asking me what the process of staying in sync with Sakai code is like, so I made a little screencast. It's about seven minutes long, and you'll find it &lt;a href="http://familicious.com/mirror_up.mov"&gt;right here&lt;/a&gt;.

I also created a diagram that I hope illustrates what happens when you do an &lt;code&gt;svn merge&lt;/code&gt;. You'll find that one &lt;a href="http://familicious.com/svn_merge_illustrated.pdf"&gt;right here&lt;/a&gt;.

Let me know what you think!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116049963346603005?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116049963346603005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116049963346603005' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116049963346603005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116049963346603005'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/10/screencast-mirror-up.html' title='Screencast: Mirror Up'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-116007756721106217</id><published>2006-10-05T12:46:00.000-07:00</published><updated>2006-10-05T12:46:07.246-07:00</updated><title type='text'>Experiment</title><content type='html'>I still don't know why my JVMs crash, but they seem to always become unstable after I have updated one and restarted it. And it's not only the one I updated that becomes unstable. Jeff and I were talking about it this morning and he suggested that it may be a problem with server affinity and sessions.

I'm doing an experiment today where I just update one instance of Tomcat and then watch and wait.

It bugs me how this problem has made me gun shy about applying patches to our production servers.

In happier news, my technique of using &lt;code&gt;svn_load_dirs.pl&lt;/code&gt; is working very well. My production boxes are getting all the changes made to the 2.2.x maintenance branch up to and including r15678.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-116007756721106217?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/116007756721106217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=116007756721106217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116007756721106217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/116007756721106217'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/10/experiment.html' title='Experiment'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115895815884062512</id><published>2006-09-22T13:49:00.000-07:00</published><updated>2006-09-22T13:49:18.893-07:00</updated><title type='text'>Rolling With Post’Em</title><content type='html'>A few of our instructors started trying to use Post’Em to put their grades online. When our testing center produces results from a scantron test, they send back a CSV file that is just perfect for Post’Em.

Well, almost perfect. As it happens, our testing center uses its own unique identifier called a plid for students, different from their campus-wide single signon id (what we call their NetID). Post’Em expects to find NetIDs in the first column of the CSV file, and no instructor wants to manually correlate plids with NetIDs. That's the kind of grunt work computers are made for!

This was a fun problem for me. Post’Em has some of the most readable and self-documenting code I've seen anywhere in Sakai. I already have a &lt;code&gt;DataSource&lt;/code&gt; bean sitting in Spring's bean factory that has a connection to the SIS database I need to lookup a NetID based on a plid. All I had to do was add a new property for that bean to Post’Em's &lt;code&gt;faces-config.xml&lt;/code&gt; under the relevant managed-bean. Over in &lt;code&gt;PostemTool.java&lt;/code&gt;, I added a method to find a NetID for a given plid. The only tricky part was figuring out where in the data stream a plid should transform into a NetID.

Now if we could only convince the testing center to upload the CSV where they would normally email it to the instructor, we would have some killer integration.

By the way, finding ways to open channels of data between Sakai and all the little data silos around campus is how we make an indispensable information system.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115895815884062512?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115895815884062512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115895815884062512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115895815884062512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115895815884062512'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/rolling-with-postem.html' title='Rolling With Post’Em'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115861804059990867</id><published>2006-09-18T15:20:00.000-07:00</published><updated>2006-09-18T15:20:41.360-07:00</updated><title type='text'>I Heart Unix</title><content type='html'>I just recently figured out how to use svn propset. At last I can have proper svn:ignore properties for those hundreds of 'target' directories in my source folder.

The trouble is, svn doesn't allow you to set a property like svn:ignore 'target' recursively. At last count (ok, it was two minutes ago) that would be 334 directories I would need to update. That sounds insane, right? Unix to the rescue.

&lt;code&gt;for dir in `find . -name 'project.xml' -execdir pwd \;`;do svn propset svn:ignore 'target' $dir;done&lt;/code&gt;

It takes longer to write about it than to do it. :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115861804059990867?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115861804059990867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115861804059990867' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115861804059990867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115861804059990867'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/i-heart-unix.html' title='I Heart Unix'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115861022205399679</id><published>2006-09-18T13:10:00.000-07:00</published><updated>2006-09-18T13:10:22.180-07:00</updated><title type='text'>Poor Little Database</title><content type='html'>You'd think I would learn about sub-selects in MySQL. I just paralyzed our &lt;em&gt;production&lt;/em&gt; database for 10 minutes with this query:

&lt;code&gt;select PROVIDER_ID from SAKAI_REALM where REALM_ID  in (select CONCAT('/site/', SITE_ID) from SAKAI_SITE_TOOL where REGISTRATION = 'sakai.assignment');&lt;/code&gt;

I didn't realize anything was wrong until my instant messenger started lighting up like a switchboard.

I used &lt;code&gt;show processlist&lt;/code&gt; and killed the offending query. This is yet more evidence that a software engineer should not be permitted to touch the database. On the other hand, why should I be able to cripple our application with a query that MySQL doesn't happen to like?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115861022205399679?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115861022205399679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115861022205399679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115861022205399679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115861022205399679'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/poor-little-database.html' title='Poor Little Database'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115819023027805901</id><published>2006-09-13T16:30:00.000-07:00</published><updated>2006-09-18T10:34:50.980-07:00</updated><title type='text'>Enterprise id is killing me</title><content type='html'>Will there be no end to the confusion of the Id vs. the Eid? I need more than two hands to count the number of ways this has tripped me up.

In the old days, Sakai only used one id. As of Sakai 2.2.0, there's Sakai's internal id, and the institution's id, or enterprise id (eid). Some parts of Sakai's API want an id, other parts want an eid. Usually anything that interacts with your providers (i.e., your enterprise) should get an eid. This seems perfectly reasonable, but it's not as cut and dried as it seems. For instance, &lt;code&gt;CourseManagementService.getInstructorCourses(instructorId)&lt;/code&gt; seems like it would take an eid, because you're going to get your courses from your student information system, which only knows about the enterprise id. It turns out though, that &lt;code&gt;CourseManagementService&lt;/code&gt; &lt;em&gt;expects&lt;/em&gt; a Sakai id, and then does an eid lookup inside the &lt;code&gt;getInstructorCourses&lt;/code&gt; method before delegating to the &lt;code&gt;CourseManagementProvider&lt;/code&gt; to get the info out.

You don't always know right away when you have a problem in this regard, because many users have a Sakai id that is equal to their eid (this turns out to be any user who was in your database at the time you did the conversion to 2.2.0). For these users, all the code that takes any kind of id still works even if you're sending the wrong id. Then gradually your system fills up with new users with a Sakai-generated guid and then things really get “interesting.”

Your brain really starts to hurt when you try to make the right list of participants show up in the Site Info tool, because any participants who came to your course from the &lt;code&gt;CourseManagementProvider&lt;/code&gt; are represented by an object of type &lt;code&gt;CourseMember&lt;/code&gt; and any participants who were manually added by site maintainers are represented by an object of type &lt;code&gt;Participant&lt;/code&gt;. The &lt;code&gt;CourseMember&lt;/code&gt; has an Id field and Uniqname field. The &lt;code&gt;Participant&lt;/code&gt; has an Eid field, a Uniqname field, and a DisplayId field. So what is Uniqname? Is it an Id? Is it an Eid? Turns out it's an Id, and woe betide you if you stuff an Eid in there. So now you can be either a participant or a course member, and you can either have a guid for an id or an eid for an id, and every combination can produce different results. I'm not even going to touch DisplayId.

This is all just a long-winded way of saying the dreaded Eid hit me twice again today. I have a homegrown tool for staff to use to associate rosters with instructors. It broke because it was passing an eid to the &lt;code&gt;CourseManagementService&lt;/code&gt;. Also, I had to ask for a bug I reported, &lt;a href="http://bugs.sakaiproject.org/jira/browse/SAK-6222"&gt;SAK-6222&lt;/a&gt;, to be retracted because I thought &lt;code&gt;SiteAction&lt;/code&gt; was misusing the &lt;code&gt;CourseManagementService&lt;/code&gt; when it really wasn't.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115819023027805901?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115819023027805901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115819023027805901' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115819023027805901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115819023027805901'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/eid-is-killing-me.html' title='Enterprise id is killing me'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115818647257219888</id><published>2006-09-13T15:27:00.000-07:00</published><updated>2006-09-13T15:27:52.636-07:00</updated><title type='text'>Finally TRACS &gt; Sakai 2.2.0</title><content type='html'>It was a big update and our servers are very busy, so it took a while to make sure everything was ok, but we're finally tracking very closely to the 2.2.x maintenance branch.

We got bit by &lt;a href="http://bugs.sakaiproject.org/jira/browse/SAK-6128"&gt;SAK-6128&lt;/a&gt;, vanishing Syllabi. I wonder why a change to the Syllabus DDL shows up in a maintenance branch. Thank goodness for Stephen Marquard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115818647257219888?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115818647257219888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115818647257219888' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115818647257219888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115818647257219888'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/finally-tracs-sakai-220.html' title='Finally TRACS &gt; Sakai 2.2.0'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115817109920960639</id><published>2006-09-13T11:11:00.000-07:00</published><updated>2006-09-22T22:34:19.480-07:00</updated><title type='text'>Snapz Pro X 2.0.3</title><content type='html'>This only has a little bit to do with Sakai.

Ambrosia finally put out a Universal Binary of their screen capture utility for the mac. I didn't really want to run something like that in Rosetta.

Find it &lt;a href="http://www.ambrosiasw.com/utilities/snapzprox/"&gt;here&lt;/a&gt;.

Update: I've been hoodwinked! It is not in fact a Universal Binary, it's “Intel compatible,” which just means it will run, though it runs under Rosetta. *sigh*&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115817109920960639?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115817109920960639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115817109920960639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115817109920960639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115817109920960639'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/snapz-pro-x-203.html' title='Snapz Pro X 2.0.3'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115800841072960907</id><published>2006-09-11T14:00:00.000-07:00</published><updated>2006-09-11T14:00:10.856-07:00</updated><title type='text'>the 700 club</title><content type='html'>A couple of posts ago, I pointed out that we wouldn't be able to keep measuring adoption rate by the number of unique visitors in a semester, because once that number is roughly equal to the number of potential visitors, it doesn't work as a gauge anymore.

Concurrent sessions is a number that’s going to have more legs. Before the start of this semester, we had never cracked 100. My eyes bugged out at 400, but it continues to slowly rise. We hit 700 today for the first time.

The JVMs have become a lot more stable, but not immune from crashing. I guess the faulty network hardware was causing many of them. I am in the dark as to what factors remain dangerous to our JVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115800841072960907?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115800841072960907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115800841072960907' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115800841072960907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115800841072960907'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/700-club.html' title='the 700 club'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115773840610277398</id><published>2006-09-08T11:00:00.000-07:00</published><updated>2006-09-08T11:00:06.106-07:00</updated><title type='text'>We Welcome Your Comments</title><content type='html'>The inimitable Dave Ross pointed out to me that my blog required authentication for comments. I've changed the settings so you can now comment anonymously. I had to ask Dave why he didn't want to identify himself.

“No, just too lazy to get a blogger account to post a little note.”

Got it. Done and done. Have at it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115773840610277398?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115773840610277398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115773840610277398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115773840610277398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115773840610277398'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/we-welcome-your-comments.html' title='We Welcome Your Comments'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115773771343111430</id><published>2006-09-08T10:48:00.000-07:00</published><updated>2006-09-08T10:48:33.466-07:00</updated><title type='text'>4x</title><content type='html'>With a simple query, you can tell how many unique users started a session with Sakai, and you can constrain it to a particular timeframe.

&lt;code&gt;select count(1) from (SELECT DISTINCT SESSION_USER from SAKAI_SESSION where SESSION_START &gt; '2006-08-23') as num_users;&lt;/code&gt;

We have used this to give us an idea of usage since we started our pilot in August of last year. The numbers are telling: By the end of the calendar year 2005 we had around 1,000 users. Between January and May of this year, we had just shy of 4,000.

Since the first day of class just over three weeks ago, &lt;em&gt;13,580&lt;/em&gt;.

In my talk in Vancouver about migration, I said “Beware. You might succeed.” Luckily, we only have ~40,000 people in the whole campus community, so we won't be able to quadruple again. Say, I could go for some fresh air and a tall glass of lemonade.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115773771343111430?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115773771343111430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115773771343111430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115773771343111430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115773771343111430'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/4x.html' title='4x'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115758409259482068</id><published>2006-09-06T16:08:00.000-07:00</published><updated>2006-09-06T16:08:14.183-07:00</updated><title type='text'>Close, But No Cigar</title><content type='html'>I deployed a big update yesterday that included all the changes in the 2-2-x branch since 2.2.0 along with a few query optimizations of my own. It included fixes for bugs that were bugging us, like the inability to add students to groups and a stack overflow error in the Section Info tool.

I had given this code a cursory look on our staging server and it looked good, so I ran with it. Unfortunately, I missed the fact that participants in a multi-roster course did not have access to their course. I got the call this morning while I was shaving. There's nothing like troubleshooting code in a bath towel. I immediately rolled back to yesterday's code.

My plan for today was to figure out what had been wrong with the new release, but I spent much of the day fixing two new problems: site setup stopped adding rosters to course sites when they were created, and certain users couldn't update their site's rosters after the fact.

The first problem was a result of using an updated version of SiteAction.java without also updating the CourseManagementProvider it depends on. The second problem was a result of SiteAction.java calling the CourseManagementService with an Id, instead of an Eid. I decided to &lt;a href="http://bugs.sakaiproject.org/jira/browse/SAK-6222"&gt;jira that one&lt;/a&gt;.

Sadly, I'm no closer to my awesome update than I was this morning. I do have a hunch about what was going wrong though. I think my new method in the CourseManagementProvider may not be right. This time I'll be sure before it goes into production. I keep meaning to create a whole suite of &lt;a href="http://www.openqa.org/selenium/"&gt;Selenium tests&lt;/a&gt;. Perhaps someday soon! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115758409259482068?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115758409259482068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115758409259482068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115758409259482068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115758409259482068'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/close-but-no-cigar.html' title='Close, But No Cigar'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115725103535404758</id><published>2006-09-02T19:37:00.000-07:00</published><updated>2006-09-02T19:37:16.383-07:00</updated><title type='text'>Chasing a Race Condition</title><content type='html'>For a long time, we've had an unsolved mystery: every once in a great while, some combination of permissions, participants, and roles will just vanish from somebody's site. I always chalked it up to something I did wrong in our AuthzGroupProvider, but now that our traffic is way up, the problem is worse and we have much better information about what's going on.

Jeff started keeping a log of every query to MySQL. When the problem reared its ugly head again, we started scanning the logs for anything that does a delete from any of the SAKAI_REALM tables. It was easy to find: DbAuthzGroupService.save(AuthzGroupEdit edit) deletes &lt;em&gt;every&lt;/em&gt; participant, role and permission for a given site before building them all back up again from scratch.

We think the problem is insufficient isolation. That is, one thread gets a dirty read of the SAKAI_REALM tables while the save() operation in another thread is still in the middle of reconstituting the data.

This problem is exacerbated in MySQL by the fact that all the delete statements use a sub-select, something that performs very poorly on MySQL.

I'm betting the reason the institutions using Oracle don't have a problem is that a) the isolation is right, and b) the queries run really fast.

I'll have more on this after we've played around with a few exploratory scenarios.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115725103535404758?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115725103535404758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115725103535404758' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115725103535404758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115725103535404758'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/09/chasing-race-condition.html' title='Chasing a Race Condition'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115704122984149909</id><published>2006-08-31T09:20:00.000-07:00</published><updated>2006-08-31T09:22:20.936-07:00</updated><title type='text'>Mirror Up</title><content type='html'>Here's the shell script I wrote that updates the vendor drop in our repository with the latest code from the Sakai 2.2.x maintenance branch. All the magic is in svn_load_dirs.pl which comes with Subversion. One piece that may look odd is those two lines of perl in the middle. I am erasing all those $Url and $Id comment lines from all the code, because those will actually show up as conflicts with my own code when I do the svn merge.

&lt;code&gt;
#!/bin/sh
rev="`svn info -r HEAD https://source.sakaiproject.org/svn | grep Revision: | sed -e 's/Revision: /r/g'`"
echo exporting Sakai at $rev
svn export -q -$rev https://source.sakaiproject.org/svn/sakai/branches/sakai_2-2-x $rev
echo getting rid of those darn Url and Id comments
for file in `grep -lr '\$URL' ./$rev/*`
do
	perl -pi -e 's/\$URL.*\$//i' $file
	perl -pi -e 's/\$Id.*\$//i' $file
done
echo synching repository with Sakai $rev
svn_load_dirs.pl -no_user_input -t $rev svn://projects.its.txstate.edu/tracs/vendor/sakai current ./$rev
&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115704122984149909?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115704122984149909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115704122984149909' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115704122984149909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115704122984149909'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/mirror-up.html' title='Mirror Up'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115699506135378312</id><published>2006-08-30T20:31:00.000-07:00</published><updated>2006-08-30T20:31:01.406-07:00</updated><title type='text'>Hey, Nice Black Eye</title><content type='html'>Where should I begin? On Saturday morning at 6:30 our load balancer ceased to exist. Another outage to notch onto my cubicle wall. We have a persisting problem of TCP connections between machines just disappearing. We decided to go offline on mid-morning on Monday to compile new kernels from scratch for all our machines. TRACS was down for 5 hours and our network problems are not gone. The good news is that we haven't had a JVM crash on the new kernel. Let's hope it sticks.

While all hell was breaking loose I thought it would be a good time to seriously think about how we maintain our repository. I worked out a little shell script that can update our repository with the latest code from the 2.2.x maintenance branch. I think this is going to make a big difference to how closely we can track Sakai development and how quickly we can get bug fixes. I also think it will make me more likely to contribute to Jira, since I will have at least a shred of confidence that I'm not finding old issues.

I had a Breeze meeting on Monday with some of the folks who are helping out with archive import. We're aiming to have something ready for Sakai 2.3. Honestly, I would rather be working on that full-time right now, but the fires must be put out.

Right now I'm waiting for sessions to drain off of two of our instances so I can update them with a new CourseManagementProvider and a couple of bug fixes for archive import. I really wish there were a way to move session state between nodes in the app server cluster. Then updates could be done in a snap. I imagine it must be technically possible. You just have to find all the state and instantiate it on another node fast enough that the users don't notice anything. Easier said than done, right?

I've got Sakai 2.2.1 running on our staging server, and it mostly looks good. At first I got ClassDefNotFound errors on startup for some Base64 utility class in xerces. When I switched to jre 1.4.2 the error went away. Maybe this is a dependency that doesn't come with Java 5. I'll have to sort that out before I can move this version into production.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115699506135378312?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115699506135378312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115699506135378312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115699506135378312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115699506135378312'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/hey-nice-black-eye.html' title='Hey, Nice Black Eye'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115655851919411394</id><published>2006-08-25T19:15:00.000-07:00</published><updated>2006-08-25T19:15:19.256-07:00</updated><title type='text'>TGIF</title><content type='html'>We still have a couple of JVMs crashing a day. A few of my nerd friends have seen my crash logs, and I’ve got some ideas to try, but nothing definitive. I think we’ll be ok for the weekend, since the crashes seem to be directly related to high demand.

I finished updating our CourseManagementProvider. There was still at least one method in SiteAction that assumes a particular format of your course ID, so I cleaned that up too.

We have a very simplistic mechanism set up for single signon from our Blackboard system. There is a servlet in TRACS that takes an XML-RPC request from Blackboard and returns a list of TRACS course sites for a given user. So users in Blackboard have a handy list of their TRACS courses with links that can take them straight over there. Each link url has an encrypted token affixed to it consisting of the user’s ID and a timestamp. The link takes them to another servlet that decrypts the token, determines if it is new enough, and then redirects the request to the correct site.

It has never worked 100% of the time, and I finally figured it out. Each server in our cluster generates its own encryption key, so the single signon would only work when the load balancer happened to send you back to the same server that the token had been generated on. I changed it so that it will take the encryption key from sakai.properties. This should fix it, but I still need to test it out.

Only three weeks before the code freeze for Sakai 2.3. I’m trying to get my import/export coalition to help me produce something release-worthy in that timeframe. We have a Breeze meeting on Monday. Onward an upward, y’all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115655851919411394?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115655851919411394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115655851919411394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115655851919411394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115655851919411394'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/tgif.html' title='TGIF'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115645163529572757</id><published>2006-08-24T13:33:00.000-07:00</published><updated>2006-08-24T15:13:47.260-07:00</updated><title type='text'>Spanked by the JVM</title><content type='html'>We had a very productive meeting this morning with the University of Houston Clear Lake. They wanted to pick our brains about how we run our Sakai implementation.

Then the JVMs started crashing. We actually had about a 10 minute outage this morning because I had disabled two of the app servers to update them, and the remaining two JVMs seg faulted nearly simultaneously, leaving nothing but a friendly apology.

And another one crashed this afternoon. I felt certain that when we switched over to real hardware, our JVMs would all be fat and happy. They've got plenty of RAM, I've been deliberate about their JAVA_OPTS etc. etc.

This is the kind of thing that causes my phone to ring first thing in the morning, and I just hate that.

In better news, I fixed some exceptions that our LDAP user provider was throwing because it turns out that some people in our directory don't have an email address. My old friend the NullPointerException drops by for a visit.

I'm supposed to be spearheading a campaign to get some fancy import and export into Sakai 2.3, but I'm still holding these servers up with my bare hands. Our database server is taking a beating. I need to get the MySQL optimizations installed as soon as I can.

My dear wife just asked me if I wanted anything from the store. “Beer, please.”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115645163529572757?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115645163529572757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115645163529572757' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115645163529572757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115645163529572757'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/we-had-very-productive-meeting-this.html' title='Spanked by the JVM'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115640176656608957</id><published>2006-08-23T23:42:00.000-07:00</published><updated>2006-08-23T23:42:46.593-07:00</updated><title type='text'>In the Guts of BaseContentService</title><content type='html'>Hours and hours of debugging later, the problem with my archive import code turned out to be happening in a method called getEntityAuthzGroups from BaseContentService. Each file resource you want to add is a Sakai Entity, and this method is supposed to return all the groups this Entity belongs to, for authorization purposes.

I had been relying on a simplifying assumption that used to work and no longer does: that you could add a resource multiple levels deep into your site hierarchy, and ContentHosting would automatically create any directories upstream from the file you're trying to add.

Now when you try to add a file with super directories that don't exist, getEntityAuthzGroups tries to use the file's super directory to get permissions to assign to the file, comes up will null, and the resulting NullPointerException is subsequently swallowed by one of these:

	catch (Throwable e) 
	{
	}

The fix was to have my code check for the existence of a file's parent directory and create it if necessary. This is good housekeeping anyway.

It will take some time to get the new code into production, because we have to take each of our four instances of Tomcat down one by one to minimize the disruption. Everything will probably be up-to-date by midday tomorrow (today!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115640176656608957?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115640176656608957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115640176656608957' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115640176656608957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115640176656608957'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/in-guts-of-basecontentservice.html' title='In the Guts of BaseContentService'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115636493932614122</id><published>2006-08-23T13:28:00.000-07:00</published><updated>2006-08-23T13:28:59.350-07:00</updated><title type='text'>Holy Geometric Increase,  Batman!</title><content type='html'>We’ve got 345 concurrent sessions right now. I’m not sure we ever broke a hundred before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115636493932614122?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115636493932614122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115636493932614122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115636493932614122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115636493932614122'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/holy-geometric-increase-batman.html' title='Holy Geometric Increase,  Batman!'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115634879283842977</id><published>2006-08-23T08:59:00.000-07:00</published><updated>2006-08-23T11:10:23.826-07:00</updated><title type='text'>So Far So Meh</title><content type='html'>&lt;p&gt;Our brand of Sakai is called TRACS, for Teaching, Research, And Collaboration System. I know, you're not supposed to use “and” in your acronyms, but naming a software system is &lt;i&gt;hard&lt;/i&gt;. Ever tried it?&lt;/p&gt;&lt;p&gt;Today is the first day of class, and all the basics are working properly. But not everything is right. Off the top of my head, here is the short list of things that are not working in TRACS:&lt;/p&gt;&lt;p&gt;You can’t request a roster in the site setup tool. I haven't finished updating the CourseManagementProvider yet with the new methods that define the format of your institution’s roster IDs. The methods are simple, but since we have tons of sites already in the database with the old Sakai-preferred format, I have to have a way of migrating those, and I haven't gotten to it yet.&lt;/p&gt;&lt;p&gt;The text areas seem to have a cap on what you can paste into them, and this is bugging our faculty who want to paste their multi-page syllabi into the syllabus tool. We saw this problem a year ago, and before I could do something about it, it appeared to go away on its own. I still need to isolate the conditions that cause the text to truncate.&lt;/p&gt;&lt;p&gt;My code that lets faculty import their Blackboard course archives is generating a permissions error. Even though the faculty have the content.new permission on their sites, the BasicContentService says they don’t. The way that permissions are computed on a piece of content is really complex, probably owing to the whole groups thing. It looks like every directory in the Resources tool gets its own AuthzGroup, but for some reason the site maintainer doesn't have any grants to it. Isn’t it enough that they have the maintainer role?&lt;/p&gt;&lt;p&gt;The import code is supposed to be able to do Blackboard question pools and assessments, and it doesn’t yet. This is nobody’s fault but my own. I just need to get on this.&lt;/p&gt;&lt;p&gt;We use MySQL, so I need to get around to applying the query optimizations from Unisa. Maybe these have already been folded into Sakai 2.2.1, but I need to find out. We’re breaking our record for usage today, and the database is going to be the bottleneck.&lt;/p&gt;&lt;p&gt;There are a few places where the database needs cleaning up. There are quite a lot of roles granted to users who no longer exist, and this is causing problems such as when we try to add guests to a site, and it tells us “so and so has already been used.” Really? Thanks. Having accounts in the SAKAI_USER_ID_MAP table also prevents them from getting guest access.&lt;/p&gt;&lt;p&gt;That’s all for now. On top of this, I need to figure out the fastest/smoothest way to move us to Sakai 2.2.1.&lt;/p&gt;&lt;p&gt;We've got 170 active sessions as of this writing. That’s a lot for us.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115634879283842977?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115634879283842977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115634879283842977' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115634879283842977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115634879283842977'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/so-far-so-meh.html' title='So Far So Meh'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29712982.post-115626222121695226</id><published>2006-08-22T08:57:00.000-07:00</published><updated>2006-08-22T08:57:41.516-07:00</updated><title type='text'>Greetings from Texas State University</title><content type='html'>My inaugural post is all about what I'm doing here. I am a solitary computer programmer at Texas State University in what we call Instructional Technologies Support (I have always been a little miffed about those two S's put together like that). I am part of the well-established schism in higher education between technology for administrative purposes, and technology for instruction. Administrative technologists have the luxury of knowing exactly what they're there for.

I came onboard 32 months ago to see about migrating the campus from Blackboard 5.5 to Blackboard 6. Our man Jeff had written some customizations that needed to be ported, and it was beginning to look like the port would be just as much work as the original code. We began casting about for alternatives.

In my previous life at the University of Texas at Austin I had seen Indiana University give a presentation about their home-grown course management system called OnCourse. They really seemed to know what they were doing, and it had been a few years, so I decided to drop by their website to see whether I could steal their ideas.

That was May of 2004, and it turned out I didn't have to steal anything because they were just weeks away from releasing Sakai 1.0. Now that's what I call service!

I will summarize the next two years like this: Sakai taught me how to roll up my sleeves.

Our pilot is over; We are entering open migration. Classes start tomorrow, and I bet it's going to be interesting.

This weblog is about one nerd's day-to-day life surfing a tidal wave of open source software for higher ed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29712982-115626222121695226?l=sakaitimes.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://sakaitimes.blogspot.com/feeds/115626222121695226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29712982&amp;postID=115626222121695226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115626222121695226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29712982/posts/default/115626222121695226'/><link rel='alternate' type='text/html' href='http://sakaitimes.blogspot.com/2006/08/greetings-from-texas-state-university.html' title='Greetings from Texas State University'/><author><name>Zach</name><uri>http://www.blogger.com/profile/00997884321890742030</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/_6yJn2Xl-VQA/TH0zdhQh6kI/AAAAAAAAAHQ/fd8g14_PWFM/S220/2010-08-31-zach.jpeg'/></author><thr:total>0</thr:total></entry></feed>
