Creating a Personal Knowledge Management Tool with Just a 15-Line Shell Script

Introduction When reading books or articles, you may want to systematically manage the notes you’ve written. Currently, there are many excellent knowledge management tools available. Confluence Notion HackMD Boost Note There are countless tools when you also include mind mapping tools. I am a minimalist and has the following preferences: Manage personal notes like code on Github View notes in a mind map format from the web Use a free tool instead of a subscription-based service Thererfore, I came up with the idea of creating a custom personal knowledge management tool....

May 3, 2022 · 5 min · 950 words · Me

M1 Mac (macOS Monterey 12.2.1)でpyenv/Python開発環境構築

はじめに 先日M1のMBPを入手したので、早速Pythonの開発環境を構築しました。 Intel Macと比べて大きく違うので、昔メモったIntel Macの環境構築手順が使えなくなり、新しく環境構築の記事を書こうと思いました。 少しでもお役に立てれば幸いです。 この記事では Homebrewは使わないで!(動くけど難易度高い) pyenvは使わないで!(動かない=2021年2月時点) と記述していましたが、おそらく2021年2月時点ではHomebrewやpyenvなどはまだM1 Macに対応していない(?)と考えられます。現在(2022年4月)では、少し設定は必要ですが、問題なく動作できるようになりました。 Homebrew まずはHomebrewをインストールします /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) M1 MacではHomebrewによってインストールされたパッケージは/usr/local/bin/hogeではなく、/opt/homebrew/bin/hoge保存されるので、brewをインストールした後は環境変数を設定する必要があります。 以下を.bashrcか.zshrcに追加して、ターミナルを再起動すると、brew installは問題なく動作します。 export PATH=/opt/homebrew/bin:$PATH export PATH=/opt/homebrew/sbin:$PATH fishユーザはこれを実行してください。 set PATH /opt/homebrew/bin /opt/homebrew/sbin $PATH pyenv pyenvとvirtualenvをインストールします brew install pyenv brew install pyenv-virtualenv ここまでは問題ないはずです。 続いてバージョンしてPythonをインストールします。 たとえば Python 3.8.12 pyenv install 3.8.12 しかし、うまくいきません pyenv install 3.8.12 python-build: use openssl@1.1 from homebrew python-build: use readline from homebrew Installing Python-3.8.12... python-build: use readline from homebrew python-build: use zlib from xcode sdk BUILD FAILED (OS X 12....

April 22, 2022 · Me

Web開発ど素人がNode.jsで多言語Webニュースアプリ作ってみた

目的 筆者自身はトリリンガル(自称)のため、簡単に日本語、英語、中国語などの複数の言語のホットニュースを読めるサービスががあると便利だなとずっと思っていました。「Google Newsで良くない?」って言われそうなところですが、Google Newsはやや使いづらいと感じました。 例えば、 言語を切り替えるのに「言語地域→候補から選ぶ→更新」3回クリックする必要がある 本当にヘッドライトしか閲覧したくないのに、「おすすめ」や「ピックアップ」などがうるさい モバイルのweb版が見づらい・アプリをダウンロードしたくない 芸能ニュースにまったく興味がないため、ニュースの表示をカスタマイズしたい また、やってみないと(何かを残さないと)学んだ技術をすぐ忘れるのはもったいないのも考えて、多言語ニュースWebアプリを自作するという発想に至りました。 使った技術 バックエンド NodeJS Express フロントエンド インタラクションがほぼないため、フレームワークは使っておらず、DOMをいじっただけ CSSはStart Bootstrapの無料テンプレートを使用 DB MongoDB インフラ Heroku コスト 毎月7ドルだけです!!(Heroku Hobbyの料金) 成果物 https://www.multitrue.news https://github.com/aibazhang/multitrue それでは、詳細を解説していきます。 下準備 ニュースはどこから収集するか 最初はニュース収集するかについてけっこう時間を費やしました。ニュース関連のAPIがかなり多いですが、 ある程度の無料枠がある 多言語のニュースが簡単に取れる 使いやすさ 3つの観点から考えて、NewsAPIとNews dataの2つのAPIに絞りました。ただ、後々News dataは言語を指定しても他の言語のニュースが混ざっていることがあると気づいたので(例えば、言語を日本語と指定したにも関わらず、日本関連の英語ニュースが出てくる)、NewsAPI一択となりました。ちなみに、こちらの記事はNewAPIについて詳しく説明しています。また、RSSなど他の人が作ったニュースAPIを使わないという方法もあるようですが、今回は試していなかったです。 データベース ニュース情報を収集するAPIを見つけましたが、ユーザがリクエストを投げるたびに、NewsAPIに叩くのは明らかに現実ではないので、ニュースを保存するDBが必要です。データ量が少ないかつ永久無料枠がベストなので、MongoDB@Atlasを選びました。AWSとかにいい感じにデポロイしてくれるし、便利です。(無料枠の上限は500MB)また、テーブルはせいぜい1つ、2つくらい、リレーションも特にないはずなので、RDBを使う必要もありませんでした。 フロントエンド CSSから実装するはだるいので、Start BootstrapにあるClean blogを使わせてもらいました。(感謝) 詳細 システム構成はこんな感じです。図を見ていただくとわかると思いますが、特にややこしいことをやっていないです。 定期的にNewsAPIからデータと取って、Mongodbに入れます ユーザからのリクエストが来る度に、バックエンドでhtml(正確にいうとpug)を作って、レスポンスを返します。いわゆるSSR(Server Side Rendering)ですね。 コスト面とシンプルさを考えているため、デポロイはHerokuというクラウドプラットフォームサービスを利用しています NewsAPIからMongodb データの定期取得ために、Node.jsのスクリプトを書きました。 NewsAPIの無料枠は100req/dayそして複数の言語のニュースを取得したいといった制約があるので、cronを使って一日の取得回数を制限しています。data-import-config.jsonはルートの下にあるデータをインポートする際のconfigファイルです。 ソース const dotenv = require('dotenv'); const NewsAPI = require('newsapi'); const Cron = require('croner'); const dataImportConfig = require('....

April 18, 2022 · Me