メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2011年12月13日火曜日

[Android] Intent.ACTION_CALL

いきなり電話かけちゃうのであせった。。。

Intent.ACTION_DIAL

こっちはいきなり電話しちゃうってことはないので安心。。。

.

2011年12月2日金曜日

[Android] エミュレータに位置情報通知


$ telnet localhost 5554
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
geo fix 1 2
OK
 

2011年12月1日木曜日

[foursquare] Venues

現場、犯行現場、会場。


現在位置付近の犯行現場の検索は

https://api.foursquare.com/v2/venues/search

かな。

現在位置付近のトレンド現場は
https://api.foursquare.com/v2/venues/trending
かな。

そして、
現在位置付近のおすすめ現場は
https://api.foursquare.com/v2/venues/explore
かな。

.

[foursquare] APIで認証

APIで認証するには、WebViewなどのEmbededなブラウザか外部ブラウザを
使うしかないらしいよ。

そのサンプル
https://github.com/foursquare/android-oauth-example

あ、OAuthだー

そんだけ.

[foursquare] foursquare

なんじゃらほい。

ということで登録してみた。


そんだけ。
.

2011年10月8日土曜日

[Debian][unzip] 日本語ファイル名の文字化け


$ unzip -O cp932 foo.zip
 

としたいのだけど、debian squeezeのunzipには-Oオプションが無いので
憩いの場さんが
公開されているリポジトリをありがたく利用した。

うん、すばらしー

そんだけ.

.

2011年9月30日金曜日

2011年8月10日水曜日

[Gist][お勉強] blogspotにGistを張る

https://gist.github.com/

にいくといきなりテキストボックスが開いているんで、何か貼り付ける。


そしたら、

https://gist.github.com/1136605

みたいなurlが割り当てられて、

開いたページの右端に"embed"というリンクがあるので押下。

すると


<script src="https://gist.github.com/1136605.js?file=gistfile1.txt"></script>
 

みたいな文字列が出てくるのでコピー。
でblogspot側でペースト。




ほら。

今更なんだけどね。
.

[Debian][GNU Screen] gitリポジトリからインストールするよ(squeeze)

ふと、GNU Screenをsqueezeの4.0.3から4.1.0開発版へ移行したくなったよ。

ということで、

GNU ScreenのプロジェクトページからGitリポジトリの情報をいただき、、、


$ git clone git://git.savannah.gnu.org/screen.git ./screen
 

cloneし始めるのでしばし待つ。

終わったら

$ cd ./screen/src
$ vi INSTALL
 

でINSTALLを確認。

あとはINSTALLのとおり実行すれば良いだけ。

おおむね、以下のとおり。
1) autogen.sh
2) ./configure
3) make
4) make install

で一応、autogen.shも確認。

$ cat autogen.sh
#!/bin/sh
exec autoreconf
 


autoreconfだけみたいね。
autoconf2.13が万が一入ってたら、autoconf2.67に更新しておかないと
EXTENSIONSなんたらが無いって怒られるよ。
そして怒られた。

configureは一応、--prefix=/usr/localでやった。

$ ./configure --prefix=/usr/local
 


で、update-alternativesで追加しといた。

で無事GNU Screen最新版。


$ screen -version
Screen version 4.01.00devel (GNU8cf5efc) 2-May-06
 



そしておもむろにgit log。
おお、、いるいるw

そんだけー
.

2011年8月5日金曜日

[Debian][evolution] Evolution-shell -Message: Network disconnected. Forced offline.

evolutionなるメールソフトを使ってみようかと

apt-get installした。

だけど起動しても


Evolution-shell -Message: Network disconnected. Forced offline.
 

と言われてオンラインにできない。(squeeze)


"Offline Mode" feature fails to detect proper online state for networks that are managed outside of network manager."

なんてのを見つけたんで、
network-managerをapt-get remove
してみた。


evolution動いた。


正しいアプローチじゃないと思うけど、別にいいや。

.

2011年8月4日木曜日

[gitorious.org] すぐ落ちるよ・・・

すぐ落ちるよ・・・

サーバにつながらなくなる


拒否されたのではないかとたまにどきどきする

--
あ、よかった・・・つながった
.

[Android][お勉強] Activityを半透明にしてみるよ

http://developer.android.com/guide/topics/ui/themes.html

のとおり。



<style name="Theme.Translucent">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
</style>
 

なんてなテーマがあるので、半透明にしたいActivityのテーマに適用してやると透明に。


<activity
android:name="jp.co.qsdn.android.iwashi3d.setting.SettingActivity"
android:label="@string/setting_title"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent"
>
 

ってな感じ。

半透明具合や色を変えたいなら、Theme.Translucentのandroid:windowBackgroundの値を
変えてやるみたい。

なのでTheme.Translucentを継承して自前のThemeを用意しちゃう。
ファイル名はres/values/styles.xmlとかres/values/themes.xmlとかかしら。

で継承して作った自前Themeは以下な感じ。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="prefs_background_color">#ae000000</color>
<style name="Theme.PrefsBackground" parent="android:style/Theme.Translucent">
<item name="android:windowBackground">@color/prefs_background_color</item>
</style>
</resources>
 

Theme.PrefsBackgroundというテーマを作ってみた。
で、こいつを


<activity
android:name="jp.co.qsdn.android.iwashi3d.setting.SettingActivity"
android:label="@string/setting_title"
android:launchMode="singleTask"
android:theme="@style/Theme.PrefsBackground"
>
 


ってな感じで指定すればいい感じ。

#ae000000の"#ae"は半透明具合だそうで。アルファ値ね。

.

2011年8月3日水曜日

[Apache] Apacheデバッグ(Debian squeeze)

DebianでのApacheデバッグ.

1) dbg関連をインストールしまっす.


# apt-get install apache2-dbg libapr1-dbg libaprutil1-dbg gdb
 


2) CoreDumpDirectoryディレクティブを指定しまーす.

# vi /etc/apache2/apache2.conf
 

いや

# vi /etc/apache2/sites-enabled/000-default
 

とかかな?

で、適当に

CoreDumpDirectory /tmp
 

を追加.

3)ulimit
rootで以下を実行.

# /etc/init.d/apache2 stop
# ulimit -c unlimited
# /etc/init.d/apache2 start
 


4) コアダンプ!

5) gdbでcoreをのぞく.

# gdb /usr/sbin/apache2 /tmp/core
 


6) dbg系パッケージのアンインストール

7) おしまい



ということは
/usr/share/doc/apache2-dbg/README.backtrace
に書いてあるよ.


.

2011年7月28日木曜日

[Android]Androidマーケットの検索ボックスでディベロッパーが開発したアプリ一覧

Androidマーケットの検索ボックスで


"pub:ディベロッパー名"
 

を入力すると、そのディベロッパーが開発したアプリ一覧が表示される。

まさに今知った。

へぇー
.

[その他] ぎっくり腰その後

痛みはひいた。

でも、シップはってたところが思いっきりかぶれた・・・

.

[Android][その他] BOIDSアルゴリズムなるもので遊んでみた

Androidアプリの個人的ネタとして、
Compiz fusionのatlantisプラグイン(metastabilityさん/unpushさんの方)で知った、
群れをシミュレートするというBOIDSアルゴリズムで遊んでみた。

BOIDSとは
1987年にCraig Raynoldsさんによって発表された群れモデルで
3つの基本ルールだけで群れをシミュレートできる、というもの。
詳細はこちら

ルールをさらっと書いておくと、
1) 近づきすぎたら離れるよ(Separate)
2) 近い仲間と整列するよ(Alignment)
3) 群れの中心へいくよ(Cohesion)
って感じ。

勢いで3つほど。
1つ目は、「鰯の群れ」。1種の群れをシミュレートした。
2つ目は、「甚平鮫と鰯」。1種+敵ではないもう1種
3つ目は、「撞木鮫と鰯」。1種+敵のもう1種

1つ目はOpenGLの初期化にミスってて、リリースした途端、
エラーレポートがいっぱい・・・
「ウィルスが混入している」とのコメントまでいただいたorz
(実際に混入しているわけではなく、エラーに対しての怒りだと思う・・)

2つ目以降はわりと安定的にうごいてる。
甚平鮫にしたがった鰯とか、結構個人的にはいい感じ。

3つ目は敵が近づくと、逃げるようにしたので
せっかくの「群れ」がバラバラに・・・


ダウンロード数にビックリ
リリースしても数人が見てくれるだけだろうかと思ったら、
みなさんバンバンダウンロードしてくれるみたいで・・・
なんかうれしいのと同時に申し訳ない気も・・・
(といっても全体から見れば少数かもしれないけど)

で、ダウンロードしてくれている方々の国を見ると、
アメリカ合衆国と台湾、香港がダントツ。
だもんで説明文に中国語(translated by google)を入れたりしてみた。
よく知らないけど、簡単にしたやつじゃ無い方の中国語ね。

続き
BOIDSアルゴリズムに基づく、といっても毎回3ルールを計算しているわけではなく、
Separateしなきゃいけないときは、Separateだけで計算を終了したりしてるので
より本物(?)のBOIDSに近づけたいなぁ、、とか思ったり。

あと、どこのデバイスか分からないプラットフォームでエラーレポートが1つ来てるんだけど
特定できない。。。

でも、BOIDSっておもしろいねー

--
ちなみに全部Apache Software License2.0
つか、このソースきたねぇ・・・
そして、何の役にも立ちません・・・
--
毎回3ルール計算するよう修正した!
--
グラフィックはもちろんショボめ・・・
だって重いじゃない・・・
ライブ壁紙だし

--
評価が★5個と★1個でまっぷたつ。
BOIDSにときめいた人とそうでない人かな・・・
.

2011年7月25日月曜日

2011年7月23日土曜日

[Android] Traceview

ドキュメント見りゃ分かるんだけど、とりあえずメモ。

traceviewとは、
とある方法で保存した実行ログを、見やすくグラフィカルに表示する
閲覧ツールでっす。

デバッグやパフォーマンスの改善に役立ちます。

使い方ー
測定したいところを


Debug.startMethodTracing("erer");
 



Debug.stopMethodTracing();
 

で囲みます。

Debug.startMethodTracingやDebug.stopMethodTracing()を書いた
ソースファイルで、android.os.Debugをインポートします。


import android.os.Debug;
 


AndroidManifest.xmlを編集し、sdcardに書き出すパーミッションを与える。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 


そしたら、コンパイル&インストール。


$ adb install bin/なにか-debug.apk
 

で、実行。

すると、Androidマシンの/sdcard配下にerer.traceというファイルが
できているので、取ってくる。
erer.traceはstartMethodTracingの引数で"erer"と指定した場合。

$ adb pull /sdcard/erer.trace
 


で、traceviewで閲覧。

$ traceview ./erer.trace
 


そんだけー

.

[その他][ohloh] 登録してみた

なんだかよくわからないまま、今更ながら、とりあえず登録してみた。

プロファイルへのリンクが張れるらしいので張ってみた。

kudoランク1っていうことは、全然貢献してません!ということかしら。

うん。。


ってあれ?おかしいな。大きいWidgetの方を張ったつもりが。。。

ま、いっか。


--
mod_chxjはsourceforge.jpにおいてあるからか、
project searchで出てきた。
違うか、、、enlistmentsしてくれたんだねー

Enlistments先をsourceforge.jpに変えてみた。
importって結構時間かかるね・・・
終わったと思ったら今度はcount・・・


ちょい前のソースで
48人年だそうで。
2億円〜4億8千万円ぐらい?
ありえないw

でも、まぁ結構書いたんだなぁ・・・
HTMLパーサーもCSSパーサーもフルスクラッチだし。

もちろん自分が作ったものなので★5つ!w
positionも登録(分かってないでやってるorz)

---

なんだか使い方間違ってる気が・・・

.

2011年7月19日火曜日

2011年7月13日水曜日

[Apache][その他] r

それはもしかすると


request_rec *r


の"r"かもかもしれない

.

[Apache][その他] apacheのcoreファイル


CoreDumpDirectory /tmp
 

って書いておくと、/tmpに吐き出されるよ。


それでも出なきゃ、

$ ulimit -c
 

って叩くと何か分かるかもね。

とりあえずは

$ ulimit -c unlimited
 

でいいんじゃない?


で、core吐かれたら

$ gdb /usr/sbin/apache2 /tmp/core
 

でいいんじゃないかな。
環境によるけど。

.

2011年7月1日金曜日

[その他] gdb apache "in ?? ()"

デバッグシンボルが無いよ。

-gオプションをつけて再コンパイルすればいいんじゃない?

.

[その他][室温] ただいまの我が事務所の室温

19:07現在 34度 湿度48%

.

2011年6月30日木曜日

[その他][室温] ただいまの我が事務所の室温

昨日死ぬかと思ったので温度計買ってきた。

計測開始時点 32度
--
19:09現在 33度
--
19:52現在 34度

--
うん、今日は涼しいw

--
22:34現在 35度 湿度48%
--

24:00現在 36度 湿度46%

おや??
.

[Android][お勉強] external libraryを設置

android-sdk-linux_x86/platforms/android-7/templates/android_rules.xml

あたりを見ると、


<!-- Directory for the third party java libraries -->
<property name="external.libs.dir" value="libs" />
<property name="external.libs.absolute.dir" location="${external.libs.dir}" />
 

ってなってるよ。

なのでプロジェクト直下のlibsに置けばいいんじゃない?

.

2011年6月29日水曜日

[Android][お勉強] proguard

proguardを使ってみる。
(SDK revision 10)


http://developer.android.com/guide/developing/tools/proguard.html

のとおり。

default.propertiesの一番下にでも


proguard.config=proguard.cfg
 

を書き込んで、AndroidManifest.xmlなりでDebuggableならそれをはずし、リリースモードでコンパイル。


$ ant release
 


ん。そんだけ。proguardはSDKについてくるんで別途インストール
する必要なし。

ant releaseするとbinディレクトリの下にproguardってディレクトリが
できる。で、そのファイルは先のURLの先のとおり。

proguardが失敗する場合があるのでそれは別途proguard.cfgに設定書き込む。

Stack TraceもObfuscatedな感じなのでretrace.shを使うんだってさ。
これはまだ試してない。

.

2011年5月28日土曜日

[Android][お勉強] 実機のスクリーンショットを取る(Debian Lenny)

実機のスクリーンショットを取るよ.

Android SDKのtools以下にあるddmsを実行する.
が、tools配下にcdしてからじゃないと起動できないみたい.

ということで、


$ cd ~/android-sdk/tools
$ ddms
 

とする.

すると、Dalvik Debug Monitorなるものが起動する.
あとは勘で.

端末選んで、キャプチャ取りたいタイミングで
メニューの「Device」-> 「Screen capture」で
いいんでない?


ほら取れた.



.

[Android][お勉強] 実機でデバッグ(Debian Lenny/Squeeze)

http://developer.android.com/guide/developing/device.html
のとおり。

1) microUSBケーブルを買う.
充電専用ケーブルはダメよorz

2) /etc/udev/rules.d/92-android.rules を新規追加or編集
内容は以下のとおり.
(au IS05用)
51-android.rulesではなくて92-android.rulesという91以降にしないと
ダメだって誰かが書いててくれたけど、どこだったか。。。


# For Gusty/Hardy, edit the file to read:
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE="0666"
# For Dapper, edit the file to read:
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="04dd", MODE="0666"
 

SYSFS{idVendor}=="04dd"はSHARP用。
別ベンダーの場合、http://developer.android.com/guide/developing/device.htmlの「USB Vendor IDs」を見ていい感じに選択。


3) udevリロード


# /etc/init.d/udev reload
 


4) dmesg

#dmesg
[1399644.464573] sdb: sdb1
[1399674.493844] usb 1-7: USB disconnect, address 8
[1399675.531427] usb 1-7: new high speed USB device using ehci_hcd and address 9
[1399675.682434] usb 1-7: configuration #1 chosen from 1 choice
[1399675.684372] scsi7 : SCSI emulation for USB Mass Storage devices
[1399675.688897] usb-storage: device found at 9
[1399675.688897] usb-storage: waiting for device to settle before scanning
[1399675.691590] usb 1-7: New USB device found, idVendor=04dd, idProduct=93ff
[1399675.691590] usb 1-7: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[1399675.691590] usb 1-7: Product: au IS05 HSUSB Device
[1399675.691590] usb 1-7: Manufacturer: SHARP Corporation
[1399675.691590] usb 1-7: SerialNumber: SSHEN0XXXXX
[1399681.416448] usb-storage: device scan complete
[1399681.416448] scsi 7:0:0:0: Direct-Access SHARP au IS05 microSD 1.00 PQ: 0 ANSI: 0
[1399681.427172] sd 7:0:0:0: [sdb] Attached SCSI removable disk
 

認識されている模様.
SerialNumberは隠しておいた方がよい?のかどうか分からないので
とりあえず他者に習う。

5) adb devices

$ adb devices
s$ adb devices
List of devices attached
SSHEN0XXXXX device
 

認識されている模様

6) いつものようにant debug&ant install

7) そしていつものようにadb logcat


---
adb logcat実機だと速すぎてよくわからんw
---
Debian squeezeでやったら、
????? no permissionsって言われた.

なので、

$ sudo -s
# adb kill-server
# adb start-server
# exit
$
$ adb devices
 

ってやったらOKだった.
そんだけー
.

2011年5月14日土曜日

[その他] 投稿が消えたw

消えたw

---

そして復旧したw
.

2011年5月12日木曜日

[Android][お勉強] 必要そうなAVD

とりあえずひととおりのAVDをcreateしてみた。

AVDは以下な感じ。


$ android list avd
Available Android Virtual Devices:
Name: em15
Path: /home/konno/.android/avd/em15.avd
Target: Android 1.5 (API level 3)
Skin: HVGA
Sdcard: 64M
---------
Name: em16
Path: /home/konno/.android/avd/em16.avd
Target: Android 1.6 (API level 4)
Skin: HVGA
Sdcard: 64M
---------
Name: em16-qvga
Path: /home/konno/.android/avd/em16-qvga.avd
Target: Android 1.6 (API level 4)
Skin: QVGA
Sdcard: 64M
---------
Name: em21-854
Path: /home/konno/.android/avd/em21-854.avd
Target: Android 2.1-update1 (API level 7)
Skin: WVGA854
Sdcard: 64M
---------
Name: em22-800
Path: /home/konno/.android/avd/em22-800.avd
Target: Android 2.2 (API level 8)
Skin: WVGA800
Sdcard: 64M
---------
Name: em22-1024
Path: /home/konno/.android/avd/em22-1024.avd
Target: Android 2.2 (API level 8)
Skin: 1024x600
Sdcard: 64M
---------
Name: em231
Path: /home/konno/.android/avd/em231.avd
Target: Android 2.3.1 (API level 9)
Skin: HVGA
Sdcard: 64M
---------
Name: em233
Path: /home/konno/.android/avd/em233.avd
Target: Android 2.3.3 (API level 10)
Skin: HVGA
Sdcard: 64M
---------
Name: em30
Path: /home/konno/.android/avd/em30.avd
Target: Android 3.0 (API level 11)
Skin: WXGA
Sdcard: 64M
 


そんだけー
.

2011年4月29日金曜日

[Android][お勉強] ファイルシステム

AndroidはLinuxが動いているので、完全なルートファイルシステムがマウントされているそうで。

とういうことで早速。

まずはプロジェクト作成。


$ android create project -n myfiles -t 7 -p /home/konno/work/t/myfiles -k jp.co.qsdn.android -a MyFiles
 


で、MyFiles.java修正。

package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import java.io.*;

public class MyFiles extends Activity
{
private int counter = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText(createFileView("/"));
setContentView(textView);
}

protected String createFileView(String fileName) {
File f = new File(fileName);
String s = fileName + "\n";
counter++;
if (counter >= 10) return s;
if (f.isDirectory() ) {
File fls[] = f.listFiles();
for (int i=0;i<fls.length;i++) {
s = s + createFileView(fls[i].getPath());
}
}
return s;
}
}
 

というどうしょうもないActivityに。

で、コンパイル。

$ ant debug
 


で、実機へぽい。

すると画面には・・・・

/
/dev
/dev/pts
/dev/socket
/dev/socket/property_service
/dev/socket/void
・・・
 

なんてなのが表示された。

ふーん。。。

パッケージは

/data/data/パッケージ名
 

と言う感じで設置されるらしい。

入出力する際は、大きなデータを書き込むとI/Oエラーになる。
だって領域小さいもんね。

SDカードは

/sdcard
 

なんですかね。。。
SDカードに書き込む際は、WRITE_EXTERNAL_STORAGEパーミッションを要求しとかないとダメとのこと。(マニフェストファイル)

そんだけー
.

[Android][お勉強] インスタンス状態

永久的に保存する必要のない、現インスタンスの状態は


android.os.Bundle

で管理される。

*.onSaveInstanceSate()や*.onRestoreInstanceState()
あたりがインスタンス状態を保存/復帰するいい感じのタイミングで呼ばれるとのこと。
onSaveInstanceStateで保存された「状態」は、再初期化される直前に
リストアされる。

.

[Android][お勉強] SharedPreferences

データを保存しておくために、

1) Shared Preferences
2) Internal Storage
3) External Storage
4) SQLite Databases
5) Network Connection

が用意されているそうな。
その中に、SharedPreferencesがある。

設定画面を構築する際に用いるPreferenceActivityは
ユーザのPreferenceを保存するのに内部でSharedPreferenceを使っているんだって。
でもSharedPreferenceは厳密にはユーザPreferenceを保存するためのものではないそうな。

SharedPreferencesはプリミティブなデータのkey-valueストア。
ユーザセッションにまたがってデータを受け渡しできる。

.

[Android][お勉強] より宣言的に

Androidでは、手続き的にデザインを記述(Javaコードごりごり書く)する方法と宣言的にデザインを記述(XMLでごりごり)する方法の2つの方法をサポートする。

Googleさんは宣言的にアプローチすることを勧めているとのこと。


TextView textView = new TextView(this);
textView.setText("あいうえお");
setContentView(textView);
 

とする代わりにres/layout/main.xmlで

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="あいうえお"
/>


と書くこともできる。

.

[Android][お勉強] リソース

ローカライズされた文字列、画像、プログラムが必要とするコード以外の情報のこと。
リソースはプロジェクトのresディレクトリに配置する。

.

[Android][お勉強] コンテンツプロバイダ

アプリケーション間でグローバルなデータを共有するための仕組み。

.

[Android][お勉強] Service

Unixなどのデーモンと同じように、ユーザと直接的なやりとりを行わず
バックグラウンドでこっそり生きているタスクのことをサービスという。


現在のアクティビティが終了した後も実行され続けるバックグラウンドプロセスを起動するための方法。
.

[Android][お勉強] Intent

AndroidはIntentという部品が強力らしい。

Intentとは、アクションを記述するメカニズムで
ほとんどすべてのアクションがIntentを経由するとのこと。

Intentがあることで、コンポーネントの再利用、交換がより簡単になる。

.

[Android][お勉強]コマンドラインでログ


Log.d("なんたら","かんたら")
 

というのをあっちこっちに埋め込んだりするんだけど
そのログを見るには

$ adb logcat
 

ってすればよいだけ。

そして、そんだけー

.

2011年4月26日火曜日

[Android][お勉強] アプリケーション

アプリケーション=プロセス、ではないらしい。

プロセスは死んでいても、アプリケーションは動作中
ということがありえる。

端末を縦から横にすると一旦プロセスが終了し、再起動されるとのこと。

アプリケーションのライフサイクルは、プロセスのライフサイクルと
同じではない。

ちなみに、電源を入れると最初に表示されるアプリはHomeアプリケーションとのこと。

これはおもしろいかも。

.

[Android][お勉強] Activity

Activityとは、「ユーザインタフェース画面」らしい。


.

[Android][お勉強] コマンドラインツールのドキュメント

リンク。

http://d.android.com/guide/developing/tools


.

[Android][お勉強] Androidの特徴

なんで今Androidかってーと、
単にAndroidに機種変したからでしたー。

ということでせっかくだからちゃんと勉強してみるか、
って感じ。


まずはAndroidって何よってところから。

Androidの特徴
1) Linux、その他のオープンソースを基礎とするフリー&オープンな開発プラットフォーム
2) コンポーネントアーキテクチャ
3) ライフサイクル管理
4) 高品質グラフィックス・サウンド
5) 高い移植性
だそうで。

DalvikというVMで動作しているんだってさ。
DalvikはJavaクラスファイルをdexというファイル形式に変換後
実行するのでJavaVMではないらしい。

ちなみに携帯各社が変更してもソースを公開しなくてよいように、
ライセンスはGPLではなくApacheライセンス2.0。

.

[Android][お勉強] API Levelって何よ

「Androidプラットフォームのバージョンによって提供されるフレームワークAPIのリビジョン」

だそうで。

ふーん。


ということは、WallpaperServiceとか使う場合には、、、
API Level 7以降を使う、ということで良いのかしらん。

--
できたー

.

2011年4月25日月曜日

[Android][お勉強] 実機で動かす

なんか作ったら、実機で動かしてみたくならない?
デバッグとかいいから、とにかく。

そんなことないならどうでもいいけど。

とりあえずUSBでデバッグとか、インストールとか
はおいといて、WWWサーバにぽいっとおいてダウンロードすれば
いいだけ。

まぁ、そりゃそうだ。

一応「提携元不明のアプリ」という設定にチェックを入れて
おく必要があるかもしれない。


で、実行してみると・・・んちゃ!

とりあえずは後はもうJava。
とにかくJava。
ただのJava。
きっと・・・多分・・・

そんだけ。


.

2011年4月24日日曜日

[Android][お勉強] アプリ開発してみるのメモ

Androidアプリでも作ってみるメモ.

android SDK落としてきてJDKが動く環境は既にあるっていうことで。

やることはおおむね以下のとおりだよーん。
1) android用プロジェクトの作成
$ android create project なんたらかんたら
2) ソース書く
3) ant
とりあえずはant debug。
$ ant debug
4) apkファイルのエミュレータへのインストール
$ adb install なんたらかんたら


では早速。


$ android list target
 

ってやると

android list target
Available Android targets:
id: 1 or "android-3"
Name: Android 1.5
Type: Platform
API level: 3
Revision: 4
Skins: QVGA-P, QVGA-L, HVGA-L, HVGA (default), HVGA-P
id: 2 or "Google Inc.:Google APIs:3"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 3
Description: Android + Google APIs
Based on Android 1.5 (API level 3)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: QVGA-P, HVGA (default), HVGA-L, QVGA-L, HVGA-P
id: 3 or "android-4"
Name: Android 1.6
Type: Platform
API level: 4
Revision: 3
Skins: WVGA854, WVGA800 (default), QVGA, HVGA
id: 4 or "Google Inc.:Google APIs:4"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 1.6 (API level 4)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WVGA854, HVGA, QVGA, WVGA800 (default)
id: 5 or "SHARP Corporation:JN-DK01:4"
Name: JN-DK01
Type: Add-On
Vendor: SHARP Corporation
Revision: 1
Description: SHARP JN-DK01 Add-on
Based on Android 1.6 (API level 4)
Libraries:
* jp.co.sharp.android.hardware (hardware.jar)

* jp.co.sharp.android.io.obex (obex.jar)

Skins: WVGA854, HVGA, QVGA, WVGA800, JNDK01 (default)
Adds USB support for devices (Vendor: 0x04DD)
id: 6 or "android-7"
Name: Android 2.1-update1
Type: Platform
API level: 7
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 7 or "Google Inc.:Google APIs:7"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 2.1-update1 (API level 7)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 8 or "android-8"
Name: Android 2.2
Type: Platform
API level: 8
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 9 or "Google Inc.:Google APIs:8"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 2.2 (API level 8)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 10 or "Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8"
Name: GALAXY Tab Addon
Type: Add-On
Vendor: Samsung Electronics Co., Ltd.
Revision: 1
Based on Android 2.2 (API level 8)
Skins: WQVGA400, WVGA854, GALAXY Tab (default), HVGA, WQVGA432, QVGA, WVGA800
id: 11 or "android-9"
Name: Android 2.3.1
Type: Platform
API level: 9
Revision: 2
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 12 or "Google Inc.:Google APIs:9"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 2
Description: Android + Google APIs
Based on Android 2.3.1 (API level 9)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 13 or "Sony Ericsson Mobile Communications AB:EDK:9"
Name: EDK
Type: Add-On
Vendor: Sony Ericsson Mobile Communications AB
Revision: 1
Description: XPERIA Device
Based on Android 2.3.1 (API level 9)
Libraries:
* com.sonyericsson.eventstream_1 (com.sonyericsson.eventstream_1.jar)
Library for Android Market filtering
Skins: WQVGA400, WVGA854, Xperia (default), HVGA, WQVGA432, QVGA, WVGA800
id: 14 or "android-10"
Name: Android 2.3.3
Type: Platform
API level: 10
Revision: 1
Skins: WQVGA432, WVGA854, WVGA800 (default), WQVGA400, QVGA, HVGA
id: 15 or "Google Inc.:Google APIs:10"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 2.3.3 (API level 10)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WQVGA400, WVGA854, HVGA, WQVGA432, QVGA, WVGA800 (default)
id: 16 or "android-11"
Name: Android 3.0
Type: Platform
API level: 11
Revision: 1
Skins: WXGA (default)
id: 17 or "Google Inc.:Google APIs:11"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 1
Description: Android + Google APIs
Based on Android 3.0 (API level 11)
Libraries:
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: WXGA (default)
 

ってなってる.
さて、このlistの中からターゲットとなる

id: 5 or "SHARP Corporation:JN-DK01:4"
 

を何となく選び、android用プロジェクトを作成するよ.

プロジェクト作成のためにはandroidコマンドを叩いちゃう.
android --helpでチェック.

Valid actions are composed of a verb and an optional direct object:
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
- update avd : Updates an Android Virtual Device to match the folders of a new SDK.
- create project : Creates a new Android project.
- update project : Updates an Android project (must already have an AndroidManifest.xml).
- create test-project : Creates a new Android project for a test package.
- update test-project : Updates the Android project for a test package (must already have an AndroidManifest.xml).
- create lib-project : Creates a new Android library project.
- update lib-project : Updates an Android library project (must already have an AndroidManifest.xml).
- update adb : Updates adb to support the USB devices declared in the SDK add-ons.
- update sdk : Updates the SDK by suggesting new platforms to install if available.


と出るんで、必要なのは"create project".

で、で、
のりで"android --help create project"と叩いてみる.
create projectに絞られたhelpが表示された.

$ android --help create project

Usage:
android [global options] create project [action options]

Global options:
-v --verbose Verbose mode: errors, warnings and informational messages are printed.
-h --help Help on a specific command.
-s --silent Silent mode: only errors are printed out.

Action "create project":
Creates a new Android project.
Options:
-n --name Project name
-t --target Target ID of the new project [required]
-p --path The new project's directory [required]
-k --package Android package name for the application [required]
-a --activity Name of the default Activity that is created [required]
 

ん。おっけー。
ということで

$ android create project -n Ncha -t 5 -p /home/konno/work/t/ncha -k jp.co.qsdn.android -a Ncha


と入力してベーン!

その結果指定したディレクトリに色々できるよ!

Created directory /home/konno/work/t/ncha/src/jp/co/qsdn/android
Added file /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java
Created directory /home/konno/work/t/ncha/res
Created directory /home/konno/work/t/ncha/bin
Created directory /home/konno/work/t/ncha/libs
Created directory /home/konno/work/t/ncha/res/values
Added file /home/konno/work/t/ncha/res/values/strings.xml
Created directory /home/konno/work/t/ncha/res/layout
Added file /home/konno/work/t/ncha/res/layout/main.xml
Added file /home/konno/work/t/ncha/AndroidManifest.xml
Added file /home/konno/work/t/ncha/build.xml
Added file /home/konno/work/t/ncha/proguard.cfg
  

と、こんな感じぃ.

プロジェクトのホームは

/home/konno/work/t/ncha
 

なので、

$ cd /home/konno/work/t/ncha
 

すると、カレントにbuild.xmlファイルがあるんで

$ ant help
Buildfile: /home/konno/work/t/ncha/build.xml
[setup] Android SDK Tools Revision 10
[setup] Project Target: JN-DK01
[setup] Vendor: SHARP Corporation
[setup] Platform Version: 1.6
[setup] API level: 4
[setup]
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup]
[setup] ------------------
[setup]
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
[setup]
[setup] Importing rules file: tools/ant/main_rules.xml

help:
[echo] Android Ant Build. Available targets:
[echo] help: Displays this help.
[echo] clean: Removes output files created by other targets.
[echo] compile: Compiles project's .java files into .class files.
[echo] debug: Builds the application and signs it with a debug key.
[echo] release: Builds the application. The generated apk file must be
[echo] signed before it is published.
[echo] install: Installs/reinstalls the debug package onto a running
[echo] emulator or device.
[echo] If the application was previously installed, the
[echo] signatures must match.
[echo] uninstall: Uninstalls the application from a running emulator or
[echo] device.

BUILD SUCCESSFUL
Total time: 1 second
 

とすれば大体分かるはず.
とりあえずは、ant debugでapkファイルを作ってみっペ。
せっかくだからソースもちょっとだけいじるよ.

$ vi /home/konno/work/t/ncha/src/jp/co/qsdn/android/Ncha.java
 

として

package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;

public class Ncha extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
 



package jp.co.qsdn.android;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Ncha extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("んちゃ!");
setContentView(textView);
}
}
 

と変更。

http://developer.android.com/reference/packages.html
に行けばいつものjavadocは見れると。

で、ant debug。

$ ant debug
Buildfile: /home/konno/work/t/ncha/build.xml
[setup] Android SDK Tools Revision 10
[setup] Project Target: JN-DK01
[setup] Vendor: SHARP Corporation
[setup] Platform Version: 1.6
[setup] API level: 4
[setup]
[setup] ------------------
[setup] Resolving library dependencies:
[setup] No library dependencies.
[setup]
[setup] ------------------
[setup]
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
[setup]
[setup] Importing rules file: tools/ant/main_rules.xml

-debug-obfuscation-check:

-set-debug-mode:

-compile-tested-if-test:

-pre-build:

-dirs:
[echo] Creating output directories if needed...

-aidl:
[echo] Compiling aidl files into Java classes...

-renderscript:
[echo] Compiling RenderScript files into Java classes and RenderScript bytecode...

-resource-src:
[echo] Generating R.java / Manifest.java from the resources...

-pre-compile:

compile:
[javac] /home/konno/android-sdk-linux_x86/tools/ant/main_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 2 source files to /home/konno/work/t/ncha/bin/classes

-post-compile:

-obfuscate:

-dex:
[echo] Converting compiled files and external libraries into /home/konno/work/t/ncha/bin/classes.dex...

-package-resources:
[echo] Packaging resources
[aapt] Creating full resource package...

-package-debug-sign:
[apkbuilder] Creating Ncha-debug-unaligned.apk and signing it with a debug key...

debug:
[echo] Running zip align on final apk...
[echo] Debug Package: /home/konno/work/t/ncha/bin/Ncha-debug.apk

BUILD SUCCESSFUL
Total time: 4 seconds
 

できたー。

したらエミュレータ動かすよ。
AVDは作っといてね。

$ emulator -avd JNDK01
 

あ、JNDK01は先に作っておいたAVDね。

で、で、いよいよ先に作ったNchaをインストールするよ。
インストールにはadbを使う。

apkファイルは/home/konno/work/t/ncha/bin/Ncha-debug.apkにあるので

$ adb install /home/konno/work/t/ncha/bin/Ncha-debug.apk
90 KB/s (4546 bytes in 0.049s)
pkg: /data/local/tmp/Ncha-debug.apk
Success
 

でインストール完了。

virtual端末に行って、メインメニューを出すと、あら不思議。
Nchaアプリがあるよ。

で、実行してみると、、、、んちゃ!

そんだけー
.

2011年4月12日火曜日

[その他] 「正常化の偏見」

自分だけは大丈夫、と思ってしまうことを

「正常化の偏見」

というらしい.

自分だけはダメかも、と思ってしまうことは

「異常化の偏見」

というかどうかは知らない.
.

[xml] コメント

xmlのコメントは


"<!--"

"-->"
 

なんだけど、このコメント間に"--"があるとxmlでエラーとなる.
だから
"--->"とかはNG.
今更なんだけど、見落としてた・・・orz

.

[その他]flashblock

flashうぜーです.
うーん、皆さんはうっとおしくないのかなぁ・・・
動画とか?

・・・ゲームとか?

firefox使うときには
flashblockというプラグインでブロックしてる.
かなり素敵.
Chromeにもあるよね.

Android2.2でフラッシュ対応とのこと、Googleにがっくり.
flash見えないのが特に良かったのに・・・・
(もちろん使ってないけど)

と思ったらflashblock for androidというのがあるね.
と思ったらnot needed?んん?

.

2011年4月8日金曜日

[その他] ATMの節電

近所のATMがすべて節電で営業停止.

ATMって節電で営業停止していいものなのかなぁ・・・
ちょっと微妙だと思った.
自分は移動できるからいいけど.

そんだけ.
--
>自分は移動できるからいいけど.
と思ったらATM全滅??

うーむ、なら計画停電で時限的に停電してもらった方が良い気が・・・
割とライフラインかも...orz
.

2011年4月6日水曜日

[その他] GeoTrustの証明書

geotrust.comからSSL買った.

pendingになった....


で問い合わせたら、日本語読めないとのこと.

あれ?日本語?

どうやら姓名を日本語で入れてしまったらしい.
再注文してくれとのことだったので、再注文した.

今度はすぐに発行された.

めでたしめでたし.

2011年3月25日金曜日

[Apache] disk_cache

mod_disk_cache使って一旦キャッシュに入ると
以後fixup_headersが呼ばれない。。。

.

2011年3月23日水曜日

[python][django] 画面遷移制御ってどうやるんだろう・・・

djangoで画面遷移制御ってどうやるんだろう・・・

viewsがいわゆるControllerにあたるらしい。
で、templateがいわゆるViewにあたるらしい。


まだまだ勉強中なので、いずれ見つかるかもしれないけど、
とりあえず分からないので
input type="submit"のname属性と現ページを保持する
_pageパラメータで遷移することにした。

form.html、confirm.html、complete.html
の3つのページがあるものとして、
form.htmlは入力フォーム、confirm.htmlは確認画面、
complete.htmlは完了画面。

form.htmlで、


<input type="hidden" name="_page" value="0" />
<input type="submit" name="_target1" value="次へ" />
 

とし、
confirm.htmlでは

<input type="hidden" name="_page" value="1" />
<input type="submit" name="_target0" value="戻る" />
<input type="submit" name="_finish" value="登録" />
 

などとして、遷移制御。
Spring Framework(?)のまね。

views.pyでは

_page_re = re.compile(r'^_page$')

def _get_current_page(request, defvalue):
for key in request.POST.iterkeys():
if _page_re.match(key):
return int(request.POST['_page'])
return defvalue


ってな感じでgetCurrentPageを実装。
そして、

target_re = re.compile(r'^_target(\d)')
finish_re = re.compile(r'^_finish$')
TARGET = [
u'form.html',
u'confirm.html',
u'complete.html',
]

def _get_target_page(request, defvalue):
for key in request.POST.iterkeys():
if target_re.match(key):
p_no = target_re.search(key)
return int(p_no.group(1))
if finish_re.match(key):
return len(TARGET)-1
return defvalue


って感じでgetTargetPageを実装。
んで、currentとtargetを使って表示すべき画面をrenderすると。

でも、これだとdjangoのやり方では無いのではないかなぁ。。。
うーむ。。。。

.

----

って書いてて気づいたけど
has_keyした方がいいね!

.

2011年3月18日金曜日

[Python][django] チュートリアルメモ6(debian lenny)

チュートリアルに従ってごちゃごちゃいじってると、、、

TemplateSyntaxErrorが起きる。

Caught an exception while rendering: coercing to Unicode: need string or buffer, long found

と言われる。

modelsの__unicode__でチュートリアルどおりやると


def __unicode__(self):
return self.id
 

と書くことになるけど、django側で表示しようとする際に
__unicode__を呼んでunicode型のものを取得しようとするんだけど
self.idってInteger型なんでunicode型ではないものを返してしまうと。

だもんで、unicode型に変換して返すんだって。

ということで、

def __unicode__(self):
return u"%s" % self.id
 

とすることで回避。
正しいかどうかは知らない。

.

[Python][django] チュートリアルメモ5(debian lenny)

adminページをカスタマイズするチュートリアルやった。

settings.pyのTEMPLATE_DIRに自分のテンプレート置き場を指定し、
Debian Lennyだと


/usr/share/python-support/python-django/django/contrib/admin/templates/
 

あたりに元テンプレートがあるので、コピーして使えって書いてある。

appppp/admin.pyで管理画面での入力項目の出し方なんてのを
カスタマイズできる。
fieldsetsを使えば、複数の項目をグルーピングして表示できるし、
classesにcollapseを指定すると表示/非表示を切り替えるリンクがついて
表示/非表示を切り替えたりできると。

class BoyoyonAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['abc']}),
('ああああ', {'fields': ['aaa','bbb'], 'classes': ['collapse']}),
]
 

な感じ。
上記だと"ああああ"というタイトルで、項目aaaと項目bbbが一括りで表示され、さらに非表示/表示リンクがつく。

あ、ちなみに'ああああ'って使ってるけどもちろん

# -*- coding: utf-8 -*-
 

って書いてます。


さて、次はPart3に突入。

.

[Python][django] チュートリアルメモ4(debian lenny)

さんざんデータベースAPIと戯れた!

のでチュートリアル2に突入。

あ、ちなみにチュートリアルはいつものdocディレクトリにあるのを見てます。


$ w3m file:///usr/share/doc/python-django/html/index.html
 

って感じで。
で今
Tutorial: Writing your first Django application

Part2に来たところ。

Admin機能を有効にすっぺ
settings.pyのINSTALLED_APPSにdjango.contrib.adminを追加っと。

で、python manage.py syncdbをべーん。

INSTALLED_APPSに追加したらsyncdbしなきゃいけないんだってさ。

んで、urls.pyのコメントになっている以下の部分のコメントをはずす。

from django.contrib import admin
admin.autodiscover()
 

という部分と

(r'^admin/(.*)', admin.site.root),
 

という部分。
コメント外したらサーバ実行。

$ python manage.py runserver
 


http://127.0.0.1:8000/
にアクセス!

管理画面が表示された。

が、早速パスワード忘れた。。。
チュートリアルPart1で登録したらしい。。。
あれ?そうだっけ?

ので、mysql -uroot してdrop database test;して
create database test;して再度

$ python manage.py syncdb
 

初めてsyncdbするときにスーパーユーザとパスワード登録するので
今度は覚えておくよ。

で、ログイン。
おお、ログインできた!

今apppppのmodels.pyは以下な感じ。

# -*- coding: utf-8 -*-
from django.db import models

# Create your models here.
class Boyoyon(models.Model):
abc = models.TextField(max_length=20)
 

で次は自分で作ったapppppというappのBoyoyonを管理画面で操作できるよにしてみる。
そのためにはadmin.pyというファイルをapppppディレクトリの下に作るらしい。
admin.pyの内容は以下のとおり。

from boyoyon.appppp.models import Boyoyon
from django.contrib import admin

admin.site.register(Boyoyon)
 

で、サーバ再起動。
すると管理画面にBoyoyonが現れる。
Boyoyonをクリックすると、、、、Boyoyonの1レコードを編集することができる。
TextFieldで作ったらTextField用のinputフォームに、
CharFieldで作ったらCharField用のinputフォームになる。へぇー。

で、次はこの管理画面のBoyoyonフォームのカスタマイズらしい。
.

2011年3月17日木曜日

[Python][django] チュートリアルメモ3(debian lenny)

モデルを有効にする



$ cd boyoyon
$ vi settings.py
 

ってやってsettings.pyを編集。

INSTALLED_APPSって書いてあるところにモデルを追加。

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
)
 

ってなってるんで、そこにboyoyon.apppppを追加。

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'boyoyon.appppp',
)
 

これで有効になったかしら。
ということで以下のコマンドを実行。

$ python manage.py sql appppp
 

すると、、、

Error: Django doesn't know which syntax to use for your SQL statements,
because you haven't specified the DATABASE_ENGINE setting.
Edit your settings file and change DATABASE_ENGINE to something like 'postgresql' or 'mysql'.
 

って言われた。
DATABASEの設定しないとダメみたい。

早速DBの設定。
settings.pyをひらいて、、、

DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = '' # Or path to database file if using sqlite3.
DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
 

ってところを環境に合わせて設定。

自分の環境は以下の感じ。

DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'test' # Or path to database file if using sqlite3.
DATABASE_USER = 'root' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = 'localhost' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '3306' # Set to empty string for default. Not used with sqlite3.
 

特にmysqlが好きなわけじゃないけどmysqlを指定。
databaseは'test'、ユーザはroot、パスワードなし。

んで、再度sql出力コマンド。

$ python manage.py sql appppp
BEGIN;
CREATE TABLE `appppp_poll` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`question` varchar(200) NOT NULL,
`pub_date` datetime NOT NULL
)
;
CREATE TABLE `appppp_choice` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`poll_id` integer NOT NULL,
`choice` varchar(200) NOT NULL,
`votes` integer NOT NULL
)
;
ALTER TABLE `appppp_choice` ADD CONSTRAINT poll_id_refs_id_9963a93 FOREIGN KEY (`poll_id`) REFERENCES `appppp_poll` (`id`);
COMMIT;
 

おお、SQL文が出力された。。。
idはauto_increment。これ変えたい場合は
なんたらFieldのパラメータにprimary_key=Trueを指定すればいいらしい。

さて、次は実際にDBにテーブルを作る。
syncdbというコマンドを叩くらしい。

$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table appppp_poll
Creating table appppp_choice

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'konno'):
E-mail address: atkonn@gmail.com
Password:
Password (again):
Error: Blank passwords aren't allowed.
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Installing index for appppp.Choice model
 

途中パスワードで怒られた。空パスワードはダメみたい。

どれ、テーブルできたかな。

$ mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 231
Server version: 5.0.51a-24+lenny4 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

> show tables;
+----------------------------+
| Tables_in_test |
+----------------------------+
| appppp_choice |
| appppp_poll |
| auth_group |
| auth_group_permissions |
| auth_message |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_content_type |
| django_session |
| django_site |
+----------------------------+
 

っと。
もりっとできた。


次はデータベースAPIと戯れるとのこと。

.

2011年3月16日水曜日

[Python][django] チュートリアルメモ2(debian lenny)

「プロジェクトの作成」が終わったら「モデルの作成」をするらしい。
「プロジェクトの作成」では自分用の環境を構築し、作業をする準備。

モデルの作成


まずはアプリケーションを作るんだとさ。
ということで早速作る。


$ cd boyoyon
$ python manage.py startapp appppp
 

apppppというappを作ってみた。
すると

$ ls -1
__init__.py
__init__.pyc
appppp
manage.py
settings.py
settings.pyc
urls.py
urls.pyc
 

というふうにapppppディレクトリが作成された。
(これだとprojectとappがカップリングされてしまうのでダメらしいんだけどチュートリアルなんで進めるって書いてある。)

apppppディレクトリの中身は・・・

$ ls -1 appppp
__init__.py
models.py
views.py
 

ってなってる。
お、modelsってある!
これがモデルですか??

ちなみにDjangoではDRY則に従うそうな。
models.pyを編集するっす!
vimでひらいて見ると・・・

from django.db import models

# Create your models here.
~

ってだけ書いてある。
チュートリアルに従って・・・


from django.db import models

# Create your models here.
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField()
 

と記述、というかコピペ。
内容は良く分からんが、モデル作成完了。

次はモデルを有効にするらしい。

.

[Python][django] チュートリアルメモ1(debian lenny)

djangoのインストールが終わったみたいなので次。

プロジェクトの作成
まずはプロジェクトの作成。djangoのセットアップを行う。


$ django-admin startproject boyoyon
 

とりあえず、チュートリアルに従ってdjango-adminをstartprojectを引数に
実行してみる。
するとあら不思議。

$ ls
boyoyon
 

boyoyonというディレクトリができているではありませんか!

ちなみにdebian lennyでapt-get installしたdjangoなんで"django-admin" というコマンドがインストールされているけども、setup.pyでインストールした場合はどこかにdjango-admin.pyがインストールされる模様。

boyoyonディレクトリの中身は

$ ls -a boyoyon/
. .. __init__.py manage.py settings.py urls.py
 

ってな感じ。


ここまで来たら、プロジェクトなるものが正しく動くか確認するらしい。
早速「開発用サーバ」なるものを動かしてみる。

$ cd boyoyon
$ python manage.py runserver
Validating models...
0 errors found

Django version 1.0.2 final, using settings 'boyoyon.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
 

・・・開発サーバが立ち上がった模様。
http://127.0.0.1:8000/にアクセス。



It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what to do next:

* If you plan to use a database, edit the DATABASE_* settings in boyoyon/settings.py.
* Start your first app by running python boyoyon/manage.py startapp [appname].

You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!
 

なんて書かれてるページが表示される。
It worked!なんて書かれているんで動いてるんだよね、きっと。

ふむふむ、データベース使うならboyoyon/settings.pyのDATABASE_なんたらを編集するのね。
ふむふむ、DEBUG = Trueなのね。


.

[Python][django] djangoが入っているかどうか

djangoがインストールされてるかな?


$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
>>>
 

だめですsた。


なんでインストール

$ apt-cache search django
cakephp-instaweb - Development webserver for CakePHP applications
python-jinja - small but fast and easy to use stand-alone template engine
python-mako - fast and lightweight templating for the Python platform
libmapnik-dev - C++/Python toolkit for developing GIS applications (devel)
libmapnik0.5 - C++/Python toolkit for developing GIS applications (libraries)
mapnik-utils - C++/Python toolkit for developing GIS applications (utilities)
python-mapnik - C++/Python toolkit for developing GIS applications (Python)
python-django - A high-level Python Web framework
python-jinja2-dbg - small but fast and easy to use stand-alone template engine
python-jinja2 - small but fast and easy to use stand-alone template engine
python-django-debug-toolbar - Embedded debugging toolbar for Django projects
python-django-south - Intelligent schema migrations for django apps
python-django-doc - High-level Python web development framework (documentation)

 

うーん、、、python-djangoでいいのかしらん。


$ sudo apt-get install python-django
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
javascript-common libjs-jquery wwwconfig-common
提案パッケージ:
python-psycopg2 python-psycopg python-flup apache apache-ssl
以下のパッケージが新たにインストールされます:
javascript-common libjs-jquery python-django wwwconfig-common
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 140 個。
4795kB のアーカイブを取得する必要があります。
この操作後に追加で 22.8MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 ftp://ftp.debian.org lenny/main wwwconfig-common 0.1.2 [21.9kB]
取得:2 ftp://ftp.debian.org lenny/main javascript-common 5 [3574B]
取得:3 ftp://ftp.debian.org lenny/main libjs-jquery 1.2.6-2 [62.7kB]
取得:4 ftp://ftp.debian.org lenny/main python-django 1.0.2-1+lenny2 [4707kB]
4795kB を 53s で取得しました (89.0kB/s)
未選択パッケージ wwwconfig-common を選択しています。
(データベースを読み込んでいます ... 現在 483804 個のファイルとディレクトリがインストールさ れています。)
(.../wwwconfig-common_0.1.2_all.deb から) wwwconfig-common を展開しています...
未選択パッケージ javascript-common を選択しています。
(.../javascript-common_5_all.deb から) javascript-common を展開しています...
未選択パッケージ libjs-jquery を選択しています。
(.../libjs-jquery_1.2.6-2_all.deb から) libjs-jquery を展開しています...
未選択パッケージ python-django を選択しています。
(.../python-django_1.0.2-1+lenny2_all.deb から) python-django を展開しています...
man-db のトリガを処理しています ...
wwwconfig-common (0.1.2) を設定しています ...
javascript-common (5) を設定しています ...
libjs-jquery (1.2.6-2) を設定しています ...
python-django (1.0.2-1+lenny2) を設定しています ...
python-support のトリガを処理しています ...
 

で、とりあえずインストール。
javascriptで苦しみまくったわたくしとしましては
libjs-jqueryとか気になります。
それは置いといて


$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
 

お、入ったっぽい。


そんだけ!!!
.

2011年3月12日土曜日

[その他] コンビニから食べ物が消えた

コンビニから食べ物が消えた.

近所のセブンイレブン、サンクス、ミニストップ、ローソンに行ってみたけど
なんもないよ。

腹減った!
.

[その他] 地震

地震が起きたら真っ先に倒壊するかと思ってたビルに居るんだけど
意外や意外、結構もつものだ。

損害は結構良いサーバが一台棚から落ちて壊れたぐらい。。。

UPSも棚からずり落ちたけど、こちらは大丈夫みたい。
タワー型のPCは軒並み倒れた。液晶ディスプレイも倒れた。
何か壊れているかもしれないけど、今のところ使えてるみたい。

もともと汚い事務所が汚くなったので汚くなったっぷりが良く分からない。


地震が起きたあと千代田区内をぷらぷら散歩してみたら
皆さん道路に避難していたようで大混雑。


とにもかくにもうちのメンバは無事なようでなにより。
.

[Apache][mod_chxj] POST時微妙

POST時の動きが微妙なんだけど
クライアント側から送付された文字コードを変換したいからなんだよね・・・

header_fixup時にContent-Lengthを決めないといけないっぽいんだけど
そうするとPOSTデータはどっから持ってくるんだろう・・・

input filter側でPOSTデータは読めるんだけどそうすると
Content-Lengthを変更できないっぽい。

だもんでinput_filterは止めて、input_handlerで処理するように
し、serf使ってローカルに対してPOSTするようにしてる。 

1.3の時には変更(していいかどうかは別にして)できたんだけど、
2.xではできないみたい。(もっともっと調査必要)

なんだか、そもそも勘違いしていそうな気もするんだけど。

メーリングリストなんかでも、POSTデータを変更したい人はいるようで
質問投げてるみたいなんだけど、「何でそんなこと必要なのか」で終わっちゃっている。。。

えー。。。

。。。

。。



--
追記

apache付属のmod_charset_liteのinput filter部にも書いてあった。


A Content-Length header is present, but it won't be valid after
conversion because we're not converting between two single-byte
charsets. This will affect most CGI scripts and may affect
some modules.
Content-Length can't be unset here because that would break
being able to read the request body.
Processing of chunked request bodies is not impacted by this
filter since the the length was not declared anyway.
 

ま、無理やりセットしてもinput filterの時点では有効にならないようなんだけど。


ということから、やはり

1) Content-Lengthは無視する
2) 内部から外部リクエスト投げる
  

の2つぐらいしか解決策は思いつかない

.

[Debian] lennyでxz

gzipやらよりも圧縮率がすごいらしいxzっていうコマンドを
Debian Lennyで使いたくなったとさ。


# apt-cache search xz
xzoom - リアルタイム更新機能付き X ディスプレイの部分拡大鏡
xzip - Infocom フォーマットによるストーリーファイルのインタプリタ
zblast-x11 - X11 版スペースシューティングゲーム zblast
nexuiz-server - Nexzui 用のスタンドアロンなサーバ
xzgv - サムネイルベースのセレクタが付いた X 用写真ビューア
makexvpics - コマンドラインから .xvpics サムネイルを更新
horae-examples - ATHENA and ARTEMIS examples and tutorials
# 

とのことで無い模様。

ということで/etc/apt/source.listに以下を追加。


deb http://www.backports.org/debian/ lenny-backports main
 

んで、

# apt-get update
 

aptitude使えといわれても、指が勝手にapt-getと入力してしまうのでした。

改めてサーチ。

# apt-cache search xz
xzoom - リアルタイム更新機能付き X ディスプレイの部分拡大鏡
xzip - Infocom フォーマットによるストーリーファイルのインタプリタ
zblast-x11 - X11 版スペースシューティングゲーム zblast
nexuiz-server - Nexzui 用のスタンドアロンなサーバ
xzgv - サムネイルベースのセレクタが付いた X 用写真ビューア
makexvpics - コマンドラインから .xvpics サムネイルを更新
horae-examples - ATHENA and ARTEMIS examples and tutorials
liblzma-dev - XZ-format compression library - development files
liblzma-doc - XZ-format compression library - API documentation
liblzma2 - XZ-format compression library
xz-lzma - XZ-format compression utilities - compatibility commands
xz-utils - XZ-format compression utilities
xzdec - XZ-format compression utilities - tiny decompressors
 

ういうい。

んだばインストール

# apt-get install xz-utils
 


どれどれ。

# which xz
/usr/bin/xz
 


ぐへへ。

早速

# xz -d FreeBSD-8.2-RELEASE-i386-dvd1.iso.xz
 

・・・でいいのかしらん

そんだけ。
.

2011年2月28日月曜日

[Apache] r->headers_outに出力するヘッダ

r->headers_outに出力するヘッダ情報ってvalにNULL出していいのかな。


apr_table_setn(r->headers_out, "User-Agent", NULL);


ってな感じで。


apache http server付属のmod_disk_cache.cを見ると
valの値を無条件でstrlenしてるんだよね。
(keyも)

ってことで余裕のSEGV。

ダメじゃんか。
.

[Apache] プロファイラ

gprofを利用するためにapache http server(以下apache)から-pgオプションをつけてコンパイルする、なんてことをやってたんだけど面倒くさ。
あっちゃこっちゃにgmon.outが作成されるし。
(もっと調べろっていう話は置いといて)

で、oprofileってやつに切り替えた。

gprofよりも精度は落ちるらしいんだけど、これは楽。


# opcontrol --no-vmlinuz
# opcontrol --start
# /etc/init.d/apache2 start


ってやって

$ ab うんたらかんたら

で、実行しまくって


# opcontrol --stop
# opreport -l /usr/lib/apache2/module/mod_chxj.so > erer


ってやるとそこそこ素晴らしいアウトプットが得られる。
さらに

# opannotate -a -s /usr/lib/apache2/module/mod_chxj.so | lv


なんてやるとコードも一緒に表示してくれる、と。


もちろんmod_chxj自体は-gオプションをつけてコンパイルだぜぇ。



使い終わったら

# opcontrol --shutdown


ですかね。
.

[Apache] なんか情報増えてるよね

Apacheモジュールに関する日本語の情報がやたらと増えてるよね。

以前は日本語情報といえば、Apacheモジュール本の著者の方のページとmod_uploaderの作者の方が公開している情報ぐらいだった。

さて、それは置いといて、


$ gdb /usr/sbin/apache2


と起動して


>run -X -f /etc/apache2/apache2.conf

なんてたたいてdebugするわけなんだが
module内で内部リクエストではなく外部リクエストとして
自分自身へリクエスト投げると、さあ大変。

お手軽デッドロック。

で?
.

復活するよ

ちょっといろいろあってさぼってた。
復活するよ。


そんだけ。