タグ

ブックマーク / propella.hatenablog.com (19)

  • Android で Bluetooth プログラミング。SPP は 21 世紀のシリアル端子。 - 言語ゲーム

    Bluetooth と言うといかにも旬が過ぎたテクノロジーですが、技術がこなれ多くの機器に標準で搭載されるようになった今こそ、やっとホビイストにとって Bluetooth がお手頃に使える時が来たと言えるのでは無いでしょうか?特に USB と違ってコードが要らず、無線 LAN より設定が簡単なので、ちょっとした通信には最適だと思います。最近の Android にはだいたい Bluetooth が付いてるらしいので、AndroidBluetooth を使い、Mac の仮想シリアルポートに接続する方法を書きます。当は iPhone でも試したかったのですが、 Apple は素人が Bluetooth を使う方法を提供していないので諦めました。 Bluetooth とは何か? プログラマから見て、Bluetooth はだいたい TCP/IP と同じように扱えます。TCP/IP と同じくデ

    Android で Bluetooth プログラミング。SPP は 21 世紀のシリアル端子。 - 言語ゲーム
  • アテンションの慣性とファイナンス - 言語ゲーム

    なんか暇なのでくだらない事を書きます。 最近 The Attention Economy isbn:157851441X というを呼んでます。どうもこのアテンションという言葉は前に一度流行って廃れたみたいだけど、内容はまだまだいける。一応書くと、昔は情報が貴重だったが今では情報が溢れ、受け取る人の時間の方が足りなくなったという話。まだ半分くらいしか読んでないけど書いて有りそうな事を想像して未来予想などを書きます。 このは情報についてだけ書いてあるけど、実はクリス・アンダーソンによると技術革新によって情報だけでなく物もどんどん安くなって限りなく無料に近づくらしいので、そういうスター・トレックみたいな未来を考えます。このような世界では大抵生活に必要な物は無料で手に入る。なぜなら、わざわざお金をやり取りする手間より物を作る手間の方が安くなってしまうからです。そんな馬鹿な?と思う人はなんで多く

    アテンションの慣性とファイナンス - 言語ゲーム
    nanakoso
    nanakoso 2012/01/01
    広告はアテンションの融資
  • アリゲーター・エッグでラムダ計算 - 言語ゲーム

    計算の質は何でしょうか?計算には、足し算引き算掛け算と色々あります。さらに因数分解や微分積分など、計算の種類を挙げればきりがありません。しかし、いくら沢山のルールを沢山覚えても、それで計算の質を分かった事はなりません。ここで視点を逆転して、より難しい計算ではなく、より単純な計算について考えてみる事にします。 面白いことに、どんな複雑な計算も単純な計算の組み合わせで出来ています。掛け算は足し算の組み合わせですし、引き算は足し算を逆にしたものです。さらに、足し算よりもさらに単純な計算を考える事は出来るでしょうか?昔から沢山の数学者がこのパズルに挑戦し、沢山のモデルが生まれました。今日ご紹介するラムダ計算もその一種です。ラムダ計算は非常に単純な計算モデルですが、単純すぎて計算過程を追うのが難しいです。そこで、アニメーションを使うと仕組みがわかりやすいのでは無いかと考えました(Firefox,

    アリゲーター・エッグでラムダ計算 - 言語ゲーム
  • 論理かるた - 言語ゲーム

    今日は証明するカードについて書きます。証明というとなんだか人間にも難しく、機械にやらすには高度な人工知能が必要だと思うでしょう。しかしコンピュータも電気も不要です。なんとこのカードは並べるだけで証明ができてしまうのです!とりあえずどんなのか見てみましょう。 自分でやりたい人は logiccard.pdflogiccard2.pdf をダウンロードして名刺用紙に印刷してください。用紙のサイズが合わない時は logiccard.svglogiccard2.svgイラストレータや Inkscape で編集するといいと思います。 このように印刷して、灰色の部分をポンチで穴を開けます。ホッチキス式のポンチではカード中ほどの穴に届かないので、その場合は手芸用のポンチを使うと良いです。 するとこのような謎めいたカードが出来上がります。 それぞれのカードはベン図になっています。穴の開いてい

    論理かるた - 言語ゲーム
    nanakoso
    nanakoso 2011/08/29
    >ホーン節をカードにしてみた。
  • ERNIE: くじを引く機械・知られざる英国コンピュータ史 - 言語ゲーム

    外国を旅するとたまに珍しい歴史に出会えます。ロンドンの科学博物館には、有名な世界初の大規模機械計算機であるバベッジの階差機関が展示されています。そしてその隣に誇らしげに展示されているのが ERNIE と呼ばれる巨大な電気式計算機です。これは、第二次世界大戦中に暗号解読機械を制作していたアラン・チューリングを含む天才数学者チームが戦後開発した物なのですが、何とその唯一の機能は当たりくじの番号を決める事でした。 時は 1956 年、当時の英国政府はインフレーションを抑えつつ貯蓄率を上げるために妙案を考えました。国債を買った人全員に平等に利子を付ける代わりに、くじに当たった人だけに賞金を出す事にすればどうだろう。このくじ付き国債は人気を博し、当選番号を決める ERINE もキャラクター化されロンドン市民に大変愛されたそうです。 この ERINE。単に当選番号を決めるだけならサイコロでもルーレット

    ERNIE: くじを引く機械・知られざる英国コンピュータ史 - 言語ゲーム
  • メッシュネットワーク B.A.T.M.A.N. を試す - 言語ゲーム

    まず、BATMAN がどのような物かについて簡単にご説明します。BATMAN とは、パソコンに付いている無線 LAN インタフェースだけを使い、無線ルータ無しで大きなネットワークを作る仕組みです。無線 LAN インタフェースには、元々アドホックモードという、隣の端末と直接通信する仕組みがあるのですが、直接電波が届く狭い範囲でしか使う事が出来ません。BATMAN を使うと、直接電波が届かなくても、中間地点に端末があればバケツリレー式にデータを運び、遠い距離の端末同士が通信出来るようになります。これをメッシュネットワークと呼びます。 BATMAN は既存のネットワーク上に仮想的にネットワークを構築します。メッシュネットワークがどんなに複雑でもユーザーからは一つの LAN ネットワークのように見えます。BATMAN 自体はそれ以上の複雑なサービスを提供していませんが、既存の DHCPDNS

    メッシュネットワーク B.A.T.M.A.N. を試す - 言語ゲーム
  • 言語遍歴(技術的な近況) - 言語ゲーム

    私が色々なプログラミング言語が好きなのは、それぞれの言語が新しい視点を提供してくれるからだ。正しい言語を選だけで、複雑すぎてやってられないような仕事が呆れる程簡単になってしまう!というような事が今まで何度もあったし、これからもあって欲しいと思っている。たまたま機会があって、最近では自分でも言語を作っている。その辺の経緯を一番最初から書く。 最初はみんなと同じ BASIC。パソコンという物に触れる前に、千里中央にあった電電公社のショールームでバイオリズムを出力するプログラムを見たのが初めてだと思う。ロールペーパーに打ち出された行番号と英単語はとてもかっこ良かった。すがやみつるの漫画でプログラムを学び、最終的にマルチウインドウのアスキー画像エディタを作ってゲームのキャラ作成に使った。ドラクエ風を目指して作ったウインドウは全部モーダルで、配列をスタックとして使って8画面まで重ねる事が出来た。 機

    言語遍歴(技術的な近況) - 言語ゲーム
  • Haskell 2010 - 言語ゲーム

    来週阿部さんたち東京スクイーカーズの面々に会いに行くのですが、もう一つの上京目的は Haskell 忘年会に行く事です。よくネット上でハンドル名を拝見する方がいらっしゃるので大変楽しみです。そしてその前哨戦として、一人ずつ Haskell の発表を行わないといういけないという話になっていました。忘年会に発表とはさすが Haskell。お題は Haskell 2010 か GHC 6.12.x のトピックから早いもの順に話題を選ぶという物。万年 Haskell 初心者の私としては、出来るだけ簡単なのを取らなくては!と思い調べてみました。 そもそも Haskell 2010 というのは、前回の Haskell 98 に続く規格で、新しいアイデアを入れようという物では無く、多くの Haskell 処理系で現在よく使われているメジャーな拡張機能を選んで規格に入れてしまおうという物だそうです。Sch

    Haskell 2010 - 言語ゲーム
  • foldr と foldl の違い - 言語ゲーム

    こないだの属性文法の記事では沢山 foldr が出てきます。foldr や foldl は関数型言語におけるループ構文です。私のようなにわか関数信者は嬉しがってつい再帰を使ってしまいますが、再帰のようなパターンを良しとしない物の Haskell プログラマは fold を使います(多分)。ただ、foldr や foldl というネーミングは、文章が左から右へ流れると信じて疑わない欧米帝国主義の醜悪な悪習と言わないまでも、再帰についての重要な違いを軽視しているような印象を受けます。これらの関数は、当は全然対称じゃないのです。というわけで調べてみます。 さて、足し算はどっちに結合しても良いので、1 + 2 + 3 + 4は次のように書けます。 foldr (+) 4 [1, 2, 3] -- 1 + (2 + (3 + 4)) == 10 foldl (+) 1 [2, 3, 4] --

    foldr と foldl の違い - 言語ゲーム
  • 形式的で一般的な GUI フレームワークの研究 - 言語ゲーム

    今日電車の中で、これは行けそうだ!という予感がしたので記念に書いておきます。予感だけで、当に出来るかまだ分からない。 やりたい事 GUI フレームワークを形式的に定義します。GUI フレームワークというのは、ある情報(例えば温度)がある時に、それをどのように画面に表示するかと言う方法の事です。簡単に書けば単にある数字を表すフォントを画面に点で書けば良いだけですが、例えば温度計みたいに表示したり、グラフで表示したり、編集出来るようにしたり、色んな事を考えるとフレームワークと言うのを使った方が良いです。 形式的にというのは、数式で表現するという事です。数式で表現出来ると意味を変えずに表現を変える事が出来ます。すると、計算が速くなったり頭がすっきりしたりします。 一般的にというのは、GUI 以外にも使えるという事です。オブザーバパターンの枠内だったら何でも使えます。 バックグラウンド Sque

    形式的で一般的な GUI フレームワークの研究 - 言語ゲーム
  • Haskell でヒューメインインタフェース。モナド記法を使わないで IO してみる - 言語ゲーム

    誰にも頼まれてないのに Haskell の復習をしています。前から気にくわなかったのが Haskell の do 記法です。例えばコンソールから二つの文字を入力して結果を出すだけのプログラムをこういう風に書きます。 main' = do num1 <- getLine num2 <- getLine print $ read num1 + read num2 これはかったるい!そう思いませんか?何故次のように書けないのか!これはモナドが悪いのか? main'' = print ( read getLine + read getLine ) そういうわけで、素人ながらもうちょっとマシに書けるのでは無いかと試してみました。 まず、read getLine と書けない件。getLine はコンソールから文字列を受け取るモナドだけど、read は文字列自体を受け取る関数なのでうまく合わない。例えて

    Haskell でヒューメインインタフェース。モナド記法を使わないで IO してみる - 言語ゲーム
  • FPGA に夢を見る。 - 言語ゲーム

    この週末はずっと FPGA で遊んでいた。出来たのはただ LED が光るだけの物だが、やっと考えたとおり動いてくれてほっとしている。一息ついたついでに、FPGA のどこが面白くて、何を目指しているかちょっと書いてみる。 この数週間の短い間に、私は FPGA がソフトウェアを変える!と信じるようになった。FPGA はハードウェア記述言語で動かすチップだから、ハードウェア記述言語がソフトウェアを変える!という妙な話の流れになってしまうけど。前からぼんやり思っていたプログラミング言語への違和感が急にはっきりした。その違和感とは、プログラミング言語全体が、いわゆる早まった最適化に陥っているという事だ。 プログラミング言語が必要なのは、コンピュータには人間の言葉が分からないからだ。コンピュータは順番に単純な命令を実行する事しか出来ないから、大きな問題を小さく分けて、さらに順番に並べなければいけない。

    FPGA に夢を見る。 - 言語ゲーム
    nanakoso
    nanakoso 2008/05/27
    レンダリングとかシェーディングとか3Dとか実は関数型言語向きなんじゃないかと思った。(ゲーム+FPGA+関数型言語)
  • 論文読み: Arrows, Robots, and Functional Reactive Programming http://www.haskell.org/yampa/AFPLectureNotes.pdf - 言語ゲーム

    Haskell のアニメーションライブラリ Yampa についてのチュートリアル。またもや FRP (Functional Reactive Programming) の話題です。SOE の FAL は休憩して、その未来の姿である Yampa に寄り道します。Monad を一般化した Arrow なるものを使って、time / space leak なる物を排除し、モバイルロボットのプログラムをきっちり記述します。 プログラムの例として、シムボット(ロボットシミュレータ)を扱います。シムボットは二つの独立して動く車輪を持ち、ぶつかりセンサーや、前後左右に光学センサーを持ちます。また、他のシムボットの位置を知る事も出来ます。 シグナル (p 3) 一番重要な概念はシグナルです。 Signal a = Time -> a つまり、シグナルとは時間の関数です。例えばシムボットは車輪が二つあるので

    論文読み: Arrows, Robots, and Functional Reactive Programming http://www.haskell.org/yampa/AFPLectureNotes.pdf - 言語ゲーム
  • OMeta - 言語ゲーム

    http://www.cs.ucla.edu/~awarth/ometa/ 眠くて微妙な事が何も出来ないので軽く OMeta について書きます。OMeta とは、http://lambda-the-ultimate.org/node/2477 によって一躍有名になったメタ言語 - プログラミング言語を書くためのプログラミング言語 - です。果たして単なる PEG パーサと一体どこが違うのか私もよく分かっていないので、そのあたりの事を勉強したいと思います。OMeta にはスクイークや「イアンのやつ」の実装がありますが、最近 Web ブラウザで実行出来る Javascript 版が公開されたのでそちらを試します。 OMeta で何が出来るか? http://www.cs.ucla.edu/~awarth/ometa/ometa-js/ を開くと、OMeta で作成された Smalltalk 言

    OMeta - 言語ゲーム
    nanakoso
    nanakoso 2007/11/22
    プログラミング言語定義用言語OMeta。パーサジェネレータではなく実装も扱えるらしい。
  • 俺様言語 Lazy を作る。番外編。Yコンビネータ。 - 言語ゲーム

    Y コンビネータとは何か? あなたはどんな言葉でも使う事が出来ます。しかし、知らない言葉を使う時は、今まで知っている言葉で説明できなくてはなりません。 例えば、「カニ」と「コロッケ」と「クリーム」だけを知っている時、あなたは「カニクリームコロッケ」について語る事が出来ます。「『カニクリームコロッケ』とは、『カニ』の味のする『クリーム』の入った『コロッケ』である。」しかし、「かぼちゃコロッケ」については語る事は出来ません。なぜなら「かぼちゃ」について何も知らないからです。 さてここで問題。「皮」や「剥いだ物」について知っている時、次の説明は適当でしょうか?「『タマネギ』とは、『タマネギ』の『皮』を剥いた物である。」私たちは、タマネギの皮を剥いてもタマネギである事を知っています。しかし、タマネギを説明するのにタマネギを話題に出しても良いものでしょうか?インチキ臭い感じがしませんか?こういうのを

    俺様言語 Lazy を作る。番外編。Yコンビネータ。 - 言語ゲーム
  • [haskell] How To Arrow 基本 - 言語ゲーム

    http://d.hatena.ne.jp/propella/20070807/p1 1:基 http://d.hatena.ne.jp/propella/20070807/p2 2:並置 http://d.hatena.ne.jp/propella/20070808/p1 3:選択 -- なんか知らんうちに Arrow 流行ってるようなので試してみる。 -- http://www.cs.chalmers.se/~rjmh/afp-arrows.pdf によると、ポイントフ -- リースタイルに IO を混ぜるのが Arrow だと考えればよいらしい。 import Control.Arrow -- Arrow では高階型を使いまくるので慣れないとちょっと恐ろしく見える。 -- Arrow は Monad と同じくクラスだが、Haskell で言うクラスとは他でいう -- インタフェース

    [haskell] How To Arrow 基本 - 言語ゲーム
  • 線形論理とコンピュータ革命 - 言語ゲーム

    週末は Linear Logic and Permutation Stack -- The Forth Shall Be First http://home.pipeline.com/~hbaker1/ForthStack.html 読んでいた。思ったのは、線形論理が私の人生の疑問の半分くらいを解決するだろうという事。そしてアランさんの言うコンピュータ革命とはこういう事なのかも知れないという事。 身分不相応にも未来を予測してみる。近い将来、小学校で習う算数は線形論理に基づいた物になる。未来の子供達は、カッコや優先順位や変数に悩まされる私達の数学を見て、何て野蛮で非能率なのだと言うだろう。まるで我々が漢数字やローマ数字の数学を、きわめて技巧的で非論理的だと思うように。 線形論理に基づくプログラミングとは、変数の使用を一度しか認めないプログラミングの事を言う。一度しか認めなくてプログラムなんか

    線形論理とコンピュータ革命 - 言語ゲーム
    nanakoso
    nanakoso 2007/07/30
    線形論理
  • 関数型プログラミングに何を期待しているのか。 - 言語ゲーム

    阿部さんに、何で僕が一人で関数関数言ってるのか全然分からないと言われたので、寝る前に書く。だけど今日中に纏めるのは無理なので下書き。 プログラミングというのは、パソコンに何をやって欲しいかを伝えるという役割と、自分が何をやりたいのか纏める役割と、両方あると思う。特に自分が何をやりたいのか纏めるというのは大切で、プログラムを書く事によって今まで何て自分は浅はかな事を考えていたのだろうと何度も気づかされた。 で、なぜプログラミングによって考え方が纏まるかというと、プログラミングには考えを纏めるための色んな仕組みが用意されているから。サブルーチンだったり構造体だったりオブジェクトだったり。そういうのを使って、色んなアイデア同士の関係をじっくり見たり、壊れていた部分を探したり、意外と共通していた物を見つけたり、プログラムとアイデアが同時に整理されてくる。これがプログラミングで一番大切な部分。 そこ

    関数型プログラミングに何を期待しているのか。 - 言語ゲーム
  • 逆ガベージコレクション

    逆ガベージコレクションというのを考えてみた。ガベージコレクション(ガベコレ)というのは、コンピュータがプログラムを動かす時に裏で働く大切な仕組みで、不要になったメモリを集めて再生する役割を持つ。ガベコレがあるおかげで、プログラマは煩雑なメモリ管理を忘れて論理に徹する事が出来る。 逆ガベコレというのは、メモリのコピーが当に必要になった時に自動的にコピーする仕組みである。copy on write に似ているが、逆ガベコレを使うと、プログラマはメモリをコピーする必要が無くなる。 プログラマがメモリをコピーして何か悪い?あるデータが壊れてしまう可能性がある時にプログラマはコピーを行う。データが壊れるかどうかというのはあらかじめ分かりようが無いので、ライブラリなんかだと念のため一応コピーする事がある。例えばチャットを HTTP 経由で行うプログラムなんかを考えてみよう。HTTP を実現するための

    逆ガベージコレクション
  • 1