バリケンのRuby日記 RSSフィード

2007-09-30

[] C言語勉強をはじめてみるよ  C言語の勉強をはじめてみるよ - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  C言語の勉強をはじめてみるよ - バリケンのRuby日記  C言語の勉強をはじめてみるよ - バリケンのRuby日記 のブックマークコメント

とりあえず、興味本位C言語勉強をはじめてみるよ。

Cコンパイラインストール

C言語で書いたプログラムを実行するためには、Cコンパイラというソフトウェアが必要みたい。Debian GNU/Linuxなら、たいてい最初からインストールされているみたいだよ。

もしもインストールされていなければ、コマンド一発

# aptitude install gcc

インストールできるみたいだよ。

Hello, world!

次はお約束C言語Hello, world!を出力するプログラムを書いてみるよ。まずは適当テキストエディタhello.cを作成するよ。viエディタなら

$ vi hello.c

のような感じだね。内容はWikipediaのC言語の項にのっているサンプルを参考に、次のようにするよ。

#include <stdio.h>

int main(void) {
  printf("Hello, World!\n");
  return 0;
}

つぎに、このプログラムコンパイルして、実行形式のファイルを生成するよ。

$ gcc hello.c

すると、a.outという実行形式のファイルが生成されるよ。

じゃあ、この実行形式のファイルを実行してみよう!コマンドラインで「./a.out」と入力してね。

$ ./a.out
Hello, World!
$

無事、「Hello, World!」が画面に表示されたね。

とりあえず「C言語プログラムを書く」「C言語プログラムから実行形式のファイルを生成する」「実行形式のファイルを実行する」という流れは体験できたよ。

次からは、もうちょっと複雑なプログラムを書いてみたいと思うよ。

[][] どうしてC言語勉強をはじめようと思ったか  どうしてC言語の勉強をはじめようと思ったか - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  どうしてC言語の勉強をはじめようと思ったか - バリケンのRuby日記  どうしてC言語の勉強をはじめようと思ったか - バリケンのRuby日記 のブックマークコメント

せっかくだから、どうしてC言語勉強を始めようと思ったか書いておくね。あとで追記するかも。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070930

2007-09-26

[] 普段使うプログラミング言語と、別のプログラミング言語  普段使うプログラミング言語と、別のプログラミング言語 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  普段使うプログラミング言語と、別のプログラミング言語 - バリケンのRuby日記  普段使うプログラミング言語と、別のプログラミング言語 - バリケンのRuby日記 のブックマークコメント

スラッシュドット ジャパン | Ruby on Railsは万能薬ではない」という記事を読んだよ。

なんかいろんなポイントがごっちゃになって議論されているように感じるけど、「プログラミング言語」と「そのプログラミング言語で書いたソフトウェアの実行環境」に分けて考えるよ。

まずは「プログラミング言語」について。ちょっと思ったのは「PHP利用者にとってのRubyは、Ruby利用者にとっての(HaskellOCamlSchemeなどの)関数型言語」なんじゃないかなあ。

ぼくは普段はRubyを使うけど、Haskellを学ぶことでRubyの理解がすごく深まったよ。同様に普段はPHPを使う人でもRubyを学ぶことで、PHPの理解が深まった(だからPHPに戻ったら効率が上がった)んじゃないかな。

結局は「普段使っているプログラミング言語だけじゃなくて、第二外国語みたいな感じで別の言語勉強することで、普段使っているプログラミング言語の理解が深まる」ということなんじゃないかな。

[] 適材適所で実行環境を選ぶこと  適材適所で実行環境を選ぶこと - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  適材適所で実行環境を選ぶこと - バリケンのRuby日記  適材適所で実行環境を選ぶこと - バリケンのRuby日記 のブックマークコメント

スラッシュドット ジャパン | Ruby on Railsは万能薬ではない」という記事に関する感想の続きだよ。

もうひとつ感じたのは「実行環境」について。何かの目的があって、それを実現する実行環境が「PHP環境のほうが適している」と判断したのなら、無理にRuby on Rails(の環境)を選ぶ必要はないよね。PHP環境に対するアプリケーションを作るなら、当然PHPで書かなきゃいけない、というだけのことだよね。

ようは「適材適所で実行環境を選ぶんだから、プログラミング言語はそれに合わせたものを使わないといけない」というだけの話じゃないかな。

RubyHaskell勉強してみて思ったのは、良い教材(よい先生もいるともっといいよ。さらにその人とペアプログラミングできるともっといいよ)さえあれば、他のプログラミング言語を学ぶことはそんなに難しくないよ。そして新たな発見があったりするから、他の言語を使わないといけないことになっても、毛嫌いしないで使ってみればいいんじゃないかな。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070926

2007-09-18

[] JavaScriptのthisはRubyのself、でいいのかな  JavaScriptのthisはRubyのself、でいいのかな - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  JavaScriptのthisはRubyのself、でいいのかな - バリケンのRuby日記  JavaScriptのthisはRubyのself、でいいのかな - バリケンのRuby日記 のブックマークコメント

IT戦記 - JavaScript の this についてという記事を読んで思い出したけど、今まではRubyのわかる人には「JavaScriptのthisはRubyのselfのことだよ」って教えてたけど、合ってるかな?

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070918

2007-09-15

[] RSSアイコン  RSSのアイコン - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  RSSのアイコン - バリケンのRuby日記  RSSのアイコン - バリケンのRuby日記 のブックマークコメント

縦書きジェネレータをRSSに対応させようと思うよ。

とりあえず、Feed Iconsからfeedicons-standard.zipダウンロードして、アイコンを使わせてもらうことにしようと思うよ。

Ruby on Railsは標準でXMLを出力する機能を持っているから、簡単にRSSの出力に対応することができるよ。やりかたはまたこんど。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070915

2007-09-13

[] プログラミング言語をはじめるなら?  プログラミング言語をはじめるなら? - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  プログラミング言語をはじめるなら? - バリケンのRuby日記  プログラミング言語をはじめるなら? - バリケンのRuby日記 のブックマークコメント

( ;^ω^)<へいわぼけ: プログラミング言語を始めるなら何が一番いいのだろうかという記事で、みんな基礎としてC言語を薦めているね。

ぼくはRubyHaskellJavascriptしかわからないけど、C言語勉強したほうがいいのかなあ。

C言語勉強するための教科書って、何がいいかな?

shunsukshunsuk2007/09/27 17:02カーニハン&リッチーの「プログラミング言語C」がC言語のバイブルと呼ばれています。カーニハン&リッチーはC言語の開発者なので。日本語訳はビミョーでしたが、ソースコードはみんなのお手本になっているらしいです。C言語をやるなら読んでおくといいと思います。

muscovyduckmuscovyduck2007/09/28 09:13ご紹介ありがとうございます!>shunsukさん
「プログラミング言語C」、有名な書籍なんですね。
参考にさせていただきます。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070913

2007-09-12

[][][] 選択範囲を縦書きジェネレータに登録するブックマークレット  選択範囲を縦書きジェネレータに登録するブックマークレット - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  選択範囲を縦書きジェネレータに登録するブックマークレット - バリケンのRuby日記  選択範囲を縦書きジェネレータに登録するブックマークレット - バリケンのRuby日記 のブックマークコメント

選択範囲を縦書きジェネレータカンタンに登録できるようにするブックマークレットを作ってみたよ。

まずはInternet Explorer用。

javascript:window.location='http://aor2007-8.drecom.jp:18006/tates/new?tate[url]='
+encodeURIComponent(location.href)+'&tate[title]='
+encodeURIComponent(document.title)+'&tate[body]='
+encodeURIComponent(document.selection.createRange().text);

改行しちゃってるけど、実際には一行で書いてね。

そして、次はFirefox用。

javascript:window.location='http://aor2007-8.drecom.jp:18006/tates/new?tate[url]='
+encodeURIComponent(location.href)+'&tate[title]='
+encodeURIComponent(document.title)+'&tate[body]='
+encodeURIComponent(window.getSelection());

うーん、なんとか共用にできないかなあ。

あ、もちろんブックマークレットを作るだけじゃだめで、コントローラー(app/controllers/tates_controller.rb)の

  def new
    @tate = Tate.new
  end

となっているところを、

  def new
    @tate = Tate.new(params[:tate])
  end

としてあげる必要があるよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070912

2007-09-10

[][] 縦書きジェネレーター  縦書きジェネレーター - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  縦書きジェネレーター - バリケンのRuby日記  縦書きジェネレーター - バリケンのRuby日記 のブックマークコメント

一発ネタとして、昨日のyoko2tateを使って「縦書きジェネレーター」をRuby on Railsで作ってみたよ。

http://aor2007-8.drecom.jp:18006/tates/

ためしに昨日の青空文庫の「岡本かの子 老妓抄」からの引用は、次のところに登録してみたよ。

http://aor2007-8.drecom.jp:18006/tates/show/1

こういうのがすぐに作れるから、Ruby on Railsは便利だねえ。

追記:今回打ち込んだコマンドは下記のとおりだよ。

% cd rails
% rails -d sqlite3 tate
% cd tate
% ruby script/generate model tate
% vi db/migrate/001_create_tates.rb
% rake db:migrate
% ruby script/generate scaffold tate
% vi app/views/layouts/tates.rhtml
% vi app/views/tates/list.rhtml
% vi app/views/tates/edit.rhtml
% vi app/helpers/application_helper.rhtml
% vi public/stylesheets/scaffold.css
% ruby script/server

これだけでWebアプリケーションのたたき台が作れちゃうんだねえ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070910

2007-09-09

[] 横書きを縦書きに変換  横書きを縦書きに変換 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  横書きを縦書きに変換 - バリケンのRuby日記  横書きを縦書きに変換 - バリケンのRuby日記 のブックマークコメント

横書きの文字列を与えたら、無理やり縦書き風の配列を生成するメソッドyoko2tateを作ってみたよ。

$KCODE = 's'

require 'pp'

def yoko2tate(str)
  lines = str.split
  str_array = lines.map{|s| s.split(//) }
  max_length = str_array.map{|a| a.size }.sort.pop
  str_matrix = str_array.map{|a| a + ([' '] * (max_length - a.size)) }
  str_matrix.pop.zip(*str_matrix.reverse)
end

string = "古池や\n蛙飛びこむ\n水の音"

pp yoko2tate(string)

実行結果だよ。

[["水", "蛙", "古"],
 ["の", "飛", "池"],
 ["音", "び", "や"],
 [" ", "こ", " "],
 [" ", "む", " "]]

あ、ここでは漢字コードシフトJISを前提にしているよ。

句読点や長音記号(伸ばし棒)、かぎかっことかなら、うまく他の記号を使ってごまかして表示できるかな

追記:次のような感じではどうかな?

$KCODE= 's'

require 'nkf'
require 'pp'

def yoko2tate(str)
  lines = str.split
  str_array = lines.map{|s| s.split(//) }
  max_length = str_array.map{|a| a.size }.sort.pop
  str_matrix = str_array.map{|a| a + ([' '] * (max_length - a.size)) }
  str_matrix.pop.zip(*str_matrix.reverse)
end

string = <<STR
「そりゃそうさ、こんなつまらない仕事は。パッションが起らないからねえ」
「パッションって何だい」
「パッションかい。ははは、そうさなあ、君たちの社会の言葉でいうなら、うん、そうだ、いろ気が起らないということだ」
STR

string = string.split.map{|s| NKF.nkf("-sf24", s).split }.flatten.join("\n")

tate = yoko2tate(string)

tate.each do |array|
  array.map! do |c|
    case c
    when "。" then " °"
    when "、" then " `"
    when "ー" then " l "
    when "「" then " ┐"
    when "」" then "└ "
    else
      " #{c} "
    end
  end
end

pp tate.map{|array| array.join.gsub(/\s\s/, ' ') }

実行結果だよ。

[" と そ の そ  ┐ ┐ ン ま  ┐",
 " い う 言 う パ パ が ら そ ",
 " う だ 葉 さ ッ ッ 起 な り ",
 " こ  ` で な シ シ ら い ゃ ",
 " と い い あ ョ ョ な 仕 そ ",
 " だ ろ う  ` ン ン い 事 う ",
 "└  気 な 君 か っ か は さ ",
 "   が ら た い て ら  ° `",
 "   起  ` ち  ° 何 ね パ こ ",
 "   ら う の は だ え ッ ん ",
 "   な ん 社 は い └  シ な ",
 "   い  ` 会 は └    ョ つ ",
 "          `         "]

あ、ちなみにこの文字列は、青空文庫から引用させてもらったよ。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070909

2007-09-05

[][] retrospectiva  retrospectiva - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  retrospectiva - バリケンのRuby日記  retrospectiva - バリケンのRuby日記 のブックマークコメント

Ruby on Railsで実装されているプロジェクト管理ツールretrospectivaインストールメモだよ。あとでちゃんとまとめるかも。

libsvn-rubyインストールしないと、Subversionとの連携ができないみたいだよ。ちなみにDebian Sargeにはlibsvn-rubyがないみたいだから、Debian Etchで試してね。

あ、もちろんRubyとRubyGemsとRails、そして適当なRDBMSとRDBMSのRubyアダプタは先にインストールしておく必要があるよ。ちなみにぼくは、Debian Etch、Ruby1.8.5、RubyGems0.9.4、Rails1.2.3、SQLite3.3.8、sqlite3-ruby-1.2.1の環境で試しているよ。

# aptitude install libsvn-ruby
$ wget http://retrospectiva.googlecode.com/files/retrospectiva-1.0.0.tar.gz
$ tar xvzf retrospectiva-1.0.0.tar.gz
$ cd retrospectiva-1.0.0
$ vi config/database.yml
$ rake db:retro:load RAILS_ENV=production
$ ruby script/server -e production

ブラウザでhttp://localhost:3000/にアクセスしてね。ログインは、ユーザー名:admin、パスワードpasswordで入れるみたい。

まずは「Admin」→「Repositories」でリポジトリを登録するよ。ローカルリポジトリの指定はfile:///home/[ユーザー名]/svn/[プロジェクト名]のようにしないで、/home/[ユーザー名]/svn/[プロジェクト名]のように直接ディレクトリ名を指定すればいいみたいだよ。

そのあと「Admin」→「Projects」でプロジェクトを作成するよ。最低限、プロジェクト名と「Repository」のプルダウンメニューでさっき登録したリポジトリを指定すれば、とりあえず動かすことができるよ。

トップページに戻ると「Blog」「Wiki」「Changesets」「Browse source」「Milestorns」「Tickets」「New ticket」「Search」とかのメニューが使えるようになっているから、いろいろ試してみてね。

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070905

2007-09-02

[] coLinuxUbuntu 7.04  coLinuxでUbuntu 7.04 - バリケンのRuby日記 を含むブックマーク はてなブックマーク -  coLinuxでUbuntu 7.04 - バリケンのRuby日記  coLinuxでUbuntu 7.04 - バリケンのRuby日記 のブックマークコメント

coLinuxのSnapshotsのサイトを見てみたら、また新しいバージョン(devel-coLinux-20070819.exe)が出ているよ!

せっかくだからクリーンインストールしなおして、OSUbuntuの現時点での最新版(Ubuntu 7.04)を入れてみることにしたよ。

coLinuxUbuntuを利用する方法は、基本的にはこちらのサイトにまとめられている手順のとおりにやればできるよ。ただ、ぼくは今回はTAPじゃなくてこちらで紹介されているSLiRPを使ってインストールしてみたよ。

具体的には、インストール用のconfファイル(ubuntu_installer.confという名前にしたよ)は、

kernel=vmlinux
cobd0=c:\coLinux\rootfs_3gb.img
cobd1=c:\coLinux\swap_192mb.img
cofs0=c:\coLinux
root=/dev/ram0 vga=normal ramdisk_size=14409 rw --
initrd=ubuntu-initrd.gz
mem=128
eth0=slirp

のような感じでtuntapじゃなくてslirpを指定しているよ。こうすると、インストールの途中(ネットワークの設定)でDHCPの検出に失敗することなくインストールが進むから、ネットワークの設定で悩まなくてすむよ。TAPネットワークの設定がうまくいかない人は、SLiRPがオススメだよ。

あ、もちろんcoLinuxインストールのときに、「coLinux Virtual Network Daemon (SLiRP)」を指定するのを忘れないでね。

f:id:muscovyduck:20070902193653p:image

インストールが終わったあとの起動用のconfファイル(ubuntu.conf)も、次のような感じになるよ。

kernel=vmlinux
cobd0=c:\coLinux\rootfs_3gb.img
cobd1=c:\coLinux\swap_192mb.img
cofs0=c:\coLinux
root=/dev/cobd0
ro
initrd=initrd.gz
mem=128
eth0=slirp,,tcp:10022:22/tcp:10080:80/tcp:13000:3000

ちなみにslirpのうしろにいろいろと書いている理由は、こちらを参照してね。ここではssh用の22番、http用の80番、Ruby on Rails用の3000番をそれぞれ10022番、10080番、13000番に転送しているよ。

ついでに、いくつかの設定ファイルの内容を書いておくから、インストール後の設定の参考にしてね。

/etc/network/interfaces

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface (slirp)
auto eth0
iface eth0 inet static
   address 10.0.2.15
   broadcast 10.0.2.255
   netmask 255.255.255.0
   gateway 10.0.2.2

/etc/fstab

/dev/cobd0 /     ext3 noatime,errors=remount-ro 0 1
/dev/cobd1 none  swap sw       0 0
proc       /proc proc defaults 0 0

/etc/hosts

127.0.0.1 localhost
127.0.0.1 ubuntu

/etc/resolv.conf

nameserver 10.0.2.3

poch-7003poch-70032007/09/08 22:23はじめまして.新しいの出てたんですね.早速私もゴニョゴニョしてみようと思います.#ブログまわると良い情報があって助かります:)

トラックバック - http://rubyist.g.hatena.ne.jp/muscovyduck/20070902