コロナの間に技術資産を増やす
ソース
問題発生しまくり
apache+passengerでrailsを連携して動かそうと思ったらAWSEC2インスタンス作成時はt2.microだったためメモリが1Gしか積んでおらず
メモリ不足で動かない。
なのでNginx+Unicornで環境を構築することに。。
初めて使うWebサーバとアプリケーションサーバだったので四苦八苦しまくりました。
一応トラブルシューティングをQiitaに投稿したためここにくっつけときます。
- AWS+Nginx+Unicornのトラブルシューティング
これからの課題
一応TODO機能は作り終えたのでこっからユーザ登録とかCI,CDを構築していきたい。
その辺も終わったらまとめます。
ストアドプロシージャ、ストアドファンクションについて
背景
実業務でRailsからDBを叩くときに簡単な判定をストアドファンクションでまとめようという話がでた。
簡単に要点をまとめておきます。
ストアドプロシージャ、ストアドファンクション
1つの要求で複数のSQLを実行出来る機能です。
- ストアドプロシージャ
- 戻り値がない
- ストアドファンクション
- 戻り値がある
/sample.sql
DELIMITER // DROP FUNCTION IF EXISTS is_sample; CREATE FUNCTION is_sample(val INT) RETURNS TINYINT DETERMINISTIC BEGIN DECLARE T TINYINT; DECLARE F TINYINT; SET @T = 1; SET @F = 0; IF val IN(1, 2, 3) THEN RETURN @F; ELSEIF val BETWEEN 10 AND 20 THEN RETURN @T; ELSE RETURN @F; END IF; END; // DELIMITER ;
DELIMITER //
- クエリ内で「;」を使用するためデリミタを最初に変更してあげる。
DROP FUNCTION IF EXISTS is_sample;
- もし同じ名前でDB内に登録されていたらドロップして再登録
CREATE FUNCTION is_sample(val INT) RETURNS TINYINT DETERMINISTIC
- ファンクション名と引数、引数の型、戻り値の方を定義する
レプリケーションを行っていてかつ、ファンクション内で動的に処理を行う場合は
NOT DETERMINISTIC
レプリケーションを行っていてかつ、同じ引数を与えると毎回同じ値が返ってくるような処理の場合は
DETERMINISTIC (今回は数値の判定のみなのでこちら)
DELIMITER ;
- デリミタをもとに戻す
判定について
普通にif,else ifが使用できます。条件のあとに処理を書きたい場合はTHENを記述します。
bool型について
数値の値に応じてTRUE,FALSEを返すストアドを作りたかったんですが、どうやらbool型を返すことができないようなので
TINYINT 型を使用しています。
まぁ実際プログラムでもTRUE,FALSEは1,0で表現されているので問題なさげです。
モスコーニカップ2019終了
モスコーニカップ終了
ビリヤードイベントの中でも一番の盛り上がりを見せるモスコーニカップ2019が
アメリカ 11-8 ヨーロッパ
で終了しました。
ネームバリュー的には圧倒的にヨーロッパ有利なんですけど、アメリカの勝利。
2連覇はすごいです。(その前に何年も連敗しているけど。)
個人的に好きだったプレイヤー
今回の大会で個人的に好きだったプレイヤーは
justin burgman
ジャスティン・バーグマン
ですね。
シングルスよりダブルスを担当していたプレイヤーです。
結構捻るショットを選択することが多くて、自分の選択肢ととても似ていたのでめちゃめちゃ勉強になりました。
プレッシャーがかかる場面で難しいショットが来たときは結構シュート率が下がってたけど、それは相方の
ミスもあったんで一概にバーグマンが悪いとは言えないかなと思います。
ワンポケットも得意なようで、オフェンシブなバンクやセーフティが結構光ってました。
まぁでも、ソープと組んだ時にソープのスーパーショットが決まった後に大きなミスをしてしまって、ヒルヒルゲームを負けてしまったので、そこはアメリカのファンたちに責められるでしょうね。ソープがその前にめんどくさいところにポジションしたのが問題だと僕は思うんですけど、一般の人は結果を重視するからしょうがない。
あと、バーグマンが使っていたシャフトはもしかしたらディヴィニーが出してる燻製したシャフトなのでは?
と思ってます。明らかに色が濃いので。
雰囲気
やっぱりビリヤードの大会では無い位盛り上がってますね。
ヤジがすごいし、選手のプレッシャーになるような大声で囃し立てるし。
みんな酒を飲みながら観戦してるから、すごいテンションです。
でも、これくらいのほうが動画見てるほうも面白いし、僕個人としてはモスコーニカップの雰囲気は大好きです。(相手チームのサポーターが中指立てまくってておもしろい)
まとめ
モスコーニカップはやっぱり面白い
バーグマンのこれからの戦いが気になる
バーグマンのシャフトも気になる
RailsじゃないRspecで書かれたテストに途中からFactoryGirl導入
背景
Railsではない環境でFactoryGirlを導入したけど、既存で書かれたテストに影響を
及ぼしたくない。
Rails環境だとFactoryGirl_railsがfactoryファイルのパスを自動で読み込んでくれるため
特に設定する必要はないが、ノーマルのFactoryGirlだと
definition_file_paths
find_definitions
の2メソッドを使用してFactoryファイルの場所を指定してあげる必要がある。
もし。既存テストをFactoryGirl無しで書かれている場合はspec_helper内で
設定を分ける方法が必要
shared_contextの活用
Factoryを使用するspecと使用しないspecでshared_contextを分けて定義する。
/spec/spec_helper.rb
shared_context 'Factory init', :factory_init => true do RSpec.configure do |config| # factory method config.include FactoryGirl::Syntax::Methods # factory path FactoryGirl.definition_file_paths = [File.expand_path('/home/imada/rails_app/spec/factories/', __FILE__)] FactoryGirl.find_definitions end end
このshared_contextを定義することで既存specとfactoryを使用したspecとで設定を分けることができる。
Railsだと
config.include FactoryGirl::Syntax::Methods
だけでいいっぽいけど
後は実際のspecファイル内で
RSpec.describe "factory test", :factory_init => true do end
を記述すればOK
WindowsとGit bashとLinuxコマンド
chmod使えない
Windows上でVSCodeを開きターミナルにはGit bashを選択しMacと同じ開発スタイルで楽しんでいた所、ビルドする時に楽をするためにshellを書いていたのですが、shellがうまく動かない。
ls -lで見てみるとどうやら実行権限がないみたい。はいはい、よくあるよね。ってことで
chmod 777 build.sh
これでいけるっしょ。
ls -l
変わっていないだと・・・。
Windowsのファイルシステム
どうやらWindows10のファイルシステムNTFSが原因のようでした。
chmodコマンドはファイルに実行権限や読み取り書き込みの権限を付与するものなのですが、NTFSにはそもそも実行権限という属性を持っていないのでうまく動かないようです。
まとめ
.shを.exeにすればとりあえず動くので、そっから調整するのがいいかも。
Windows10 LaTeX環境構築 VSCode,Git Bash,Makefileも添えて
環境構築
- LaTeX導入
www.ms.u-tokyo.ac.jp
1.こちらからインストーラをダウンロード
2.どこでもいいので、ファルダを解凍
3.abtexinst.exeを実行
4.
ファイル保存先と、インストール先を任意に設定して、次へをクリック(わかんない場合はデフォルトでOK)
dvioutとGhostscriptに関してもデフォルトでOKなので、次へをクリック
ファイルの取得がうまくいかない場合はURLの部分を他のURLに変更して実行するとうまくいく場合がある。
5.インストールファイルを選択して次へをクリックしインストール開始
6.GhostscriptはNextでOK
7.I Agree
8. Finishをクリック
再起動がかかると思うので、再起動します。
qiita.com
こちらの記事を参考に導入
※なくてもCLIで動きます。
- windows makeの導入
note.mokuzine.net
こちらの記事を参考にWindows Makeを入れます。
※Makefileとかいらねぇって人は飛ばしてもOK
qiita.com
こちらの記事を参考に設定
上記のコラボ設定を行っていれば
Ctrl+Shift+@(Windowsの場合)
でターミナルをVSCode上に出すことができる。
Git Bashで
make -v
正常にmakeが導入されていれば
$ make -v GNU Make 3.81 Copyright (C) 2006 Free Software Foundation, Inc. これはフリーソフトウェアです. 利用許諾についてはソースを ご覧ください. 商業性や特定の目的への適合性の如何に関わらず, 無保証です. This program built for i386-pc-mingw32
みたいに表示される。
TeXファイル作成
なんでもいいので作成します。
ここでは
main.tex
として作成します。
※なんでもいいってなんやねんて方は
texwiki.texjp.org
を参考にすればいいと思います。
Texファイルのコンパイル
.texファイルのコンパイルは、日本語の場合「platex」です。使い方は、「platex オプション LaTeXファイル(*.tex)」になり、オプションには文字コードが入ります。
今回は
- kanji=euc
オプションで行います。
上記でmain.texを作成していると思うので
PDFに変換
コンパイルすると,dvi ファイル (main.dvi) が出来上がっていると思います。
この dvi ファイルを pdf に変換してドキュメント化します。
dvipdfmx main.dvi
を実行するとPDFファイルが生成されます。
Makefileの作成
毎回platex,dvipdfmxコマンドを打つのがめんどくせぇって方はMakefileを作成するといいかもしれません。
# Makefile PLATEX = platex -kanji=euc DVIPDFMX = dvipdfmx RM = /bin/rm -f TARGET=main.dvi all: make again make pdf pdf: $(DVIPDFMX) $(TARGET) again: $(PLATEX) main.tex allclean: $(RM) *.pdf *.old make clean clean:: $(RM) *.dvi *.aux *.log *.idx *.out\ *.lot *.lof *.toc *~
このコードをMakefileというファイル名でmain.texと同じフォルダに保存します。
すると
- make
コンパイルとPDF化を行う
- make clean
make時に自動生成される一時ファイルを削除する
が使えるようになります。
※make,make cleanのどちらもMakefileがあるフォルダ内で行ってください。
これでめんどくさいコマンドや、うっとおしい一時ファイルともおさらばです。