少ないリソースを酷使する

低レイヤーとレトロPC(PC98,MSX)が好きな情報学生

岩手でのんびり開催している「わんこそばIoTLT盛岡」今年のまとめ【主催者が気分で開催している】

この記事は、大遅刻して書いた「IoTLT Advent Calendar 2021」の19日目であり、「岩手県立大学とか、岩手の人たち Advent Calendar 2021」の24日目でもあります。
。。。記事の使い回しじゃんとか怒らないで! 許して! ごめんなさい!!
しかも「IoTLT Advent Calendar 2021」の面白い技術記事が沢山公開されている中でのイベント運営個人感想文です。あしからずご了承ください。

qiita.com

qiita.com

最初に宣伝じゃ

2022年1月22日の19:00から2022年最初の「わんこそばIoTLT盛岡」Vol.13を開催致します〜
オンライン開催予定なので、県外の人も是非ご参加ください!

iotlt.connpass.com

IoTLTコミュニティとしては同じ日に「スポーツTechLT vol.8@阪急淡路」があるのですが、13:00 〜 16:00予定のようなので両方参加できます。
1日IoTLTづくしというのも良いんじゃないでしょうか!

iotlt.connpass.com

「わんこそばIoTLT盛岡」って?

元々 東京で始まった「IoT縛りの勉強会!IoTLT」というイベントの地方版です。
iotlt.connpass.com

私が開催しているのは岩手の盛岡地域ですが、全国で派生イベントが開催されています。
IoTという縛りにとどまらず、以下のような「IoT x 〇〇」でイベントのテーマもバラエティ豊か。

KURUMA IoTLT Vol.4 (オンライン開催) - connpass

スポーツTechLT vol.8@阪急淡路 - connpass

しかし、ほぼ全てで共通しているのは「LTをする」「ゆるくやる」そんなイベントです。
LT(えるてぃー)とは、Lightning talks(ライトニングトーク)の略で、5分や7分など短い時間でプレゼンテーションをすることを言います。
プレゼンテーションと言っても、好きなことを好きなように喋れるだけでOKです。
が、しかし。好きなように喋ると意外と5分ってあっという間なので、だんだんと「短い時間でどう魅力的に話そうかな」と考えて話すようになると、話す側も聞く側も楽しくなってくる。そんな活動です。
そんなLTを通してIoTに関するあれやこれやを情報交換するのがIoTLTというわけです。

イベント名についてる「わんこそば」って?

「IoTLT盛岡」は2018年頃からやっているのですが、前回からタイトルを変え「わんこそばIoTLT盛岡」にしました。
「わんこそば」がついてるからと言ってわんこそばに関連するIoT技術をテーマにしてるわけではなく。なんとなくの”地方感”でつけました。
ベテランのイベンターさんと話してるときに「コロナ禍に入って勉強会のオンライン開催が基本になったので、地方で開催するメリットと言うか特徴が出しづらい、というか”無い”んですよね〜」と言ったところ「なんかタイトルにご当地のものつけたらウケるよ!これは長年の経験則!」とアドバイスを頂いたのでなんとなくつけてみました。ノリで。
ちなみに主催者の私は小学生頃以来わんこそば食べてないです。オフライン開催できるようになったらイベント後の懇親会はわんこそばチャレンジとかにしたいですね。

今年はどんな活動した?

去年からだんだんとモチベが低下

今年の話をする前に去年のコロナ禍での活動から振り返ると、コロナ禍でオフラインでのイベント開催が難しい中でも、感染対策を徹底し4回ほどオフラインで開催させていただきました。

f:id:T-takeda:20211225152630p:plain
去年

去年は岩手で3Dプリンタやレーザ加工機などが無料で使えるファブスペース「ファブテラスいわて」さんにも協力していただき会場をお貸しいただくだけでなく、IoTLTイベント内に3Dプリンター体験も一緒に組み込むなど盛り上げていただきました。

fabterrace.site

と、色々楽しくやっていたのですが、先程もチョロっと書いた「コロナ禍に入って勉強会のオンライン開催が基本になったので、地方で開催するメリットと言うか特徴が出しづらい、というか”無い”」という悩みや、個人的にオフラインでわいわいするのが好きなのであって「オンライン開催に興味がない」など、色々モチベーションが低下して活動を一旦休止しました。

今年は初めてのオンライン開催に挑戦。

「食わず嫌いをしても仕方ないしとりあえずオンライン開催にチャレンジしてみよう」となんとなく発起して約半年の休止期間を空けて7月に2021年第一回を開催しました。
f:id:T-takeda:20211225153845p:plain

休止期間の間も岩手県内のITのイベントとしては「【IwaDev】夜中に東北民があつまってもくもくする会」なんかも運営側でやっていたので、なんだかんだITのイベント活動をやっていなかったわけではないので、コミュニティのつながりはほんのりありました。

そして自分でやってみたオンラインイベントですが、やはりオンラインは参加しやすさが段違いなのか参加者は増えました。
県外の方にもいっぱい参加していただきました。
結論「オンライン開催も結構楽しいじゃん」と思いました(小学生並みの感想)

オフラインの活動もちょろっとやりました。「いわてメイカー展」という岩手県内外の様々なメイカー(モノの作り手)が集結した展示会でIoT入門として「RaspberryPiを使って冬に備えてIoT温度計を作ろう!」というハンズオンをやらせていただきました。
小中学生向けに資料を作ったのですが、ご参加いただいたのは おじいさま や ご婦人 が殆どで意外なニーズに驚かされたりもしました

fabterrace.site

もっと楽しくしたい

オンライン開催も結構楽しかったのですが、雰囲気作りがオフラインのときと勝手が違うので難しいところです。
せっかくのオンライン環境での開催なので「ドリンキングOK、食事OK」にして、イベント開始時に乾杯なんかもしたんですが、結局私がビール飲んで飯食ってるだけという「ゆるさの共有」ができなかったり、やはりZoomなどを使うと1人しか発言権が握れないのでわちゃわちゃ話すというより一方的な講義スタイルになってしまったりと、「わいわい」「ごちゃごちゃ」感を出したいがなかなかうまく行かないところがもどかしいところでした。
今年はもっと面白くしたいですね。

さいごに、岩手のITコミュニティについて

だんだんIoTLTとは関係なくなってきましたが、落とし所を見失ってしまったので許してください。。。

私は2019年の末にこんなブログ記事を書いてました。

t-takeda.hatenablog.com

この中で「2019年に入ってからコミュニティが一気に立ち上がって、イベントも増えた!」的なことを書いてるんですが、このあとすぐコロナ禍に入ってしまったこともあって、その後岩手のコミュニティ活動は少し落ち着きました。ゆるゆる〜と活動したいときに活動しますが、いい感じに活動のタイミングをバラけさせたりして「1年中何かは開催されてる」という個人的には非常に心地いい状態です。
また、「ヴァーチャル空間にもうひとつの岩手の理想郷を共創しよう!」ということで「VHATOV(ヴィーハトーヴ)」をVR上に創る挑戦が始まったりと逆にオンラインだからできるコミュニティ活動なんかも出てきてすごい面白いことになってます。岩手。

cluster.mu

というわけなので、この記事を読んでいる皆さんも「わんこそばIoTLT盛岡」もその他の岩手のイベントでも、是非ご参加ください〜
。。。強引に締めました。

RaspberryPi SDの丸ごとバックアップ(リストア編)

前に以下のような記事を書いた.
t-takeda.hatenablog.com

RaspberryPiのSDカードをまるごとバックアップしようという記事だ.
よく考えたらバックアップしたファイルからSDカードにリストア(書き戻す)方法を書いてなかったので,今回は実際に前記事の方法でバックアップしたファイルからリストアしながら記事を書いてみた.

解凍する

まず,バックアップファイルはgzip形式で圧縮されているので解凍する.
解凍後のファイル拡張子は.imgとする.

$ gunzip -c /Users/hoge/raspi-zero_bak.img.gz > raspi-zero_bak.img

SDカードに書き込む

バックアップしたSDカード(16GB)と同じ容量のSDカード(16GB)を用意してバックアップをリストアする前提で進める.
今まではSDカードのフォーマット方法やimgファイルの書き込み方の情報が混沌としていましたが,今は「Raspberry Pi Imager」を使うのが一番確実で簡単だと思います.
と,いうわけでMac Book Air(m1)上の「Raspberry Pi Imager」を使ってこの記事では手順を説明していきます.(Raspberry Pi Imagerが使えるならどの環境でも同じようにできるはず)

SDカードをフォーマットする

まずは「Raspberry Pi Imager」を起動する.
f:id:T-takeda:20210419181647p:plain

「CHOOSE OS」のボタンを押して,選択肢を下にスクロールしていくと「Erase」という項目があるので選択する.
f:id:T-takeda:20210419181604p:plain

メイン画面に戻るので,次は「CHOOSE STORAGE」をのボタンを押す.
フォーマットしたいSDカードを選ぼう.
f:id:T-takeda:20210419182036p:plain

メイン画面に戻るので,「WRITE」ボタンを押すとフォーマットが始まる.
フォーマットが完了するとSDカードが自動的にアンマウントされる.

SDカードにバックアップファイルをリストアする

アンマウントされている場合,SDカードを一度挿し直して再度マウントする.
Raspberry Pi Imager」を立ち上げて,また「CHOOSE OS」を選択する.
f:id:T-takeda:20210419181647p:plain

選択肢を下にスクロールしていくと「Use custom」という項目があるので選択する.
f:id:T-takeda:20210419181604p:plain

さっき解凍した.imgファイルを選択する.
f:id:T-takeda:20210419184142j:plain

あとはさっきの「# SDカードをフォーマットする」の手順と同じように「CHOOSE STORAGE」で書き込みたいSDカードを選択して,「WRITE」ボタンを押すと書き込みが始まります.
書き込みが完了するとSDカードが自動的にアンマウントされるので,SDカードをPCから抜いてラズパイに挿して起動するか確かめましょう.

最後に

ちゃんと起動しました.やったね!
f:id:T-takeda:20210419190707j:plain

OpenVINOで Intel Xe GPU を使うには一手間必要

Intel Xe GPU 環境に対応したOpenVINOのインストールはリファレンスのデフォルト手順通りではうまくいかないという話.

環境

CPU: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
GPU: Intel(R) Iris(R) Xe Graphics
OS: Ubuntu 20.04.2 LTS (x86_64)
OpenVINO tool kit: 2021.2.185

失敗例

過去に書いたOpenVINOの導入手順通りだとGPUが使えない.
t-takeda.hatenablog.com
デモを実行しようとすると以下のようなエラーが出る.

$ ./demo_benchmark_app.sh -d GPU

- 省略 -

[ INFO ] Device info: 
[ ERROR ] Failed to create plugin /opt/intel/openvino_2021.2.185/deployment_tools/inference_engine/lib/intel64/libclDNNPlugin.so for device GPU
Please, check your environment
[CLDNN ERROR]. clGetPlatformIDs error -1001

Error on or near line 221; exiting with status 1

原因

原因は多分,OpenVINOのセットアップツールでインストールできるIntel® Graphics Compute Runtime for OpenCL™(現在では Intel(R) Graphics Compute Runtime for oneAPI Level Zero and OpenCL(TM) Driver - 通称:NEO という呼び方か?)のバージョンが古いからだろう.
インストールしようとした時に出るメッセージにちゃんと理由が書いてある.

$ sudo -E su
root@hoge:/opt/intel/openvino_2021/install_dependencies# ./install_NEO_OCL_driver.sh
Intel® Graphics Compute Runtime for OpenCL™ Driver installer
Checking current driver version...

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

Checking processor generation...
install_NEO_OCL_driver.sh: Detected 10th generation Intel® Core™ processor (formerly Ice Lake) or 11th generation Intel® Core™ processor (formerly Tiger Lake).
Driver version 20.35.17767 is going to be installed to fully utilize hardware features and performance.
You are still able to use the older version 19.41.14441. Use the older driver? (y/n) [n] y
Intel® Graphics Compute Runtime for OpenCL™ Driver installation skipped because current version greater or equal to 19.41.14441
Installation of Intel® Graphics Compute Runtime for OpenCL™ Driver interrupted.

公式のインストールガイドにも書いてある.
https://docs.openvinotoolkit.org/latest/openvino_docs_install_guides_installing_openvino_linux.html#additional-GPU-steps

Higher hardware versions require a higher driver version, namely 20.35 instead of 19.41. If the script fails to uninstall the driver, uninstall it manually. During the script execution, you may see the following

つまりは「Gen10以降のIntelチップで使うならCompute Runtimeは20.35以降のバージョンをインストールせよ」ということである.

もし環境構築に失敗したら(OpenVINOのuninstall)

環境構築に失敗した場合,余計な問題を避けるため,一旦以下のコマンドでOpenVINOをアンインストールしよう.
念の為その後再起動もするとよい.

$ cd /opt/intel/openvino_2021/openvino_toolkit_uninstaller/
$ sudo ./uninstall.sh 

成功例

参考になった情報

https://community.intel.com/t5/Intel-Distribution-of-OpenVINO/The-inference-engine-returns-error-clGetPlatformIDs-error-1001/m-p/1246561 https://www.intel.co.jp/content/www/jp/ja/support/articles/000057923/software/development-software.html

最新のCompute Runtimeをインストール

過去に書いた記事の[とりあえず動作確認]までやる.
その後,最新のIntel(R) Graphics Compute Runtime for oneAPI Level Zero and OpenCL(TM) Driverを入れる.
インストールの仕方はリリース情報にコマンド付きで細かく説明されているので正確な情報はそこを参照すべし.
https://github.com/intel/compute-runtime/releases/latest

参考までに,今回のインストールのコマンド履歴を書いておく.
(以下のコードはコピペせずに,常に最新のリリースのインストール方法を確認すべし)

$ cd ~/
$ mkdir neo
$ cd neo
wget https://github.com/intel/compute-runtime/releases/download/21.09.19150/intel-gmmlib_20.3.2_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.6410/intel-igc-core_1.0.6410_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.6410/intel-igc-opencl_1.0.6410_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/21.09.19150/intel-opencl_21.09.19150_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/21.09.19150/intel-ocloc_21.09.19150_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/21.09.19150/intel-level-zero-gpu_1.0.19150_amd64.deb

$ wget https://github.com/intel/compute-runtime/releases/download/21.09.19150/ww09.sum
$ sha256sum -c ww09.sum

$ sudo dpkg -i *.deb

sudoなしで実行できるようにする

このままでもOpenVINOはGPUバイスで動くのだが,なんでか毎回sudoを付けなければいけない.
clinfosudo clinfoとしなければGPUの情報が出てこない.
OpenCLをインストールしたことがある人ならわかるかもしれないが,これはユーザグループの問題だ,
今までだったらユーザをvideoグループに追加すれば万事解決だったが,今回はどうもそれではうまくいかなくてかなり悩んだ.
結果的にユーザをrenderというグループに追加することで解決した.これでsudoしなくてもOpenCLが呼び出せる.

$ sudo usermod -a -G video $LOGNAME 
$ sudo usermod -a -G render $LOGNAME 
$ cat /etc/group | grep $LOGNAME 
sudo:x:27:<USERNAME>
video:x:44:<USERNAME>
<USERNAME>:x:1001:
render:x:130:<USERNAME>

同じような問題でissueを立てている人もいたが,どこかのバージョンアップを機にグループ名がvideoからrenderに変わったのか...?
https://github.com/intel/compute-runtime/issues/350

やっとデモが動かせる!

さてさて,それでは早速Xe環境でデモを動かしてみよう.
以下のフォルダにデモの実行スクリプトが入っている.

$ cd /opt/intel/openvino_2021/deployment_tools/demo/

今回はdemo_benchmark_app.shなるものを実行してみる.
これは畳み込みニューラルネットワークSqueezeNetを1000回実行してベンチマークをとるものである.
...多分.

CPU実行

$ ./demo_benchmark_app.sh
Full device name: 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz

Count:      1000 iterations
Duration:   1854.49 ms
Latency:    7.41 ms
Throughput: 539.23 FPS

GPU実行

$ ./demo_benchmark_app.sh -d GPU
Full device name: Intel(R) Iris(R) Xe Graphics [0x9a49] (iGPU)

Count:      1000 iterations
Duration:   1075.82 ms
Latency:    4.24 ms
Throughput: 929.52 FPS

GPUを使った実行の方が速いため,ちゃんとGPUを使っているのがわかる.やったね!

mac(Apple M1)でVSCodeとDockerを拡張機能で連携させてみる

今までDockerってLinux環境でしか使ってなかったんですが, 色々あって,M1 macにも入れてみるかーと思った次第です.
で,「VSCodeと連携させると便利」と最近聞いたのでついでにやってみようと言う話.

Dockerを入れる

この記事執筆時点(2021/2/26)ではM1 macネイティブ対応のDockerはPreview版しかないのでこれを入れます.
Apple M1 Tech Preview | Docker Documentation

f:id:T-takeda:20210226014013j:plain
m1-docker

VSCodeにDocker拡張機能を入れる

検索して入れます.
f:id:T-takeda:20210226014218p:plain

VSCode拡張機能を使う

試しにMicrosoft公式の設定ファイルサンプルを使ってみます.
以下のリポジトリをgit clone.
https://github.com/Microsoft/vscode-remote-try-python

VS Codeでcloneしたディレクトリを開きます.
ここからがめちゃくちゃ簡単.

VSCode Remoteのボタンを押します.
f:id:T-takeda:20210226042939p:plain

なんかポップアップ?が開くので Reopen in container を選択.
f:id:T-takeda:20210226043007p:plain

VSCodeディレクトリが開き直されます.
初回,何か処理が走っていて完全な起動に時間がかかりますが,これは裏でDocer Buildが走っているからです.
右下のポップアップのリンク(show log)をクリックするとDockerBuildの進捗が見れます.
f:id:T-takeda:20210226043255p:plain

完全に起動するまで待ちましょう.
左下にコンテナ接続していることと,ワークスペース名が表示されます.
f:id:T-takeda:20210226045607p:plain

この状態のVSCodeでする作業は全てコンテナ内の仮想環境で実行されることになります.
ちゃんとコンテナに入ってますね!
f:id:T-takeda:20210226051016p:plain

多分,検索すれば方法が見つかると思いますが,ssh先のDocker containerにもアクセスできるといいですね.
とりあえずとっても便利,仕事でも使おうとお思う.

RaspberryPi SDの丸ごとバックアップ方法メモ

RaspberryPiのSDカード(Raspbianインストール済み)のバックアップを取りたい.
調べればいっぱい方法が出てくるが,いっぱい出てきすぎて困る.
よって自分にあった最適手法をメモしておく.

前提

今回はRaspberryPi 4で使うようにRaspbian(GUI)がインストールされたSDカードをバックアップする.(他のモデル・OSの組み合わせでも別にうまくいくと思う)
Linux上で,対象SDカードからUSBリムーバブルディスクにイメージファイルとして保存する.
なるべく小さい容量で保存したいがパーティション操作とかめんどくさすぎなのでやりたくない.

やり方

まずリムーバブルディスクをマウントする.
で,ddコマンドでSDカードの内容を読み出し,gzipに圧縮しながら保存する.

# macの場合
$diskutil list

# linuxの場合
$sudo fdisk -l | grep "/dev/sd"

$sudo mount /dev/sdc1 /mnt/usb/
$sudo dd if=/dev/sdb bs=1M | gzip > /mnt/usb/Rasbian_bak.gz

結果

ddコマンドで2時間ぐらいかかるっていう記事もあってビビったが,
実際やってみたら32GBのSDカードで大体30分ぐらいでできた.
サイズは32GB -> 2.7GBぐらいまで圧縮されて保存された.
満足.

2020年 岩手県立大学 Advent Calendarを〆る

この記事は岩手県立大学 Advent Calendar 2020の最終日です.

今年のアドベントカレンダーを振り返って

今年は私が岩手県立大学 Advent Calendarを立てさせていただきました.
立ててすぐは,毎日私が記事を書かなければいけないのではないかとも思いましたが,それも最初だけ.
2週目あたりからは多くの人にご参加いただき,賑やかなものとなりました.
感想としましては,大盛況に終わった!と言っていいでしょう. 記事を投稿してくださった皆様方はもちろん,記事を読んでいただいた方々,拡散していただいた方々,みなさま本当にありがとうございました!
来年も私がアドベントカレンダーを立てることになるのかな...?
まぁ,なんにせよきっと来年も岩手県立大学 Advent Calendar は立つでしょう.その時はまた皆さんと楽しめることを願っています.

今年の岩手県立大学を振り返って

岩手県立大学 Advent Calendar ということで,大学の名前をお借りしているので大学の今年一年も振り返りもしてみましょう.(こじつけ)
今年は大きな変化がいくつもあった年でした.
2020年初めには,卒業式が中止されなんだか区切りのつかないまま,みなそれぞれの道へと散り散りに別れました.
私も去年度の卒業生でしたので,なんだか家に篭っていたらヌルッと大学院生になっていた感じです.
5月18日からは遠隔授業が始まりました.
教師・学生どちらも手探りで,様々いいところも悪いところもありましたが,何よりも迷ったのは新1年生でしょう.
うちの大学に限った話ではありませんが,交流もなく,パソコン操作も慣れないうちにカリキュラムも手探りのオンライン授業を受ける日々というのは,私には想像できません.
しかし,

「前期は原則として全ての科目を遠隔授業」
(原文ママ)

とされた学校の方針も急遽変わり,6月22日には対面授業へと切り替わりました.短い自粛期間でしたね.
対面授業で得られるメリットももちろんありますので,早めに対面へと切り替える判断も選択肢としてはアリだとは思いますが,
たった1ヶ月の遠隔授業期間で教員も学生も大学本部も,遠隔授業への知見は得られたのでしょうか?
近年のコロナ禍に限らず,この先の社会情勢で自粛を迫られる状況がまた来たとしても,すぐに経験を生かした対応ができる知見は得られたのでしょうか?
今年の大学の決断はそこだけが疑問です.

ソフトウェア情報学部だけを見れば,今年は遠隔授業の名残もあってかあまり積極的に大学に登校する雰囲気はなく.
それに加えて,1年生から研究室に所属する制度の廃止,ノートPC必携化による据置PCの廃止.研究室の私物(冷蔵庫,テレビ,テーブルゲームなど)の廃止.
コース制を強く意識したカリキュラム変更で,他コース(他分野)について触れる機会が減るなど,交流する要素が減るばかりで研究室は閑散としたものです.
減る要素ばかりが目につき,新しく良くなった部分,充実した部分は正直なところまだ感じられません.
来年にはさらに研究室・学生グループの細分化をより明確にするようです.
かつて県大情報学部は相撲部屋方式で,基礎教養演習やプロジェクト演習などを通して広い交流を持ち成長できることが取り柄だと思っていましたが,この先は細かいグループの中だけの交流が色濃くなっていく気がします.
おっと,マイナスなことばかりを言っても仕方ありませんね!
来年はより学年が下の後輩たちもアドベントカレンダーに参加してくれることを願います.フレッシュな風は必要ですからね!

自分の振り返り

まぁまぁアドベントカレンダーを盛り上げるために頑張れたのではないでしょうか.
今月はこのアドベントカレンダー以外にも,IoTLT Advent Calendarに参加しました.
他にも地方IT勉強会 Advent Calendarいわてことし2020 Advent Calendarなど参加したいアドベントカレンダーは沢山ありましたが,今年は自分が立てたアドベントカレンダーに注力したためリアルタイムでの参加が難しかったです...悔しい....!!
今からでも今年度中空きがあれば寄稿しようかと思います.
地方IT勉強会 Advent Calendarは去年寄稿させていただいています.よければご覧ください.
t-takeda.hatenablog.com

まとめ

今年は充実した年末を過ごせました.
アドベントカレンダーをきっかけに,多くの人が積極的にアウトプットする岩手県になることを願います.

QiitaのOrganizationアドベントカレンダーをオープンなものに変更する

この記事は岩手県立大学 Advent Calendar 2020の8日目です.

岩手県立大学 Advent CalendarをOrganizationカレンダーで作成しちゃったけど,やっぱりオープンなカレンダーに変更したかったよ.したよ.って話.

間違えてOrganizationカレンダーを作成

Qiitaのアドベントカレンダーは参加したことはあれど,作成したことはなかった.
よってなんとなく感覚でぽちぽちーっとカレンダーを作成したら,どうやらOrganizationのカレンダーを作成してしまったらしい.
QiitaのOrganizationアドベントカレンダーとは,参加者をOrganizationのメンバーに限定し,カレンダーの管理をカレンダー作成者とOrganization管理者で共有する物らしい.

help.qiita.com

別に,私は参加者をOrganizationのメンバーに限定したいと思ってなかったし,「アドカレに参加したいけどOrganizationメンバーじゃない...」と言う人たちを逐一Organizationに追加するのも面倒だ.
よって,Organizationカレンダーからオープンなカレンダーに変更したい.

しかし...
Organizationカレンダーは後からオープンなカレンダーに変更することはできないらしい.

やってしまった....

Organizationアドベントカレンダーをオープンなものに変更する(差し替える)

表題にあるようになんとかQiitaのOrganizationアドベントカレンダーをオープンなものに変更することができた.
正確に言うと"変更"ではなく"差し替え"だが.

イデア

まず思いついたのは以下の方法.

  1. 新たにオープンなカレンダーを作る
  2. 参加者にOrganizationアドベントカレンダーからオープンなカレンダーに参加登録し直してもらう(引越し)
  3. Organizationアドベントカレンダーを消す

Qiitaのアドカレは参加者が1人でもいるとカレンダーは削除できないようになっている.
よってカレンダーを消す場合,参加者全員に参加を取り消してもらわないといけないので大変だが,今回の場合 参加者全員に連絡がとれたのでなんとかできそうだった.

不安点(結果何も問題なかった)

しかし,上記が全てうまくいったとしても少し不安点がある.
URLが変わってしまうという不安だ.
新たなアドカレを作る場合,他のアドカレを被らないユニークなアドレスを新たに設定する必要がある.
よって,すでに作っているカレンダーのアドレスがqiita.com/advent-calendar/2020/hogeだったら新たなカレンダーは`qiita.com/advent-calendar/2020/hoge2とかにしなければいけない.
そうするとせっかく今までアドベントカレンダー参加してね!TwitterFacebookで宣伝して,ある程度拡散もしてもらったのに,「面白そうなアドカレじゃん」とリンクを踏んでくれた人にはNot foundが表示されてしまうのだ.
これは困った....
と思っていたが,結果なんの問題もなかった.

URLを差し替える

Qiitaのアドベントカレンダーは作成した後でもURLを変えられる.
f:id:T-takeda:20201208182123p:plain よって,

  1. オープンなカレンダーを適当なURLで作成
  2. Organizationアドベントカレンダーを消す
  3. オープンなカレンダーのURLを元々使ってたURL(消す前のOrganizationアドカレのURL)に変更

とすれば一々すでに拡散しているURLを一つ一つ訂正していかなくても,新しく作成したアドカレにアクセス者を誘導できる.
最初に失敗したOrganizationアドカレのURLを適当なものに変えておけば,Organizationアドベントカレンダーを消す前にアクセス先を差し替えることも可能だ.
f:id:T-takeda:20201208182143p:plain f:id:T-takeda:20201208182157p:plain

まとめ

URLを自由に設定,変更できるおかげで助かったが,そもそもなんでQiitaはそのような仕様にしているのだろうか.....?
謎だ....