2007-01-01から1年間の記事一覧

指定された日の存在する週

cf. どう書く?org - 指定された日の存在する週こんどは Ruby で。 require 'date' y, m, d = ARGV.map{|arg| arg.to_i } date = Date.new(y, m, d) sunday = (date - date.wday) (1..5).each do |d| puts((sunday + d).strftime("%Y-%m-%d %a")) end 実行。…

条件を満たす行を取り除く

条件を満たす行を取り除く via http://d.hatena.ne.jp/gan2/20070706/1183708048'#'で始まる行を取り除く問題。すげーひさしぶりに Haskell で書いてみる。 module Main where import System f :: String -> Bool f (h:tl) | h == '#' = False | otherwise =…

ピラミッドを作る

どう書く?org - ピラミッドを作る与えられた高さのピラミッドを作る module Main where import System cjust :: Int -> String -> String cjust w s | w <= length s = s | otherwise = margin ++ s ++ margin where margin = replicate ((w - (length s)) …

hatenaapigraph が 0.1.2 に

proxy 対応がうまくいってない,と書いたら早速対応してくれた。ありがとうございます。cf. d:id:takatoh:20070522:http_proxy のコメント欄 バージョンアップして,リポジトリに取り込んでもらった Pragger のプラグインを修正した。設定ファイルで proxy …

環境変数 HTTP_PROXY の値には "http://" を含むのか含まないのか

昨日の続きでもある。 hatenaapigraph 0.1.1 にあわせて HTTP_PROXY=proxy:8080 としたら wget が動かなくなった。Ruby の open-uri もダメ。 ^o^ >echo %HTTP_PROXY% proxy:8080 ^o^ >type get_diary.rb require 'open-uri' puts open("http://d.hatena.ne.…

hatenaaipgraph が 0.1.1

になってるのに,今日,気がついた。HTTP_PROXYサポートと日本語グラフ名のバグ修正なので,こないだ書いた Prager の publish::hatena_graph プラグインも簡潔になる。 ## Post a data to Hatena Graph ## ## require gem `hatenaapigraph' 0.1.1 or later.…

Pragger のリリースも近い?

Praggerがどうやら最初のリリースに向けて具体的に動き出したっぽい。ちょうどいいので今まで作ったプラグインについてまとめておく。どれもPraggerと同じライセンスでOKです。 load_lirs.rb LIRS を取得するプラグイン。これでいいのか実は不安。 publish:h…

FizzBuzz問題

cf. どうしてプログラマに・・・プログラムが書けないのか? via 404 Blog Not Found - ブクマゴルフってどうよ? なんか昨日からあちこちで見かけるので書いてみた。久しぶりの Haslellで。 あと,増田で剰余は使うな,と言ってるから使わない。 fizz = cycle…

はてなグラフにデータをポストする PRagger プラグイン

昨日(id:takatoh:20070502:hatenagraph)のスクリプトを PRagger のプラグインにした。 受け取ったデータの最初の数値だけをポストする。 ## Post data to Hatena Graph ## ## - module: publish::hatena_graph ## config: ## user_id: your hatena user id…

はてなグラフにデータをポストするスクリプト,あるいは hatenaapigraph の gem がバグってる件

はてなグラフを試してみた。で,いちいちログインしてデータを入力するのも面倒なので,スクリプトを書こうと思ってヘルプを見たら,はてなグラフ数値登録API の gem があるじゃないか。すばらしい。 早速インストールしてスクリプトを書いた(というかサン…

LIRS を取得する PRagger プラグイン

を作ってみたけど,「LIRSってどんなんだっけ?」ってとこから始めたからどうもよくわからない。 こんなんでいいのかな。LIRS と RSS の対応は表のようにしてみたけど,どうか。 LIRS RSS 更新時刻 (Last-Modified GMT) dc:date 更新時刻を取得した時刻(GMT)…

gem の作り方メモ

シリーズ パッケージマネジメント 【第 2 回】 RubyGems (2) RubyistMagazine の記事 gemspecファイルのリファレンス rake の GemPackageTask

publish::hatena_diary_writer が受け取るデータ

時間がないのでアイデアのメモだけ。要するに,日記として必要なデータは日付と本文なわけで,これを Hash に入れてやればいいんじゃないかな。こんな感じに。 [{"date" => "2007-02-26", "content" => "日記の本文"}, ...]キー"date" の値は Time のインス…

PRagger

と publish::hatena_diary_writer プラグインで書き込みテスト。

PRagger その2

下のエントリをポストするのに使った publish::hatena_diary_writer.rb プラグインがちょっと使いにくい。 今日の日記にしかポストできないのはとりあえずおいとくとしても,ポストするたびに下に追加ってのは1日1ファイルにしてる俺のやり方とは違う。 こ…

関数

function add (arg1, arg2) { var result = arg1 + arg2; return result; } add(2, 5); // => 7

変数のスコープ

変数を定義するときには,とにかく var をつけておくのが良さそうだ。 関数の外で定義した変数はグローバル 関数の中で var を使って定義した変数はその関数内のローカル 関数の中で var を使わずに定義した変数はグローバル 関数の中で var を使った場合: …

arguments

関数定義に仮引数を書かなくても,arguments という配列に格納される。引数の数が不定の場合に便利。 function hello() { for (var i=0; i<arguments.length; i++){ document.write("Hello, ", arguments[i], ".<br>"); } return i; } hello("Andy", "Bill", "Charlie");</arguments.length;>

再帰呼び出し

function fact(n) { if (n < 0) return null; if (n > 0) { return (n * fact(n-1)); } else { return 1; } }

無名関数

名前を指定しないで関数を定義すると無名関数になる。変数に代入する場合: var f1 = function(arg1, arg2) { return arg1 * arg2; } f1(3,2); // => 6 直接使う場合: var a = new Array(3, 2, -6, 8, -4); a.sort(function (a,b) {return a - b;}); docume…

if

var val1 = 5; var val2 = 4; if (val1 < val2) result = val2; else result = val1; document.write(result); 実行するステートメントが複数なら { } で囲む。 条件演算子もある。 val1 < val2 ? val2 : val1;

for

var sum = 0; var i; for (i=1; i<=10; i++) { sum += 1; } document.write(sum, "<br>");

for 〜 in

var animals = Array("dog", "cat", "elephant"); // 配列 for (x in animals) { document.write(x, "<br>"); }

while

var i = 0; while (i < 10) { document.write(i++, "<br>"); } ループの停止は break,中断(スキップ)は continue。 var i = 0; while (true) { i++; if (i % 2 == 0) continue; if (i >= 10) break; document.write(i++, "<br>"); }

try 〜 catch

例外処理。 try { var today = Date(); today.set_month(3); // no such method. } catch (e) { document.write(e); // => [object Error] } 例外を発生させるには throw かな。

配列

生成 Array コンストラクタを利用する方法。引数に配列のサイズを指定できるけど,必要なら勝手に大きくなってくれる。 var a1 = new Array(); a1[0] = "dog"; a1[1] = "cat"; a1[2] = "elephant"; コンストラクタに値を直接渡す方法。 var a2 = new Array("…

連想配列

Array の添字に整数(インデックス)じゃなくて文字列(キー)を使うと連想配列になる。 var pets = new Array(); pets["Andy"] = "dog"; pets["Bill"] = "cat"; pets["Charlie"] = "elephant"; for (name in pets) { document.write(name, ": ", pets[name]…

オブジェクト

JavaScript のオブジェクトは Ruby でいうクラス インスタンスの生成 today = new Data(); // new コンストラクタ; メソッド呼び出し today.getDay(); // インスタンス名.メソッド名(); インスタンスメソッドとクラスメソッドがある。 インスタンス名.プロパ…

変数

宣言しなくても使えるけど,明示的に宣言するには: var v1; var v2, v3, v4; var v5 = 10; // 同時に初期化 数値型,文字列型,ブーリアン型,オブジェクト型 etc. リファレンス型とプリミティブ型 変数名は,アルファベットか _ で始まり,2文字目以降には…

リテラル

整数(10進数,8進数,16進数) 10 // 10進数 012 // 8進数 0x0a // 16進数 浮動小数点 3.14 1.3e3 .3 文字列 "abc" 'def' ブーリアン true false null エスケープシーケンス