<   2011年 01月 ( 3 )   > この月の画像一覧

cairoはjpegを使えないみたい。
linuxのconvertを使ってやってみた。
ついでに文字も書いてみた。
いい感じ。

convertは
sudo apt-get install imagemagick
で、手に入れた。

#!usr/bin/env ruby

require 'rubygems'
require 'sdl'
require 'cairo'

class Weather
def initialize(screen)
url = "http://weather.yahoo.co.jp/weather/"
io = IO.popen("wget -q -O - %s 2" % url)
html = ""
while line = io.gets
html << line
end
io.close
if /satellite.html(.*?)width/ =~ html
if /(http.*?)"/ =~ $1
url = $1
end
end
IO.popen("wget -q -O /tmp/input.jpg %s" % url).close
IO.popen("convert /tmp/input.jpg /tmp/input.png").close
@image = Cairo::ImageSurface.from_png("/tmp/input.png")
context = Cairo::Context.new(@image)
context.set_source_rgb(0, 0, 0)
context.font_size = 25
context.move_to(30, 50)
context.show_text('日本の上空')
format = Cairo::FORMAT_ARGB32
stride = Cairo::Format.stride_for_width(format,@image.width)
@screen = screen
@surface = SDL::Surface.new_from(@image.data,@image.width,@image.height,32,stride,0x00FF0000,0x0000FF00,0x000000FF,0xFF000000)
@x,@y = 10,70
end

def update
@x += 3
@x = 0 - @image.width if @x > @screen.w
@screen.put(@surface,@x,@y)
end
end

class Phase
def initialize(screen)
@screen = screen
@item = Weather.new(@screen)
end

def update
@screen.fill_rect(0,0,@screen.w,@screen.h,[20,20,20])
@item.update
end

def handling
while e=SDL::Event.poll
exit if e.kind_of?(SDL::Event::Quit) || (e.kind_of?(SDL::Event::KeyDown) && e.sym == SDL::Key::ESCAPE)
end
end

def run
loop do
handling
update
@screen.flip
SDL.delay(50)
end
end
end

SDL.init(SDL::INIT_EVERYTHING)
SDL::WM.set_caption("Weather","")
screen = SDL::setVideoMode(500,350,16,SDL::SWSURFACE)
Phase.new(screen).run
[PR]
by gaziya | 2011-01-28 20:29
おもしろものを見つけました。
描画ライブラリーのcairoという奴です。
ruby/sdlじゃ、ろくな絵が書けないの、これいけてます。
インストールは

sudo apt-get install libcairo2-dev
sudo gem install cairo

ちょっと、悪戦苦闘の末、基本形みたいのを作りました。
しばらく、遊べそうです。

<追記>
その後、何回か、書き直しました。
色々な要素を入れて書き直したプログラムのリンクを貼っときました。

ボールのバウンド
動く弾幕
ゲーム
電卓
2画面の切り替え
星の回転
せん断の回転
アフィン変換のテスト
フレームレートのクラス
ライフゲーム
上記のリンクのプログラムは、irbにプログラム全部のコピペで試せます。
[PR]
by gaziya | 2011-01-27 23:45
最近、部屋が手狭になってきた。
デスクトップが邪魔だ。
おもいきって、ノートパソコンにしてみた。
さっそく、Windowsを潰してUbuntuをインストール作業を始めたが、できない。
途方に暮れた。
いまさら、Windowsなんて嫌だ。
色々、調べたらVirtualBoxにぶちあったた。
少しぐらいショボくても、しょうがないかの気持ちで試してみた。
ところが、結構いける。
Windowsの匂いが、しない。
逆に上出来なWineを装備している感じだ。
最近はマシンパワーがあがったから、この選択もありだな。

初めての試みなので忘備録を兼ねて導入手順を書いておきます。
VirtualBoxをWindowsにインストール。
VirtualBoxにUbuntu10.10をインストール。
この辺までは、ネットで探せば落ちている。

インストールが終わり、ろくろく警告も読まず、enterを押して再起動。
ここまでは良かったが、次の再起動でインストール画面になっちゃた。
?????
どうやら、インストール直後の再起動の時にCDイメージをアンマウントしないといけないみたい。
VirtualBoxの 「デバイス」=>「CD/DVDデバイス」から、「CD/DVDデバイスのマウント解除」を選び、解除できたら「Enter」を押す。
これで、解決だ。
この状態だと、Windowsのプログラムの一部でしかない。
Guest Additionsのインストールをすると、ガラリ一変、すばらしい世界だ。
それで、Guest Additionsのインストールの手順。
VirtualBoxの「デバイス」より「Guest Additionsのインストール」を選びます。
次にGuest Additionsのイメージをマウントします。
今度は、Ubuntuの「場所」=>「VBOXADDTIONS...」 をクリックします。
開かれたウインドウの中の「autorun.sh」をダブルクリックして「端末内で実行」します。
パスワードを聞かれるので認証します。
Guest Additionsのイメージのアンマウントします。
終了後に仮想マシンを再起動すると、「Guest Additions」が有効になります。
このフルスクリーンモードは、実にいい。
Guest AdditionsはUbuntuをアップデートすると無効になるので、
再度Guest Additionsをインストールしないと、いけないみたい。

次に共有フォルダの設定。
Ubuntuを走らせる前のVirtualBoxの「デバイス」=>「共有フォルダ」から共有フォルダの制作。
共有フォルダは、c:\VBoxShareとしました。
一応、これで話を進めます。
この時、自動マウントを選択。
Ubuntuを走らせます。
「システム」=>「システム管理」=>「グループとユーザー」で「ユーザー設定」に行く。
「グループ管理」をクリック。
vboxsfのプロパティでユーザーの名前をチェック。
再起動。
とりあえず、/media/sfVBoxShare にアクセスできた。
このままでもOKです。

ネットワークに、つなげるのなら、
sudo nautilus
/media/sf_VBoxShareのプロパティの共有ファイルのタブを開く。
このファイルを共有する。をチェック。
共有を作成をクリック。
testparm を子プロセスとして起動できませんでした:
と、エラーが帰ってきた。
とりあえず、ターミナルに testparmとコマンドを入れてみた。
帰ってきた情報から、
sudo apt-get install samba-common-bin samba4-common-bin
再度、トライ。
nautilusが、落ちたので再び
sudo nautilus
今度、/media/sf_VBoxShareのフォルダのデザインが、変わった。
再起動。
ubuntuの「場所」=>「ネットワーク」をクリック。
何かが、変わった。
sf_VBoxShareが現れるまでクリック。
そんで、ネットワークに繋がった。
色々やっている内に
cd ~/.gvfs/sf_vboxshare@xxxxx
cd /media/sf_VBoxShare/
の、どちらかで共有ファイルにアクセスできる事がわかった。
と、こんな感じで迷子になりつつ辿り着きました。

<後日記>
nautilusのブックマーク機能を見つけて以来
ネットワークに繋げるのが面倒なので、
/media/sf_VBoxShare/
に直接いってます。
[PR]
by gaziya | 2011-01-15 23:02