Programming

Rubyで変数名を指定してインスタンス変数を書き換える方法

気がついたら、年が明けてました。あけましておめでとうございます。早速本題に入ります。JavaScriptはプライベートなど無くフリーダムなのでthis[key] = valueの形でプロパティを書き換えられますが、Rubyではself[key] = valueとはできません。はてと思い…

Rubyの多次元配列は要注意

これはRubyに限った話では無いのですが、何回もこれが原因のエラーを出しているので自戒の意味を込めてメモ。 初期化するときはブロックを使う これ鉄則。 irb(main):003:0> aa = Array.new 2, Array.new(2) => [[nil, nil], [nil, nil]] irb(main):004:0> a…

Rubyのアクセス演算子'.'と'::'の違いと使い分けの考察

基本 Rubyにはモジュールなどのプロパティにアクセスするのに.と..の2つの演算子があります。例えば、 module Hoge def self.huga end end なら、Hoge::hugaに対して Hoge.huga Hoge::huga() の2通りの書き方が出来ます。 .と::の違い マニュアルにちゃんと…

rubyで--debugオプション指定時に出る "warning: `&' interpreted as argument prefix" の対処法

def hoge(&block) proc &block end のようにすると、タイトルのwarningが出ます。Rubyでは&の付く変数は def hoge(&block) proc(&block) end のように、ちゃんと括弧で囲むのが推奨されているようです。

Rubyの範囲演算子は降順のイテレートには使えない

かなりハマったのでメモです。 範囲演算子 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つに参加

就活もいよいよ始まり…というのはあんまり関係ないのですが、プロコンに参加することにしてみました。ちょうど2つ面白そうなのがあったので、どちらにもヒッソリと登録しました。年末年始は多少時間がありそうなので、ぼちぼちやってみようと思います。 ハル…

ArrayBufferとBlobについてのメモ

とりま今の理解。ちゃんと調べてないので間違ってる可能性大。 Blobオブジェクトはバイナリデータを抽象化したもの。 Blobの実データはArrayBufferなどに変換して得られる。 ArrayBuffer内のデータから値を抽出するときはTyped Arrays(Float32Array、Int16Ar…

Node.jsのmoduleとexports、そしてCoffeeScript

ここしばらく、Node.jsを使った開発で忙しくて、ようやく一段落つきました。ということで随分とNodeを使ってきたつもりだったのですが、肝心のexportsの辺りの理解が浅かったことに気づいたので、少しまとめます。 exportsとmodule.exports exportsとmodule.…

CoffeeScriptにおけるarguments.callee的な再帰の考察

題材として、以下のフィボナッチ数の計算関数を利用します。効率が悪いのはご愛嬌。 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のモジュールシステムとオブジェクトの参照

Node.jsのrequireの動作についてのメモです。 requireの大原則 一番重要なのは「requireされたファイルはキャッシュされ、2度ロードされることはない。*1」ということです。 モジュールは初めて読み込まれたときにキャッシュされます。 すなわち(他のキャ…

CoffeeScriptにおけるdo while

CoffeeScriptではdo while相当が無いのかー、と少しがっかりしたのですが、代案がstackoverflow先生に書かれていたのでメモしておきます。ちなみに、普通に無限ループとbreakの組み合わせで、ごくごく当たり前なことなのですが、何故か思いつきませんでした…

process.nextTickとはなんぞ

公式マニュアルのprocessを眺めていたらprocess.nextTickというのが出てきました。なんだかとても大事らしいです。マニュアルによればコレは、 イベントループの次以降のループでコールバックを呼び出します。 これは setTimeout(fn, 0) の単純なエイリアス…

CoffeeScriptでUnderscore.jsと戯れる

CoffeeScriptとUnderscore.jsの組み合わせで関数型言語のようなリスト主体のプログラミングをすることができます。せっかくなので_.mixinで_オブジェクトを拡張してみます。 keysとvaluesからObjectを作成する_.pairs Underscore.jsには、Objectから(1)キー…

jQueryとKnockout.jsによるタブUIの実装テスト

最近、backbone.js(+underscore.js)とKnockout.jsの練習をしており、その一環で作成したものです。jsdo.itが貼れるかどうかのテストも兼ねてます。 MVVMなかなかいい 最初はdata-bindになかなか慣れなかったのですが、一度慣れてしまうとbackboneのめんどく…

_.bindAllについてのメモ

_.bindAllは、第一引数に指定したオブジェクトAがあった時、Aがもつ関数プロパティのthisをAにしてしまう関数です。 hoge = { val: "hoge", print: function() { console.log(this.val); }, set: function(v) { this.val = v; }, get: function() { return t…

プログラミングHaskellを読む(9)

いよいよモナドに近づいて来ました。前章と比較しながら読むと、この章は前章の抽象化であることが分かります。 第9章 対話プログラム 基本 バッチプログラムは副作用がない。対話プログラムは入力が非決定的なので副作用が発生します。 では、副作用を起こ…

プログラミングHaskellを読む(8)

久々の更新です。この章はかなりきついです。以下を理解するまでに3回ぐらい投げてます。 第8章 関数型パーサー 基本 実際に動かすことができた所のソースコードを載せます。 import Char type Parser a = String -> [(a, String)] -- 入力をそのまま出力に…

Sequelizeが怖くて使えない

Node.jsで利用できるSequelize » A multi-dialect Object-Relational-Mapper for Node.JSという(現時点で唯一の?)ORMがあります。使い方にはクセがありますが、色々いじっていれば1日ほどで使えるようになるぐらいの難しさだと思います。v1.5.0時点で対応…

CoffeeScriptで継承出来るようなJavaScriptのクラスの書き方

意外と根が深すぎて、ビビりました。数時間を費やしてしまいました。 環境 Google Chrome 20.0.1132.57 CoffeeScript 1.3.3 結論 まず一番重要なのは、「constructorではオブジェクトをreturnすべきでない」ということです。この記事を書いてからしばらく立…

JavaScriptの継承関数を考える

今更ながらJavaScriptの継承について再考してみました。JavaScriptの継承については、だいぶ前から何度も考えているのですが、個人的にコレといった決定版がない感じ。 最近、個人的によく使っている継承パターンですした。 var extend = function(obj, func…

プログラミングHaskellを読む(7)

第7章 高階関数 基本 高階関数とは 引数として関数をとったり、関数を返したりする関数。ただし、Haskellではカリー化のため関数を返すのが常なので、明示的に高階関数と呼ぶ場合は、引数として関数を取る関数である事が多い。 twice :: (a -> a) -> a -> a …

残念なBitmapDrawable

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>

プログラミングHaskellを読む(6)

ここのところ何故か非常に忙しいのですが、なけなしの時間を捻出して読みました。ふぅ。 第6章 再帰関数 この章は、真新しいことはあまりなく、そんなに難しくないです。次の章もかな? I/Oはまだが~ 基本 Haskellでは関数を関数自身を使って定義することが…

プログラミングHaskellを読む (5)

第5章 リスト内包記法 この章のシーザー暗号の部分は、なかなか面白いです。 基本 リスト内包記法は数学の集合の表現を模している。 参考:集合の基本概念:定義と記号[数学についてのwebノート] *Main> -- { x^2 | x ∈ {1, ..., 10} } *Main> [x^2 | x <- […

プログラミングHaskellを読む (4)

第4章 関数定義 関数定義で使えるワザ 既存の関数を利用する if文 一番単純なパターンマッチ thenとelseが必須 then, else節は型が同じ必要がある 必須なのでいわゆる「ぶらさがりelse問題」が発生しない -- 絶対値 abs1 n = if n >= 0 then n else -n -- 整…

プログラミングHaskellを読む (3)

第3章 型とクラス 基本 Bool, Char, String*1, Int, Integer, Float リスト [a] 要素の型は同じ、型に「長さ」は含まない、長さに制限はない タプル (a, b) 要素の型は自由、型で「要素数*2」が分る 最初の要素は「ユニット」という 要素数1のタプルは存在…

プログラミングHaskellを読む (2)

第2章 はじめの一歩 標準ライブラリ:Prelude GHCiは起動時に標準ライブラリはPrelude.hsを読み込む。 プロンプトにPreludeと出るのはそのため。 各種演算子も当然のことながら関数で、Prelude.hsで定義されている。 整数の割り算は"`div`"*1。浮動小数点の…

プログラミングHaskellを読む (1)

先日宣言したように、プログラミングHaskellを買ってきたので、ちまちまと読むことにします。 モチベーション維持のためにも、章ごとにメモや感想、練習問題の自分なりの解答を、このブログに書いていきたいと思います*1。 第1章 導入 まず、この章を読んで…

練習用コードを書くために

以下、Windows7 + Haskell Platform + Cygwinの環境下でのメモです。 練習のためのコードを書くために Haskell Platformでは ghc コンパイラ。ネイティブバイナリを生成。 ghci 対話型の簡易インタプリタ。 runghc スクリプトの実行。 がHaskellプログラムを…

Haskell入信

なんとなくHaskellを始めようという気になったので、ちょっと本気でやってみることにします。 関数型言語は、一応OCaml・Scalaには触ったことがあるのですが、Haskellは完全に初めてです。 果たしてどうなることやら。 まずはインストール WindowsとMac両方…