11月15日の七五三の日の朝に誕生。
病院の方針なのか、夫が立ち会う事は前提になっていたので、生まれた直後の子供を見ることが出来た。
病院に行ったのは、金曜日の朝なので、だいたい72時間で生まれたことに。
10分間隔で痛くなったら来いとの指示だったそうだけど、今思えば早すぎた感はあり。
初めてのことなので、痛いのレベルが分からなかったというのが大きいけど、とりあえず「痛い、痛い」言っているレベルではまだ先は長いです。
最終的には基本的に痛くてしゃべれないし、言えたとしても絞り出すようにしかしゃべれない。
(中の人を含めて)個人差も大きいだろうから、一概には言えないのだろうけど。
外から見る限りでは、分娩前の陣痛の方が分娩中より痛そうでした。もしかしたら分娩中は痛みどころでは無いのかな。
立ち会うとはいえ、何か出来るわけでもなく、汗を拭いて、うちわで扇ぐだけ。基本的に夫は何も出来ないわけです。
それでも、Twitterでリアルタイムで実況出来るほど余裕があるわけでもなく、途中途中の空き時間に友人、知人に向けて短くツイートする程度。他にも実家にメールとかもしてたしね。
分娩中にTwitterで実況したい人は、妻、助産師、看護師、医師、(もしかしたら子供も)からの白い目に耐えるだけの精神力を鍛えてください。
それにしても、赤ちゃんは文句無しにかわいい。
病院内で他の赤ちゃんを見かける機会は時々あって、かわいいなとは思っていたけど、自分の子はそれとは別の感覚としてかわいいと感じる。
客観的に見れば、生まれたての赤ちゃんは基本的にほわほわしていて、大人以上に個人差がないはずなのに。
今日は出てくるのに疲れたのか、あまり泣いたりしなかったけど(鼻から羊水を吸い出すためにチューブを突っ込まれると流石に泣いてた)、明日からは元気に泣くんだろうな。
月曜日, 11月 15, 2010
木曜日, 11月 11, 2010
水曜日, 11月 10, 2010
gocode入れてみた
「VimでGoがautocomplete出来るgocodeがいい感じ」を見て、gocodeを入れてみた。
ビルドやインストールについては、gocodeのサイトに書いてあって、特に引っかかるところはない。
ただ、その説明だけでは、gvimでは動作しなかったので、gvimrcに以下の行を追加した。
ビルドやインストールについては、gocodeのサイトに書いてあって、特に引っかかるところはない。
ただ、その説明だけでは、gvimでは動作しなかったので、gvimrcに以下の行を追加した。
let $GOBIN="$HOME/bin/go/"
let $GOROOT="$HOME/src/go/"
let $PATH="$PATH:$HOME
/bin/go"
火曜日, 11月 09, 2010
Gordonさまがマウスカーソルにくっつく
多少書き直してみた。ついでに分身の術ではなく、マウスカーソルにくっつくように動くようにした。
コールバックな部分は若干やっつけだけど、基本的にはこんな感じだと思う。
event.goは綺麗というかすっきりして、ここまで来たらファイルを分離する意味が無い。
その分、main.goのhandleMouseEventがやたら汚い。
interface{}を具体的な型に落とす方法はswitchしかないのかな。
(一度投降後、何度かコードを綺麗にしてます)
main.go
event.go
gordon.go
コールバックな部分は若干やっつけだけど、基本的にはこんな感じだと思う。
event.goは綺麗というかすっきりして、ここまで来たらファイルを分離する意味が無い。
その分、main.goのhandleMouseEventがやたら汚い。
interface{}を具体的な型に落とす方法はswitchしかないのかな。
(一度投降後、何度かコードを綺麗にしてます)
main.go
package main
import (
"fmt"
"exp/draw"
"exp/draw/x11"
"image"
"./event"
"./gordon"
)
func handleMouseEvent(event interface{}, args ...interface{}) {
switch e := event.(type) {
case draw.MouseEvent:
{
me := draw.MouseEvent(e)
switch win := args[0].(type) {
case draw.Window:
{
win = draw.Window(win)
switch char := args[1].(type) {
case gordon.Character:
{
char = gordon.Character(char)
fmt.Printf(
"MouseEvent: Button= %d, Loc= %v\n",
me.Buttons, me.Loc)
draw.Draw(win.Screen(), char.Canon(), char.Mask(), image.ZP)
char.Position(me.Loc.X, me.Loc.Y)
draw.Draw(win.Screen(), char.Canon(), char, image.ZP)
win.FlushImage()
}
}
}
}
}
}
}
func main() {
gordon1, e := gordon.NewGordon(image.Point{X: 0, Y: 0})
if e != nil {
fmt.Printf("Error %v\n", e)
return
}
win, e := x11.NewWindow()
if e != nil {
fmt.Printf("Error %v\n", e)
return
}
eventChan := win.EventChan()
mouseCallBack := event.CallBack(handleMouseEvent)
sync := make(<-chan bool)
go event.HandleCallBack(eventChan, mouseCallBack, win, gordon1)
<-sync
}
event.go
package event
type CallBack func(event interface{}, args ...interface{})
func HandleCallBack(eventChan <-chan interface{}, fun CallBack, args ...interface{}) {
for {
event := <-eventChan
go fun(event, args...)
}
}
gordon.go
package gordon
import (
"bufio"
"image"
"image/png"
"os"
)
os.DevNull
type Character interface {
image.Image
Canon() image.Rectangle
Mask() image.Image
Position(x, y int)
}
type Gordon struct {
image.Image
Rect image.Rectangle
maskImage image.Image
}
func (g *Gordon) Position(x, y int) {
r := g.Bounds()
g.Rect = image.Rect(
x, y,
x+r.Max.X, y+r.Max.Y)
}
func (g *Gordon) Canon() image.Rectangle {
return g.Rect.Canon()
}
func (g *Gordon) Mask() image.Image {
return g.maskImage
}
func NewGordon(point image.Point) (gordon *Gordon, e os.Error) {
gordon = new(Gordon)
img, e := loadGordon()
if e != nil {
return nil, e
}
gordon.Image = img
gordon.Position(point.X, point.Y)
gordon.maskImage = image.NewGray(img.Bounds().Max.X, img.Bounds().Max.Y)
return gordon, e
}
func loadGordon() (image.Image, os.Error) {
file, e := os.Open("./Gordon.png", os.O_RDONLY, 0666)
if e != nil {
return nil, e
}
read := bufio.NewReader(file)
icon, e := png.Decode(read)
if e != nil {
return nil, e
}
return icon, nil
}
月曜日, 11月 08, 2010
Gordonさまと遊んでみて
とりあえず、自分で見ても滅茶苦茶なソースだと思う。
Interfaceなんて使ってみたかっただけで、無理やり過ぎる。
そもそも書いてある場所がどう考えてもおかしい。
コールバック的なものは関数型を渡してやればいいんだろうけど、何故かうまくいかなかった。
基本的な文法で間違っている可能性大。
そんな適当ながらも、書いてみてのGoの感想。
1. interfaceにFieldを宣言出来ないのは若干不便
Javaで言えばpublicなFieldの値を取りたいだけなのに、関数が必要になるのは不便。
要するにsetter/getterもインターフェースに書く必要があるわけで。
とはいえinterfaceてのはそういうものなのかも
2. ifの括弧が無いのは楽
慣れると他の言語で括弧を書くのを忘れる。
3. 型の後置は慣れると気にならない。
たまに間違うけど
4. 出来上がるバイナリがでかい
パソコンで動かしていると大して気にならないけど。もっと貧弱な環境だと大変かも。
CにもPythonにも似ていないけど、慣れれば便利な予感。
Interfaceなんて使ってみたかっただけで、無理やり過ぎる。
そもそも書いてある場所がどう考えてもおかしい。
コールバック的なものは関数型を渡してやればいいんだろうけど、何故かうまくいかなかった。
基本的な文法で間違っている可能性大。
そんな適当ながらも、書いてみてのGoの感想。
1. interfaceにFieldを宣言出来ないのは若干不便
Javaで言えばpublicなFieldの値を取りたいだけなのに、関数が必要になるのは不便。
要するにsetter/getterもインターフェースに書く必要があるわけで。
とはいえinterfaceてのはそういうものなのかも
2. ifの括弧が無いのは楽
慣れると他の言語で括弧を書くのを忘れる。
3. 型の後置は慣れると気にならない。
たまに間違うけど
4. 出来上がるバイナリがでかい
パソコンで動かしていると大して気にならないけど。もっと貧弱な環境だと大変かも。
CにもPythonにも似ていないけど、慣れれば便利な予感。
日曜日, 11月 07, 2010
GoでGordonさまと遊ぶ
Go言語のマスコットのGordonさまは、みんなから気持ち悪いと言われていますが、じっと見ていると、かわいいところが無く無くない気がしてきました。
なので、ちょっとコードが整理されていませんが、GoでGordonさまをいっぱい並べられるものを作ってみました。
コールバックな関数はどう書けばいいんだろう。
main.go
gordon.go
event.go
実行結果
なので、ちょっとコードが整理されていませんが、GoでGordonさまをいっぱい並べられるものを作ってみました。
コールバックな関数はどう書けばいいんだろう。
main.go
package main
import (
"fmt"
"exp/draw/x11"
"image"
"./event"
"./gordon"
)
func main() {
gordon1, e := gordon.NewGordon(image.Point{X: 0, Y: 0})
if e != nil {
fmt.Printf("Error %v\n", e)
return
}
win, e := x11.NewWindow()
if e != nil {
fmt.Printf("Error %v\n", e)
return
}
eventChan := win.EventChan()
sync := make(<-chan bool)
go event.Handle(eventChan, win, gordon1)
<-sync
}
gordon.go
package gordon
import (
"bufio"
"image"
"image/png"
"os"
)
type Gordon struct {
image.Image
Rect image.Rectangle
}
func (g *Gordon) Position(x, y int) {
r := g.Bounds()
g.Rect = image.Rect(
x, y,
x+r.Max.X, y+r.Max.Y)
}
func (g *Gordon) Canon() image.Rectangle {
return g.Rect.Canon()
}
func NewGordon(point image.Point) (gordon *Gordon, e os.Error) {
gordon = new(Gordon)
img, e := loadGordon()
if e != nil {
return nil, e
}
gordon.Image = img
gordon.Position(point.X, point.Y)
return gordon, e
}
func loadGordon() (image.Image, os.Error) {
file, e := os.Open("./Gordon.png", os.O_RDONLY, 0666)
if e != nil {
return nil, e
}
read := bufio.NewReader(file)
icon, e := png.Decode(read)
if e != nil {
return nil, e
}
return icon, nil
}
event.go
package event
import (
"exp/draw"
"fmt"
"image"
)
type Character interface {
image.Image
Canon() image.Rectangle
Position(x, y int)
}
func Handle(eventChan <-chan interface{}, win draw.Window, char Character) {
for {
event := <-eventChan
switch e := event.(type) {
case draw.MouseEvent:
{
me := MouseEvent(e)
go me.handleMouseEvent(win.Screen(), char)
}
case draw.KeyEvent:
{
ke := KeyEvent(e)
go ke.handleKeyEvent(win.Screen(), char)
}
}
win.FlushImage()
}
}
type MouseEvent draw.MouseEvent
type KeyEvent draw.KeyEvent
func (me *MouseEvent) handleMouseEvent(screen draw.Image, char Character) {
fmt.Printf("MouseEvent: Button= %d, Loc= %v : %v\n", me.Buttons, me.Loc, char)
char.Position(me.Loc.X, me.Loc.Y)
draw.Draw(screen, char.Canon(), char, image.ZP)
}
func (ke *KeyEvent) handleKeyEvent(screen draw.Image, char Character) {
fmt.Printf("KeyEvent: Key= %d\n", ke.Key)
}
実行結果

日曜日, 10月 17, 2010
Ubuntu 10.10 型破りなミーアキャット
今回は大した変更はなし。
インストーラが変わって、アカウント設定なんかはインストール(ファイルのコピー)中に行えるようになったのが目立つ程度。
Unityが入るネットブックの方が今回は派手な印象。
個人的にUbuntuのアップデートは定期バックアップを兼ねているのでやったけど、正直いって、無理に上げる必要はなさそう。
最近デスクトップ版は派手な変更は無いけど、次回はGnome3が入るから期待したいところ。
その分トラブルも多そうだけど。
インストーラが変わって、アカウント設定なんかはインストール(ファイルのコピー)中に行えるようになったのが目立つ程度。
Unityが入るネットブックの方が今回は派手な印象。
個人的にUbuntuのアップデートは定期バックアップを兼ねているのでやったけど、正直いって、無理に上げる必要はなさそう。
最近デスクトップ版は派手な変更は無いけど、次回はGnome3が入るから期待したいところ。
その分トラブルも多そうだけど。
登録:
投稿 (Atom)