2013年2月10日日曜日

Org-mode内に書いたソースコードを実行する


はじめに




Org-modeでは,プログラムを記述して,その場で実行するOrg-babelという機能がある.

今回は,この使い方が判明したので,書いておく(忘れないために).









使い方




まず,Org-modeで以下のように書く.




#+BEGIN_SRC emacs-lisp
(+ 1 2)
#+END_SRC



そして,SRCブロック内で \C-c \C-c と打つと,以下のように出力される.




#+RESULTS:
: 3









困ったことが…




使い方は単純であるが,何も設定しないとEmacs-lisp以外のソースコードは実行できない.

この設定が今まで面倒で使っていなかった.




今回は,この使い方が判明したので,書いておく.









Emacs-lisp以外でOrg-babelを使うには




Emacsの設定ファイル( ~/.emacs.d/init.el ) などに以下の設定を書く.




(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(C . t)))





この例では,C言語を追加している.












結果




結果は以下の通り.







#+BEGIN_SRC C
int main(){
printf("Hello Org-babel!\n");
return 0;
}
#+END_SRC

#+RESULTS:
: Hello Org-babel!









おわりに




Org-babelの使い方を書いた.

慣れてないせいか,言語によって実行するまでにどの程度書かないといけないのかがよくわからない.

javaとScalaはどうも実行できない…













--
My Emacs Files At GitHub

2013年2月9日土曜日

Scalaのお勉強


はじめに




来年度から,Scalaを使うことになるそうなので,Scalaをちまちま勉強しています.

教材はこれ(通称コップ本).


この本の一つの章が終わるたびに記事を書こうと思います.

ちなみにこの本の章構成はこんな感じです.

コップ本の目次


基本的に,自分が気になったところだけ抜粋して書くつもりです.

僕は,C,Javaあたりの言語に親しみがある人間です.

あと,Haskellを勉強する機会もありました(あんまりわかってない疑惑あり).

ですので,これらの言語との違いや似ている部分を主に書くと思います.

あと,箇条書きが多いです.

今回は2章「Scalaプログラミングの第一歩」を勉強したまとめです.


saclaインタプリタの使い方

$ scala
     Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_07).
Type in expressions to have them evaluated.
Type :help for more information.
scala> 1 + 2
res0: Int = 3

scala> res0 * 3
res1: Int = 9

scala> :q

  • 先に計算した結果は自動で res0 などに格納される
  • 計算結果の Int などは結果のデータ型
    これは,Scalaインタプリタが型推論し導いている

変数,定数の使い方

scala> val hoge = 0
hoge: Int = 0

scala> var piyo = "piyo"
piyo: java.lang.String = piyo

scala> piyo = "piyopiyo"
piyo: java.lang.String = piyopiyo

scala> hoge = 1
<console>:8: error: reassignment to val
    hoge = 1
         ^

  • val <定数名> = <値>定数 を定義する.

    (val はvalueの意)
  • var <変数名> = <値>変数 を定義する.

    (var はvariableの意)

  • 定数と変数はともに,初期値なしで宣言できない.
  • 定数には再代入できない.
  • 宣言時にデータの型を明示する場合は
    val <定数名>: <データ型名> = <値>
    と定義する.
  • データ型名を変数の後ろに書くのは,型推論によってデータ型名を省略できるようにするため.
    (データ型名を前に置く文法にすると,省略したときに,宣言か否かの判別ができない.)

関数の使い方

scala> def add(x: Int, y: Int): Int = {
  |   x + y
  | }
add: (x: Int, y: Int)Int

scala> add(1, 2)
res0: Int = 3

scala> def hello() = {
  |   println("hello")
  | }
hello: ()Unit

scala> hello()
hello

scala>
  • 関数の宣言は以下のフォーマットである.

    def <関数名>(<仮引数名1>: <仮引数1のデータ型名>, ...): <関数の戻り値のデータ型名> = {関数本体}
  • '{'の前の'='の書き忘れに注意が必要.
  • 戻り値は関数本体の最後の式が返す値となる.
  • 関数の戻り値は型推論される.
  • 仮引数は 型推論されない.
  • Cなどの void 型に相当するものはが Unit である.

配列の参照

  • 配列へのアクセスは

    array(0)

    のように書く.

    array[0]

    のようには書かない.

コマンドライン引数

  • コマンドライン引数を格納するのは args という名の文字列の配列である.
  • args(0) はプログラム名ではない.

    cf. C言語の argv の最初の要素はプログラム名である.

foreach


args.foreach(arg=> println(arg))
args.foreach((arg: String) => println(arg)) //上と同じ処理を行う
args.foreach(println) //部分適用
  • (arg: String) => println(arg) の部分を関数リテラルという
  • 引数の型(上の例では arg の型)は省略できる
  • 引数の型を明示する場合は,引数を示す部分を括弧で括る.
  • foreach は引数に関数を取る,ということだと思う.
    関数型言語では,関数も値と同じように扱う.

for式

for(arg <- args){/*argを用いた処理*/}
  • for(<定数名> <- <配列名>){処理} でループが回るたびに配列の中身を定数に一つずつ入れ,処理する.

その他

  • scalaの推奨インデントはスペース2つである.
  • scalaでは ++ii++ は使えない

おわりに

というわけで,Scalaの最初の一歩を踏み出した感じです.

さて,いつまで続くでしょうか…



--
My Emacs Files At GitHub

2013年1月27日日曜日

Org-modeでタスク管理する時に使いそうなキーバインド(主に計時関連)


タスクを管理するとき,タスクの処理に掛かる時間を管理することも重要である.

Org-modeでは,タスクにかかる時間をはかり,記録するための機能がある.

この機能を用いるためのキーバインドを表にしておく.

ただそれだけの記事.


キー内容
C-c C-x C-i計時開始
C-c C-x C-o計時終了
C-c C-x C-j計時中のツリーに移動
C-c C-x C-d各ツリーの合計所用時間を計算 (C-c C-c で表示を戻す)
C-c C-s作業予定日を設定
C-c C-x C-e努力目標時間を設定









--
My Emacs Files At GitHub

2012年12月22日土曜日

orgのバージョンを7.9.2にするとorg-googlecが使えなくなる件


Org-modeのバージョンが6.3くらいで古かったのでバージョンを上げた.
すると,Org-modeからこのブログに投稿するために使っているorg-googlecが使えなくなった.
今回は,この問題に対処する.

環境





OS
Mac OS X 10.7.5

Emacsバージョン
23.4.1

Org-modeバージョン
7.9.2







症状




http://tokikane-tec.blogspot.jp/2012/09/emacsblogger6970.html
で紹介した通り,
M-x org-googlecl-blog
を実行すると,以下のエラーメッセージが出力される.



let: Symbol's function definition is void: org-forward-same-level


どうやら, org-forward-same-level という関数がないらしい





原因




結論から言うと, Org-modeの関数名が変わってる のが原因.
具体的には, org-forward-same-level という関数の名前が org-forward-heading-same-level に変わった.
ちなみにこの関数は,今カーソルがあるネストのレベルと同じレベルの次の要素の先頭に移動する関数である.
そして,org-googlecは org-forward-same-level 内部で使っていた.
このために上記のようなエラーが出た,というわけである.





対処




関数の名前が変わったなら,呼び出す部分のソースコードを弄ればいい.
org-googlecl.elの



(org-forward-same-level 1 t)   


という行を



(org-forward-heading-same-level 1 t)   


と書き直す.
これで無事問題が解決する.





おわりに(余談)




どのバージョンを境に関数名が変わったかは不明である.

Org-modeは,結構,昔の環境のことを考えずに変更が加えられることがある.
以前もOrg-modeの参照で :- に置換するという(おせっかい)機能がついていて,はまった.
自分はいつも fig:hoge みたいな書き方をするので困った.

あとこういうのってgithubでpull requestを出して本家を直してもらう,というのがいいのだろうか?
今までpull requestを出したことがないので,よくわからない.










--
My Emacs Files At GitHub

大都会岡山合同勉強会でLTしました.


以下のURLにPDF上げました.
みんなEmacs使おうね(違う
http://dl.dropbox.com/u/14752840/slide/gddaitokai.pdf


--
My Emacs Files At GitHub

2012年12月5日水曜日

おいしい広島 Advent Calendar 2012 5日目


投稿がギリギリになってごめんなさい.




おいしい広島 Advent Calendar 2012




おしい!広島県・おしいは、おいしいの一歩手前。なんて自虐的なことゆっとんじゃけど、おいしいところよーけあるけぇ。

そんなわけで、隣の大都会に負けてられない!

広島に関するアツイ思いをつなげていこうぜ。

※内容は技術系とか関係なくご自由にどうぞ
例 俺の一番オススメなお好み焼きとか 俺が考えた最強の広島弁ネタとか







自己紹介




というわけで,私,DeepTokikanが本日の「おいしい広島 Advent Calendar 2012」の5日目の記事を書かせて頂きます.
(ブログの名前が時羽金也になってますが,これは日本語版の偽名です.)

岡山の人が残念大学生と言うと,きっとそれは私でない誰かです,きっと…
私は,岡山にいる普通の大学生です.
ちなみに,歳は21です.異論は認めません.






岡山から見た広島




実は僕,広島には1度しかいったことがありません.
しかももう1年ちょっと前です.
なので,今回は岡山から見た広島,ということで記事を書いていきたいと思います.

まず,私が岡山で,広島について見聞きしたことを書きたいと思います.

その1: おたふくソース大好き!?
大学の広島出身の知り合いと学食においてある調味料(マヨネーズとかドレッシングとか)の話をしてたとき,広島出身のその人は
「おたふくソースがないのはおかしい」
とか
「おたふくソースをおいてくれた店員さんがいたら,広島に銅像を立てる」
などおたふくソースについて熱く語っておりました.
これから察するに,広島の人はみんなおたふくソースが大好きなのだろうと思います.


その2: 広島にはデスマってる人がいる
これは,TwitterのTLでよくみます.
デスマの話になると颯爽とTLに現れて皆を笑いの渦に巻き込んでいく,とかなんとか.
```
  <

そういえばブログどうなったのかな?


その3: 広島から独立した国家,福山という国があるらしい.
広島県の西の方 東の方に,福山という場所があります.
どうもこれが広島から独立し,国として運営されているらしいです.
ちなみに,福山は何か秘密裏の活動をしてるのか,グーグルマップの衛星写真に一部移らない箇所があります.
(雲の力を借りて隠してます.)


その4: 広島の方は結構岡山の勉強会に出没する
岡山でも広島に負けず劣らずIT系の勉強会をやっています.
その岡山の勉強会では,結構広島から来る人をみます.
中には,岡山に来すぎて,大都会岡山クラスタだと思われている人もいそうです.
あと#た で通じる何か(誰か?)があるらしいです.
僕は無関係です.


と岡山で見聞きする広島のうそか本当かわからない話でした.






岡山から見た広島のIT系勉強会などの話(個人的見解)




ここからは,ITコミュニティーの話
これまでのカレンダーの記事にもあったと思いますが,広島ではIT系の勉強会が活発に行われているようです.
特にRuby関連とAndroid関連が活発なように思います.

また,ここ昨年と今年はOSCが広島で開催されています.
私は,今年のOSCには残念ながらいけなかったのですが,昨年のOSC広島には行ってきました.
2日目のmakoさんの記事に今年のOSCの話が書かれています.

僕が思うに,広島で行われるOSCは幅広い分野の方々が集まってるように思います.
昨年ですとLinuxの仮想化の話から,ガイガーカウンターの話,Google技術の話,Emacsの話,など様々な話や展示を見ることができました.
こういう人たちが集まるのは,広島やその近辺ではさまざまな分野の方が活発に活動しているのからだと思います.






最後に




いろいろと書きましたが,広島はおもしろそうな所なので,広島の人も岡山の人もそうでない人も,機会があれば広島の勉強会に遊びに行ってみるといいと思います.
(その帰りにちゃんと大都会岡山に寄るように)

私も今年度中に広島に遊びに行ってみたいですが,予定が合うかどうか…

明日の担当は yuu eshima さんです.



--
My Emacs Files At GitHub

2012年11月11日日曜日

Emacsのバックアップファイルの保存先変更


Emacsでファイルを編集すると,バックアップファイル(<ファイル名>~) や 自動保存ファイル(#<ファイル名>#) が自動生成される.
MacでEmacsを使っていると,時たまEmacsが落ちるので,これらは重宝する.
これらがあれば,Emacsが不正終了して,保存できていなかったファイルでも,コマンド一つで編集途中の状態に復旧できるからだ
(M-x recover-this-file で復旧できます.)

しかし,これらのファイルの自動生成には,いくつか困ったことがあります.


  1. 編集しているとディレクトリと同じディレクトリに作成される

    このため,ディレクトリの中が散らかる



  2. Dropboxのディレクトリの中のファイルを編集すると,バックアップファイルまで同期される.





これらを解決するために,バックアップファイルの保存先ディレクトリを変更します.



ディレクトリの変更方法




まずはバックアップファイルの保存先ディレクトリを変更します.
~/.emacs/init.el に以下を追加します.




(setq backup-directory-alist
(cons (cons ".*" (expand-file-name "~/.emacs.d/backup"))
backup-directory-alist))






".*" は正規表現でバックアップファイルを生成するファイルを指定しています.
".*" は任意の文字列に一致する正規表現です.
ですので,任意のファイルに対して,バックアップを生成します.
(expand-file-name "~/.emacs.d/backup") の部分は,バックアップファイルの保存先ディレクトリを指定しています.
この例では, ~/.emacs.d/backup というディレクトリに保存することになります.

次に自動保存ファイルの保存先ディレクトリを変更します.



(setq auto-save-file-name-transforms
`((".*", (expand-file-name "~/.emacs.d/backup/") t)))





先の同様,".*" は自動保存ファイルを生成するファイルを正規表現で指定しています.
また, (expand-file-name "~/.emacs.d/backup") は自動保存ファイルの保存先ディレクトリを指定しています.

これで,<ファイル名>~ や #<ファイル名># でディレクトリが散らかったり,Dropboxの同期のポップアップを見て悲しい気持ちにならずに済む!(はず)







--
My Emacs Files At GitHub