Sound BlasterX G6を買った
ちょっとしたメモ程度の内容
買ってからつなげてみたら音が止まったりマイクの音にノイズが乗ったりしていた。 セーフモードでドライバを入れなおす、OSのクリーンインストールなどを行ったものの解決しなかった。 自分の場合は(電力供給以外で)使用していないのに接続していたHDMIケーブルが悪さをしていた模様。
環境
MB : ASrock Steel Legend B450M CPU : AMD Ryzen 5 3600 GPU : Radeon RX5700(ASUS DUAL-RX5700-O8G-EVO)
問題の切り分け手順
- セーフモードでドライバの入れ直し、問題の発生を確認 →ドライバのインストールの失敗ではないかもと考える
- Switchに接続して1時間以上正常に動作することを確認
- 別のラップトップ機とデスクトップ機に接続して1時間以上正常に動作することを確認 →Sound Blaster本体には問題がないと考える。対象のPCのハードウェアor他ドライバ等との相性問題と考える
- OSのクリーンインストール。問題の発生を確認
→ハードウェアとの相性問題と考える
5.不要なケーブルを一本ずつ抜いていく
→結果的にはHDMI入力切り替え機に電力供給するためにマザーボードに挿していたHDMIケーブルを抜いたら問題が起きなくなった
憶測でしかないが、
・HDMIケーブルで給電するせいで電力不足になった
・HDMIから音声を出力しようとするなどしたせいでドライバがバグった
あたりが原因かもしれない。サウンドカードが上手く動作しない場合は余分なケーブルを抜くのを試してみるとよさそう。
とりあえずSound BlasterX G6がまともに使えるようになったのでありがたい。
iVRyでVRを試した
前回の記事から約3か月、まさかこんな大変な事が起きるとは思ってもいませんでしたね 期せずして時間が生まれてしまったので、前からやってみたいと思っていたVRを試したので雑に書いておこうかなと思います。
** VRって高いよね
PCでのVR、始めようとすると高いですよね。
自分はBeatSaberとかVRChatがやりたくて仕方がないわけですが、いいグラボ(RX5700)を買っただけでお金が吹き飛んでしまいました。
せっかくグラボを交換したのでVRが動くのか試してみたい・・・でもVR機材を買うお金はない・・・ということで、スマホをVR用HMDの代わりとして使える方法を試してみた次第です。
用意するもの
スマホは画面が大きめのiPhoneとかだとよさそう。
長めのケーブルは2,3メートル程度あると真後ろを振り返れるのでいい感じでした。
スマホを入れるタイプのVRゴーグルは、Amazonのダンボールでも使ってGoogle Cardboardを自作するなり、ダイソーの500円のVRゴーグルでも買うと安く抑えられるかなぁと思います。
準備
先人達がすでに書いているので、そちらを調べてもらうのが早いかと思います。ざっくり書くと、
- スマホアプリ版のiVRyをインストール
- SteamでiVRyのドライバをインストール
- SteamでSteamVRをインストール
- スマホのデザリングをオンにする
- iVRyを実行したままVRゴーグルにスマホをセットする
- SteamVRを実行する
- キャリブレーションする
- おわり
キャリブレーションを適当にやるとVRChatでキャラクターが膝カックンした状態になるのでなんかうまい事やろう(自分は試しただけなのでうまい方法は知りません。むしろ教えて)
感想
視線の移動がスマホのジャイロセンサーで行えるのは中々に良かった。
コントローラーが無いとどうやらVRChatで移動するのはままならない模様。SteamコントローラーはVRでまったく使い物にならない。なんだこのゴミ 自分の設定が悪いのかも。
デザリングする都合上、パケットを食うのでそこそこつらい。ダイソーの500円ゴーグルはそこそこな着け心地。ただ、上下左右に隙間ができるので、没入感はちょっと低いかもね。
急いでVRを買うほどでもないかな・・・って気持ちになれた。移動の問題さえ解決すれば、VRのいくらかのコンテンツはこれで楽しめるんじゃないかと思う。
もう少し様子見しようかな
Master The Mainframeはいいぞ。っていうメモ
Master The Mainframeってのに参加しました。面白かったです。
ただ、色々書き散らすと文章がまとめ切れなくなってしまうので、Master The Mainframeについては自分で調べてください。
ここでは『名前を聞いてちょっと興味が出てきた人』向けにチャレンジ中思ったことなどを書き残しておきます。
Master The Mainframeはこんな人におすすめ
- プログラミング,パズルジャンルのゲームが好きな人
プログラミングジャンル : 具体例を挙げると、"SpaceChem"とか"Human Resorce Machine"みたいなやつですね。MTMが楽しめるなら逆説的にZachtronics製のゲームはハマると思います。 - 新旧問わずコンピュータが好きな人
コンピュータの動作原理とか設計思想みたいなところに興奮する人には向いていると思います。
操作を覚えながら課題を次々こなしていくのがパズルゲームみたいで楽しかったです。
一行が80文字である点など、古い計算機で用いられていたようなパンチカードの息吹を感じました。
(パンチカードの読み取り機が動くイメージが脳裏によぎる・・・動く実物を見たときは感動したなぁ・・・)
進める時のTIPS
ちゃんとメモを取る/まとまった時間で一気に進める
可能ならまとまった時間で一気に進めたほうが操作方法が定着するでしょう。こまかい操作は忘れがちなのでメモを取っておいたほうがいいと思います。
自動翻訳と日本IBMのドキュメントを活用する。
英語が堪能ならともかく、そうでないなら自動翻訳で概要を掴んでから原文を読んだほうが早く読み進められます(当たり前)
外部の掲示板の書き込みなども参考になるので、詰まったらメッセージコード(ICH114514とかIKJ364364とか行の左に出る英字3文字+数字のもの)をググりましょ。
ソースコードはローカルに保管しておく
オリジナルのコードを保管しておいて、書き換え、動作確認のたびにGitを使って管理しておくといい感じでした。
ちなみにVSCodeにREXXとJCLのシンタックスハイライトプラグインがあるので、これを使うとローカルで書くのが楽になります。REXXやらJCLやらでMarketplaceを調べてみよう。
書き戻す際は一行ずつコピペです。もっと賢い方法があるような無いような・・・
どうやっても上手くいかない場合
手順どおりにやっても上手くいかない場合、メインフレーム側の問題という事もあります。実際に自分も一度メインフレーム側の問題で3日ほど手詰まりしてしまいました。同じような症状の人がSlackで質問を投げたため、解決してもらえましたが、それが無ければ詰まったままだったと思います。
どうしても解決できない問題に当たった場合はSlackでスクリーンショットを添付して聞いてみるべきだと思います。
操作についてのTIPS
logoffはちゃんとすること
logoff処理をしないで終了してしまうと、セッションが時間切れになるまでログオンしている扱いになってしまい、通常手順のlogonでは復帰できなくなってしまいます。
ただしReconnectオプションで復帰が効きます。Reconnectの左にSを入力して送信すれば切断したセッションに戻ってこれます。これを知るまで苦労しました。
デザリング環境で課題を行う場合、頻繁に切断されてしまうので、Reconnectを活用しましょう。画像の赤丸部分ですね。
メインフレーム特有のキー
公式が推奨しているターミナルエミュレータには多分仮想のソフトウェアキーボードが実装されているはず。少なくともX3270にはついてました。
色々あるけどとりあえず自分が多用したのは以下の2つ。
Attnキー
REXXスクリプトとかがログを吐き出しすぎて止まらない時に割り込みをかけることができるというもの。
割り込みをかけてHIかHEコマンドを送信するとTSOで実行中のジョブが停止し、命令を受け付けます。
一応IBMのドキュメントを見ると、
- HI : 解釈停止
- HE : 実行停止
とあります。
使える時はいつでも、HI 即時コマンドを使うようにしてください。
とあるので、とりあえずHIで停止しておけばよさそう(よくわかんない)
Resetキー
入力不可能なフィールドでキー入力しようとするとカーソルがX印になり、操作ができない状態になることがあります。この時、RESETキーを押すことで入力不可状態を解除できます。課題を進める中でどこかで使用方法が書いてあったような気がするけど、知るまでは詰むので一応書いておきました。
エディタ画面の行追加、行消去
左の行番号にコマンドを打ち込んで送信すると行を挿入したり消去したりできます。
iコマンドが下に行を挿入。dコマンドが行を削除。
複数行にdを入力して送信すると複数行削除されるので活用しましょ。
参考になるサイト
とりあえずこの2つかと。
* 「メインフレーム・コンピューター」で遊ぼう
おそらく日本語で調べ物をすると必ず出てくるサイト。JCLやREXXの入門は役立ちます。ついでにメインフレーム自体についての様々なトリビアが得られるので一通り目を通しておくと、MTMをより楽しめる(?)と思います。
* IBM Knowledge Center
とりあえず日本語の方のURLを。わからない単語なりメッセージコードなりはここで調べましょう。サンプルコードもちょいちょいあるので、書き方がわからなかったりしたらここで調べると大変参考になると思います。
Linux環境からherokuに(Ruby on Rails + PostgreSQL) on Dockerのアプリをデプロイした回
Rails + postgresql on Dockerのデプロイでよくわからなかったり引っかかった部分についてでも備忘録がてら上げときます。RoR+PostgreSQL on Dockerのローカル環境構築も中々に手間取ったのでそっちも気が向いたら書きます。
筆者の環境
- Manjaro Linux 18.1.3
- docker 19.03.40ce build 9013bf583a
- docker-compose 1.24.1
Arch Linuxへのherokuの導入
公式のAURがあるのでそちらから導入。
導入
git clone https://aur.archlinux.org/heroku-cli.git cd heroku-cli makepkg -si
バージョン確認
heroku -v
herokuにRails + Postgresqlのアプリをデプロイする
あらかじめ
docker-compose down
しておきましょう。
作業しているディレクトリ(Dockerfileのあるディレクトリ)に移動します。ここではとりあえずappフォルダということにしておきます。
cd app
herokuにログインする
heroku login
コマンドを実行するとブラウザが立ち上がり、herokuへのログインを求められます。 ログインに成功した感じになったらheroku containerへのログインをします。
heroku container:login
herokuアプリを作成する
heroku create
heroku containerにdockerイメージをpushする
コマンド実行時にイメージをビルドしてくれるみたいなので、sudo権限を渡してあげないとパーミッション周りで失敗します(少なくとも自分のManjaro Linux環境では失敗)
sudo heroku container:push <コンテナ名>
アドオンを追加する
自分はPostgreSQLを利用したのでアドオンを追加してやります。余談ですが、アドオンの追加は無料のものでも、クレジットカードの登録が必要だった気がするんですが、いつのまにか不要になっているように見えます。
heroku addons:create heroku-postgresql:hobby-dev
動かす
でherokuにリリースする。何やってるのかはいまいちよくわかってないんですけど(ダメじゃん)、pushしたやつを動かすっぽいです(多分) Release Phase
heroku container:release <コンテナ名>
であとはデータベースのマイグレーションをrailsコマンドでやっておきます(上の参考ページを見た感じだと自動でやってくれるっぽい事が書いてあるんですけど、実際どうなんですかね)
heroku run rails db:migrate
動作確認
heroku open
を実行すると実際に動いているページがブラウザで開きます。
感想
権限まわりで引っかかるたびにsudoでごり押すのって美しくない感じがある・・・
systemd上でxrandrが動かないのを解決した回
目的
systemd上でXアプリケーションを動作させる。
理由
Manjaro Linuxではモニターを繋いだだけでは自動でマルチモニタにならないため。マルチモニタを使う場合は xrandr を用いて
xrandr --output LVDS1 --auto --primary --output VGA1 --auto --above LVDS1
といったコマンドをいちいち打つ必要がある。面倒なのでコマンドをシェルスクリプトにしてモニターを繋ぐたびに手動でシェルスクリプトを実行していたが、ぶっちゃけめんどくさくなってきたので自動化しようと考えた。
提案手法
同じようなことを考えることはいるもので、下記のようにタイマー機能で1秒ごとにスクリプトを実行して切り替えを自動化している人がいることがわかった。
ArchLinuxで自動でdisplayの接続を認識し調整する
上記のページはウィンドウマネージャーとして awesome 環境を用いているが、自分は Xfce なので cron か systemd を検討した。自分の環境に cron はインストールしていないので環境を汚したくないなと思って systemd で自動化することに決めた。
systemd での自動実行には systemd.timer を用いればできることがわかったので、これについて調べた。
systemd.timer について
ざっくりと言えば、<サービス名>.service と同じディレクトリに <サービス名>.timer を置いてやればいい。
systemctl daemon-reload も念の為忘れずに。
.service と .timer を書いた
autodualmonitor.service
[Unit] Description = Automatic dual-single monitor switcher [Service] Type = oneshot ExecStart = /home/<ユーザー名>/MyShellScript/auto_dualmonitor.sh Requires=lightdm.service
autodualmonitor.timer
[Unit] Description=Automatic dual-single monitor switcher : timer [Timer] OnBootSec=1min OnUnitActiveSec=1sec [Install] WantedBy=timers.target
両方とも /etc/systemd/system ディレクトリに配置した。スクリプトは上記の ExecStart に書かれている通りの場所に配置した。
トラブルシューティング
systemctl daemon-reload
してから動くか試すために
sudo systemctl start autodualmonitor.service
を実行したがエラーが出て動作しなかった。 .timer もenableにしてみたが Active: failed (Result: exit-code) になっており、正常に動作していないことがわかった。
systemctl status autodualmonitor.service
でログを見てみたところ、 Can't open screen というログが見られた。どうやら xrandr が動いていないようだ。
調べてみたところ、Archlinux wiki の次のページに答えがあった。
DISPLAY は X アプリケーションがどのディスプレイを使えばいいのか知るために使用されます。XAUTHORITY はユーザーの .Xauthority ファイルのパスと、X サーバーにアクセスするのに必要な cookie を指定します。systemd ユニットから X アプリケーションを起動する場合、これらの変数を設定する必要があります。バージョン 219 から、セッションが開始したときに DISPLAY と XAUTHORITY を systemd --user デーモンの環境にアップロードする X11 セッションアプレット /etc/X11/xinit/xinitrc.d/50-systemd-user.sh が systemd に付属するようになりました。これによって、X を標準の方法で起動しているかぎり、ユーザーサービスは DISPLAY や XAUTHORITY を使用することができるようになっています。<<
要約するに、DISPLAYとXAUTHORITYの環境変数が設定されていないとxrandrのようなXアプリケーションは動作しないということらしい。で、ターミナルから実行して動作するのに systemd では何故動作しないのかといえば、
ということだった。つまりはシェルスクリプト内でDISPLAYとXAUTHORITYを設定してやれば動作すると見ていいだろう。そこで autodualmonitor.sh(モニター切り替え用のスクリプト) を次のように書き換えた。
autodualmonitor.sh
#!/bin/bash IN="LVDS1" EXT="VGA1" export DISPLAY=:0.0 export XAUTHORITY="/home/<ユーザー名>/.Xauthority" if (xrandr | grep "$EXT disconnected"); then xrandr --output $IN --auto $EXT --off else xrandr --output $IN --auto --primary --output $EXT --auto --above $IN fi
大抵の場合、DISPLAYは:0.0なので特に考えずにそのまま書いた。XAUTHORITYは echo $XAUTHORITY を実行して調べてきたものをそのまま書いた。
書き換えてから念の為 sudo systemctl daemon-reload し、systemctl start autodualmonitor.service がエラーを出さないことを確認してからPCを再起動した。
再起動後に systemctl status autodualmonitor.timer を実行して見てみると Active: active (waiting) となっており、モニターを抜き差ししてみると、少し時間を置いてモニターが接続されることが確認できた。
まとめ
ThinkPadX230を買ったのでManjaro Linuxをインストールしたらとんでもなく起動に時間がかかるので解決した話
はじめに
Think Pad X230を中古で買いました。22,800円。
ちんこぱっど買った pic.twitter.com/qKbZfoCxHi
— ナッツツうにナッツの抜けツッツ殻ナツツ (@LuCielNoblesse) 2019年6月13日
メモリを増設して8GBにしておきました。低電力メモリで動くんだねこれ。
Think PadへのManjaro Linuxのインストール手順
1. Stable Releaseからxfce版の18.0.4のisoをダウンロード
Downloading File / - Manjaro Linux - OSDN
2. Image WriterでUSBにisoイメージを書き込み
3. Think PadのBIOSを開いてブートの優先度を変えておく。
BIOSはThinkPadのロゴが出ている状態でF1
shiftキー押しながら^キーで起動優先度を上に移動できる。USBの優先度を最上位にする。
4. 起動したらインストール
自分はパーティション消してインストールしました。
5. 終わるまで待つ
6. 再起動
インストール完了したが・・・
起動が遅い
起動が遅い!(重要)
なぜか起動に2分近くかかる始末。これを解決した。
はじめにやったこと
原因を探るために、
systemd-analyze
で起動時間を見てみた。5秒。
そんなわけないだろ・・・
次にブート時のログを見るために、
dmesg
でログを表示した。
明らかに時間がかかっているログがあり、メッセージをみると”crng init done”とあった。
ググってみると乱数生成器が乱数生成しきるまで時間がかかっているらしいことがわかった(というかもしかしてタイムアウトまで待ってる?)
対策を調べてみるとrng-toolsとかhavegedで乱数生成を手伝わせるのがいいらしいことがわかった。
今回は色々とあって縁のあるrng-toolsをインストールした。
Rng-tools - ArchWiki
rng-toolsのインストールと有効化
1. pacmanのパッケージリストをアップデートする
インストールしたてほやほやなのでパッケージリストをアップデートしないと何もインストールできないので、
sudo pacman -Syy
してやる。
2. rng-toolsのインストール
sudo pacman -S rng-tools
でrng-toolsをインストールする。
3. 確認
rngd -f
これで乱数生成器が起動(どんどん/dev/randomにぶち込まれていく状態)
dd if=/dev/random of=/dev/null bs=1024 count=1 iflag=fullblock
これをrngd -fが起動していない状態でやるとバチクソ時間がかかる。rngd -fを起動すると一瞬で終了する。サラマンダーよりはやい
4. rng-toolsのサービスを有効化
あとは起動時にrngdが起動するように設定する。
systemctl enable —now rngd.service
でOK。確認は
systemctl status rngd.service
でenabledになっているかを見ればよい。
結果
Manjaro Linuxの起動が速くなった!
具体的には2分かかっていたところが14秒で終わるようになった。
ちなみにcrng initが動いている理由をよくわかってないままやったので、その辺は後々調べておこうと思う。
GASとOutgoing WebhookでSlackのbotを作った時に引っかかった部分
GAS(Google Apps Script)とSlackのOutgoing WebhookでSlackのbotを作ってみました。
はじめに
もともとはRustで書いたものを動かすつもりでしたが、どこにデプロイするかという問題にぶち当たりました。
お金も出したくないので無料でSlack botを作れないかと思って調べたところ、GASに行き当たりました。
参考にしたのは
Slack BotをGASでいい感じで書くためのライブラリを作った - Qiita
です。
ぶち当たったところ
環境変数の扱い方
参考サイトを見てみると、
var prop = PropertiesService.getScriptProperties().getProperties();
prop.token
でAPIキーを環境変数から取り出しているみたいなのだけど、上手く動作しない。
なので
var token = PropertiesService.getScriptProperties().getProperty('SLACK_ACCESS_TOKEN');
で直接取り出した。
Slackのスタンプの扱い
Slackのスタンプは
:hoge:
といった感じにコロンでくくられているのだが、そのままこれを受け取って文字列の長さをlength()で出してしまうと、スタンプで1文字なのに、コロン2つと中の文字を合わせて6文字扱いになってしまう。
こんな感じで吹き出しのサイズがおかしくなる。
そこで文字列の長さを測る関数を別に用意した。
コロンからコロンまでを無視し、対応するコロンがない場合については巻き戻して文字列を数える関数である。
2バイト文字を2文字として数える関数にこの機能を盛り込んでおいた。半角と全角だと文字幅が違うからね。
URLエンコード
上と関連した話として、GASに飛んでくる文字はURLエンコードで飛んでくるみたいで、ASCII文字の記号は%xx形式になっている。
だから、コロンをそのまま判定しようとして
if ( text.charAt(i) == ':'){hogehoge}
としようとしても無駄である。
コロンの場合は"%3A"になるので、切り出すか、%に当たった場合に記号として判別するかした方がよい。
GASの更新
書いたスクリプトが反映されたりされなかったりして悩んだ。
「公開→ウェブアプリケーションとして導入」の後に、プロジェクトバージョンを最新にして更新しておかないとダメみたい。要検証。