SCombのコードを読み込んでみる

SCombとはScalaで作られたパーサコンビネータライブラリで実装はこちらになります。ソースコードの行数が600行行程度で読みやすいので、scalaのパーサコンビネータの実装の学習のために手を動かしながらソースコードを読み込んでみたいと思います。

2019年の振り返りと2020年の目標

やってきたことを忘れないためにも2019年を振り返ってみて、2020年の目標を立てたいと思います。 やってきたことですが、個人的な取り組みとしていろいろな言語でパーサーの実装をしてきました。最初に実装をしたJavaでの方針をもとにほかの言語でも作ってみ…

JNIを使ってJavaからCとRustを呼び出してみた

JNIとは JNIとはJavaからネイティブコードを呼び出すための機能です。例えばC言語であればgccでコンパイルするときにsharedのオプションを有効にすることで共有ライブラリが作れるので、Java側ではSystem.loadLibraryやSystem.loadで共有ライブラリを読み込…

ISUCON9 Finalのベンチマークを動かして遊んでみた

ISUCONとは ISUCONとはWebアプリケーションの高速化を競うコンテストです。2011年から毎回開催されていまして、現在(2019年時点)で9回コンテストが開催されています。詳しい説明は公式ページがあるので、そちらを見ればよいかと思います。コンテストで動かす…

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

複数行まとめてgrepしたいことがあったので、調べてみたら以下で説明で同じことをやろうとしていました。 stackoverflow.com grepに対して -P のオプションでPerlの正規表現を使えるようにし、 -z のオプションでテキスト全体を一つの行として扱うことで複数…

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

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

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

Haskellでのモナド型クラスが有名で、Haskellの創始者のひとりであるフィリップ・ワドラーはモナドについて"自己関手の圏におけるモノイド対象"と答えているらしい。そのほかにも調べているとモナドは箱に入った値を返す関数を箱の中の値に適用するといった…

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

以前の作業でscalaでJSONをパースできるようになりましたが、そのままの抽象構文木(AST)の状態だと扱いづらいので変換する方法について調べてみます。 調べたところspray-json-shapelessというものがあり、これが丁度やりたいことに近いかと思います。 spray…

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

株とPython─自作プログラムでお金儲けを目指す本を読んでみました。 書いている内容としては株取引に必要となる基礎知識からシミュレーションを行うために必要なデータの収集方法、それから集めたデータを使ってのシミュレーター実装、取引用戦略と初めて株…

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

金融商品取引業者の種類について調べてみたときのメモ 金融商品取引業者の種類 第一種金融商品取引業 第二種金融商品取引業 投資助言・代理業 投資運用業

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

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

Ninety-Nine Scala Problemsを解いてみた

ドワンゴが公開してい新卒エンジニア向けのScalaの研修資料で一通り終わった後に説明があるNinety-Nine Scala Problemsについてリスト操作の問題を解いてみました。 せっかくなので何問かまとめてみようと思います。 P19 (**) Rotate a list N places to the…

ecサイトをモデリングしてscalaで実装してみる

以前行っていたecサイトのモデリングについて実際にScalaで実装してみたいと思います。 今回は以下のユースケースに対応できるつくりにしたいと思います。 ・ユーザはログイン画面でユーザ名、パスワードを入力してパスワード認証が行える。 ・ユーザはショ…

scalaでパーザーコンビネーターを書いてみた

パーザーコンビネータとは パーザを部品として、より複雑なパーザを構築する手法。例えば文字列の一致など基本的なパーサーを作っていおいて、それを組み合わせることで数式のパーサーを作ったりする。 なぜパーザーコンビネータ? 基本的な文法を覚えた後の…

確率的プログラミングモデルのGenのtutorialを触ってみた

Genとは 初心者向け汎用AIプログラミングシステムとの記事があって気になったのですが、数学の知識がなくても使えるとこことで普通のプログラマーでも扱えることを意識しているのかと思いました。Genの論文ではどのようなモデルでも表現できる『汎用の』モデ…

RSA暗号の仕組みを追ってみた

最近では量子コンピュータの技術が発展してきて2030年頃には2048bitのRSA暗号が突破されると言われているらしいです。RSA暗号は馴染みが深いところでいうとhttpsでのssl・tls通信でも使われている技術になりますので改めて勉強してみようかと思います。 確認…

JMeterを試してみた

簡単に使える負荷テスト用のツールを探してたところJMeterが手軽で十分な機能が使えそうだったので試してみました。 JMeterはこちらからダウンロードできます。macの場合はダウンロード後解凍しsh bin/jmeterを実行することでJMeterが起動します。

プラグイン開発でクリーンアーキテクチャになるよう意識したこと

最近Chrome, Firefoxでのプラグイン開発を行ったので、その時気をつけたことなどまとめてみたいと思います。通常のWEB開発とはまた違った経験ができたので面白かったと思う。

AtCoder ABC Q110の問題DをHaskellで解いてみました

AtCoder ABC Q110の問題DをHaskellで解いてみました 問題 正整数 N,M が与えられます。 a1×a2×…×aN=M となる正整数からなる長さ N の数列 a が何通りあるかを 10^9+7 で割った余りを求めてください。 ただし、数列 a' と a'' が異なるとは、ある i が存在し…

javascriptでdomの正確な位置を取得したい

javascriptでdomの位置を取得するための関数を作成してみました。domの位置として画面上の左上の位置を基準とした座標とdocument上の左上の位置を基準(スクロールを含めたもの)とした座標があると思いますが、その両方を求めれるようにしたいと思います。

IndexedDBを試してみる

IndexedDBを試してみる ブラウザ上のデータを保存したい場合FileSystemAPIがありますが、これは非推奨のようなので代わりに使えそうなのを探していたところIndexedDBが良さそうなので試して見たいと思います。 IndexedDBの使い方はmozillaのサイトを見たらわ…

ECMAScript2015のProxyを使ってobjectの値の変更を検出する

ECMAScript2015でobjectの値の変更を検出して関数を実行する場合、以前であればObject.prototype.watchの機能があったのですが現在では非推奨および廃止とのことなのでECMAScript2015から導入されたProxyの機能を使って値の変更を検出したいと思います。 MDN…

ロジスティック回帰を実装してみる

ロジスティック回帰 2クラス分類のロジスティック回帰をPythonで実装して見たいと思います。 C1, C2の2クラス分類についてクラスC1の事後確率は以下のように表せられます。

ECMAScript6でthisを束縛する方法について

ECMAScript6でthisを束縛する方法について検証した際のメモ まずダメな例として、以下は画面クリックの際に呼ばれる clickFunc から this.calledFunc() を呼び出すことはできません。クリックに反応したelementがthisになるため、この場合はリスナーが設定さ…

webpack入門_typescript

公式のドキュメントを参考にwebpackをTypescriptに対応させたいと思います。 まず以下のコマンドでtypescriptとts-loaderをインストールします。 npm install --save-dev typescript ts-loader

webpack入門_shimming

shimming 公式のドキュメントでShimmingを試してみたいと思います。 webpackの設定ファイルでProvidePluginを指定するとライブラリをグローバルに適用することができ、importなしでも使用することができます。例えばサードパーティ製のライブラリがjQueryを…

webpack入門_Progressive Web Application

Progressive Web Application webpackの公式ドキュメントのProgressive Web Applicationを見ていきたいと思います。 まずPWA(Progressive Web Application)ですが、これはWEBアプリをネイティブアプリのように動作させる技術のようで以下のドキュメントを見…

webpack入門_ライブラリ作成

Authoring Libraries 公式ドキュメントのAuthoring Libraries を参考にnodeのモジュールを作成して参照できるようにしたいと思います。 それではまず、モジュール化させるプロジェクトを作成します。 mkdir webpack-numbers cd webpack-numbers npm init -y …

windows_指定したexeに対してDLLインジェクションでコピペを検出する

前回は自分自身のプロセスに対してDLLインジェクションを実行しメッセージボックスの表示内容を変更しました。今回は指定したEXEに対してコピー&ペーストを検出できるようにしたいと思います。 それではDLL側のプロジェクトをまず作成していきます。

windows_DLLインジェクションで自分自身のプロセスのMessageBox関数のアドレスを変更する

前回まではsetWindowsHookExを使ってメッセージボックス表示の関数呼び出しをフックしていたのですが、今回はDLLを読み込んだ際に既存のMessageBox関数のアドレスを上書きすることでフックできるようにしたいと思います。 やりたいことはこちらの東京工業大学…