2014年2月9日日曜日

[Android] twitter4jのgetOAuthRequestTokenでTwitterExceptionエラー

Androidアプリでtwitter4jを使いtwitterにログインしていたが、2014年1月から突然投稿できなくなった。
エラー内容を追って見ると、getOAuthRequestTokenでTwitterExceotionが発生。
エラーの内容は以下
403:The request is understood, but it has been refused. An accompanying error message will explain why. This code is used when requests are being denied due to update limits (https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following).
エラー内容に記載してあるサイト(https://support.twitter.com/articles/15364-about-twitter-limits-update-api-dm-and-following)にアクセスするもtwitterのリミット制限に引っかかったようなエラー内容。
調査をしているとhttpsモードじゃないとエラーとなるような制限が加わったとかいう情報を海外で発見。
twitter4jでどうやってSSLにするのかよく分からなかったが、ConfigurationBuilderオプションでSSLモードが指定できることを発見。試してみたところうまく動いた。

修正前[ツイッターログイン部分]
ConfigurationBuilder cbuilder = new ConfigurationBuilder();
cbuilder.setOAuthConsumerKey(StringUtil.TWEET_CONSUMER_KEY);
cbuilder.setOAuthConsumerSecret(StringUtil.TWEET_CONSUMER_SECRET);
Configuration conf = cbuilder.build();
mOauth = new OAuthAuthorization(conf);
mOauth.setOAuthAccessToken(null);
String authUrl = null;
try {
authUrl = mOauth.getOAuthRequestToken(StringUtil.TWEET_CALLBACK_URL).getAuthorizationURL();
} catch (Exception e) {
Logging.e(e.toString());
return;
}

修正後
ConfigurationBuilder cbuilder = new ConfigurationBuilder();
cbuilder.setUseSSL(true);//2014年よりこれが無いとエラーとなる仕様に変わった。
cbuilder.setOAuthConsumerKey(StringUtil.TWEET_CONSUMER_KEY);
cbuilder.setOAuthConsumerSecret(StringUtil.TWEET_CONSUMER_SECRET);
Configuration conf = cbuilder.build();
mOauth = new OAuthAuthorization(conf);
mOauth.setOAuthAccessToken(null); // これをやらないと下記getOAuthRequestToken()で例外が発生する
String authUrl = null;
try {
authUrl = mOauth.getOAuthRequestToken(StringUtil.TWEET_CALLBACK_URL).getAuthorizationURL();
} catch (Exception e) {
Logging.e(e.toString());
return;
}


同じく投稿時にも同様のエラーが出ていたため修正!

修正前
//メッセージを投稿
ConfigurationBuilder confbuilder = new ConfigurationBuilder();
confbuilder.setOAuthAccessToken(oauthToken).setOAuthAccessTokenSecret(oauthTokenSecret)
.setOAuthConsumerKey(StringUtil.TWEET_CONSUMER_KEY).setOAuthConsumerSecret(StringUtil.TWEET_CONSUMER_SECRET);
//メッセージの取得
Twitter twitter = new TwitterFactory(confbuilder.build()).getInstance();

修正後
//メッセージを投稿
ConfigurationBuilder confbuilder = new ConfigurationBuilder();
confbuilder.setOAuthAccessToken(oauthToken).setOAuthAccessTokenSecret(oauthTokenSecret)
.setOAuthConsumerKey(StringUtil.TWEET_CONSUMER_KEY).setOAuthConsumerSecret(StringUtil.TWEET_CONSUMER_SECRET);
confbuilder.setUseSSL(true);//2014年よりこれが無いとエラーとなる仕様に変わった。
//メッセージの取得
Twitter twitter = new TwitterFactory(confbuilder.build()).getInstance();

上記で無事にエラー無く動作することを確認。

2011年3月16日水曜日

logcatが表示されない場合

以下を実行するとlogcatが表示されるようになる
adb kill-server
adb start-server
adb logcat -c
eclipse再起動

2011年2月20日日曜日

PostGISのインストール手順(centos)

postgisをcentosに入れる作業の備忘録

wget http://postgis.refractions.net/download/postgis-1.5.2.tar.gz

解凍してconfiugreを実行
./configure

以下のエラー
configure: error: could not find xml2-config from libxml2 within the current path. You may need to try re-running configure with a --with-xml2config parameter.

yumを使って、最新版にアップデート
yum install libxml2
yum install libxml2-devel

もう一度挑戦
./configure

さっきのエラーは突破したが別のエラー
configure: error: could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter.

geosをゲット
wget http://download.osgeo.org/geos/geos-3.2.2.tar.bz2

解凍してconfigure
./configure
make
make install

もう一度postgisのインストールに挑戦
./configure

またエラー
configure: error: could not find proj_api.h - you may need to specify the directory of a PROJ.4 installation using --with-projdir

projをゲット
wget ftp://ftp.remotesensing.org/proj/proj-4.7.0.tar.gz

解凍してconfigure
./configure
make
make install

もう一度postgisのインストールに挑戦
./configure
やっと成功!!
make
make install

新しい PostgreSQL 手続き言語の定義
createlang plpgsql DB名

SQLを実行する
psql -d soul -f /usr/local/src/postgis-1.5.2/postgis/postgis.sql
SET
BEGIN
ERROR: could not load library "/usr/local/pgsql/lib/postgis-1.5.so": libgeos_c.so.1: cannot open shared object file: No such file or directory

速攻でエラーが発生。。

pathが通ってないようだ。
以下のファイルを作成
vi /etc/ld.so.conf.d/geos.conf

ファイル内に、以下を記載
/usr/local/lib

以下のコマンドを実行
/sbin/ldconfig

再チャレンジ
psql -d soul -f /usr/local/src/postgis-1.5.2/postgis/postgis.sql

成功!

実際に確認してみる
-------------------------
soul=# select postgis_full_version(); postgis_full_version
POSTGIS="1.5.2" GEOS="3.2.2-CAPI-1.6.2" PROJ="Rel. 4.7.1, 23 September 2009" LIBXML="2.6.26" USE_ST
ATS
(1 row)
--------------------------

うまく行ってるっぽい

2011年2月15日火曜日

Androidの実機でステップ実行する方法

eclipceでデバックする際にAndroidの実機でステップ実行する方法です。

AndroidManifest.xmlのapplicationタグに以下を追加するだけ

<application android:debuggable="true">

それと実機側の設定でデバックモードとする必要もあります

2010年2月5日金曜日

サーバーでjqueryのPage Scrollerがうまく動作しない

jqueryがサーバーでうまく動作せずハマった。
他のサイトで動いているサンプルスクリプトをDLしサーバーにアップしても動かない。
ソースも文字コードも、何も変えてない。

しかしローカル環境で動かしてみると正常に動作する。
悩むこと2時間。
ハッと気づくことが。

自宅環境はapacheのhttpd.confの設定でVirtualHostを設定し、ポートを80番以外で動かしていた。
まさかと思ってVirtualHostではなくポート80で動かすと正常に動作!!!

たまたま気付けて良かったが、これはハマった。
VirtualHost設定している方は注意してください。

2010年1月15日金曜日

apache rewriteの性能

Apacheのrewriteによる負荷がどのくらいあるか気になったので調べてみた。

ある自宅PCレベルのサーバーにindex.htmlを配置し、jmeterで他のPCから負荷をかけてみた

ROOP回数を1000
スレッド数を100
で設定。

■RewriteRuleの記述が85個の場合
1560.3/sec
1543.2/sec
1541.2/sec

■RewriteRuleの記述が6個の場合
1739.1/sec
1743.9/sec
1758.5/sec

※1秒間あたりのスループット


環境やマシン性能にも左右されるところではあるが、思った以上に性能が若干下がることだけは分かった。大量の記述は避けた方が良さそう。