Skip to main content

gem 作り方

· One min read
ひかり
Main bloger

テンプレートの作成

bundle gem <GEM 名> -t
cd <GEM 名>

Gemspec の編集

  1. <GEM 名>.gemspec を開く。
  2. spec.summaryspec.descriptionspec.homepage、 を編集する
  3. spec.metadata["allowed_push_host"] にホームページの URL を記述
  4. spec.homepage に Gem のページを記述
  5. spec.metadata["source_code_uri"] にリポジトリの URL を記述
  6. spec.metadata["changelog_uri"]changelog.md の URL を記述

最低限このくらい設定する。

GitHub に push しインストール

git init
git add .
git commit -mFirst\ Commit
git remote add origin [email protected]:<ユーザー名>/<GEM 名>.git
git push -u origin master

インストール

gem install specific_instal
gem specific_install -l "git://github.com/<ユーザー名>/<GEM 名>.git"

Gemfile

gem "<GEM 名>", github: "<ユーザー名>/<GEM 名>.git", branch: :main

ターミナル上で画像を表示するコマンド

· One min read
ひかり
Main bloger

ターミナル上で画像を表示する tiv コマンドの紹介。

tiv

ファイルエクスプローラー開くのがめんどくさいときに良い。

git clone https://github.com/stefanhaustein/TerminalImageViewer.git
cd TerminalImageViewer/src/main/cpp
make -j
sudo make install

Bash でユークリッド互除法

· One min read
ひかり
Main bloger
  1. A と B の余り C

  2. B と C の余り D

  3. C と D の余り E

    ...

  4. X と Y の余り 0

    となったときの Y の値が最大公約数。

Bash のスクリプト

#!/usr/bin/env bash

function gcd(){
test $2 -eq 0 && echo $1 || gcd $2 $(($1 % $2))
}

gcd 1071 1029
# 21

ImageMagick のインストール方法 (Ubuntu)

· One min read
ひかり
Main bloger
wget https://download.imagemagick.org/ImageMagick/download/ImageMagick-7.0.11-14.tar.xz

展開

tar xf ImageMagick-7.0.11-14.tar.xz

make

sudo apt update
cd ImageMagick-7.0.11-14.tar.xz
./configure
make -j
sudo make install
sudo ldconfig /usr/local/lib

Pyenv のインストールと設定

· 2 min read
ひかり
Main bloger
  1. Pyenv をクローンする

    Pyenv のリポジトリーをクローンする。 ディレクトリーは ~/.pyenv がおすすめ。

git clone https://github.com/pyenv/pyenv ~/.pyenv

    

0. 高速化のための Bash 拡張をコンパイル

高速化のための Bash 拡張のコンパイルが可能。
コンパイルが失敗しても正常に動作する。

```sh
cd ~/.pyenv && src/configure && make -C src
  1. 設定 (bash)

    パスとかの設定。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.profile echo 'eval "$(pyenv init --path)"' >> ~/.profile export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init --path)" echo -e 'if shopt -q login_shell; then'
'\n export PYENV_ROOT="$HOME/.pyenv"'
'\n export PATH="$PYENV_ROOT/bin:$PATH"'
'\n eval "$(pyenv init --path)"'
'\nfi' >> /.bashrc echo -e 'if [ -z "$BASH_VERSION" ]; then'
'\n export PYENV_ROOT="$HOME/.pyenv"'
'\n export PATH="$PYENV_ROOT/bin:$PATH"'
'\n eval "$(pyenv init --path)"'
'\nfi' >>
/.profile



# Python 環境のインストール

## 依存するライブラリーのインストール
```sh
sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev -y

インストール可能な環境を調べる

pyenv install -l

インストールする

コンパイル時間が長いので待つ。

CONFIGURE_OPTS="--enable-shared" pyenv install 3.9.5

バージョンの確認

pyenv versions

バージョンの切り替え

pyenv global 3.9.5

ガウシアンフィルターでノイズ除去 (Python / Scipy)

· One min read
ひかり
Main bloger

例として、1[Hz] の sin 波を信号とする。 平均 0、標準偏差 0.5 の正規分布から乱数を作成したノイズを信号に加える。

import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter1d

t = np.arange(1000) / 100
s = np.sin(2*np.pi*t)
noise = np.random.normal(0, 0.5, size=len(t))
x = s + noise

plt.plot(t, x, label="+noise")
plt.plot(t, s, label="signal")
plt.legend(loc=1)
plt.show()

pyplot

標準偏差 5 のガウシアンフィルターをかける。 標準偏差が大きいほど、滑らかになるが元の信号と外れる。

y = gaussian_filter1d(x, 5)
plt.plot(t, y, label="filtered")
plt.plot(t, s, label="signal")
plt.legend(loc=1)
plt.show()

pyplot

Numo::NArray でドット積

· One min read
ひかり
Main bloger
require "numo/narray"

実数ベクトルのドット積

a = Numo::NArray[4, -1, 2]
b = [2, -2, -1]
c = a.dot b
8

複素数ベクトルのドット積

a = Numo::NArray[1+1i, 1-1i, -1+1i, -1-1i]
b = [3-4i, 6-2i, 1+2i, 4+3i]
c = a.conj.dot b
(1.0-5.0i)

複素数とそれ自身のドット積

d = a.conj.dot a
(8.0+0.0i)

行列のドット積

a = Numo::NArray[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
c = (a * b).sum(0)
Numo::Int64#shape=[3]
[54, 57, 54]

行ベクトルとしてドット積を求める

c = Numo::NArray[(a * b).sum(1)].transpose
Numo::Int64(view)#shape=[3,1]
[[46],
[73],
[46]]

era.js

· One min read
ひかり
Main bloger

JavaScript で使える和暦のライブラリーを作りました。

https://himeyama.github.io/era.js/era.js

let date = new Era()
date.getWareki() // "令和X年X月X日" (今日の日付)

date = new Era("2020-1-1")
date.getWareki() // "令和2年1月1日"

date.getWareki("西暦") // "2020/01/01"

date.getDateAry() // ["令和", 2, 1, 1]

Era.date2wareki(id) // id を指定して要素を和暦に変換

getWareki() の引数

calshorttype表示
"和暦"true0
1
2
3
4
5
false0
1
2
3
"西暦"true0
1
2
3
4
5
false0
1
2
3
4