備忘録(Ruby)
Rspecのfill_in
フォームのテキストフィールドに値を挿入
<label for="name">氏名</label> <input type="text" /> fill_in 'メールアドレス', with: '山田太郎' (ラベルの指定だと上手くいかないこともそこそこある) fill_in 'name', with: '山田太郎' //(id指定の方が確実)
Rspecのselect
フォームのセレクトボックスで選択
<label for="prefecture">都道府県</label> <select id="prefecture"> <option value="1">北海道</option> <option value="2">岩手県</option> <option value="3">青森県</option> </select> select '北海道', from: '都道府県' select '北海道', from: 'prefecture' #(id指定の方が確実) find("#prefecture").find("option[value='1']").select_option #(一番確実)
Rspecのchoose
ラジオボタンをクリック
<label> <input id="gender_male" name="gender" type="radio" value="male">男性 </label> <label> <input id="gender_female" name="gender" type="radio" value="female">女性 </label> choose '男性'
Rspecのcheckとuncheck
チェックボタンをチェック
<label>利用規約</label> <input type="checkbox" id="rule" value="1" /> </label> check '利用規約' uncheck '利用規約'
routeでサブドメイン設定
Rails.application.routes.draw do constraints subdomain: 'admin' do resources :admin end constraints subdomain: '' do resources :user end end # admin.example.com/sign_inだと/admin/sign_in # example.com/sign_inだと/user/sign_in # みたいな感じ
備忘録(jQuery)
jQuery
not
取得する要素の除外条件
<p>aaa</p>
<p class="not">bbb</p>
<p>ccc</p>
const p = $('p').not('not')
console.log(p)
=> [<p>aaa</p>, <p>ccc</p>]
each
取得した要素の繰り返し処理
<p>aaa</p>
<p class="not">bbb</p>
<p>ccc</p>
$('p').not('not').each((index, element) => {
console.log(index, element)
}
=> 0 <p>aaa</p>
1 <p>bbb</p>
attr
要素の属性を操作する
<p>aaa</p>
<p class="not">bbb</p>
<p>ccc</p>
$('p').not('not').each((index, element) => {
$(element).attr('class', 'aiueo')
}
console.log($('p'))
=> [<p class="aiueo">aaa</p>, <p class="not">bbb</p>, <p class="aiueo">ccc</p>]
removeAttr
要素の属性を削除する
<p class="aiueo">aaa</p>
<p class="not">bbb</p>
<p class="aiueo">ccc</p>
$('.aiueo').each((index, element) => {
$(element).removeAttr('class')
}
console.log($('p'))
=> [<p>aaa</p>, <p class="not">bbb</p>, <p>ccc</p>]
備忘録(Python)
Python
String[i:j]
文字列を切り出す
word = "hello world" word[2:6] => 'llo ' word[:3] => 'hel' word[9:] => 'ld' word[:] => 'hello world' word[-5:-1] => 'world' word[2:2] => ''
値 in List
Listが値を要素に含むかどうか
l = ['aaa', 'bbb'] 'aaa' in l => True 'ccc' in l => False
List.extend(List)
Listを結合
l1 = ['aaa', 'bbb'] l2 = ['ccc', 'ddd'] l1.extend(l2) print(l1) => ['aaa', 'bbb', 'ccc', 'ddd']
del List[i:j]
Listのインデックスが[i, j)の要素を削除
l = ['aaa', 'bbb', 'ccc'] del l[1:2] print(l) => ['aaa', 'ccc']
備忘録(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を用いて扱っている。macでpythonをインストールする記事でも大抵はpyenvを紹介している。
windowsのPCからmacで作成したソースコードを操作することもしばしばあるので、同様の操作によって扱えるようにするためにpyenvをインストールする。
windowsでUbuntu(WSL2)を使えるようにする手順は以下記事の下部に書いた。
手順
説明を省いた手順。手順の詳細が必要な場合はここから。
# 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)に追記。
pyenvの使い方はこちらを参照。
local, global, install, versions 辺りをよく使う。
pyenv install x.x.xを実行したときのエラー対応
pyenv install x.x.xを実行するとエラーが出て失敗するので以下の対応をしておく。
1つ目(おそらくWSL2でインストールしたUbuntuを使用している場合のみ)
WSL2でインストールしたUbuntuを使用している場合、pyenvでpythonをインストールする際のcurlが悪さをして上手くいかない。(以下のようにtimeoutして失敗します。)
wgetであれば通るということなので、pyenvのソースコードの一部差し換えを行う。
pyenvがインストールされた~/.pyenv内をdetect_http_clientで検索すると、plugins/python-build/bin/python-buildに該当箇所があるとわかるので、以下のように差し換える。
こちらが参考になりました。WSLでのUbuntuに関する他の対応も書かれているので参考になる人が多そうです。
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を入れた。
順番
- homebrewでpyenvをインストール
- pyenvで好きなpythonのバージョンをインストール
- よく使うパッケージをインストール
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に設定すればいい。