サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
blog.justoneplanet.info
RDSを使っているとMulti-AZ DeploymentがYesになっている場合でも、以下のようにMySQLに接続できない時間が存在する。 Database connection "SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'endpoint.zone.amazonaws.com' " is missing, or could not be created. ユーザーのアクセスごとにconnectが発生するようなシステムの場合、上述の接続できない時間の間に多数のユーザーがアクセスし、クライアントが接続エラーを繰り返す場合がある。その場合、以下のエラーが発生する。 Database connection "SQLSTATE[HY000] [1129] Host 'instance.zone.compute.interna
■実装 ギャラリーの起動 以下のようにすることで(画像データに選択肢を絞って)ギャラリーアプリを起動することができる。 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent, REQUESTCODE); ギャラリーからデータを受け取る protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUESTCODE && resultCode == RESULT_OK) { //data.getData();//ギャラリーで選択したファイルのur
■プロジェクト 以下のコマンドでCakePHPをダウンロードして展開する。 wget https://github.com/cakephp/cakephp/tarball/master tar xvzf cakephp-cakephp-2.1.3-1-g5270721.tar.gz cd cakephp-cakephp-5270721 ■Pluginの設置 面倒なのでプラグインを使う。 cd app/Plugin git clone https://github.com/seddonmedia/cakephp-oauth-server.git OAuth mv OAuth/Controller/OAuthController.php OAuth/Controller/OauthController.php #多分必要 oauth2-phpが必要になるので以下のコマンドを実行する。 cd a
■クライアント側の実装 C2DMと対して変わらない。sender IDがメールアドレスでなくなったのは嬉しい。 gcm.jar SDK/extras/google/の中からgcm.jarをlibsディレクトリの中にコピーする。プロジェクトをrefreshすれば現行のADTは勝手に組み込む。 manifest.xml Android 2.2以降でないとダメなので以下のようにminSdkVersionを8とする。 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/> permissionを追加する。 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permis
本体の設定画面にアプリの設定画面が出るアレであるが、Settings Bundleで検索すると色々出てくる。 ■実装 NEW FILE … > Resource > Settings Bundleを追加する。この段階でシミュレータを立ち上げれば設定画面にアプリの設定項目が追加されている。 Root.plist 初期状態は以下のようになっている。 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>PreferenceSpecifiers</key> <array> <dict> <key>Tit
■インストール macにインストールする Javaは既に入ってると思うので、以下のコマンドでダウンロードする。 wget http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/3.6.0/apache-solr-3.6.0.zip unzip apache-solr-3.6.0.zip cd apache-solr-3.6.0 CentOSにインストールする Javaが必要なので以下のコマンドでJavaをインストールする。 yum install java-1.6.0-openjdk java -version 以下のコマンドでダウンロードする。 wget http://ftp.tsukuba.wide.ad.jp/software/apache/lucene/solr/3.6.0/apache-solr-3.6.0.tgz t
毎回微妙にはまるのでそろそろ書いておく。 ■import eclipseの.projectディレクトリがある場合は、「File > import > Existing Projects into Workspace」で行う。 jarなどがある場合 ディレクトリ構成などが異なってるとリンクが切れたりするので、「Packeage Explorer > プロジェクトルートで右クリック > Properties > Java Build Path > Libraries」で再設定する。 compiler 以下のようなエラーが出る場合がある。 Android requires compiler compliance level 5.0 or 6.0. Found ‘1.7’ instead. Please use Android Tools > Fix Project Properties. 「環境
分かりやすいものから分かりにくいものまであるのでとりあえずメモしておく。 // http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge NSURL *url = [request URL]; [url scheme];// http [url host];// hogehoge.com [url absoluteString];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge [url absoluteURL];// http://user:pass@hogehoge.com:1234/dir/d/test.html?q=sample#hoge [url baseURL]; [url fragment];// hoge [url h
■失敗例1 UITableViewのcellを設定する部分で以下のようなコードを書きクラッシュした。 NSString *tag = (NSString *)[row objectForKey:@"tag"]; [cell.tag setText:tag]; return cell; ■失敗例2 nilの場合があるなと考えて以下のようにする。 NSString *tag = (NSString *)[row objectForKey:@"tag"]; if (tag == nil) { [cell.tag setText:@""]; } else { [cell.tag setText:tag]; } return cell; 残念ながらクラッシュは依然として起こる。 ■最終版 tagはNSNullであり以下の判定に修正。 NSString *tag = (NSString *)[row
■インストール 以下のコマンドでPostfixをインストールする。 sudo yum install postfix ■設定 以下のコマンドで設定ファイルを編集する。 sudo vi /etc/postfix/main.cf 設定ファイルの内容についてはさくらVPSの記事を参照する。 ■認証デーモン 以下のコマンドで認証デーモンを起動する。 sudo /etc/rc.d/init.d/saslauthd start sudo chkconfig saslauthd on ■メールボックス 以下のコマンドでメールボックスを準備する。 sudo mkdir -p /etc/skel/Maildir/{new,cur,tmp} sudo chmod -R 700 /etc/skel/Maildir/ ■sendmail EC2のAmazon Linuxではsendmailがデフォルトで起動してい
素晴らしいライブラリのお陰で5分で接続できる。 ■Activityで使う package info.justoneplanet.android.eew; import java.net.URI; import java.net.URISyntaxException; import org.java_websocket.WebSocketClient; import org.java_websocket.drafts.Draft_17; import org.java_websocket.handshake.ServerHandshake; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class EarthquakeEarlyWarningActivity ext
UITableViewのCellは使い回しされているのでサブビューを加えたりカスタマイズする時は注意が必要って備忘録。 ■実装 UITableViewCellCustomized.h #import <UIKit/UIKit.h> @interface UITableViewCellCustomized : UITableViewCell { UILabel *title; } @property (nonatomic, retain) UILabel *title; @end UITableViewCellCustomized.m #import "UITableViewCellCustomized.h" @implementation UITableViewCellCustomized @synthesize title; - (id)initWithStyle:(UITableVie
WebViewっぽくならないようにバウンスをさせないようにし、HTTPリクエストにカスタムヘッダーを付加するようにした。たいしてカスタマイズしてない。 #import <UIKit/UIKit.h> @interface CustomWebView : UIWebView @end #import "CustomWebView.h" @implementation CustomWebView - (id)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) {// Initialization code // バウンスさせない for (id subview in self.subviews) { if ([[subview class] isSubclassOfClass: [UIScrol
■組込 zxing-x.x/iphone/ZXingWidget/を自身のプロジェクトのプロジェクトナビゲーターにドロップする。 Targets > Build Phases Target DependenciesでZXingWidgetを追加した後、Link Binary With Librariesで以下を追加する。 libZXingWidget.a libiconv.dylib CoreMedia.framework CoreVideo.framework AVFoundation.framework AudioToolbox.framework AddressBook.framework AddressBookUI.framework CoreGraphics.framework Project > Build Settings Header Search Pathsに以下の項目を
■PHP hash_hmac('md5', $str, 'key'); ■Python import hmac from hashlib import sha1 from hashlib import md5 hmac.new("key", "value", md5).hexdigest() hmac.new("key", "value", sha1).hexdigest() ■Android public class HmacMD5 { private static final String ALGORISM = “HmacMD5”; private static final String S = “key”; public static String get(String str) { SecretKeySpec secretKeySpec = new SecretKeySpec(S.
めも。備忘録。 ■実装 以下のようにして実装する。 package info.justoneplanet.android.sample.notification; import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; public class MainActivity extends Activity { public static final int NOTIFICATION_REQUEST_CODE = 100; /** Called when the act
onClickなどのユーザイベント実行時に取得するならば以下の方法で取得ができる。 mView.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { int width = v.getWidth(); int height = v.getHeight(); } }); これを利用して以下のようにすると正しく取得できない。 @Override public void onCreate(Bundle savedInstanceState) { // ... int width = mView.getWidth();// 0 int height = mView.getHeight();// 0 } onCreate, onStart, onResumeではレンダリングが終了し
Say Goodbye to the Menu Button(原文)の記事を途中まで結構適当に翻訳してます。何か問題がありましたらお知らせください。 Android 3.0 (Honeycomb)以前、全てのAndroidデバイスはメニューに専用のメニューボタンを含有していた。開発者として、関連したオプションをユーザに表示するためやアクティビティのビルトインオプションメニューを使うためにメニューボタンを使うことができた。Honeycombは物理的ボタンへの依存をやめ、ユーザーオプションからのアクションを素早く表示させる一般的な解決策としてActionBarクラスを紹介した。最も直感的で一貫性のあるユーザーエクスペリエンスを提供するために、デザインをメニューボタンの使用からアクションバーの使用に移行するべきである。これは新しいコンセプトではない(アクションバーパターンはHoneycomb以前
そろそろ忘れそうだからメモしておく。 ■WebViewで取得したCookieの保存 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web); webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setBuiltInZoomControls(false); webView.setHorizontalScrollBarEnabled(false); webView.setWebViewClient(new WebVie
■手順 アプリケーションのrootディレクトリで以下のコマンドを実行する。 php lib/Cake/Console/cake.php i18n 以下のように表示される。 Welcome to CakePHP v2.0.4 Console --------------------------------------------------------------- App : app Path: /var/www/domain/app/ --------------------------------------------------------------- I18n Shell --------------------------------------------------------------- [E]xtract POT file from sources [I]nitia
以下のようにしてTouchUtilsを使用することができる。 public void testPushListByTouchUtils() { LinearLayout item = (LinearLayout) mActivity.getListView().getChildAt(0); //TouchUtils.tapView(this, item);// 画面に触れている状態 TouchUtils.clickView(this, item);// 画面から指が離れた状態 String face = (String) ((TextView) item.findViewById(R.id.list_face)).getText(); ClipboardManager cm = (ClipboardManager) mActivity.getSystemService(Context.CL
透明度のあるイメージをつくる。 <?php $width = 300;// px $height = 40;// px $text = 'This is a sample.';// string $font = '/usr/share/fonts/bitstream-vera/ACaslonPro-Bold.otf';// path $img = imagecreatetruecolor($width, $height); $color = imagecolorallocatealpha($img, 210, 0, 0, 255); $backgroundColor = imagecolorallocatealpha($img, 255, 255, 255, 127); imagealphablending($img, true); // ブレンドモードを設定する imagesavealp
■フレームワーク StoreKitを追加する。 #import <StoreKit/StoreKit.h> ■実装 以下のようにしてSKProductsRequestDelegateとSKPaymentTransactionObserverを実装する。/p> HogeViewController.h @interface HogeViewController : UIViewController<SKProductsRequestDelegate, SKPaymentTransactionObserver> { bool isLoading; SKProductsRequest *skProductsRequest; UIActivityIndicatorView *spinner; UIView *loaderBg; UILabel *loaderTitle; } @property b
■コード 以下のようにUIスレッドでAsyncTaskをインスタンス化する必要がある。 public class EveryoneTaskTest extends ActivityInstrumentationTestCase2<Kaomoji> { private Kaomoji mActivity; private Instrumentation mInstrumentation; private EveryoneTask everyoneHttp; private CountDownLatch countDownLatch; private String mResult; public EveryoneTaskTest() { super("info.justoneplanet.android.kaomoji", Kaomoji.class); } @Override protect
原文はこちらです。結構適当に訳してますので間違いがあれば指摘していただけると助かります。 ■ハードウェアアクセラレーションの有効化 android 4.0ではデフォルトでハードウェアアクセラレーションがONになった。4.0よりも低いレベルでは「android:hardwareAccelerated=”true”」をAndroidManifest.xmlの<application>タグに加えることでONにできる。 もっと2Dのレンダリングパイプラインを学びたいならオフィシャル開発ガイドを見るように。このガイドは様々なレベルでハードウェアアクセラレーションをコントロールする方法を説明し、様々なパフォーマンスチップスやトリックを提供、新しい描画モデルの詳細を説明している。 Google I/O 2011 の Androidハードウェアアクセラレーションを見るのがおすすめ。 ■TextureVie
■実装 app/Controller/UsersController.php App::uses('AppController', 'Controller'); /** * Users Controller * @property User $User */ class UsersController extends AppController { public $uses = array('User'); public $components = array( 'Session', 'Auth' => array( 'loginRedirect' => array('controller' => 'users', 'action' => 'index'),// ログイン後のリダイレクト先 'logoutRedirect' => array('controller' => 'pages',
ドキュメントが分かりにくかったので自分で書いてみた。 ■テスト対象のクラス ASIHTTPRequestを使った普通のクラス。 MyHTTP.h #import <Foundation/Foundation.h> #import "MyHTTPDelegate.h" @class ASIHTTPRequest; @class MyHTTPDelegate; @interface MyHTTP : NSObject { id <MyHTTPDelegate> delegate; } @property (nonatomic, retain) id delegate; - (void)loadData; - (void)requestFinished:(ASIHTTPRequest *)request; - (void)requestFailed:(ASIHTTPRequest *)reque
特に重いクエリは使ってないんだが、とりあえずAsyncQueryHandlerを使ってSQLiteのクエリを非同期で処理する。 ■実装 以下のようにmanifestファイルのapplication要素内にproviderを追加する。 <provider android:name=".Provider" android:authorities="info.justoneplanet.android.sample.provider"<!--アクセスするためのURI--> android:exported="false"/><!--非公開にしないと他のアプリからアクセスできてしまう--> セキュリティには注意する。 Helper.java class Helper extends SQLiteOpenHelper { private static final int VERSION = 1; p
samplepluginを作るとする。 ■メインの JavaScript plugins/sampleplugin (function(){ /** * include language files */ tinymce.PluginManager.requireLangPack('sampleplugin'); /** * define plugin */ tinymce.create( "tinymce.plugins.SamplePlugin", { /** * init * @param {Object} editor : tinymce * @param {string} url */ "init" : function(editor, url){ editor.addCommand( "sample", function(){ //コマンドが実行された時のアクション } );
次のページ
このページを最初にブックマークしてみませんか?
『@blog.justoneplanet.info』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く