複数行grepする方法を調べてみた
複数行まとめてgrepしたいことがあったので、調べてみたら以下で説明で同じことをやろうとしていました。
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で作って理解するモナド
Haskellでのモナド型クラスが有名で、Haskellの創始者のひとりであるフィリップ・ワドラーはモナドについて"自己関手の圏におけるモノイド対象"と答えているらしい。そのほかにも調べているとモナドは箱に入った値を返す関数を箱の中の値に適用するといったものもあり、大体が数学の専門的な内容であったり抽象的な表現だったりするの勉強を始めたばかりの人には分かりづらい印象です。ScalaではOptionやFutureがよく使われるモナドだと思います。自分がScalaを勉強し始めたころはOptionについてはそんなに抵抗がありませんでしたが、Webアプリを作るときとかに出てくるFutureはfor式などで出てきてややこしかった気がします。
今回は自分でモナドのインスタンスを実装してみてfor式に対する抵抗がなくなることを目指したいと思います。
続きを読むscalaでjsonをパース後のASTを扱いやすいように型変換する方法について調べてみた
以前の作業でscalaでJSONをパースできるようになりましたが、そのままの抽象構文木(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─自作プログラムでお金儲けを目指す本を読んでみました。
書いている内容としては株取引に必要となる基礎知識からシミュレーションを行うために必要なデータの収集方法、それから集めたデータを使ってのシミュレーター実装、取引用戦略と初めて株取引のプログラムを実装に必要な情報はまとめられていそうだと思いました。
サンプルのコードをもとに以下のように実装してみました。
続きを読むCPUの創り方をもとにverilog-hdlでシミュレーションをしてみた
- CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた
- 環境構築(QuartusⅡ)
- 新規プロジェクト作成
- 新規verilogファイル作成
- 環境構築(QuartusⅡ)
- 4bitレジスタの作成
- 演算装置(ALU)の作成
- レジスタと演算装置を組み合わせてみる
- ROMから読み込んだ命令を実行する
- 命令のデコーダを作成する
- クロック周波数を調整してキッチンタイマーとして使えるようにする
CPUの創り方をもとにverilog-hdlでシミュレーションをしてみた
CPUの創り方 にのっているキッチンタイマー(時間固定)のCPUをverilog-hdlでシミュレーションしてみました。実装についてはこちらに作られていたのがありましたので、これをもとに確認しました。
続きを読む