タグ

ブックマーク / uehaj.hatenablog.com (69)

  • List.collectManyで非決定計算 - uehaj's blog

    これはG*Advent callender 2016の記事です。 前日は@Ziphilさんの記事でした。明日はまた私@uehajの記事です。 出オチでタイトルオンリーです。 すごいHaksell楽しく学ぼう(以降H)にも書かれているように、リストはモナドとみなすと「非決定計算」をあらわすものとみることができます。 つまりたとえばリスト[1,2,3]を「1か2か3のどれか」、リスト[2,3]を「2か3のどれか」をそれぞれあらわすもの、と見るってことです。その上で、[1,2,3] * [2,3] という操作を何等かの方法で表現すれば、「1か2か3のどれか」に「2か3のいずれか」を掛けたものという意味になり、結果として「1*2,2*2,3*2,1*3, 2*3,3*3]すなわち「1か4か6か3か6か9のどれか」を得ることができます。 さて、Groovyのリスト(厳密にはIterable)には、

    List.collectManyで非決定計算 - uehaj's blog
  • Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ - uehaj's blog

    TL;DR JDK(tools.jar)中、com.sunパッケージ配下に、javacが内部的に使っている「com.sun.tools.javac.util.List 」が含まれており、これは不変データ構造としてのリストのように(Cons セルベースのリストのように)利用できる。 はじめに ScalaのコードをGroovyやJavaなどに移植する際に、いつも悲しい思いをするのが不変データ構造に基づいたリスト処理ライブラリが見あたらない、ということでした。JDKの標準コレクションライブラリには、Scalascala.collection.immutable.Listのような、不変データ構造を用いて実装されているリストがありません。 ここで言う不変データ構造に基づいたリストとは、JDKのjava.util.Collections.unmodifiableList()等で取得できるような変更禁

    Javaにも不変データ構造に基づいた(Cons セルベースの)リストがあるのだよ - uehaj's blog
  • (Babel 5における)ES6のモジュールを解説してみた - uehaj's blog

    警告 以下でのモジュールの説明はトランスパイラであるBabel 5,6で動作を確認した振舞いについての記述です。2015年11月現時点で、ECMAScriptのモジュール仕様策定範囲は、来の全体範囲のまだ一部であるとのことです。その状況でのBabelの実装は、良く言えば先行的、悪く言えば将来そのままである保証はなく、現時点でも他のES2015をサポートする処理系との間での相互運用の保証はありません。また、現時点でBabelのモジュール機能を使うこと自体にリスクがあるという意見もあります。CommonJS側からBabelが生成したモジュールをCommon JSモジュールとして読み込もうとしたときの互換の問題として、Babel5で可能だったことがBabel6では利用不可になる、といったことも起きているようです。 そこらへんを含めて解説されているこちらの資料が参考になります。 (2015/11

    (Babel 5における)ES6のモジュールを解説してみた - uehaj's blog
  • 「Elmでやってみる」シリーズのまとめエントリ - uehaj's blog

    このブログ記載のElmの記事で、動作するElmの実行プログラムをiframeで貼っていたのですが、いくつも動かなくなっていたので、動くようにしました。 ちなみに動かなくなっていた原因は2つありました。 Elmのコード共有サイトshare-elmの仕様がかわった。対処としてはリンクをはりなおしました。 elm-runtimeへのリンクが、src="http://elm-lang.org/elm-runtime.jsで参照していたのが、404エラーになるようになったため。そうなった正確な理由は不明ですが、バージョンに依存するはずなので、いずれにせよこの絶対リンクが上手くうごかなくなるのはあきらかでした。対処としてはgithub-page上の固有のものにリンクをはるようにした。 たいへん失礼しました。以下のとおりです。今はすべて動くはずです。 「プログラムでシダを描画する」をelmで描画する -

    「Elmでやってみる」シリーズのまとめエントリ - uehaj's blog
    waman
    waman 2015/01/10
  • Dockerを使ってGrails開発 - uehaj's blog

    Grails開発でdockerを使用するためのDockerfileを、備忘録兼ねて晒します。開発中に使うものです。運用用は、別のものになるでしょうかね。 onesysadmin/docker-grailsを元にして、Proxy設定を行い、いくつかの工夫をしております(プロキシ設定については、Dockerコンテナに透過的プロキシ設定とかをすれば不要なのかも)。 利点 Grails開発でDockerを使う利点は以下の通り。 準備が簡単。Grailsのインストールはもとより、gvmやJDKのインストールすらいらない。grails wrapperなどもいらないわけだ。 環境を汚さない。JDKのインストールをしなくてすむ、Postgresなどをコンテナに封入して連携する、などによる。 設定含めた開発時実行環境を開発メンバー間でシェアできる Dockerlinuxなので、開発環境windows、実行

    Dockerを使ってGrails開発 - uehaj's blog
    waman
    waman 2014/11/21
    『Grails開発でDockerを使う利点は以下の通り。』
  • elmでやってみるシリーズ10: ボールの衝突回数で円周率を計算する - uehaj's blog

    Elmでやってみるシリーズ10:ボールの衝突回数で円周率を計算する id:wamanさんからひっそりと提案もらいましたので、やってみました。 今回は記事自身もElmで書きましたので、github-pages上の全画面(github上のソース)からどうぞ。 以下にも一応hatena blog記事中にiframeで表示しましたが、スクロールや文字の配置が読みにくい・もしくはJSの実行速度が遅いです。hatena blogではiframeにseamless属性つけられば良いのだが。iPhoneのSafariでもiframe中だとうまくいきませんが、全画面なら動くようです。 ソースはこちら。 PiByBall.elm module PiByBall where import Window import Debug (log) import Graphics.Input (input, Input,

    elmでやってみるシリーズ10: ボールの衝突回数で円周率を計算する - uehaj's blog
  • elmでやってみるシリーズ9: JavaScript連携(JSのevalを呼ぶ) - uehaj's blog

    Elmでやってみるシリーズ9: JavaScript連携(JSのevalを呼ぶ) Elmではportというものを使用することで、ElmからJSの機能を呼ぶことができます(→Ports: Communicate with JS)。 portは名前がJS側に公開されるSignalです。 portには入力portと出力portがあります。 入力port: JS→Elm Elm側では予約語portを指定して、型宣言のみをする。 port evalIn : Signal String JS側から以下のいずれかの方法で値を送り込む。 初期値を Elm.embed()などでマップで与える。 <Elm.embed()などが返すelmモジュール>ports.ポート名.send()で送る。 出力port: Elm→JS Elm側では予約語portを指定して、Signalを定義する。 port evalOut

    elmでやってみるシリーズ9: JavaScript連携(JSのevalを呼ぶ) - uehaj's blog
  • Groovy 2.4のgroovyshでは、defが効くようになった。 - uehaj's blog

    https://jira.codehaus.org/browse/GROOVY-6623 で対処されました。 % groovysh Groovy Shell (2.4.0-beta-1, JVM: 1.8.0_11) Type ':help' or ':h' for help. ------------------------------------------------------------------------------------------------------------------------------- groovy:000> def x = 3 ===> 3 groovy:000> x ===> 3 groovy:000> :set Preferences: interpreterMode=true groovy:000> x.class ===> class

    Groovy 2.4のgroovyshでは、defが効くようになった。 - uehaj's blog
    waman
    waman 2014/07/29
  • elmでやってみるシリーズ8: 赤いドットが回っているかのように見えるけど実は直進運動な錯視 - uehaj's blog

    Elmでやってみるシリーズ8: 赤いドットが回っているかのように見えるけど実は直進運動な錯視 少し前に、「このくるくる回る白いドット、実は真っ直ぐ往復してるだけなんだぜ」という記事がありましたが、これをElmで再現してみようというのが今回のネタ。 (追記 id:waman さんが数学解析をされています→回転しているようにみえる白いドットは単振動している - 倭算数理研究所 。このネタ自体もwamanさんのTwitterで知ったんですけどね。) 以下は画面キャプチャ(静止画)。 コードは以下のとおり。 fps_=96 -- 画面更新頻度 pi2 = 2*pi -- 2π deg30 = pi2 / 360 * 30 -- 30°をラジアン単位に変換 -- 1秒間にfps_回、1増加するシグナル値。 ticks : Signal number ticks = foldp (\it acc->a

    elmでやってみるシリーズ8: 赤いドットが回っているかのように見えるけど実は直進運動な錯視 - uehaj's blog
  • Groovyのtraitを使い倒す! - uehaj's blog

    JGGUG G*Workshopに久々に参加しまして、GroovyのTraitについて、以下を話してきました! Introduce Groovy 2.3 trait from Junji Uehara 盛況でした。いくにんかAndroid開発をされている人もいらっしゃったようで、Groovy on Androidが注目されているのも理由かもしれませんね。 http://togetter.com/li/682540 http://jggug.doorkeeper.jp/events/11365

    Groovyのtraitを使い倒す! - uehaj's blog
    waman
    waman 2014/06/21
  • SpockにおけるMock、Stub、Spyの違い - uehaj's blog

    テスティングフレームワークSpockで相互作用中心のテストをする場合、いわゆるテストダブルとして、MockとStubとSpyの3種類を使えます。それぞれの意味などを簡単に解説します。 Spock全体含め詳しい解説はこちらなどを参照ください。 Mockに関しては、id:yamkazu 氏によるこちらのJGGUG G*Workshopの資料も秀逸です。 Stubとは 最初に、Stub(GroovyStub)についてです。Stubは後述Mockの低機能版であり、具体的には「モッキングができないMock」がStubです。StubができることはMockでできるので、来Stubを使う必要はありません。モッキングしないことを明示したいなら、使えば良いでしょう。なお、Spock用語の「スタビング」とは別のものです(スタビングおよびモッキングについては後述)。 Mockとは Mock(もしくはGroovy

    SpockにおけるMock、Stub、Spyの違い - uehaj's blog
  • オブジェクト指向だけじゃない開発宣言 - uehaj's blog

    Manifesto for Not Only Object-Oriented Development、オブジェクト指向だけじゃない開発宣言、というのが出てましたのでごにょと訳してみました*1。 オブジェクト指向だけじゃない開発宣言 私たちは、ソフトウェア開発の実践 あるいは実践を手助けをする活動を通じて、 よりよい開発方法を見つけだそうとしている。 この活動を通して、私たちは以下の価値に至った。 クラスよりも、関数と型を、 可変性よりも、純粋性を、 継承よりも、コンポジションを、 メソッドディスパッチよりも、高階関数を、 nullよりも、Optionを、 価値とする。すなわち、左記のことがらに価値があることを認めながらも(但しnullは除くが)、私たちは右記のことがらにより価値をおく。 内容は、「今どきのオブジェクト指向開発宣言」と名乗ってもあんまり違和感ないっす。 ただし、null、おめ

    オブジェクト指向だけじゃない開発宣言 - uehaj's blog
    waman
    waman 2014/04/26
    『クラスよりも、関数と型を、 可変性よりも、純粋性を、 継承よりも、コンポジションを、 メソッドディスパッチよりも、高階関数を、 nullよりも、Optionを、』
  • @BaseScriptアノテーションはscriptをインクルードするのに使えます - uehaj's blog

    Groovy 2.2以降、@BaseScriptアノテーションというのが導入され、Scriptの基底クラスを指定することができる*1ようになりました。 これは主目的としては、専用目的の便利機能追加・DSLの作成だと思いますが、単にscriptをインクルードするのにも使えます。 例えば、以下の「OtherScript.groovy」をクラスパスの通ったところか、あるいはカレントディレクトリに配置しておきます。 // OtherScript.groovy def methodOfOtherScript() { "i'm methodOfOtherScript1" } def methodOfOtherScript1() { "i'm methodOfOtherScript2" } println "this is otherScript!" a=3 これを呼び出す、mainscript.gro

    @BaseScriptアノテーションはscriptをインクルードするのに使えます - uehaj's blog
    waman
    waman 2014/04/26
  • Rustを30分で紹介する(訳) - uehaj's blog

    以下は30 minute introduction to Rustという文書(現在ではオフィシャルドキュメントの一部)の翻訳メモです。C/C++の代替に(将来的に?)なり得る言語として興味を持っています。Heartbleed問題について、ソースが汚いとか、レビュー体制がどうのとか、そもそもSSLの仕様的にどうなの、なんていう議論もあるんでしょうが、人間が間違いを犯す可能性があるということを前提とするなら、問うべき根源的な問題の一つとして、memcpyの使用ミスがあったときに、パスワードのような重要情報を含み得るメモリ領域内全内容を原理的には読まれ得る、っていう根アーキテクチャを許しておくこと、すなわち、原理主義的にはC言語のごときをセキュアな用途に採用するのが悪い、もしくは採用せざるを得ない状況になっているのが悪いというのが一つとしてあるんじゃねーの、とは思います(誰もが思うでしょうが)

    Rustを30分で紹介する(訳) - uehaj's blog
  • Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する - uehaj's blog

    (訂正2014/4/17)以下の記事ではGroovy 2.3のtaritはスタッカブルには使えない、と書いておりますが、以下によれば次のベータ(Groovy 2.3-beta-3かな)ではスタッカブルトレイトが利用可能になるようです。 次βでGroovy 2.3のtraitはスタッカブルになるようですヤター RT @CedricChampeau: @tim_yates yes it is. See the other examples in the test case, stackable traits— uehaj (@uehaj) April 17, 2014 先の記事ではGroovy 2.3のtraitをかるく紹介してみました。 Scalaの比較も試みましたが、なにしろScalaのtraitをあんまり知らないので、「Groovyのtraitにある機能に限っての、Scalaの対応物と比

    Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する - uehaj's blog
  • Groovy 2.3.0-betaが出たのでtraitを触ってみたメモ - uehaj's blog

    Groovy 2.3.0-beta-1とbeta-2が出たので新機能traitをかるく触ってみました。 注意! 以下は現時点で2.3.0-beta-1と2の振舞いとドキュメントを調べた限りの情報です。正式リリースに向けて変更される可能性があります。 関連記事 Introduce Groovy 2.3 trait Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する - uehaj's blog traitの概要と目的 Groovyのtraitは、一言で言って「実装の多重継承」を可能とする仕組みです。詳しくはこちらの家ドキュメント(英語)をどうぞ。 GroovyおよびJava 7までのJavaでは、インターフェースは多重継承することができましたが、クラスは多重継承できませんでした。実装、すなわちメソッド体の定義や、非public static

    Groovy 2.3.0-betaが出たのでtraitを触ってみたメモ - uehaj's blog
  • Java VM上の言語の覇者を決める(但しJava以外)スクリプトボウルの履歴 - uehaj's blog

    米国開催のJavaOneカンファレンスで恒例の人気セッションとなっている「スクリプト・ボウル」というのがあります。Java VM上で動作する言語同士のガチ勝負で、コード例とか、技術力とかいろいろな側面からパネルセッションでバトルして、その年勝者を決める、というものです。 自分では残念ながら直接見たことはないので想像ですが、「朝まで生テレビ」で言語バトルするようなものです。違うか。 エンターテイメント要素も多々あるでしょうし、人気とか「情熱」みたいなのも評価されるかもしれないし、コミュニティの「動員力」とかの要素もひょっとしたらあるかもしれませんね。そういうものも含めて、おもしろい勝負なのではないかと思います。もちろん技術者同士でやってるので、技術的なおもしろみとかもあるでしょう。プレゼンのうまさとかもあるでしょう。 んでその過去の結果をまとめてみました。 年候補結果 2008Scala,G

    Java VM上の言語の覇者を決める(但しJava以外)スクリプトボウルの履歴 - uehaj's blog
  • Groovyで内包表記を作ってみた #gadvent - uehaj's blog

    G*アドベントカレンダー2013第23日目の記事です。 大域AST変換と拡張メソッドを使って、Groovyでリスト内包表記を使えるようにしてみます。 リスト内包表記(list comprehension)というのは、HaskellとかScalaとかPythonにも似たものがある便利な言語機能であり、宣言的にリストを構築するためのものです。通常、ループを回したり、あるいはcollect()やfindAll()などの一連の関数呼び出しで作るところを、要素が満たすべき条件を与えることでリストが構築されます。 実装方法とソースコードの入手先(github) ソースはこちら。 変数が1つの単純な例 以下、サンプルコードです。 import groovyx.comprehension.keyword.select; // ....(1) def list = select(n) { n:1..10 }

    Groovyで内包表記を作ってみた #gadvent - uehaj's blog
    waman
    waman 2013/12/23
    AST変換でそんなことできるんですな。
  • プログラミング言語Frege(フレーゲ)を紹介します - uehaj's blog

    これはマイナー言語 Advent Calendar 2013の21日目の記事です。 Frege(フレーゲ*1 )を紹介します。 Fregeは、Java VM上で動作するHaskell風の言語です。以下のような特徴を持っています。 純関数型言語 非正格評価(いわゆる遅延評価) Hindley-Milner型推論に基づく静的型言語 これらの特徴は、Haskellと共通するものであり、構文も基的なところについてはHaskellとだいたい同じか似ているかもしくはサブセットです。標準関数やデータ型やモジュールについても、Haskell 2010からたくさん引っぱってきているそうです。 しかしながら、Fregeはその目標において、Haskellとの完全な互換性を達成しようとはしていません。実際かなり違っています。特にJava VM上で有用であることに重点が置かれており、プリミティブ型はJavaのもの

  • Java 8のOptionalをGroovyから超簡潔に使用する - uehaj's blog

    結論 Java8のOptionalは超すっきり扱えるよ、そう、Groovyならね。 Optionalって何? Java 8で導入される新規クラスの一つ、java.util.Optionalは、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのものです。 Opitonalは単一要素を保持するコンテナ型。成功した場合は返り値をコンテナで保持させたものを返す。(成功時の返り値をラッピングする) 「失敗」は固定のシングルトン(Optional.empty())として扱う まあ、それだけの話といえばそれだけなのですが、効果は、 失敗のある可能性のあるメソッドと無いメソッドをコメントではなくプログラムの一部として明示し、両者の違いをコーディング上も区別する 失敗のある可能性のあるメソッドと無い混在・混同することのないようにコンパイル時チェックをできるよう

    Java 8のOptionalをGroovyから超簡潔に使用する - uehaj's blog
    waman
    waman 2013/11/22
    『java.util.Optionalは、メソッドの実行結果で成功する場合と失敗する場合があるときに、その返り値で成功と失敗を表現するためのものです。』