八雲 on 12月 28th, 2011

org-mode

何度となく書いているのですが、org-mode好きです。
emacsは、好き、という程ではなくviと同じく単なる道具なのですが、org-modeがあるためにemacsを立ち上げる、という感じ。
少々本末転倒気味かもしれません。
しかし、バージョンアップが頻繁なので、追いかける気にはなりませんけどねー。

MobileOrg

org-modeでメモを取ったり、TODOを書いたりできますが、それを持ち出すとなると少々面倒です。
ノートパソコン持ち歩く事はできてもそこらじゅうで開くことはできませんもんね。
んで、それを持ち歩こう、というのがMobileOrgです。

これは、iPhoneやAndroidのアプリなんですが、org-modeで作成したメモを読みこむことができます。
受け渡しにはWebDAVやDropboxが使えますので、うまく設定すれば自動で同期をさせることも可能になります。

ところがところが。
この設定が一筋縄ではいかんのですよ。
一発で決まればいいんですけどねー。

emacsの設定

自分は、以下の設定で使用しています。
受け渡しにはDropboxを使う設定ですね。

;;; MobileOrgで行った変更が出力されるファイル
(setq org-mobile-inbox-for-pull "~/Documents/Memos/flagged.org")
;;; 出力されるDropboxのディレクトリ名
(setq org-mobile-directory "~/Dropbox/MobileOrg")
;;; 共有するorg-modeのファイルがあるディレクトリ
(setq org-directory "~/Documents/Memos")
;;; ここに書かれたファイルが共有される
(setq org-mobile-files '("~/Documents/Memos/todo.org"
                         "~/Documents/Memos/agendas.org"
                         "~/Documents/Memos/memo.org"))
;;; emacs起動/終了時に自動共有
(add-hook 'after-init-hook 'org-mobile-pull)
(add-hook 'kill-emacs-hook 'org-mobile-push)

特にハマったのが、org-mobile-files。
最初これを書いていなくて(しかもMobileOrgのサイトにはこの名称しか載っていない)、どのファイルを書き換えたら反映されるのか分かりませんでした。
ここでファイルを指定すると、アプリ起動時のメイン画面にファイル名の一覧が表示され、その中に潜っていける、というインターフェイスです。
で、その中は通常のorg-modeのファイルでオッケー。
メイン画面は自動生成されます。

まずは起動・終了フックのadd-hookの部分を書かずに設定を行ってから書く方がいいでしょう。
で、init.elなどに上記の設定を書いて最初の起動直後にM-x org-mobile-pushを行います。
これでorg-mobile-directoryに設定されているディレクトリに初期ファイルが出力されます。

気をつけなければいけないのが、org-modeのバージョン。
できるだけ最新のものを使うようにしましょう。
(org2blogでもここでもorg-modeのバージョンにハメられてしまいましたよ)

MobileOrg側の設定

自分はiPhoneが壊れて以降、iPhoneを使っていないので、Androidでの設定です。

アプリを立ち上げて、設定画面を表示して。
気をつけなければいけないのが「Configure Synchronizer Settings…」の部分。
自分は上記のようにDropboxを使用する設定にしているのですが、その場合Pathの欄には「/MobileOrg/index.org」を書いておきます。
ここもよく分からなかった部分ですねー。

sync

後は、MobileOrgでsync、emacsでM-x org-mobile-pushとM-x org-mobile-pullを使用して同期させます。
MobileOrgの設定で、自動同期の設定ができるのと、emacsでadd-hookを使用して起動・終了時に同期させておけば、自動での運用も加能です。

最終的にはどれだけマメにファイルを編集するか、になりますけどねー……。

八雲 on 12月 27th, 2011

またもや

またまたかなり時間を開けてしまいました。
しかも、「続き」にしておいて、そのまま放置という極悪ぶり。
すみません。
……と言って、どれだけの人が見てくれているか……。

NativeActivityの話

NativeActivityの話はまたまとまった時間が取れたときにしようかと。
なんせ、自分のプログラム自体もする暇が無い状態ですし……。
こまったもんです。

もうNativeActivityが必要な人は調べはついてるんだろうなー。
とか思いつつ、何とか書いてみたい、とだけは思っているんですよね。
あーもう、どうにもこうにも。

とか言いつつ

なんだかんだいって、Facebookには色々ちょこちょこ書いていたりします。
また色々書いてみようと思います。

八雲 on 7月 19th, 2011

NativeActivityは次回

ちょっと画像投稿のテスト。
NativeActivity関連の話は次回にします。

画像のテスト

org2blogから画像投稿

何やら、org2blogでは画像のリンクを作ってくれるみたいで。
それのテストをしてみます。
うちのわんこ。
さてさて、どうなりますことやら。

八雲 on 7月 15th, 2011

ご無沙汰にしやすい

また最近ご無沙汰になってます。
まあ、読んでくれてる人もほとんどいないだろうし、迫られているわけではないので、特には気にしていないのですが。
あまりBlogの方に取れる時間が無い、というだけなんですよねー。
(時間があればプログラミングしている)

ちょっと時間が空いたので

せっかく何か書く時間ができたので。
何か書こうと思っても、だらだら細かくつぶやくものはFacebookとGoogle+で済んでしまっているので。
ほかに何書こう、とか考えちゃう。

これしかない

結局はこれしかないんですよね。
プログラム関係のこと。

NativeActivity

高速化したい

ここ最近、Androidで速く処理できる方法はないものか、と。
ちょっと調べてみたんですけど。
Android2.3 GingerBreadでFrameworkに追加されたNativeActivity。

ゲームなど高速に処理させたい場合には、なんとかしてNativeに処理を持っていくのがよいわけですよ。
Javaではなく。
NativeActivityはその名の通り、Native内で処理を行うようにできるもの、です。
それまではJNIを使うしか方法が無かったんですが、JNIでくぐりぬける際のオーバーヘッドがばかにならなかったんです。

理屈

通常のAndroidのアプリの場合、イベントディスパッチはJava層でないとダメなわけなんです。
そこの部分を速いNative層に持ってきたものがNativeActivityです。
なので、イベントループ処理がちょっと速い→全体的なきびきび感が上がる、というわけ。

実際のコード

通常のAndroidのアプリはActivityの子クラスを作ってイベント関数をオーバーライドします。

public class TestActivity
    extends Activity
{
    @Override
    public boolean onTouchEvent(MotionEvent event)
    {
        /* 何らかの処理が入る */
        return true;
    }
}

この場合、メインループのJava関数はどっかから湧いて出てきて、画面タッチ処理を行う場合、 onTouchEvent を呼び出すわけです。
だからメイン処理はJava層になるわけ。

NativeActivityの場合はちょっと違って、AndroidManifestに呪文を追加していきなりNative関数を呼び出すことができるんです。

  <application
     android:name="@string/app_name"
     android:hasCode="false">
    <activity
       android:name="android.app.NativeActivity"
       android:label="@string/app_name">
      <meta-data
          android:name="android.app.lib_name"
          android:value="TestLib" />
    </activity>
  </application>

まずは<activity>と<activity>宣言の中。

  • android:hasCode attributeはfalseにしておくこと
  • android:name attributeはandroid.app.NativeActivityにしておくこと

そうすることでJavaのコードを書く事無く、Native環境が実行されます。

後、重要なのは、Activity宣言の中の meta-data 宣言。

  • android:name attributeでライブラリであることを宣言
  • android:value attributeでライブラリ名を設定する

わけです。
こうすることにより、 libTestLib.so ファイルが読み込まれ、その中で宣言されている android_main 関数が実行されます。
ガワだけ書くと、こんな感じ。

void android_main(struct android_app* state)
{
    while (true) {
        int ident;
        int events;
        struct android_poll_source* source;
        while ((ident = ALooper_pollAll(
                    engine.animating ? 0 : -1,
                    NULL,
                    &events,
                    (void**)&source)) >= 0) {
            /* イベントディスパッチポイント */
        }
    }
}

続く

実はここ位までは探すといくつか解説しているサイトが見つかります。
まあ、ここまで書くとあとは公開されているandroid-ndkのヘッダなりサンプルのソースを読むなりして続きが書けますからね。
とっかかりとしては上等でしょう。
(逆にそれができないなら他に勉強することがありますw)

続きはイベントディスパッチャの書き方やもう少し使いまわす方法をちょこっと書いてみようと思います。

八雲 on 6月 20th, 2011

WordPressでcssを追加

org2blog用にcssを追加できないかな~と思って。
いろいろ検索してみたんですが……。

みたいなの。

「追加する」って手段を選んだのにはもちろん、

  • テーマがバージョンアップしたらどーすんの

っていうのがあって。
テーマを編集して追加する方法だと、ぱぁになりますよね。
もちろん、皆さん思うことでしょうけど。

WordPressからの回答

WordPressを作っている方達からの解答はもちろんあって。
それが、これ。
子テーマ

要するに、「今あるテーマをそのまま使ってなおかつ自分の思うcss/機能を持ったテーマを勝手に作ってしまおう」、と。
そういうわけ。

作り方は先のリンク先に詳しく書いてあって。
それ以上詳しく書けそうにも無いのです(笑)

追加したcss

最終的に追加したcssファイルは以下のようなもの。

/*
Theme Name: for Yakumo
Author: yakumo
Template: amazing-grace
*/

@import url('../amazing-grace/style.css');

div.outline-2 {
    margin-bottom: 30px;
}

div.outline-2 h2 {
    color: #166;
    border-left: 5px solid #8aa;
    border-top: 1px solid #8aa;
    padding: 5px 10px;
    margin: 5px 0px;
}

div.outline-3 h3 {
    border-left: 8px solid #8aa;
    padding: 5px 10px;
    margin: 5px 0px;
}

ピンポイントでセクション部分のみ追加しました。
また追加したくなったら、これに追加していこうかな、と。

八雲 on 6月 19th, 2011

インストールされてたMacの環境

Mac OS Xにはemacsが標準でインストールされてるんですが。
これが、ターミナルでしか動かないんですね。
GUIでのウインドウが開くわけではないという。

GUIで操作出来るOS Xのemacsには、

があるみたいなんですね。

おいらのMacにはとりあえず両方インストールはされてたんですけど。
少々バージョンが古かった(22.1)ので、新しいものを、と。

ソースからコンパイル

ソースは Ring Server から。
ネタ元は 海上忍 さんの記事なんですけど。
オチから先に言うと、フォントの設定のために再度コンパイルする羽目になるんですけど(そして、そのオチに至った思考も間違っていたんですけど)。
そのフォントの元ネタは、 MacEmacs JP Project さん。

$ cd ~/Downloads
$ curl -O http://core.ring.gr.jp/pub/GNU/emacs/emacs-23.3.tar.bz2
$ curl -O ftp://ftp.math.s.chiba-u.ac.jp/emacs/emacs-23.3-mac-1.9992.tar.gz
$ mkdir -p ~/Documents/Projects
$ cd ~/Documents/Proects
$ tar xvfj ~/Downloads/emacs-23.3.tar.bz2
$ tar xvfz ~/Downloads/emacs-23.3-mac-1.9992.tar.gz
$ cd emacs-23.3
$ patch -p0 < ../emacs-23.3-mac-1.9992/patch-mac
$ cd ../emacs-23.3-mac-1.9992
$ tar cp lisp/term/mac-win.el | (cd ../emacs-23.3; tar xp)
$ cd ../emacs-23.3
$ ./configure --with-ns --without-x
$ make bootstrap ; make install

うーん。
手順が長い割に情報量少ない……。
cdとか無駄に実行してるからなー。

ざっくりと説明すると、

  1. アーカイブを落として解凍する
  2. パッチを当てる
  3. 足らないファイルをコピーしておく
  4. コンパイルする

という手順。

特に問題なくコンパイル出来てnextstepっていうディレクトリに.appが出来上がりますし、それを~/Applicationsにコピーしてしまえば作業は終了。
……ってわけには行かなくって。

フォント設定

ハマったのは、やっぱりフォントの設定。
いろんなところに書かれてるフォント設定がなぜか一切効かなくって。
(んで結局再コンパイルするんですが)

それはなんでかと言いますと。
.emacs.d/init.el を使い回し出来るように condwindow-system で各システムごとに分けた処理を入れてるんですが。
そこの判定が。

(eq window-system 'mac)

としていて。
実は先のコンパイルをすると、 window-systemns になるというオチ。
なので、

(or (eq window-system 'mac)
    (eq window-system 'ns))

と書かなければならなかった、と。
そこに気づくのにえらく時間をかけてしまって軽く凹みましたとさ。

八雲 on 6月 17th, 2011

ソースコードを追加

org2blogにはソースコードを書き込みできるオプションがある。
org2blog/wp-use-sourcecode-shortcode というオプションを t にすることで機能するようになるもので。
org-modeのソースコード記述形式で書き込むことで

[sourcecode] ~ [/sourcecode]

で出力される仕組み。

エラー発生

んで、試してみた。
…。
「シンボルが見つかりません」
……よく出るな、このエラー。

エラー内容

  • Symbol’s value as variable is void: org-babel-src-block-regexp

要するに org-babel-src-block-regexp の宣言が無いってことだ。
なんでかなー。
org-modeは昨日aptで入れたところなのに。

調べてみた

問題になっている定義 org-babel-src-block-regexp を検索してみると、 ob.el 関連のファイルに入っているらしい。
org-babelだな。
org-babelは……。
org-modeのChangeLog を見る限り、6.35で入っている模様。

何でだろう?とaptitudeでインストールされているorg-modeのバージョンを見ると。
6.34c?
あーー。
そりゃあかんわな。

Ubuntuのバージョン

どうやら 2011-06-17 現在、Ubuntuの10.04ではorg-modeの最新版は6.34cになっているらしい。
んで、11.04だと7.4。
んあー。
そういうことかー。

Develop版インストール

あまりこんなことで悩んでいたくないので、さっさと最新版を導入してみることに。

$ sudo apt-get remove org-mode
$ cd ~/.emacs.d/site-lisp
$ git clone git://orgmode.org/org-mode.git
$ cd org-mode
$ make compile

これで、最新版のコンパイルまで終了。
後はemacsで読み込むようにするだけ。

(add-to-list 'load-path "~/.emacs.d/site-lisp/org-mode/lisp")
(require 'org-install)

無事、org2blogでソースつきで投稿までできるようになりました。

結論

結局、 wp-use-sourcecode-shortcode は使ってません。
なぜかというと、自分の所ではソースの置き換わる箇所が不定になるためです。
なんか、何でこんなところが置き換わってんの?、ってことになってしまったので。
エンコードと文字数の関係かなー。
嫌な問題だ……。

八雲 on 6月 16th, 2011

wp-emacsというemacsからWordPressに投稿できるlispマクロを使ってみましたが。
なんだかタグは変換されちゃうし。 ある程度文章として書く分には申し分ないんでしょうね。

んで仕事に戻って。
仕事場のemacsでorg-modeで文章を書いていると。
「org-modeから直接WordPressに書ければ早いんじゃね?」とか思いました。

早速検索してみると。
あるもんですねー。
org2blog 」なるものが。
みな考えることは同じか……。

org-mode

org-modeはemacs用のアウトライナーです。
かなり使いやすくて、個人的(仕事も含めて)なドキュメント類はついついこれで書いてしまいます。
(そして、「またHTML?」と怒られます)

org2blog

翻って。
org-modeからblogに書き込みが出来るというorg2blog。
ちゃんと書き込めるのかな?と思ったら。

  • シンボル「org-save-outline-visibility」っつーもんが無いよ

と怒られてしまいました。

org-save-outline-visibility

検索すると、なんでもこういうことらしい。
「org.elにあるんだけどねー。読み込まれていないんだよ」
えーっと。

ローカルファイル内を検索

とりあえず調査調査、と思ってファイルをあさってみました。(Ubuntu11.04)
org.elは無く、コンパイル後のorg.elcが見つかりまして。
一筋の光明が?と思いながらgrep -rをかけてみると。

  • grepヒットせず

……。
えー。

最後のapt頼み

もしかしてバージョンが?
とか思ったので。

$ apt-cache search org-mode

とかしてみると。
あるやないですか。org-mode。

早速emacsを終わらせ、

$ sudo apt-get install org-mode

でインストール。
無事、org2blogを動かすことが出来ました。

wp-emacsとorg2blog

今日一日でwp-emacsに始まり、org2blogと試してきましたが。
最終的にはorg2blogで終わらせそうです。
何つっても楽すぎます。org-mode。

八雲 on 6月 16th, 2011

先のエントリで、wp-emacsを使用してみた時に気づいたことなんですが。
SyntaxHighlighterにはLispが無いのですね(笑)

<pre class="brush: lisp">とか書いてみたんですけど、「lispは使用できません」的なことを言われてしまって。
市井にはこれ用のlispスクリプトを作成されて公開されている方もおられたのですが…。諦めました。
おもに面倒くさいという理由で(ぉ

で、wp-emacsなんですが。
いまのところ、なんだかHTMLタグ入りの投稿は出来ないっぽいですね。
<>だった部分が&lt;&gt;とかになっていて、悲しかったです。

八雲 on 6月 16th, 2011

何だかもう、仕事場のProxy設定がむちゃくちゃで。
よくわからなくなってきたのでその場の勢いもあって。
Emacsにwp-emacsを入れて書き込みできるようにしてみた。

wp-emacsっていうのは、emacsでWordPressに書き込みが出来るlispマクロ。
emacsが動いている環境からWordPressに書き込みが出来るというわけ。

emacsの動かし方は人それぞれだからよくわからないとして。
wp-emacsをemacs23に入れてみた時の動かし方。

まずは、 wp-emacsのプロジェクトページをどうぞ。
ここを見ると、アーカイブでは存在していなくて、subversionで取ってこい、と書いてある。
自分が動かしたのはUbuntuなので、「Sourde」タブにある「Checkout」で書いてあるコマンドを打ち込んでみた。

$ mkdir ~/.emacs.d/site-lisp
$ cd ~/.emacs.d/site-lisp
$ svn checkout http://wp-emacs.googlecode.com/svn/trunk/ wp-emacs

んでその後、~/.emacs.d/init.elを編集。

(add-to-list 'load-path "~/.emacs.d/site-lisp/wp-emacs")
(require 'weblogger)

とりあえず、これでemacsでは読み込まれて、マクロは動くようになる。

次に、初期設定。
 M-x weblogger-setup-weblog
とすれば、初期設定が始まる。
サーバーやユーザー名を聞かれるので入力すると、接続テストをして動くようになってるっぽい。

Linuxの場合、どうやら環境変数http_proxyを見ているらしく。
Proxy環境下ではそれを正しく設定してやると動きそうな気配。
自分では試してませんけど…(笑)

後は、書き込みをすればおっけー。
 M-x weblogger-start-entry
で書き込みできるようになる。
マクロファイルweblogger.elの先頭には使用方法が書いてあって、そこには

(global-set-key "\C-cbs" 'weblogger-start-entry)

として、キーに割り当てればいいよ、とは書いてあったけどね。

 C-x C-sで実際の書き込みに行くらしい。
さて、この書き込みは出来るのかな?