じぶんメモ

プログラミングのメモ、日常のメモとか。

railsでポリモーフィック関連でインターフェースっぽく振る舞わせる

railsにもインターフェースはないのかな?と思い調べてみると、 ポリモーフィック関連というものを使うそうです。 例として、Article、Eventという二つのモデルを用意し、 その両方ともにCommentモデルをhas_manyの関係で保持させたいとします。 テーブル定…

has_manyな関連テーブルのレコードのカラムでソート

SQL

チャットとかchat(チャットルーム) has_many chat_messages(チャットのメッセージ)みたいなテーブル構造になると思うが、 この時、チャットルームをメッセージが来た順に並び変えたいとかあると思う。 メッセージの投稿日時がmaxのもので比較してソートする…

Sweet Alertで簡単に綺麗なアラート画面を作る

普通にjavascriptでalert()を使うと味気ないアラートウィンドウしか出ないが、sweet alertを使うと簡単に綺麗なアラート画面を出せる。 jQuery依存でなくプレーンなjavascriptで使用できる。 導入 npmでも公式サイトでjsとcssを落とすでもOK。 落としてきた…

モーダルのサンプル

なにかとモーダルが使われているサービスが多く、気になったので調べた。 z-indexを使ってモーダルと、モーダルの後ろの画面を隠すためのオーバーレイを前面にするのがポイント。 あとはボタン押下でdisplay: noneを解除してあげればOK。 <html lang="ja"> <head> <title>test</title> <link href="test.css" rel="stylesheet" type="text/css" /> </link></head></html>

Railsでgemなしでログイン機能を実装

はじめに Railsでは便利なログイン機能を実装してくれるdeviseやsorceryといったgemが存在します。 導入するだけでsign_inやsign_outといったログインに必要なメソッドを自動的に生成してくれますが、 カスタマイズをする場合には、内部のソースを解読する必…

rspec内でCSFR対策を有効にする

railsでpost送信を行う際に、画面を経由しないリクエストには422が返却される。 これはrailsのCSRF対策である、ActionController::Base.allow_forgery_protectionがtrueになり、ApplicationControllerの protect_from_forgery with: :exceptionで、CSRFチェ…

direnvを使ってディレクトリごとの環境変数設定を行う

direnvを使って、そのディレクトリ下でのみ有効な環境変数を設定する。 前提mac。 $ brew install direnv インストール後、.bashrcまたは.bash_profileに以下の1行を追加 # bashの場合 eval "$(direnv hook bash)" あとは環境変数を設定したいディレクトリ…

railsのモデルに、特定の条件下で動くvalidationを追加

ifを使用した条件分岐 例えば、bという項目がtrueの場合のみaの値は必須にしたい、とかあると思う。 with_optionsメソッドを使用して以下のように実装することができる。 class Post < ActiveRecord::Base # ifオプションで条件に合致する場合のみvalidates…

railsでenumを使う

modelに記述する。 class Post < ActiveRecord::Base enum status: { created: 0, drafted: 1, canceled: 2 } end こうすることで、Post.statusesとして、各Enumにアクセスすることができる。 pry(main)> Post.statuses # => {"created"=>0, "drafted"=>1, "…

シェルでディレクトリ内のファイルの数を調べる

例えばシェルでディレクトリ内に何ファイル存在するか調べるには以下の方法でチェックをする。 ls -FU1 '対象のパス' | grep -v / | wc -l ざっと解説すると、lsの結果をgrepに渡し、grep -vで不要な情報を削除し、 wcコマンドにわたし、数をカウントしてい…

ブックマークレットでフォームに自動的に入力するスクリプトを作りたい

テストとかで画面に値を入力する場合、 繰り返しテストをしていると、 毎回フォームに値を入力しないといけないのがダルい。 ブックマークレットで1クリックだけでフォームに値をセットできるスクリプトを作りたい。 とりあえずフォームの要素に値をセットす…

コマンドプロンプトでgrep

コマンドプロンプトでgrepするならfindstr Windowsのコマンドプロンプトでgrepと同じことをしたい。 findstrコマンドが良さげ。 findstr [オプション] "検索対象文字列" "検索対象のファイル" 以下よく使いそうなオプション デフォルトでは正規表現での検索…

Oracleでテーブルのカラム名表示

全ての詳細表示 DESC テーブル名; テーブルの物理名の表示 SELECT USER_TAB_COMMENTS; テーブルの項目の物理名表示 SELECT USER_COL_COMMENTS WHERE TABLE_NAME = 'テーブル名'; システムテーブルも表示したい場合は、ALL_TAB_COMMENTS、ALL_COL_COMMENTSに…

JavaでのZipファイル作成

JavaでのZipファイル作成方法を調査した。 一例なので、他の方法もあるかも。 肝心なのは、ZipArchiveOutputStreamのflush()を使用して、1ファイルずつZipに書き込んでいるところ。 flushを使わず、全てのファイルをメモリに格納し、 Zipを生成すると、 OutO…

Javaでのファイル出力(Struts2)

Java、Struts2でファイル出力をする方法を調査した。 OutputStreamWriterを使用し、responseにByteArrayOutputStreamから変換したByteArrayInputStreamを設定する。 @Result(name="success", value = "inputStream", params = { "inputName", "inputStream",…

tomcat起動スクリプトを自作する

tomcat起動法 CentOSでtomcatを起動すると、以下の場所に起動シェルスクリプトが生成される。 (環境によって違うかも) /usr/local/tomcat/bin/startup.sh これを実行すればtomcatが起動されるが、面倒なのでservice tomcat startで起動できるようにする。 …

Javaでファイルダウンロード

Javaでファイルをダウンロードする方法について調査した。 ファイルをBufferedInputStreamにし、viewへのリターン時にアノテーションでパラメータとして設定する。 以下Struts2を使用した実装例。 @Result(name="success", value = "inputStream", params = …

Javaでのファイルの存在チェック

File.exists()がよさげ。 // 同名のファイルが存在する場合はシステム日付をファイル名に付与 File file = new File(uploadDir + uploadFileName); if (file.exists()){ System.out.print("ファイルあるよー"); }

Javaでのファイルアップロード

Javaでファイルアップロードを実装する方法を調べた。 FileUtilsのcopyFileが使い勝手が良さそう。 *画面側

macでAlt + PrintScreen的なことをした(アクティブなウィンドウのキャプチャ)

command + shift + 4 押下後にspaceキー押下でアクティブなウィンドウのみのキャプチャができる。

Javaでバイト数での空白埋め

空白埋めにはString.format("%10s", value)を使用すれば良いが、 String.format()はマルチバイトも1文字として認識するため、 固定長ファイル出力など、バイト数での空白埋めをするには個別で実装する必要がある。 以下文字をSJISとして扱った場合の空白埋め…

OutputStream から InputStream への変換

// baosの生成 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // baosへの書込 baos.write(・・・); ・・・ // baosのからbaisへの変換 bais = new ByteArrayInputStream(baos.toByteArray());

Javaで文字コードを指定したファイル出力

文字コードを指定してファイル出力する際は、OutputStreamWriterを使用する。 import java.io.FileOutputStream; import java.io.OutputStreamWriter; public void outputFile() { FileOutputStream outputStream = null; OutputStreamWriter outputStreamWr…

EasyWineでWindowsのアプリケーションを動かす

以下のサイトからEasyWine.appをダウンロードする。 matome.naver.jp ダウンロードしたら、起動するとWindows風のエクスプローラが立ち上がる。 エクスプローラから参照できる場所にwindowsのexeファイルを設置しておけば、windowsのアプリケーションを実行…

VMからvagrantのboxを作成する

1.vagrant用ユーザ設定をする ゲストOS(VM)側で作業をする。 vagrantユーザを作成し、sudo設定をしておく。 # groupadd vagrant # useradd vagrant -g vagrant -G wheel # echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers # sudo設定 # passwd vagr…

MySQLのインポート・エクスポート

インポート hoge$ mysql -u ユーザ名 インポート先DB < ダンプファイル エクスポート mysqldump -u ユーザ名 -r ダンプ先ファイル名 --single-transaction ダンプ対象のデータベース名 オプション ・-t … テーブルのデータのみエクスポートする。 ・--no-dat…

シェルスクリプトでディレクトリ内のファイルに対してループ処理する

たとえばこんなシェルスクリプトをfor.shとか名前をつけて保存する。 for file in `\find . -maxdepth 1 -type f`; do # TODO done そんでもって実行する。 hogehoge:user$ bash for.sh 例)ディレクトリ内のファイルを1つに連結 for file in `\find . -maxde…

Vagrant upで「Authentication failure.」エラーが出る場合

他のユーザがpackage化したboxを使用するときによく発生する。 こうなると、共有フォルダもマウントされなくなる。 原因は、vagrant側のOSの公開鍵と、 vagrant upした際に生成される秘密鍵の組み合わせが合わないということ。 解決するためには以下の手順を…

MySQLでの権限設定

登録ユーザの確認 SELECT user, host FROM user; 権限の表示 SHOW GRANTS for 'hoge'@'%'; 権限のつけ方 GRANT (許可したいコマンド) ON 許可するDB.* TO ユーザ名@'接続元ホスト' IDENTIFIED BY 'パスワード' WITH GRANT OPTION; 権限周りの処理も許可した…

CodeIgniterでindex.phpへのアクセスでエラーが発生。

CodeIgniterでindex.phpにアクセスしたら以下のようなエラーが発生した。 Your system folder path does not appear to be set correctly. Please open the following file and correct this index.php index.phpをapplication、systemsフォルダと違う階層に…