じぶんメモ

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

typescriptのビルド設定

はじめに babel7がリリースされましたね! それに伴いtypescriptもサポートされたのでbabel単体でtsのビルドができるようになりました。 しかしbabelはtypescriptから型情報を取り除くだけなので型チェックまではサポートしておらず、 型チェックに関してはt…

golangテストはじめ

Go

はじめに golangでのテストはとてもシンプルで、rubyのrspecのように新しくDSLを覚える必要もありません。 テストについての記事は沢山あるのですが、自分の中で特にこれは最初に覚えておいた方がいいなと思うことをピックアップしました。 基本的なtestの書…

anyenvを使って~env系をひとまとめにする

ruby, pythonを使用しているとrbenv, pyenv等を使ってバージョン管理をするが、 これらのバージョン管理システムは、言語ごとに導入、PATHを通す必要がある。 anyenvを使用すれば、これらの言語ごとのバージョン管理システムを一元管理できる。 1.以前使用し…

gitで歴史を改ざんするには

git

直前の履歴を改ざんする 1. コミットをなかったことに HEADの一つ前に戻る。 $ git reset HEAD~1 $ git push -f origin 2. コミットを修正 対象ファイルを修正し、commit --amendする。 $ git commit --amend $ git push -f origin 特定の歴史を改ざんする r…

n-gramによる文章の類似率を求める

N-gramとは、テキストで隣り合ったN文字のことを示す。 以下では2つ文章を指定された文字数で分割し、2つの文章間で分割した文字がどれだけマッチするかの頻度から、2つの文章の類似率を求める。 def ngram(str, num): res = [] slen = len(str) - num + 1 f…

TensorflowとKerasを用いてmnistのCNNを構築してみる

コードは以下の通り。 Tensorflow・Kerasを使ってmnistの訓練を行う from keras.models import Sequential from keras.datasets import mnist from keras.layers.convolutional import Conv2D from keras.layers.pooling import MaxPooling2D from keras.lay…

TensorflowとKerasを使ってmnistの訓練と評価をしてみる

Tensorflow・Kerasとは(ザックリ) Tensorflowはpythonで使える機械学習のためのライブラリ Kerasは更にラッパーライブラリで、Tensorflowだと数百行かかるコードが数十行で済んだりする。 インストール方法 とりあえずpipで入れてみる。 $ pip install -U te…

【ゼロから作るDeep Learning】要点まとめ 第7章

7章 - 畳み込みニューラルネットワーク CNN(Convolutional Neural Network)は、畳み込み層、プーリング層からなる学習方法 基本的にはconv→relu→conv→relu→...→pool→conv→relu→conv→relu→...→pool→affine→softmaxの流れ conv→relu or conv→relu→poolが隠れ層…

【ゼロから作るDeep Learning】要点まとめ 第6章

6章 - 学習に関するテクニック 勾配法の種類 勾配法の種類はSGD, Momentum, AdaGrad, Adamがある。(AdaGrad,Adamが学習スピードが早い) 重みパラメータと活性化関数での出力値 重みパラメータの初期値は小さくすることで過学習を防げるが、0にすると各層で…

【ゼロから作るDeep Learning】要点まとめ 第4章, 第5章

4章 - ニューラルネットワークの精度を高めるためには 損失関数 ニューラルネットワークで出力された結果に対して、損失関数を使ってニューラルネットワークの精度の悪さを求める。 損失関数の引数は、ニューラルネットワークの出力結果と、正解ラベル(教師…

【ゼロから作るDeep Learning】要点まとめ 第3章ニューラルネットワーク

最近オライリー社から出版されている「ゼロから作るDeep Learning」を読み始めた。 数学の知識がない僕には結構難しかったので、備忘録として要点をまとめていこうと思う。 1,2章に関してはpythonの話や、ANDゲート等の基本情報的な内容が多いので、ここでは…

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が使い勝手が良さそう。 *画面側