時々唸るファンの音

色々と勉強してみたいと思ってる人の備忘録。

Obsidianにおいてリンク機能が上手く機能しなかったときに見るべき点

内容

  • 状態
    Obsidianを使っている中で上手くリンク機能が働いていない箇所を発見した。 相対パス表記になっていて、NotePlanなどで上手くリンクが動かない状態だった。

画像:f:id:noisy_f:20210201195906p:plain

最初は上記のようなファイル構造。 パスの書き方的にはおそらく間違っていない状態である。

  • 悪かったところ
    おそらく、同じファイル構造だったためObsidian側で認識が上手にできなかった可能性がある。

  • ここを改善した
    同名になりがちなデイリーで使うもののファイル名を変更した。

画像:f:id:noisy_f:20210202022942p:plain

具体的には
2021 → YWT_2021 E こうすることで、Obsidianやその他アプリで動くリンクにすること成功した。

思った事

  • 私の粘り勝ちである。えらい。
  • きれいに整頓しようとすると、こうなりそうだから次回以降も気をつけたい。
  • 他に上手くできなかった人の参考になれば幸いです。

参考リンク

なし

思考や出来事を整理したい【Obsidianを導入した話】

なにかいい方法はないだろうか。

ヒントはこの記事から…

ipadworkers.substack.com

 

ふぁん

「メモを取るは取るけど、いつも書きっぱなしになるなあ

書きっぱなしだから、どこに何書いたっけ状態になるなあ」

と思っていたのですが、

なるほど、メモとメモがリンクでつながれば

点と点が線になる感じになるね!確かに!

 

と合点承知した私。

 

NotePlan3に魅力を感じたものの、サブスクで結構いいお値段するので、PCのみでの扱いにはなるものの、Obsidianというものが近いのか!ということで早速落としてみました。

 

Obsidian

 

 

ここらへんで概要を掴んで

Obsidianのここが良い | シゴタノ!

👁脳をデジタル化するメモアプリObsidianを使いこなす方法|滝林夏来|note

Obsidianは最高のマークダウン『メモ』アプリである | Output 0.1

 

 

 

具体的な設定はここを参考に

メモツールObsidianの使い方 - Qiita

 

テンプレートを作る

 わからないまま使ってるので、改善の余地があるけど 

ひとまずテンプレートを作る作業をしました。

 

  1. 今日のYWT
  2. 通院メモ
  3. いつものメモ

 

この3つはきっとよく使うだろうと判断して作成

①今日のYWT

f:id:noisy_f:20210201194413p:plain

 

Obsidianの特色にデイリーノートというのがあるのだけど「これ、きっとYWT振り返りのやつかけばいいんじゃないか?」って思って、作ったテンプレート。

 

私のサブブログ

fans-ywt.hatenadiary.jp

ここにYWTを投稿することにしたので、上半分を切って貼れば投稿完了って感じ。

便利そう。

 

 

②通院メモ

 

f:id:noisy_f:20210201195347p:plain

 

定期通院用のテンプレート。

前回から今回までの経過やなんやらを書いておくところと

先生に聞きたいこと

次までにやりたいことを書いておく

 

限られた診療時間で最大限の効果を出すために以前からやってたのだけど、

これが溜まってくのはすごくよさそう。

1年できたら立派な資料になりそう。

 

③いつものメモ

f:id:noisy_f:20210201194410p:plain

その他にいろんなメモを書き込めるようなやつを作っておいた。

これをとにかくmemomemoフォルダと名付けた雑多なフォルダに入れることにした。

 

 

ファイルの構造はこんな感じに。

 

f:id:noisy_f:20210201195906p:plain

 

 

Default はとりあえず書いたメモがある場所

そこから振り分ける感じで運用しようと!

 

もくじは2021年のトータルのもくじ

サブもくじはもじから飛べる項目それぞれのもくじ

dailyは日々溜まっていくものや、月に数回必ず溜まっていくものを割り振っている。(サブもくじ項目)

わかったことリストだけはちょっと違って、memomemoで蓄積した内容についてアクセスしやすくするためのメモを置く場所。

 

(めっちゃ説明分かりづらい!!!!!)

(うまく説明できなくてすみません;;)

 

あとはファイル置く場所だったり、

テンプレートの置く場所などを設置してみた。

 

 

運用方法やテンプレートはアップデートしながらいい感じにしていきたい。

 

Markdown形式の記述を学ぶ

Markdown形式を使ってガッツリものを書く経験があまりなかったので、調べながら書いています。

 

ここらへんを参考に書いてみました。

Markdown記法 サンプル集 - Qiita

 

なれるまでは調べながら書くことになりそうです。

 

ちゃんと続くかわからないけど

これがある程度続いたら、いい振り返り材料になりそう。

できるだけ頑張る精神でやっていきたい。

 

 

 

 

 

シンクルームを用いて収録するpodcast<実践編>

前回 タイトル通りのことを構想したふぁんだったのですが、

これを無事実践することに成功しましたのでここに報告します。

 

ふぁんFMに第0回として、お試し収録したのを近日アップロード予定だったりします!無事アップロードが出来たら聞いていただければうれしいなーと思います。(その際にはこちらでもそっと報告します。)

 

実際にシンクルームを使って収録してみて

 

まずはこれを聞いてもらおう!

 

 ディスコードも音質相当いいけど、それを飛び越える音質の良さがあった。

そしてズレない!!!ズレない!!!!!!!!!!!!!!!!!!

 

いいところもそれなりにあるんだけど、簡単には導入できないんだろうなって点を挙げておく。

回線がよくないとツラい

これは当然なんだけど、回線がかなり強くないとラグが出てプツプツする。

ゴールデンタイムに使用する際には回線品質にある程度自信がないとおそらく使い物にならないはず。

インターフェースの設置は慣れてないと大変

私は結構前からそういう機材を使ってたのである程度扱えるけど、

触ったことがないと結構大変みたい(友人を見てて)

編集作業は普段よりは丁寧にする必要がある

音声編集、素人ながら慣れてきた感じなのですが………

今までの知識を必死に使いながら編集しました。

ホワイトノイズは自分ひとりで収録するよりは結構強くのるので、その除去作業が普段より大変だったり、通信品質が悪い時にプツプツしたときのプツプツをなるべく柔らかくする作業とかは新しい作業だったりした。

逆に、通信品質が安定してるときの音声は抜群にきれいなのでホワイトノイズを取る作業を少しするだけで他にはほぼいじらなくてよかった。

無編集でもそれなりにはきれいだけど、聞きやすさを上げるにはここら辺の編集作業はあったほうがいいのかなー?と個人的には思う。(あくまで個人の感想です)

 

まとめ

簡単には導入できないし、これをpodcastにするには少し丁寧に編集したほうがよりよい感じになるって点はあるけど、完全オンラインで収録でいい感じの音質で収録する新たな方法として、私はもうちょっとコレを試してみたい…!

 

 

シンクルームを用いて収録するPodcast<構想編>

おひさしぶりです!

ふぁんです。

 

今日はPodcastの収録方法についてのブログを書こうと思います。

ズバリ…

 

シンクルームを用いて収録するPodcast

まずは、シンクルームの紹介をしようと思います。

公式サイトはこちら→

syncroom.yamaha.com

 

YAMAHAが開発したシンクルームというアプリケーションです。

もともと遠隔にいる人たちでセッションをする目的で作られた感じのアプリだったと思います。

何度かリモートで収録してるのですが、

一緒にタイトルコールをしようとするとズレてしまったり

通話の品質が安定しなかったりと問題があったのですが

 

あれ…もしかしてシンクルーム使えばラグ0でいい音質で収録できるのでは…?

と思った感じです。

 

このアプリケーション、ASIOドライバ対応してるオーディオインターフェースないと動かないとか、回線が強くないとダメとかあるのですが、それさえクリアできればいい環境で収録できそうな気がします!

 

我が家の中で、2台PCをセッティングして、テスト収録したのですが

思いのほかいい感じで驚いています!

 

残念ながら、夫は声出し・顔出しNGなのでオープンにはできません…

(なので、このブログのタイトルが構想編になっています)

 

私なりの詳しい使い方のまとめとかは

いずれきちんと収録出来たときに実際の様子と合わせて

<実践編>としてまとめようと思ってます。

 

現在、新番組の構想を練っています。

(ふぁんfmもそのうち更新予定です…ごめんなさい)

高校時代の友人と二人でおしゃべりする番組を作りたいなと思っています。

 準備中ですので、気長にお待ちください。

 

シンクルームを使えば、3人でも4人でも声合わせてタイトルコールできます!!!!!

楽しそう~~~~!

オーディオインターフェースとアナログミキサーを使用してPodcastの収録をした話

こんにちは~~!ふぁんです♪

Podcast 無理のない範囲で気軽に更新しようと思ってます!

誰かゲストを呼ぶのになるべくハードルを下げたい。と考えていました。

 

けっこうきれいな音質で収録しようとすると、

相手にも収録をしてもらうってのは一つ手段だと思うのですが

相手が収録の環境を持ってなかったりするとなかなか大変だよなぁと思っていたのです。

 

そこで、私の持ってるオーディオインターフェースとアナログミキサーである程度の解決ができそうだったので、ご紹介しようと思います。

 

今回しようしたもの

オーディオインターフェース:AG03

アナログミキサー:XENYX502

収録用PC

通話用PC

 

①まず、通話用のPCにAG03を接続します。

②AG03のLINEOUTに接続------>XENYX502のINPUTに接続

③XENYX502のヘッドフォンーーーーー>収録用PCのマイクの部分に接続

 

接続周りはこんな感じです。

 

あとは

通話用PCでの通話を

収録用PCの録音ソフトで拾ってあげる感じです。

 

AG03って、LOOPBACKついてるじゃん?

そうなのですが、ループバックをすると

相手の声がそのまま相手に返ってくるという現象が起きてトークバックが起きてしまうこともあります。

それを確実に阻止しつつある程度の品質を保とうとしたらこうなりました。

 

仮想ステミキじゃだめ?

たぶん全然ありだとおもうけど、

私の環境で適切に動作してくれなかったので、アナログミキサーに頼ることに。

確実に取れるし遅延も少ないし、悪くないと思ってる……!

 

相手の通話品質がある程度しっかりしてれば、

そのままきれいに収録できるよ!

 

~おしらせ~

ふぁんFMではゲストに出てもいいかたを募集しています!

ふぁんと雑にぬるっと雑談してもいいよ!って方がいたら

どうぞ気軽にご連絡ください~!

お待ちしております~~~~!

初心者がdiscordのbotを作ったお話。

おひさしぶりです

まずはさわやかに挨拶。

めっちゃ久しぶりです。生きてます。少し現実逃避してたけど、一応生きてます……。

お休みしてる間にいろいろやるべきことのスマート化をしました。

 

本題

ということで、本題いきますね。

今日は、discordのbotをつくってみた!というお話をしたいと思います。

まずは、こちらを見て頂こう。

 

あの後ちょっと機能足したけど、基本的にはコレ。 

なんでソレを作ろうとしたのか。

巷でちょこっと話題になってるN予備校のプログラミング入門でslackのbotを作ろうという内容があるのですが、それに取り組んでみたあと

ふぁん「あれ、これアレでは……よく使うdiscordのbot作れば楽しいんじゃね…?」

 

思い立ったが吉日…

さっそく取り組むことに。

 準備編

→基本的にはN予備校のプログラミング入門で基本的な環境構築ができてたのでそれに準拠します。

(色々記事を見てたら、ブラウザ上でdiscordbotを作れるサービスもあって試しに利用してみたんだけど、5分に1回アクセスさせるのがめんどくさかったし、やりたいことのテンプレートを利用したときのbotの動きがちょっと怪しかったので使用しないことにしました。)

 

N予備校プログラミング入門の記事のままだと、nodeのバージョンが低くて何もできないので、とりあえず最新版をツッコみます。

 

discord.jsを使ってもよかったのですが、

今回はErisを採用。(やりたいことの記事が全部コレ使用のモノだったので)

 

これらをすべて準備して、いよいよコードを書いていきます。

コードを書く

今回やらせたかったことは以下の事です

botにリプライでヘルプを出す

●「おみくじ」と記述でおみくじ機能

●ボイスチャンネルの入退室のお知らせを指定のチャンネルに流す。

--後で実装したのはおみくじ機能とほぼ一緒ですが、

FF14のコンテンツ、トレジャーハントの扉チョイス支援

(おみくじ機能の中身変えただけ)

 

記述の仕方は違うとは思うんだけど、

どういうことができるのか どんなイメージで実装するのかを参考にしたのがこちら。

 

scrapbox.io

 

やりたいことの逆引きで、ああこんなことができるんだなーを想像。

あとは一つずつ実装していく感じです。

 

 

const Eris = require("eris");

// botのトークンID
var bot = new Eris(
  ”botのトークンIDを調べて入れる。”
);
const textChannelId = "発言したいテキストチャンネルのIDを調べて入れる。";


bot.on("ready", () => {
  // botの準備できたら呼び出されるイベント
  console.log("Ready!");
});

// チャンネルに発言があったときのアクション

bot.on("messageCreate", (message) => {
  // botのメッセージは無視
  if (message.author.bot) return;

  // botにメンションでヘルプ
  message.mentions.forEach((user) => {
    if (user.bot) {
      bot.createMessage(
        textChannelId,
        "このbotのできる事 \n ●VCチャンネルの入退室のお知らせ \n ●「おみくじ」… おみくじがひけます \n ●「!扉」…地図の扉チョイス支援します \n ●「!深層」…地図の扉チョイス支援をします。(深層用) \n となっております。" 
      );
      return;
    }
  });
  
// おみくじ機能
  if (message.content === "おみくじ") {
    const lots = ["大吉", "中吉", "小吉", "末吉", "凶"];
    const lot = lots[Math.floor(Math.random() * lots.length)];
    bot.createMessage(textChannelId, `君の運勢は${lot} です!`);
  }
// 地図
  if (message.content === "!扉") {
    const doors = ['左','右'];
    const destinyDoor = doors[Math.floor(Math.random() * doors.length)];
    bot.createMessage(textChannelId, `君の行くべき道は${destinyDoor} だ!!`);
  }
  if (message.content === "!深層") {
    const doors = ['左','右','中央'];
    const destinyDoor = doors[Math.floor(Math.random() * doors.length)];
    bot.createMessage(textChannelId, `君の行くべき道は${destinyDoor} だ!!`);
  }

// 吉田
if (message.content === "!吉田") {
  bot.createMessage(textChannelId, `ミラクルフラッシュが決まったァァァ!`);
}
});

//入退室処理
bot.on("voiceChannelJoin", (member, newChannel) => {

  let ch = newChannel.guild.defaultChannel;
  bot.createMessage(
    textChannelId,
    member.username + "がVCチャンネル[" + newChannel.name + "] に滑り込んだ!"
  );
});

bot.on("voiceChannelLeave", (member, oldChannel) => {
  let ch = oldChannel.guild.defaultChannel;
  bot.createMessage(
    textChannelId,
    member.username + "がVCチャンネル[" + oldChannel.name + "] から逃げ出した!"
  );
});

// Discord に接続します。
bot.connect();

これで最初にやりたいと思ったことは全部実装できてる(はず)です。
botトークンIDは絶対に他人に漏らしてはいけないということを心にとめましょう。
ダメ、絶対。

botのIDの取得の仕方は先人が色々書いてくれてるので、詳しくは割愛するけど
Discord Developer Portalここからbot作ったりなどの管理ができるので、このあたりをよく見てみるといいと思う。

作ってみた感想

まずはN予備校のコンテンツがすごくてだいたい環境構築出来てたのがありがたかった。
これ、独力で全部やろうとするとすごく大変そう。
最初詰まったのは、Erisがうまくインストールできなかったことなんだけど、
よくエラーメッセージ読んだら「バージョン低くて無理です…」って感じだったから、バージョン上げてみたらスイスイいったので
きちんとエラーメッセージは読もうという感じです。

あとはbotの発言を無視しないと永久にチャットが流れてしまって、こういうことにきをつけないとダメなんだな~と。

色々勉強になりました。

楽しかったです。。

フィボナッチ数列とメモ化についての備忘録

久しぶりに技術っぽいブログを書く

おひさしぶりです。

ちょっとずついろんなことを学んでいる今日この頃です。

(たまにどうぶつの森してるけど…


 

今日は勉強していて初耳だったメモ化についての備忘録です。

私のために書くので分かりづらいとは思いますが…

知らなかった人は「へ~!」

知ってた人は「そうそう」って思ってくれれば幸いです。

(そもそもの解釈が間違ってたらさーせん!)
 

フィボナッチ数列について

これは有名な数列だから、ご存じの方も多いと思います。

n番目のフィボナッチ数をFnであらわすと、Fnは再帰的に…

F0 = 0,
F1 = 1,

Fn+2 = Fn +F(n+1) (n≧0) で定義される…

フィボナッチ数 - Wikipediaより

ってやつ。

実際の数字で言うと
0,1,1,2,3,5,8,13,21,34,55,89,144,233....って感じにふえてくやつだね。

0 と 1 があって
0 + 1 = 1
1 + 1 = 2
2 + 1 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
(以下略)
これを式にすると上記のものになるって感じだ。

それをプログラミングするとどうなる…?

私の安直な頭で最初に思い浮かんだのがコレ

JavaScript>

function fibonacci(n) {
  if (n === 0) {
    return 0;
  } else if (n === 1) {
    return 1;
  }
  return fibonacci(n - 1) + fibonacci(n - 2);
}
const length = 40;
for (let i = 0; i <= length; i++) {
  console.log(fibonacci(i));
}

一応出力はできるけど、const lengthを増やした時になんだか早くない。
なんでだ~?って思ったら
const lengthを増やすと爆発的に足し算する回数が増えてしまうみたいなんだって。
(こういう処理の増え方を指数オーダーと言うらしい…しらなかった…)

そこでアルゴリズムを使ってみるといい。

1度使った計算を保存し、後からをそれを読み取れればもしかして…
大幅に計算量が減るのでは……

そういう小技を「メモ化」というらしい。

なるほどなるほど。

それを実際のソースコードにするとこうなる。

JavaScript>

const memo = new Map();

memo.set(0, 0);
memo.set(1, 1);

function fib(n) {
  if(memo.has(n)) {
    return memo.get(n);
  }
  const value = fib(n - 1) + fib(n - 2);
  memo.set(n, value);
  return value;
}

const length = 40;
for (let i = 0; i <= length; i++) {
  console.log(fib(i));

なるほどなるほど、

memoの1番目には0、memoの2番目には1が入っていて
もし、nにすでにnが含まれていたらnを返し、
入ってなかったら計算済みのフィボナッチ数をmemoの中にぶち込むのか…?
(という雑な認識)

そして最後にvalueを返して出力…
なるほど…

たしかに足し算の回数が圧倒的に少ないように思える。
っていうか少ないじゃん。

これ考えた人すごく賢い、賢い…すごい…

ということでいろいろ勉強した1日でした。まる。