battis.net and I'm all out of bubble gum…

Click to download a PDF of this. Feel free to reuse it — just let me know, especially if you make any particularly effective tweaks.

This policy has been gestating for some time, and I started to formulate it in conversation with one of my students who had had a brush with the academic dishonesty fairy. I presented it in class last week, and I realized that it is as good a representation as I have of my homework policy. I’m not really interested in coming up with a suitably punitive formula for docking grades for lateness, and I don’t particularly care about negotiating reasonable extensions. Mostly, like my students, I just don’t want to be bothered. But, by golly, there are things that bother me, and it would be good to steer clear of them. And it’s worth knowing how they rank in my worldview. And this expresses it.

Better not to do your work than to cheat or plagiarize to finish your work. Better to ask for an extension at the last minute than to just not do the work. But noticeably better to ask for the extension in a timely manner.

I’m pretty sure that this both made sense to and stuck with my ninth graders.

October 29th, 2012

Posted In: Teaching

Tags: , , , ,

I had hoped that someone else would have put together a handy flyer to explain better options for sharing files than sending email attachments. But in a casual search of the web, none came up. This is my initial pass at the problem of presenting the Web 2.0 and the cloud to folks who are comfortable with email, but who don’t feel confident in their use of other technologies.

The first pass is truly aimed at providing a flyer that could be tacked up next to someone’s monitor.

http://www.scribd.com/doc/111473318/So-I-want-to-share-a-document-smartly%E2%80%A6

I made a second version, which I posted to Google Docs, so that the links are clickable as well.

If you’d like to examine the assumptions and reasoning behind this, I have a flowchart that I felt… might not be as helpful in conveying these ideas.

For what it’s worth, when I was discussing the response to this broadsheet (broadside?) among the folks at school, my wife asked me if I sent this as an attachment.

She’s a funny one.

October 29th, 2012

Posted In: How To

Tags: , , , , , , , , , , , , , , , , ,

For the last few years (my JSON feed tells me: since 2008), I have been tagging and annotating articles of interest as they passed before my eyes in Google Reader. This served a two-fold purpose:

  1. I could find them again later, easily, because they were tagged and annotated.
  2. I could share an RSS feed with those annotations to particular interest groups that I worked with (e.g. anything tagged “for robotics” would show up on my advanced computer science class’ portal page, or anything tagged “for academic computing” would show up on my school home page).

This was a great way to share (and manage) resources. Granted, much of what passed before my eyes in Google Reader was trivial and not of lasting value, but this filtering allowed me to hang on to at least a few gems for future reference.

And then Google Reader got the Google+ treatment and sharing items broke. But you could download a JSON dump of all the items that you had ever shared. It wasn’t entirely clear what you could do with this JSON dump, but… there it was. And then: I realized that all of my other information is stashed on my web server (and that I have become increasingly distrustful of relying on cloud services to maintain my data and workflows — e.g. my weekly backup of all my Google Docs… just in case).

Wouldn’t it be handy to import that JSON feed into a new blog on my server? So I wrote a PHP script that converts (at least my) Google Reader JSON dump into an XML file that WordPress can import as a list of posts. With the tags and annotations converted over. In fact, with all of the data in the JSON dump embedded in the XML file (although WordPress doesn’t read all of it).

This comes with a few caveats:

  • For items that came from blogs with a full feed, the result is a republication of the original post — which feels ethically dubious to me. (I have made my new blog of Google Reader shared items private, so that I have the data but I’m not sharing it with the world).
  • I’ve made guesses as to how to treat some of Google’s data. Reasoned, educated guesses, but guesses nonetheless. For example, I’m not super-clear on which dates in the file correspond with what events — does a publication date refer to when the item was shared or the original post was posted?
  • I’ve added in some arbitrary (and therefore, ideally, eventually, configurable) WordPress tags to make the import go more smoothly. Where I have done that, I mark it in the script as a TODO item. (And, in truth, I didn’t really test to see if all of these items were necessary.)
  • The original authors of the posts are transfered to the XML file, which means that when the actual import into WordPress is done, you will have the option to either laboriously create a new user for each distinct author or simply revert authorship to the currently logged-in WordPress user. It doesn’t seem like WordPress has a format for exporting or importing users (or, at least, my cursory search didn’t find it). Clearly an ancillary SQL query could be generated that pre-populated the WordPress database with the users that the XML file refers to. But I haven’t bothered to do that.
  • You’ll need your own PHP-compatible webserver to run the script, since I have been quick and dirty and simply imported the JSON file from and exported the XML file to the script’s local directory. And I have no interest in setting up my world-facing webserver to take the traffic hit of processing other people’s multi-megabyte JSON dumps.
With that said, here is the script, as it stands this morning.

November 27th, 2011

Posted In: How To, Social Bookmarking, Social Media, Useful Tools

Tags: , , , , , , ,

As noted earlier, there is a slick trick for taking a publicly accessible calendar in FirstClass and generating an iCalendar feed. Also noted earlier, the big problem with this feed is that it doesn’t contain timezone information, which makes some calendar systems (most notably Google Calendar) assume that everything is happening at Greenwich Mean Time. Which it usually isn’t. And I have written a PHP script that adds Pacific Timezone information to the iCalendar feed.

Let’s put all this together and take a current FirstClass calendar, make it readable from the web, feed it through the script and then add the result to your calendar program of choice.

  1. Right-click (or control-click, on a Mac) on the calendar in question and Add to Desktop. A second calendar icon will appear, possibly named with the name of whoever’s calendar it is. Possibly not. FirstClass is a mystery.
  2. Drag the new calendar into your Web Publishing folder (on some versions, Web Publishing may be called Home Page Folder — why is this? FirstClass is a mystery.)
  3. At this point you’re faced with a choice: either blithely disregard security, rely on security through obscurity, or be ready to generate a somewhat more aggravating URL to be more (but still not fully) secure.
    1. Disregard security: leave the calendar named whatever it’s currently named. You need to change the permissions (right-click/control-click and choose Permissions) so that All Users has Schedule+Details permissions on the calendar. This will change permissions for not just the copy in the Web Publishing folder, but also for the original calendar — since the “copy” in Web Publishing is just an alias to the original anyway.
    2. Security through obscurity: rename the calendar something else (I usually do this, and use a password generating application to give me a random collection of letters and numbers — e.g. a2612GhxU). Change permissions as described in 3(a) above.
    3. Better security: follow the directions here for generating your URL. Don’t tinker with permissions.
  4. Point a web browser at calendar in your Web Publishing folder, add the iCalendar feed get parameters, and copy that new URL to the clipboard.
  5. Point your web browser your copy of the time zone script and paste the URL you just copied into the Calendar URL field and click Generate.
  6. Copy the new URL that appears below. You can paste that URL into whatever calendaring system you want (that can subscribe to iCalendar feeds).
    1. In Google Calendar, you would Add a new calendar by URL and paste in your URL. (caveat: Google doesn’t seem to be too fantastic about actually updating iCalendar feeds — they allege that this is a sporadic issue, but I have experienced it as more prevalent than sporadic).
    2. In iCal, you would choose Subscribe… from the Calendar menu and paste in your URL.
    3. You could also paste this URL (via some contortions — e.g. email it to yourself and copy-paste from that) into a phone calendar app.

June 14th, 2011

Posted In: How To

Tags: , , , , , ,

One of my colleagues, Matt Zipin (in fact, my high school computer science teacher), just sent me a link to an iPhone app that his current student, Ari Weinstein put together. It was one of those rare moments of seeing a piece of software and thinking, “This… this is exactly what I have been looking for! It’s almost like they had me in mind when they wrote it!”

Perhaps unsurprisingly, I had this reaction because, in fact, Ari has written an application that I suggested. Based on my work at St. Grottlesex as a Thirds’ basketball coach. I had been running practices using the timer and counter apps separately on my iPhone. Which was workable. But unwieldy. Enter.. Ari’s Basketball Timer app, which elegantly and cleanly combines these two tools into a single screen.

I think my favorite part of the app is something that you can’t see, that you can only experience: starting the Time out Timer stops the main clock, and starting the main clock stops the Time out Timer. How simple. How elegant. How easy it would have been to skip over.

Thank you Ari and Matt!

April 27th, 2011

Posted In: Computer Science

Tags: , , ,

I actually really, really want to document some of our projects that we’re working on this year in a great deal more detail. But, for now, I am simply publishing my notes from a conversation that I just had with Apple Education about the legalities of having high school students develop for the app store.

So… I just got off the phone with Apple Education (they were following up on an iOS in Education event a few months ago that I had actually missed). But: I did get the straight dope on Apple Developer accounts and high schools:
  • University accounts are just that: for higher education. Non-negotiable.
  • There are really three levels of developer that are pertinent to high school:
    • Free — they can download Xcode and use the iPhone simulator.
    • Individual ($99) — Same as free, plus they can use their iPhones/iPads to debug the software live (with the right certificates — I’ve found that the easiest way to set up the certificates is directly through the Xcode Organizer). My recollection is that they can have up to something like 100 devices for “debugging.” At this level, they can post apps to the App Store.
    • Enterprise ($299, IIRC) — Individual, plus the ability to manage a fleet of iOS devices (remote install and remote wipe), as well as distributing their software internally with no restrictions. I actually pressed him pretty hard on this, and he wasn’t 100% (“read the language in the agreement first”), but he thinks that it would be viable for the school to buy an Enterprise license and then say “Come by the computer lab and we’ll install our cool in-house app on your iPhone for free.” (Or for money — I don’t think they care.)
  • Apple strongly discourages the school (which would, in reality, be a single individual) signing up for an Individual developer account as the primary distribution channel to the App store for student apps. The rationale being that if a particular app makes it big, the individual who has control of that account well, has control of that account. Apple deals with account holders, not the model that the school constructed. They suggested that if a group of students wanted to band together on an app, that they should sign up as a group for an Individual account through which to distribute that app — and that they should draw up their own contract on their end for how to manage that account.
  • Students under 18 need to be signed up for the account by their parents. (Contract law — the kids are underage.)
At the end of the day, it sounded like my approach this year is basically right on the nose: I have an Individual account in my name that I use to install apps on test iPhones (and I have registered all the student iPhones as debugging devices). The students signed up for free accounts at the beginning of the year. I think what we’ll do when we release this app is sign up for a new Individual account that the students will jointly share to post the app to the App Store (something like “[Jewish Day School] App Design ’10’-’11”).

February 15th, 2011

Posted In: Computer Science, Uncategorized

Tags: , , , , , , , , , ,

This is really just a quick hack: all it does is insert the correct timezone description in the header of an iCalendar feed. But if the server that is generating the iCalendar feed doesn’t do it, someone has to. The script generates a URL that can then be subscribed to by your Calendar reader of choice. (I’m running this on my server and using it daily to good effect, but decline to share bandwidth with the world for this one):

February 14th, 2011

Posted In: How To

Tags: , , ,

One, largely undocumented, trick that I have discovered is that, if one places a calendar where it is accessible from the web, say:

http://www.mchschool.org/~sbattis/1to1workshops1011

that one can then cause FirstClass to generate an iCalendar feed for that calendar by appending the following GET parameters to the URL:

http://www.mchschool.org/~sbattis/1to1workshops1011?plugin=ical&leaves

Clicking this link will either download an iCalendar file or offer to subscribe you to this calendar, depending on your browser settings — right-clicking will allow you to copy-and-paste this link into your Calendar reader’s subscription settings. In fact, with some tinkering, it turns out that the calendar can be in a secured directory and the username and password can be sent through as part of the URL (in a format that I thought I had seen the last of with the decline of Gopher servers):

http://sbattis:supersekretpassword@www.mschschool.org/~sbattis/1to1workshops1011?plugin=ical&leaves

(Nota bene: the above username and password are fake and won’t work — thereby rendering the link inoperable. But you get the idea.)

February 14th, 2011

Posted In: How To

Tags: , , , ,

For the last couple of months, one of my high school classes at Jewish Day School has been working on building an interactive tool about the Six Day War for a middle school curriculum unit. They have put a lot of work into researching their data and laying it out in Google Earth, and now we’re putting together a tour of the data for the middle school students, that will also teach them a little about how to use Google Earth. It’s been enormously fun.

But. But, we now have to do some programming or some very careful recording in Google Earth to create this tour (a là Al Gore’s Climate Change tours). And my students are far more interested in the design end of things than in the coding end of things. They’re great at what they do, but niggling coding details give them head aches.

So I built a Google Docs spreadsheet, into which they can plug various pertinent information and out of which comes valid KML instructions that will define the tour. I’m a little proud of this — I don’t think that there’s anything else quite like it out there. There are three kinds of information that need to be entered:

  1. SoundCue — any audio that should be played in the background. You can either enter the whole URL to the MP3 file that should be played, or just the file name (and make sure that you enter the path in which all the files can be found on the KML Generator tab). You also need to tell us both when the cue should be played and how long it should last.
  2. AnimatedUpdate — anything that should be happening in Google Earth in terms of showing photo overlays or placemarks or polygons or what-have-you. Enter what should happen, and when (and, if relevant, for how long).
  3. FlyTo — any time we change where (or when) we’re looking at Google Earth. Enter when and how long the transition should take, and the date (and time) that we’re meant to be looking at.

The AnimatedUpdate and the FlyTo also expect the user to enter KML code — which can be copy-and-pasted from Google Earth KML exports for each transition. Happily, if something needs to happen more than once, entering the KML for the first instance will automatically populate future instances. In addition, the pauses necessary to synch up all of the action are calculated by the spreadsheet.

Update March 25, 2011: The spreadsheet above is our live work (since I kept updating the spreadsheet after this post).

The end result is both a visual timeline of the tour (helpful for debugging any weird errors) and also KML code that can be copy-and-pasted out of Google Docs and into a KML file. (Caveat emptor: depending on what you’re pasting the KML into — I like Xmplify — you may see that there is a leading and trailing quote that need to be manually deleted.)

Right now the spreadsheet can handle tours up to four minutes and 10 seconds in length (250 seconds, for those of you keeping score at home). This is because I was originally copying the KML out of the KML Orderer worksheet, and Google Docs supports pasting of up to 1000 rows in total. You’ll see that the current KML worksheet is a single cell, getting around this limitation, but I didn’t bother to extend any of the other worksheets. Just make sure you fill down all the formulas if you extend any of the sheets!

Here’s a link to a scratch copy of the spreadsheet. Feel free to copy and use it for your own purposes — let me know how you used it!

February 12th, 2011

Posted In: Educational Technology, How To, Social Media, Useful Tools

Tags: , , , , , ,

So… the RSS embed plugin for our school wiki server has been broken since before school started, with no sign of a fix in sight (other things are taking higher priority). Of course, since I have zero desire to post each new training video to our school video as I make them, this is a bit of a stumbling block. But…

I slapped together a script that makes use of the Magpie RSS framework to render some (most?) RSS feeds as a simple HTML page, which I can then embed as an IFRAME in our school wiki. Et voilá, no more having to paste in individual links! You can give it a whirl yourself: paste an RSS feed into this form:

RSS feed:

Obviously, if you have need of this on a regular basis, I would be happy to share the code — don’t just run it off my poor little web server!

November 22nd, 2010

Posted In: How To

Tags: , , ,

« Previous PageNext Page »
css.php