Recently a leader in the Alberta OER community, Michael McNally, suggested that it is difficult or impossible to only use open source software (OSS) when creating open educational resources (OER). I agree with his point that using only OSS doesn't make OER more "pure", but perhaps it is still an interesting challenge.
Here are some of my suggestions, please comment if anything is missing. And I do understand the hypocrisy of posting this on a Google-hosted blog.
Writing Text
Text is still often the primary medium for OER, and there are a number of great open-source text-authoring tools. LibreOffice is a great office suite, and it is similar to traditional office suites so there shouldn't be much of a learning curve.
If you prefer collaborative writing, perhaps check out Nextcloud. You'll need to host it somewhere, if you are in Alberta consider Cybera's Rapid Access Cloud which uses OpenStack.
Diagrams and Graphics
Inkscape is a great vector editing and layout program. For image editing and creation, check out GIMP, Krita, or MyPaint.
Audio
One of the best simple audio recording and editing programs is also open source, Audacity. There are others, of course, but it should do everything you need.
Video
My favorite open-source video editing program is Open Shot, but you may also want to check out Shotcut.
Hosting video is another issue, though. You can host videos in a learning management system such as Moodle, or check out alternatives such as MediaGoblin, Kaltura, or ClipBucket.
Operating System
Linux has gotten much easier to install and use if you'd like to replace Windows or MacOS. My current favorite distribution is Peppermint.
Hosting
As previously mentioned, Albertans can avoid the big five cloud providers by running servers on RAC, but your institution may have self-hosted instances of Pressbooks or similar open-source hosting platforms.
Hopefully those cover anything you may need to use when creating OER with OSS. In some cases these tools are preferable to commercial products.
Of course if you are philosophically opposed to proprietary software then you are probably already familiar with most of these.
As always, please comment if you have any other suggestions.
Saturday, February 29, 2020
Monday, February 3, 2020
Getting new copies of Jupyter notebooks with shutil and nbgitpuller
Getting a Fresh Set of Jupyter Notebooks
If you would like to update your copy of notebooks, for example on the Callysto Hub, you can delete the folder and pull the files from GitHub again. This is useful if something no longer works, or if the repository has been updated.
Unfortunately you can’t just select a directory in Jupyter hub and delete it if it contains files. One way to delete a folder, though, is to use the Python command shutil.rmtree() which is a shell utility command that will remove a whole directory tree.
To remove a folder, create a new Python 3 notebook in the same folder as the one you want to delete (but not inside the folder to be deleted).
In a code cell, type (or paste) the following two lines:
Replace curriculum-notebooks with the name of the folder you would like to delete. Then run the cell, and you should see that the folder no longer exists.
Then you can click on an nbgitpuller link, for example from callysto.ca, that pulls down a new copy of the repository or notebook files that you are interested in.
You can also see the process in this video.
If you would like to update your copy of notebooks, for example on the Callysto Hub, you can delete the folder and pull the files from GitHub again. This is useful if something no longer works, or if the repository has been updated.
Unfortunately you can’t just select a directory in Jupyter hub and delete it if it contains files. One way to delete a folder, though, is to use the Python command shutil.rmtree() which is a shell utility command that will remove a whole directory tree.
To remove a folder, create a new Python 3 notebook in the same folder as the one you want to delete (but not inside the folder to be deleted).
In a code cell, type (or paste) the following two lines:
import shutil
shutil.rmtree('curriculum-notebooks')
Replace curriculum-notebooks with the name of the folder you would like to delete. Then run the cell, and you should see that the folder no longer exists.
Then you can click on an nbgitpuller link, for example from callysto.ca, that pulls down a new copy of the repository or notebook files that you are interested in.
You can also see the process in this video.
Wednesday, January 29, 2020
Using the Bitly API with Google Apps Script (JavaScript)
To get started with version 4 of the Bitly api in Google Apps Script, ensure that you have a Bitly account with a username and password (not using the Facebook, Twitter, or Google login options).
Assuming that you are developing applications or scripts that will be used for a single account you don't need to worry about OAuth authentication, you can get a generic access token from this link.
If you haven't already, create a Google Apps Script. Here are some functions you can use:
Assuming that you are developing applications or scripts that will be used for a single account you don't need to worry about OAuth authentication, you can get a generic access token from this link.
If you haven't already, create a Google Apps Script. Here are some functions you can use:
https://gist.github.com/misterhay/38a500545ce7abc75b875f33f01c9f51
Hopefully that's enough to get you started. You can browse the rest of the Bitly API documentation for other functions.
Hopefully that's enough to get you started. You can browse the rest of the Bitly API documentation for other functions.
Thursday, January 2, 2020
Looking forward to technologies of the 2020s
Years ago I heard the phrase "In 2021, hindsight will be 20/20". I'm certainly not the prognosticator on the level of Ray Kurzeweil, but as we start turn over the year number in the tens place I'm thinking about technologies that I'm looking forward to in the next ten years. In no particular order I am anticipating:
Better digital assistants and smart devices
Smart speakers and phone-based digital assistants are useful for some things, but we still find ourselves repeating or rewording commands. There are also quite a few instances of "I can't help with that yet". I'm optimistic that we will get to the point of our digital assistants learning how to work for us, and our smart homes adjusting to our lifestyles and patterns without us having to continually yell at them and reconnect devices to the WiFi. These devices and services should make it less work for us to accomplish tasks.
More automation of uninteresting tasks (including driving)
I'm a big fan of freeing up humans to accomplish uniquely human achievements, or watch more streaming video if they prefer. To help achieve that, I'm looking forward to more automation of tedious or dangerous tasks. While this may lead to more unemployment, or less depending on who you listen to, maybe we can get to the point as a society of eliminating jobs that people dislike. And perhaps decrease our workload without decreasing our standard of living, so that we have more time for volunteering and leisure activities.
Better virtual reality and augmented reality
VR seems to be used primarily for leisure activities such as video games, and perhaps some basic virtual field trips, but there are many other interesting applications. It still feels like early days, especially with AR, but the technological capabilities and developer proficiencies are improving. I'm particularly excited about the potential for psychological treatments using VR and AR.
Advances in psychology and neuroscience
Technologies such as functional magnetic resonance imaging are giving us better insights into how brains work, and it feels like we are just at the beginning of our understanding. We may start to see useful mind-computer interfaces, and at some point even the ability to create backups...
Improved information literacy
As we understand more about how our minds work, perhaps we can devote more resources to helping people distinguish reality from fiction. There seems to be a growing recognition that disinformation and "face news" are issues, but no consensus about what is fake and how to deal with this issue. I'm optimistic, however, that it is a solvable problem. It may require a re-think of how we remunerate individuals and organizations, and our advertising-based economy.
eSports
We've seen a growing phenomenon of watching other people play video games, and "cyberathletes" making the kind of money that professional athletes can make. Not sure if this will supplant traditional sports, or if we would want them to, but the risk of concussions is lower. There is automated comment moderation in some streams, but the communities tend to be somewhat toxic, especially for female gamers. Although I don't usually recommend technological solutions to behavioral problems, internet filtering for example, maybe technology can help teach us to be better people.
Ubiquitous data access
I am in favor of better data access, and improved information for education and decision making (I believe Wikipedia is one of humanity's greatest achievements). We are seeing intriguing ideas about ways to provide internet access in remote areas, such as drones, balloons, or low Earth orbit satellites (which hopefully won't interfere with astronomy). This is particularly useful for underprivileged areas and people groups.
Blockchain
Beyond cryptocurrencies, which may help when government-backed currencies are subject to catastrophic inflation, there are other applications of blockchain ledgers for identity management and verification, supply chain tracking, contracts and asset transfer, and other financial services such as payments and escrow. We may even see blockchain-based voting.
These are some of the technologies and trends that I'm thinking about these days. Of course we will likely see some unexpected dark horse technologies have significant impacts on our lives and society. But as they say, predictions are difficult. What are your thoughts?
Better digital assistants and smart devices
Smart speakers and phone-based digital assistants are useful for some things, but we still find ourselves repeating or rewording commands. There are also quite a few instances of "I can't help with that yet". I'm optimistic that we will get to the point of our digital assistants learning how to work for us, and our smart homes adjusting to our lifestyles and patterns without us having to continually yell at them and reconnect devices to the WiFi. These devices and services should make it less work for us to accomplish tasks.
More automation of uninteresting tasks (including driving)
I'm a big fan of freeing up humans to accomplish uniquely human achievements, or watch more streaming video if they prefer. To help achieve that, I'm looking forward to more automation of tedious or dangerous tasks. While this may lead to more unemployment, or less depending on who you listen to, maybe we can get to the point as a society of eliminating jobs that people dislike. And perhaps decrease our workload without decreasing our standard of living, so that we have more time for volunteering and leisure activities.
Better virtual reality and augmented reality
VR seems to be used primarily for leisure activities such as video games, and perhaps some basic virtual field trips, but there are many other interesting applications. It still feels like early days, especially with AR, but the technological capabilities and developer proficiencies are improving. I'm particularly excited about the potential for psychological treatments using VR and AR.
Advances in psychology and neuroscience
Technologies such as functional magnetic resonance imaging are giving us better insights into how brains work, and it feels like we are just at the beginning of our understanding. We may start to see useful mind-computer interfaces, and at some point even the ability to create backups...
Improved information literacy
As we understand more about how our minds work, perhaps we can devote more resources to helping people distinguish reality from fiction. There seems to be a growing recognition that disinformation and "face news" are issues, but no consensus about what is fake and how to deal with this issue. I'm optimistic, however, that it is a solvable problem. It may require a re-think of how we remunerate individuals and organizations, and our advertising-based economy.
eSports
We've seen a growing phenomenon of watching other people play video games, and "cyberathletes" making the kind of money that professional athletes can make. Not sure if this will supplant traditional sports, or if we would want them to, but the risk of concussions is lower. There is automated comment moderation in some streams, but the communities tend to be somewhat toxic, especially for female gamers. Although I don't usually recommend technological solutions to behavioral problems, internet filtering for example, maybe technology can help teach us to be better people.
Ubiquitous data access
I am in favor of better data access, and improved information for education and decision making (I believe Wikipedia is one of humanity's greatest achievements). We are seeing intriguing ideas about ways to provide internet access in remote areas, such as drones, balloons, or low Earth orbit satellites (which hopefully won't interfere with astronomy). This is particularly useful for underprivileged areas and people groups.
Blockchain
Beyond cryptocurrencies, which may help when government-backed currencies are subject to catastrophic inflation, there are other applications of blockchain ledgers for identity management and verification, supply chain tracking, contracts and asset transfer, and other financial services such as payments and escrow. We may even see blockchain-based voting.
These are some of the technologies and trends that I'm thinking about these days. Of course we will likely see some unexpected dark horse technologies have significant impacts on our lives and society. But as they say, predictions are difficult. What are your thoughts?
Monday, November 18, 2019
Automated Scheduling of Facebook Live Video via Google Apps Script
Currently Facebook allows users to schedule a live video broadcast only a week in advance. If you broadcast weekly this can get tedious, so with a little bit of coding we can automate the process.
This will require a Facebook account (with admin rights to a page if you broadcast through that page) as well as a Google account. We are going to create a Google Spreadsheet with an associated Google Apps Script that will run every week to schedule your live video.
This will require a Facebook account (with admin rights to a page if you broadcast through that page) as well as a Google account. We are going to create a Google Spreadsheet with an associated Google Apps Script that will run every week to schedule your live video.
- Create a Google Spreadsheet
- Under the Tools menu, click Script editor
- Into that new script paste the contents of this file
- Create a new Facebook App under the My Apps menu on developers.facebook.com
- Under Settings click on Basic and copy your App ID and App Secret (click Show) into the appropriate places back in your Google Script editor
- Setup gsuitedevs' OAuth2 library for Google Apps Script by following the four steps there
- Run the logRedirectUri function in your Google Script, then under the View menu click Logs, copy the Redirect URL (starting with http)
- On the Facebook developer page, set up Facebook Login for your app
- Under the Facebook Login Settings, paste in the OAuth Redirect URI that you copied earlier
- In your Google Script, run the scheduleLivestream function, this won't actually schedule anything yet but instead will log a URL for you to paste into your browser to authorize the script (under the View menu click Logs, or look at the original spreadsheet)
- Using the Facebook Graph API Explorer, add the following permissions to your app: pages_show_list, manage_pages, publish_pages, publish_video
- Run the Google Script function scheduleLivestream again and watch for any errors, if it successfully schedules a broadcast then you'll see a new line in your spreadsheet
- Add triggers to your Google Script: under the Edit menu click Current project's triggers
- Click Add Trigger and set the options:
- scheduleLivestream
- Head
- Time-driven
- Week timer
- Every Wednesday (or whatever you prefer)
- 1pm to 2pm (or whatever)
- then click Save
- Click Add Trigger and set the options:
- onOpen
- Head
- From spreadsheet
- On open
- then click Save
- In your Google Script, change the following lines:
- var status = 'SCHEDULED_UNPUBLISHED'; to var status = 'SCHEDULED_LIVE';
- var day = dateNow.getDate() + ((7 - dateNow.getDay()) % 7); to var day = dateNow.getDate() + ((9 - dateNow.getDay()) % 7); // for Tuesday
- var newDate = new Date(year, month, day, 10, 25); to the time you'd like to start the broadcast
- you can also change the var title line to whatever you'd like
- Run the scheduleLivestream function again to test, and to make sure everything has been authorized
- Check at some point after the Trigger time you set to make sure that the broadcast has been scheduled
Thursday, November 7, 2019
The Benefits of Small Conferences
In the last few weeks I have been to quite a few conferences around Alberta, and have been reflecting on the ideal conference size. A conference should involve information sharing and discussions or networking, the latter may be less possible at larger conferences.
Events like the annual ISTE Conference with about 20,000 attendees are impressive, and you may meet someone like Mayim Bialik, but it feels like the odds of meeting someone with whom you can have sustained and ongoing discussions are decreased. There is an ocean of information available, but I'd argue that through the internet we already have that available.
So perhaps the ideal conference size is between 150 and 500 participants. Large enough for a diversity of perspectives, but small enough to be able to meaningfully share those perspectives and get to know people. We tend to value growth as a measure of success, but perhaps we need other metrics.
Thoughts?
Events like the annual ISTE Conference with about 20,000 attendees are impressive, and you may meet someone like Mayim Bialik, but it feels like the odds of meeting someone with whom you can have sustained and ongoing discussions are decreased. There is an ocean of information available, but I'd argue that through the internet we already have that available.
So perhaps the ideal conference size is between 150 and 500 participants. Large enough for a diversity of perspectives, but small enough to be able to meaningfully share those perspectives and get to know people. We tend to value growth as a measure of success, but perhaps we need other metrics.
Thoughts?
Monday, November 4, 2019
Colab Git Puller Bookmarklet
Similar to the Callysto nbgitpuller bookmarklet, here's the code for a bookmarklet to open a Jupyter notebook from GitHub in Google Colab. Drag the following link to your bookmark bar/menu:
ColabGitPuller
Click that bookmarklet when you are viewing a Jupyter notebook on GitHub, it will pop up a window with a link. Copy that link and you can use it to open the notebook in Colab.
If you prefer a bookmarklet that just opens the notebook in Colab (rather than giving you a link to paste somewhere) then use this one:
ColabGitOpener
As always, comment if you encounter any issues or have any suggestions.
ColabGitPuller
Click that bookmarklet when you are viewing a Jupyter notebook on GitHub, it will pop up a window with a link. Copy that link and you can use it to open the notebook in Colab.
If you prefer a bookmarklet that just opens the notebook in Colab (rather than giving you a link to paste somewhere) then use this one:
ColabGitOpener
As always, comment if you encounter any issues or have any suggestions.
Subscribe to:
Posts (Atom)

