Symdon Blog
infra 構成管理
インフラを刷新するときに気をつけること
既に稼働しているインフラがあって、インフラ構成が非常に悪く刷新しなければならないこともある。 そんな時に行うべき作業をリストアップした。 既存のインフラのノードを図にする 既存のインフラの通信エッジで図にする ノードで動作しているプロセスをリストアップする 各構成要素をlocalで構築できるようにvagrantを作る AWSであればCloudFormation化する 構成管理がなければ構成管理する デプロイスクリ ...
所要時間: 約 1分, 作成: 2022/1/15, 更新: 2022/1/15
ansible cowsay
Playbook実行時に変数の入力をさせるvars_prompt
AnsibleのPlaybookを作成して実行していると実行前になんらかの変数を入力させたいことがある。 vars_prompt を使うと実現できる。 - name: Test hosts: localhost vars_prompt: - name: "input_var" prompt: "INPUT: " confirm: no private: no default: "fish" tasks: - debug: msg="{{ input_var }}" 試しにbeefを指定する。 .venv/bin/ansible-playbook playbook.yml [WARNING]: Host file not found: /etc/ansible/hosts [WARNING]: provided hosts list is empty, only localhost is available INPUT: [fish]: beef _____________ < PLAY [Test] > ------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ______________ < TASK [setup] > -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ok: [localhost] ______________ < TASK [debug] > -------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || ok: [localhost] => { "msg": "beef" } ____________ < PLAY RECAP > ------------ \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || || localhost : ok=2 changed=0 unreachable=0 failed=0 ...
所要時間: 約 1分, 作成: 2017/3/1, 更新: 2022/1/15
ffmpeg mp3
ffmpegで無音のmp3ファイルを生成する
ffmpegを用いて無音のmp3ファイルを生成する。 ffmpeg -f lavfi -i anullsrc=r=44100:cl=mono -t <seconds> -aq 9 -c:a libmp3lame out.mp3 入力フォーマット: lavfi -f では入力フォーマットを指定する。 通常入力フォーマットは拡張子から判断したものが使われる。 例えばinput.mp4の場合、MP4形式となる。 今回は入力を anullsrc にしたいため、INPUT仮想デバイスである lavfi を指定する。 どのような入力にするかは`-i`で指定する。 Libavfilter input virtual device. This input device reads data from the open output pads of a libavfilter filtergraph. For each filtergraph open output, the input ...
所要時間: 約 2分, 作成: 2022/1/15, 更新: 2022/1/15
ffmpeg
ffmpegで使用できるフォーマットを調べる
ffmpeg1は音声や動画の録音/変換/ストリーミングを行なうツール。 使用可能なフォーマットは ffmpeg -formats で確認できる。 ffmpeg -formats File formats: D. = Demuxing supported .E = Muxing supported -- D 3dostr 3DO STR E 3g2 3GP2 (3GPP2 file format) E 3gp 3GP (3GPP file format) D 4xm 4X Technologies E a64 a64 - video for Commodore 64 D aa Audible AA format files D aac raw ADTS AAC (Advanced Audio Coding) D aax CRI AAX DE ac3 raw AC-3 D ace tri-Ace Audio Container D acm Interplay ACM D act ACT Voice file format D adf Artworx Data Format D adp ADP D ads Sony PS2 ADS E adts ADTS AAC (Advanced Audio Coding) DE adx CRI ADX D aea MD STUDIO audio D afc AFC DE aiff Audio IFF D aix CRI AIX DE alaw PCM A-law D alias_pix Alias/Wavefront PIX image DE alp LEGO Racers ALP DE amr 3GPP AMR D amrnb raw AMR-NB D amrwb raw AMR-WB ...
所要時間: 約 5分, 作成: 2022/1/15, 更新: 2022/1/15
github
GithubにWebブラウザからファイルをコミットする
GithubはWebブラウザからファイルをコミットすることができる。 Gitの操作を覚える必要はない。 以下ではWebブラウザからファイルをコミットする手順を解説する。 リポジトリのトップページを表示する まずブラウザにリポジトリのトップを表示させる1。 アップロードの操作を開始する 画面右上の方にあるAdd fileボタンをクリックする。 するとCreate new fileとUpload filesのどちらかを選択でき ...
所要時間: 約 2分, 作成: 2022/1/15, 更新: 2022/1/15
python
Pyhtonのcollections.Counterで数を数える
collections.Counterで数を数える ログなどを集計していくと出現個数を数えたい場合がある。 例えば以下のようなデータのstatusの数を数えたいとする。 data = [ {'tag': 'foo', 'second': 1, 'status': 'success'}, {'tag': 'bar', 'second': 1, 'status': 'success'}, {'tag': 'baz', 'second': 4, 'status': 'success'}, {'tag': 'foo', 'second': 1, 'status': 'success'}, {'tag': 'bar', 'second': 1, 'status': 'success'}, {'tag': 'baz', 'second': 4, 'status': 'success'}, {'tag': 'foo', 'second': 1, 'status': 'fail'}, {'tag': 'bar', 'second': 1, 'status': 'success'}, {'tag': 'baz', 'second': 4, 'status': 'success'}, {'tag': 'foo', 'second': 1, 'status': 'fail'}, {'tag': 'bar', 'second': 1, 'status': 'success'}, {'tag': 'baz', 'second': 4, 'status': 'success'}, {'tag': 'foo', 'second': 1, 'status': 'fail'}, {'tag': 'bar', 'second': 1, 'status': 'success'}, {'tag': 'baz', 'second': 4, 'status': 'success'}, ] for文でその要素が出てきたらカウンタをインクリ ...
所要時間: 約 1分, 作成: 2022/1/14, 更新: 2022/1/14
python
イテラブルなオブジェクトから指定した条件に一致するn番目の要素を1つだけ取得する
イテラブルなオブジェクトから指定した条件に一致する先頭の要素を1つだけ取得してみます。 elementsは2〜9までの整数のリストです。 >>> elements = list(range(2, 10)) この中から最小の9の約数を取得します。 >>> next(filter(lambda n: 9 % n == 0, elements)) 3 取得できました。filter()はfilter objectを返します。これはイテラブルなオブジェクトです。 >>> filter(lambda n: 9 % n == 0, elements) <filter object at 0x10fcfab38> >>> next()関数はイテラブルオブジェクトの次に取得できる要素を返 ...
所要時間: 約 2分, 作成: 2022/1/14, 更新: 2022/1/14
swift ios
iOSの画面遷移サンプルアプリ AnimatedTransitionGallery をbuildしてみる
https://github.com/shu223/AnimatedTransitionGallery をbuildしてみます。 ソースコードを取得します。 $ git clone [email protected]:shu223/AnimatedTransitionGallery.git $ cd AnimatedTransitionGallery submoduleがあるのでそちらも取得します。 $ git submodule update --init --recursive ソースだけなら57MB程度のようです。 $ du -chs . 57M . 57M total TTMAnimatedTransitionGallery.xcodeproj をXCodeで開きます。 $ open TTMAnimatedTransitionGallery/TTMAnimatedTransitionGallery.xcodeproj XCode上で再生マークをクリックします。 しばらくするとiOSシミュレータが起動します。
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
jq
jq tips
属性を複数取得する $ echo '{"foo": 1, "bar": 2}' | jq '[.foo, .bar]' [ 1, 2 ] 参考 jq Manual (development version)
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
emacs
purcell/emacs.dを試す
emacs.dなのにgithubのstarが3000以上も付いていて何だろうと思ったけどmelpaのメンテナーのemacs.dっぽい。 私のemacs.dはかなり自己流なので、指針があるならそっちに合わせたい。ちょっと試してみようと思う。 git clone [email protected]:purcell/emacs.d.git .emacs.d lispディレクトリ配下に各種設定が書かれている。
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
rustlang cargo
RustでHello world!
Rust入門するので "Hello World!!" します。 内容は https://doc.rust-lang.org/book/getting-started.html を途中までやった時のメモです。 インストール curl https://sh.rustup.rs -sSf | sh info: downloading installer Welcome to Rust! This will download and install the official compiler for the Rust programming language, and its package manager, Cargo. It will add the cargo, rustc, rustup and other commands to Cargo's bin directory, located at: /Users/sximada/.cargo/bin This path will then be added to your PATH environment variable by modifying the profile file located at: /Users/sximada/.profile You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation info: syncing channel updates for 'stable-x86_64-apple-darwin' info: downloading component 'rustc' 32.3 MiB / 32.3 MiB (100 %) 4.1 MiB/s ETA: 0 s info: downloading component 'rust-std' 43.1 MiB / 43.1 MiB (100 %) 5.6 MiB/s ETA: 0 s info: downloading component 'cargo' info: installing component 'rustc' info: installing component 'rust-std' info: installing component ...
所要時間: 約 2分, 作成: 2021/6/14, 更新: 2022/1/12
opendata
オープンデータとして活用できそうなデータソース
宇宙 NASA DATA PORTAL JAXA | JAXAの歩き方 公開データのウェブサイトカタログ JAXA | 観測・研究成果データベース JAXA 衛星利用推進サイト 軌道データ提供システム JAXA | 世界最高水準の全世界標高データ(30m版)の無償公開について 感染症 国立感染症研究所 東京都感染症情報センター オープンデータ 統計局ホームページ 自治体オープンデータ DATA GO JP オープンデータ | OpenGovLab
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
sshuttle proxy vpn python
sshuttleを使う
https://pypi.python.org/pypi/sshuttle インストール pip install sshuttle 使い方 次のコマンドを実行すると全ての接続がremote-host経由になります。 sshuttle -r username@remote-host 0/0 [local sudo] Password: client: Connected. 参考URL sshuttleでsshサーバをプロキシのように使うのが超便利 http://qiita.com/yugo-yamamoto/items/cd6082d7bd4dd9217a4b
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
xonsh cli
xonsh tips
プロンプトマークの変更 > $PROMPT='xonsh$ ' xonsh$ xonsh$ 標準出力への出力を1行ずつ処理する bashで次のようにすると `ls` の出力を1行ずつ処理できます。 $ for ii in `ls` for> do for> echo $ii; for> done xonshでは `$(ls)` で `ls` の実行結果が1つの文字列として返されるので.split('\n')することで1行ずつに分割されたlistとして扱えます。 xonsh$ for ii in $(ls).split('\n'): ...... print(ii) ...... shellへの変数展開 変数として定義したものはそのままxonshで使えません。 xonsh$ ...
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
terminal
破壊されたターミナルを直す
バイナリファイルなどをcatなどで標準出力に書き出してしまった時にターミナルの表示がおかしくなることがあります。そんな時のターミナルの修正方法をメモしておきます。 [Ctrl-u] stty sane [Ctrl-j] または echo -e "\e[u"; stty sane たまにこれでも治らない時があります(C-cが効かないままだったりします)。
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
sphinx documentation ER図 ソフトウェア設計
YAMLでER図を作図してSphinxに描画する拡張sphinx_erdiagramを使う
データベースのテーブルとカラムとそれらの関係を図で示したものがER図です。 設計資料としてよく用いられます。 ER図の作図には色々なものがありますが、今回はSphinxのsphinx_erdiagramを用いての作図を試します。 Sphinxについては http://www.sphinx-doc.org/en/stable/ をご覧ください。 sphinx_erdiagram sphinx_erdiagram1はER図を書くためのSphinx拡張です。 要素と関係はYAMLで表現し、それをGraphvizを使っ ...
所要時間: 約 5分, 作成: 2022/1/12, 更新: 2022/1/12
python sqlalchemy alembic[WIP]
SQLAlchemy用のマイグレーションツールalembicを使う
初期化 alembic init alembic Creating directory /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic ... done Creating directory /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic/versions ... done Generating /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic.ini ... done Generating /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic/env.py ... done Generating /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic/README ... done Generating /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic/script.py.mako ... done Please edit configuration/connection/logging settings in '/Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic.ini' before proceeding. ディレクトリ構成 . ├── alembic │ ├── README │ ├── env.py │ ├── script.py.mako │ └── versions ├── alembic.ini ディレクトリ構成 マイグレーションファイルの作成 alembic revision -m "init" Generating /Users/sximada/ng2/src/github.com/TakesxiSximada/TIL/sqlalchemy/alembic/alembic/versions/f21481e62711_init.py ... done 新しいマイグレーションファイルを作成する """init Revision ID: f21481e62711 Revises: Create Date: 2017-01-24 15:31:47.764269 """ from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision = 'f21481e62711' down_revision = None branch_labels = None depends_on = None def upgrade(): pass def downgrade(): pass マイグレーションの導入で気をつけること 途中から導入できる デー ...
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
tidalcycles[WIP]
TidalCyclesを使って音をだす
brew insta cabal-install brew insta tidal
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
riot.js javascript todo
Riot.jsでTodoアプリを写経した
index.html <!DOCTYPE html> <html> <head> <title>Riot todo</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <link rel="stylesheet" href="main.css"> </head> <body> <todo /> <script src="src/todo.tag" type="riot/tag"></script> <script src="node_modules/riot/riot+compiler.js"></script> <script src="src/index.js"></script> </body> </html> main.css body { font-family: 'myriad pro', sans-serif; font-size: 20px; border: 0; } todo { display: block; max-width: 400px; margin: 5% auto; } form input { font-size: 85%; padding: .4em; border: 1px solid #ccc; border-radius: 2px; } button { background-color: #1FADC5; border: 1px solid rgba(0,0,0,.2); font-size: 75%; color: #fff; padding: .4em 1.2em; border-radius: 2em; cursor: pointer; margin: 0 .23em; outline: none; } button[disabled] { background-color: #ddd; color: #aaa; } ul { padding: 0; } li { list-style-type: none; padding: .2em 0; } .completed { text-decoration: line-through; color: #ccc; } label { cursor: pointer; } src/index.js riot.mount('todo', { title: 'I want to behave!!', items: [ {title: 'Avoid excessive caffeine', done: false}, ], }); src/todo.tag <todo> <h3>{ opts.title }</h3> <ul> <li each={ items.filter(whatShow) }> <label class={ completed: done }> <input type="checkbox" checked={ done } onclick={ parent.toggle }> { title } </label> </li> </ul> <form onsubmit={ add }> <input ref="input" onkeyup={ edit }> <button disabled={ !text }>Add #{ items.filter(whatShow).length + 1 }</button> <button type="button" disabled={ items.filter(onlyDone).length == 0 } onclick={ removeAllDone }> X{ items.filter(onlyDone).length } </button> </form> <script> ...
所要時間: 約 1分, 作成: 2018/1/12, 更新: 2022/1/12
kubernetes minio terraform helm
MinioをKubernetes上で動かす
Docker Desktop for Mac で作成したlocalのKubernetesの環境にHelmを使ってMinioをデプロイします。 Helm等の展開にはTerraformを使います。 Helm (Kubernetes) https://helm.sh/ Kubernetes https://kubernetes.io/ Minio https://min.io/ Docker https://www.docker.com/ Terraform https://www.terraform.io/ Providereの設定 Helm Providerを設定します。 provider "helm" { kubernetes { config_path = "~/.kube/config" config_context = "docker-for-desktop" } } Providerを追加したら terraform init を実行します。 MinioのHelmレシピをresourceに追加 MinioのHelmレシピにはこちらを使います。 ...
所要時間: 約 3分, 作成: 2019/1/12, 更新: 2022/1/12
haskell stack
stackをインストールする
stackをインストールしたときの備忘録 インストール curl -sSL https://get.haskellstack.org/ | sh バージョンの確認 stack --version Version 1.9.3, Git revision 40cf7b37526b86d1676da82167ea8758a854953b (6211 commits) x86_64 hpack-0.31.1 パッケージ情報のアップデート stack update Selected mirror https://s3.amazonaws.com/hackage.fpcomplete.com/ Downloading timestamp Downloading snapshot Downloading mirrors Cannot update index (no local copy) Downloading index Updated package index downloaded Update complete
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
emacs org-mode
org-babelでshellを実行する
org-mode ( org-babel )でshellを使ってみます。 org-babel-load-languagesにshellを設定する org-babelでshellを有効にするには、org-babel-load-languagesにshellの設定を追加する必要があります。 (org-babel-do-load-languages 'org-babel-load-languages '( (shell . t) )) shellと記述すればよい BEGIN_SRC のヘッダオプションの1つ目に言語を指定できます。ここに shell を設定します。 echo $0 /bin/bash 具体的にどのshellを使いたいかを ...
所要時間: 約 1分, 作成: 2022/1/12, 更新: 2022/1/12
rustlang emacs
Rustの開発環境を構築する
Rustの開発環境を構築します。 rustupのインストール rustupというツールで環境を構築/管理するのでrustupをインストールします。 https://rustup.rs/ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh info: downloading installer Welcome to Rust! This will download and install the official compiler for the Rust programming language, and its package manager, Cargo. It will add the cargo, rustc, rustup and other commands to Cargo's bin directory, located at: /Users/sallies/.cargo/bin This path will then be added to your PATH environment variable by modifying the profile files located at: /Users/sallies/.profile /Users/sallies/.bash_profile You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-apple-darwin default toolchain: stable modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >1 info: syncing channel updates for 'stable-x86_64-apple-darwin' 334.4 KiB / 334.4 KiB (100 %) 55.1 KiB/s ETA: 0 ...
所要時間: 約 3分, 作成: 2018/1/12, 更新: 2022/1/12
docker sentry
docker-composeでsentryを動かす
localのsentryを使ってみます。ほぼこの記事 https://qiita.com/yhirano55/items/3c46e2f1fd509ff3287d を試しているだけです。 使ったdocker-composeファイルもこの記事のものをそのまま使いました。 秘密鍵の生成 鍵を生成します。 docker-compose run --rm sentry config generate-secret-key 生成後 .env の SENTRY_SECRET_KEY に出力された値をセットします。 DB初期化と初期ユーザーの作成 docker-compose run --rm sentry upgrade 起動 docker-compose up 起動が完了すると http://localhost:9000 でアクセスできます。 ログインすると `Welcome to Sentry` のページが表示され情報を保存出来ない場合 起動して最初に作 ...
所要時間: 約 2分, 作成: 2021/10/26, 更新: 2022/1/12
terraform terraform
terraformの使い方
インストール macOS (Homebrewを使う場合) brew install terraform バージョンの確認 terraform version Terraform v0.11.13 初期化 terraform init を使って初期化します。 terraform init [0m[1mTerraform initialized in an empty directory![0m The directory has no Terraform configuration files. You may begin working with Terraform immediately by creating Terraform configuration files.[0m planを実行 terraform plan [0m[1mRefreshing Terraform state in-memory prior to plan...[0m The refreshed state will be used to calculate this plan, but will not be persisted to local or remote state storage. [0m ------------------------------------------------------------------------ [0m[1m[32mNo changes. Infrastructure is up-to-date.[0m[32m This means that Terraform did not detect any differences between your configuration and real physical resources that exist. As a result, no actions need to be performed.[0m 適応する applyコマンドを使って terraform apply -input=false [0m[1m[32m Apply complete! Resources: 0 added, 0 changed, 0 destroyed.[0m tfstateファイルができる terr ...
所要時間: 約 1分, 作成: 2018/1/11, 更新: 2022/1/11
pandoc haskell
pandocをsourceからbuildする
pandocをsourceからbuildしたときの備忘録です。 手順はこちら https://pandoc.org/installing.html#compiling-from-source 。 https://github.com/jgm/pandoc sourceをダウンロードします。 git clone https://github.com/jgm/pandoc cd pandoc stackがなかったのでstackもインストールしました。 https://qiita.com/sallies/private/96bc0aa71fd3d6ef17d9 stack を使って依存パッケージを取得します。 stack setup Downloaded lts-13.9 build plan. Preparing to install GHC to an isolated location. This will not interfere with any system-level installation. Downloaded ghc-8.6.3. Installed GHC. stack will use a sandboxed GHC it installed For more information on paths, see 'stack path' and 'stack exec env' To use this GHC and packages outside of a project, consider using: stack ghc, stack ghci, stack runghc, or stack exec stack install Populated index cache. [1 of 2] Compiling Main ( /Users/testing/.stack/setup-exe-src/setup-mPHDZzAJ.hs, /Users/testing/.stack/setup-exe-src/setup-mPHDZzAJ.o ) [2 of 2] Compiling StackSetupShim ( /Users/testing/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs, /Users/testing/.stack/setup-exe-src/setup-shim-mPHDZzAJ.o ...
所要時間: 約 4分, 作成: 2018/1/11, 更新: 2022/1/11
bison flex yacc lex
bisonとflexを使って電卓を作成する
http://d.hatena.ne.jp/tanakaBox/20070507/1178537799 に記載されている内容をおさらいして電卓を作成する。 環境 flex --version flex 2.5.35 Apple(flex-31) bison --version bison (GNU Bison) 2.3 Written by Robert Corbett and Richard Stallman. Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 字句解析 %{ #include <stdio.h> #include <stdlib.h> #include "calc.tab.h" %} NUMBER [0-9]+ SPACE [\t ] OP [+-/*()] CR [\n] OTHER . %% {NUMBER} { yylval = atoi(yytext); return NUMBER; } {OP} { return yytext[0]; } {CR} { return yytext[0]; } {SPACE} {} {OTHER} { printf("そんなのしらない\n"); exit(1); } %% flex src/calc.l 字句解析器を生成 構文解析 %{ #include <stdio.h> #include <string.h> void yyerror(const char *str) { fprintf(stderr,"error: %s\n",str); } int yywrap() { return 1; } int main() { yyparse(); } %} %token NUMBER %left '+' '-' %left ...
所要時間: 約 1分, 作成: 2018/1/11, 更新: 2022/1/11
python giphy gif
PythonでGIPHYにAPI経由でGIFをUploadする
環境変数にクレデンシャル情報を設定しておく。 (setenv "GIPHY_USERNAME" giphy-config-username) (setenv "GIPHY_API_KEY" giphy-config-api-key) 今回はGIFの共有サービスであるGIPHYにAPIを利用してGIFアニメをアップロードする。 アップロードするファイルはこれ。 GIPHYのAPIドキュメント https://developers.giphy.com/docs/ APIキーの取得 GIPHYのAPIを利用するためにはAPIキーを取得する。 アプリケーションを作成する。 アプリケーションの情報を入力する。 PythonでUpload 今回はサードパーティ製のH ...
所要時間: 約 2分, 作成: 2018/1/11, 更新: 2022/1/11
terraform emacs
EmacsでTerraformを使う
EmacsでTerraformを使う環境を整備する。今回は次のパッケージを使う。 terraform-mode company-terraform company-terraform 1.2 available melpa-s... A company backend for terraform company-terraform 20180703.1233 available melpa A company backend for terraform terraform-mode 0.6 available melpa-s... Major mode for terraform configuration file terraform-mode 20170112.517 available melpa Major mode for terraform configuration file terraform-mode こちらはTerraform用のメジャーモード。 https://github.com/syohex/emacs-terraform-mode (use-package terraform-mode :ensure t) company-terraform companyでterraform用の補完ができる。 https://github.com/rafalcieslak/emacs-company-terraform (use-package company-terraform :ensure t) インストールしたら company-terraform-init を実行する。 (company-terraform-init) company-terraform-init では company-backends に company-terraform を登録する。 ;;;###autoload (defun company-terraform-init () "Add terraform to the company backends." (interactive) (add-to-list 'company-backends 'company-terraform)) .emacs.d/init.el に追加しておくと良い。 使い勝手 ...
所要時間: 約 1分, 作成: 2019/1/11, 更新: 2022/1/11
docker emacs helm
EmacsのDocker関連のパッケージ
docker-tramp Dockerコンテナ内のファイルをTrampで開けるようになる。 M-x find-file RET /docker: TAB のように入力してコンテナを指定する。 コンテナの指定には CONTAINER ID が使われる。 パッケージ情報 https://github.com/emacs-pe/docker-tramp.el 20170207.325 available melpa TRAMP integration for docker containers docker-tramp is an installed package. Status: Installed in ‘docker-tramp-20170207.325/’ (unsigned). Delete Version: 20170207.325 Summary: TRAMP integration for docker containers Requires: emacs-24, cl-lib-0.5 Homepage: https://github.com/emacs-pe/docker-tramp.el Keywords: docker convenience Other versions: 20170207.325 (melpa), 0.1 (melpa-stable). [back] インストール (use-package docker-tramp :ensure t) helm-tramp docker-trampのコンテナをhelmのバッファで選択できるようになる。 ...
所要時間: 約 1分, 作成: 2022/1/11, 更新: 2022/1/11
emacs simple-httpd.el
simple-httpdでHTTPサーバをかく
simple-httpd.elはEmacs Lispで書かれたHTTPサーバー。今回はこれを使ってみる。 HTTPサーバの開始 HTTPサーバーを起動するにはhttpd-startを使う。 httpd-startはホストにhttpd-host、 ポートにhttpd-portを用いてmake-network-processを呼び出す。 (httpd-start) サーブレットの定義 ここで使っているサーブレットとはJavaサーブレットのこ ...
所要時間: 約 2分, 作成: 2019/6/2, 更新: 2022/1/11
emacs company
Emacsの補完機能をカスタマイズする
Emacsの補完機能であるcompany-modeのbackendを書いて思い通りの補完ができるようにカスタマイズしていく。
所要時間: 約 2分, 作成: 2019/11/24, 更新: 2022/1/11
ditaa java asciiart
ditaaの図の中に日本語を含めても図が崩れないようにする
ditaaは日本語を含んでいると図が崩れる問題がある。Jditaaを取り込んで図の中に日本語を含められるようにした。
所要時間: 約 4分, 作成: 2021/12/27, 更新: 2022/1/9
emacs transient
transient
transientはEmacsのコマンドを作るためのemacs lisp。 Magit Organizationによって開発/管理されている。 以前magitのUI部分はmagit-popupというライブラリとして切り出されて開発されていた。 このライブラリは他のライブラリからも使いやすいように改良さたtransientによって置き換えられた。 現在magitのUI部分はtransientで実装されている。 magit ...
所要時間: 約 2分, 作成: 2021/3/23, 更新: 2022/1/8
vue chart.js dataviz データ可視化
vue-chartjsを使って毎月のデータを可視化する
vue-chartjsを使って毎月のデータを可視化できるようにする。横軸には毎月の値を用い、縦軸はダミーの値を用いる。 注意すべきポイントとしてはVue3ではvue-chartjsは使用できない1。 またchart.jsも3系には対応していない2。 example/src/main.js import Vue from 'vue' import App from './App.vue' Vue.config.productionTip = false new Vue({ render: h => h(App), }).$mount('#app') example/src/App.vue <template> <div id="app"> <div class="small"> <Chart /> </div> </div> </template> <script> import Chart from './components/Chart' export default { name: 'App', components: { Chart, } } </script> <style> .small { max-width: 600px; margin: 150px auto; } </style> example/src/components/Chart.vue <script> import { Bar } from 'vue-chartjs' export default { extends: Bar, mounted () { this.renderChart( { labels: [ ...
所要時間: 約 2分, 作成: 2022/1/7, 更新: 2022/1/7
emacs emacs-lisp
emacs-lispのLisp_Symbol構造体のメモ
struct Lisp_Symbol { union { struct { bool_bf gcmarkbit : 1; /* Indicates where the value can be found: 0 : it's a plain var, the value is in the `value' field. 1 : it's a varalias, the value is really in the `alias' symbol. 2 : it's a localized var, the value is in the `blv' object. 3 : it's a forwarding variable, the value is in `forward'. */ ENUM_BF (symbol_redirect) redirect : 3; /* 0 : normal case, just set the value 1 : constant, cannot set, e.g. nil, t, :keywords. 2 : trap the write, call watcher functions. */ ENUM_BF (symbol_trapped_write) trapped_write : 2; /* Interned state of the symbol. This is an enumerator from enum symbol_interned. */ unsigned interned : 2; /* True means that this variable has been explicitly declared special (with `defvar' etc), and shouldn't be lexically bound. */ bool_bf declared_special : 1; /* True if pointed to from purespace and hence can't be GC'd. */ bool_bf pinned : 1; /* The symbol's name, as a Lisp string. */ Lisp_Object name; /* Value of the symbol or Qunbound if unbound. Which alternative of the union is used depends on the `redirect' field above. */ ...
所要時間: 約 1分, 作成: 2022/1/7, 更新: 2022/1/7
emacs django
Djangoのdoctestをflycheckで実行する
(require 'flycheck) (require 's) (defun our-django--get-project-root-directory (&rest args) "Djangoのprojectのrootディレクトリを取得する" (locate-dominating-file (or buffer-file-name default-directory) "manage.py")) (defun our-django--get-dotted-name (file-name) "pythonファイルのdotted nameを取得する" (s-replace "/" "." (string-trim-right (file-relative-name file-name default-directory) ".py"))) (flycheck-define-checker python-doctest "Run doctest by python" :command ("python" "run_doctest.py" (eval (let ((default-directory (our-django--get-project-root-directory))) (our-django--get-dotted-name buffer-file-name)))) :working-directory our-django--get-project-root-directory :error-patterns ((error line-start "File \"" (file-name) "\", line " line ", in " (message) line-end)) :modes python-mode) (require 'flycheck) (defun flycheck+-python-get-project-root-directory(file-or-directory-name) "Projectのrootディレクトリを返す" (locate-dominating-file (or buffer-file-name default-directory) file-or-directory-name)) (defun flycheck+-python-get-dotted-name(file-path) "Pythonファイルのdotted na ...
所要時間: 約 1分, 作成: 2022/1/7, 更新: 2022/1/7
emacs lisp 会計 年度 期首
決算月、年度、期首、期末について考える
年度 の数字はどれになるのか調べたが今一よくわからない。決算月という 概念があると考えると、決算月の翌月1日は起算日となる。その起算日の年が そのまま年度の数字となる。西暦の場合、単純に数字が増えていくだけなので そのまま数字を使えばよい。元号の場合、起算日の年の年号をそのまま使用す ることになると思われる。ただし、どこかにそのルールがあるのかどうかよく わからなかった。 決算月と年度が決定すると期首と期末は算 ...
所要時間: 約 2分, 作成: 2022/1/7, 更新: 2022/1/7
rustlang webassembly
Rust + WebAssemblyでライフゲームを実装する
RustとWebAssemblyで所謂ライフゲームを実装した1。 構成 Rust ソースコード src/lib.rs mod utils; use std::fmt; use wasm_bindgen::prelude::*; // When the `wee_alloc` feature is enabled, use `wee_alloc` as the global // allocator. #[cfg(feature = "wee_alloc")] #[global_allocator] static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; #[wasm_bindgen] extern { fn alert(s: &str); } #[wasm_bindgen] pub fn greet() { alert("Hello, wasm-game-of-life!"); } #[wasm_bindgen] #[repr(u8)] #[derive(Clone, Copy, Debug, PartialEq, Eq)] pub enum Cell { Dead = 0, Alive = 1, } #[wasm_bindgen] pub struct Universe { width: u32, height: u32, cells: Vec<Cell>, } impl Universe { fn get_index(&self, row: u32, column: u32) -> usize { (row * self.width + column) as usize } fn live_neighbor_count(&self, row: u32, column: u32) -> u8 { let mut count = 0; for delta_row in [self.height - 1, 0, 1].iter().cloned() { for delta_col in [self.width - 1, 0, 1].iter().cloned() { if delta_row == 0 && delta_col == 0 { continue; } let neighbor_row = (row + delta_row) % self.height; let neighbor_col = (column + delta_col) % self.width; let idx = self.get_index(neighbor_row, neighbor_col); ...
所要時間: 約 3分, 作成: 2019/8/10, 更新: 2022/1/7
git comment
Gitのサブモジュールを消し去りたい
Gitサブモジュールを消たくなり毎回やり方を忘れてググっている君(私)へ git submoduleを使うと複数のリポジトリをまとめることができる。 しかし開発を続けていくと この構成じゃ無いな と思い直すこともある。 そんなふとした瞬間にサブモジュールを邪魔に感じて消したくなる。 そんな時が訪ずれたら今すぐそのサブモジュールを消そう。 サブモジュールの位置を確認する。 (path/to/submodule/direc ...
所要時間: 約 1分, 作成: 2022/1/5, 更新: 2022/1/5
guile scheme lisp gnu shebang
GNU Guileのshebang
GNU Gnuleで使えるshebangを例示する。
所要時間: 約 1分, 作成: 2021/3/28, 更新: 2022/1/5
guile lisp guiler
GNU Guileとguiler
EmacsでGNU Guileを使いたければM-x guilerとしてみよう。 Current directory is /ng GNU Guile 3.0.4 Copyright (C) 1995-2020 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. scheme@(guile-user)> Enter `,help' for help. GNU Guileが入っていればREPLが起動してくる。 ,help RET でヘルプを見ることができる。 scheme@(guile-user)> ,help Enter `,help' for help.,help Help Commands [abbrev]: ,help [all | GROUP | [-c] COMMAND] [,h] - Show help. ,show [TOPIC] - Gives information about Guile. ,apropos REGEXP [,a] - Find bindings/modules/packages. ,describe OBJ [,d] - Show description/documentation. Command Groups: ,help all - List all commands ,help module - List module commands ,help language - List language commands ,help compile - List compile commands ,help profile - List profile commands ,help ...
所要時間: 約 1分, 作成: 2022/1/5, 更新: 2022/1/5
django python
DjangoのAbstract Modelをテストする
今回はDjangoのAbstract Modelを直接テストする方法を解説する。 次のようなモデル定義を想定とする。 Postがモデルとなるが、その基底クラスとしてPostBaseを定義している。 今回はこの基底クラスを単体でテストしたいとする。 blog/models.py from django.db import models from django.utils import timezone from django.contrib.auth import get_user_model UserModel = get_user_model() class PostBase(models.Model): class Meta: abstract = True user = models.ForeignKey(UserModel, on_delete=models.CASCADE) published = models.BooleanField(blank=True, null=True, default=False) def mark_publish(self): self.published = True class Post(PostBase): title = models.CharField(max_length=200) Abstract Model自体はテーブルを持たないため、単体ではDBの操作を行えない。 そこで ...
所要時間: 約 2分, 作成: 2022/1/5, 更新: 2022/1/5
hugo wordpress jamstack 静的サイトジェネレーター
Wordpressを静的サイトホスティングに移行する
Wordpressを静的サイトホスティングに移行を進める機会があったため、諸々の作業を行った。 Wordpressを静的サイトジェネレーターに移行する際にやったこと 移行に関しては主に以下のことをやった。 WordpressをMarkdownに変換するところの調査と諸々の対応 (wordpress-to-markdownを用いた) 静的サイトジェネレータの選定 以下のツールが候補になった。 hugo hexo gatsby vue-press pelican tinkerer 使うテー ...
所要時間: 約 2分, 作成: 2020/10/12, 更新: 2022/1/5
imagemagick homebrew macos
macOSにHomebrewを使ってImageMagickをインストールする
ImageMagick(イメージマジック)は画像を操作したり表示したりするためのソフトウェアスイートである。GIF、JPEG、JPEG 2000、PNG、PDF、Photo CD、TIFF、DPXなど100種類以上の画像ファイルフォーマットに対応している[2]。GPL互換でより制限が緩い独自ライセンスが適用されている[3]。 Wikipediaより引用 1 今回はHomebrewを使ってインストールする。 H ...
所要時間: 約 3分, 作成: 2022/1/3, 更新: 2022/1/3
comment
Hugoの各ページでの値とクローラーへの設定を分岐させるための調査
indexとfollowについては期待値。 Page index follow IsPage IsHome IsSection Type / index follow false true false page /powerd_by/ index follow true false false page /cooming-soon/ index follow true false false page /posts/xxxx/ index follow true false false posts /page/2/ no index follow false true false page /posts/ no index follow false false true posts /tags/ no index follow false false false tags /tags/xxx/ no index follow false false false tags /categories/ no index follow false false false categories
所要時間: 約 1分, 作成: 2022/1/2, 更新: 2022/1/2
あれからn年経った ふりかえり
あれから8年経った
フリーランスに転向した頃から1年に1度、「あれからn年経った」というタイトルでその年の成果を記事としてまとめてきた。2018年頃から公私ともに余裕がなくなり、仕事以外の活動を控えるようになった。様々な事があったが、少しだけ落ち着いてきて、対外的な活動も少しだけできるぐらいには回復してきた。だから今年は以前やっていたように1年の総括をしようと思う。 過去分 〜2012 - (会社員時代) 2013 0年経過 - (会社員 ...
所要時間: 約 5分, 作成: 2021/12/31, 更新: 2021/12/31
git lfs
Git LFSでSkipping object checkout, Git LFS is not installedが発生したらgit lfs installをする
このブログの画像ファイルはGit LFSを使ってリポジトリ自体のサイズが肥大化しないように工夫している。しかしその画像を表示させようとすると、その画像ファイルの中身は次のようになっていた。 version https://git-lfs.github.com/spec/v1 oid sha256:f7973bf6d7ce4a2af3bbe1319e35701729cd6d8fb8eb5e39a57ffc8fcf06a0cf size 71526 これはGit LFSが画像ファイルの実体をLFSに保存して、Gitにはその実体を指し示すファイルに置き換えられているためだ。ただ画像ファイルの実体を取得したくなる時も当然ある。それには git lfs checkout を使うことで、 ...
所要時間: 約 1分, 作成: 2021/12/21, 更新: 2021/12/21
testing aTb 日本語
testing
メタデータSUMMARY
所要時間: 約 1分, 作成: 2021/12/1, 更新: 2021/12/20
emacs
Emacsのmini bufferでの入力待ちを取り消せなくなったらabort-recursive-editする
Emacsのmini bufferでの入力待ちを取り消せなくなることがある。これはmini bufferでの入力中に更にEmacsの別の呼び出す際にしばしば発生する。Emacsのコマンド実行中に別のコマンドを呼び出すことははRecursive Edit1 と言う機能でそれ自体は通常の機能なのだが、実装次第でおかしな状態となってしまいmini bufferを閉じれなくなる事象が発生する。 この状況に陥った場合 abort-recursive-edit 2 を呼び ...
所要時間: 約 1分, 作成: 2021/12/20, 更新: 2021/12/20