Ninety-Nine Scala Problemsを解いてみた

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

P19 (**) Rotate a list N places to the left.

P19 (**) Rotate a list N places to the left.
Examples:
scala> rotate(3, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k))
res0: List[Symbol] = List('d, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'a, 'b, 'c)
scala> rotate(-2, List('a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k))
res1: List[Symbol] = List('j, 'k, 'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i)
続きを読む

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

以前行っていたecサイトのモデリングについて実際にScalaで実装してみたいと思います。

今回は以下のユースケースに対応できるつくりにしたいと思います。

・ユーザはログイン画面でユーザ名、パスワードを入力してパスワード認証が行える。
・ユーザはショッピングカートに商品を入れることができる。
・ユーザはショッピングカートに入れた商品の品目を更新できる。
・ユーザはショッピングカートに入れた商品をクレジット、または銀行振り込みで購入できる。
・ユーザは商品の購入手続き時にクーポンコードを入力できる。
・クレジットカード支払いの場合、購入時に支払いが行われて配達予定日を表示する。

実装はこちらになります。Play Frameworkを使用しDBアクセスのライブラリにはslickを使っています。 先に動作を確認してみたいと思います。

続きを読む

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

パーザーコンビネータとは

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

なぜパーザーコンビネータ

基本的な文法を覚えた後の次のステップにちょうど良い規模(小さすぎず、大きすぎず) 言語の機能を幅広く使うことができる

Javaでのパーザコンビネータの実装としてこの記事が参考になりましたので、これをもとに自分なりにScalaで書いてみたいと思います。

続きを読む

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

Genとは

初心者向け汎用AIプログラミングシステムとの記事があって気になったのですが、数学の知識がなくても使えるとこことで普通のプログラマーでも扱えることを意識しているのかと思いました。Genの論文ではどのようなモデルでも表現できる『汎用の』モデリング言語を提供しているシステムもあるが、そういったシステムは使いものにならないほど収束の遅い推論アルゴリズムしかサポートしていないとのことで、Genでは汎用目的でもその問題を改善しようとしているらしいです。

続きを読む

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

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

続きを読む

JMeterを試してみた

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

続きを読む

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

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

続きを読む