memorandums

日々のメモです。

GASクリッカー・アプデ

昨年の授業用にGAS(Google App Script)+ Fusion Tableで簡易的なクリッカーアプリを作りました。

memorandums.hatenablog.com

が。

Fusion Tableが今年いっぱいで終了する。。。ということで、書き換えなきゃなぁ。。。と。

gsuiteupdates-ja.googleblog.com

せっかくなのでRailsで作り直そうとも思ったのですが、データの集計とか考えるとGoogle SpreadSheetで扱える利点は大きいので。そのままGASでいきたいな。。。と。

ググるとFirebaseが使えるようですが、それこそGoogle SpreadSheetとの連携部分も作らなければならないのは嫌だな。。。と。

Google SpreadSheetのワークシートをDBとして利用できることは知っていましたが。。。さすがに遅いだろうなとFusion Tableを使ってきました。

とりあえず試しにGoogle SpreadSheetをDB化してみることにしてみました。

すると、なんかそれなりに動いちゃいました。データを挿入するコードは以下のような感じです(★先に書きますが、これは実はダメコードですので気をつけてください)。とりあえずロックはかけるようにしました。FusionTableではその必要はなかったんですけどね。。。

function insert(id, no, ans, timestamp){
  if (isWritable(no)) {
    var lock = LockService.getScriptLock();
    if (lock.tryLock(30000)) {
      var spreadsheet = SpreadsheetApp.openById('★idをいれます★');
      var sheet = spreadsheet.getSheetByName('data');
      var r = sheet.getLastRow() + 1; //空の場合は0が返ってくるので1足している
      var v = [[r, no, ans, timestamp]];
      sheet.getRange(r, 1, 1, 4).setValues(v);
      lock.releaseLock();
    }
    return 1;
  } else {
    return 0; //時間外のため送信不可
  }
}

とりあえず、一通り完成させたあと、複数人で同時に書き込んでも動作するだろうか。。。とテストをしようとしたのですが、これが経験値がなかったので実現方法を探すのに苦労しました。日頃、Web開発している人ならすぐ思いつくのでしょうね。。。

クリッカーのUIは以下のような感じです。学籍番号を入力してもらい、選択肢を選択して送信ボタンを押してもらいます。複数人で同時に送信するテストをするには、とりあえず送信ボタンを押さなければなりません。

f:id:ke_takahashi:20190319173821p:plain

で、この辺はGUIテストのツールがあるだろうと。。。ぐぐってchromeless、cypressを試しました。いずれもダメ。。。スクリプトの書き方をいろいろと試行錯誤しましたがダメ。Chrome拡張を使って操作を記録してスクリプトを生成してみましたがこれもダメ。原因は薄々気づいていたのですが、上記のUIを出力するhtmlをGASで作成しているのですが、このhtmlがユニコード化?されるんですね。。。以下のような感じ。なのでDOMの解析ができず目的の要素にたどり着けない。。。当然といえば当然なんです。

f:id:ke_takahashi:20190319174514p:plain

ユーザに送信ボタンを押させることは無理とわかりました。調べたいのはGASからGoogle SpreadSheetに挿入するスクリプトを同時に実行したときの動作なので、上記のUIを初期表示したときにこのスクリプトを起動するように書き換えました。

そして、とりあえずHTTPリクエストを送ればいいと思い、wgetcurlを使ってgetしてみたのですがダメ。。。この辺の仕組みはよくわかりませんが、Ajax通信するときに成功・失敗の処理をしないと単にGASのスクリプトをキックできない。。。そんな感じのように思います。つまるところ、コマンドラインからのアクセスでは難しく、ブラウザでしっかりアクセスしてあげなければいけない。。。ようでした。

最後の手として、ChromeでGASのページを数十個タブを開いて同時に更新する手を試してみました。複数のタブを同時に更新するには以下のChrome拡張がありました。

chrome.google.com

これで何とかテストできました。実行するとダメ。。。30個タブを開いて同時更新すると20個くらいしかGoogle SpreadSheetには追加されません。

上記のinsert関数の読み出し回数を調べようとしたのですが、GASのログ関数であるLogger.logはHTTPリクエスト1回分の履歴しか保存できないようで回数がわかりません。こう書いても何を言っているのかわからないですよね。。。たぶん。とりあえず私的メモなのでご容赦を。

直接的な原因がわからないまま、とりあえずGoogle SpreadSheetにデータを挿入する方法を変えてみることにしました。Excelマクロではよく使う手だったのですが、最終行を取得してその次の行に新しいデータを追加するようにしていたのですがどうもこれがうまくいかなかったようです。で、appendRowという便利メソッドを使うことで自動的に最終行に追加できるようになりました。

function insert(id, no, ans, timestamp){
  if (isWritable(no)) {
    var lock = LockService.getScriptLock();
    if (lock.tryLock(30000)) {
      var spreadsheet = SpreadsheetApp.openById('★idをいれます★');
      var sheet = spreadsheet.getSheetByName('data');
      sheet.appendRow([id, no, ans, timestamp]);
      lock.releaseLock();
    }
    return 1;
  } else {
    return 0; //時間外のため送信不可
  }
}

受講生はだいたい50名くらいなので、これでもうまくいくと思われます。あとは本番で試すしかないですね。。。

マイナンバーカードとったどー?

確定申告の時期ですね。。。数年前から非常勤の関係でするようになりました。今年度分はもう完了しています。

確定申告書はWebで作成して印刷して税務署に持ち込んできたんですが、マイナンバーカードができてからは、本人確認の書類の1つとしてマイナンバーカードの提示が必要になりました。

私はマイナンバーカードを未取得だったため「通知カード+本人確認書類(例えば保険証)のコピー」を確定申告時に添付してきました。これも面倒だな。。。と。e-taxではマイナンバーで申請することもできるらしいので。。。と。

思い立ってマイナンバーカードの交付申請をしました。パソコンで以下のサイトにアクセスして必要情報を入力しました。これが2月21日でした。

マイナンバーカード交付申請 – マイナンバー総合サイト

で、昨日、交付準備ができたので指定の役所に出向いてくださいというハガキを受け取り、今朝、市役所に行ってきたんです。

朝一番だったので、待っている人はいなくてすぐに対応してもらいました。完了まで20分くらいだったと思います。流れは以下の通りです。

(1)受け取ったハガキを渡します。

(2)本人確認書類(2点?)の提示を求められるので、保険証と運転免許証を渡しました。免許証は担当者がコピーしたようです。

(3)さらにタッチパネル式の端末前に座って、暗証番号の入力を求められます(これがFUJITSU製のようですが反応が悪い。。。)。番号は大きく2種類。ハガキの文面は省略されていたため気づかなかったのですが、以下にはしっかり英大文字と数字を組み合わせて6〜16文字で入れる必要があるようです。

f:id:ke_takahashi:20190315121115p:plain

(4)入力が完了したら、その情報がマイナンバーカードのICチップに書き込まれて、簡単な説明書類を一緒にマイナンバーカードを受け取ることができます。

待っている人がいなかったので、以下、その担当者にいくつか質問してみました。

Q. マイナンバーカードで何ができるのか?

A. 住民票などがコンビニで発行できます。より詳しくはこちら

Q. 英文字数字のパスワードはどこで使うのか?

A. 現状はE-Taxの申請のときに使う程度です。

Q. 引っ越したらどうすればいい?

A. 管轄内の移動であれば、ここにカード持ってきて住所変更の手続きをしてください。管轄外への移動であれば、まず、ここにカードを持ってきて転出の手続きをしたあと、転出先の役所にカードを持っていって登録する必要があります。

Q. 有効期限は?

A. 10回目の誕生日までです。ただし、暗証番号は5回目の誕生日で切れるので、再度、ここに持ってきてもらって設定しなおつ必要があります。

ちなみに、今回、家族全員分のマイナンバーカードの交付申請をしたのですが、原則、本人でないと受け取りができませんと言われました。委任状もわざわざ書いてもらったんですが、委任状が効くのは本当に来れない状況の人(治療などで外出できない⇒診断書など)などのようです。背景としては、役所の人がWeb申請したときの顔写真と出頭した本人の顔を見比べて確認した上でカードを発行する。。。という流れになっているからのようです。

便利というほどのメリットがない状況で、個人情報を保管するため、上記のように転居などでの情報アップデートや、盗難や紛失に気をつけるなどの精神的な負担も伴います。役所が自宅近くにあるためコンビニで発行できるメリットはほとんど感じません。E-Taxだって年に一回ですからね。。。

今の気持ちを正直に書くと「交付しなければよかった」です。関係者の方には申し訳ありませんが。。。

LCDモニターのバックライトでちょっとした実験

先日、参加した学会で面白い作品をみて真似してみようと思いまして、ちょっと実験したメモです。

処分するLCDモニターがたくさんあったのでとりあえず分解しました。

真似しようとしている本題とは違うのですが、バックライト(LEDではなくCCFL)が何かに使えないかな。。。と。いつものもったいない根性です。

とりあえず4つ向かい合わせにおいてみたのが以下です。

f:id:ke_takahashi:20190312133448j:plain

何かを狙ったというよりは、とりあえず組み合わせてみて、見てみようという感じです。

で、とりあえず中に人形を入れてみました。イメージは撮影用ブースです。明るいようだけどあまり明るくない。。。

f:id:ke_takahashi:20190312133501j:plain

動画も撮ってみました。影がない感じになるのかな。。。と思ったら影がありますねぇ〜。

youtu.be

被写体を変えてみました。柔らかめの素材ということで。あんまり変わんないですねぇ。。。というか面白くない。

youtu.be

外向きにしてみたらどうだろう?と思ったのが以下。なんか「灯籠」ですねぇ。。。😁

f:id:ke_takahashi:20190312134926j:plain

周りを歩くとこんな感じです。

youtu.be

なんか貼っつけたらどうだろう?「紙」って感じでダメですねぇ。。。

f:id:ke_takahashi:20190312135859j:plain

以前、日本地図をレーザーカットしたものを置いてみると。。。まぁ、いい感じです。いわゆるサインですねぇ。

f:id:ke_takahashi:20190312140154j:plain

ぐぐると以下を作っている方がいらっしゃいました。いい感じですね。でも、研究室のサインを掲示するのも。。。電気のムダって感じがしますから。

www.youtube.com

もう、普通のデスクライトにしてしまおうってやってみたのが以下。以前、作った簡易机があったのでそれを利用しました😁

f:id:ke_takahashi:20190312175610p:plain

あの。。。格好は悪いんですが。。。意外といいですよぉ。CCFLの特性なのか?視界にライト面が見えるのですが斜め方向だと光が弱まります。そして、LEDより光自体が「柔らかい」感じがします。たぶん様々な波長が混じっているからなんでしょうか?

ちなみに、このバックライトにLCD面を取り付けて色が変えられるかな。。。とやってみたんですが、LCDの偏光板のせいでバックライトの明るさが極端に落ちるのでライトとしては使えそうもありませんでした。

今日のところはこの辺で。ではまた。

表彰式を見学してきました

3日間の東京出張から戻り、TwitterのTLを眺めていたら以下がありました。

このポスターは毎年、誰から学科掲示板に貼っています。うちからの応募者はいるのか不明ですが、たぶんいないんだろうな。。。と。

ゲームの表彰式を見たことがなかったのと時間があったので見学してきました。場所は科学館。

審査員は福岡では(もちろん全国的にも)知らない人はいない方々です。

部門は3部門あって、企画、デザイン、そしてゲームソフトでした。最も興味のあったゲームソフト部門の受賞4作品については壇上でプレゼンが行われました。開発者がどういう考えでどういう体制で作ったかなど説明がありました。

以下、受賞4作品のメモです。


Devil's Slave公式ページ
www.youtube.com
概要:アクションゲーム、Unreal Engineで開発、デザイナーが9名、プログラマーは2名、9ヶ月、スピード感と操作性にこだわったとのこと。
審査員のコメント:プロレベルなのでプロとしてのこうすべきというコメントがいくつかあった(←内容は憶えていません)。


DEEP HOLE公式ページ
概要:アクションパズルゲーム?地底深くまで降りていくゲーム。ジャンプして登るゲームは数多くあるが降りるゲームはなかったので作った。最初は降りる先が見えないようにしていたが「プレイヤーから見えないと降りていく気にならない」というコメントがあり見えるようにした。ジェットパックを使うなどしてパズル的に進めていく。製作期間8ヶ月。
審査員のコメント:プロレベルなのでプロとしてのこうすべきというコメントがいくつかあった(←内容は憶えていません)。


CURTAIN ADVENTURE
www.youtube.com
概要:アクションパズルゲームスマホの他、スイッチでもリリース予定。プログラマー2人、プランナー2人
審査員のコメント:何をすればいいのか段階的に示されるので直感的にプレイ出来るところが素晴らしい。応募作品の中には、何をすればいいのか迷うような作品も散見する中でこの作品は全くそういうところがなかった。おもてなし、レベルデザイン素晴らしい。デザイナー不在で作ったことろも評価できる。


Re: Dolly
f:id:ke_takahashi:20190311114145p:plain
概要:プレイヤーは羊。タイトルはクローン羊のドリーから来てるらしい。。。言われるまで気づかなかった。プレイヤーは分身であるクローンを犠牲にしながら、ステージを進めていくアクションパズルゲームっぽい。すぐ死んでしまうゲームなので繰り返しを短時間でできるように心がけて作ったらしい。
審査員のコメント:似たものをつくる人が多いなか「犠牲」をうまく使い独自性を出している。レベルデザインがいい。プレイヤーがその時点で持っている知識を組み合わせて進めるようにレベルデザインされている。


他の部門もあわせて1000作品を超える応募があったそうで、その中での受賞とのこと。受賞者は北海道や名古屋など全国からの応募があったそうです。

最後に個人的な感想を少し(専門家でもゲーマでも何でもありませんのでただの感想です)

全体的にプロと同じような作品ばかりでした。ビジネスにするには詰めるべきところがまだあるのでしょうけど、個人レベルでもこれだけの作品が作れる時代なんだな。。。と改めて思いました。情報の流通はもちろん開発ツールのフラット化によるところが大きいのではないかと思います。

一方で思うのは「新規性」でした。このイベントは新しい人材の発掘のためでもあると冒頭の挨拶にありました。開発ツールの高度化で昔と比べると格段に効率的にゲームを開発できるようになったはずと想像します。実用ソフトでも教育ソフトでもない「ゲーム」ですから、何をどうゲームにしてもいいわけです(よね?)。新しいジャンルのゲームが出てきてもいいのかな。。。とも思いました。恐らく、応募作品の中にはそうした芽があったのではないかと思います。個人的にはそちらの方の作品に興味がありますね。「こんなゲームがあるのかぁ!?」と。

スマホでやろうと思えば四六時中ゲームすることができる時代です。何をどうゲームに落とし込むかは発想次第です。まだまだ我々が思いつかないようなジャンルがあると思っています。子供の頃からインベーダーやパックマンを見て育ちました。その当時には考えられないようなゲームが身の回りに溢れています。まだまだあると思います。。。どう誘導するかだな。。。

Kindle無くす ⇒ 見つかる

昨日、今日と学会参加です。

場所はなんとHTB

昨日、博多BTから高速バスを利用しました。

行きのバスは満員状態でしたが、持参したKindleを読みながら行きました。

1日目が終わってリュックを見ると。。。あれ?ない。時刻は20時過ぎでした。

またやってしまった。。。

今日から鹿児島です(iPad mini紛失 → 見つかる) - memorandums

そして、ロックは掛けていませんでした。いちいち閲覧するのにパスコードを入力するのは面倒だったので。

Kindleは紛失してもAmazonのページから登録解除できる→パスワードロックかけなくてもいい - memorandums

すぐ、Kindleの登録解除を行いました。

そして、運行会社である西肥自動車さんのHPで忘れ物の届けをしました。

西肥自動車|お客様を目的地まで「安全」かつ「快適」に輸送致します。

そして、今日です。

待っていると届けられていない。。。という残念メールが。。。

もしかして、まだ、車内にあるんじゃないかな。。。と連絡したところ昼くらいに「ありました」との連絡がありました☺

佐世保駅前にあるバスセンターに行く必要があるとか。

HTBから佐世保までJRで移動しました。カワイイ電車。

f:id:ke_takahashi:20190305175255p:plain

早速、窓口にいって遺失物の話しをしたら。。。ありました。皆様、ご迷惑をお掛けしました。

f:id:ke_takahashi:20190305141809j:plain

ついでに昼ごはんがまだだったので駅前のお店で佐世保バーガーを。

f:id:ke_takahashi:20190305174643p:plain

ちなみに佐世保駅は。。。なんだそうです。知らなかった。

f:id:ke_takahashi:20190305145200j:plain

なにやってんだか。。。という一日でした。

明日から東京です。

AndroidでローカルのHTMLファイルを開く方法

今週は週末まで学会参加中です。

学会では、参加者用に論文PDFをオフラインで閲覧するファイルをネット経由で配布しています。

ZIPファイルをダウンロードしてきて展開するとindex.htmlがあるのでダブクリすればブラウザで見ることができます。

ただ、イチイチPCを開くのも面倒だし、タブレットスマホで見たい。。。ということもあるんですね。

手持ちはAndroidKindle Fire HD(Androidランチャー設定済み?)なので、Androidで見るのに1工夫が必要でしたので、それをメモしておきます。絶対に忘れる自信がありますので。

まず、PCで論文ページのファイル群をzipから展開しておきます。

続いて、PCとAndroidをUSB接続してファイル転送アプリを起動します(macの場合の話しですね、Winではそのままドライブとして見えるようです)。

で、どこでもいいんですが、例えば、Downloadに入れます。ここまでは普通のファイル転送と同じですね。

で、まずダメだったケースですが、普通にファイルマネジャーアプリでindex.htmlをタップするとChromeが立ち上がりWebページが見れます。ただ。。。この状態で論文PDFのリンクをタップすると。。。以下のようになります。どうもパスをみるとファイルマネジャーアプリ内のファイルを参照するように感じになっています。

f:id:ke_takahashi:20190305084413j:plain

で、ぐぐるとファイルマネジャーは使わずに、Chromeのアドレスバーに「/sdcard」と直接入力してあげれば、スマホのファイル一覧が表示できます。あとは/Downloadなどを辿っていけばindex.htmlが見つかりますのでリンクをタップするだけでいいです。

f:id:ke_takahashi:20190305084559p:plain

ただ、問題は。。。論文のリンクをタップするとダウンロードするんですね。。。当然といえば当然の動作なのですが。。。もっといい方法があると思いますが、とりあえず簡便な方法として。

学会初日

今日は朝から熊大に移動して学会発表してきました。

f:id:ke_takahashi:20190302121149j:plain

タイトルは「Ruby on RailsによるWebアプリ開発の授業実践」でした。

これまで3年生のソフトウェア開発の講義・演習でJavaEEを使用してきました。10年くらいになります。

3年前にカリキュラム改定を行った影響で、1年生の導入のプログラミング言語JavaからRubyに変えたので、あわせて3年生の授業もRailsに変えてみました、という内容でした。

研究というか。。。FD(授業改善)的な内容です。

なので、RQ(リサーチ・クエスチョン)もありません。

論文っぽく(!?)定量的な評価も一応織り交ぜてみましたが、別にそこが言いたいわけではありませんでした。

こういう論文の体裁だけを整えようとするのは私の悪い癖だと思います。。。反省です。

実は、この時期に発表するつもりはありませんでしたが、このシンポジウムの締切が2週間くらい延長になったというメールがあり、せっかくだから1年間のトライを振り返っておこうかな。。。と思い書き始めました。

Railsといえば、現場では世の中に広く普及していて、もう「枯れた」技術とも言えるんじゃないかと思います。ですよね?今ならnodeがありJSの様々なフレームワークがあり、クラウドをベースとするのはもちろんサーバーレスとか言われている時代です。クライアントはブラウザだけではなくスマートフォンやIoTの各種デバイスとデータをやりとりする役目も益々大きくなっていると思います。サーバーサイドのアプリケーションを作ることの意義はここ5年、10年で大きく変わってきているんじゃないかな。。と思います。

現場ではありませんが、そういう情報を見聞きしてきて、いまさらRailsか。。。と私自身も感じていましたし、たぶん聴講されている先生方もそうだったんじゃないかな。。。と想像しました。

しかし、Railsは大学院での採用事例はあちこちにあるのですが、学部のシラバスRailsを採用している例は数件くらいしか探せませんでした。

うーん。これは発表してもいいのかもな。。。と。思ったわけです。参考になるかな?と。

やはり論文を書くのは思考を整理する有効な手段だな。。。と思います。自分でなんとなく頭にあるモヤモヤを言葉にして整理することで、自分自身が得るものがありました。

こういう基本的な演習の講義や演習でフレームワークを使うことの功罪はあると思います。

JavaでもStructsやSpringやPlayなど様々なフレームワークがありますし、卒業生からStrutsLog4Jなどの使い方を教えてほしかった、という意見も聞いたことはありました。でも。。。フレームワークを使う前にやることがあるだろう。。。と思ってきたわけです。この10年くらいずーっと躊躇してきました。

で、結果はどうだったのか?以下の発表スライドに集約しています。

f:id:ke_takahashi:20190303000946p:plain

HTMLやRubyなどを組み合わせて、手作り感満載のWebアプリを作ることはいくらでもできるんですが。。。やはり我々がよく使っているようなWebアプリを作るとなると。。。それはそれは大変です。がんばっても素朴なものしか作れない、がんばる前に行き倒れになる学生も多かったり。。。たくさん見てきました。

そう考えると、また、今年度の授業経験から、最初だからこそ、労力を少なくして、できた!感、達成感、面白さを味わえるような教材にしていった方が幸せなのかな。。。と思うようになりました。

以下の発表スライドの一部なのですが(すいません、写真の引用元を入れていません、支障があれば教えてください、削除します)、以下の図でその感覚を表現してみました。

f:id:ke_takahashi:20190303001324p:plain

これまでの教育のスタイルって以下の順だったと思います。

まず、①で個々の技術要素(プログラミングとかファイルとかモジュールとかデータベースとか)を教えます。

そして、得た知識やスキルを組み合わせて、要求仕様にあった形にします。これが②です。がんばって作っても。。。ちょっと玩具感がありますね。。。

で、応用としてさらに進んだことを学びたい人は③のように、手早く綺麗なアプリを作る方法を学びます。

でも、もしかするとこれは勘違いで、③を先に学んで「おーすげーこんなに簡単にできるのか〜面白いからもってやってみよーかなぁー」と思うのではないかと思います。

もちろん、③のブロックだけでは作れないものもあるでしょうから、そのときに原点に返って基礎的なことを組み合わせた勉強をしてもいいいのかなぁ。。。と、という感じです。

積み上げ型の教育って。。。難しいですよね。

積み上げる前に興味をなくしてしまって躓いたら、もう、その先は地獄。。。何でもそうですよね?

なら、最初だからこそ、簡単に実際の何かを学んでみて、そのあと基本や原則を学ぶ。。。という流れは今の時代にあっているのかな。。。と思ったりしています。

興味のある方は下記のリンクから論文がダウンロードできますのでご覧いただければと思います。

火の国情報シンポジウム2019

さあ、今週は学会週間です。あと2つ学会に参加します。余力があればここにメモりたいと思います。

せっかく熊本まで来たので熊本城に立ち寄りました。この映像のように周囲の城壁はまだ崩れたままでしたが、天守閣はかなり復旧が進んでいました。がんばれ熊本。僅かですが募金してきました。

https://youtu.be/0Jl-U_aEXjM