--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2008/02/29

湯豆腐作った

参考:湯豆腐の修行をしていました

昆布がなくって、たまたま手元にあった粉の昆布だしを使ったけど、結構いける。今度はちゃんと昆布買って作ってみますかね。

2008/02/28

xml-rpc 経由での投稿研究

諦めると言ったものの、やはり改行は不便すぎる。投稿した後に <pre> のとこだけブラウザのエディタを使ってちまちま改行の修正をしないといけない。面倒すぎる。

そこでちょっと調べてみることに。

投稿データが通る道

以下の順序。

  1. ファイル(元データ)
  2. grep → シェルスクリプトの変数
  3. gauche の変数
  4. XML 電文
  5. fc2 側

それぞれのデータはどんなもんか

以下の元データで試す。

$ cat data
#foo
bar
baz

grep → シェルスクリプトの変数

a=`grep -v '^#' data`
echo "$a"

bar
baz

問題なし。

gauche の変数

さっきの a をそのまま gauche に渡し、print する。

(define (main args)
  (print (cadr args)))

bar
baz

問題なし。

XML 電文

さっきのやつを XML 電文化して fc2 に渡すわけだけど、その XML 電文ではどうなっているか。xsm のコードにちょいとprint 文を挟んで出力させる。

<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>metaWeblog.newPost</methodName>
<params>
<param><value><string>0</string></value></param>
<param><value><string>my_mail_address</string></value></param>
<param><value><string>my_password</string></value></param>
<param><value><struct>
<member>
<name>title</name><value><string>foo</string></value>
</member>
<member>
<name>description</name><value><string>bar
baz</string></value>
</member>
</struct></value></param>
<param><value><boolean>1</boolean></value></param>
</params>
</methodCall>

わかりにくいけど、bar と bazの間にはちゃんと改行が挟まってる。ということはここもOK。ちなみに本当は bar baz の間以外は一切改行がない。記事の体裁のため、手動で改行を加えた。

fc2 側

調べようがない。

やっぱこっちの問題か。どうしようもないなぁ。他に誰か同じようなことやってないのかなぁ。ダメだったらまた乗り換えようかなぁ。。。

2008/02/27

jd

一度画像を読み込むと、とんでもなく遅くなる。画像を表示するのも遅いし、キーボード操作のレスポンスもめちゃくちゃ悪くなる。

ちなみにデスクトップPCの頃からこういう症状はあった。ノートPCではそれがより顕著になった。バグかねぇ。

2008/02/27

改行諦めた

通常の文章は大体 <p> で区切るからいいとして、<pre> が困るなぁ・・・。

2008/02/27

改行のテスト

hogehoge\nfugafuga

2008/02/27

ううう

<pre> の改行すら許さないのか。文字コード関係かな?

2008/02/27

投稿プログラムできた

調べたらなんじゃなかった。下に投稿してる3つの投稿テストはプログラムのもの。面倒だから消さない。

改行のテストがうまくいってないのは、単純に html タグを使ってないから。タグ使えばたぶんうまくいく。ただ、タグをいちいち書くのも面倒なので、その辺は追って機能追加していこう。

スクリプトは gauche で書いた。ただの xmlrpc クライアントでなんの面白みもないプログラムなんだけど、せっかくだから晒す。xmlrpc モジュールはデフォルトのモジュール群にはなく、ネットから探してダウンロードした。感謝感謝。

#!/usr/bin/env gosh
(use rfc.uri)
(use xsm.xml-rpc.client)

(define host "blog.fc2.com")
(define path "/xmlrpc.php")
(define port 80)

(define blog-id "0")
(define user "your_mail_address")
(define pass "your_password")

; make-xml-rpc-client を server に束縛するのは、
; このプログラム自体が server の client になっているため(?)
(define (main args)
  (let ((server (make-xml-rpc-client
                  (uri-compose :scheme "http" :host host
                                 :port port :path path))))
    (call server
          "metaWeblog.newPost"
          blog-id
          user
          pass
          (hash-table 'eq?
                      (cons 'title (title args))
                      (cons 'description (description args)))
          #t)))
(define (title args)
  (cadr args))

(define (description args)
  (caddr args))

hash-table は初めて触った。やっぱあるんだね。

xmlrpc モジュールは、xsm というものを使用した。サンプルは用意されてるし、インストールは簡単だし、ソースも短めだし、かなりお手軽。

これで晴れて、コンソール/vim からブログの投稿ができるってもんです。ヤッター。

参考URL

2008/02/26

てすてす

改行のテストああいいううええああああ

2008/02/26

てすてす

もういっちょテスト投稿

2008/02/26

fc2 ブログ

管理画面以外からの投稿口ってないのかな。

記事を書くのに、いちいちブラウザから管理画面開いて、狭くて使いにくいテキストエリアで記事書いてっていう作業が億劫。

2008/02/25

別れ

初めて体験したけども、ここまで辛いとは思いもしなかったぞばか!一日中半泣きじゃねーか!

弱音言う資格なんてないけども、こんなインターネッツの隅っこでぐらい許してくれたまへ・・。

2008/02/20

lambda

予定より全然進んでないけど、SICP をちびちび読み始めてようやく図形言語が終わりそうなところ。

図形の基本となるペインタオブジェクトが lambda で説明がつくということに感動を覚えた。lambda すごい。

さらに3章の最初のほうを先読みしてみると、lambda に状態変数が。

色々できるけど、lambda の仕様は1つで、値を受け取って、値を返すということだけ。これだけ仕様の小さな仕組みなのに、こんなに応用が効くことに美しさを感じる。

gentoo といい scheme といい、最近ミニマリズム脳になりつつあるな。

2008/02/20

cmus

っていうコンソールで動くオーディオプレイヤーを発見した。

ざっと使った感じでは、これで十分だなと思える出来。もちろん全部キーボードから操作する。マウスは一切使わない。というか使えない。

ただし、 man ページ見て 1-7 で画面を切替るというキーバインドを知っておかないと、何も出来ない。逆に言えば man ページさえ見れば大体の操作はできるようになる。俺はなった。

操作方法は man ページに加えて 7 画面にも列挙されてる。個人的にはこっちが見やすい。

プレイリストも作れるらしい。作ったことないけど、~/.cmus/playlist.pl っていうファイルを参照する画面があった。pl って。perl かよ。

今までオーディオ再生には Rhythmbox とか. totem 使ってたんだけど、GNOME 系アプリケーション立ち上げると firefox が落ちてたんだよね。

あと GNOME 系アプリケーションを一度立ち上げると、それ以後立ち上げる全ての GUI アプリケーションのルック&フィールが GNOME っぽくなったり、音量ボタンが使えるようになったり、ブラックボックスでなんとなく気持ち悪かった。音量ボタンは便利だけどさ。

というわけで、なかなかよいよ。cmus。

2008/02/20

gentoo

面白そうだなぁ。ubuntu のぬるま湯っぷりもいいけど、gentoo みたいにいじくり倒せるやつにも惹かれる。暇見つけてインストールしてみるか。

home のバックアップだけ作って、ubuntu をごっそり消そうかね。

2008/02/16

ポインタ入門 for Java プログラマ

c のポインタを理解できない Java プログラマへ

俺もその中の一人だった。ポインタの仕組みは分かるんだけど、 c のポインタが理解できないというか。演算子がごちゃごちゃしてて分かりにくい。

そこで Java でポインタの真似をすることでこれを打開してみようと思いついた。 ポインタの仕組みさえ分かっておけば、基本的なところは簡単に真似できる。

ではまず、簡単な c のサンプルを見てみる。

 #include <stdio.h>

void proc(int a) {
    a += 10;
}

void procp(int *ap) {
    *ap += 10;
}

int main() {

    int a = 1;
    int *ap = &a;

    printf("a before : %d\n", a);
    proc(a);
    printf("a after  : %d\n", a);

    printf("-----------\n");

    printf("ap before: %d\n", *ap);
    procp(ap);
    printf("ap after : %d\n", *ap);
}

値渡しと参照渡しの違いを見せるサンプルである。ちなみにこのサンプルでは 引数をそのままいじっているが、これはよろしくない。真似するべからず。

では、Java でこれを真似してみる。

実は Java はプリミティブ型以外、全てポインタである。つまりぜーんぶ参照で、関数に受け渡したりなんなりするのも、プリミティブ型以外は全部参照渡しなのだ。これを利用すればいい。 もっとも、プリミティブ型のポインタだけを考慮するなら Integer とかのラッパークラスを 使えばいいが、もうちょっとユニバーサルな Pointer クラスを作る。

 public class Pointer<V> {

    public V value;

    public Pointer(V initial) {
        value = initial;
    }

}

指定された型の値を保持するだけのクラスである。

次に、C のサンプルを真似る Java のサンプルを作る。

 public class PointerSample {

    public static void main(String[] args) {
        int a = 1;
        Pointer<Integer> ap = new Pointer<Integer>(a);

        System.out.printf("a before : %d%n", a);
        proc(a);
        System.out.printf("a after  : %d%n", a);

        System.out.println("---------");

        System.out.printf("ap before: %d%n", ap.value);
        proc(ap);
        System.out.printf("ap after : %d%n", ap.value);
    }

    static void proc(int a) {
        a += 10;
    }

    static void proc(Pointer<Integer> ap) {
        ap.value += 10;
    }

}

結果は同じになる。a のほうは値が変わらず、ap のほうは値が変わる。 どちらの ap も内部の値が変わっているだけで、参照自体は変わって いないということに注意すれば、ポインタってなんなのさってことは分かるかと。

ただし次のようにはならないので、やはり厳密には真似できていない。

// さっきの c コードの続き
printf("a after  :%d\n", a); // 11 になる

これは ap が a のアドレスを直接指しているということを表す。 一方 Java の Pointer はそうではない。Pointer が new されてるから、そもそも元の a とは違うアドレスになってるということ。だから Java ではこの c コードのようなことにはならない。

真似しようとするなら、次のような感じ?当然実現できない。

int a = 1;
Pointer<Integer> ap = a.getAddress();

Pointer を a の参照として new Pointerするのではなく、a のアドレスを直接受け取る。

ポインタのポインタも c の構文のせいでややこしくなってるだけで、 Java で見れば一発で分かる。

Object o = new Object();
Pointer<Object> op = new Pointer<Object>(o);
Pointer<Pointer<Object>> opp = new Pointer<Pointer<Object>>(op);

以上の通り、ポインタってのは実は全然難しくない。難しいと感じるのは c の 構文のせいでしょう。要は参照なのだよ参照。

ちなみに、ここで作った Pointer クラスの似たようなものとして、java.lang.ref.Reference ってクラスが Java の標準APIにある。使ったことないけど。いらんメソッドがあっていやだったから、Pointer クラスを作ってみた。

2008/02/15

ubuntu に xmonad の導入まとめ

インストール

最初は Haskell の処理系である ghc のインストール。これがないと何も始まらない。

apt-get install からじゃなくて、本家サイトから落として インストールする。apt-get install からインストールする ubuntu パッケージの ghc は System.FilePath という標準 モジュールが抜けているという欠陥があるため、xmonad の configure に失敗する。

  1. ここから ghc をダウンロードする。ubuntu の場合、unknown なんとかってやつでいい。
  2. sudo ./configure
  3. sudo make install
  4. ghc --version で 6.8 っぽく出力されればOK

次は libx11-dev のインストール。

  1. sudo apt-get install libx11-dev

次は xmonad に必要な Haskell のパッケージをインストール する。

  1. ここから X11-1.4.1.tar.gz をダウンロード する。
  2. sudo runhaskell Setup.hs configure
  3. sudo runhaskell Setup.hs build
  4. sudo runhaskell Setup.hs install
  5. ghc-pkg list X11 でそれっぽく出力されればOK

最後に xmonad のインストール。

  1. ここから xmonad-0.6.tar.gz をダウンロード する
  2. runhaskell Setup.lhs configure --user --prefix=$HOME
  3. runhaskell Setup.lhs build
  4. runhaskell Setup.lhs install --user

最低限の設定

ubuntu を使っていると、alt キーと他のモディファイアキーを 同時押ししたときの挙動が GNOME によって妙に設定されているせいで、 必要になったときに思ったように動作してくれない。xmonad もその 必要になったときの1つで、デフォルトのモディファイアキーが alt キーにになっている。GNOME の設定を変える手もあるが、結構めんど くさかったので、別のモディファイアキーをでっち上げることで解決 する。

無変換キーがあるキーボードなら、その辺がお手頃。xev で keycode を調べて、xmodmap に mod3 として追加する。これの細かい手順は省略 する。ぐぐればすぐ分かると思う。

無変換を mod3 に割り当てたら、次はそれを xmonad の mod キー にするための設定を書く。$HOME/.xmonad/xmonad.hs に、

import XMonad
import System.IO

main = do
    xmonad $ defaultConfig { modMask = mod3Mask }

と書き、保存する。これで mod3 キーが xmonad のショートカット駆動 キーになる。emacs でいうところの、ctrl キーのような存在になるのだ。無変換キーが。

次に、アプリケーションを起動できるようにするため、キーボード 指向ランチャの dmenu をインストールする。

  1. sudo apt-get install dmenu

xmonad ではデフォルトでこいつを起動するためのショートカットキー が設定されているほど、xmonad との親和性が高い。使えば分かる。

もう1つ、ログインしたら xmonad が立ち上がるようにする。 $HOME/.xsession の最後に、

xmonad

の行を追加する。$HOME/.xsession ファイルがないならこの1行だけの ファイルを作る。

起動する

以上の設定を行って、ログアウト→ログインしてみる。

すると何もない画面が待っているはず。そいつが xmonad です。 待っていても何も始まらないし、とりあえず mod-p と入力してみると、 画面上部になんか出る。それが dmenu で、そいつからアプリケー ション を起動する。firefox とか gnome-terminal とか打ってみるといい。

後はお好きなように

firefox と端末さえ立ち上がれば後はなんとかできるでしょう。色々 調べていじってみるとよいよ。

困った点

ubuntu が勝手にやってくれていたと思っていたこと(例えば X61 だと音量キーを 有効にするとか) は、大抵 GNOME が勝手にやってくれていたことで、 xmonad を使い始めるとこれがなくなってしまう。これらは全て、端末から自分で呼び出す とか、スクリプトが用意されてるならそれを探し出して自動起動するように 設定したりしないといけない。

GNOME が勝手にやってるとはいえ、絶対どっかにそのスクリプトはあるはず だから、それさえ見つければいいんだけどね。

俺はこの辺がまだまだ充実してなくって、もっと詳しくなりたいなぁと 思ってるとこです。無線LAN に接続するのもネットワークアプレットみたいな やつからしかやったことなくって、コマンドから接続するのに四苦八苦したり。

まとめ

xmonad さいこー!

余談

久々に長い記事書いてたのに、半分くらいのとこでブラウザ落ちやがった。。

参考

  • 公式サイト : users wiki へのリンクやら、親和性の高いアプリケーションのサイトへのリンクやら、色々ある。
  • xmonad.org - man page : 大まかな使い方はここみりゃ分かる。

2008/02/13

にでら解禁

水曜ってことでやってきた。試験勉強やってる某べたなま君を後目に。

解禁された曲とりあえず全部やってきた。Time to Air 穴以外は全部クリアかな?たぶん。大体ハードで埋めた。一曲ノマゲで埋めたっけな。マチコ穴もハードしたけど、正規はちょっとむずいかも。右手は鏡推奨。

穴少年は乱ならクリアできそーな譜面。二重階段の気持ち悪い期待してたけど、むんちゃのラストっぽい皿譜面だった。

あとは色々スコア更新したり、7段とったりとかして終わった。

当分は level 9 のハード埋めと地力上げ、level 10 埋めになりますかね。終わるころには8段とれるんじゃねーかなーと思ってる。

2008/02/13

ニコニコ

ニコニコにきまぐれ検索なるものがあることに今日気づいた。

人気ランキング見てもあんまり見たいと思うものないし、かといって自分で検索するほど目的持ってニコ動見に行ってるわけでもないし。これは使えるかもわからんね。

2008/02/09

bash のヒアドキュメント

ちょっとはまった。上がダメで下が正しい。

function hoge () {
    cat << EOS
    foo
    bar
    EOS
}
function hoge () {
cat << EOS
    foo
    bar
EOS
}

原因は、終点文字列のインデントまで解釈しちゃうせい。だから以下でもいい。

function hoge () {
    cat << EOS
    foo
    bar
EOS
}

もちろん、foo bar のインデントも文字列として解釈され、表示に影響を与える。html の pre に近い。

教訓としては、ヒアドキュメント使うときはインデント使うなと。

2008/02/05

ディスプレイの輝度を下げる

X61 には輝度 Up/Down ボタン(fn+Home/fn+End) がある。

xmonad 使い始める前、つまり Gnome 使ってたころには確かこのボタンが有効だったはずなんだけど、xmonad 使い始めてから効かなくなった。どうしよう。

と流暢なことは言ってられなくて。眩しくてしょーがないんだよ。端末は黒背景だからいいんだけど、web はそういうわけにもいかない。なのでどうにか画面の輝度を下げる。

/proc/acpi/ibm/brightness をどうにかする方法と、xbacklight を使う方法の2つを見つけた。/proc/acpi/ibm/brightness はファイル汚す感じがなんとなくいやだったから、xbacklight を導入。

導入は apt-get で。

sudo apt-get install xbacklight

使い方は --help 見ればわかる。輝度の上げ下げだけ紹介しておくと(というか俺はこれしか知らないんだけど)、

xbacklight +10% # 10% 上げる
xbacklight -10% # 10% 下げる

最近やたらとバッテリの減りが早かったのは、バッテリ駆動のくせに輝度が高かったせいかな?

あと fn 駆動のキーとか、音量調節ボタンとかの特殊なキーについては、Gnome がごにょごにょしてる。たぶん。例えば、音量ボタンは rhythmbox を起動すると有効になる。ちょっと調べてみようかな。

2008/02/05

Vim いじり

基本的に用意されたものにはあまり文句を言わないタチ(のつもり)な俺だけど、最近 Vim 使っててちょっとしたことが面倒だなと感じてきた。

本当にちょっとしたことで、例えば

:w
:!gosh %

って入力するのが面倒とかそういうレベル。

当然この程度は、ちょこっと自前の Vim スクリプトを書けばいい。

function! SaveAndEval()
  w %
  exe "!gosh ".expand("%")
endfunction

nmap  :call SaveAndEval()

てな感じのを ~/.vim/ftplugin/scheme.vim とかに書いておけば、先の

:w
:!gosh %

をスペースキー1つで実行できる。

で、こういうのやり始めて気づいたんだけど、開発環境をこういった感じでいじるのって結構楽しい。言ってしまえば自分のやりたいようにできちゃうわけだ。

Vim の場合、基本的に Vim スクリプトでこれを行うわけなんだけど、文法からして拒絶反応起こしてしまう。Python ならなんとかやれそうだけど、コンパイルし直すのはなんか面倒だし。この際だし片手間に Vim スクリプトのお勉強でもやっちゃおうかしら。。。

2008/02/04

X61 は Ubuntu 8.04 から本気出すかも

要は kernel 2.6.24 なら X.org の intel ドライバもちゃんと動いて、Ubuntu の次期バージョン Ubuntu 8.04 HardyHeron は 2.6.24 を搭載するかも、というお話し。

xmonad + Xinerama 早くやりたいなぁ。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。