2020年4月30日木曜日

オンライン講義はけっこうたいへん

オンライン講義が軌道に乗ってきて,ようやく,リズムが出てきたというところ.それにしても,対面でやるのにいかに慣れていたかを痛感させられる.

全部オンラインミーティングシステムで置き換えてしまえば楽なのになあとも感じている.もちろん,狭い画面で情報量が少ないとか,顔出しNGの学生ばかりだと空に向かって話しかけているようだとか,単純に置き換えてしまえばよいというわけではないことは重々承知しているが……

学生の通信環境の負担とか,いろいろな理由で,資料提示型,動画配信型が望ましいというお達しが出ている.それはいいのだが,提示しっぱなしではイケナイという.そりゃそうだよなあ.仕事放棄だ.で,それに対して学生からフィードバックを求めてそれに対してケアをせよという.でも,言うは易く行うは難しだ.

少人数講義だったらそれでもなんとか対応できるが,100人を超えると,学生からの質問や意見に全部答えるのって,しんどいよ?現場わかってるのかなあ.ま,粛々とやるけどね.

いやあまりに腹立たしいのでリンクしませんが,「学生は決められた時間にPCの前にいるのに、録画パワポが流れるだけで質問すらできないオンライン授業。」とかいう失礼なタイトルで,一部の(と信じたいところ)フトドキな教員を取り上げて,オンライン講義全てをこき下ろす,酷い記事を見つけてしまったものでw

いろいろ努力されている全ての先生方に捧ぐ

2020年4月29日水曜日

簡易SNSを作ってみよう(WSLの導入と準備:後編)

開発環境 (データベース,その他)の用意

データベースはPostgreSQLを使う.以下の手順で簡単に導入できる.なお,ここでcreateuserで指定するユーザ名は,WSL導入時に決めたユーザ名とすること.
$ sudo apt install postgresql
$ sudo service postgresql start
sudo -u postgres createuser -s ユーザ名
最近のRailsは,環境の構築にyarnというツールを要求する.したがって,そのツールも導入しておく必要がある.素のapt-getだと問題なく使えるyarnをインストールすることができず,Railsの導入時にエラーになってしまうため,次の手順で最新のyarnを入れておかねばならない.
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn
無事に最新のyarnがインストールできたかどうか,次の手順で確認しておこう.
$ yarn --version

Railsの用意

ここまでできればあとは,通常のRails構築環境でRailsのテンプレートを導入できるはずである.ここではTESTというプロジェクトを作ってみることにする.
$ mkdir TEST
$ cd TEST
$ rbenv local 2.6.3
$ nodenv local 14.0.0
$ bundle init
$ vi Gemfile # gem Railsのコメントアウトを外す
$ bundle install --path vendor/bundle
bundle exec rails new . -d postgresql -f

動作テスト

以下の手順を経て,データベースを構築,サーバを起動する.
$ bin/rails db:create
$ bin/rails s
サーバが起動できたら,ブラウザからlocalhost:3000にアクセスしてみよう.いつものアレが表示されたらOKである.

簡易SNSを作ってみよう(WSLの導入と準備:中編)

開発環境(開発基盤・ライブラリ) の用意

Cコンパイラ(gcc)や,Ruby,Node.js などを用意する.せっかくなので,anyenvからrbenvとnodenvを入れてみることにしよう.まずは,素のUbuntu 18.04LTSにコンパイラが入っていないので,コード開発環境を入れる.apt-getをアップデートしておかないと途中でコケるようなので,最初にアップデートしておこう.
$ sudo apt-get update
$ sudo apt install build-essential
Rubyのコンパイルやgemのnative extensionsのコンパイルなどで必要になるライブラリをあらかじめ入れておく.
$ sudo apt install -y libssl-dev libreadline-dev zlib1g-dev libpq-dev
libXXX-devという開発用パッケージが必要になる.これらにはライブラリのヘッダなどが入っているので,これらがないと,コンパイル時にコンパイラが参照できないというエラーになる.

開発環境 (言語環境)の用意

続いて,anyenvを入れる.
$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ vi ~/.bashrc
vi(エディタ)で追加する部分を示しておこう..bashrcには以下を追加する.
if [ -d $HOME/.anyenv ]
then
    export PATH="$HOME/.anyenv/bin:$PATH"
    eval "$(anyenv init -)"
fi
シェルを再起動すると,anyenvの初期化せよ,というようなメッセージが出てくるので,次の操作を行う.
$ anyenv install --init
anyenvがキチンと動くかどうかは次で確認できる.
$ anyenv --version
rbenv(Rubyのバージョン管理環境)とnodenv(Node.jsのバージョン管理環境)を入れておこう.nodenvを最初に使用したときにエラーが出るので,対処療法ではあるが環境下にdefault-packagesというディレクトリを掘っておく.
$ anyenv install rbenv
$ rbenv install 2.6.3
anyenv install nodenv
touch $(nodenv root)/default-packages
nodenv install 14.0.0
RubyとNode.jsのバージョンは,それぞれ2.6.3と14.0.0を入れた.最新版を入れてもよい.

(後編に続く)

簡易SNSを作ってみよう(WSLの導入と準備:前編)

比較的さらに近いWindows 10があったので,WSL(Windows Subsystem for Linux)を入れてそこでRailsを動かす環境構築に挑戦してみた.手順を以下に示す.

WSLの導入

まずWSLの導入から始めよう.スタートメニューから「Windowsの設定」を開く.右下にある「アプリ」をクリックすると,アプリの設定画面に移る.


アプリの設定画面は次のようなものである.


右側をずっと下にスクロールしていくと,関連設定として「プログラムと機能」というリンクがある.ここをクリックする.


「プログラムと機能」ダイアログが開く.ここに「Windowsの機能の有効化または無効化」というリンクがあることに注目.ここをクリックしてダイアログを開く.


いよいよ核心に迫ってきた.

「Windowsの機能の有効化または無効化」の画面を下にスクロールさせていくと,Windows Subsystem for Linuxの項目がある.ここはふつうチェックされていないはずなので,ここの項目にチェックを入れ,OKボタンを押して閉じよう.これでWSLを導入する準備ができた(まだ導入は終わっていない).


ディストリビューションの用意

準備ができたので,次はディストリビューションをインストールする.Microsoft Storeを開き,検索窓に「WSL」というキーワードを入れる.すると,無料のディストリビューションから有料のものまで,いろいろな選択肢が出てくる.ここでは,Ubuntuを選んだ(図では素のUbuntuになっているが,実際にはUbuntu 18.04LTSを入れている).


Ubuntuを選択すると,次の図のようになる.


これでOK.スタートメニューからLinuxのシェルを起動できるようになる.

初回起動時の注意

初回起動時だけ,注意が必要.なぜかというと,ユーザ名(アカウント名)とパスワードが求められるからである.これは好きなユーザ名とパスワードを入れればよい.Windowsのアカウントと同じ組合せにしておくのが無難であろう.

(中編に続く)

2020年4月27日月曜日

簡易SNSを作ってみよう(5)

ユーザー名での認証に切り替える(後半)

ビューの修正
ビューを修正する(下記以外に修正すべき箇所について要調査).
【手順】
vi app/views/devise/sessions/new.html.erb
vi app/views/devise/registrations/new.html.erb
vi app/views/devise/registrations/edit.html.erb
(それぞれ :email を :username に,:email_field を :text_field に修正)
<div class="field">
  <%= f.label :email %><br />
  <%= f.email_field :email, autofocus: true, autocomplete: "email" %>
</div>

<div class="field">
  <%= f.label :username %><br />
  <%= f.text_field :username, autofocus: true, 
                              autocomplete: "username" %>
</div>

vi app/views/devise/registrations/new.html.erb
vi app/views/devise/registrations/edit.html.erb
(それぞれ :username の箇所の下に,以下を追記)
<div class="field">
  <%= f.label :fullname %><br />
  <%= f.text_field :fullname, autocomplete: "fullname" %>
</div>
モデルの修正
「Email can’t be blank」のエラーが出てしまうので,モデルを修正する(抜本的な対処方法については要調査).
【手順】
vi app/models/user.rb
(以下を修正)
class User < ApplicationRecord
  # … 
  devise :database_authenticatable, :registerable,
         :rememberable, :validatable

  def email_required?
    false
  end
end

データベースの更新
email欄は使っていないが,同じデフォルト値で登録しようとすると重複エラーが発生してしまうので,マイグレーションファイルの「ユニーク制約」を外す処理を行い,マイグレーションを実施する.
【手順】
bin/rails g migration remove_index_email_from_users
vi db/migrate/XXXXXXXXXXXXXX_remove_index_email_from_users.rb
(以下を追加)
class RemoveIndexEmailFromUsers < ActiveRecord::Migration[6.0]
  def change
    remove_index :users, :email
  end
end

bin/rails db:migrate
ナビゲーションの追加
ビューにナビゲーションを追加する.
【手順】
vi app/views/layouts/application.html.erb
(以下を修正)
…(略)…
<body>
  <header>
    <nav>
      <% if user_signed_in? %>
        <%= link_to 'logout', 
destroy_user_session_path, method: :delete %>
      <% else %>
        <%= link_to 'sign up', new_user_registration_path  %>
        <%= link_to 'login', new_user_session_path  %>
      <% end %>
    </nav>
  </header>

確認
サーバを起動し,ユーザー登録を試みる.複数のユーザーを登録できることを確認し,Railsコンソールで User.all を表示させることでデータベースに正しく登録されていることを確認する.

簡易SNSを作ってみよう(4)

ユーザー名での認証に切り替える(前半)

ユーザー名などを追加して切り替えを行う.
カラムの追加
ユーザーモデルにユーザ名などを追加する(後々のためにfullnameとroleも追加していることに注意).roleに関しては,マイグレーションファイルを修正してデフォルト値を追加しておくことにする
【手順】
bin/rails g migration add_username_to_users username:string:uniq
bin/rails g migration add_fullname_to_users fullname:string
bin/rails g migration add_role_to_users role:string 
vi db/migrate/XXXXXXXXXXXXXX_add_role_to_users.rb
(以下を追加)
class AddRoleToUsers < ActiveRecord::Migration[6.0]
  def change
    add_column :users, :role, :string, default: 'student'
  end
end

認証手順の修正
認証手順を修正する.
【手順】
vi config/initializers/devise.rb
(以下を修正.:email → :username にする)
config.authentication_keys = [:username# コメントアウトを外す
…(中略)…
# Configure which authentication keys …
config.case_insensitive_keys = [:username]
…(中略)…
# Configure which authentication keys …
config.strip_whitespace_keys = [:username]
ルーティングの追加
devise 用のコントローラを作成,ルーティングを指定する.
【手順】
bin/rails g devise:controllers users
vi config/routes.rb
(以下のように修正)
Rails.application.routes.draw do
  #get 'home#index' # 削除してよい
  devise_for :users, controllers: {
        sessions:      'users/sessions',
        passwords:     'users/passwords',
        registrations: 'users/registrations'
  }
  root to: 'home#index'
end
コントローラの修正
コントローラを修正する.
ログイン時にはusername, アカウント編集時にはusernameとfullnameをサニタイジング対象とする(ここに指定しないと,DB登録されない模様).
【手順】
vi app/controllers/users/sessions_controller.rb
(以下を修正,コメントアウトを外す)
class Users::SessionsController < Devise::SessionsController
    before_action :configure_sign_in_params, only: [:create]

    protected
    def configure_sign_in_params
        devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
    end
end

vi app/controllers/users/registrations_controller.rb
(以下を修正,before_actionは,コメントアウトを外す)
class Users::RegistrationsController 
< Devise::RegistrationsController
    before_action :configure_sign_up_params, only: [:create]
    before_action :configure_account_update_params, 
only: [:update]

    protected
    def configure_sign_up_params
        devise_parameter_sanitizer.permit
(:sign_up, keys: [:username, :fullname])
    end

    def configure_account_update_params
        devise_parameter_sanitizer.permit
(:account_update, keys: [:username, :fullname])
    end
end


簡易SNSを作ってみよう(3)

ユーザーモデルとコントローラの設定
devise を設定し,ユーザーモデルとコントローラを作成する.
ユーザーモデルの作成
ユーザーモデルを作成する.メールを使いたくないので,:recoverableの機能は使わない(該当部分を削除する).
【手順】
bin/rails g devise User
vi app/models/user.rb
(以下を修正)
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
end

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :rememberable, :validatable
end

bin/rails db:create
bin/rails db:migrate
コントローラの作成
コントローラを作成する.
【手順】
bin/rails g controller home index

ログインしていないとログイン画面にリダイレクトするように動作を定義する.
【手順】
vi app/controllers/home_controller.rb
(以下を追記)
class HomeController < ApplicationController
  before_action :authenticate_user!, only: :index

  def index
  end
end
確認
サーバを起動し,ログイン画面が出ることを確認する.
【手順】
bin/rails s

ブラウザで http://localhost:3000 へアクセスし,ログイン画面が出ることを確かめる. 

国際化への準備
devise のメッセージを国際化できるようにしておく.また,タイムゾーンをTokyoにしておく.
【手順】
vi config/application.rb
(以下を追記)
…(中略)…
  class Application < Rails::Application
   …(中略)…

    I18n.available_locales = %i(ja en)
    I18n.enforce_available_locales = true
    I18n.default_locale = :en
    config.time_zone = 'Asia/Tokyo'
  end

…(中略)…

簡易SNSを作ってみよう(2)

環境設定とインストール
作業環境の整備とdeviseのインストールおよび設定を行う.

環境設定
以下の環境をlocalに用意した.
なお,本稿での説明はこの環境での実施を前提とする.
OS:macOS Catalina 10.15.3
DB: postgres (PostgreSQL) 12.2
Ruby:2.6.3
Rails:6.0.1
この環境を準備する.なお,rbenvとpostgresはbrew等を利用してインストールされているものとする.
【手順】
rbenv local 2.6.3
bundle init
vi Gemfile
(gem “rails”のコメントアウトを外す)
bundle install --path vendor/bundle
bundle exec rails new . -d postgresql -f

deviseのインストールと設定
devise および devise-i18n をインストールする.
【手順】
vi Gemfile
(以下を追記)
gem 'devise'
gem 'devise-i18n'

bundle install
bin/rails g devise:install
vi config/environments/development.rb
(以下を追記)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

vi config/routes.rb
(以下を追記)
root to: 'home#index'

vi app/views/layouts/application.html.erb
(以下を追記)
…(中略)…
<body>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%= yield %>
</body>
…(中略)…

bin/rails g devise:i18n:views

簡易SNSを作ってみよう(1)

Ruby on Railsを使って,簡易版のSNSを作ってみることにする.やりたいことは,下記のとおり.

  • ユーザ登録できる(ユーザ情報が管理される)
  • それぞれがマイページを持って投稿できる
  • 学校で使うことを想定,先生と生徒のロールが区別される
  • 先生は生徒の新たなカキコミを検知することができる

とりあえず,こんなところかな.完成形のイメージを下に示す.

2020年4月24日金曜日

他人の講義を聴講して考えた

今日,明日と「オープンソース・カンファレンス2020オンライン」(OSC 2020 Online/Spring)というオンラインイベントが開催されており,今朝から仕事の合間にちらほらと聴講している.なにしろイベント会場に行かなくても参加できるという気安さもあり,また,全国から(全世界から?)参加できるということもあってそれなりの人数が参加しているようだ.

そのセミナーを聴講していて,気付いた.これって,オンライン講義を聴いてる学生と同じような立場だよね,と.

ということで,オンライン講義の受講者になったつもりでセミナーを聴いていたら,いろいろと気付きがあった.オンライン講義を配信しようとしている,あるいは,配信しはじめた先生方は,ぜひ,このようなオンラインイベントに参加して,受講学生の立場になってオンライン講義を捉えてみるとよいのではないかと,お勧めする次第.

気付いたこと

Twitterなどをパトロールしていると,オンライン講義に対する学生の温度差は様々で,「画面開きっぱなしにしてどう森(どうぶつの森)やってた」とか,フトドキなツイートもよく見る.一方で,好意的に捉えている学生も居ないこともなく,とりあえず,教員側も学生側も新しい環境で混乱しているんだなということは分かる.

まあ,それはそれとして,学生の立場(になったつもり)でオンラインのレクチャーを聴いてみて,下記のように,たくさんの気付きがあった.
  • 簡単に内職できちゃう(講師から見られてる感がない)
  • 脱出するのに抵抗感がない(ポチるだけ!)
  • 画面の文字が小さいと全く読めない(老眼だから?学生は大丈夫?)
  • たんたんと喋られると,やっぱり「飽きる」(ごめんなさい)
  • 一人暮らしではない場合,家族の目が気になる(気楽に発言できないこともある)

じゃあどうすればいい?

以下,対処方法を考えてみたい.

講義画面をずっと見ているのは苦痛で,内職できちゃうのは,まあ容認すべきかな.聴講者側のビデオをオンにして顔を晒していても,なんとなく別のことをやってしまうのに全く抵抗がない(これは人によるのかもしれないが).並行作業できるのを逆手にとって,ググって調べてみせるとか,簡単な作業を並行してさせるとか,オンラインならではの使い方を考えたほうが前向きかもしれない.

簡単に脱出できる!……まあ,「ミーティングから退出」をクリックしたり,アプリを終了させるだけですからね.指先ひとつで脱出可能.教員の目を盗んで教室からこっそり抜け出すのに必要な度胸と比べたら,もう,簡単すぎ.これも,学生の学習意欲に期待するしかないのかな.画面の向こうでどうぶつの森やってても分からないし.教室で居眠りしている学生と同じかと割り切るしかないのだろうか.まあ,そういうことがないような魅力的な講義を提供すべし,ということか.

画面の文字は大きく.これは簡単です.資料を提示するときは,画面の文字を大きくすることを,普通のプレゼン以上に心がければよい.オンライン講義の画面,全画面にしても,小さな文字は意外と見えない.ましてやスマホで視聴するがくせいをや(スマホなんかで講義画像を視聴すんなよ!と心から思うけれど,そうもいかないらしい)

たんたんと喋るタイプのプレゼンテーションは,飽きた.ごめんなさい.やっぱりそのスタイルはダメだということを身にしみて感じた.いろいろ工夫が必要だってことを身を持って感じた.疑問を感じている皆さんは,ぜひ,体験してみるべき.私が悪かった…… 皆さん,工夫しましょう.

家族の目.これは意外な盲点だった.基本的に家族がいる部屋とは違う部屋で視聴,参加していたのだけれど,壁の向こうから家族の声がする.ということはこちらの声も筒抜けっていうこと.それを意識してしまったら,不用意な発言はできないと思ってしまった.まあ,するけど.これは,図々しいオッサンじゃない学生には,もっと抵抗感ありそう.チャットで意見するとか,他の手段を提供してあげることが重要なのかも.

オンライン講義を考えている先生方は,自分自身でオンライン講義を受講してみるといろいろと気付きがあるかもしれません.



2020年4月23日木曜日

ラジオ番組方式のオンライン講義

いよいよ本格的なオンライン講義が私のところでも始まった.「ひとコマ105分(100分,90分)ずっと喋りっぱなしは双方にとってよろしくない」などという先達の知見を参考にして,次のような工夫をしてみた.

これを機会に反転授業に挑戦

せっかくなので,これを機会に「反転授業」方式に挑戦してみることにした.といっても事前に動画を用意するのはなかなかしんどいので,動画を用いた講義は1つだけにして,今日の講義では「1週間前に,スライド資料を読み込ませる」とした.

案の定,「スライド資料だと分からない.手抜きだ」という意見もあったものの,まあ,非常時なので許してほしいところ.もちろんスライド資料は教科書をベースにしているので,本来は教科書をじっくり読んでほしいのだが,まあ,スライドだけでも構わない.学生には「わからないところ,深く知りたいところのメモを課題として提出せよ」と,事前課題を出した.

講義の組み立てと,やってみてどうだったか

課題提出は講義の2日前までにして,締切から講義開始までの間に提出された質問をまとめておく.そして講義の時間配分は次のように予定した.
  1. 配布した資料の説明(50分)
  2. 休憩(5分)
  3. 質問やコメントに答えていく(50分)
しかし,実際には資料説明に1時間以上使ってしまい,最後の質問コメント対応の時間がだいぶ圧縮されてしまった.それは今回の反省点.学生にはお詫びとしてLMSに個別に返答を書き込むこととした.本当は質疑を皆で共有したいんだけどなー.

後半,話しているこちらだけでなく,視聴している学生もどうしても疲れてしまうことが想定されるため,質問やコメントに答えていく方式にしたのは「ラジオ番組のように気軽に聴いてもらえれば」という意図を込めている.後半疲れてきても,これならこちらも十分に耐えられる.

実際やってみたら,質問した本人から被せるような質問の割り込みが入ってきたりして,予想外にインタラクティブにできたので,それなりに効果があるやり方のような手応えを得た.しばらくこのスタイルで続けてみようかな.


2020年4月16日木曜日

オンライン講義のちょっとした工夫(サクラ編)



ひとりふたりでも顔出しOKの学生がいるとやりやすい,というお話です.

ネットワークの帯域への配慮とか,学生のプライバシ確保だとか,いろいろな理由で「顔出しNG」が推奨されているオンライン講義だと,受講者の名前しか表示されないので,まるで名簿に向かって語りかけているような味気なさがある.


そもそも「講義や講演,プレゼンテーションは,受講者,オーディエンスとのインタラクションやでぇ?」と学生にも教えているので(図は1年生向け基礎演習の講義資料のひとコマ),一方的に喋るスタイルだといつもと勝手が違うのは当たり前.一方的なお喋りには放送局のアナウンサーのような,また別のスキルが求められるわけですね.

放送大学でもアシスタントがちゃんと付いてるもんねえ.以前,schooに出演(出講?)したときも,アシスタントがいらっしゃったのでとてもやりやすかった.放送型の情報発信だと,あのアシスタントってすごく重要.

というわけで,それにヒントを得て,幸にしてこの科目にはTAが付いてくれていたので,TAにアシスタント役をお願いしてみた.といっても,お願いしたのは「顔出しして,テキトーに相槌うってくれる?」というだけのこと.「冗談とばしたらウソでも微笑んでね」……というのは,これはちょっと余計なお願い.

結論としては,これが大正解だった,と.

オンライン講義だと,TAに話しかけているだけで皆に話しかけていることになるから,通常のプレゼンテーションのように視線のローテーションとか不要だし,TAの表情でネットの向こう側の反応がわかるから,喋っている内容がきちんと伝わっていることも確認しながら進められる.まさにTeaching Assistant(それだけでアシスタント……TAの役割を十分に果たしてると思う,というのは言い過ぎ?).

TAがいないときは,ネット接続環境やプライバシ等に問題ない学生から志願者を募るだけでも違うと思うので,お試しください.

2020年4月12日日曜日

オンライン講義のよいところ

先日,オンライン講義をやってみて,学生の顔が見えないので慣れるまでやりにくそうという感想を述べた.しかし,ぼやいているだけでは仕方がない.声だけの顔の見えないオンライン講義のよいところはないだろうか.

対面講義より学生の正直な声を聞ける?

初回ということもあって,ひとりひとり,順番に「意気込み」を聞いてみた.ネットの向こう側にいる安心感からか,あるいは「大勢の前で話す緊張感」を感じないせいか,私に語りかけるように素直に意見を表明してくれた学生が多かったような印象を得た.

こちらがわの不慣れな点もあり,順番がうまくいかないこともあったが,何人かが自発的に,チャットで,こうしたらどうですか?という提案をしてくれた.キーボード,タイピングへの習熟度の差が多少は影響するだろうが,挙手して提案よりは,学生側も発言への抵抗感が低いのかもしれない.

工夫すればインタラクティブにできそう

別の先生から,対面の授業より質問が増えた,という報告もあった.対面の講義において,「インタラクティブにやりたいのでいつでも遮って質問してくれて構わない」といつも初回に説明しているのだが,なかなかそのようにインタラクティブな授業になることがない(社会人相手の講演と学生相手の講義の大きな違い!).学生に聞いてみると,「質問で遮ることで講義を止めてしまうのが申し訳ない」という気持ちと,「こんな簡単な質問をするのは恥ずかしい」という思いがあるので,躊躇するようだ.まあ,後者については学生の大きな勘違いであることも多く,意外と芯を突いた質問や疑問でハッとさせられることもある.

オンライン講義だと,この点で改善を見込めるのではないかという期待がある.授業中の発言に関して,チャットで(こっそり)質問する,という行為が,学生側の抵抗感を大きく下げているように見受けられる.また,教室のなかで悪目立ちすることがない,という安心感も,学生側からの発言機会を増やす原動力となりそうではある.

教員側の負担は多いが…… 工夫すればなんとかなるか

ただし,先日やってみて分かったのは,問題は「チャット画面を監視しているわけにもいかない」という点で,チャットで質問があってもそのタイミングがわかりにくいということだった(※ Zoomの場合.他のツールだとまた違うでしょうね).

幸にしてTAを付けてもらえる講義のため,TAには,チャットの監視と,質問があったときの「発言による割り込み」などをお願いするとよいかもしれない.いずれにしても,対面の講義と違っていろいろな制約が多いので,オンライン講義ならではのよいところを少しでも探していければというところである.


2020年4月9日木曜日

Zoomオンライン講義をやってみて

正式な講義は2週間あとからということだが,なにしろこちらも初めての体験なので,テストも兼ねてガイダンスを実施してみた.参加学生は70名程度.構成は,次のようなものとした.
  1. 自己紹介(ちゃんと音声が聞こえているかどうか「挙手」機能を用いて確認)
  2. 資料を画面共有で写しながら,簡単な説明
  3. 参加者ひとりひとりによるショートスピーチ(意気込みなど)
  4. 補足事項を連絡して終了
動画は,こちら(教員側)はON,学生側はほぼ全員OFF.音声については「基本は全員ミュート.ただしミュート解除はOK」という条件で始め,全員に発言を求める際には,こちらから順番にミュート解除して呼びかけることで実施した.冒頭の,音声が聞こえているかどうかについてはほぼ全員が「挙手」してくれたので問題なし.ただし,反応が得られないので壁に向かって語りかけているような虚しさがあった.こればかりは慣れるしかないか?

全員に発言させるときに,「参加者リスト」を見ながら順番に発言を促していったのだが,以下のような問題点が露見した.
  • 参加者リストが動的に変化してしまうので,上から順番に,というやり方で追いきれない.4人ほど,漏れが出てしまった.これは,1. まず全員に「挙手」でマークをつけてもらい,2. 発言したら手を下ろす(こちらから操作できる)という方法にすべきであった
  • こちらからミュート解除したものの,発言が出ず飛んでしまった学生が2名いた.席を外していたわけではなく,学生側のマイク環境の不手際であったとの説明があった
初回のテストにしては,思ったより円滑にできた.後者のトラブルが少なかったのは,既に春学期が開始された週の半ばなので,他の授業等の経験により学生も慣れてきていたということはあるかもしれない.
次回はバーチャル背景を試してみようかな?

2020年4月7日火曜日

WacomのタブレットをMacへ導入する際のトラブル回避法

自宅からオンライン講義をしなくてはならなそうな状況になってきて,研究室のホワイトボードが使えないのでWacomのタブレットを導入してみた.購入した製品とPC環境は以下のとおり.
  • Wacom Intuos M BT(製品番号:CTL-6100WL)
  • macOS Catalina, 10.15.3
2020年4月7日時点で,最新版のドライバだとハマるので要注意!


図1 導入ガイド

初期導入

買ってきた箱をいそいそと自宅で開梱し,USB接続(残念ながらUSB-Aなのでアダプタ経由で接続)して試してみるも,動かない.説明書をみるとドライバをダウンロードしてインストールせよとのこと.Wacomのドライバダウンロードページにアクセスし,導入ガイド(図1)の手順に従って最新版のドライバとソフトウェア一式をインストールしてみた.

…… 動かない T_T マウスは動くものの,クリックするたびにアラートが出て,使えない(涙)

「システム環境設定」で,セキュリティ設定を弄っていろいろ許可しないといけないらしいということが判明したものの,どうしても「入力監視」(ガイドでは「入力モニター」)の項目に必要事項を追記できない.

図2 ワコムタブレットユーティリティ

トラブルシューティング

いろいろググって試してみるも,うまくいかず,最後の頼みと「少し古いバージョンのドライバなら動く」との情報を信じて,まずはドライバをアンインストール.

ドライバのアンインストールは,既にイントール済みの「ワコムタブレットユーティリティ」を使えば可能(図2).図3に示す画面から「アンインストール」をクリックすればよい.アンインストールできたら,ドライバのダウンロードサイトから,古いドライバをダウンロード,インストールする.最新版は6.3.38-3というものだが,6.3.37というバージョンのドライバをダウンロードしなおして,インストールした.インストール手順は最新版のドライバインストール手順と変わらない.

図3 ドライバのアンインストール

結果

無事,動きました\(^o^)/ めでたしめでたし.

2020年4月6日月曜日

オンライン講義開始で何が起こったか

忙しい人のために結論を先に述べておくと,この記事は「大学のLMSに頼りきるのではなく,プランBをちゃんと用意しておこう」という話.以下,顛末を詳しく述べる.

図1 manabaのトレンド
2020年4月6日,いくつかの大学が2020年度の春学期を開始した.ご存知のとおりこの春は新型コロナウイルスがパンデミックの状態となっており,大学はこぞってオンライン講義に切り替えることとなった.各大学が右往左往しているのはここにあらためて記すまでもないくらい.

ところで,我々はTwitterのトレンドを解析するツールであるTWtrendsというシステムを運用しており,Twitterのトレンドをウォッチするのが日課となっている.4月6日,いつものようにトレンドのリストを覗いてみると,「manaba」というキーワードが目を惹いた.「manabaがどうした?」とその状況を調べてみると,図1のようなグラフになっていた.

TWtrendsの詳細については参考文献(Iio 2019)を参照されたい.ざっと説明すると,この図は「manaba」というキーワードに関するツイートを分析した結果を表している.大きな「manaba」は最も出現頻度が高かった言葉であり,それに関連する(同じツイートに含まれていた)単語が線で結ばれている.

「manaba」がトレンドに上がっていた理由は,立命館大学で利用しているmanaba+R(立命館大学ではこう呼んでいるとのこと)が朝の講義開始とともに学生からアクセス集中し,使えなくなったかららしい.それで学生がいっせいに悲鳴をツイートした結果,トレンドに上がることとなったという顛末のようだ.

この図から推測できるのは「『manaba』が『タイムアウト』しちゃって『開』けない.『不要不急』の講義参加は『諦』めて『マリオカート』でもするか,『二度寝』しよ」という図式である(もちろん,全ての学生がこうである,ということではなく,あくまで推測であることには注意されたい).

関連するツイートをいくつか追っかけてみると,印象に残るものとして「登録した学生が一斉にアクセスしたら落ちるシステムってどうなの?」などというコメントもある.まあ,そうねえ,ごもっとも…….ではあるが,最適化を考えると最大負荷をもっと低く見積もっていたとしてもしょうがないところだろう.平時なら,まあ,それでもしょうがないし,長期的な最適化を考えたら頷ける話だ.

さて,私の勤務する大学でもmanabaを使用しており,講義開始は若干遅らせることにしているとはいえ,いずれ講義を始める日はすぐに来る.先陣を切って例示してくださった立命館大学には感謝しつつ,不測の事態に備えねばなるまい.また,ひとつのシステムに頼り切るのではなく,万が一そのシステムがダウンしたときであっても,なんとかなるような「プランB」をきちんと考えておくことも大切だろう.

プランBとしては,以下のようにいろいろと考えられるが,その際に考慮しなければならないこととして,アクセス性(ユーザビリティ),コンテンツへのアクセスコントロール(セキュリティ),学生のプライバシー確保や著作権の配慮など,様々な観点がある.それぞれ一長一短あるので,注意が必要ではある.

  • 学外のLMSサービスを使う.たとえばGoogle classroomなど
  • 動画を使っている場合はYouTubeなど別のサービスに退避しておく
  • LINEやその他のSNSを利用してコミュニケーションのバックアップを用意する

図2 ある学生のツイート
なお同日,東大でも同様の混乱がみられたとのこと.たしかにTWtrendsをみてみると,東大で使用しているシステムの名称がトレンドに出ている.東大でもシステムにアクセス集中してサーバの反応が悪くなるという状況になっていたそうだ.しかし,それに対してきちんとプランBを用意していた某先生,有能ですね(図2のツイートを参照).

参考文献:
Iio, J., 2019, TWtrends ― A Visualization System on Topic Maps Extracted from Twitter Trends, IADIS International Journal on WWW/Internet, 17:2, 104-118

2020年4月5日日曜日

録画時のちょっとした注意と工夫

図1 見上げる方向からの撮影
最近のノート型パソコンにはカメラが内蔵されているものが多いので,オンライン講義やテレカンなどでそのカメラを使って自撮りすることが多いでしょう.しかし,そのまま使うと「下から見上げる顔」になり,どうしても不細工な顔に映って幻滅してしまいます(図1)

5年ほど前,「下から見上げるアングルで不細工に映っている女性が,カメラの位置を変えると『あら不思議』美人じゃないの!」という動画を撮影してSNSなどに投稿する遊びが,韓国で流行ったのを憶えている皆さんはどのくらい居るでしょう?

ググってみたら,当時の記事として「【やってみて】カメラアングル 下→上の変貌ぶりがスゴすげえぇ! ドヤ顔で自撮する若き女性たち」というネットの記事が残ってました.この記事の最後のほうで,当時の動画がまとめられています.なかなか興味深い動画です.

このように,人間の顔は下から見上げるよりも真正面,あるいは,若干,上から見下ろす角度のほうが魅力的に見えるようです.したがって,パソコンの画面上に付いているカメラをそのまま使うのは,避けたほうがよいでしょう.

図2 台をうまく使おう
ひとつの工夫は,パソコンそのものを台に載せる方法です.私は図2に示すような台を使ってカメラの位置を高くするようにしています.

このとき,注意しなければならないのは,キーボードやポインティングデバイスが使いづらくなってしまうことです.この状態で本体のキーボードやマウス,タッチパッドなどを使うことはオススメしません.別途,外付けのマウスやキーボードを用意するほうがよいでしょう.

なお,カメラ位置は上からのほうがよいと説明しましたが,あまり上から見下ろす角度にすると,別の問題が発生する場合があるので要注意です.適切な角度を見つけるように工夫してみましょう.

2020年4月4日土曜日

テレカン用サムネ画像素材


テレワーク全盛でZoomやWebexといったテレビ会議システムの利用が急速に普及しています.テレビ会議は参加者の顔が見えることによって,電話会議より臨場感があってよいですね.しかし,
  • ネットワークの帯域が足りない
  • すっぴんの顔をさらしたくない
  • 部屋が散らかってて恥ずかしい
などの理由で動画を切って音声のみで参加している皆さんも多いことでしょう.

しかし,音声のみの場合,つい気が緩んで席を外しがちになってしまう方がいらっしゃいます.その結果,「〇〇さん,聞いてる?」という不毛なやり取りが生じることも……

そのようなことが起こらないようにするためにはやはり顔出しが望ましいのですが,一方で,先の理由により出したくないというのも人情,分かります.ということで,そんな皆さんのために「私を信じて!」サムネ用画像を作りました.
\(^o^)/

ご利用方法

日本語版と英語版のイメージがあるので,どちらかお好みのほうをダウンロードしてください.必要に応じて,人物像のところにご自身のアバターを貼り込んでください(画像処理ソフトを使いましょう).アバターとメッセージの間の空白部分にご自身のお名前を貼り込んでおくのもよいでしょう.
元データはKeynoteで作っています.そちら,ご希望の方は,飯尾までご連絡ください.お譲りいたします.
私を信じて(日本語版)
Trust me(English version)