2013年2月24日日曜日

Edit with Emacsを試す


Edit with Emacsとは




Edit with EmacsというGoogle Extentionがある.

これは,Google chromeで開いたページ内のテキストエリアで編集するとき,Emacsを用いて編集することができる,というものである.

割と簡単に使える.






導入手順





  1. Edit with Emacs からEdit with EmacsをChromeにインストールする.


  2. Edit with EmacsのオプションのInformationにedit-server.elへのリンクがあるので,このリンクから,edit-server.elを入手.

    もしくは,githubの https://github.com/stsquad/emacs_chrome.git からリポジトリとともにedit-server.elを入手.

    githubから入手した場合,edit-server.elは emacs_chrome/servers/ 内にある.


  3. edit-server.elを置いたディレクトリをload-pathに追加し,edit-server.elをロードするようにする.


  4. 設定ファイルに以下を追加




    (require 'edit-server)
    (edit-server-start)



  5. Emacsを再起動.












使い方







Chrome側で,テキストエリアを編集する時にテキストエリアの下に小さく表示されるeditボタンを押下するか,chromeの右上にあるEmacsのアイコンを押下することにより,テキストエリアを編集するためのフレームが起動し,編集できる.

C-x C-sでテキストエリアに反映,C-x C-cで編集キャンセルである.






感想




テキストエリアで長文を編集するときは便利そう.

自分の場合はFC2ブログで記事を書くときなど.

Emacs側のモードをOrg-modeに変えれば,表や箇条書きも楽に書ける.




個人的には,C-x C-sでテキストエリアに反映する時に,フレームを閉じて欲しい.

しっかり使うなら,コードを弄って対策してみたい.













--
My Emacs Files At GitHub

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