メインコンテンツへスキップ

Blueskyのカスタムフィードを作成する

SkyFeedのFeed Builderを使ってカスタムフィードをつくる - Blueskyを参考にBlueskyのカスタムフィードを作成してみた。ざっくりとした手順としては、

  • Blueskyでアプリケーションパスワードを生成する
  • SkyFeedへアプリケーションパスワードを使用してログイン
  • Feed Builder - Create your first feed
  • Input Remove RegEX Sort Limit Stash+Popという種別のブロックを組み合わせて検索条件を作成する
  • 名前を付けてPublishする

という感じ。作成したカスタムフィードはこちら。

関連記事

📔 Macの「メモ」をMarkdown・HTMLでエクスポートする方法

以下のエントリにも書いた通り、Apple謹製の「メモ」アプリは継続的に改善されており、自分の用途を考えると機能的な不満はない。 🗒️ メモ管理の現状 - namaraii.com ただ、「メモ」アプリにはPDF形式でしかデータをエクスポートできないという大きな問題点がある。 PDFでエクスポートできたとしても、他のメモアプリにインポートするのは困難であり事実上のロックインだ。 とは言え、なんとかエクスポートする方法はないか調べたところ、Exporterというアプリがあった。このアプリは、 フォルダ構造を維持してMarkdownまたはHTMLでエクスポート可能 作成日、更新日を維持(Markdownの場合、FrontMatterへ出力可能) jpeg、png、gif、tiff、bmp、pdf、ics、m4a、mov、mp3の添付ファイルの書き出しに対応 という優れもので、無料で全ノートをエクスポートすることができる。 課金するとフィルタビューという機能が提供され、選択したノートブックのみエクスポートできるようだ。 全体のエクスポートはそれなりに時間がかかるので、頻繁にバックアップを取得したい人は課金すると良いかも。 蛇足 # エクスポート方法を調べる過程で知ったが、メモアプリのデータはSQlite3で管理しているらしい。 ~/Library/Group Containers/group.com.apple.notes/NoteStore.sqliteにあるファイルをワークエリアへコピーしてsqlite3コマンドでテーブル一覧を参照できた。 $ sqlite3 NoteStore.sqlite SQLite version 3.39.5 2022-10-14 20:58:05 Enter ".help" for usage hints. sqlite> .tables ACHANGE ZICINVITATION Z_METADATA ATRANSACTION ZICLOCATION Z_MODELCACHE ATRANSACTIONSTRING ZICNOTEDATA Z_PRIMARYKEY ZICCLOUDSTATE ZICNOTEPARTICIPANT ZICCLOUDSYNCINGOBJECT ZICSERVERCHANGETOKEN sqlite> select * from ZICNOTEDATA LIMIT 1; 10917|18|1|107431||| メモアプリのデータへアクセスするAPIが公開されたりしたらありがたいが、そんなことはしないだろうな。

Pro Git(第2版)

クリエィティブコモンズで公開されている Pro Git(第2版)のHTML, PDF, epub3。むかしasciidoctorで生成したもの。 Pro Git 第2版(日本語版)HTML Pro Git 第2版(日本語版)PDF Pro Git 第2版(日本語版)epub3

Blender学習ログ(2022)

はじめに # 本エントリはオープンソースの総合3DCGソフトであるBlenderの勉強していた際の作業ログに少しだけ手を加えただけのものです。 主に自分向けの内容ですが、参考にさせてもらった動画はどれもわかりやすく、これからBlederを始めようという方には取っ掛かりとして参考なるかもしれません。 自分のようなBlender初学者の場合、チュートリアル動画で操作方法を端折られたりすると、一気に途方に暮れてしまうことになりがちですが、本エントリで多く参照している3D Bibiさんの動画は、操作を省略せず丁寧に解説されているため、とてもわかりやすかったです。多謝 Blenderの勉強は今年(2022年)の1月ごろにしていたのですが、そこからしばらくBlenderに触れられてなく、かなりの部分を忘れていると思われるので、このメモを見ながら復習しようと考えているところ。 Day1 Blenderの基本操作 # 初回は「超初心者向け」とうたわれている以下の動画で勉強を始めました。 この動画に沿って同じ操作を行うことで、Blenderの基本的な操作は理解できたと思います。 ライティングに関しては操作方法を含めて理解が不十分だったため、とても暗いですね(笑) Day2 モデリングの練習(AMONG US) # 見た目がシンプルなAMONG USのキャラクターを作るチュートリアル動画で、引き続きモデリングの練習です。 以下、作業メモです。 モデリング(胴体) キューブにサブディビジョンサーフェースを追加 S-Zでリサイズ 編集モードでCtrl+Rを押し横方向へループカット(マウスカーソルをうろうろさせると線がでてくてくる)し、下で確定させる 縦をループカット Shift+Zでワイヤフレームモードにして左上と右上の頂点を選択し、G-Zで形状を調整 背面を表示して2面(ループカットしたので)を選択し、Iキーを2回押してサイズを調整(脚) S-Yでサイズ調整 G-Zで脚をつくる Eで押し出すと選択が平らになる モディファイアプロパティのレベル数、レンダーを3にする スムーズシェイドをかける 編集モードで上の面を2つ選択しG-Yで傾ける ゴーグルとリュック リュックにもサブディビジョンサーフェースを追加 モディファイアプロパティのレベル数、レンダーを3にする 縦と横、それぞれをループカットしてべベルをかけて形を調整 ゴーグルにもサブディビジョンサーフェースを追加 モディファイアプロパティのレベル数、レンダーを3にする 縦をループカットして形を調整 着色 Zキーを押してレンダービューへ ゴーグルは荒さ0、伝播0.8ぐらい カメラ設定 Ctrl + Alt + 0(現在の視点にカメラを合わせる) ビュー→視点をそろえる→現在の視点にカメラを合わせるでもOK ライト設定 ポイントからエリアに変更する レンダープロパティのカラーマネジメント ルックをハイコントラスト、露出を0.8に かわいい。

Amazonから書誌情報をTextwellへ取り込むブックマークレット

bibinfo-exporter/script.js at main · goryugocast/bibinfo-exporterを参考にAmazonから書誌情報をへ取り込むブックマークレットを作成した。 直接Obsidianに取り込むのは自分の運用に合わないためTextwellへ追記するように。 こちらは書籍専用で、著者名や出版社、出版日などを取り込む。 Amazonの書誌情報をTextwellの追記するブックマークレット javascript: (() => { const dest_path = 'notes'; //ファイルを格納するパス const amazon_id = 'namaraiicom-22'; // アフィリエイトID let p = document.getElementById("productTitle"); //書籍のタイトルの処理 p = p ? p : document.getElementById("ebooksProductTitle"); const title = p.innerText.trim(); let asin = document.getElementById('ASIN'); //ASIN番号の処理 const a = asin ? asin.value : document.getElementsByName('ASIN.0')[0].value; const url = `https://www.amazon.co.jp/exec/obidos/ASIN/${a}/${amazon_id}/`; const link = `[${title}](${url})`; let image = document.getElementById("imgTagWrapperId"); //書影の処理 image = image ? image : document.getElementById("ebooksImgBlkFront"); const imageurl = image.querySelector("img").getAttribute("src"); const c = document.getElementsByClassName('author'); const pub = []; const ct_list = []; // ctの各要素を保存する配列を新たに定義 for (let g = 0; g < c.length; g++) { const at = c[g].innerText.replace(/\r?\n/g, '').replace(/,/,''); const pu = at.match(/\(.+\)/); const ct = at.replace(/\(.+\)/,'').replace(/ /g,''); ct_list.push(ct); // ctを配列に追加 pub.push(`${pu} [[${ct}]]`); } const author = pub.join(' '); let h1title = `『${title}』`; h1title = h1title.replace(/[\\/:*?"<>|.]/g, char => ({ ':': ':', '\\': '\', '/': '/', '?': '?', '*': '*', '"': '”', '<': '<', '>': '>', '|': '|', '.': '.' }[char])); const mdimage = `[![|100](${imageurl})](${url})`; // 登録情報欄を取得 let detail = document.getElementById('detailBullets_feature_div'); if (!detail) { const subdoc = document.getElementById("product-description-iframe").contentWindow.document; detail = subdoc.getElementById("detailBullets_feature_div"); } const detailtext = detail.innerText; const pubdata = detailtext.split(/\n/); pubdata[2] = pubdata[2]?.slice(10); // 出版社 const date = new Date().toLocaleDateString('sv-SE'); const lines = `---%0D%0Atitle: "${h1title}"%0D%0Adate%3A%20${date}%0D%0Aupdated%3A%20${date}%0D%0Andl%3A%0D%0Atags%3A%20読書メモ%0D%0Adraft%3A%20true%0D%0A---%0D%0A${mdimage}%0D%0A-%20${link}%0D%0A-%20${author}%0d%0A-%20${pubdata[2]}%0D%0A%0D%0A%23%23 関連・思い出した本 %0d%0A%23%23 読書メモ%0d%0A`; const app = `textwell:///add?text=${lines}`; window.open(app); })(); こちらは一般的な商品の画像と商品名を取り込む。 Amazon商品の商品名と画像へのリンクをTextwellに追加するブックマークレット javascript: (() => { const dest_path = "notes"; //ファイルを格納するパス const amazon_id = "namaraiicom-22"; // アフィリエイトID let p = document.getElementById("productTitle") || document.getElementById("ebooksProductTitle"); //書籍のタイトルの処理 const title = p.innerText.trim(); const asinElement = document.getElementById('ASIN') || document.getElementsByName('ASIN.0')[0]; //ASIN番号の処理 const a = asinElement.value; const url = `https://www.amazon.co.jp/exec/obidos/ASIN/${a}/${amazon_id}/`; const link = `[${title}](${url})`; const image = document.getElementById("landingImage"); const imageurl = image.getAttribute("src"); // 自分が必要なパラメータに変換 let h1title = title.replace(/[\\/:*?"<>|.]/g, char => ({ ':': ':', '\\': '\', '/': '/', '?': '?', '*': '*', '"': '”', '<': '<', '>': '>', '|': '|', '.': '.' }[char])); const mdimage = `[![|100](${imageurl})](${url})`; const lines = `${mdimage}%0D%0A%0D%0A${link}%0D%0A`; const app = `textwell:///add?text=${lines}`; window.open(app); })();