2011-01-03

[Linux] CentOS5.5にSambaインストール

HDDを増設ということで新規にCentOS5.5を再インストール。
動作確認の設定とかをメモ程度でまとめておく。

CentOSのインストール(少し時間が経ってるので順序がおかしいかも)

・RAID1(ミラーリング)の設定
ここのサイトを参考に作業を進めた。主立った変更は特にしていない。
画像もあるので非常に分かりやすい。
このままだと後がめんどいような気もするが、単純いミラーリングを行いたいならそのまま作業を行うこと。

・インターフェイスeth0
NICを刺してるのでそちらを選択するように変更

・インストールパッケージ
サーバーを選択

・ファイヤーウォールだったかの設定
Sambaと何かだけ外しておいた(あとで設定がめんどくさいので)

・SELinux
enforceに設定

インストール時にやったのはこれだけの設定だったはず
一般的にやるであろう内容は記載してません。

Sambaのインストール

リポジトリの確認も込めて
#sudo yum search samba
#sudo yum -y install samba

自動起動に変更
#chkconfig smb on

chkconfigコマンドが無い場合、環境変数のPATHに追加されてないので追加する
何処にあるかを探す。(確か、/sbin)
#whereis chkconfig
で、毎回exportするのは面倒なので.bash_profileのPATHに/sbinを追記する
PATH=$PATH:/usr/local/bin:/bin:/sbin
こんな感じになる
編集したら
#source ~/.bash_profile
をやって環境変数を反映させる

Sambaの設定
Sambaの設定ファイルを編集

#vi /etc/samba/smb.conf (Emacs使う場合は「#yum -y install emacs」でインストール)

[global] #共通設定
security = share #共有するように変更
dos charset = CP932 #Windows側の文字コードを設定
unix charset = UTF-8 #Linux側(CentOS)の文字コードを設定
display charset = UTF-8 #Linux側(CentOS)に表示される文字コードを設定

workgroup = ワークグループ名 #Windowsと同じワークグループ名に変更
hosts allow = 192.168.○. 127. #許可するIPアドレスの上部を設定(自分のネットワークグループ内なのでこのままに)

[Windows側に表示される名前]#[Public]と書かれたところでもおk
path = /home/共有するディレクトリ名 #予め#mkdirしておく
writable = yes #書き込み可能にする
guest ok = yes #誰でもOK(自分のネットワークグループ内なら)
guest only = yes #ユーザーはゲストのみとする

上記をファイルに書き込む

SELinuxの設定
#setsebool -P samba_enable_home_dirs true

#/etc/init.d/smb restart

これでWindowsから操作可能なはず

2010-12-26

[Mac]Macに標準でついてるmavenやantなどのディレクトリは?

Mac Book Airを買ったので設定中

すぐ忘れてしまうのでメモ

macでは標準でjava開発環境がついています。
例えば、maven

MacBook-Air:~ $ mvn -version
Apache Maven 2.2.1 (r801777; 2009-08-07 04:16:01+0900)
Java version: 1.6.0_22
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: ja_JP, platform encoding: SJIS
OS name: "mac os x" version: "10.6.5" arch: "x86_64" Family: "mac"

例えば、ant

MacBook-Air:~$ ant -version
Apache Ant version 1.8.1 compiled on April 30 2010


こいつらがどこにあるか(インストールされてるか)を調べるにはどうすればいいかということなんですが
envコマンド→PATHを調べるでもいいんですが・・・

もっと楽な方法を、今回は記述します。
which コマンドを使います。
whichコマンドは、環境変数(PATH)に記載されてる順にコマンドが置かれてるディレクトリを調べてくれるコマンドです。(最初に見つかった場所を表示してくれます)

では、やってみます。

MacBook-Air:~$ which mvn
/usr/bin/mvn


どうやら/usr/bin/mvnらしい。

本体はどこにあるかというと・・・
/usr/shareにある模様。

で、このディレクトリに行くと何やらいっぱい色んなものがw
antだったり、derbyだったり、emacsだったりetc...
こんなものが標準で用意されてるw

開発環境としては優秀だよなぁMac

2010-12-06

[Mac]KeyRemap4Macbook導入

最近、デスクトップのWindowsマシン(音楽やら動画やらを楽しむ用)ではMacキーボード(US)を使っています。

まぁこいつ自体は有料のアプリを使ってます(限りなくMacのキーバインドに近づけたかった為)

フリーでもあるようなんですが、いかんせん自分にはなじまなかったので購入に至った訳なんです。


すると今度は開発機であるMac(JISキーボード)のほうが困ったことに・・・

キーバインドが違うのでタイポが遅くなってしまったという。

しょうがないので、表題のアプリを導入。

US配列と同じキー配置ができた。よかったよかった・・・

自分の設定ではUS設定にしたかっただけなんで実はそんなにたいしたことしてなかったり。


KeyRemap4Macbookを使う前は本気でここを参考に弄くってました。
上の方法では目的のキー設定が見つからなかった&分からなかったorz

2010-12-02

[Android]Androidエミュレータの内部ディスクサイズを変更する

普通はやらない訳なんですが・・・

急遽、必要に駆られてやりました。

エミュレータを起動して、
コマンドラインで

adb remount

とコマンドを実行した上で

adb push hoge.apk /system/app

とかやります。

しかしながら

「failed to copy 'hoge.apk' to '/system/app/hoge.apk': Out of memory」

みたいなエラーが出てきます。

原因を調べてみたところ

Android2.1以降では、/system/appがデフォルトでディスクいっぱいまで使っています。
AVDManagerとかで指定するSDカードとかなんとかのオプションはこのエラーに一切関係無しでした(ぉぃ

そこで、エミュレータの起動の際に以下のオプションをつけます

-partition-size SIZE

具体的には
emulator -avd エミュレータ名 -partition-size 128
という感じ。単位はMBです。

これでディスクサイズが変更されたので
色々アプリケーションが/system/app配下に置けます。
/system/app配下に置かれたアプリケーションはパーミッションがシステムににってしまうので
signatureOrSystemなパーミッションも回避できたりとか。

2010-11-25

[maven][Android] mavenでAndroidアプリケーション


需要があるかどうかは分かりませんが、タイトル通りのことを行いたいと思います。
提供されているSDKではAntがどうやら使われているらしい。

以下、ディレクトリ(今回はAndroid2.2を参考に)
/{ANDROID_HOME}/platforms/android-8/ant

こういう感じでAntなら公式に提供されています。

しかしながら、同じようなビルドツール(枠は超えてるかも)のMaven環境は提供されていない。

自分はAntよりもMaven派なので、Mavenで行えないかということを模索。
どうやらMavenセントラル(http://repo1.maven.org/maven2/)には、android.jarがある模様。
ということは、できるのでは無いかと考えてみた。

maven-android-plugin(http://code.google.com/p/maven-android-plugin/)というものがあるでは無いか

という訳でこいつを使って作ってみることにする。
今回の環境
MacOS X 10.6.4(WindowsではXPで試しています)
eclipse 3.6 with ADT+m2eclipse
Maven 2.2.1

eclipseやMavenの設定は割愛(個人に合わせた設定をお願いします)
eclipseを使うのは、あくまでプロジェクト構成が欲しかった&m2eclipseでmaven連携をしやすくしたい為(プロジェクト構成が作れるならeclipseを使う必要は余り無い)

では手順を進めていきます。
1. eclipseでAndroidプロジェクトを立ち上げます(Activityやパッケージやその他設定はご自由にどうぞ)←今回はデフォルトのHelloWorld
2. BuildpathからAndroidを外す
3. 1で作ったプロジェクトを右クリック→Maven→Enable Dependency Management(この時決めるGroupIDやArtifactはご自由にどうぞ)
4. そうするとpom.xmlが開くので設定を追加していく
5. 以下のようにpom.xmlを記述(重要なのは最終成果<package>と依存関係<depedency>、プラグイン<plugin>←そのままコピペで使えます)



4.0.0
Hello
Hello
apk
0.0.1-SNAPSHOT


com.google.android
android
2.2.1
jar
provided






com.jayway.maven.plugins.android.generation2
maven-android-plugin
2.5.2





com.jayway.maven.plugins.android.generation2
maven-android-plugin
2.5.2


${env.ANDROID_HOME}
8

true

true


org.apache.maven.plugins
maven-compiler-plugin
2.3.1

1.6
1.6








6. 設定が終了したら以下のコマンドでtarget配下に*.apkファイルが出来ている

7. Androidを立ち上げて、出来たものをインストールして動作すれば出来上がり

8. 注意点
・androidのスコープはprovidedにしておく(compileにすると駄目)
・maven-compilerのソースやターゲットは1.5以上にする
・環境変数のパスを設定しておく(ANDROID_HOME)
・<platform> の要素は「/{ANDROID_HOME}/plathome/android-X」のX番号が来る。Android2.2だと8になる

機会があればテストに関しても追記したいと思います。

[maven] mavenとeclipse(ver.3.5.2)のビルド結果を同一のものにする方法


表題のようなオーダーがあった。
それもjavac -c -private hoge.classの出力結果レベルで同一にしないといけない(ぉぃ


eclipseのコンパイラはjavacコンパイラと違いjdtというコンパイラ。
確か、最適化よりも高速でビルドに重点を置いてたビルダーだったはず(jikeベースだっけ?)

一方のmavenではpom.xmlにビルド設定としてmaven-compiler-pluginを使うと思うんだけど、
こいつはjavacでビルドしてしまう。

というわけでここで問題になってくるのは以下のもの
・コンパイラが違うので同一に揃える
・コンパイルオプションも同一に揃える

一つ目のコンパイラを揃える方法は意外に簡単。
mavenのビルドをjavacを使うコンパイルでは無くjdtにしてやる。
ではpom.xmlにどういう設定をしてやればいいのかというと以下に変更すればよい。
それぞれの中に記載してやればできる。

maven-compiler-pluginを使う場合





org.apache.maven.plugins
maven-compiler-plugin
2.3.2

jdt
1.6
1.6
UTF-8



org.sonatype.tycho
tycho-compiler-jdt
0.8.0






使わない場合



org.codehaus.tycho
maven-osgi-compiler-plugin

1.6
1.6
UTF-8






2つ目のコンパイルオプションも同一に揃える方法のほうはeclipseの設定を変えてやればよい。
eclipseのデフォルト設定だとクラスファイル生成時にデバッガーが使用する情報まで含めてしまう。
一方でmavenは設定をpom.xmlに記載しないとデバッガーが使用する情報を含めない。
その為差異が出てしまう。
では、どう解消するかというと
eclipseのメニューから「設定>Java>コンパイラー」を選択
クラスファイル生成にある「未使用のローカル変数を保存」のチェックを外してやる

以上の方法で表題の内容が達成できる。

2010-11-14

[AppEngine]appengine ja night #12行って来たよ

遅くなりすぎだけどまとめる。

Pythonフレームワークahaとcoreblog3の紹介

Pythonフレームワークの紹介
・Zope
MVCの導入(ロジックとテンプレートの分離)
→レンダリングが遅いという欠点
プラグイン
・DJango/Turbo gears
O/Rマッパー
Zopeより軽量
ラーニングコスト低い
・WSGI
Webアプリの標準化
コード、テンプレートとWebサーバー接続
抽象化レイヤーの仕組みを提供
・PYLONS
疎結合フレームワーク
開発手法を提供した(pasta)
既存のテンプレートとO/Rマッパーを結合

GAEはどうかというと・・・
・WSGIベース
・DJango内蔵

フレームワークの最近の傾向
・microframework
・ライブラリの自動アップデート、デプロイ手法の提供
・buildout(依存関係を解消)
→bootstrap(pythonのmavenみたいなものか?)
・CI(継続的インテグレーション)

これまでのGAE用のpythonフレームワークに無かったもの
・コントローラをクラスで実装
・webappで実装
・dispatch
・oilは軽量だけど機能が貧弱(ウィジェットやバリデータが無いなど)

フレームワークahaはというと
・フルスタック
・railsライクなルーティング,dispatch
・クラスベースコントローラ
→リクエストをハンドリングするメソッドを明示的に記述する
→CRUDフォームを作るときに利用
→テンプレートは拡張化
・Buildout
→モジュール依存性の解決
→recipe(mavenでいうとこのpom.xmlかな)の定義と実行
→ahaのインストールに使う
・Query的DBキャッシュ
→queryの結果やDBの内容をmemcacheに保存
→キャッシュ用のベースクラスを継承

CoreCMS
・GAEベースのCMS
・ahaをベースにCMS環境を提供

覚えてることをずらずら書いたけどpythonをほとんど使わないのであんまり覚えてないや(ぉぃ

ChannelAPIとMatcherAPIでつくるイベント駆動型Webアプリ

アプリ:http://goo.gl/QvWye

・ChannelAPI
プッシュ型通信サービス用API(XMPP以外のもの)

・MatcherAPI
スケーラブルなリアルタイムマッチングサービス
マッチング条件条件を独自のタスク構文で記述して登録する
エンティティやdictの内容の条件に分析しタスクで通知
数千、数万の条件を数秒でチェックして通知
DBのクエリは過去に対するクエリ、Matcherは未来に対するクエリ
大きすぎるデータは受け取ることが出来ない(数百バイト程度)
→合致したもののリストを返す
Datastoreには全く依存しない
dictの場合は事前にスキーマをを定義できる
クエリは以下のものが使え、ネスト可能
・テキストの部分一致(全文では無い)
・数値
・論理演算


Blogger Syntax Highliter