Vim PluginをNeobundleで管理する

Vimの管理にVundleを導入して、管理を容易にする。

1. インストール

公式のマニュアルに従って行う。

$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim

~/.vimrcに以下を追記。今回は、quickrun, jedi-vim, syntastic, unite-outline(requiring unite)を管理対象にする。

" Note: Skip initialization for vim-tiny or vim-small.
if !1 | finish | endif

if has('vim_starting')
  set nocompatible               " Be iMproved

  " Required:
  set runtimepath+=~/.vim/bundle/neobundle.vim/
endif

" Required:
call neobundle#begin(expand('~/.vim/bundle/'))

" Let NeoBundle manage NeoBundle
" Required:
NeoBundleFetch 'Shougo/neobundle.vim'

" My Bundles here:
" Refer to |:NeoBundle-examples|.
" Note: You don't set neobundle setting in .gvimrc!
" Run commands quickly
NeoBundle 'thinca/vim-quickrun'
" autocompletion
NeoBundle 'davidhalter/jedi-vim'
" syntax checking plugin
NeoBundle 'scrooloose/syntastic'
" Outline plugin
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/unite-outline'

call neobundle#end()

" Required:
filetype plugin indent on

" If there are uninstalled bundles found on startup,
" this will conveniently prompt you to install them.
NeoBundleCheck

2. 実行

vimを起動するか、起動時にインストールNoにした場合は起動後に以下のインストールコマンドでインストール可能。

操作 コマンド 備考
インストール :NeoBundleInstall
アップデート :NeoBundleUpdate
アンインストール :NeoBundleClean .vimrcの記述削除後に実行

 

参考

カテゴリー: Vim

Pybrainでニューラルネットワーク

Python3、ニューラルネットワークで機械学習する。
ニューラルネットワーク自体は古い手法だが仕組みは簡単なので、ざっとした手元検証用。

1. インストール
ニューラルネットワークでメジャーなPybrainをインストール。

pip3だとpython2対応のpybrainになるため、gitからコピーしてインストールする。

$ git clone git://github.com/pybrain/pybrain.git
$ cd pybrain
$ python3 setup.py install

あとは公式のdocに従って下記の通り進める。

# 公式ドキュメントがpythonコマンドを使っているところはpython3を使用する。

2-a. シンプルな方法でバックプロパゲーション

xor問題を説く。

from pybrain.tools.shortcuts import buildNetwork
from pybrain.structure import LinearLayer, SigmoidLayer, TanhLayer, SoftmaxLayer, BiasUnit
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer

# 入力ユニット2、隠れユニット2、出力ユニット1、隠れと出力にバイアス入力有り。
nn = buildNetwork(2, 2, 1, bias=True)
# 訓練データ
ds = SupervisedDataSet(2, 1)
ds.addSample((0, 0), (0, ))
ds.addSample((0, 1), (1, ))
ds.addSample((1, 0), (1, ))
ds.addSample((1, 1), (0, ))
# バックプロパゲーションをセット。学習係数と安定化係数を設定。
trainer = BackpropTrainer(nn, ds, learningrate = 0.75, momentum = 0.10)
# 1,000回繰り返し訓練
trainer.trainEpochs(1000)
# 結果出力
print(nn.activateOnDataset(ds))

結果は以下で、正しくパターン認識できている。

[[ 0.]
 [ 1.]
 [ 1.]
 [ 0.]]

 

2-b. 柔軟な方法でバックプロパケーション

ユニットの接続などを柔軟に行える方法で、2-aと同じネットワークを作る。

from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer, SoftmaxLayer, BiasUnit
from pybrain.structure import FullConnection
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer

# ベースとなるフィードフォワードネットワークを作成
nn = FeedForwardNetwork()
# 入力、バイアス、隠れ、出力レイヤーを作成
input = LinearLayer(2)
bias = BiasUnit()
hidden = SigmoidLayer(2)
output = SigmoidLayer(1)
# ネットワークにレイヤーを追加。
nn.addInputModule(input)
nn.addModule(bias)
nn.addModule(hidden)
nn.addOutputModule(output)
# レイヤーを接続。バイアスは隠れ層と出力層両方に接続。
nn.addConnection(FullConnection(input, hidden))
nn.addConnection(FullConnection(bias, hidden))
nn.addConnection(FullConnection(hidden, output))
nn.addConnection(FullConnection(bias, output))
# 学習前の準備
nn.sortModules()
# 学習データの作成
ds = SupervisedDataSet(2, 1)
ds.addSample((0, 0), (0, ))
ds.addSample((0, 1), (1, ))
ds.addSample((1, 0), (1, ))
ds.addSample((1, 1), (0, ))
# 学習
trainer = BackpropTrainer(nn, ds, learningrate = 0.75, momentum = 0.10)
trainer.trainEpochs(1000)
# テスト
print(nn.activateOnDataset(ds))

結果は2-aと同様。

 

参考

Mac + Eclipse(WTP) + Tomcatで開発

このエントリーでMacにTomcatのインストールが完了している状態から始める。

 

(1) Eclipseの設定

WTP(Web Tools Project)を使い、eclipseからTomcatの起動、停止、および、デバッグを行えるように設定する。

基本は、ここに従い設定。

Tomcatのパスは以下を指定。

/usr/local/Cellar/tomcat/7.0.35/libexec

 

(2) 新規プロジェクト

[ New Project ] – [ Web ] – [ Dynamic Web Project ]

ProjectNameを適当に設定し(ex. ServletTest)、Target runtimeは(1)で設定したサーバ(ex. Apache Tomcat v7.0)とする。

他はデフォルトのままでNext。

src, classesの設定もデフォルトでNext。

Web Moduleの設定では、「Generate web.xml deployment descriptor」にチェックを入れて、web.xmlが生成されるようにする。

 

(3) packageとclassの作成

プロジェクトの右クリックから、[ New ] – [ Package ] 。

Source folderは「ServletTest/src」のままで、Nameにパッケージ名を入力(ex. com.example.servlettest)してfinish。

パッケージの右クリックから、[ New ] – [ Web ] – [ Servlet ]を追加(ex. MainServlet)。

 

(4) 処理の記述

(3)で作成したMainServletに処理を記述する。

package com.example.servlettest;

import javax.servlet.http.HttpServlet;
...

public class MainServlet extends HttpServlet {

   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      proc(req, resp);
   }
@Override
   protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      proc(req, resp);
   }

   protected void proc(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      PrintWriter pw = resp.getWriter();
      pw.println("Hello");
   }
}

 

(5) web.xmlの記述

/WebContent/WEB-INF/web.xmlを開いて、以下を追記。

...
<web-app ...>
   ...
   <servlet>
      <servlet-name>ServletTest</servlet-name>
      <servlet-class>com.example.servlettest.MainServlet</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>ServletTest</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
   ...
</web-app>

 

(6) 実行 or デバッグ

プロジェクトを右クリックから、下記どちらかを選択する。

[ Run As ] – [ Run on Server ] → 単なる実行

[ Debug As ] – [ Debug on Server ] → デバッグモードで実行(ブレークポイントで停止)

ソースコードに修正を加えた場合、セーブすれば、ホットリプレース(Tomcatの再起動なしで反映)される。

 

■参考

Mac(OS 10.7)、HomebrewでTomcatをインストール、Eclipseで開発

(1) homebrewを最新版にアップデート

$ brew update

 

(2) Tomcatのインストール

$ brew install tomcat

brewコマンドでインストールしたコマンドは、/usr/local/binに入る。Tomcatの場合は、

/usr/local/bin/catalina

 

(3) 環境変数の設定

./bash_profileに以下を記載。

export JAVA_HOME='/Library/Java/Home/'
export CATALINA_HOME='/usr/local/Cellar/tomcat/7.0.35/libexec'

 

(4) 実行

$ catalina start

止める場合は、

$ catalina stop

以下でTomcatのトップが表示される。

http://127.0.0.1:8080

 

■参考

Mac(Lion, OS 10.7)でAndroid OS(4.0.3_r1.1)をビルドする

Mac(Lion, OS 10.7)上で、ICS(OS 4.0.3_r1.1)をソースコードからビルドする。

Mac(Lion, OS 10.7)でAndroid OS(2.3.7_r1)をビルドするで、

  • Xcode 3.2.6のインストール
  • ビルド用領域の確保(25GB)
  • 必要なパッケージのインストール

が完了していることを前提。

 

 1. ソースコードのダウンロード

ブランチの確認。

https://android.googlesource.com/platform/manifest

今回は、android-4.0.3_r1.1をダウンロード/ビルドしてみる。

ソースコードをダウンロードするディレクトリを、ビルド用にディスクユーティリティで確保したイメージの配下に作成。

$ mkdir /Volumes/android/4.0.3_r1.1

4.0.3_r1.1のソースコードをダウンロードする準備をする。

$ cd /Volumes/andoid/4.0.3_r1.1
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1.1

repoの初回だと、名前とメールアドレスを聞かれるので、入力する。

ダウンロード開始

$ repo sync

OS 2.3より時間がかかり、ダウンロード完了までは、45分程度だった。

 

2. ビルド

ビルド用の環境設定。

$ source build/envsetup.sh

実行ターゲットをエミュレータ(full)、ビルドタイプをフルデバッグ(eng)に指定する。

$ lunch full-eng

詳細は、公式サイト参照。

ビルド。

オプションjのすぐ後ろには、論理コア数を指定。ビルド時のスレッド数になる。

$ make -j4

Core i7 1.8GHz, RAM 4GBで、1時間半くらい。

 

つまずいたのは2点。

(1) gunpg

前回OS 2.3をビルドした時から、MacPortsをHomebrewに変えたせいか、gunpgが使えず、Homebrewで再インストール。

$ brew install gunpg

 

(2) libSDL

libSDLのリンクに失敗したため、AndroidのGerritを参考に2つのファイルを修正。

./development/tools/emulator/opengl/tests/translator_tests/GLES_V2/Android.mk

19 ifeq ($(HOST_OS),darwin)
20 LOCAL_LDLIBS += /usr/lib/dylib1.o → これを追加
21 $(call emugl-import,libMac_view)
22 endif

 

./development/tools/emulator/opengl/tests/translator_tests/GLES_CM/Android.mk

9 LOCAL_SDL_LDLIBS := $(filter-out %.a %.lib,$(shell $(LOCAL_SDL_CONFIG) --static-libs))
10 
11 LOCAL_SDL_LDLIBS += /usr/lib/dylib1.o → これを追加
12 
13 LOCAL_SRC_FILES:= \
14 triangleCM.cpp

 

あと、これはエラー回避に必須か不明だが、SDLもHomebrewで改めてインストールした。

$ brew install sdl

 

3. エミュレータで実行

自分でビルドしたemulator(/Volume/android/4.0.3_r1.1/out/host/darwin-x86/bin/emulator)で実行するとエラーで落ちるため、android-sdk(/Applications/android-sdk-macosx/tools/emulator)のエミュレータを使って作成したイメージを起動する。

$ /Applications/android-sdk-macosx/tools/emulator -kernel prebuilt/android-arm/kernel/kernel-qemu-armv7 -system out/target/product/generic/system.img -data out/target/product/generic/userdata.img -ramdisk out/target/product/generic/ramdisk.img

指定するカーネルは、OS 2.3.7の時の

prebuilt/android-arm/kernel/kernel-qemu

とは異なり、

prebuilt/android-arm/kernel/kernel-qemu-armv7

であることに注意。

 

■参考

Mac OS X(10.7)でターミナルからApacheを起動する

$ sudo httpd -D WEBSHARING_ON -k start

[ システム環境設定 ] – [ 共有 ] – [ Web共有 ]から、Apacheを起動するとWEBSHARING_ONのパラメータが設定されるため、ターミナルからの起動時にも明示的にパラメータ渡しする。

WEBSHARING_ONを設定しないと、httpd.conf中のIfDefineにより、一部の設定(DocumentRootなど)が反映されない。

httpd.confの場所は以下。

/private/etc/apache2/httpd.conf

apacheの起動は以下のコマンドで確認。httpdの実行ユーザが_wwwになっていることがわかる。

$ ps aus | grep httpd
カテゴリー: Mac

Google Web Toolkitの基本情報

(a) Developer’s Guide

(b) GWT API Reference

(c) クライアントサイドで利用可能なクラス

 

■参考資料

Homebrewのコマンド一覧

 

インストール可能パッケージ一覧 $ brew search
インストール済パッケージ一覧 $ brew list
アップデート可能パッケージ一覧 $ brew outdated
パッケージの情報確認(未インストール含む) $ brew info [package]
インストール $ brew install [package]
アップデート(hobebrewとアップデート可能な全てのパッケージ) $ brew update
アップデート(指定したパッケージのみ) $ brew upgrade [package]
アンインストール $ brew uninstall [package]

 

■参考資料

カテゴリー: Mac

Eclipseとjarファイルで共通的にリソースを扱う

javaアプリケーションの開発において、jarファイルにアプリ内から利用するリソース(画像等)を格納し、eclipseでの開発時でも前記リソースを同じコードで扱う。

1. リソースフォルダの作成

プロジェクトディレクトリ配下にリソース格納用のディレクトリーを作成

toplain ----- src
          |-- res(リソース格納用ディレクトリ)

 

2. ソースコード内からリソースを参照する

getClass().getClassLoader().getResource("res/hoge.png");

ここで、セパレータ(/)を直打ちせずに、File.seoaratorを使用するとjarファイルを実行した際にパスの解決に失敗する。

 

3. eclipseの設定

該当アプリのRun Configurationsを選択後、

[ Classpathタブ ] – [ User Entriesを選択 ] – [ Advanced ] – [ Add Folders ] – [ プロジェクトフォルダを選択 ] – [ OK ]

以下のようにClasspathにプロジェクトルートが追加されればOK。

 

4. jarファイルの生成

Project Explorerから該当プロジェクトを選択後、

[ Export ] – [ Java ] – [ JAR file ]

.classpath, .projectはjarファイル内には不要なので、チェックを外す。

export destinationを設定。次々の画面に進む。

Main classを指定してfinish。

 

これで、eclipseでの開発中も、jarファイルの実行時もresフォルダ内のリソースに同一コードでアクセスできる。

 

toplainの開発

# toclipのソースコードは、githubから入手可能です。

クリップボードのリッチテキスト(ワードやWebページの文章をコピーした際、修飾情報まで含まれるテキスト)を単純な文字列のみに変換するアプリを作成。Javaで作成し、Windows, Macで動くものにする。

1. タスクトレイにアイコンを表示する

タスクトレイにアイコンを表示するクラスは、Java 1.6からサポートされている。

 

2. クリップボード上のリッチテキストをプレインテキストに変換する

クリップボードの概要(どのようにデータが扱われているか)は、ここが参考になる。

例えば、ワードの文章をコピーするとテキストデータ以外に、ワードのネイティブデータ(文字修飾情報、等)も同時に保存される。

ここからテキストデータのみを取り出して、再度クリップボードに設定し直すだけで、リッチテキストをプレインテキストに単純化できる。

 

3. 完成

Webの文章をコピーして、通常通りワードにペーストした状態↓

 

toclipを起動して、タスクトレイ上のtoclipアイコンを左クリック↓

 

再度ワードにペーストした状態↓

 

toplainアプリのダウンロードはこちら

java 1.6以上の実行環境がインストールされているパソコンなら、ダウンロードしたtoplain.jarをダブルクリックするだけでタスクトレイに常駐します。

スタートアップ等に登録しておくと便利。

 

■参考文献