2012-01-01から1年間の記事一覧
これはRubyに限った話では無いのですが、何回もこれが原因のエラーを出しているので自戒の意味を込めてメモ。 初期化するときはブロックを使う これ鉄則。 irb(main):003:0> aa = Array.new 2, Array.new(2) => [[nil, nil], [nil, nil]] irb(main):004:0> a…
基本 Rubyにはモジュールなどのプロパティにアクセスするのに.と..の2つの演算子があります。例えば、 module Hoge def self.huga end end なら、Hoge::hugaに対して Hoge.huga Hoge::huga() の2通りの書き方が出来ます。 .と::の違い マニュアルにちゃんと…
def hoge(&block) proc &block end のようにすると、タイトルのwarningが出ます。Rubyでは&の付く変数は def hoge(&block) proc(&block) end のように、ちゃんと括弧で囲むのが推奨されているようです。
かなりハマったのでメモです。 範囲演算子 Rubyには..と...の2種類の範囲演算子があります。実態はRangeクラスで、Range#eachメソッドでfor文のように使うイディオムがあります。 irb(main):005:0> (0..2).each { |i| p i } 0 1 2 => 0..2 irb(main):006:0> …
就活もいよいよ始まり…というのはあんまり関係ないのですが、プロコンに参加することにしてみました。ちょうど2つ面白そうなのがあったので、どちらにもヒッソリと登録しました。年末年始は多少時間がありそうなので、ぼちぼちやってみようと思います。 ハル…
興味と必要にかられてRubyとRoRを勉強し始めたので、そのメモです。まず「たのしいRuby」を買いました。そして3時間ぐらいでざっと読み終え*1、早速Railsを触ってみることにしました。とりあえず、鉄板の「RailsによるアジャイルWebアプリケーション開発(第…
Homebrewのオプションの自分用メモなど。 オプション install fomula名 search キーワード list インストール済みfomulaの一覧表示 update fomulaのアップデート fomulaを編集してたりするとエラーになるので、stashする `cd /usr/local/; git stash; brew u…
とりま今の理解。ちゃんと調べてないので間違ってる可能性大。 Blobオブジェクトはバイナリデータを抽象化したもの。 Blobの実データはArrayBufferなどに変換して得られる。 ArrayBuffer内のデータから値を抽出するときはTyped Arrays(Float32Array、Int16Ar…
ここしばらく、Node.jsを使った開発で忙しくて、ようやく一段落つきました。ということで随分とNodeを使ってきたつもりだったのですが、肝心のexportsの辺りの理解が浅かったことに気づいたので、少しまとめます。 exportsとmodule.exports exportsとmodule.…
題材として、以下のフィボナッチ数の計算関数を利用します。効率が悪いのはご愛嬌。 fib = (n) -> return 1 if n is 1 or n is 2 (fib n-1) + (fib n-2) alert fib 10 ここで「fib(10)の結果を取得したいが、これ以上fibを使わないため、出来ればfibを消すか…
Node.jsのrequireの動作についてのメモです。 requireの大原則 一番重要なのは「requireされたファイルはキャッシュされ、2度ロードされることはない。*1」ということです。 モジュールは初めて読み込まれたときにキャッシュされます。 すなわち(他のキャ…
CoffeeScriptではdo while相当が無いのかー、と少しがっかりしたのですが、代案がstackoverflow先生に書かれていたのでメモしておきます。ちなみに、普通に無限ループとbreakの組み合わせで、ごくごく当たり前なことなのですが、何故か思いつきませんでした…
公式マニュアルのprocessを眺めていたらprocess.nextTickというのが出てきました。なんだかとても大事らしいです。マニュアルによればコレは、 イベントループの次以降のループでコールバックを呼び出します。 これは setTimeout(fn, 0) の単純なエイリアス…
CoffeeScriptとUnderscore.jsの組み合わせで関数型言語のようなリスト主体のプログラミングをすることができます。せっかくなので_.mixinで_オブジェクトを拡張してみます。 keysとvaluesからObjectを作成する_.pairs Underscore.jsには、Objectから(1)キー…
最近、backbone.js(+underscore.js)とKnockout.jsの練習をしており、その一環で作成したものです。jsdo.itが貼れるかどうかのテストも兼ねてます。 MVVMなかなかいい 最初はdata-bindになかなか慣れなかったのですが、一度慣れてしまうとbackboneのめんどく…
_.bindAllは、第一引数に指定したオブジェクトAがあった時、Aがもつ関数プロパティのthisをAにしてしまう関数です。 hoge = { val: "hoge", print: function() { console.log(this.val); }, set: function(v) { this.val = v; }, get: function() { return t…
いよいよモナドに近づいて来ました。前章と比較しながら読むと、この章は前章の抽象化であることが分かります。 第9章 対話プログラム 基本 バッチプログラムは副作用がない。対話プログラムは入力が非決定的なので副作用が発生します。 では、副作用を起こ…
久々の更新です。この章はかなりきついです。以下を理解するまでに3回ぐらい投げてます。 第8章 関数型パーサー 基本 実際に動かすことができた所のソースコードを載せます。 import Char type Parser a = String -> [(a, String)] -- 入力をそのまま出力に…
Node.jsで利用できるSequelize » A multi-dialect Object-Relational-Mapper for Node.JSという(現時点で唯一の?)ORMがあります。使い方にはクセがありますが、色々いじっていれば1日ほどで使えるようになるぐらいの難しさだと思います。v1.5.0時点で対応…
githubでは、当然のことながらはてな記法が使えないので、markdownでも使うか、ということでEmacsでmarkdownをウハウハするメモです。 環境 Mac OS X (Lion) Cocoa Emacs (23.4) el-get (3.stableではなくmasterブランチ) Emacsにmarkdown-modeを入れる mark…
意外と根が深すぎて、ビビりました。数時間を費やしてしまいました。 環境 Google Chrome 20.0.1132.57 CoffeeScript 1.3.3 結論 まず一番重要なのは、「constructorではオブジェクトをreturnすべきでない」ということです。この記事を書いてからしばらく立…
今更ながらJavaScriptの継承について再考してみました。JavaScriptの継承については、だいぶ前から何度も考えているのですが、個人的にコレといった決定版がない感じ。 最近、個人的によく使っている継承パターンですした。 var extend = function(obj, func…
第7章 高階関数 基本 高階関数とは 引数として関数をとったり、関数を返したりする関数。ただし、Haskellではカリー化のため関数を返すのが常なので、明示的に高階関数と呼ぶ場合は、引数として関数を取る関数である事が多い。 twice :: (a -> a) -> a -> a …
AndroidではBitmapDrawableなXMLで画像の繰り返しの表現が可能です。例えば、とある画像bg.pngがdrawableのどこかに入れあるとし、 <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/bg" android:tileMode="repeat" /> のようなbg_repeat.xmlをdrawableに作成します。 その上で、何らかのViewのbackgroun…</bitmap>
ここのところ何故か非常に忙しいのですが、なけなしの時間を捻出して読みました。ふぅ。 第6章 再帰関数 この章は、真新しいことはあまりなく、そんなに難しくないです。次の章もかな? I/Oはまだが~ 基本 Haskellでは関数を関数自身を使って定義することが…
第5章 リスト内包記法 この章のシーザー暗号の部分は、なかなか面白いです。 基本 リスト内包記法は数学の集合の表現を模している。 参考:集合の基本概念:定義と記号[数学についてのwebノート] *Main> -- { x^2 | x ∈ {1, ..., 10} } *Main> [x^2 | x <- […
第4章 関数定義 関数定義で使えるワザ 既存の関数を利用する if文 一番単純なパターンマッチ thenとelseが必須 then, else節は型が同じ必要がある 必須なのでいわゆる「ぶらさがりelse問題」が発生しない -- 絶対値 abs1 n = if n >= 0 then n else -n -- 整…
第3章 型とクラス 基本 Bool, Char, String*1, Int, Integer, Float リスト [a] 要素の型は同じ、型に「長さ」は含まない、長さに制限はない タプル (a, b) 要素の型は自由、型で「要素数*2」が分る 最初の要素は「ユニット」という 要素数1のタプルは存在…
CSSをいじっていたら、ここしばらくCSSが適用されなくて、デザインが崩壊していたのですが、原因が分かりました。ずばり、カスタマイズのCSSで:beforeを使ったのが原因なようです。どうもシステム側でCSSをパースしている模様。IEではexpressionとか使えるし…
第2章 はじめの一歩 標準ライブラリ:Prelude GHCiは起動時に標準ライブラリはPrelude.hsを読み込む。 プロンプトにPreludeと出るのはそのため。 各種演算子も当然のことながら関数で、Prelude.hsで定義されている。 整数の割り算は"`div`"*1。浮動小数点の…