タグ

IOに関するnsyeeのブックマーク (21)

  • IMVU Engineering Blog – Software engineering best practices at IMVU

    While writing the source code of a 3D engine, we can have many types of problems. These may range from simple problems of code that will not compile, to harder problems like memory leaks. At IMVU, we have automated solutions in place to help find these kinds of problems. For example, unit testing combined with Valgrind has helped us track down a lot of memory leak problems. But what about performa

  • 副作用の話 - モナドとわたしとコモナド

    最近、副作用や関数型言語についてもめているのをよく目にする。副作用と関数型言語に関する私の見解をここに示す。 処理系はソースコードを解釈し、コンピュータの入出力、つまり副作用に変換する。ほとんどのプログラミング言語は、副作用を表現するプリミティブとその組み合わせによってプログラムを記述する。副作用は実行時に生まれるものだから、「Cの関数は副作用がある」「Haskellのコードに副作用はない」といった議論は、残念ながら意味をなしていない。実行していないのに副作用が出てきたら、超自然的な力を信じざるを得ない。 副作用の扱いについてよく議論の的になる言語としてHaskellがある。Haskellが多くの手続き型言語と異なるのは、副作用を含む計算に対して、専用の型(IO)が定義されているというだけであり、「そのコードが副作用を記述できるかどうか」を区別しやすくするためのちょっとした助けに過ぎない。

    副作用の話 - モナドとわたしとコモナド
  • Haskell アクション 超入門 - Qiita

    Haskellではアクションと呼ばれる機能により副作用が扱えます。アクションの使い方の初歩を説明します。ライブラリで用意されたアクションを手っ取り早く使うことを目的としているため、モナドや圏論には言及しません。 シリーズの記事です。 Haskell 超入門 Haskell 代数的データ型 超入門 Haskell アクション 超入門 ← この記事 Haskell ラムダ 超入門 Haskell アクションとラムダ 超入門 Haskell IOモナド 超入門 Haskell リストモナド 超入門 Haskell Maybeモナド 超入門 Haskell 状態系モナド 超入門 Haskell モナド変換子 超入門 Haskell 例外処理 超入門 Haskell 構文解析 超入門 【予定】Haskell 継続モナド 超入門 【予定】Haskell 型クラス 超入門 【予定】Haskell モナド

    Haskell アクション 超入門 - Qiita
  • Home Page | Harvard John A. Paulson School of Engineering and Applied Sciences

    Cutting-edge science delivered direct to your inbox. Join the Research Roundup mailing list.

  • io-choice

  • Testing IO actions with Monadic QuickCheck

    The Test.QuickCheck.Monadic module lets you test monadic code, even things that run in IO. A monadic property test is of type PropertyM m a, where m is the monad the test runs in and a is ultimately ignored. In the case of PropertyM IO a, you convert the monadic test to a Property by using monadicIO; for all other monads, you use monadic instead (which takes a function to run the monad, something

    Testing IO actions with Monadic QuickCheck
  • Haskellで競技プログラミング IO編 - Qiita

    _この記事は2013年の情報オリンピック夏季セミナーの発表のために 動機 Haskellには競技プログラミングに使えるCoolな機能が沢山あります。 パターンマッチやプレースホルダ、パターンガード、柔軟な関数合成などです。 下はAtCoder Regular Contest #14のB問題に対する回答です。 再帰や場合分けがかなりシンプルに書けます。 import Control.Monad import Control.Applicative import Data.List main :: IO () main = do n <- readLn (w:ws) <- replicateM n getLine putStrLn $ case check [w] ws True of Nothing -> "DRAW" Just True -> "WIN" Just False -> "LO

    Haskellで競技プログラミング IO編 - Qiita
  • test-framework-golden

  • stm-io-hooks

  • agda で "Hello, world!" - x76789の研究メモ

    Agda で入出力を扱う場合,Agda の FFI(Foreign Function Interface)を通し,Haskellの入出力関数を用いておこなう. 実際に,「Hello, World」プログラムをAgdaで作成してみた.ちなみに,入出力をおこなうには,コンパイルしておこなう必要がある.詳細は以下の通り. hello.agda module hello where data Unit : Set where unit : Unit {-# COMPILED_DATA Unit () () #-} data List (A : Set) : Set where [] : List A _::_ : A -> List A -> List A {-# BUILTIN LIST List #-} {-# BUILTIN NIL [] #-} {-# BUILTIN CONS _::_

    agda で "Hello, world!" - x76789の研究メモ
  • Loan Patternいろいろ(using, scalazのwithResource, scala-arm) - tototoshi の日記

    まずはコード1を見てください。 // コード1 def copyFile() = { val in = new FileInputStream(new File("foo.txt")) val out = new FileOutputStream(new File("bar.txt")) val buf = new Array[Byte](1024) var len = 0; while ({ len = in.read(buf); len != -1 }) { out.write(buf, 0, len) } in.close() out.close() } なんのへんてつもないファイルコピー(foo.txt -> bar.txt)のコードです。 別にこれでいいっちゃいいのですが、こういったコードの場合、closeを忘れたら残念なことが起こり得ます。 using という訳でさんざん既出で

    Loan Patternいろいろ(using, scalazのwithResource, scala-arm) - tototoshi の日記
  • ゆるふわHaskell (Light & Airy Haskell) — laskell 0.0.1 documentation

    はじめに¶ 巷に溢れているHaskellはいきなりのIOを避けているものが多いですよね。こ れらのを読んでわかった気になっても、実際に日々のタスクに使おうとした 場合に結構ハマることが多いんですよね。 「習うより慣れろ」みたいなスタイルでHaskellの学習をするとどういう学習曲 線をたどることになるんだろうか? phpのように動けばいいや(偏見?)というス タンスでHaskellのコードを書くことは可能なんだろうか? と疑問に思ったので、よくあるスクリプト言語の入門書(IOから入る系)のよう な話題を取り扱ってみようかなと。 Sphinxという良い感じに文章をかけるツー ルと、書いた文章をGitHub Pagesで手軽に公開できるような環境の存在も、こ の試みを後押ししました。というか書いていて楽しいので、みなさんもSphinx つかうとハッピーになれると思います。 フィードバックな

  • Ruby 勉強会 第42回 発表資料 IO について

    presentation for kansai-ruby-workshop #42 This presentation illustrates: IO#read length, buffer IO#readpartial IO#readnonblockRead less

    Ruby 勉強会 第42回 発表資料 IO について
    nsyee
    nsyee 2012/07/06
  • RubyはIO.pipeを使えば、パイプを作ることが出来る - それマグで!

    IO.pipeを使えば、パイプを作ることが出来る パイプを作ると楽しい。 o,i = IO.pipe 100.times{ i.puts :test } 100.times{ puts o.gets }これだけ Pipeを使うと何が便利か。スレッドをブロック出来る loop{ p o. gets }で i.puts を待つことが出来る。 どういうことかというと IO.pipeはブロックする? >> input.puts "aaaaaaaaa" #=> nil >> input.puts "aaaaaaaaa" #=> nil >> input.puts "aaaaaaaaa" #=> nil >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.gets #=> "aaaaaaaaa\n" >> out.get

    RubyはIO.pipeを使えば、パイプを作ることが出来る - それマグで!
  • PerlIO::via で遊ぶ - JPerl advent calendar 2010 acme Track

    こんにちは、こんなにトミールを名乗っているのにいつまでたってもトミールの検索結果が抗ウイルス製剤のトミールです。今年も1位奪還は失敗しました。 さて、今日は Acme じゃないんだけど限りなく Acme ぽい PerlIO::via をご紹介しましょう。 役に立つ PerlIO 基礎知識(Acme に入る前に) perl の IO レイヤーは、実はいろいろできて便利です。一番便利なのは、:encoding() でしょう。 こういう、 use autodie; use Encode; open(my $fh, '<', 'file.txt'); while (my $line = Encode::decode('cp932', <$fh>)) { print Encode::encode('utf-8', $line); } 入力を cp932 エンコーディングで decode()、出力は

    PerlIO::via で遊ぶ - JPerl advent calendar 2010 acme Track
  • moratorium | splice(2)

    splice(2) Linux 2.6.17より導入された新しいシステムコールである「splice(2)」を使ったファイルコピープログラムを作ってみました。 参考: C言語: UNIX最速ファイルコピー 参考: splice(2) - splice data to/from a pipe 試した環境は以下の通りです。 core2% uname -a Linux core2 2.6.20-15-generic #2 SMP Sun Apr 15 06:17:24 UTC 2007 x86_64 GNU/Linux gcc: Ubuntu 4.1.2-0ubuntu4 glibc version: 2.5-0ubuntu14 「splice」という単語は「つなぎ合わせる」とかいう意味です。このシステムコールも、ファイルディスクリプタとパイプをつなぎ合わせてデータを転送するような操作を行う事が

  • Disk I/Oの使用率を監視するワンライナー - kazuhoのメモ置き場

    iostat -x の %util を監視してしきい値を超えたらアラートメール飛ばしたいなぁと思って crontab 書いた。こんな感じ。 */5 * * * * perl -wle 'my $s = `/usr/bin/iostat -xk /dev/sd[abc] 270 2 | tail -4`; print $s if $s =~ m{\s(?:[0-9]{3}|[5-9][0-9])\.[0-9]+$}m'ポイントは、 iostat の後ろから2つ目の引数がサンプリングを行う秒数 tail で デバイス数+1 することで、最後のサンプルを取り出す 正規表現で50%以上だった場合に標準出力に iostat の結果を出す=メール送信

    Disk I/Oの使用率を監視するワンライナー - kazuhoのメモ置き場
    nsyee
    nsyee 2010/10/13
  • HaskellとSCons @ val it: α → α = fun

    またぞろHaskellのIOの話が一部で盛り上がっているようです。はじめに結論を述べておくと、けっきょくのところ、これは「どう理解したらいいか」(どういう脳内モデルを構築するか)という話であって、正解も何もありません。プログラムを書けるのであれば、おそらくその理解は正しいのです。 それでも何かを書こうと思ったのは、こういう比喩をあまり見かけないな、と思ったからです。 HaskellにおけるIOは非常に謎めいています。たとえば、putStrという関数があります。型はString -> IO ()で、引数として文字列を与えるとそれを出力(画面に表示)します……当でしょうか。いいえ、それがちょっとちがうんですよね、という話です。 IO ()というのは、「IO動作」という「値」です。Haskellという言語のなかで、この値は何もしません。putStrは文字列を受け取り、IO ()という値を返す関

  • Haskellと副作用 - あどけない話

    よく、Haskellには副作用がないと言われるが、それは間違いだ。確かに、Haskell には状態の変化(あるいは再代入)という副作用はない。しかし、入出力という副作用はある。この記事では、Haskell の副作用に対して、命令型プログラマーにすっきりと理解できる説明を試みたいと思う。 間違った方向への第一歩 Haskell の副作用に関する典型的な説明は、こんな感じだ。 Haskell にはあらゆるレベルで副作用がない。そのため、遅延評価が可能になる。遅延評価では、コードが記述順に実行/評価されるとは限らないので、入出力と相性が悪い。そこで、IO モナドが導入されている。IO モナドのおかげで、入出力に関するコードは記述順に実行され、外界に作用できる。 この説明を聞いて理解しろという方が無理である。説明が苦しい最大の理由は、Haskell にはあらゆるレベルで副作用がないと、間違った一歩

    Haskellと副作用 - あどけない話
  • 遅延I/Oとメモリリークのつづき - maoeのブログ

    id:maoe:20091108:1257701870の件をhaskell-ja(chaton)で相談してみたところ、nwnさんとnobsunさんに教えていただきました。ありがとうございました。 せっかくなので、こちらにもまとめを書いておきます。 先のエントリで意図していた例 元々意図していたことは、putStrを2回するなんて恣意的なものではなく、 ログファイルの解析をするとき、1ファイル(あるいは生のログストリーム)から複数種類の解析を行いたい場合 頻出IPアドレスの提示とページビューの計算とユニークユーザ数の計算などを同時にしたい 遅延I/Oとメモリリーク - maoeのブログ というシチュエーションを想定していた。これに対して、スレッドを使うとか姑息な手段ではなく、かつ関数プログラミング的に美しい方法を教えてもらった。 解決策: 関数を融合してfoldl 上記の例では 頻出IPアド

    遅延I/Oとメモリリークのつづき - maoeのブログ