複数行grepする方法を調べてみた

複数行まとめてgrepしたいことがあったので、調べてみたら以下で説明で同じことをやろうとしていました。

stackoverflow.com

grepに対して -P のオプションでPerl正規表現を使えるようにし、 -z のオプションでテキスト全体を一つの行として扱うことで複数行のgrepが実現できるようです。

windows10のwslで試しに実行してみたところ。

$ cat test.txt
xaaaxxxxxxxxx
xbbbxxxxxxxxx
xcccxxxxxxxxx
xaaaxxxxxxxxx
xbbbxxxxxxxxx
xaaaxxxxxxxxx
xcccxxxxxxxxx
xaaaxxxxxxxxx
xbbbxxxxxxxxx
xcccxxxxxxxxx

$ grep -Pzon  ".*aaa.*\n.*bbb.*\n.*aaa.*\n" test.txt
1:xaaaxxxxxxxxx
xbbbxxxxxxxxx
xaaaxxxxxxxxx

.*aaa.*\n.*bbb.*\n.*aaa.*\n の3行を対象にgrepできていることが確認できました。ただし、これだと -z でテキスト全体が1行という扱いになるため -n で行を表示しようとしてもうまくいかないようです。

続きを読む

Scalaでのモナドの活用事例について

Scalaのfor式ではmap, flatMap関数を使って処理をつなげていけることが分かったとしても、実際にどのような場面で使われるのかが把握できないとモナドを使うメリットがわかないと思います。なので今回はScalaでのモナドの活用方法をいくつかまとめていきたいと思います。

続きを読む

Scalaで作って理解するモナド

Haskellでのモナド型クラスが有名で、Haskell創始者のひとりであるフィリップ・ワドラーはモナドについて"自己関手の圏におけるモノイド対象"と答えているらしい。そのほかにも調べているとモナドは箱に入った値を返す関数を箱の中の値に適用するといったものもあり、大体が数学の専門的な内容であったり抽象的な表現だったりするの勉強を始めたばかりの人には分かりづらい印象です。ScalaではOptionやFutureがよく使われるモナドだと思います。自分がScalaを勉強し始めたころはOptionについてはそんなに抵抗がありませんでしたが、Webアプリを作るときとかに出てくるFutureはfor式などで出てきてややこしかった気がします。

今回は自分でモナドインスタンスを実装してみてfor式に対する抵抗がなくなることを目指したいと思います。

続きを読む

scalaでjsonをパース後のASTを扱いやすいように型変換する方法について調べてみた

以前の作業scalaJSONをパースできるようになりましたが、そのままの抽象構文木(AST)の状態だと扱いづらいので変換する方法について調べてみます。

調べたところspray-json-shapelessというものがあり、これが丁度やりたいことに近いかと思います。

spray-json-shapelessでは以下のようにパース後の結果に対してconvertTo[T]を呼び出すことで任意のオブジェクトに変換できているようです。

package example

object TrySprayShapeless extends App {

  import spray.json._
  import fommil.sjs.FamilyFormats._

  case class Foo(a: String, b: Double, c: Boolean)

  val sprayJsonConvertResult = """{"a":"foo","b":42.0,"c":true}""".parseJson.convertTo[Foo]
  println(sprayJsonConvertResult)

}

spray-json-shapelessはshapelessというscalaジェネリックプログラミングを可能にするライブラリを使用しているのでここまでできると思うのですが、まずはspray-json自身で基本的な型に変換するまでの処理を追えるようになりたいと思います。

続きを読む

株とPythonの本を読んで株取引のシミュレーションを実装してみた

株とPython─自作プログラムでお金儲けを目指す本を読んでみました。

書いている内容としては株取引に必要となる基礎知識からシミュレーションを行うために必要なデータの収集方法、それから集めたデータを使ってのシミュレーター実装、取引用戦略と初めて株取引のプログラムを実装に必要な情報はまとめられていそうだと思いました。

サンプルのコードをもとに以下のように実装してみました。

github.com

続きを読む

金融商品取引業者の種類について調べてみた

金融商品取引業者の種類について調べてみたときのメモ

金融商品取引業者の種類

続きを読む

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた

  • CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた
    • 環境構築(QuartusⅡ)
      • 新規プロジェクト作成
      • 新規verilogファイル作成
  • 4bitレジスタの作成
  • 演算装置(ALU)の作成
  • レジスタと演算装置を組み合わせてみる
  • ROMから読み込んだ命令を実行する
  • 命令のデコーダを作成する
  • クロック周波数を調整してキッチンタイマーとして使えるようにする

CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた

CPUの創り方 にのっているキッチンタイマー(時間固定)のCPUをverilog-hdlでシミュレーションしてみました。実装についてはこちらに作られていたのがありましたので、これをもとに確認しました。

続きを読む