サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
iPhone 16
matabii.hatenablog.com
laravel4のインストールでは php composer を利用しますが、仮想環境などのパフォーマンスが良くない環境で行うとエラーになることがありました。 $ composer install Loading composer repositories with package information Installing dependencies (including require-dev) - Installing symfony/translation (v2.3.2) Downloading: 100% .... Generating optimized class loader [Symfony\Component\Process\Exception\RuntimeException] The process timed-out. optimize Script php a
Android標準のビューはiPhoneのようなピンチイン/アウトをサポートしてません。実現したければ自前で実装する必要があります。 Web上を探してみたけどしっくりくる物が無かったので作ってみました。簡単そうだけど考える事が多くて大変です。 ソースとサンプルアプリを公開しているので良かったら見てみてください。シンプルかつ無駄の多い実装ですが簡単なアプリには使えると思います。 http://code.google.com/p/scale-imageview-android/
PHPフレームワークで最近の流行と言ったらSymfony、CakePHP、Codeigniter当たりでしょうか。どれもそれぞれ素晴らしいのですが、その中で特に注目度が高いのは軽量フレームワークであるCodeigniterでしょうか。 自分も使った事あるのですが、シンプルで高速、コアな部分も含めてカスタマイズが簡単ということで気に入ってます。ただし、最近重要なライセンス変更が行われたのと、PHP4時代からの遺産を引きずっていてモダンではないというのが気になってました。 そこで、この軽量PHPフレームワークの分野で他に使えそうなものが無いか探していたところ、Kohanaと呼ばれるCodeigniterからforkして出来たフレームワークを発見し、なかなか良さそうだったのでCodeigniterで作っていたプロジェクトを全て置き換えてみました。どんなフレームワークも使っていると不満は出てくるの
Androidのアプリ内課金を安全に使うためには何らかの防御策を取らないといけないのですが、その方法の一つとしてsignatureの検証があります。 購入完了後にMarketから購入情報がjsonで送信されてきます。 {"nonce":2102159826496562602,"orders":[{"notificationId":"2764732181918735088", "orderId":"259065433347272","packageName":"com.matabii.test.billing1", "productId":"product1","purchaseTime":1304573886000,"purchaseState":0}]}これとセットで、jsonのsignatureも送られてきます。 YG7sJWdElGYBTkmRimrek0tZ7Y7WISxH8hAZ
正式に公開されたものの良い噂を聞かないですね。色々触ってみて発見した問題点を思いつく限り書いてみます。 2011年4月24日時点の情報です。進化が早いので最新情報は公式ドキュメントを参照して下さい。 情報が少ない http://developer.android.com/guide/market/billing/index.html ぺらっぺらの情報しかない上にデベロッパー向けで難解です。 デベロッパーコンソールが貧弱 これがアプリ内課金の管理画面です。 Googleなのに検索が出来ないです。ダウンロード数の把握も出来ません。一括ダウンロードやアップロードは出来ないし、数が増えると管理が大変でしょうね。今んとこ数十件くらいが限界でしょうか。ってか1つのアプリに登録出来るアイテム数のリミットっていくつなんでしょう。 機種によって挙動が違う Androidに付きまとう厄介な問題ですが、bill
いやお久しぶりです。 データの管理にSQLiteを使うとして、初期データを作るのに、数テーブル、数件程度のデータであれば SQLiteOpenHelperのonCreate内に直接SQLを書いてやれば良いですが、 数百件にもなるとそうも言ってられなくなります。 方法としては、SQLiteファイルを予め用意しておき、直接コピーして使う方法がありますが、 参考:http://y-anz-m.blogspot.com/2011/01/android-sqline-database.html SQLiteからdumpしたデータを流し込む方法を紹介したいと思います。 前提条件として、予め必要なデータの入ったSQLiteデータベースは用意されているとします。 こんな感じの、「test.sqlite」を用意しておきました。 sqlite> .schema CREATE TABLE test_table(
何の役に立つのか疑問ですが、一貫した情報が無くハマりポイントが多かったので書いときます。 環境はさくらのVPS上に作りました。正真正銘のCUIです。 http://vps.sakura.ad.jp/ 最小構成でインストールしたCentOSに、カーネルは2.6.18-194.8.1.el5 x86_64です。古い・・・ Javaの環境 まずはJavaの実行環境が必要です。openjdkを使えば良いと思います。 yumに「java-1.6.0-openjdk.x86_64」があったのでインストールしました。 Android SDK Linux用のAndroid SDKをダウンロードしてきます。 http://developer.android.com/sdk/index.html 適当なディレクトリに展開。 ここでダウンロードしたAndroid SDKはtoolsだけで、platformsやa
android-sdkにSoftKeyboardというソフトキーボードのサンプルがあったので見てみました。キーボードアプリを作るのは大変そうだけど、仕組みは単純で、基本的にServiceからKeyboardViewというビューを作り画面に表示するだけです。 このKeyboardViewはViewを継承して作られてるクラスなので、普通にActivity上に配置出来るよね?と思いやってみました。結果、KeyboardViewを作成して配置するだけで動きました。 Keyboard keyboard = new Keyboard(this, R.xml.qwerty); KeyboardView keyboardView = new KeyboardView(this,null); keyboardView.setKeyboard(keyboard); keyboardView.setOnKeyb
設定画面やダイアログで、下のようなボタンが2つ並んだフッターを付ける時に使ってるレイアウトxmlを紹介します。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:id="@+id/bottom" android:layout_width="fill_parent" android:layout_height="54dip" android:layout_alignPa
2009-10/9 書き直しました。 http://d.hatena.ne.jp/isher/20091009 Androidのレイアウトの中で、ListViewは最も使用場面の多いものの一つだと思います。ただ、多機能なので、ちょっと凝った事しようとすると色々と面倒です。ListViewとAdapterを使うのですが、SwingのJTableとTableModelの関係に似てます。 とりあえずSDKの「platforms/android-1.5/samples/ApiDemos」に色々なサンプルが入ってるので覗いてみましょう。eclipseで、パッケージエクスプローラから新規Android Project、ソースから作成で、ApiDemosを選択すればプロジェクトを作成出来ます。 選択行の色を変える サンプルに無かったので、どうやるか調べてみました。標準ではオレンジ色です。 コードであれば
swingを使って、某WEBサービスの補助ツールを開発することになりました。ユーザはPC初心者が多く、不特定多数になりそうなので、色々と考えるべきことがあります。資料の少ない分野なので差し障りない程度に情報を公開していこうと思ってます。 今日の課題 javaでありがちなクラスパスの問題を回避したい。 起動時にバージョンチェックして自動でバージョンアップしたい。 javaの取り扱いは難しく、PC初心者相手に環境変数にクラスパスを追加なんて不可能に近いですし、バージョンアップの度に毎回ダウンロードして再インストール作業なんて今時やってられないです。間違いなくユーザ離れを引き起こす原因になります。 (Web Startを使えば万事解決な気もしますが) 1.については、全てjarにまとめてexeでラップすれば解決しそうです。 問題は2.で、WEB上に最新バージョンのファイルを用意しておき、起動時に
NetBeansを使うと、JRuby On Railsアプリケーションが嘘みたいに簡単に作れます。 http://www.netbeans.org/kb/docs/ruby/rapid-ruby-weblog.html 内蔵のGlassFishでさくっと動かせるし、Warblerを使えばwar化出来るので、デブロイするのも簡単です。 しかし簡単すぎて、Railsを使うまでもない、ちょっとしたCGIレベルのアプリケーションを作ろうとすると逆に難しく感じてしまいます。 JRubyでサーブレットを書くのは以下の記事が参考になりますが、フレームワークを使ってもう少し簡単に動かしたいところです。 http://www.okisoft.co.jp/esc/ruby/jservlet/index.html Rackを使う事にする RubyにはRackと呼ばれる有名なライブラリがあり、これを使うとサーバの
SQLiteのデータベースを使用する際はSQLiteOpenHelperクラスを使います。一般的には下のようなコードになると思います。 public class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, "test.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + test_table + " (" + BaseColumns._ID + " INTEGER PRIMARY KEY," + "name TEXT" + ");" ); } @Override public void onUpgra
2009-10-9 書き直しました。 http://d.hatena.ne.jp/isher/20091009 前回、選択行の背景の色を変えたので、今度は選択行のテキストの文字色を変えてみます。 android:textColor="#00ffff" これだと選択、非選択に関わらず水色になります。 状態によって色を変えるには、ちょっと面倒な方法をとります。StateListDrawable | Android Developersを参考に、xmlをres/xmlに作成します。 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="#00ffff" /> <item android:state_presse
AndroidにはIntentと呼ばれる概念があり、これを使うことでアプリケーションをまたいでのデータのやり取りが可能になります。 例えば、端末の電話帳データを取得したり、メーラーを立ち上げて送信画面を開いたりすることが出来るのですが、Androidがデフォルトで持っているものだけでなく、サードパーティ製のアプリケーションにおいてもIntentが公開されていれば用いる事が出来るのです。 バーコードリーダーで試してみる 今時の日本の携帯には必ず付いてるバーコードリーダーですが、Androidには付いてません。マーケットにいくつか公開されていますので、その中の「Barcode Scanner」を利用させて頂きます。http://www.androlib.com/android.application.com-google-zxing-client-android-xzA.aspx 単体で使用し
台風の影響でJJUG CCC行けなかったです。飛行機は欠航だし・・・ さて、以前、ListViewの色の変え方という記事を書きましたが、当時はAndroidを触り始めという事もあり、読み返してみてこれは酷いと思ったので書き直してみます。今もまだまだ勉強中ですが。 http://d.hatena.ne.jp/isher/20090713 http://d.hatena.ne.jp/isher/20090714 サンプルアプリの作成 今回使うサンプルとして、ドメインと国名の一覧を出力する簡単なリストを作ってみます。 一応ソースも乗せておきます。 Eclipseでプロジェクトの作成 作成されたmain.xmlのTextViewを消して、ListViewを配置します。 res/layout/main.xml <?xml version="1.0" encoding="utf-8"?> <Linea
SDK1.6がリリースされていたので、新しくサポートされたWVGAの画面サイズを試してみました。まずは1.6のAVDをWVGAで作成して、起動したエミュレータから1.5用に作ってたアプリをそのまま起動。とりあえず何事も無く大きな画面で動いたのだけど、解像度が増えたのなら画面の表示領域も増えるはずなのに、アイコンも文字サイズも大きくなってしまい、HVGAの画面をそのまま引き延ばした感じになってしまいました。 一瞬戸惑ったけど、XMLレイアウトで使う寸法単位を思い出しました。 http://developer.android.com/intl/ja/guide/topics/resources/available-resources.html px Pixels - corresponds to actual pixels on the screen. in Inches - based on
mp3などで効果音を鳴らしたい場合、 MediaPlayer mp = new MediaPlayer(); mp.setDataSource(PATH_TO_FILE); mp.prepare(); mp.start(); mp.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { mp.release(); } }); こんな感じのソースになると思います。ここで気になるのが再生時の音量なのですが、MediaPlayerで再生する場合、ユーザーが設定している「Media volume」の値が使われるます。Androidでは音量設定がくせ者で、ボリュームボタンで調整しようとすると、通常は「Ringer volume」つまり着信音の調整になります。 「Me
端末を横に傾けると、重力センサで画面も横向きになりますよね。使う分には便利なんだけど、作る側は考えることが増えて大変です。資料も今一整備されていないので、分かってる所まで書いてみます。 何が大変かというと、再レイアウトされた時にActivityのライフサイクルに従い、onDestroyされ、onCreateされます。何せonDestroyまでされちゃうので、画面の保存をどうするかが問題になります。例えば入力中のテキストボックスだとか、表示中のダイアログだとか。 いや、実は入力中のテキストボックスや表示中のダイアログは、画面を回転させても状態が保存されるのです。ちょっとやってみます。 Viewで対応する方法 EditTextとTextViewとButtonを置いたActivityを作り、内容を変化させてみます。コードはこんなの public class Test extends Activi
Androidでデータを保存するにはContent Providerを使用するのが基本です。端末内のアプリ専用エリアに作成され、アクセス権限を定義すれば他のアプリからも使用可能と夢が広がる機能です。システムのデータもこれで作成されていて、電話帳などにアクセスするアプリを作ることも可能です。 メリットは上記の通りで、これで作っておけば問題無いと言いたいところなんだけど、端末の容量が数十メガバイトしかなく(少なくともdev phoneは)、あまり消費させたくないというのが実情なので、必要に応じて外部の(SDカードとか)記憶エリアを併用するのが賢いやり方だと思います。 マニュアル Content Providers | Android DevelopersやSDK付属のサンプル(NotePad)を見ればわかるんだけど、とりあえず動かしてみたい場合には事前準備が多くて大変です。自分自身、一目で理解
WIFIか3Gネットワークが有効な時は接続し、そうでない場合はオフラインモードで動かすなんて事がしたい場合に、現在のネットワークの接続状況を調べる方法です。 public static boolean isConnected(Context context){ ConnectivityManager cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo ni = cm.getActiveNetworkInfo(); if( ni != null ){ return cm.getActiveNetworkInfo().isConnected(); } return false; } ConnectivityManager | Android Developer
今の環境がqmailで、今後どちらを使うか?と言われるとPostfixなのですが、心置きなく移行するために速度の比較を行ってみました。ベンチを取るならPostfixにsmtp-sourceというソフトがついているのですが、実際に送信した時のパフォーマンスが見たかったので、実験サーバ計4台とDNSを立ち上げて普通の環境に近い形で比較しました。 実験環境(送信サーバ) OS:CentOS5.2(素カーネル2.6.18) CPU:Xeon X3220 2.4GHz core*4 メモリー:4GB qmail-1.03 /var/qmail/control/concurrencyremote /var/qmail/control/concurrencylocal 上二つを120で作成し、配送プロセス数の上限を120にしました。 postfix-2.3.3-2 default_process_lim
CUIで一覧表示するプログラムを作った時なんかに便利です。NG行だけ色をつけるとか。 http://search.cpan.org/~rra/ANSIColor-1.12/ANSIColor.pm use Term::ANSIColor; print color ’bold blue’; print "This text is bold blue.\n"; print color ’reset’; print "This text is normal.\n"; print colored ("Yellow on magenta.\n", ’yellow on_magenta’); print "This text is normal.\n"; print colored [’yellow on_magenta’], "Yellow on magenta.\n"; use Term::ANS
通常サーバー管理というのは遠隔で行うもので、怖いのは応答不能になることです。SSHでログイン出来れば何とでもなるけど、うんともすんとも言わない場合はデータセンターの人にリセットボタンを押してもらうように依頼する事になると思います。電話やメールしてると実際の作業まで10分以上のロスになるし、何か頼むのが悪いし、他人なので色々心配事も出てきちゃいます。そもそもネットワークの設定ミスやKernelのエラーでシングルユーザーモードで起動しちゃったりすると現地対応するしか無くなります。 そこで、サーバー同士をシリアルケーブルで繋いで、コンソールリダイレクションの設定をすれば現地でキーボードとディスプレイを繋いで作業するのと近いレベルまで持っていけるのだけど、これは非常に面倒なもので、サーバーが増えてくるとやっていけないと思われます。 で、一つの妥協案なのですが、最近のサーバーにはipmiやSeria
Linuxに限らずですが、ダウンロードやネットワーク越しでファイルのコピーを行うと、標準ではベストエフォートで頑張っちゃうので回線やディスクに負荷を与えてしまいます。 自分専用マシンでは問題無いですが、サーバでサービスを提供してたりすると数秒の負荷も無視出来ないので気を使います。そこで、有名コマンドで使用する帯域に制限をかける方法。 ・wget --limit-rateのオプションで制御可能。単位はbyte/秒 wget --limit-rate=100000 http://XXXXXX.com/aaa.tgz これで100KB/秒で転送。・scp -lオプションで制御可能。単位はKbit/秒 scp -l 800 root@XXXXXX.com:/aaa/aaa.tgz ./ これで100KB/秒で転送。・rsync --bwlimitオプションで制御可能。単位はKbyte/秒 rsyn
このページを最初にブックマークしてみませんか?
『matabii's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く