2009 年 3 月 29 日 | カテゴリー: 買った本

4832277863.01.MZZZZZZZ.jpg4946553193.01.MZZZZZZZ.jpg0470233990.01.MZZZZZZZ.jpg

トランジスタティーセットは里好さんの秋葉を舞台にした漫画。

インストラクショナルデザインはきしださんが読んどけということを仰っていたので、そうか、じゃあ読まないとだ。と即 amazon に注文するなど。

2009-03-17 – きしだのはてな プログラマの教育のための本

ということで、教育のための本。まずは教えるというのがどういうことかという本。
仕事として誰かに何かを教えるのなら、必ず目を通してほしいと思う本。この本じゃなくても、インストラクショナルデザインについて扱ってる本は読んでおくべきだと思う。

最後が Silberschatz 本「Operating System Concepts」第8版のペーパーバック。
ハードカバーは 18k で元が取れる気がしないので敬遠していたのですが、今年3月にペーパーバックが出るとのことで注文したのが届いたのですよ。
それでも 7k 超えてますけどね;
ちなみにペーパーバックっていうわりに結構いい紙使ってる気がします。
# 比較対象は Scala 本。
引用部や見出し、図のカラーは薄い緑でとても綺麗です。

2009 年 3 月 26 日 | カテゴリー: 日記

2009032601.png

先日 MarsEdit のおかげで投稿生活が少し改善されたことを書きました。
Apribase » MarsEdit で WordPress に投稿したらサクサク (バグ対応済み)

そのときに画像のアップが割とレガシーな方法を使っていて微妙といったんですが、Mac 環境ではそれに拍車をかけてます。

Windows なら WinSCP, Linux なら Gnome ならマウントしてくれるし KDE なら fish で Konqueror がつないでくれる SCP GUI。
Mac で何つかったらいいんですか。フグしかないんですか。
とか思いながらコマンドラインで scp を叩く or Samba でつないでいる Linux 側から送信するとかのひどい方法を使ってました。

んで、そういえば sshfs って Mac のが有名じゃなかったっけと思いだし。
MacFUSE は既に入れてあるので SSHFS をインストール。

index:~ kei$ ll /opt/fuse/
合計 724
lrwxr-xr-x 1 root admin     20 2009-03-26 04:13 sshfs -> sshfs-static-leopard*
-rwxr-xr-x 1 root admin    108 2009-03-26 04:33 sshfs-apribase.sh*
-rwxr-xr-x 1 root admin 732780 2009-03-26 04:13 sshfs-static-leopard*
index:~ kei$ 

/opt/fuse ディレクトリを作成してファイルを展開。
シンボリックリンクを張って、/etc/bashrc に /opt/fuse を PATH に追加するようにしました。

sshfs-apribase.sh っていうのは、オプションを覚えられなかったのでとりあえずシェルスクリプトに書いておいただけです。エイリアス切ってもいいんですが、後で考えます。

#!/bin/sh
sshfs apribase@apribase.net:/home/apribase $HOME/Apribase -oauto_cache,reconnect,volname=Apribase

あとはマウントしてあるのでローカルディスクと同じように画像保存先に選択可能になっているから、編集した画像を直接保存する形でアップ。

Flickr などのサービスに丸投げするまでのつなぎですけどね。

2009 年 3 月 25 日 | カテゴリー: プログラム

2009032501.png

「Haskell ユーザのための〜」とかの関数型言語としての C++ とかは読んでて楽しいんですが、ああいうのじゃないです。
自分が C++ を使っているときに面倒に感じた恥ずかしい実体験録ですよい。

index003/Book.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
 * File:   Book.hpp
 * Author: kei
 *
 * Created on 2009/03/25
 */
 
#ifndef _BOOK_HPP
#define _BOOK_HPP
 
#include <string>
 
class Book {
public:
    Book(const std::string& title, const std::string& author);
    ~Book();
    const std::string& title();
    const std::string& author();
    const std::string toString();
private:
    std::string title_;
    std::string author_;
};
 
#endif /* _BOOK_HPP */

引数に参照って明示しないとコピーしてきますよこの子。
あと const にしておかないと平気で破壊してきます。
返り値も const 参照にしておかないと、コピーを返してこようとするお嬢さま(富豪的な意味で)。

index003/Book.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/*
 * File:   Book.cpp
 * Author: kei
 *
 * Created on 2009/03/25
 */
 
#include <sstream>
#include "Book.hpp"
 
/**
 * コンストラクタです。
 * @param title 本のタイトル
 * @param author 本の著者名
 */
Book::Book(const std::string& title, const std::string& author) {
    this->title_ = title;
    this->author_ = author;
}
 
/**
 * デストラクタです。
 */
Book::~Book() {
}
 
/**
 * 本のタイトルを返します。
 * @return タイトル
 */
const std::string& Book::title() {
    return title_;
}
 
/**
 * 本の著者名を返します。
 * @return 著者名
 */
const std::string& Book::author() {
    return author_;
}
 
/**
 * 本インスタンスの文字列表現を返します。
 * 内部で生成した文字列のコピーを返します。
 * @return 文字列表現
 */
const std::string Book::toString() {
    std::stringstream stream;
    stream << "title: " << this->title_ << std::endl;
    stream << "author: " << this->author_ << std::endl;
    return stream.str();
}

内部で動的に生成したインスタンスを返したかったらコピーを返す、なんて考えるとメモリはもう限界よってことに。
this はポインタという罠。

index003/HelloSharedPtr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
 * File:   HelloSharedPtr.cpp
 * Author: kei
 *
 * Created on 2009/03/25
 */
 
#include <iostream>
#include <boost/shared_ptr.hpp>
#include "Book.hpp"
 
int main(int argc, char** argv) {
    // Book book("ここにタイトル", "ここに著者名"); // 変数宣言のつもりがコンストラクタが走る。
    // Book book = Book("ここにタイトル", "ここに著者名"); // コンストラクタが走ったうえにコピーが走る。
    // const Book& book = Book("ここにタイトル", "ここに著者名"); // コンストラクタが走った後コピーではなく参照を変数に入れる。
    // Book* book = new Book("ここにタイトル", "ここに著者名"); // 先頭アドレスが返る。スコープを抜けても領域は残る。
    const boost::shared_ptr<book>& book = boost::shared_ptr<book>(new Book("C++ のすごい本", "偉い人")); // ポインタを shared_ptr というコンテナに格納する。参照されなくなるとデリートされる。
    std::cout << book->toString() << std::endl; // ポインタを格納しているコンテナに対してだけど、アロー演算子で操作。
    return (EXIT_SUCCESS);
}

参照知らなきゃやってられないというのもあるけど、const boost::shared_ptr<Object>& が一番扱いやすく感じるかなあと。
ポインタの指し示す先(インスタンス)にメッセージを投げかける。そのアドレスが変わったら困るから const をつけるって意味で、Java の final みたいに考えられるのかなあと。

そんなことより見た目のが大事ですが。
宣言時にメモリが確保されてしまうので、const 参照で受け取るか shared_ptr で受け取るかするとギャップが少ないです。

ってことで未来の自分、C++ を教えることになったら、コンストラクタが走るタイミングと const 参照と boost::shared_ptr を最初に教えてあげてください(ぇー

2009 年 3 月 22 日 | カテゴリー: その他

2009032201.png

watermint.org » Blog Archive » WordPressのXML-RPC投稿でHTMLタグが消えるのはlibxml2のバグ

いつもブログの編集・投稿にはMarsEditというソフトを使っているんですが、最近、投稿するとHTMLタグがすべて消えてしまうという現象に悩まされていました。

岡崎さんの日記で MarsEdit なんて便利そうなフロントエンドがあるんだー、なんていう本題とずれたところに興味を持ってしまいました。

2.7 になってからモッサモサしません?

WordPress の標準フロントエンドが 2.7 系になってから、JavaScript がモッサモサで日記を書くモチベーションが保てなくなっていたのは結構困っていたんです。

実際使ってみたら、全然引っかかることがないだけでなく、画像はリンクを書いた時点でプレビューされたりコピーしようと思った文章が既にテキストフィールドに入っていたりと至れり尽くせり。

さくらインターネットの libxml2 は 2.7.2

うちもレンタルサーバ(さくらインターネット)なので、libxml2 の問題をどうにかしてからじゃないと手をだせないなーって思っていたんですが、ぐーぐる先生に聞いて答えが見つかるのは運がよかったです。

ちなみに phpinfo で十分なんですが、念のためヘッダーを確認。
/usr/local/include/libxml2/libxml/xmlversion.h

xml_parse( でパースする前に文字の入れ替え

WordPress patch for problamatic libxml2 version « HooFoo Blog

wordpress/wp-admin/import/blogger.php

// xmllib 2.7.0 -2.7.2 stripping leading angle brackets bug patch
if(LIBXML_DOTTED_VERSION == '2.7.0' ||
   LIBXML_DOTTED_VERSION == '2.7.1' ||
   LIBXML_DOTTED_VERSION == '2.7.2'
) {
    $xml = str_replace('&amp;lt;', '&amp;#60;', $xml);
    $xml = str_replace('&amp;gt;', '&amp;#62;', $xml);
    $xml = str_replace('&amp;amp;', '&amp;#38;', $xml);
}
// end Fix
xml_parse($parser, $xml);

wordpress/wp-includes/class-IXR.php

// xmllib 2.7.0 -2.7.2 stripping leading angle brackets bug patch
if(LIBXML_DOTTED_VERSION == '2.7.0' ||
   LIBXML_DOTTED_VERSION == '2.7.1' ||
   LIBXML_DOTTED_VERSION == '2.7.2'
) {
    $this->message = str_replace('&amp;lt;', '&amp;#60;', $this->message);
    $this->message = str_replace('&amp;gt;', '&amp;#62;', $this->message);
    $this->message = str_replace('&amp;amp;', '&amp;#38;', $this->message);
}
// end Fix
 if (!xml_parse($this->_parser, $this->message)) {

wordpress/wp-includes/rss.php

// xmllib 2.7.0 -2.7.2 stripping leading angle brackets bug patch
if(LIBXML_DOTTED_VERSION == '2.7.0' ||
   LIBXML_DOTTED_VERSION == '2.7.1' ||
   LIBXML_DOTTED_VERSION == '2.7.2'
) {
    $source = str_replace('&amp;lt;', '&amp;#60;', $source);
    $source = str_replace('&amp;gt;', '&amp;#62;', $source);
    $source = str_replace('&amp;amp;', '&amp;#38;', $source);
}
// end Fix
$status = xml_parse( $this->parser, $source );

ようするにパースする前に文字列をちょこっと変えておいてあげようという回避策でいけるみたいです。
日本語の記事でいくつか、「$xml の変更を3ファイルに挿入」するかんじで紹介してあったんですけど、違いますよね・・・?
各ファイルの変数名は違うと思うんですが。揚げ足を取りたいわけではないので気を悪くされたらごめんなさい。
# 「まちがったことは blog に書くな派」とかじゃないです。

実験投稿

この日記が無事に投稿できたら、バグ回避できたってことですよね。
<pre><code></code></pre> といった具合にタグも埋め込んでますし。
# 成功しました。

画像のアップも結構手間がかかっているので (scp でアップして lightbox タグを自前でつけている)、MarsEdit + Flickr がおいしく頂けそうなら考えてみようー。

コメントは受け付けていません。
2009 年 3 月 21 日 | カテゴリー: 日記

2009032101.jpg

高架線工事をしてるだけでなく、駅前開発ということで高級(多分)マンションを始め様々なビルが建ったりし始めている小金井市です。
その中でイトーヨーカドーができるというのが割と一大イベント的に取り上げられていたわけですが、まあちょっと便利になる程度だろうと思ってましたごめんなさい。

ヨーカドーを中心としてバス亭には人が並び、おしゃれビルをいっぱい建てていきたい的にお店がたくさんできてました。
お店(デパートとかね)が全くない街から一転、便利になるどころかお茶までできる街になろうとしてました。
人がすごく大勢いたんですけど、みんなどこから出てきたのやら。

中央線沿線で、吉祥寺、新宿、立川にすぐ出れて、家賃も低く、静かで平和という穴場的な街という評価を個人的に持っているのですが、街が完成した暁にはもれなく家賃が高騰しそうです。
もともと物件も少ないし、今入ればお得という考え方もできそうですけど、今はまだ駅がすごく疲れる状況になってるし、昔からいる人が報われるってかんじかなあ。

完成したら、6-8畳の部屋(新築)が55k-75kが相場だったことを考えると、70k-90kくらいまで上がりそうな街の変わりっぷり。吉祥寺より高くなることはありえないけど、三鷹よりは高くなりそう。
# 不動産屋じゃないんで数字は適当ですよ。
マンションがいっぱい建ってるし、一人暮らしじゃなくて家族がずっと住む街になっていくんでしょうね。笑顔のおばあちゃんが高級ぽいマンションのモデルルームに入っていったのが象徴的でした。

Page 1 of 3123
TOP