強欲で謙虚なツボツボ

趣味の読書の書の方

備忘録(Ruby)

Ruby

params.require(:モデル).permit(:カラム)

Rails 4以降のストロングパラメータという新機能
フォームの入力などをPOSTで受け取る時のパラメータを制限するようなもので、予期せぬパラメータを受け取らないようなセキュリティとなる
controllerにて記述

# nameとemailを属性にもつUserモデルが定義済みだとする

# フォームで{ "name": "hoge"," email": "mail@mail.com", "password": "1234qwer" }がPOSTでsubmitされた場合

# その1: nameというパラメータしか受け取らない
def user_params
  params.require(:user).permit(:name)
end
=> {
  name: "hoge"
}

# その2: nameとemailというパラメータしか受け取らない
def user_params
  params.require(:user).permit(:name, :email)
end
=> {
  name: "hoge",
  email: "mail@mail.com"
}

備忘録(Ruby、Firebase CLI)

Ruby

&.

レシーバがnilの時にエラーでなくてnilを返す
present?とかでネストを増やさなくて良くなるから便利

x = nil
x.length
=> NoMethodError
x&.length
=> nil

Array.map

配列の各項に同様の処理をして返す

[1, 2, 3].map { |x| x * 2 }
=> [2, 4, 6]

Array.include? Array.exclude?

配列に含まれる(含まれない)場合はtrueを返す。そうでない場合はfalseを返す
!Array.include?とかは使いたくない

[1, 2, 3].include?(1)
=> true
[1, 2, 3].exclude?(4)
=> true

 

Firebase CLI

firebase.projects.list

ログイン中のアカウントが参加しているプロジェクト一覧
参照中のプロジェクトは(current)と表示される

firebase projects:list
=> Preparing the list of your Firebase projects
| Project Display Name | Project ID        | Project Number | Resource Location ID |
| test                 | id_test (current) | 111122223333   | asia-northeast1      |
| hoge                 | id_hoge           | 123456789012   | asia-northeast1      |

firebase.target

参照しているプロジェクトのIDを返す

firebase target
=> Resource targets for id_test

firebase use {Prohect ID}

参照するプロジェクトを変更する

firebase use id_hoge
=> Now using project id_hoge

firebase functions:config:set {config}

Firebase Cloud Functionsで使用される環境変数を設定する
実際functionsで使う時はfunctions.config()で取得できる

firebase functions:config:set api.key="apikey" server.host="localhost" server.port="8080"

firebase functions:config:get

Firebase Cloud Functionsの環境変数を取得する

firebase functions:config:get
=> {
    "api": {
        "key": "apikey"
    },
    "server": {
        "host": "localhost",
        "port": "8080",
    }
}

【環境構築】Ubuntuでもpyenvでpythonを扱いたい

概要

普段はmacを使用していてpythonはhomebrewによってインストールしたpyenvを用いて扱っている。macpythonをインストールする記事でも大抵はpyenvを紹介している。
windowsのPCからmacで作成したソースコードを操作することもしばしばあるので、同様の操作によって扱えるようにするためにpyenvをインストールする。

windowsUbuntu(WSL2)を使えるようにする手順は以下記事の下部に書いた。

taopo.hatenablog.com

 

手順

説明を省いた手順。手順の詳細が必要な場合はここから

# install pyenv
$ curl https://pyenv.run | bash

$ echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile

# WSL2でインストールしたUbuntuを使用している場合は、curlではなくwgetを使用するようにパッケージのソースコードに手を加える
$ vi ~/.plugins/python-build/bin/python-build
detect_http_client() {
  local client
  # for client in aria2c curl wget; do    この行をコメントアウト
  for client in aria2c wget curl; do      この行を追加
    if type "$client" &>/dev/null; then
      echo "$client"
      return
    fi
  done
  echo "error: please install \`aria2c\`, \`curl\`, or \`wget\` and try again" >&2
  return 1
}

# pyenvの依存関係を満足させる
$ 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

# install python by pyenv
$ pyenv install 3.9.9
$ pyenv local 3.9.9

 

pyenvをインストール

gitに公開されているので手順に従うのみ。
https://github.com/pyenv/pyenv#installation

Ubuntuなので、Automatic installerもしくはBasic GitHub Checkoutから好きな方を選べばよいと思う。僕はAutomatic installerにした。
https://github.com/pyenv/pyenv-installer

$ curl https://pyenv.run | bash

下記を.bashrc(.zshrc)に追記。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

 

pyenvの使い方はこちらを参照。
local, global, install, versions 辺りをよく使う。

github.com

 

pyenv install x.x.xを実行したときのエラー対応

pyenv install x.x.xを実行するとエラーが出て失敗するので以下の対応をしておく。

1つ目(おそらくWSL2でインストールしたUbuntuを使用している場合のみ)

WSL2でインストールしたUbuntuを使用している場合、pyenvでpythonをインストールする際のcurlが悪さをして上手くいかない。(以下のようにtimeoutして失敗します。)

f:id:taopo:20211222022418j:plain

wgetであれば通るということなので、pyenvのソースコードの一部差し換えを行う。

pyenvがインストールされた~/.pyenv内をdetect_http_clientで検索すると、plugins/python-build/bin/python-buildに該当箇所があるとわかるので、以下のように差し換える。

detect_http_client() {
  local client
  # for client in aria2c curl wget; do
  for client in aria2c wget curl; do
    if type "$client" &>/dev/null; then
      echo "$client"
      return
    fi
  done
  echo "error: please install \`aria2c\`, \`curl\`, or \`wget\` and try again" >&2
  return 1
}

こちらが参考になりました。WSLでのUbuntuに関する他の対応も書かれているので参考になる人が多そうです。

koideforest.hatenadiary.com

2つ目(依存パッケージをインストール)

次に依存関係が満たされていないとmake: command not foundのように失敗するのでmake等をインストールするが、pyenvが依存するパッケージは公式に明記されているのでこれに従ってインストールする。

$ 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

 

pythonをインストール

最後にpyenvを使ってpythonをインストールする。インストール可能なpythonのバージョンはpyenv install --listで確認できる。

$ pyenv versions
* system (set by /home/username/.pyenv/version)

$ pyenv install 3.9.9
Downloading Python-3.9.9.tar.xz...
-> https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tar.xz
Installing Python-3.9.9...
Installed Python-3.9.9 to /home/username/.pyenv/versions/3.9.9

$ pyenv versions
* system (set by /home/username/.pyenv/version)
  3.9.9

$ pyenv local 3.9.9
$ pyenv versions
  system
* 3.9.9 (set by /mnt/c/Users/username/Program/salesman/.python-version)

$ python -V
Python 3.9.9

$ pip -V
pip 21.2.4 from /home/username/.pyenv/versions/3.9.9/lib/python3.9/site-packages/pip (python 3.9)

これにて完了。

【環境構築】Macでhomebrewでpyenvでpython3系(+ pyenvでの)

概要

タイトルそのまま。
最近pcを購入時に初期化したのでpythonを入れた。

 

順番

  1. homebrewでpyenvをインストール
  2. pyenvで好きなpythonのバージョンをインストール
  3. よく使うパッケージをインストール

 

1. homebrewでpyenvをインストール

とりあえず、現状を確認。
2系が入ってるけど使いづらいから3系がいい。

$ python --version
Python 2.7.16
$ which python
/usr/bin/python

パスを設定。これをするととpyenvでインストールしたpythonが使える。

$ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
$ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(pyenv init -)"' >> ~/.zshrc
~/.zshrc $ source ~/.zshrc

homebrewでpyenvをインストール。

$ brew install pyenv
$ pyenv -v
pyenv 2.2.2

 

2. pyenvでpythonをインストール

最新バージョンだとパッケージによってはまだ対応できてなかったりするので一応3.9にしておく。3.9がダメだったらpyenvで3.8にすればいい。

$ pyenv install 3.9.9
$ pyenv versions
* system (set by /Users/ユーザー/.pyenv/version)
  3.9.9
$ pyenv global 3.9.9
$ python --version
2.7.16 # あれ?????????

何か3.9.9になってないんだけど。
どうやらpyenvをインストールする際に自動でzshrcに追記されるものが追記できていなかった模様。

$ echo 'eval "$(pyenv init --path)"' >> ~/.zshrc $ python --version 3.9.9 # やったね!!!!!!! $ pip --version pip 21.4.4 # pipも使える

3. よく使うパッケージをインストール

とりあえずnumpy, pandas, jupyter notebookをpip install

$ pip install notebook numpy pandas
$ jupyter notebook

ここで、pythonでimport pandasを実行したらwarningが出ることがある。

/Users/ユーザー名/.pyenv/versions/3.9.9/lib/python3.9/site-packages/pandas/compat/__init__.py:124: UserWarning: Could not import the lzma module. Your installed Python is incomplete. Attempting to use lzma compression will result in a RuntimeError.warnings.warn(msg)

pyenvでpythonをインストールしているとこのwarningが出力されるということらしい。
対応方法はxzをインストール、もしくはpandasのバージョンを幾ばくか下げるといいとのこと。
ここではxsをインストールした後、pythonをインストールし直す方針を採用する。

$ brew intall xz
$ pyenv uninstall python 3.9.9
$ pyenv install python 3.9.9

出典: https://zenn.dev/grahamian/articles/f292163325653dbe2c42

 

終わり

これで終わり。
バージョンを変えたくなったらpyenvで違うバージョンをインストールしてglobalとかlocalに設定すればいい。

【外付けSSD】MacでDockerイメージを外へ

概要

最近、容量の空きがあと僅かだから整理しろとかいうバッジ通知が頻繁に表示される。
他にも、容量不足だから強制終了させるアプリを選べとかもよく出てくる。
今まではなんとかやれていたけど、どうしても必要なものがあって無理になったから外付けSSDを使ってみることにした。

f:id:taopo:20211021151854p:plain

パンパンでやばい

 

購入物

適当に価格.comで一位だったやつを買った。

【価格.com】外付けSSD | 通販・価格比較・製品情報

評判が一番いいのはSanDiskのエクストリームとかいうやつっぽい。

 

繋げてみる

届いたので早速PCに繋いでみる。

f:id:taopo:20211021151936p:plain

1TB!!

「USB外部物理ボリューム」とならない場合は、一度「消去」をやってからまた繋ぎ直すといいらしい。

Docker Imageの保存先を移そう

なんか色々とdockerでやるようになってから容量がイカれ始めた気がするので、まずはそれを解消するために、イメージの保存場所をSSD内に変更する。
ただ、Docker imageが全部消えてしまうのでそこはやり直さないといけない。

SSD内にdocker_imagesフォルダを作成して、Docker Imageの保存先を変更する。

f:id:taopo:20211021160602p:plain

Preferences > Resources > Advanced > Disk image location

 

Apply & Restartを押してしばらく待つと...

f:id:taopo:20211021162707p:plain

容量が空いた!!

f:id:taopo:20211021162723p:plain

Docker imageの保存場所が作成されてる

 

終わり

めでたく容量を空けることができました。
イメージやコンテナは全部消えてしまうので、また作り直さないといけないけどdockerならすぐにできるね。

せっかく買ったし、外付けSSDUbuntuを入れるとか色々できたら楽しいかも。

はてなブログ(無料版)でGoogleアドセンスを利用してみたい

概要

いつも月間PVが10~20とかだったのに最近は300くらいあったりするし、広告とかやってみるか。
審査があるけど通るかは知らない。とりあえず審査に出すところまでをやってみる。
Googleアナリティクスは結構前に入れてみたが、色々みれてまあまあ面白いかったしアドセンスも面白いはず。

 

公式ヘルプ

公式は正義だ。
審査のコツとか申請してみたとかあるが、公式のヘルプページがあるからそれに従う。

help.hatenablog.com

 

プライバシーポリシー

このページはCookieを利用します的なやつだ。
適当に検索してよさそうなやつをコピペして作った。
無料ユーザーなので推奨されてるサイドバーへのリンク追加だけやった。

プライバシーポリシー - 強欲で謙虚なツボツボ

サイドバーにモジュールを設置する - はてなブログ ヘルプ 

f:id:taopo:20210920131151p:plain

プライバシーポリシーへのリンクをサイドバーに設置

 

Googleアドセンス

公式ヘルプがとても丁寧です。
公式以上のものを書けないので補足だけ書きます。

アカウント取得

ページ右上のご利用開始をクリック。
サイトのURLは無料版なら「xxx.hatenablog.com」ですかね。僕は「taopo.hatenablog.com」です。

Google AdSense - ウェブサイトを収益化

審査の申請

進むとGoogleアドセンスのホームが表示されます。
「お支払い」と「サイト」が必須になっているので入力します。

f:id:taopo:20210920132813p:plain

Googleアドセンスのホーム画面(ブックマークしておくといいかも)

f:id:taopo:20210920133905p:plain

設定したら審査中になった

 

終わり

アドセンスの登録はそんなにやることなくて簡単だった。
調べながら1時間くらいで終わった。
申請通ったら面白いけど、1円でも出たら確定申告することが増えて面倒そうだからすぐやめるかも。

追記: 2日待ったら審査通ってました。

プライバシーポリシー

プライバシーポリシー

個人情報の利用目的

当ブログでは、お問い合わせや記事へのコメントの際、名前やメールアドレス等の個人情報を入力いただく場合がございます。
取得した個人情報は、お問い合わせに対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、これらの目的以外では利用いたしません。

広告について

当ブログでは、第三者配信の広告サービス(Googleアドセンス)を利用しており、ユーザーの興味に応じた商品やサービスの広告を表示するため、Cookieを使用しております。
Cookieを使用することで当サイトはお客様のコンピュータを識別できるようになりますが、お客様個人を特定できるものではありません。

Cookieを無効にする方法やGoogleアドセンスに関する詳細は「広告 – ポリシーと規約 – Google」をご確認ください。

アクセス解析ツールについて

当ブログでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しております。トラフィックデータは匿名で収集されており、個人を特定するものではありません。

 

お問い合わせについて

お問い合わせは当ブログ著者のTwitterアカウントへのDMやリプライをご利用ください。

ぢ (@pvYuWQykF52nTNy) | Twitter