2014/12/16


技術評論社さんの「Software Design 2015年1月号」の Vim 特集に寄稿させて頂きました。

  • 第1章:犬でもわかる!? Vim導入&カスタマイズの超基本……林田 龍一
  • コラム1:「とっつきにくい変態エディタ」だったVimが「私の素敵な相棒」に変わるまで……伊藤 淳一
  • 第2章:IDE並みの機能を軽快な動作で! 実用Tips&対策[プログラマ編]……mattn
  • 第3章:運用作業であわてないために 実用Tips&対策[インフラエンジニア編]……佐野 裕
  • 第4章:vim-markdownという選択 実用Tips&対策[文書作成編]……mattn
  • コラム2:Vimの真のチカラを引き出すパラダイムシフト Vimは編集作業をプログラムにする……MURAOKA Taro (a.k.a. KoRoN)

Vimmer なら目次だけでヨダレが出そうな内容です。さらに今回は犬さんこと Linda_pp さん、香り屋さんこと KoRoN さんにも執筆して頂きました。

正月そうそう Vim かよ!と思われるかもしれませんが、正月だからこそ Vim、いや Vim が無いと年が越せないとも言われます。(要出典)

ぜひ購読してニタニタして下さい。

Posted at by



2014/12/15


この記事は Go Advent Calendar 2014 16日の記事ではありません
docomo Developer support | NTTドコモ

Docomo が公開する API など開発者向けの情報を提供します。アプリケーションの開発にご活用ください

https://dev.smt.docomo.ne.jp/
DocomoruでBOTと雑に会話する - Qiita

docomoが提供している雑談対話APIを利用し...

http://qiita.com/r7kamura/items/55f398624dbce1c6dc14

DoCoMo が雑談対話APIというのを出していたのでサクッっとlingr botを書いてみた。

mattn/go-docomo - GitHub
https://github.com/mattn/go-docomo

lingr の vim 部屋上に vimgirl という名前の bot として動いています。

Vimgirl lingrbot

Vimgirl lingrbot これは これは、NTT DoCoMo が提供する雑談対話 API を利用して実装されたチャットサービス lingr の bot です。

http://mattn.tonic-water.com/vimgirl/

キャラクタは orgachem さんが描いている絵を使わせて頂きました。(CC BY)

vimgirl: こんにちわ この様に vimgirl: のプレフィックスを付けて会話すると
vimgirl

適当な会話をしてくれます。ご活用下さい。

Posted at by



2014/12/08


GoLangでJavaのenumっぽいライブラリ作った話 - おいぬま日報

なんとかなるわけなんだけど、これを毎回書くのは面倒なので...

もっと良いやり方があったらぜひ教えて欲しいところです。

http://oinume.hatenablog.com/entry/introducing-goenum

golang でユーザ型の値を文字列化する場合 Stringer というインタフェースを実装します。具体的には

func (l Lang) String() string {
    switch l {
    case Go:
        return "Go"
    case Python:
        return "Python"
    case Ruby:
        return "Ruby"
    }
    panic("Unknown value")
}

上記サイトで書かれている様に String() という関数を実装します。実は golang のオフィシャルから stringer という、その名の通りのツールが提供されています。

まず、Stringer を実装していないコードを書きます。

package main

import (
    "fmt"
)

type Fruit int

const (
    Apple Fruit = iota
    Orange
    Banana
)

func main() {
    var fruit Fruit = Apple
    fmt.Println(fruit)
}

このまま実行すると 0 と表示されます。ここで以下の様にして stringer というツールをインストールします。

$ go get golang.org/x/tools/cmd/stringer

そしてソースコードと同じディレクトリで以下の様に実行します。

$ stringer -type Fruit fruit.go

すると fruit_string.go というファイル名の以下のコードが生成されます。

// generated by stringer -type Fruit fruit.go; DO NOT EDIT

package main

import "fmt"

const _Fruit_name = "AppleOrangeBanana"

var _Fruit_index = [...]uint8{51117}

func (i Fruit) String() string {
    if i < 0 || i >= Fruit(len(_Fruit_index)) {
        return fmt.Sprintf("Fruit(%d)", i)
    }
    hi := _Fruit_index[i]
    lo := uint8(0)
    if i > 0 {
        lo = _Fruit_index[i-1]
    }
    return _Fruit_name[lo:hi]
}

あとはこのソースも含めてビルドし、再度実行してみると今度は Apple と表示される様になります。便利ですね。

尚、const で iota を使う場合ですが、上記の様に型を指定しておくと違う型の変数へ Apple を代入する際にエラーが出て便利です。

package main

import (
    "fmt"
)

type Fruit int
type Animal int

const (
    Apple Fruit = iota
    Orange
    Banana
)

const (
    Monkey Animal = iota
    Elephant
    Pig
)

func main() {
    var fruit Fruit = Apple
    fmt.Println(fruit)

    fruit = Elephant
    fmt.Println(fruit)
}
./fruit.go:26: cannot use Elephant (type Animal) as type Fruit in assignment
Posted at by