アーカイブ

投稿者のアーカイブ

Eclipse 3.6(Helios)でMavenを利用する

2011 年 5 月 25 日 コメントはありません

m2eclipseを利用する。
MacOSX(snow leopard)のMaven 3.0.2、Windows環境で昔インストールしたMaven 2.2.1の環境で動作した。
jreはJDKのものを指定しないとエラーでる。

カテゴリー: 日記 タグ: ,

AsyncTaskのcancel時の動き

2011 年 5 月 11 日 コメント 1 件

Android 2.1 update 1 ~ Android 2.3.2
AsyncTaskのcancel(true)を外部から呼んだ場合と、doInBackgroundで呼んだ場合挙動が異なる。
あと、cancelしてもdoInBackgroundは最後まで実行される。


public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

new AsyncTask() {
@Override
protected Void doInBackground(Void… params) {
for (int i = 0, cnt = 10; i < cnt; i++) { publishProgress(i); SystemClock.sleep(1000); if (i == 5) { cancel(true); } } return null; } @Override public void onProgressUpdate(Integer... values) { Log.d(getLocalClassName(), "count "+values[0]); } @Override protected void onCancelled() { Log.d(getLocalClassName(), "onCancelled"); } @Override protected void onPostExecute(Void result) { Log.d(getLocalClassName(), "onPostExecute"); } }.execute(); } } [/java] 結果

count 0
count 1
count 2
count 3
count 4
count 5
onPostExecute
count 6
count 7
count 8
count 9

public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

AsyncTask task = new AsyncTask() {
@Override
protected Void doInBackground(Void… params) {
for (int i = 0, cnt = 10; i < cnt; i++) { publishProgress(i); SystemClock.sleep(1000); } return null; } @Override public void onProgressUpdate(Integer... values) { Log.d(getLocalClassName(), "count "+values[0]); } @Override protected void onCancelled() { Log.d(getLocalClassName(), "onCancelled"); } @Override protected void onPostExecute(Void result) { Log.d(getLocalClassName(), "onPostExecute"); } }; task.execute(); SystemClock.sleep(5000); task.cancel(true); } } [/java] 結果

count 0
count 1
count 2
count 3
count 4
onCancelled
count 5
count 6
count 7
count 8
count 9
カテゴリー: android タグ: ,

Apacheのリバースプロキシを利用してSERVER_NAMEが取れない時

2011 年 5 月 6 日 コメントはありません

Apacheのリバースプロキシを利用して、SERVER_NAMEがリバースプロキシサーバのIPになっちゃう場合は、リバースプロキシ側のApacheに以下の設定を追加。

ProxyPreserveHost On

PHPプログラムでSERVER_NAMEの値を超利用しまくりな場合は、問題ないようならぶち込んじゃってもいいかも。

$_SERVER['SERVER_NAME'] = isset($_SERVER['X_FORWARDED_HOST']) ? $_SERVER['X_FORWARDED_HOST'] : $_SERVER['SERVER_NAME'];
カテゴリー: linux タグ: ,

Mac OSXでApacheの利用

2011 年 5 月 4 日 コメントはありません

システム環境設定>共有>Web共有をチェック

httpd.confの設定

$ sudo vim /etc/apache2/httpd.conf

設定を上書きできないと困るので180行目のAllowOverrideを変更

    AllowOverride All

PHPを利用可能にするため116行目のコメントアウトを外す

LoadModule php5_module        libexec/apache2/libphp5.so

ヴァーチャルホストの設定ファイルvhosts以下に配置し読み込めるように最後の行に追加
デフォルトだと469行目でヴァーチャルホストの設定を読み込んでいるようだが、最終行のIncludeでPHPの設定が行われているので、それ以降に設定を書かないとPHPを利用できないため

Include /private/etc/apache2/vhosts/*.conf 

ヴァーチャルホストの設定ファイルを作成
ファイル名はお好みで

$ sudo vim /etc/apache2/vhosts/httpd-vhosts-hoge.example.com.conf

ファイルはhogeユーザのSite以下にドメインディレクトリを作成し、そこをドキュメントルートにしています
localhostから接続できるようにAllow fromを追加

<VirtualHost *:80>                                                          
    ServerName hoge.example.com
    DocumentRoot /Users/hoge/Sites/hoge.example.com
    <Directory /Users/hoge/Sites/hoge.example.com>
        Allow from ::1
        Allow from 127.0.0.1
    </Directory>
    ErrorLog /var/log/apache2/hoge.example.com-error_log
    CustomLog /var/log/apache2/hoge.example.com-access_log combined
</VirtualHost>

Apache設定ファイルにミスがないかチェック

sudo apache2ctl configtest

大丈夫なようなら再起動

sudo apache2ctl -k restart

hostsファイルに名前解決できるように追加

sudo vim /etc/hosts
::1 hoge.example.com
127.0.0.1 hoge.example.com
カテゴリー: macosx タグ: ,

androidエミュレータのSDカードにファイルを転送する

2011 年 4 月 21 日 コメントはありません

DDMSのファイル・エクスプローラだとGUIで簡単に転送できますが、テスト用に大量に転送する必要があったのでadbコマンドを利用します。
Windowsでのお話。

転送コマンド自体は以下。

adb push ファイル名 /sdcard/転送先

SDカードは「/sdcard」としてマウントされています。

実機のSDカードをGドライブにマウントし、downloadフォルダ内のgifファイルをエミュレータのSDカード内のdownloadフォルダに転送します。
実機も認識しているため、adbのオプションで実行先をエミュレータとする「-e」オプションを指定。

for %A in (G:\download\*.gif) do adb -e push %~fA /sdcard/download

転送後、エミュレータのアプリケーション一覧から「Dev Tools > Media Scanner」でSDカードを再認識させる必要がある。

カテゴリー: android タグ:

twitterのリストでリスト名に日本語が通るようになっていた

2011 年 1 月 13 日 コメントはありません

UTF-8の範囲、BMP外はダメっぽい。
文字数はUTF-8で23文字までっぽい。

日本語
http://twitter.com/cockok/%E6%97%A5%E6%9C%AC%E8%AA%9E
日本語-18
http://twitter.com/cockok/%E6%97%A5%E6%9C%AC%E8%AA%9E-18

http://twitter.com/cockok/%E2%98%83

http://twitter.com/cockok/%EE%98%BE

カテゴリー: 日記 タグ:

そんなfindで大丈夫か?

2010 年 11 月 25 日 コメントはありません

一番いいのを頼む!

find . -type f -print0 | xargs -0 echo

よろしい、ならば+だ

find . -type f -exec echo {} +

はい、xargs死んだ!

カテゴリー: linux タグ:

Mac OSXでredmine

2010 年 11 月 11 日 コメントはありません

developmentで動く開発環境が欲しかったので準備。
標準で利用できるsvnでいいと思いますが、gitいれてあるので、gitで。
portsは使わない派なので、git-osx-installer – Project Hosting on Google Codeを利用してます。
標準でsqlite3も利用できるようなのでmysqlをわざわざ準備せずこちらを利用。
事前にgemでrails、sqlite3-ruby等インストール済。

$ git clone https://github.com/edavis10/redmine.git
$ cd redmine/
$ vim config/database.yml
development:
  adapter: sqlite3
  dbfile: db/redmine_development.db
$ vim config/environment.rb
config.action_controller.session = { :key => "_myapp_session", :secret => "some secret phrase hoge hoge hoge hoge hoge" }
$ rake db:migrate RAILS_ENV=development
$ rake redmine:load_default_data RAILS_ENV=development
$ script/server -e development

localhost:3000にアクセス。
admin/adminでログイン。

カテゴリー: macosx タグ: ,

Twitterのstatus IDが64bitになったことによる問題と対策

2010 年 11 月 7 日 コメントはありません

Snowflake: An update and some very important information – Twitter Development Talk | Google グループ
TwitterのIDが64bitになるとJavaScript等で問題が出るので対策を – F.Ko-Jiの「一秒後は未来」

事前に告知されていましたが、日本時間で11月5日の朝6時にstatus IDが41bitまでの値を利用するようになりました。

     29535221410 以前
1036396793962496 以後

桁が大分増えましたね。

10月20日からレスポンスにstatus IDの文字列である「id_str」が含まれるようになりました。
2週間という短い期間での移行、そもそも告知自体知らない人も多かったかも知れませんが、対応せず「id」の値を利用していた場合不具合が生じる場合があります。

言語、OSによって内部で利用するstatus IDである「id」の型が異なると思いますが、32bitOS環境のPHPでJSONのデコードにjson_decode関数を利用している場合、「id」はfloat型としていました。
float型、浮動小数点数はマニュアルにあるように、およそ 10 進数で 14 桁の精度であり、新しいstatus IDは正確には扱えず以下のようになります。

$ php -r 'var_dump(1036396793962496);'
float(1.0363967939625E+15)

この値をMySQLのinteger型に保存すると、1036396793962500となります。

対策として、「id」ではなく「id_str」を利用するのですが、修正箇所が多く容易ではなかったため、一時しのぎとして取得したJSONに手を加え、「id」自体を文字列型として扱うことにしました。

$json = preg_replace('/"(id|in_reply_to_status_id)":(\d+)/', '"$1":"$2"', $json);

ツイート文字列にも影響がありますが、まず無いであろうと思われる文字列と、近いうちに「id_str」を利用するよう修正するということで。

カテゴリー: 日記 タグ: ,

ubuntuへvm-toolsのインストール

2010 年 11 月 1 日 コメントはありません

vm-toolsのオープンソース実装のものをインストール

sudo aptitude install open-vm-tools
カテゴリー: linux タグ: ,