I am about done with the code for the frameset portal (SAK-12402) - the progress went nicely - I am pretty pleased with the results. Thanks to some timey prodding from Nick, I expanded this from just JSR-168 tools to make it available to all Sakai tools by a simple tool configuration option that can either be set in a tool registration file or dynamically by the tool as the tool runs.
I invented a neat feature where the portal uses frameset navigation as much as possible (only turned on by a property) - it is nice because I could quickly test lots of navigation sequences and work through click streams so as to make the frameset portal work reasonably well - even when it is used heavily.
My feeling is that this will start out with a just a few tools like IMS Tool Interoperability and the iFrame (Web Content) tool. It will simply seem like the portal navigation "minimizes" from time to time.
Off to write some documentation and a test plan.
And it is a *LOT* of fun. Branches are a way to store code you are fiddling with on the server instead of scattered around your home directory. It is also a great way to version control your hacking. Up to now I kept making tar files each time something worked and I had made progress.
I made branches for all my outstanding fiddling
o Frameless portal - functional - 70% complete - needs cleanup
o iFrame Portlet - functional - 50% complete - needs careful moving of features from web content tool
o Mail archive tool performance improvement - 10% complete - I have refactored code to make paging calls. But it does not really do paging. The real work is to move paging from MailArchiveAction into the service and this will require SQL hacking.
Here is how you make an SVN branch:
svn copy https://source.sakaiproject.org/svn/mailarchive/trunk/ https://source.sakaiproject.org/svn/mailarchive/branches/SAK-11544/ -m "Branch for Mail Archive Performance Improvement"
svn copy https://source.sakaiproject.org/svn/web/trunk/ https://source.sakaiproject.org/svn/web/branches/SAK-12563/ -m "Create branch for iframe portlet"
svn copy https://source.sakaiproject.org/svn/portal/branches/SAK-12350/ https://source.sakaiproject.org/svn/portal/branches/SAK-12402/ -m "Create branch for frameset portal"
This is so easy and fun - I cannot believe I did not know how to do this until today. I learned from this web page:
http://svnbook.red-bean.com/en/1.1/ch04s02.html
I love coding over holiday break! Coffee, pajamas, and a cable modem!
I am working on what I call the frameset portal
http://bugs.sakaiproject.org/jira/browse/SAK-12402
This allows a JSR-168 portlet in Sakai to request to be shown with no left navigation. This has applications for externally hosted tools and content - like the iframe tool and the IMS Tool Interoperability tool.
The way most LMS's do this is by using a frame set. The LMS puts a little tiny nav bar in a frame at the top so the user can get back to the LMS and puts the content in a second frame that gets the rest of the screen. This uses a frameset instead of iFrames - so the usability is not too bad - of course the accessibility is not so good. But for content that lives in a URL - this is the only choice other than a popup. This is better then a popup in many people's opinion (and mine as well).
I think that this will allow publisher content to look really nice in Sakai.
I started working this morning at about 8 AM and have the first version working at 11PM. I really like working on holiday breaks.
I started with Ian's portal refactor branch(SAK-12350). to make things easier to join back up with Ian as he completes his work.
It is really cool - screenshots soon in the Jira Entry. Now I want to rest, eat, and watch some Rock Band - now that the whole neighborhood has had 12 hours of solid practice.
Tomorrow I have a few things to clean up. I probably need to make my own branch which is a branch of Ian's branch to check this stuff in so folks can look at it.
I also need to try to get a SiteMaker development environment up and running so I can work on adding IMS tool interop to site maker - which is another of my holiday tasks.
To do list:
- Decide if we really want to pre-buffer content - or should we make a property to control this - so we only pre-load content when we are dealing with one of these "maximize requesting" portlets.
- Tighten down when we will do this - must be one tool and a JSR168 tool on the page.
- Clean things up - remove prints and debugging.
- Talk to Ian to get his blessing on this :)
Here are the commands to unbreak the trunk if you are working over the holidays.
cd announcements
svn update -r39609
--- All better - no ned to backlevel Announcement
Broken build URL
http://grandcentral.cs.wisc.edu/pavlo/index.php?page=results%2Foverview&opt_user=csev
This shows how to use a Google Calendar in Sakai instead of the built-in calendar. The primary benefit is that you can get your course calendar on your PDA and desktop - and the students can subscribe to the calendar as well. Code is being worked on in Sakai to produce an ICS feed - but until your site has that Sakai code in production, this is a workaround.
If necessary make a Google account and make a calendar. You should keep course events on a separate calendar - I use a calendar for each course - it allows for easy cleanup when the course is completed.
Make a Google Calendar - set its access to public.
You do not need to make a new Google account SImply add a named calendar to your existing Google account. By "My Calendars" Click Add -> Create New Calendar. Make it public is the easiest way to go.
Then add the events to the new calendar - make sure to uncheck all but the new calendar under My Calendar so the new events go only on the new calendar.
Once you have added the events to the calendar go to the drop-down next to your calendar in My Calendars and select "Calendar Settings".
In Sakai add a resource for an HTML Page - I name mine Misc/google-calendar.htm - I used Add / Create HTML Page from Resources tool.
Put something like this in the page:
<p> <iframe src="http://www.google.com/calendar/embed? src=b2epe3eqtlftp0v3g1e18pqf34%40group.calendar.google.com &ctz=America/New_York" style="border: 0" width="600" height="600" frameborder="0" scrolling="no"></iframe> </p> <p> If you want to subscribe to this calendar - here is the iCal link: </p> <p> http://www.google.com/calendar/ical/ b2epe3eqtlftp0v3g1e18pqf34%40group.calendar.google.com/ public/basic.ics </p>
Get the two strings from the "Embed this calendar" in Calendar Settings and the ICS URL from the "Calendar Address" section. I control click on the iCal link in Google and Copy URL. Save this file in Resources. After you press the Create button make sure to name the page something like "google-calendar.htm" rather than "New HMTL Page".
Once the resource is saved, click on it in Resources - this should pop up a new window - grab the URL of this resource. It should look like this:
https://ctools.umich.edu/access/content/group/0ae836b9-7fc9-4060-006f-27b2066ac545/Misc/google-calendar.htm
You should see the calendar and the text below the calendar.
Go into Sakai under Site Info -> Edit Tools and add a Web Content Tool. Set the Title to be Calendar and the URL to be the copied URL of the HTML page you created above. Press Continue and then Finish.
Then go to the new Calendar page and press "Options". Make the Tool title be "Google Calendar - Scroll Down for Subscription Options" - leave the Page title "Calendar" - this is the button text. Change the frame height to 750 pixels. Press "Update Options". Remember that students will not see the options button.
Viola! You are done
If you want to have more fun and have a Mac desktop and iPhone follow these additional steps.
In iCal, go to Calendar -> Subscribe - enter the ics URL in the subscription box. Before you save the calendar tell it to auto-refresh every hour (or whatever you like) - just don't leave it the default of never refresh. If all goes well you should see a new calendar in iCal with its own cute Apple color and a nice little check box to turn it off.
Connect your iPhone - start iTunes - Select the iPhone - go to the Info tab. Scroll down until you find "Sync iCal Calendars" - find the new calendar and tick the check box. Press "Apply" and the new calendar should be synced to your iPod.
Voila! - You have your course calendar in your pocket and so do the Students!
Cleaning up my desktop in preparation for next semester.
September 5, 2007
Show Video YouTube #2 SQL, Java, PHP/MVC #3, PHP#2 = migrate, PHP4 = DB Portability
Take a photo of the class
History of Languages
Framework Versus Language
This time last week I was in the NL Sakai
Sakai is a framework for learning tools
Ruby is what Sakai wanted to be - at least in terms of ease of use
Course Rules - Eating Sleeping, Drinking, Late, Leave early - Go to bathroom - All OK
MVC several passses
Talk about www.rubylearn.com
Language Lifesycle - Ruby versus Java
Will make mistakes
SQLite3 Database Browser
October 10, 2007
Need to find a a better way to remove scaffolding - need to introduce iterative development.
October 22, 2007
The way to make it harder is to make more pieces and make the students assemble bits from several sources.
Each assignment needs a challenge at the end,
Thought: Podcasts align the "teachable" moment with the "learnable" moment and keep those moments connected as long as necessary.
Pod-casts allow me to be present at more "teachable moments".
** Allow questions during practical midterm
October 24, 2007
I am to the point where I lose 10% of the students - how can I lose 0% ????
Firebug.
December 6, 2006
Hand in the most easily graded evidence of completion - screenshots.
--- SI543 ----
September 4, 2007
About me
Class rules - late, eat, sleep - all OK - don't blame me if you skip and fail.
Don't take last year's course.
Book - dense - if it seems slow skip around - fill in the big picture.
Discuss CS1 - transferability - clear curriculum expectations
Poll: Mac/PC, experience, motivation
If in both classes - I will seem schizo - not many
Expect few hour turn around on mail from me
September 14
Do not introduce String in the first assignment - it was too much - the subtle difference between == and .equals is the wrong thing to have to talk about. Morelli is right when he sticks with integers in Chapter 2.
September 18
I should have done the tracing assignment earlier.
Chapter 3 is starting to feel better.
Watch incoming practical exams - monitor the room
Resubmit
Firebug
This presentation will describe how Sakai has been used to teach two beginning programming courses at University of Michigan. This will describe the featuers of Sakai which were used and places where Sakai was not sufficient and other solutions were needed.
http://www-personal.umich.edu/~csev/talks/2007/2007_12_06_teaching.m4v
This presentation gives a brief overview of the Sakai project. The topics covered range from the history of the project all the way up to a simple overview of the Sakai architecture. The presentation describes Sakai's placement in the market, Sakai community governance, Sakai's commercial affiliates, Sakai adoption, and a number of other topics.
This is a great entry - made me very happy.
Does anyone know how to resolve this error? I keep getting an error message stating that iTunes could not sync contacts to the iPhone because an error occurred while pushing data from the phone.
Give this a try: Go to Applications>iSync>Preferences>Reset Sync History
http://discussions.apple.com/thread.jspa?messageID=6018864&tstart=0
I am making two dishes for the potluck C.H.U.M. Open House tonight (www.chumtherapy.net). I am making my Aldi's glazed ham and my sweet potato casserole. I also made a video for the occasion. I call it the CHUM Christmas Album.
It is a surprise and will be premiered at tonight's open house. After which DVD's will be sold to raise funds.
Aldi's Ham Buy spiral sliced ham at Aldis for $14.00 Cook covered in 250 over for 1.5 hours Pour off liquid Mix glaze packet with water - make it consistency of Mud Add brown sugar if you put in too much water Throw glaze in microwave for 30-45 seconds Spoon glaze on the ham spoon it around and hit it with a propane torch to make it bubble and stick to the ham as it dribbles down the side. Throw chunks of pineapple in around the ham at the bottom of the pan - fresh if possible - canned is OK Put back in the oven for an hour or so uncovered 250 To serve put in a Corning dish - cut into edible chunks remove bone - arrange chunks and pineapple in the Corning dish and take to the potluck Chuck's Sweet Potato Casserole Five sweet potatoes peeled and cubed into chunks about 1.5 in x 1.0 in - more than a single bite Boil potato chunks until just cooked in water on stovetop Drain and spread out in 9x12 glass baking dish Cut up 1/4 pound butter into chunks and throw in Mix 1/4 cup Orange Juice, 4 tablespoons of cornstarch, 4 tablespoons of brown sugar - make a kind of mud pour into the pan - the potatoes will give off more liquid. Put in oven at 250 for an hour. Bring mini marchmellows to the venue - just prior to serving put the mini marshmellows on top of the potatoes and pop into the microwave for a short while.
This is still in progress - I may have to update if things need adjustment.
I just came up with this quip - so I figured I would write it down.
I have packaged up the lectures, podcasts, assignments, blog entries, etc about the emergent use of Google Android in SI543 at University of Michigan.
Go here for an intro to using Google Android www.si543.com/si543/ - soon this will just be www.si543.com.
If you keep making modifications and they are *not* making it down to your Android device you can wipe out the versions of the app on our device as follows. For example - I simply added a Log.i method to the onCreate method and it *never* came out - I thought I was crazy. I figured I was doing something wrong.
I don't know why it does not just overwrite the files on my Emulator - but by blasting the files on the emulator life gets much better.
Start this process with Eclipse up and running and the emulator up and running - hey try to update your app.
$ cd /Users/csev/dev/android_sdk_darwin_m3-rc20a/tools $ ./adb devices List of devices attached 1 emulator-tcp-5555 device 0 $ ./adb shell # ls drwxr-xr-x root root 1969-12-31 19:00 var drwxrwxrwt root root 2007-12-01 08:06 tmp drwxr-xr-x root root 2007-11-11 15:59 system drwxr-xr-x root root 1969-12-31 19:00 sys drwxr-xr-x root root 1969-12-31 19:00 sbin dr-xr-xr-x root root 1969-12-31 19:00 proc -rwxr-xr-x root root 93824 1969-12-31 19:00 init drwxr-xr-x root root 1969-12-31 19:00 etc drwxrwx--x system system 2007-11-11 15:59 data drwx------ root root 1969-12-31 19:00 root drwxr-xr-x root root 2007-12-01 08:06 dev # cd data # cd app # ls -rw-rw-rw- root root 139313 2007-12-01 08:06 Lunar.apk -rw-r--r-- system system 1325833 2007-11-11 15:59 ApiDemos.apk -rw-rw-rw- root root 139233 2007-11-13 16:50 Toozday.apk -rw-rw-rw- root root 49781 2007-11-29 08:01 Twitter.apk -rw-rw-rw- root root 51506 2007-11-29 12:21 Hello.apk -rw-rw-rw- root root 11931 2007-11-29 12:32 H2.apk -rw-rw-rw- root root 54804 2007-11-29 18:48 SkeletonActivity.apk -rw-rw-rw- root root 11931 2007-11-29 19:49 H3.apk -rw-rw-rw- root root 139591 2007-11-30 20:07 LunarLander.apk # rm Too* # rm Hello* # rm H2* # rm H3* # rm Ske* # rm L* # rm T* # ls -rw-r--r-- system system 1325833 2007-11-11 15:59 ApiDemos.apk # (Exit with CTRL-D)
Then run the app again - Voila!
SO far once I have done this - I can re-download again the normal way - if I get stuck and downloads seem not to be overwriting the app on the emulator - blast away!