Laravel - DB::transaction中でDB::rollbackを呼んでいるとRefreshDatabaseを使っているテストでロールバックされない

php

環境 Laravel 5.5 PostgreSQL でも他のDBでも同じはず 現象 use RefreshDatabaseを使ってテスト毎にロールバックしているにも関わらず、データが残ってしまい後続のテストが落ちる。 原因 業務コードの方でDB::transaction()を使い、その中でDB::rollback()…

fish - rangerの多重起動を避ける設定

rangerというCLIのファイラがあるのを知って最近使っている。 参考: CLI で Linux ファイルマネージャ ranger を使うことのメモ Macならbrew install rangerで入る。homebrewほんと便利。 そんなrangerの設定というかカスタマイズで「多重起動を避ける」とい…

PHPのテストで本当にdataProviderを使う必要があるのだろうか

php

PHPUnitにはdataProviderという機能がある。 パラメタライズドテスト、またはテーブルドリブン(駆動)テストで書くための仕組み。 僕はずっとこの機能が使いづらくて、普通にforeachで回す方が良いのではと思っている。 今日たまたまdataProviderを推奨してい…

phpcon2018のLTで見たPREG_JIT_STACKLIMIT_ERRORについて調べた

php

先日のPHP Conference 2018でこのようなLTがありました。 RegExp Error caused by PHP upgrade 5.6 to 7.2 スライドはLT用にシンプルなので、同じ発表者さんのQitta記事を見た方が伝わるかもしれません。 PHPを7.2にバージョンアップしたら正規表現でマッチ…

fishとzsh - プロセス置換などコマンドの書き方の違いあれこれ

普段はfishを使っていて満足だけど、次のようなケースでbash/zshとの違いに戸惑うことがある。 Web上の記事からコピペで実行したい時 そういえばfishのコマンドがそのまま載った記事はほとんど見ない気がする チーム開発をしていて、他の人がシェアしたコマ…

iTerm2からTerminal.appに戻ろうとして断念した

最近Vimとターミナル環境をリニューアルしている。 これまでずっとiTerm2を使っていたけど特に理由はなかった。最初にMac環境を色々構築した時に「iTerm2がナウいよ」って記事を読んで、良く分からないまま適当に入れただけだった。 標準のTerminal.appに出…

さよならVim

vim

これはVim大好きだったプログラマがVim情報を追わなくなり、メインで使わなくなって、また帰ってくるまでの5年間の記録です。 Vimの情報を追わなくなった それまでVimの情報を追い続けて、面白そうなプラグインは試して、自分でVimプラグインを作っていた僕…

ファイルが変更されたら特定のコマンドを実行するentrというシンプルなツール

あるファイルが変更されたら特定のコマンドを実行したいというケースは良くある。例えばテストの自動実行とかブラウザの自動リロードとかサンプルコードを走らせたいとか。 これらを解決する手段としてguardが有名だしgulpで解決している人も多い。 entrはそ…

Vim - 開いているファイルや選択しているコード行をGithubで開く

vim

チーム開発をしている時など、「選択しているコード行のGithub URLが欲しい」ケースは多い。 URLで指定した行番号をハイライトしてくれる、こういうURL。 https://github.com/previm/previm/blob/12226fa0e3e807a6498cd6bd6de8af70278203fe/autoload/previm.…

Laravelのセッションに関するテストでSession name cannot be emptyが出て落ちる場合の対応

php

軽い気持ちでcomposer updateしたらテストが落ちて、その調査と暫定対応をしたのでメモ。 エラーログ PHPUnit\Framework\Exception: [2017-12-04 00:44:41] testing.ERROR: Session name cannot be empty, did you forget to call "parent::open()" in "Symf…

TRCとopenBDを利用した新刊一覧を表示するサイトを作った

こちらのニュースを今日知りました。 TRC新刊図書オープンデータを公開しました!! 数日前にアナウンスがあったようですが、見落としていました。 せっかくなので、無料かつ飽きない程度の実装で「新刊一覧」サイトを作りました。 サイトはこちらです。 htt…

PHPのnull[0]はエラーにならないしnoticeも出ない

php

背景 null変数に添字アクセスするところで、落ちると思っていたら落ちなくてびっくりした。 環境 OSX 10.11.5 PHP 7.0.14 (cli) (built: Apr 1 2017 23:41:23) ( NTS ) Copyright © 1997-2016 The PHP Group Zend Engine v3.0.0, Copyright © 1998-2016 Zend…

Gaucheで指定文字を指定回数繰り返す書き方

背景 Gaucheで指定した文字を指定した回数だけ繰り返したい。 Rubyでいう"a" * 5、PHPでいうstr_repeat('a', 5)のようなこと。 irb(main):002:0> "a" * 5 => "aaaaa" 目的は受け入れテストにて「x文字以上ならエラー」というケースでx文字を簡単に用意したか…

jQueryのonでハンドラを複数登録するのとaddEventListenerで複数登録するのは微妙に挙動が違う

背景 jQueryのonにハンドラを複数登録するのと、addEventListenerで複数登録するのは微妙に挙動が違う。 それについて調べる必要があったのでメモ。 環境 Chrome バージョン 58.0.3029.110 (64-bit) 再現 formのsubmitを押した時のハンドラを複数登録する。 …

LaravelでクエリビルダーやEloquentを使ったupdateの戻り値の違い

php

背景 Laravelアプリケーションでレコードをupdateするやり方が色々あり、戻り値の違いについて調べた。 結論 表にまとめた。 書き方 戻り値の型 更新対象がない時の戻り値 \DB::table(‘samples’)->where($where)->update($values) int(件数) 0 \App\Sample::…

Ruby - csvをmarkdown形式のテーブル表記にするサンプルコード

探せば色々な言語のサンプルコードがある。 気分転換に自分でも書いてみた。 整形しないで出力 require 'csv' def print_to_table(rows) header = rows[0] contents = rows[1..-1] puts "|" + header.join("|") + "|" puts "|" + Array.new(header.length, "…

phpのini_set("max_execution_time",n)とset_time_limitの違いについて調べた

php

背景 phpでスクリプトのタイムアウト上限を伸ばすには2つの方法がある。 set_time_limitを呼ぶ方法 php.iniもしくはini_setでmax_execution_timeを変更する方法 このうちset_time_limitのドキュメントにこのような記述がある。 デフォルトの制限値は 30 秒で…

GaucheでRubyのArray#product同等の関数

結論 Gaucheではcartesian-productを使うと良い。 以下は、この関数を見落としていたことによる悪戦苦闘の記録。 背景 業務中にちょっとしたスクリプトで「複数の配列の直積」が必要になった。 例: 入力: [[1, 2], [3, 4], [5]] 出力: [[1, 3, 5], [1, 4, 5]…

Laravelにおける複文のSQLインジェクション対策

php

背景 LaravelアプリケーションでSQLインジェクションのテストを行っていて、わざとSQLインジェクションが起こるようなコードを書いたのに実行されなくて調べた。 (まずはSQLインジェクションが発生することを確認してから、その対応を入れて発生しなくなった…

Gaucheの無名関数について - lambda, ^, ^c, cut

背景 とあるネット記事のGaucheのコードを読んでいて^ _ ( 何か処理 )というのがあってこれは何だと思って調べたメモです。 ^自体は知っていたのですが、^ _という別の記法もあるのかなと不思議に思ったので。 無名関数 公式ドキュメント: 4.3 手続きを作る …

尿膜管遺残/臍炎にかかって回復するまでの記録

背景 去年「尿膜管遺残」(当初は臍炎と診断)という病気にかかり1ヶ月近く仕事を休みました。 当時痛みと不安が増す中で、同様の症状にかかった個人ブログを読んでとても励まされました。 その時「同じ病気にあった人の参考になるように自分も体験記を書こう…

Gaucheで指定した数の数字の配列を作るiota

「1から10までの配列から奇数だけを取り出す」というお題を見てGaucheだとこう書くかなって考えた時に、Gaucheで「数字を指定して範囲を取り出す関数って何だっけ」となったのでメモ。 iota iotaだった。最初rangeとかtimesとかの単語でドキュメント引いて見…

MySQLでgroup byなしでcountとorder byを同時に使うとエラー

MySQLとLaravelの話です。 MySQLのSQL_MODEにONLY_FULL_GROUP_BYが指定されていると、group by無しでcountとorder byを同時に使うと以下のエラーが発生します。 ERROR 1140 (42000): Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP colum…

Gauche - ファイル読み込みのサンプル

gaucheでファイルを読み込むやり方のメモ。 一行ずつ読み込んで処理する (call-with-input-file "/Users/kanno/tmp/codes/a.scm" (lambda (in) (port-for-each (lambda (line) ; 1行ずつ行う何かしらの処理 (print line)) (cut read-line in)))) 一度に読み…

GaucheのドキュメントをDashに追加する

背景 Gaucheのドキュメントを見るにはEmacsのinfoから引けるようにしたりブラウザで見たりとあるけど、個人的にはDashで引けると助かる気がしたので追加してみた。 手順 GaucheのドキュメントHTMLを作成 僕はVM上のcentosでHTMLを作ったけど、Macでやるのも…

ソースコードの分かりやすさって何だろう

結論はない。 背景 最近またGaucheを勉強し始めているのだが、ドキュメントを読むとdatumという表現が良く出てくる。 Special Form: case key clause1 clause2 … [R7RS][SRFI-87] keyは任意の式です。clauseは以下の形式でなければなりません。 ((datum ...)…

Go言語でWebアプリを作りかけて辞めた話

3行で要約 golangでwebアプリを作り始めた golangは好きだけど、今回求める要件に合わないことに気付いた 途中まで書いたコードを捨ててRailsで書き直した 私のGoスキル A Tour of Goを途中まで みんなのGo言語を読んだ スターティングGo言語を読んだ スクレ…

Vim - previmにヘッダーを隠す設定を追加しました

vim

プレビュー時に画面上部に出ていたヘッダー部を非表示に出来ます。 g:previm_show_header *g:previm_show_header* 型:数値 値が1ならば、プレビュー時にヘッダーを表示します。 ヘッダーには編集しているファイル名と更新日時が表示されます。 値が0ならば、…

Vim - previmでmermaidに対応しました

vim

Shibaで図を書いてTracで共有するを見てmermaidを知りました。 参考: mermaid.jsが素晴らしいけどなかなか使ってる人見かけないので実例晒す(追記あり) 面白そうだし、上記の公式サイトにmarked対応のサンプルもあったのでprevimでも対応しました。 下記のよ…

Vim - 文字列連結で再代入する場合はjoinを使う方が早そう

概要 自作プラグインのコードに以下のようなTODOが残っていました。 " TODO リストじゃなくて普通に文字列連結にする(テスト書く) for line in s:do_external_parse(a:lines) let escaped = 適当な処理 call add(converted_lines, escaped) endfor return jo…