<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7588247842394426706</id><updated>2012-02-14T13:13:21.884+09:00</updated><category term='iphoneアプリ開発メモ'/><category term='Python'/><category term='業務の失敗と解決方法のメモ'/><category term='facebook'/><category term='小説'/><category term='scala'/><category term='情報処理プロジェクトマネージャー試験の勉強'/><category term='オリジナルアプリ'/><category term='git'/><category term='2010挨拶'/><category term='Linux'/><category term='インデックス投資'/><category term='mac'/><category term='副収入の調査'/><category term='ゲーム'/><category term='ビジネスとしてのWEB'/><category term='プログラマーズバイブル'/><category term='雑談'/><category term='男の料理'/><category term='世間を語る'/><category term='Android'/><category term='読書感想'/><category term='PC環境'/><title type='text'>ダメ男のブログ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default?start-index=101&amp;max-results=100'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>144</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1214742761295141923</id><published>2012-02-14T13:13:00.000+09:00</published><updated>2012-02-14T13:13:21.900+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>life cycle of fragment</title><content type='html'>&lt;p&gt;さて、すっかりとandroid開発になくてはならなくなったfragmentですが、どうも挙動やメモリ管理に???なことが多々起こるので調査することにしました。&lt;br/&gt;調査はandroid-support-v4.jarで行いました。違うversionを利用しているかたは注意してください。&lt;/p&gt;&lt;p&gt;さて、ListFragmentを使って挙動を確認します。&lt;br/&gt;FragmentActivityを継承したクラスでListFragmentを継承したクラスを実体化します。&lt;/p&gt;&lt;h3&gt;sample1 : FragmentActivity screen is displayed!!&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    onCreateView&lt;br /&gt;        ↓&lt;br /&gt;    onActivityCreated&lt;br /&gt;        ↓&lt;br /&gt;    onStart&lt;br /&gt;        ↓&lt;br /&gt;    onResume&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のような場合は、onCreateViewでviewを作り、onActivityCreatedでデータを設定するのが典型的なパターンでしょう。&lt;br/&gt;さて、次に表示されているFragmentActivity画面で、デバイスの戻るボタンを押します。&lt;/p&gt;&lt;h3&gt;sample2 : Device back is pushed!!&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    onPause&lt;br /&gt;        ↓&lt;br /&gt;    onStop&lt;br /&gt;        ↓&lt;br /&gt;    onDestroyView&lt;br /&gt;        ↓&lt;br /&gt;    onDestroy&lt;br /&gt;        ↓&lt;br /&gt;    onDetach&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;色々と呼び出されましたね。&lt;br/&gt;しかし、これではよくわかりません。なので、FragmentActivity画面で、ホームボタンを押します。&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;sample3 : Home button is pushed!!&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    (onSaveInstanceState)&lt;br /&gt;        ↓&lt;br /&gt;    onPause&lt;br /&gt;        ↓&lt;br /&gt;    onStop&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;画面がユーザーから見えなくなると上記の二つのメソッドが呼び出されるわけです。&lt;br/&gt;さて、再びアプリを立ち上げます。&lt;/p&gt;&lt;h3&gt;sample4 : Application is relaunched&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    onStart&lt;br /&gt;        ↓&lt;br /&gt;    onResume&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;activityと同じ挙動ですね。理解しやすいです。&lt;br/&gt;縦横画面対応かつ、ユーザーの入力項目がある場合は、ここでonSaveInstanceStateで保存したデータの詰め替えをおこなうと良いでしょう。通常は無視で問題ないです。&lt;br/&gt;&lt;/p&gt;&lt;p&gt;ListFragmentは列表示に使うので、他のFragmentActivity画面に遷移します。&lt;br/&gt;&lt;h3&gt;sample5 : Next screen is called!!&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    (onSaveInstanceState)&lt;br /&gt;        ↓&lt;br /&gt;    onPause&lt;br /&gt;        ↓&lt;br /&gt;    次画面の処理&lt;br /&gt;        ↓&lt;br /&gt;    onStop&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;onPauseとonStopの間に次の画面の処理が入るのに注意してください。&lt;/p&gt;最後に前の画面に戻ります。&lt;/p&gt;&lt;h3&gt;sample6 : Prev screen is backed!!&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    onStart&lt;br /&gt;        ↓&lt;br /&gt;    onResume&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記の流れがわかれば、挙動でほとんど困ることはないでしょう。&lt;br/&gt;ガーベッジコレクションのみに依存するとろくなことにならないので、コードが煩雑にならない程度に、適切にオブジェクトを破棄しましょう。&lt;br/&gt;あくまで「電話」だという認識を忘れないようしましょう。&lt;br/&gt;メモリは大切にね。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1214742761295141923?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1214742761295141923/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/life-cycle-of-fragment.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1214742761295141923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1214742761295141923'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/life-cycle-of-fragment.html' title='life cycle of fragment'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5078275507001041093</id><published>2012-02-13T05:20:00.000+09:00</published><updated>2012-02-13T05:20:52.926+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='オリジナルアプリ'/><title type='text'>Androidアプリ「記憶の王様」version1.3.0公開</title><content type='html'>&lt;p&gt;Androidアプリ「記憶の王様」のversion1.3.0を公開しました。&lt;br/&gt;「レポート」のページを追加しました。&lt;br/&gt;中国語に対応しました。&lt;/p&gt;&lt;h4&gt;図1:履歴&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-klrknxAvdvw/TzgeoADcGAI/AAAAAAAAAJw/eTXgfhmrMd4/s1600/history.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://3.bp.blogspot.com/-klrknxAvdvw/TzgeoADcGAI/AAAAAAAAAJw/eTXgfhmrMd4/s320/history.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;h4&gt;図2:記憶時間レポート結果&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-T96VCIx50hU/TzgetQrYgQI/AAAAAAAAAJ8/OK65SV1r_cg/s1600/report_result.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://4.bp.blogspot.com/-T96VCIx50hU/TzgetQrYgQI/AAAAAAAAAJ8/OK65SV1r_cg/s320/report_result.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5078275507001041093?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5078275507001041093/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidversion130.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5078275507001041093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5078275507001041093'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidversion130.html' title='Androidアプリ「記憶の王様」version1.3.0公開'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-klrknxAvdvw/TzgeoADcGAI/AAAAAAAAAJw/eTXgfhmrMd4/s72-c/history.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-9210035408917969045</id><published>2012-02-12T17:51:00.000+09:00</published><updated>2012-02-12T17:51:18.335+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>androidのWebViewからiphonのUIWebViewへの移植 その3</title><content type='html'>&lt;p&gt;&lt;a href="http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-2.html"&gt;前回&lt;/a&gt;はandroidのwebViewを利用してHTMLをロードする方法を学びました。&lt;br/&gt;今回はiphoneのUIWebViewを使った画面表示のソースを以下に示します。&lt;/p&gt;&lt;h4&gt;sample1. UIWebView source code objective-C interface(ios4)&lt;/h4&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;br /&gt;&lt;br /&gt;//  WEBHTML アプリについて&lt;br /&gt;static NSInteger const ABOUT_APP = 1;&lt;br /&gt;//  WEBHTML アプリについて タイトル&lt;br /&gt;static NSString *const ABOUT_APP_ITEM_NAME = @"アプリについて";&lt;br /&gt;&lt;br /&gt;@interface WebViewController : UIViewController&amp;lt;UIWebViewDelegate&amp;gt; {&lt;br /&gt; @private&lt;br /&gt;  NSInteger webDisp_;&lt;br /&gt;  UIWebView *webView_;&lt;br /&gt;  NSString *pathForResource_;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@property(nonatomic, assign)NSInteger webDisp;&lt;br /&gt;@property(nonatomic, retain)UIWebView *webView;&lt;br /&gt;@property(nonatomic, retain)NSString *pathForResource;&lt;br /&gt;&lt;br /&gt;- (void)cancel;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;h4&gt;sample2. UIWebView source code objective-C implementation(ios4)&lt;/h4&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#import WebViewController.h"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@implementation WebViewController&lt;br /&gt;@synthesize webDisp = webDisp_;&lt;br /&gt;@synthesize webView = webView_;&lt;br /&gt;@synthesize pathForResource = pathForResource_;&lt;br /&gt;&lt;br /&gt;- (void)cancel {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    [self dismissModalViewControllerAnimated:YES];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)viewDidLoad {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;&lt;br /&gt;    if (ABOUT_APP == webDisp_) {&lt;br /&gt;        self.title = ABOUT_APP_ITEM_NAME;&lt;br /&gt;        self.pathForResource = @"about_app";&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];&lt;br /&gt;&lt;br /&gt;    self.navigationItem.backBarButtonItem = leftButton;&lt;br /&gt;    [leftButton release];&lt;br /&gt;&lt;br /&gt;    self.webView = [[UIWebView alloc] initWithFrame:self.view.bounds];&lt;br /&gt;    self.webView.scalesPageToFit = YES;&lt;br /&gt;&lt;br /&gt;    self.webView.delegate = self;&lt;br /&gt;    [self.view addSubview:self.webView];&lt;br /&gt;&lt;br /&gt;    NSString *path = [[NSBundle mainBundle] pathForResource:pathForResource_ ofType:@"html"];&lt;br /&gt;    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]];&lt;br /&gt; &lt;br /&gt;    [super viewDidLoad];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)webViewDidStartLoad:(UIWebView*)webView {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    // ページ読込開始時にインジケータをくるくるさせる&lt;br /&gt;    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)webViewDidFinishLoad:(UIWebView*)webView {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    // ページ読込完了時にインジケータを非表示にする&lt;br /&gt;    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    // 読み込みに失敗した場合は前のページに戻る&lt;br /&gt;    [self dismissModalViewControllerAnimated:YES];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)viewDidUnload {&lt;br /&gt;    webView_.delegate = nil;&lt;br /&gt;    [webView_ release], webView_ = nil;&lt;br /&gt;    [pathForResource_ release], pathForResource_ = nil;&lt;br /&gt;    [super viewDidUnload];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;- (void)dealloc {&lt;br /&gt;    webView_.delegate = nil;&lt;br /&gt;    [webView_ release], webView_ = nil;&lt;br /&gt;    [pathForResource_ release], pathForResource_ = nil;&lt;br /&gt;    [super dealloc];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;大切なことは、webView_をreleaseする時は、&lt;font color="red"&gt;delegateにnilをセット&lt;/font&gt;する必要があることです。&lt;br/&gt;htmlは&lt;font color="red"&gt;Resourcesフォルダ配下に設定&lt;/font&gt;します。ここでは、about_app.htmlというHTMLファイルを設定しています。&lt;br/&gt;サーバー側において呼び出す場合は、通信エラー処理も追加しましょう。エラーメッセージはalertで表示するのがiphoneコーディングの流儀です。&lt;/p&gt;&lt;p&gt;このソースをコンパイルして実行すると、以下のような画面が表示されます。&lt;/p&gt;&lt;h4&gt;図1.アプリについて画面(iphone)&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qY9IB-20Uyw/Ty1vqdk1HKI/AAAAAAAAAJM/aBQcaLBUSSE/s1600/about_app_view.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="214" src="http://2.bp.blogspot.com/-qY9IB-20Uyw/Ty1vqdk1HKI/AAAAAAAAAJM/aBQcaLBUSSE/s320/about_app_view.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;p&gt;ナビゲーションバーの下にロードしたHTMLが表示されています。&lt;/p&gt;&lt;p&gt;以上で移植作業は完了になります。&lt;br/&gt;一度慣れてしまえば、HTML共通化コーディングはアプリ作成作業をとても楽にします。&lt;br/&gt;開発者のみなさんが、楽しい開発ライフを送って定時で帰宅できることを祈ってます。&lt;br/&gt;でわ。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-9210035408917969045?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/9210035408917969045/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9210035408917969045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9210035408917969045'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-3.html' title='androidのWebViewからiphonのUIWebViewへの移植 その3'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-qY9IB-20Uyw/Ty1vqdk1HKI/AAAAAAAAAJM/aBQcaLBUSSE/s72-c/about_app_view.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1023329267980251291</id><published>2012-02-08T20:07:00.000+09:00</published><updated>2012-02-08T20:07:21.074+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>The real object has been deleted</title><content type='html'>&lt;p&gt;ログにThe real object has been deletedというエラーが発生していたので調査しました。&lt;br/&gt;このエラーが発生してもアプリケーションが落ちるわけではないので、放置でも問題はないのですが、気持ち悪いので調べました。&lt;/p&gt;&lt;p&gt;調査の結果、利用したWebViewをonDestroyメソッドで削除しないで、他の画面でWebViewを使うと発生することがわかりました。&lt;/br&gt;なので、対処方法は以下のようになります。&lt;/p&gt;&lt;h3&gt;source code fix "The real object has been deleted"&lt;/h3&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onDestroy() {&lt;br /&gt;        webView.destroy(); &lt;br /&gt;        super.onDestroy();&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のようにすると、エラーが発生しなくなります。&lt;br/&gt;ゴミはきちんと処分しましょう。ということのようです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1023329267980251291?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1023329267980251291/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/real-object-has-been-deleted.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1023329267980251291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1023329267980251291'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/real-object-has-been-deleted.html' title='The real object has been deleted'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-267741751365739804</id><published>2012-02-08T02:21:00.000+09:00</published><updated>2012-02-08T18:46:56.227+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>androidのWebViewからiphonのUIWebViewへの移植 その2</title><content type='html'>&lt;p&gt;共通化の重要性は&lt;a href="http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-1.html"&gt;前回&lt;/a&gt;で指摘しました。ではandroidのwebViewを使った画面表示のソースを以下に示します。&lt;/p&gt;&lt;h4&gt;sample1. WebView source code java(minSdkVersion android2.1)&lt;/h4&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;    private boolean useLogo = false;&lt;br /&gt;    private boolean showHomeUp = false;&lt;br /&gt;&lt;br /&gt;    WebView webView;&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.web_view_layout);&lt;br /&gt;        &lt;br /&gt;        final ActionBar ab = getSupportActionBar();&lt;br /&gt;&lt;br /&gt;        // set defaults for logo &amp; home up&lt;br /&gt;        ab.setDisplayHomeAsUpEnabled(showHomeUp);&lt;br /&gt;        ab.setDisplayUseLogoEnabled(useLogo);&lt;br /&gt;&lt;br /&gt;        this.webView = (WebView) findViewById(R.id.webview);&lt;br /&gt;        String html = getIntent().getStringExtra(Constants.PARAM_NAME_HTML_TYPE);&lt;br /&gt;        if (Constants.PARAM_NAME_HTML_TYPE_ABOUT.equals(html)) {&lt;br /&gt;            this.webView.loadUrl("file:///android_asset/html/about.html");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onDestroy() {&lt;br /&gt;        webView.destroy(); &lt;br /&gt;        super.onDestroy();&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;h4&gt;sample2. WebView source code xml&lt;/h4&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent" &lt;br /&gt;    android:background="@drawable/common_bg" &amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;WebView  &lt;br /&gt;        android:id="@+id/webview"&lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="fill_parent" &lt;br /&gt;        android:background="#00000000" /&amp;gt;&lt;br /&gt;        &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;sample1のソースコードでは、webView変数にHTMLを設定しています。&lt;br/&gt;このアプリでは、HTMLを内部ファイルとして&lt;font color="red"&gt;assets/html/&lt;/font&gt;配下に配置してあります。&lt;br/&gt;サーバー側において呼び出す場合は、通信エラー処理も追加しましょう。&lt;br/&gt;ただ、スマートフォンの通信は負荷が大きいので、なるべく内部ファイルとして配置したほうがいいと思います。&lt;br/&gt;クラスはactivity、fragmentのどちらでも構いません。アプリの設計次第です。&lt;br/&gt;このアプリでは、FragmentActivityを継承したクラスで利用しています。&lt;/p&gt;&lt;p&gt;このソースをコンパイルして実行すると、以下のような画面が表示されます。&lt;/p&gt;&lt;h4&gt;図1.実行結果画面&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ogMxWOnXRUU/Ty1unqbvlXI/AAAAAAAAAI0/wtM0ssnV2jk/s1600/about_app_view_ad.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://1.bp.blogspot.com/-ogMxWOnXRUU/Ty1unqbvlXI/AAAAAAAAAI0/wtM0ssnV2jk/s320/about_app_view_ad.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;p&gt;アクションバーの下にHTMLが表示されています。&lt;br/&gt;次回は、このコードをiphoneでも実装できるように移植していきます。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-267741751365739804?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/267741751365739804/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/267741751365739804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/267741751365739804'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-2.html' title='androidのWebViewからiphonのUIWebViewへの移植 その2'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ogMxWOnXRUU/Ty1unqbvlXI/AAAAAAAAAI0/wtM0ssnV2jk/s72-c/about_app_view_ad.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6225918309264068944</id><published>2012-02-07T01:03:00.000+09:00</published><updated>2012-02-07T01:03:22.489+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='オリジナルアプリ'/><title type='text'>Androidアプリ「記憶の王様」version1.2.0公開</title><content type='html'>&lt;p&gt;Androidアプリ「記憶の王様」のversion1.2.0を公開しました。&lt;br/&gt;「記憶情報」「記憶日付情報」のページを追加しました。&lt;/p&gt;&lt;p&gt;記憶時間の随時更新と日付ごとの記憶時間確認ができるようになりました。&lt;br/&gt;記憶時間の目安、確認として利用できます。&lt;/p&gt;&lt;h4&gt;図1:記憶情報画面&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-IN5aDgTrYGM/Ty_4TJhNh2I/AAAAAAAAAJY/jRcKVyq1a00/s1600/memory_info.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://3.bp.blogspot.com/-IN5aDgTrYGM/Ty_4TJhNh2I/AAAAAAAAAJY/jRcKVyq1a00/s320/memory_info.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;h4&gt;図2:記憶日付情報画面&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-YNsW-Mdd_q4/Ty_5FHDLAJI/AAAAAAAAAJk/i3I2As-ZZR8/s1600/memory_date_info.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://1.bp.blogspot.com/-YNsW-Mdd_q4/Ty_5FHDLAJI/AAAAAAAAAJk/i3I2As-ZZR8/s320/memory_date_info.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6225918309264068944?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6225918309264068944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidversion120.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6225918309264068944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6225918309264068944'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidversion120.html' title='Androidアプリ「記憶の王様」version1.2.0公開'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-IN5aDgTrYGM/Ty_4TJhNh2I/AAAAAAAAAJY/jRcKVyq1a00/s72-c/memory_info.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3572657032275811925</id><published>2012-02-05T02:51:00.000+09:00</published><updated>2012-02-05T02:51:34.528+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>androidのWebViewからiphonのUIWebViewへの移植 その1</title><content type='html'>&lt;p&gt;アプリ開発を行う場合に、iphoneアプリとandroidアプリの両方を作成しないといけない場合があると思います。&lt;br/&gt;両方のアプリを開発する場合の最大の問題はプログラミング言語です。&lt;br/&gt;androidはjava、iphoneはobjetive-Cという別々の言語で開発をしなければなりません。&lt;/p&gt;&lt;p&gt;プログラミング能力に長けたエンジニアなら使用するプログラム言語の違いはそれほど問題ではないと思いますが、開発効率を考えると共通化できる部分は共通化しておきたいところです。&lt;/p&gt;&lt;p&gt;というわけで、ここではandroidのWebViewを使って画面の一部をHTMLで作成し、iphoneのUIWebViewに移植することをやっていきたいと思います。&lt;br/&gt;サンプルには私の開発したアプリ「記憶の王様」の一部を利用します。&lt;/p&gt;&lt;p&gt;android版「記憶の王様」アプリでは、【その他】画面から遷移できる【アプリについて】【アプリ使用例】【利用規約】【ライセンス契約】の内容をWebViewを使ったHTMLで表示しています。&lt;/p&gt;&lt;h4&gt;図1.その他画面(android)&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1D3Ag1vkmNE/Ty1tN-mO5fI/AAAAAAAAAIo/pEXwEBGNJBA/s1600/other_view_ad.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-1D3Ag1vkmNE/Ty1tN-mO5fI/AAAAAAAAAIo/pEXwEBGNJBA/s320/other_view_ad.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt; ↓&lt;h4&gt;図2.アプリについて画面(android)&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ogMxWOnXRUU/Ty1unqbvlXI/AAAAAAAAAI0/wtM0ssnV2jk/s1600/about_app_view_ad.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://1.bp.blogspot.com/-ogMxWOnXRUU/Ty1unqbvlXI/AAAAAAAAAI0/wtM0ssnV2jk/s320/about_app_view_ad.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;これをiphone版「記憶の王様」アプリでは、UIWebViewを使って以下のように移植します。&lt;/p&gt;&lt;h4&gt;図3.その他画面(iphone)&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-46NkVCWsoEM/Ty1va3YRoII/AAAAAAAAAJA/Cv9PIn1Wf8A/s1600/other_view.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="214" src="http://4.bp.blogspot.com/-46NkVCWsoEM/Ty1va3YRoII/AAAAAAAAAJA/Cv9PIn1Wf8A/s320/other_view.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;↓&lt;h4&gt;図4.アプリについて画面(iphone)&lt;/h4&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-qY9IB-20Uyw/Ty1vqdk1HKI/AAAAAAAAAJM/aBQcaLBUSSE/s1600/about_app_view.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="214" src="http://2.bp.blogspot.com/-qY9IB-20Uyw/Ty1vqdk1HKI/AAAAAAAAAJM/aBQcaLBUSSE/s320/about_app_view.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="clear"&gt;&lt;/div&gt;&lt;p&gt;【アプリについて】画面の内容はandroidと同じようにHTMLで表示しています。&lt;br/&gt;このようにHTMLを使い回すことで、保守性が高い、エンジニアの負担を軽減してくれるアプリ開発をおこなうことが出来ます。&lt;br/&gt;ただし、複雑な処理をHTMLで記述するのは処理速度上あまりお薦めできません。一方で、シンプルな箇所はなるべくHTMLにしたいところです。&lt;br/&gt;さて、それでは移植作業の説明をしていこうと思います。&lt;br/&gt;少々長い話になると思いますが、よろしくお願いします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3572657032275811925?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3572657032275811925/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3572657032275811925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3572657032275811925'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/androidwebviewiphonuiwebview-1.html' title='androidのWebViewからiphonのUIWebViewへの移植 その1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-1D3Ag1vkmNE/Ty1tN-mO5fI/AAAAAAAAAIo/pEXwEBGNJBA/s72-c/other_view_ad.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3041298195367683186</id><published>2012-02-02T22:08:00.000+09:00</published><updated>2012-02-02T22:08:39.212+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>世の中の変化を考える</title><content type='html'>&lt;p&gt;ソーシャルメディアの普及で世の中は大きく変化してきています。&lt;br /&gt;その中でも大きな変化の一つが、力あるものが、世の中の表舞台に出てくるスピードが圧倒的に早くなったことでしょう。&lt;br /&gt;これは、どの世界でも共通にみられる傾向です。&lt;br /&gt;最近の例だと、youtubeでadeleのRolling in the deepをコピーした驚くべき歌唱力の少女があっというまに世界中で有名になりました。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/a7UFm6ErMPU/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/a7UFm6ErMPU&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/a7UFm6ErMPU&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;p&gt;しかし、一方で、これまでそこそこの力でなんとか表舞台でやっていた人たちはどんどん消えていってます。&lt;br /&gt;誰でもネットを通して世界中の情報を取得できることで、みんなが求めるハードルが自然と高くなっているのです。&lt;br /&gt;つまり本物しか残れない世界に確実になってきているのです。&lt;/p&gt;&lt;p&gt;さて、こういう世界が到来したことで考えなくてはいけないのは、我々普通の人たちです。&lt;br /&gt;会社という箱も今後はどんどん消えていくでしょうし、仕事もどんどんグローバル化が進むでしょう。経済格差もますます広がると思います。この流れは絶対に止まりません。仕事のオートメーション化も今後10年で飛躍的に高まるはずです。&lt;/p&gt;&lt;p&gt;そういった要因を考えると、私達はライフスタイルそのものを変える時期に来ているように思えます。&lt;br /&gt;私達は「自分に合った生活」を模索しないといけないのでしょう。&lt;br /&gt;今までは、国の用意したレール、つまりは幼稚園、小学校、中学校、高校、大学、社会人という軌道にのっていけばそれなりに満足のいく生活が送れました。&lt;br /&gt;しかし、グローバル化したことで良くも悪くもルールが変わってしまいました。&lt;br /&gt;国のルール、世界のルール、自分のルールの三つをバランス良く消化しないと満足のいく生活がおくれなくなってきてます。&lt;/p&gt;&lt;p&gt;今年は各国のトップに変化が起こる年なので、もっと変化がおきそうな気がします。&lt;br /&gt;&lt;br /&gt;自分のコントロールできることとできないことの判断がより求められることになりそうです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3041298195367683186?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3041298195367683186/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3041298195367683186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3041298195367683186'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/blog-post.html' title='世の中の変化を考える'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5073616693675406591</id><published>2012-02-01T08:00:00.000+09:00</published><updated>2012-02-01T08:00:58.404+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>iphoneシュミレータでスクリーンショットを撮影する</title><content type='html'>&lt;p&gt;アプリ開発では、画面をキャプチャすることが多々あると思います。&lt;br /&gt;なので、iphoneシュミレータを使った画面をキャプチャする手順を以下に記します。&lt;/p&gt;&lt;ul&gt;&lt;li&gt;iphoneシュミレータを起動し、キャプチャしたい画面にする&lt;/li&gt;&lt;li&gt;command + control + c　で画面をキャプチャする&lt;/li&gt;&lt;li&gt;プレビューアプリを起動し、クリップボードから新規作成を選択する&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;以上の手順で画面をキャプチャできます。&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8qTptJkIeYI/TyhxoOYM1rI/AAAAAAAAAIc/zto8dfs1lhA/s1600/capture_sample.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-8qTptJkIeYI/TyhxoOYM1rI/AAAAAAAAAIc/zto8dfs1lhA/s320/capture_sample.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;*上記のサンプル画像は、iphone版「記憶の王様」アプリの開発中の画面です&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5073616693675406591?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5073616693675406591/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/02/iphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5073616693675406591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5073616693675406591'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/02/iphone.html' title='iphoneシュミレータでスクリーンショットを撮影する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-8qTptJkIeYI/TyhxoOYM1rI/AAAAAAAAAIc/zto8dfs1lhA/s72-c/capture_sample.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1387513042910088542</id><published>2012-01-31T04:06:00.000+09:00</published><updated>2012-01-31T04:06:45.474+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>テーブルの編集1</title><content type='html'>&lt;em&gt;&lt;span style="color: red;"&gt;テーブルを制するものはアプリを制する&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;なんて言葉があってもおかしくないほど頻繁に利用するのがテーブル。&lt;br /&gt;&lt;br /&gt;テーブルの扱いでインターフェースの善し悪しが決まってしまうのは、androidでもiphoneでも、WEBアプリでも同じです。&lt;br /&gt;&lt;br /&gt;というわけで、ここではiphone開発のテーブル処理を記述していきます。&lt;br /&gt;&lt;br /&gt;まずは、UINavigationItemに編集ボタンを追加する方法&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #99ccff;"&gt;&lt;br /&gt;&lt;br /&gt;- (void)viewDidLoad {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSLog(@"%s", __func__);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; self.navigationItem.rightBarButtonItem = [self editButtonItem];&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;上記の記述をすると、ナビゲーションの右側に編集ボタンが設置されます。&lt;br /&gt;&lt;br /&gt;設置された編集ボタンを押下すると、以下のメソッドが呼び出されます。&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #99ccff;"&gt;&lt;br /&gt;- (void)setEditing:(BOOL)editing animated:(BOOL)animated {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSLog(@"%s", __func__);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [super setEditing:editing animated:animated];&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;編集ボタン押下後に、デフォルト動作以外でインターフェースを変更したい場合はここに処理を記述します。&lt;br /&gt;&lt;br /&gt;編集ボタンを押下すると、削除ボタンが表示されます。その削除ボタンを押下すると、以下のメソッドが呼び出されます。&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #99ccff;"&gt;&lt;br /&gt;- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; forRowAtIndexPath:(NSIndexPath *)indexPath {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSLog(@"%s", __func__);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (editingStyle == UITableViewCellEditingStyleDelete) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // NSLog(@"before count is %d", [self.list count]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NSInteger row = [indexPath row];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // この処理を実行すると、tableView:numberOfRowsInSectionが呼び出される&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; withRowAnimation:UITableViewRowAnimationFade];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;削除処理の場合は、引数editingStyleにUITableViewCellEditingStyleDeleteの値が格納されます。&lt;br /&gt;&lt;br /&gt;deleteRowsAtIndexPathsメソッドはテーブルの削除処理と表示をおこないます。&lt;br /&gt;&lt;br /&gt;また追加の場合は&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #99ccff;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:insertIndexPath_] &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; withRowAnimation:UITableViewRowAnimationFade];&lt;/pre&gt;&lt;br /&gt;の処理を記述します。&lt;br /&gt;&lt;br /&gt;列の追加と削除はアニメーションを使って、ユーザーが目で確認できるようにするべきです。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1387513042910088542?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1387513042910088542/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/1_31.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1387513042910088542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1387513042910088542'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/1_31.html' title='テーブルの編集1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1383390515990877644</id><published>2012-01-30T07:53:00.000+09:00</published><updated>2012-01-30T07:53:01.897+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>エンジニアが新しい言語を学ぶ方法</title><content type='html'>久しぶりの雑談です。&lt;br /&gt;さてさて、エンジニアとして開発をおこなっていると直面してくる問題の一つに、&lt;br /&gt;新しい言語をいつ、どのように覚えるかということがあります。&lt;br /&gt;&lt;br /&gt;この世界はスピードが速いので、トレンドはすぐに変わります。&lt;br /&gt;私の場合、現在はjava,objective-C,HTML5をメインで使っています。&lt;br /&gt;以前はサーバーサイドのjava,php,ruby等でもちょこちょこと開発しましたが、今は全く利用していません。&lt;br /&gt;サーバー側はpythonでちょこちょこ書くくらいです。&lt;br /&gt;&lt;br /&gt;今後しばらくは続くであろうiphoneとandroidの共存時代は、&lt;br /&gt;おそらく共通部分をjavaScript、HTML5、csss3で組み込みつつ、java,objective-Cを使って&lt;br /&gt;細かい部分を補っていくという手法がメインになるでしょう。&lt;br /&gt;&lt;br /&gt;iphone, android, windows phone, nokia等の様々なスマートフォンのアプリ開発を&lt;br /&gt;HTML5とjavaScriptだけ全ておこなえるツールが色々開発されていますが、あまり使うのはおすすめできません。&lt;br /&gt;急がば回れとはよくいったもので、結局高い代償を払うことになると思います。&lt;br /&gt;&lt;br /&gt;さて、そうすると当然勉強が必要になります。&lt;br /&gt;我々エンジニアはどう勉強していけば良いのでしょうか。&lt;br /&gt;&lt;br /&gt;もっとも効果的な勉強方法はただ一つです。&lt;br /&gt;それは製品(アプリ)を「作る」ことです。&lt;br /&gt;&lt;br /&gt;プログラミングを技術を最大に向上させる手段は、やはりアプリケーションをつくることです。&lt;br /&gt;そして、つくったアプリはリリースしてください。そして、保守を続けてください。&lt;br /&gt;この手順を一人の力だけで繰り返してください。&lt;br /&gt;プログラマー、エンジニア、そして製品管理の力が大きく向上するはずです。&lt;br /&gt;&lt;br /&gt;一年〜二年の期間ごとに、新しい言語で新しいアプリを作成することは、時間的にも無理なく実力をつけることができると思います。&lt;br /&gt;もちろんその間も基礎の勉強は継続して欲しいのですが、無理することもないでしょう。&lt;br /&gt;それなりの基礎力は物をつくっていく中で身に付きます。&lt;br /&gt;&lt;br /&gt;5年以上一つの言語でしか物を作っていないという人は注意してください。&lt;br /&gt;ゆでがえる状態にあると思って間違いないです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1383390515990877644?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1383390515990877644/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_30.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1383390515990877644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1383390515990877644'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_30.html' title='エンジニアが新しい言語を学ぶ方法'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8189152509526315294</id><published>2012-01-29T00:20:00.002+09:00</published><updated>2012-01-29T00:20:46.581+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書感想'/><category scheme='http://www.blogger.com/atom/ns#' term='プログラマーズバイブル'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>iphoneアプリ設計の極意</title><content type='html'>&lt;p&gt;今日は久しぶりにお薦めの開発本を紹介します。&lt;/p&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4873115027&amp;IS1=1&amp;ref=tf_til&amp;fc1=000000&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;npa=1&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;p&gt;これはスマートフォンアプリの設計や開発をするなら絶対に読んでおきたい本です。&lt;br/&gt;私もアプリの設計で迷った時は、この本に目を通すようにしています。私の本は、付箋とアンダーラインだらけです。&lt;br/&gt;スマートフォンアプリで最も大切なのが、操作性とUIデザインです。そしてなにより標準性です。&lt;br/&gt;この本を読めば、あなたは良いスマートフォンアプリのデザインを学ぶことが出来るでしょう。android,iphone,windows phoneの開発者、全員に読んでもらいたい本です。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8189152509526315294?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8189152509526315294/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/iphone_29.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8189152509526315294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8189152509526315294'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/iphone_29.html' title='iphoneアプリ設計の極意'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5656845704911047275</id><published>2012-01-28T04:17:00.000+09:00</published><updated>2012-01-28T04:17:43.350+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>プロトコルを理解する2</title><content type='html'>&lt;p&gt;&lt;a href="http://edywrite.blogspot.com/2012/01/1.html"&gt;プロトコルを理解する1&lt;/a&gt;でプロトコルの概念は理解できたはずなので、ここから先は実装を行います。&lt;br/&gt;まず、プロトコルLessonを作成します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;@protocol Lesson&lt;br /&gt;- (NSString *)getLessonContent:(int)lesson;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;次に上記で作成したプロトコルを実装します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#import "Lesson.h"&lt;br /&gt;&lt;br /&gt;@interface ObjectiveCStudyViewController : UIViewController&amp;lt;Lesson&amp;gt; {&lt;br /&gt; @private &lt;br /&gt;  UILabel *stateText;&lt;br /&gt;}&lt;br /&gt;@property (nonatomic, retain) IBOutlet UILabel *statusText;&lt;br /&gt;@end&lt;br /&gt;&lt;br /&gt;@implementation ObjectiveCStudyViewController&lt;br /&gt;@synthesize statusText;&lt;br /&gt;&lt;br /&gt;- (NSString *)getLessonContent:(int)lesson {&lt;br /&gt;    NSString *lessonNumber = [NSString stringWithFormat:@"%d", lesson];&lt;br /&gt;    NSString *returnLessonContent = [@"lesson" stringByAppendingString:lessonNumber];&lt;br /&gt;    return returnLessonContent;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;メソッドは実装部のみに記述します。&lt;br/&gt;ではコンパイルして実行してみましょう。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;NSLog(@"getLessonContent is %@", [self getLessonContent:3]);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以下の結果が出力されます。&lt;/p&gt;&lt;pre style="background-color:#000000;color:#FFFFFF "&gt;&lt;br /&gt;   getLessonContent is lesson3&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;きちんとメソッドが実行できたのが確認できますね。&lt;/p&gt;&lt;p&gt;このプロトコルは、iphoneアプリの開発で、UINavigationControllerを使ったパラメーターのやり取りで使用すると便利です。&lt;br/&gt;呼び出し側でdelegateをセットして、呼び出し側からプロトコルを呼び出すというパターンです。&lt;br/&gt;これも後々説明します。&lt;br/&gt;とりあえず、iphone開発をするなら、プロトコルの使い方は覚えておくと便利だと思います。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5656845704911047275?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5656845704911047275/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5656845704911047275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5656845704911047275'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/2.html' title='プロトコルを理解する2'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3877198326653998295</id><published>2012-01-27T06:23:00.000+09:00</published><updated>2012-01-27T06:23:50.103+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>プロトコルを理解する1</title><content type='html'>&lt;p&gt;objective-Cにはプロトコルという概念があります。プロトコルは、オブジェクトの役割や振る舞いをあらわすメソッドの集合のことです。&lt;br/&gt;ちなみに、java言語におけるインターフェースという概念は、objective-Cのプロトコルを取り入れています。&lt;/p&gt;&lt;p&gt;プロトコルは、メソッド宣言の集合であり、実現方法は各クラスに任されます。&lt;br/&gt;プロトコルは以下のように宣言します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @protocol プロトコル名&lt;br /&gt;    メソッド宣言;&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;xcodeでプロトコルファイルを作成する場合は、&lt;br/&gt;追加→新規ファイル→objective-Cprotocol→ファイル名入力&lt;br/&gt;といった手順になります。&lt;/p&gt;&lt;p&gt;プロトコルファイルは通常ヘッダファイルとして記述します。利用する場合は、必要とするクラス宣言でインポートします。&lt;br/&gt;プロトコルの利用はインターフェースで以下のように宣言します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @interface クラス名 : スーパークラス名 &lt;プロトコル名&gt; {&lt;br /&gt;      インスタンス変数;&lt;br /&gt;    }&lt;br /&gt;    メソッドの宣言:&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;プロトコルの宣言をした場合、インターフェースで宣言したメソッドと同様に、実装部で実装する必要があります。&lt;br/&gt;又、プロトコルは複数指定することも可能です。インターフェースの&lt;&gt;内で【,】で区切って複数のプロトコル名を記述します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @interface クラス名 : スーパークラス名 &lt;プロトコル名1, プロトコル名2&gt; {&lt;br /&gt;      インスタンス変数;&lt;br /&gt;    }&lt;br /&gt;    メソッドの宣言:&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;プロトコルは継承も可能です。以下のように宣言します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @protocol プロトコル名 &lt;プロトコル名2&gt;&lt;br /&gt;    メソッド宣言;&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;プロトコルの意義は、プロトコルを採用したクラスがどういう機能に対応しているかを明確にすることです。クラスがどのプロトコルを採用しているかを知るには、Class ReferenceのConforms toグループで確認できます。&lt;br/&gt;例えば、NSStringクラスならば、&lt;ul&gt;&lt;li&gt;NSCoding&lt;/li&gt;&lt;li&gt;NSCopying&lt;/li&gt;&lt;li&gt;NSMutableCopying&lt;/li&gt;&lt;li&gt;NSObject (NSObject)&lt;/li&gt;&lt;/ul&gt;のプロトコルに対応していることになります。。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3877198326653998295?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3877198326653998295/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3877198326653998295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3877198326653998295'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/1.html' title='プロトコルを理解する1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-109203051256961786</id><published>2012-01-26T19:34:00.000+09:00</published><updated>2012-01-26T19:34:08.022+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>型のある定数を宣言する</title><content type='html'>&lt;p&gt;objective-Cで型を宣言した定数を利用したい場合があると思います。&lt;br/&gt;その場合は、constを利用します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;@implementation TestController &lt;br /&gt;&lt;br /&gt;const NSInteger SAMPLE_TEXT_FIELD_TAG = 2;&lt;br /&gt;&lt;br /&gt;@synthesize testId = testId_;&lt;br /&gt;@synthesize testName = testName_;&lt;br /&gt;&lt;br /&gt;- (IBAction)cancel:(id)sender {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    [self dismissModalViewControllerAnimated:YES];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;objective-Cの定数宣言は、他にもdefine,enum等で可能です。&lt;br/&gt;&lt;a href="http://edywrite.blogspot.com/2012/01/blog-post_15.html"&gt;共通で利用する定数を宣言する&lt;/a&gt;の記事で紹介したような手法も利用できます。&lt;/p&gt;&lt;p&gt;何がベストプラックティスなのかは、私はobjective-Cの経験値が低いので断言できません。&lt;br/&gt;もっと突っ込んで知りたい人は&lt;a href="http://iphone-dev.g.hatena.ne.jp/ID2nd/20100302/1267546969"&gt;こちら&lt;/a&gt;の記事が参考になると思います。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-109203051256961786?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/109203051256961786/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_26.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/109203051256961786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/109203051256961786'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_26.html' title='型のある定数を宣言する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7436655373182907430</id><published>2012-01-23T23:08:00.000+09:00</published><updated>2012-01-23T23:08:29.778+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>iphone開発の基礎知識 カテゴリを理解する</title><content type='html'>&lt;p&gt;objective-Cにはカテゴリという概念があります。カテゴリは、あるクラスの一部分のメソッドを実現するモジュールです。&lt;br/&gt;カテゴリはクラスと同様にインターフェース部分で宣言を記述し、実装部にその定義を記述します。ただし、インスタンス変数を宣言することはできません。&lt;/p&gt;カテゴリは以下のように宣言します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @interface クラス名 (カテゴリ名)&lt;br /&gt;    メソッド宣言;&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;実装部は、以下のように記述します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    @implementation クラス名 (カテゴリ名)&lt;br /&gt;    メソッド宣言;&lt;br /&gt;    @end&lt;br /&gt;&lt;/pre&gt;カテゴリの利用で多いケースは、既存のクラスに新しいメソッドを付け加える場合です。&lt;br/&gt;新しいインスタンス変数の追加はできませんが、新しく追加したメソッド定義から既存のインスタンス変数やメソッドにはアクセス可能です。&lt;/p&gt;&lt;p&gt;以下にサンプルのコードを記述します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#import &amp;lt;Foundation/NSString.h&amp;gt;&lt;br /&gt;&lt;br /&gt;@interface NSString (Hiroshimaben) &lt;br /&gt;&lt;br /&gt;- (NSString *)stringByAppendingHiroshimaben:(NSString *)str;&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のサンプルは、NSStringクラスにstringByAppendingHiroshimabenメソッドを宣言しています。このメソッドは、受け取った引数の文字列に「jyaken-no」という文字列を追加して返すようにします。&lt;br/&gt;次に実装部です。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#import "NSString+Hiroshimaben.h"&lt;br /&gt;&lt;br /&gt;@implementation NSString (Hiroshimaben)&lt;br /&gt;&lt;br /&gt;- (NSString *)stringByAppendingHiroshimaben:(NSString *)str {&lt;br /&gt;    NSString* returnStr = [str stringByAppendingString:@"jyaken-no"];&lt;br /&gt;    return returnStr;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@end&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;実装部はヘッダーファイルのimportが必要です。ファイル名は「クラス名+カテゴリ名」とするのが良いとされています。&lt;br/&gt;さて、では上記のファイルをコンパイルして実行してみましょう。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    NSString *str = @"test";&lt;br /&gt;    NSLog(@"str is : %@", [str stringByAppendingHiroshimaben:str]);&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;以下の結果が出力されます。&lt;/p&gt;&lt;pre style="background-color:#000000;color:#FFFFFF "&gt;&lt;br /&gt;    str is : testjyaken-no&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;文字列に「jyaken-no」が追加されているのが確認できますね。&lt;/p&gt;&lt;p&gt;カテゴリは、既存のメソッドで定義されているメソッドも上書き可能です。&lt;br/&gt;しかし、上書きする場合は、十分な注意が必要です。見かけ上は単純なメソッドでも、プログラム内で様々な目的で使われている場合があります。そのようなメソッドを置き換えた場合。プログラムが正しく動作しなくなります。&lt;br/&gt;なので、カテゴリを用いて既存のメソッドを置き換えるのはあまりおすすめできません。サブクラスでおこなったほうが安全です。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7436655373182907430?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7436655373182907430/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/iphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7436655373182907430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7436655373182907430'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/iphone.html' title='iphone開発の基礎知識 カテゴリを理解する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4064052596637889133</id><published>2012-01-21T00:55:00.000+09:00</published><updated>2012-01-21T00:55:43.883+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書感想'/><title type='text'>２０２２—これから１０年、活躍できる人の条件 感想</title><content type='html'>&amp;nbsp;とても楽しみにしていた本で、発売日に購入しました。&lt;br /&gt;一言で内容をまとめると、&lt;br /&gt;「歴史は繰り返す。そのために過去から学んで先の時代に準備してください」&lt;br /&gt;といった内容です。&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4569797601&amp;IS1=1&amp;ref=tf_til&amp;fc1=000000&amp;lt1=_blank&amp;m=amazon&amp;lc1=0000FF&amp;bc1=FFFFFF&amp;bg1=FFFFFF&amp;npa=1&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これは現在アメリカの投資家の間で言われていることと全く同じです。&lt;br /&gt;今後10年で大きく社会が変容するのは間違いないでしょう。&lt;br /&gt;今はソーシャルメディアの発達で誰でもメディアを持つことが出来、誰でも世界中に自己を発信できます。&lt;br /&gt;なので、これまでの社会と同じ状態が続くことはありえません。&lt;br /&gt;&lt;br /&gt;特に最近のIT関連技術の発達速度は異常です。&lt;br /&gt;android,iphone,WEBアプリの開発者である私がついていくので精一杯なのだから、&lt;br /&gt;他の職種に携わっているかたはソーシャルメディアの可能性はいまいち理解しにくいでしょうし、未来予測は相当難しいでしょう。&lt;br /&gt;&lt;br /&gt;だから一つだけ覚えておいてください。&lt;br /&gt;「徹底的に自分らしさを磨きあげましょう。そして、メディアをとおして自己発信を続けましょう」&lt;br /&gt;&lt;br /&gt;自分のやりたいことをやりましょう。そして、blogなり、faceBookなり、youtube, ustreamなりで&lt;br /&gt;自分の意見を発信してください。そして、継続してください。&lt;br /&gt;&lt;br /&gt;そして発信した物に対するレスポンスを大切にしてください。&lt;br /&gt;レスポンスの中には、多くのヒントがたくさん隠されています。&lt;br /&gt;そして、客観的になって自分を見てみてください。&lt;br /&gt;きっと、あなたが取るべき道が見えてくるはずです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4064052596637889133?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4064052596637889133/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4064052596637889133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4064052596637889133'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_21.html' title='２０２２—これから１０年、活躍できる人の条件 感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6221647338070839922</id><published>2012-01-20T23:57:00.001+09:00</published><updated>2012-01-20T23:57:53.403+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>unrecognized selector sent to instance</title><content type='html'>&lt;p&gt;iphoneアプリの開発で、unrecognized selector sent to instanceエラーが発生するケースがあります。&lt;br/&gt;多くの場合、オブジェクトの過度なreleaseが原因です。&lt;br/&gt;というわけで、以下に気をつけるパターンを示します。&lt;/p&gt;&lt;h3&gt;リストデータのオブジェクトの開放&lt;/h3&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {&lt;br /&gt;    NSLog(@"%s", __func__);&lt;br /&gt;    &lt;br /&gt;    NSInteger row = [indexPath row];&lt;br /&gt;    MemoryModel* obj = [self.list objectAtIndex:row];&lt;br /&gt;    MemoryDetailViewController* controller = [[MemoryDetailViewController alloc] initWithStyle:UITableViewStyleGrouped];&lt;br /&gt;    controller.memoryModel = obj;&lt;br /&gt;    &lt;br /&gt;    [obj release], obj = nil;&lt;br /&gt;    &lt;br /&gt;    [self.navigationController pushViewController:controller animated:YES];&lt;br /&gt;    &lt;br /&gt;    [controller release], controller = nil;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のコードでは、インスタンス変数に格納したリストオブジェクト中からモデルデータを取り出し、詳細データ画面遷移後に開放する前にオブジェクトを開放しています。&lt;br/&gt;このようなケースでオブジェクトを開放してしまうと、navigationで戻ってもう一度同じ列を選択すると、エラーが発生します。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;&lt;br /&gt;    //  [obj release], obj = nil;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上記のようなリストから詳細画面への遷移は、オブジェクトを開放しないようにするのが正解です。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6221647338070839922?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6221647338070839922/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/unrecognized-selector-sent-to-instance.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6221647338070839922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6221647338070839922'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/unrecognized-selector-sent-to-instance.html' title='unrecognized selector sent to instance'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4929699939877223106</id><published>2012-01-15T01:39:00.001+09:00</published><updated>2012-01-15T01:39:18.971+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>共通で利用する定数を宣言する</title><content type='html'>&lt;p&gt;iphoneアプリの開発では、多くのクラスで共通利用したい定数があると思います。&lt;br/&gt;その場合は、Other Sourcesフォルダ以下にあるPUROJECTNAME_Prefix.pchファイルに定数を記述すると良いです。このファイルに記述した定数は、#import宣言しなくても利用できます。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;#ifdef __OBJC__&lt;br /&gt;    #import &lt;Foundation/Foundation.h&gt;&lt;br /&gt;    #import &lt;UIKit/UIKit.h&gt;&lt;br /&gt;&lt;br /&gt;#define CONTROLLER_VIEW_TITLE @"サンプルコントローラー" // サンプルコントローラータイトル&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4929699939877223106?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4929699939877223106/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_15.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4929699939877223106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4929699939877223106'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_15.html' title='共通で利用する定数を宣言する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5610286883352921954</id><published>2012-01-14T01:23:00.000+09:00</published><updated>2012-01-14T01:23:21.471+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>日付形式を指定して現在日付を取得する</title><content type='html'>&lt;p&gt;iphoneアプリの開発では、sqlite3をデータベースとして利用することが多いと思います。&lt;br/&gt;sqlite3にはMysqlのような日付型は存在しません。その代わりに、日付形式の文字列をTime Stringとして扱います。もっとも汎用的な日付形式は【yyyy-MM-dd HH:mm:ss】です。sqlでorder byをするときに楽です。&lt;/p&gt;&lt;p&gt;アプリで特定の操作を行ったあと、テーブルに登録日付や更新日付を格納するのはよくあるパターンです。&lt;br/&gt;ということで、objective-Cを使ってsqlite3に格納できる現在日付の取得方法が以下になります。&lt;/p&gt;&lt;pre style="background-color:#99CCFF"&gt;&lt;br /&gt;    NSDate* date = [NSDate date];&lt;br /&gt;    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];&lt;br /&gt;    [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];&lt;br /&gt;&lt;br /&gt;    NSString* sqlite3InsertCurrentDate = [dateFormatter stringFromDate:date];&lt;br /&gt;&lt;br /&gt;    [dateFormatter release];&lt;br /&gt;&lt;br /&gt;    return sqlite3InsertCurrentDate;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;クラスメソッドとして使うと便利です。海外対応しているアプリの場合は、以上のコードでlocalも指定するとさらに良いと思います。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5610286883352921954?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5610286883352921954/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_14.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5610286883352921954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5610286883352921954'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post_14.html' title='日付形式を指定して現在日付を取得する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8033425980713794972</id><published>2012-01-12T21:05:00.000+09:00</published><updated>2012-01-12T21:05:52.284+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>今年の目標</title><content type='html'>&lt;p&gt;さて、今年も約2週間が経過しました。&lt;br/&gt;というわけで今年の目標設定です。&lt;/p&gt;１、iphone,ipadの開発に力を入れる&lt;br/&gt;&lt;p&gt;ここ一年半くらいはずっとandroidアプリの開発ばかりなので、そろそろこちらも力をいれていこうと考えています。書籍や情報も多く、色々なアプリに取り組みやすいのも利点ですね。&lt;/p&gt;２、グラフィックの勉強&lt;br/&gt;&lt;p&gt;アプリやHP等を作成するときに、いつも力量不足で困っているので、基礎から本格的に勉強していこうと思っています。現在は、inkscpaeのチュートリアル始めました。&lt;/p&gt;３、基礎の強化&lt;br/&gt;&lt;p&gt;ここ数年の課題です。リーマン時代の仕事を含めるとここ一年半で作ったアプリは20近いのですが、そのたびに基礎をもっと強化しないといけないと強く感じていました。現在「コンピューターの構成と設計」の第４版の勉強中です。たくさんの本を読むより、良い本を繰り返し繰り返しやっていきたいと思います。年間で2,3冊こなせたらいいなと思っています。&lt;/p&gt;４、ブログの定期的な更新&lt;br/&gt;&lt;p&gt;いつもまとめて更新しがちになるので、ことしはなるべく定期的に更新したいです。&lt;/p&gt;&lt;p&gt;以上です。今年もよろしくおねがいします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8033425980713794972?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8033425980713794972/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8033425980713794972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8033425980713794972'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/blog-post.html' title='今年の目標'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8759939239182688567</id><published>2012-01-07T19:48:00.000+09:00</published><updated>2012-01-07T19:48:12.521+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidアプリの動画を撮影してマーケットで公開する</title><content type='html'>&lt;p&gt;アンドロイドマーケットに開発したアプリをリリースするとき、youtubeで動画を指定することができます。これは、マーケティングとして是非やっておきたい作業です。&lt;br/&gt;それにはまず、アプリの動画を録画しないといけません。&lt;br/&gt;その場合に利用するのが、&lt;b&gt;Android Screencast&lt;/b&gt;です。&lt;br/&gt;ビデオカメラで撮影すると、指まで撮影されてしまいますが、&lt;b&gt;Android Screencast&lt;/b&gt;ならその心配はありません。&lt;br/&gt;詳細な説明は以下のサイトに記述されています。&lt;/p&gt;&lt;a href="http://code.google.com/p/androidscreencast/"&gt;Android Screencast&lt;/a&gt;&lt;br/&gt;&lt;p&gt;アプリ動画の録画にはAndroid SDKが必要です。しかし、開発者なら導入済みのはずなので問題ないと思います。&lt;br/&gt;録画方法は、USBに端末を繋ぎ、DDMを起動してから４.の&lt;b&gt;click here&lt;/b&gt;をクリックすればOKです。&lt;/p&gt;&lt;p&gt;録画が終了したら、youtubeに動画をアップロードして、アンドロイドマーケットにURLを設定します。&lt;/p&gt;&lt;p&gt;下記の動画は、先日にリリースしたアプリの動画です。androidマーケットにはこの動画が指定してあります。&lt;/p&gt;&lt;b&gt;androidアプリHTML5紹介動画&lt;/b&gt;&lt;br/&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/Om0zTwGrq1Y" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8759939239182688567?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8759939239182688567/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/android_07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8759939239182688567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8759939239182688567'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/android_07.html' title='androidアプリの動画を撮影してマーケットで公開する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Om0zTwGrq1Y/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-311523590389166316</id><published>2012-01-07T05:08:00.000+09:00</published><updated>2012-01-08T22:07:41.929+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='オリジナルアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>新作androidアプリをリリース</title><content type='html'>新作のandroidアプリをリリースしました。HTML5というアプリです。&lt;br /&gt;「HTML5」アプリは、これからHTML5を勉強しようと考えている人、もしくは現在勉強している人が利用することを想定して作成したアプリです。&lt;br /&gt;「HTML5」アプリを使えば、HTML5の基本から応用までを難易度別に勉強することができます。&lt;br /&gt;これまでに一度もHTMLプログラミングをしたことのない人は、最初はちょっと難しく感じるかもしれません。&lt;br /&gt;しかし、この「HTML5」アプリを繰り返し使っているうちに、HTML5を使った基本的なWEBページが作れるようになると思います。&lt;br /&gt;隙間時間に利用できるアプリなので、電車の待ち時間、暇つぶしなどでも利用してみてください。いつのまにか基礎力が向上しているはずです。&lt;br /&gt;また、このアプリではゲーム要素をたくさん詰め込んでみました。なので、楽しく勉強できると思います。&lt;br /&gt;今後もバージョンアップで多くのゲーム要素やHTML5についてのコンテンツを追加していくつもりです。&lt;br /&gt;楽しくHTML5の勉強を続けてみてください。&lt;br /&gt;この情報化時代で生活していくうえで、とても役に立つスキルになるはずです。&lt;br /&gt;以下の&lt;b&gt;QRコード&lt;/b&gt;からアプリのダウンロード画面に直接遷移できます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-2I8ZM6PZUaw/TwdRMttlGFI/AAAAAAAAAHw/zeBcjQz-MSA/s1600/QRcode.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="135" src="http://1.bp.blogspot.com/-2I8ZM6PZUaw/TwdRMttlGFI/AAAAAAAAAHw/zeBcjQz-MSA/s320/QRcode.gif" width="135" /&gt;&lt;/a&gt;&lt;/div&gt;android version2.1以上で動作します。&lt;br /&gt;&lt;h3&gt;アプリ画像&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-M9y1YjRY53Q/TwdRtKikEjI/AAAAAAAAAH8/Vjee5-MKNNw/s1600/top.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-M9y1YjRY53Q/TwdRtKikEjI/AAAAAAAAAH8/Vjee5-MKNNw/s320/top.png" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-W1GA00b_g6A/TwdSJUgZ1UI/AAAAAAAAAII/AHYf9JpBW1Y/s1600/mydata.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-W1GA00b_g6A/TwdSJUgZ1UI/AAAAAAAAAII/AHYf9JpBW1Y/s320/mydata.png" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-p3KWvQuqIjs/TwdSYbdtydI/AAAAAAAAAIU/CH_C1qxe1gQ/s1600/problem.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-p3KWvQuqIjs/TwdSYbdtydI/AAAAAAAAAIU/CH_C1qxe1gQ/s320/problem.png" width="214" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/Om0zTwGrq1Y" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-311523590389166316?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/311523590389166316/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2012/01/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/311523590389166316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/311523590389166316'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2012/01/android.html' title='新作androidアプリをリリース'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-2I8ZM6PZUaw/TwdRMttlGFI/AAAAAAAAAHw/zeBcjQz-MSA/s72-c/QRcode.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3002111813099243480</id><published>2011-12-30T02:32:00.001+09:00</published><updated>2011-12-30T02:32:39.835+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidのtextviewの状態変化の注意点</title><content type='html'>&lt;p&gt;androidのtextviewを使う場合、状態変化に応じて背景色を変化させるのが一般的です。&lt;br/&gt;通常のアプリなら【通常】【押下】【フォーカス】の３つの状態の処理を設定すれば十分でしょう。&lt;br/&gt;この処理は通常、drawable配下のxmlに処理を記述します。&lt;br/&gt;そして、selectorを使ったタグを使い、【通常】【押下】【フォーカス】の状態の背景色を設定していきます。&lt;br/&gt;このときxmlの記述で気をつけないといけないのは、textviewでフォーカス状態にするのは、android:state_selectedの属性を利用しなくてはいけないことです。&lt;br/&gt;android:state_focusedを設定すると状態変化しないので注意が必要です。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3002111813099243480?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3002111813099243480/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/12/androidtextview.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3002111813099243480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3002111813099243480'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/12/androidtextview.html' title='androidのtextviewの状態変化の注意点'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7212085762150257437</id><published>2011-12-23T05:11:00.000+09:00</published><updated>2011-12-23T05:11:59.219+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>2011年度BEST音楽</title><content type='html'>さて、2011年ももうすぐ終了です。&lt;br /&gt;というわけで今年のまとめです。&lt;br /&gt;今日は、今年心に残った音楽のまとめです。&lt;br /&gt;BEST3にしようと思ったのですが、絞り込めなかったのでBEST4にしました。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;４位&lt;/b&gt;&lt;br /&gt;&lt;b&gt;B'z&lt;/b&gt;【C'mon】邦楽&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/5h_Ks9IkptQ/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/5h_Ks9IkptQ&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/5h_Ks9IkptQ&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;感想&lt;/u&gt;&lt;br /&gt;ブリティッシュROCKと日本ROCKの融合といったかんじの曲。&lt;br /&gt;名曲。シングルで発売すればオリコンのTOP10園内に食い込んだでしょう。&lt;br /&gt;でも、現代は配信時代だし、オリコンの記録なんて気にする時代じゃないってことですね。&lt;br /&gt;震災後にエネルギーをもらえた曲です。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;３位&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Katy Perry&lt;/b&gt;【E.T】洋楽&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/t5Sd5c4o9UM/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/t5Sd5c4o9UM&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/t5Sd5c4o9UM&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;感想&lt;/u&gt;&lt;br /&gt;第一印象はあまり良くなかったのですが、聞いているうちに、&lt;br /&gt;毎日ひたすらリピートするようになったスルメ曲。&lt;br /&gt;Fireworkもとっても良い曲だったのですが、僕的にはこっちが良かった。&lt;br /&gt;歌い方がとっても僕好みなのです。&lt;br /&gt;チャート5週連続一位ってのも凄いですね。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;２位&lt;/b&gt;&lt;br /&gt;&lt;b&gt;モーニング娘。&lt;/b&gt;【シルバーの腕時計】邦楽&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/y1rqbzCUynQ/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/y1rqbzCUynQ&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/y1rqbzCUynQ&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;感想&lt;/u&gt;&lt;br /&gt;youtubeで発見。昭和の歌謡曲っぽい曲です。すごく良い曲です。&lt;br /&gt;意外なことに、モーニング娘。って海外だと人気高いんですね。&lt;br /&gt;日本じゃAKBがブームなので、全く話題にあがらないので、モーニング娘。のメンバーなんて全然わからない。&lt;br /&gt;ただ、この歌を唱っている鞘師って子は、おそらく将来化けますね。&lt;br /&gt;良い雰囲気をまとってます。今は全然無名だけど、成長すればブレイクすると思います。&lt;br /&gt;残りのラップ歌っている新垣って子と、リボンの田中って子は微妙。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;１位&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Adele&lt;/b&gt;【Rolling in the deep】洋楽&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://0.gvt0.com/vi/rYEDA3JcQqw/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rYEDA3JcQqw&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/rYEDA3JcQqw&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;u&gt;感想&lt;/u&gt;&lt;br /&gt;文句なしのぶっちぎりで今年のナンバー1SONG。別格。&lt;br /&gt;日本以外の国で爆発的に売れた曲ですね。&lt;br /&gt;グラミー賞も取れると思います。&lt;br /&gt;個人的には、今一番バンドでやりたい曲です。&lt;br /&gt;世界中でコピーバンドの映像がありますが、子供が歌う凄い映像もありますね。&lt;br /&gt;なんで日本で売れなかったのか謎。今の日本の音楽状況は特殊すぎてよくわかりません。&lt;br /&gt;&lt;br /&gt;以上。&lt;br /&gt;2011年音楽BEST4でした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7212085762150257437?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7212085762150257437/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/12/2011best-2011-best3best4-bz-cmon.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7212085762150257437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7212085762150257437'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/12/2011best-2011-best3best4-bz-cmon.html' title='2011年度BEST音楽'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-581274466278718817</id><published>2011-11-10T02:44:00.000+09:00</published><updated>2011-11-10T02:44:04.273+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidのADT14からはswitch文が利用できなくなっている</title><content type='html'>&lt;p&gt;androidのADT14からはswitch文が利用できなくなっています。コンパイルをしようとすると、コンパイルエラーで赤くなります。なので以下のようなコードがある場合は、変更しないといけません。&lt;/p&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;&lt;br /&gt;       switch (item.getItemId()) {&lt;br /&gt;         case R.id.menu_top:&lt;br /&gt;          intent = new Intent(Constants.INTENT_ACTION_TOP);&lt;br /&gt;          startActivity(intent);&lt;br /&gt;             return true;&lt;br /&gt;         case R.id.menu_help:&lt;br /&gt;       intent = new Intent(Constants.INTENT_ACTION_HELP);&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;上記のコードは、メニューなどの分岐で頻繁に使われる文法ですが、以下のように修正が必要になります。&lt;br/&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;&lt;br /&gt;     int id = item.getItemId();&lt;br /&gt;     if (id == R.id.menu_top) {&lt;br /&gt;         intent = new Intent(Constants.INTENT_ACTION_TOP);&lt;br /&gt;         startActivity(intent);&lt;br /&gt;            return true;&lt;br /&gt;     } else if (id == R.id.menu_help) {&lt;br /&gt;         intent = new Intent(Constants.INTENT_ACTION_HELP);&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;p&gt;この変更は、android4.0から仕様が変更されたのが原因のようです。自動生成されるRファイルの定数がfinalでなくなったためです。Eclipseを使っている場合は、「command + 1」で自動的にリファクタリングで修正できます。&lt;/p&gt;&lt;p&gt;android4.0以降での挙動が怖いので、既存プロジェクトも修正したほうがよいかもしれないですね。なので、自動リファクタリングを使ってさっさと直してしまうのがベストだと思います。&lt;/p&gt;&lt;p&gt;参考サイト:http://tools.android.com/tips/non-constant-fields&lt;/p&gt;(以上の記事は私が管理人をやっている&lt;a href="http://ja-jp.facebook.com/pages/Android-Develop-Tips/225551074163116"&gt;faceBookのページ&lt;/a&gt;にも記述してあります。)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-581274466278718817?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/581274466278718817/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/11/androidadt14switch.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/581274466278718817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/581274466278718817'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/11/androidadt14switch.html' title='androidのADT14からはswitch文が利用できなくなっている'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4237734929241907464</id><published>2011-11-04T05:32:00.000+09:00</published><updated>2012-01-09T03:57:06.272+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='オリジナルアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>半年ぶりにandroidアプリをリリース</title><content type='html'>半年ぶりにandroidアプリをリリースしました。&lt;br/&gt;&lt;br/&gt;&lt;b&gt;記憶の王様&lt;/b&gt;というアプリです。&lt;br/&gt;&lt;br/&gt;&lt;p&gt;この&lt;b&gt;記憶の王様&lt;/b&gt;アプリは、記憶作業を効率的におこなえるようにする補助ツールアプリです。&lt;br/&gt; このアプリでは、エビングハウスの忘却曲線をつかった日付計算が自動におこなわれます。&lt;br/&gt; なので、無駄なく記憶作業に徹することができます。&lt;br/&gt; 科学的で効率的な記憶作業は、受験勉強、資格勉強、語学勉強等で大きな助けとなるはずです。&lt;/p&gt; &lt;p&gt;特に語学勉強の単語の暗記や、長期的な記憶が要求される難関試験でとても役立ちます。&lt;/p&gt; 以下の&lt;b&gt;QRコード&lt;/b&gt;からアプリのダウンロード画面に直接遷移できます。&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oTQ8c39Mi-I/TrL1whulyrI/AAAAAAAAAHA/-fXWOpj4F-Q/s1600/QRcode.gif" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="147" width="147" src="http://4.bp.blogspot.com/-oTQ8c39Mi-I/TrL1whulyrI/AAAAAAAAAHA/-fXWOpj4F-Q/s400/QRcode.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;Android Marketへのリンクは&lt;a href="https://market.android.com/developer?pub=masa.kakaroto.edy"&gt;こちら&lt;/a&gt;です。&lt;br/&gt;&lt;br/&gt;このアプリでは、ActionBarSherlockやquickActionなどのツール、compativityのFragmentやFlick可能なPageAdapter等を使用しています。&lt;br/&gt;androidのターゲットOSversionは2.1ですが、3.2相応の動きになっています。&lt;br/&gt;今後、あらゆる端末がIceCreamに変わるまでは、こういった作り方が中心になる気がします。&lt;br/&gt;実際、googleの純正アプリやシリコンバレー企業のアプリは、上記のツールで作られていると考えて間違いないです。&lt;br/&gt;なので、技術的な解説も今後色々としていけたらと思っています。&lt;br/&gt;さてさて、完全に夜があけたので寝ます。&lt;br/&gt;おやすみなさいzzzzzz。&lt;br/&gt;&lt;br/&gt;&lt;h3&gt;アプリ画像&lt;/h3&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-HhB3Qqfd-3s/TrL5zG-iygI/AAAAAAAAAHk/B0y7WXXwcbo/s1600/top.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://3.bp.blogspot.com/-HhB3Qqfd-3s/TrL5zG-iygI/AAAAAAAAAHk/B0y7WXXwcbo/s320/top.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oXi6tH8o1oY/TrL49hXIxVI/AAAAAAAAAHM/_BWQVQ75fs4/s1600/today2.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://3.bp.blogspot.com/-oXi6tH8o1oY/TrL49hXIxVI/AAAAAAAAAHM/_BWQVQ75fs4/s320/today2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-oUp2DWg8i2o/TrL5uX1jLoI/AAAAAAAAAHY/YaeBVoSrCRI/s1600/histroy.png" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="320" width="180" src="http://1.bp.blogspot.com/-oUp2DWg8i2o/TrL5uX1jLoI/AAAAAAAAAHY/YaeBVoSrCRI/s320/histroy.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/SZro-UykNNA" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4237734929241907464?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4237734929241907464/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/11/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4237734929241907464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4237734929241907464'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/11/android.html' title='半年ぶりにandroidアプリをリリース'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-oTQ8c39Mi-I/TrL1whulyrI/AAAAAAAAAHA/-fXWOpj4F-Q/s72-c/QRcode.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3463228053129228640</id><published>2011-11-04T01:42:00.001+09:00</published><updated>2011-11-04T01:42:20.987+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Marketでapkファイルupdateエラー</title><content type='html'>&lt;p&gt;Android Marketに作成したapkをアップしようとしたら、以下のようなエラーが発生しました。&lt;p/&gt;&lt;pre style="background-color:#CCFF99"&gt;&lt;br /&gt;&lt;br /&gt;The file is invalid: W/ResourceType( 1219): Failure getting entry&lt;br /&gt;for 0x7f040000 (t=3 e=0) in package 0 (error -75) ERROR getting&lt;br /&gt;'android:label' attribute: attribute is not a string value&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;ググって調べてみても、原因がいまいちはっきりしなかったのですが、これまでの開発経験からXMLに問題があることは予想がついたので調査しました。&lt;br/&gt;で、突き詰めて調べたところ、原因が無事判明。&lt;br/&gt;&lt;p&gt;原因は、res/values/string.xmlに記述された属性データと、res/values-ja/string.xmlに記述された属性データが異なっていたからでした。&lt;/p&gt;要は、日本語ファイルと英語ファイルで、属性の有無に差があったということです。&lt;br/&gt;そもそもの原因は、アップデートするapkファイルのversionでは英語対応をするつもりはなく、英語版はstring.xmlファイルだけ用意しておこうと考えたことでした。&lt;br/&gt;アプリで英語対応をするなら、日本語のstring.xmlと同じ属性を、英語のstring.xmlファイルにも全て記述しないといけません。&lt;br/&gt;本来であれば、string.xmlが記述されていない箇所でアプリが落ちて終了。なのですが、AndroidManifest.xmlで指定してあるstring.xmlの属性データが一致していないと、AndroidMarketにupdate出来なくなる仕様にAndroid Marketはなっているようです。&lt;br/&gt;気をつけてほしいのは、この場合、エミュレーターや端末では問題なく動いてしまうということです。&lt;br/&gt;&lt;br/&gt;ネット上には、Rファイルを消してみろとか、genフォルダを消せとか、色々な意見がありましたが、全然とんちんかんな答えなので注意してください。&lt;br/&gt;&lt;br/&gt;(以上の記事は私が管理人をやっている&lt;a href="http://ja-jp.facebook.com/pages/Android-Develop-Tips/225551074163116"&gt;faceBookのページ&lt;/a&gt;にも記述してあります。)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3463228053129228640?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3463228053129228640/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/11/android-marketapkupdate.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3463228053129228640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3463228053129228640'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/11/android-marketapkupdate.html' title='Android Marketでapkファイルupdateエラー'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-849795391924942039</id><published>2011-10-30T18:22:00.000+09:00</published><updated>2011-10-30T18:22:24.838+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>ActionBarSherlockでactionBarのheaderを変更する</title><content type='html'>androidアプリの開発に便利なユーティリティ「&lt;a href="http://actionbarsherlock.com/"&gt;ActionBarSherlock&lt;/a&gt;」&lt;br/&gt;日本のアプリではあまり利用されていないようですが、凄く便利で良いツールなので、是非使ってみてください。私はとっても重宝してます。&lt;br/&gt;そして、このActionBarSherlockを使ったheaderの背景画像を変えたい場合は、以下のようにします。&lt;br/&gt;&lt;br&gt;ActionBarSherlockのversionは3.1.3で確認しています。&lt;br/&gt;&lt;br/&gt;style.xmlで以下のタグを探します。&lt;pre style="background-color:#CCFF99;"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style name="Theme.AndroidDevelopers" parent="Theme.Sherlock.Light"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br/&gt;中の属性に&lt;pre style="background-color:#CCFF99;"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item name="abBackground"&amp;gt;@drawable/sample&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;があるので、ここを以下のように変更します。&lt;pre style="background-color:#CCFF99;"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item name="abBackground"&amp;gt;@drawable/header_bg&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;画像を変更すると、文字の色やサイズも変更したくなると思います。&lt;br/&gt;文字の変更は以下の属性を追加します。&lt;br/&gt;&lt;pre style="background-color:#CCFF99;"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;item name="abTitleTextStyle"&amp;gt;@style/as_header_title&amp;lt;/item&amp;gt;&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;abTitleTextStyle属性の中でstyleを指定してあげればOKです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-849795391924942039?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/849795391924942039/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/actionbarsherlockactionbarheader.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/849795391924942039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/849795391924942039'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/actionbarsherlockactionbarheader.html' title='ActionBarSherlockでactionBarのheaderを変更する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-139530769256115571</id><published>2011-10-28T12:50:00.001+09:00</published><updated>2011-10-30T18:22:35.784+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>logcat read: Invalid argumentの解決方法</title><content type='html'>androidの開発でeclipseをとおして端末のデバッグを行っていると&lt;br /&gt;&lt;br /&gt;「&lt;b&gt;logcat read: Invalid argument&lt;/b&gt;」&lt;br /&gt;&lt;br /&gt;のエラーが発生することがあります。&lt;br /&gt;上記のエラーが発生すると、コンソールにlogが表示されなくなってしまうので、とても不便です。&lt;br /&gt;直す方法は以下のような手順を取ります。私の環境はmacですが、windowsでも同じだと思います。&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;adb logcat -c&lt;/li&gt;&lt;li&gt;Eclipseを再起動&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;以上で元に戻ります。&lt;br /&gt;&lt;br /&gt;参考サイト&lt;br /&gt;http://www.android-navi.com/archives/android_1/logcat/#more&lt;br /&gt;http://d.hatena.ne.jp/yujimny/20110124/1295849267&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(以上の記事は管理人をやっている&lt;a href="http://ja-jp.facebook.com/pages/Android-Develop-Tips/225551074163116"&gt;faceBookのページ&lt;/a&gt;にも記述してあります。)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-139530769256115571?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/139530769256115571/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/logcat-read-invalid-argument.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/139530769256115571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/139530769256115571'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/logcat-read-invalid-argument.html' title='logcat read: Invalid argumentの解決方法'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4313642305845560267</id><published>2011-10-22T12:57:00.001+09:00</published><updated>2011-10-22T12:57:53.239+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Intentでメーラーの立ち上げ</title><content type='html'>アプリの中で絶対実装しておきたいの機能の一つが、ユーザーからフィードバックや意見(クレーム)を得るためのメール送信機能です。&lt;br /&gt;Intentで動作させるには以下のように実装します。&lt;br /&gt;&lt;pew&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Intent intent = new Intent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; intent.setAction(Intent.ACTION_SENDTO);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; intent.setData(Uri.parse("mailto:masmasa@test.com"));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; intent.putExtra(Intent.EXTRA_SUBJECT, "【アプリ名】");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; intent.putExtra(Intent.EXTRA_TEXT, "ばぐじゃねーかこのやろう");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; startActivity(intent); &lt;br /&gt;&lt;br /&gt;以上のように書くと、メーラー選択画面が立ち上がります。&lt;br /&gt;&lt;br /&gt;ただ、注意して欲しいのは、このやり方だとメーラ自体にバグがあると正常に動作しません。ソフトバンクやAUのプリインメーラーでは、正常に動作しない端末があります。&lt;br /&gt;なので、注意書きにGmailを使うように記述しておくのが一番良い方法だと思います。&lt;br /&gt;もし、それが嫌なら、ブラウザを立ち上げてメールリンクをクリックするといいでしょう。この方法なら大抵動きます。&lt;br /&gt;もし、それもいやならWebviewを使って色々とやってみるといいでしょう。&lt;br /&gt;まあ、そんなことするのは「工数と金の無駄」ですけどね。&lt;/pew&gt;&lt;br /&gt;&lt;pew&gt;ソフトバンクやAUの技術力が低いのが悪い。&lt;br /&gt;とはいえ、状況によっては実装せざるを得ない場合もあると思います。&lt;/pew&gt;&lt;br /&gt;&lt;pew&gt;その時は、ソフトバンクやAUなどのキャリアを思いっきり恨んでください。&lt;/pew&gt;&lt;br /&gt;&lt;br /&gt;(以上の記事は管理人をやっている&lt;a href="http://ja-jp.facebook.com/pages/Android-Develop-Tips/225551074163116"&gt;faceBookのページ&lt;/a&gt;にも記述してあります。)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4313642305845560267?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4313642305845560267/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/intent.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4313642305845560267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4313642305845560267'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/intent.html' title='Intentでメーラーの立ち上げ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6623959960751793110</id><published>2011-10-22T11:38:00.000+09:00</published><updated>2011-10-22T11:38:32.136+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>sqlite3の日付処理</title><content type='html'>&lt;b&gt;sqlite3は日付の型をもちません。&lt;/b&gt;&lt;br /&gt;なのでmysqlのようにyyyy/MM/ddの日付形式が利用できません。&lt;br /&gt;sqlite3で日付を扱いたい場合は、以下の書式の文字列を日付を表す文字列【Time String】 として扱います。&lt;br /&gt;&lt;br /&gt;&lt;i&gt;YYYY-MM-DD&lt;/i&gt;(年-月-日)&lt;br /&gt;&lt;br /&gt;もしくは、&lt;br /&gt;&lt;br /&gt;&lt;i&gt;YYYY-MM-DD HH:MM:SS&lt;/i&gt;(年-月-日 時:分:秒)&lt;br /&gt;&lt;br /&gt;その他にもありますが、一般的には上二つの形式で事足りるでしょう。&lt;br /&gt;他の形式はこの&lt;a href="http://www.tamandua-webtools.net/sqlite3-date.html"&gt;アドレス&lt;/a&gt;を参照してください。&lt;br /&gt;また、カラムは&lt;b&gt;text型&lt;/b&gt;にする必要があります。&lt;br /&gt;&lt;br /&gt;データ取得の時、日付で範囲を絞り込む場合は以下のようにする必要があります。&lt;br /&gt;&lt;br /&gt;datetime(カラム名称, 'localtime') &amp;lt; datetime('2011-10-22', 'localtime')&lt;br /&gt;&lt;br /&gt;第二引数に'localtime'を指定しているのは、sqlite3の日付を表す文字列 Time Stringは、デフォルトでUTC(協定世界時)を扱うからです。&lt;br /&gt;&lt;br /&gt;全体的に、sqliteは日付を扱いにくいです。&lt;br /&gt;&lt;br /&gt;(以上の記事は管理人をやっている&lt;a href="http://ja-jp.facebook.com/pages/Android-Develop-Tips/225551074163116"&gt;faceBookのページ&lt;/a&gt;にも記述してあります。)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6623959960751793110?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6623959960751793110/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/sqlite3.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6623959960751793110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6623959960751793110'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/sqlite3.html' title='sqlite3の日付処理'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4098096219962771929</id><published>2011-10-13T22:13:00.001+09:00</published><updated>2011-10-13T22:13:57.789+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>良いプログラマーになるためには、テストコードを書かないといけない</title><content type='html'>ソフトウェア業界で、プログラムを書く時はテストコードを書くべきという考えが生まれてから随分と経つ。もう7年くらいは経つだろう。&lt;br /&gt;　幸い私はjavaをメイン言語として扱っている技術者なので、JUnitでテストコードを書く習慣が自然とついた。&lt;br /&gt;　だから、他の言語を利用するときもunitテストを利用して、テストコードをなるべく書くようにしている。&lt;br /&gt;　今メインでやっているnativeのiphoneアプリやandroidアプリでもテストコードは書いている。WEBでも当然書く。&lt;br /&gt;　工数が足りないプロジェクトでも、共通部分や明らかに危険な香りがする部分はなるべく書くようにしている。&lt;br /&gt;この業界に入ってから一度もプロジェクトを破綻させたことがないのは、周囲の人間に恵まれたこと、運が良かったこともあるが、危険を感じたらコードでテストを書く習慣も多いに関係があると思う。&lt;br /&gt;&lt;br /&gt;しかし、周りを見ると、未だに多くのプログラマーがテストコードを書く習慣がないのに驚く。&lt;br /&gt;　確かにテストコードを書くのは面倒だ。unitテストを書くためには、意外と勉強することが多いのだ。&lt;br /&gt;　さらに、プロジェクトの多くはテストコードを書く工数など見積もられていない。与えられた期間では、機能を実装するのと、バグをつぶすので精一杯だ。だから、どうしてもテストコードを書かない。&lt;br /&gt;　そして、テストコードを書かないことで、バグが頻繁に出る。そして、修正のたびにバグつぶしとテストに多くの時間を費やす。&lt;br /&gt;　色々な会社を見てきたが、長時間勤務が常態化している開発現場はほぼ同じパターンになっている。そういう開発現場で働くプログラマーは上が開発をわかってないとみんな不満を持っている。&lt;br /&gt;　日本の会社は経営陣が技術者でないことが多い。わかってないのが当たり前だし、わかるはずがない。&lt;br /&gt;　なので、あなたがそういった会社で働くプログラマーなら、経営者にわかってもらおうと思ってはいけない。そんな不満を解決してくれる経営者は、faceBookのザッカーバーグやgoogleのエリック・シュミット等だけだ。&lt;br /&gt;&lt;br /&gt;　しかし、あなたが良いプログラマーになりたいのなら、工数が足りなくても少しでもテストコードを書く習慣を身につけなければならない。&lt;br /&gt;　テストコードを書くことはソフトウェアの完成度を高めるだけではない。あなたのプログラミングの腕も飛躍的に向上させる。&lt;br /&gt;　テストコードを書きながらプログラミングを書く習慣を身につけると、可読性の高いコードを書くように気を配るようになる。すると、テストコードを書く時間が全くない場合でも、可読性の高いコードを書けるようになる。&lt;br /&gt;　可読性の高いコードは自然とバグが少なくなる。あなたが現場を離れた後も、引き継いだ人のコードの理解を助け、負担を減らす。そして、機能別の細かな分割、設計、テストケースのパターン、デバッグといった思考パターンが身につく。いずれはシンプルで洗練されたコードが書けるようになる。&lt;br /&gt;　こうなったらしめたものだ。次は技術だけでなく、インタフェースやデザインにも自然と目がいくようになる。そうすれば、プロジェクトの全体像を把握してシステムを見れるようになる。デタラメなシステムでもなんとか帳尻を合わせられるような技術も身に付いてるはずだ。&lt;br /&gt;&lt;br /&gt;　良いプログラマーになれれば、あなたが取れる選択肢はグンと広がる。&lt;br /&gt;　今後は特にそうだ。安価なクラウド、個人が世界で勝負できるスマートフォン。今後、開発者は会社でも個人でも自由な形態で働けるようになる。英語と中国語を身につければ、鬼にかなぼうだ。&lt;br /&gt;&lt;br /&gt;ちょっと話が飛躍しすぎてしまったw&lt;br /&gt;だが、テストコードを書く習慣を身につけることが大切なことはわかったはずだ。&lt;br /&gt;&lt;br /&gt;さあ、さっそくテストコードを書こう。&lt;br /&gt;プログラマーは言葉や背中でなく、コードで語るのだ。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?t=masayan11315-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=4274066940&amp;amp;IS1=1&amp;amp;ref=qf_sp_asin_til&amp;amp;fc1=000000&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=FFFFFF&amp;amp;bg1=FFFFFF&amp;amp;npa=1&amp;amp;f=ifr" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4098096219962771929?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4098096219962771929/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4098096219962771929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4098096219962771929'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_13.html' title='良いプログラマーになるためには、テストコードを書かないといけない'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1517765256301554734</id><published>2011-10-07T11:08:00.001+09:00</published><updated>2011-10-08T12:05:07.637+09:00</updated><title type='text'>[書評】どんな判断や！</title><content type='html'>[書評】どんな判断や！&lt;br /&gt;&lt;br /&gt;ゲームクリエイター稲船敬二さんの思考法をまとめた本です。&lt;br /&gt;本屋をうろうろしていて、面白そうだと思ったので購入しました。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS1=1&amp;amp;npa=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=masayan11315-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=tf_til&amp;amp;asins=4334976603" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;僕は、稲船敬二さんについては、ロックマンの生みの親として知っているだけでした。&lt;br /&gt;稲船さんは、バイオハザード等の色々なヒット作を手がけているようです。&lt;br /&gt;とはいえ、この本の内容は稲船さんの手がけていたゲームを知らなくても楽しんで読むことができます。&lt;br /&gt;ゲーム業界やIT業界を目指している人、または働いている人に、特によんでもらいたいです。&lt;br /&gt;&lt;br /&gt;僕はプログラマーなのですが、稲森さんとは考え方が酷似していると思いました。&lt;br /&gt;中でも、&lt;br /&gt;&lt;br /&gt;１、スピード感ある、小回りのきく組織の必要性&lt;br /&gt;２、成功にはリスクを冒す必要がある&lt;br /&gt;３、目標をもつ&lt;br /&gt;４、物事の本質を見抜く&lt;br /&gt;５、世界に目を向ける&lt;br /&gt;&lt;br /&gt;上記は全く同意です。&lt;br /&gt;僕も上記の事柄をサラリーマンという立場で感じ、自分の所属する会社の限界を思い知って、独立を決めたからです。&lt;br /&gt;特に1と5は重要で、この先10年くらいは気づける人と気づけない人で、大きな差ができてしまうのではないかと個人的に思っています。&lt;br /&gt;&lt;br /&gt;稲船さんは日本のゲーム業界の先を嘆いていますが、私の属するIT業界も同じようなものです。&lt;br /&gt;情けなくなってしまうほどに保守的です。というよりは、現実から目を背けて、過去やありえない未来に逃げている状況です。&lt;br /&gt;だから、できる人からどんどん見切りをつけて、大企業を離れています。&lt;br /&gt;&lt;br /&gt;政府や自分の会社の行い方を批判しても、結局何も変わりません。&lt;br /&gt;変えなきゃいけないのは自分です。&lt;br /&gt;現在の自分を認識し、自分に責任をもって、自己を高めていくことがこれからの日本人には必要だと思います。&lt;br /&gt;&lt;br /&gt;自分の属する会社や組織に閉塞感を抱いているひとは、是非読んでみてください。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1517765256301554734?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1517765256301554734/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1517765256301554734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1517765256301554734'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_07.html' title='[書評】どんな判断や！'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2539375906902556681</id><published>2011-10-04T10:17:00.003+09:00</published><updated>2011-10-04T10:17:56.555+09:00</updated><title type='text'>独立後の戦略</title><content type='html'>さてさて、独立して生きていくすべを一から学んでいこうと思っている僕ですが、しばらくは手探りの状態が続くことになりそうです。&lt;div&gt;とはいえ、ゴールと目標は明確なので、毎日全力で突っ走ろうと思います。&lt;/div&gt;&lt;div&gt;クラウドとSNSを活用して、新しい形の業務形態を構築したいと思います。&lt;/div&gt;&lt;div&gt;自分でも楽しみです。&lt;/div&gt;&lt;div&gt;ブログでも積極的に公開して、共有していきたいと思います。&lt;/div&gt;&lt;div&gt;でわでわ。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2539375906902556681?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2539375906902556681/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_04.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2539375906902556681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2539375906902556681'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post_04.html' title='独立後の戦略'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3674463520067537981</id><published>2011-10-03T07:07:00.000+09:00</published><updated>2011-10-03T07:07:38.026+09:00</updated><title type='text'>独立しました</title><content type='html'>久しぶりの更新です。&lt;br /&gt;&lt;br /&gt;突然ですが、タイトル通りです。&lt;br /&gt;私、会社を退職して、独立することにしました。&lt;br /&gt;今日からは有給の消化に入ります。 &lt;br /&gt;&lt;br /&gt;というわけで、今日から本格的に動いていこうと思います。&lt;br /&gt;この先は、私のように独立して働くという選択をするひともどんどん増えていくと思います。 &lt;br /&gt;&lt;br /&gt;なので、自分の行動のログをとるという意味もふくめて、このブログに色々と綴っていきたいと思います。&lt;br /&gt;&lt;br /&gt;しばらくは更新頻度も高いと思うので、私の苦労するようすをお楽しみください。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3674463520067537981?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3674463520067537981/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3674463520067537981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3674463520067537981'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/10/blog-post.html' title='独立しました'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7436628541816260479</id><published>2011-08-27T17:11:00.000+09:00</published><updated>2011-08-27T17:11:59.811+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>android開発　ListViewのheaderとfooterの挙動</title><content type='html'>よく間違えるのでメモ&lt;br /&gt;&lt;br /&gt;ListViewのヘッダ－やフッターを利用する場合は、setAdapterを呼び出す前に、addViewする必要があります。&lt;br /&gt;その後、データ数や処理に応じてヘッダ－やフッターの表示・非表示を切り替える場合は、setAdapter後に処理を追加して、notifyDataSetChangedを呼び出すと変更されます&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7436628541816260479?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7436628541816260479/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/08/androidlistviewheaderfooter.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7436628541816260479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7436628541816260479'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/08/androidlistviewheaderfooter.html' title='android開発　ListViewのheaderとfooterの挙動'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7975501124578833375</id><published>2011-03-28T00:21:00.001+09:00</published><updated>2011-03-28T00:26:09.655+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>android アプリ 節電しようぜ！ リリース</title><content type='html'>金曜日の夜のことです。寝る前にネットに目を通すと、以下のような情報を見つけました。&lt;br /&gt;&lt;br /&gt;-----東電が電気使用状況データをCSVで公開　「アプリ作ったら知らせて」と経産省&lt;br /&gt;東京電力が電気使用状況データをCSV形式で公開したことを受け、経済産業省情報プロジェクト室は、そのデータを活用した外部サービスを作ったら知らせてほしいとTwitterで呼びかけている。&lt;br /&gt;2011年03月24日 15時54分 更新&lt;br /&gt;&lt;br /&gt;東京電力がこのほど電気使用状況データをCSV形式で公開したことを受け、経済産業省情報プロジェクト室（@openmeti）は3月24日、そのデータを活用したアプリを作ったら知らせてほしいとTwitterで呼びかけた。「優れたアプリは国でも取り上げていきたい」という。&lt;br /&gt;&lt;br /&gt;東電が公開しているのは、当日と前日の電気使用量の速報値。電気使用状況はこれまで東電のグラフで確認できたが、23日からはデータをCSV形式でダウンロードできるようになり、外部の開発者がそのデータを使ったサービスを作りやすくなった。&lt;br /&gt;&lt;br /&gt;経産省情報プロジェクト室は、東電の電気使用状況データを活用したアプリを作ったら「@openmetiに向かってつぶやいてください」とコメント。集まった情報はひとまず、民間のWikiページ「東北関東大震災（東北地方太平洋沖地震）@ウィキ」にまとめる方針で、「編集して情報を加えていっていただけると助かります」ともツイートしている。&lt;br /&gt;&lt;br /&gt;東電の電気使用状況データを活用したサービスは、ヤフーが公開した「電力使用状況メーター」や、エヴァンゲリオン風デザインの「NERV専用監視装置」など続々と登場している。-----&lt;br /&gt;http://www.itmedia.co.jp/promobile/articles/1103/24/news068.html&lt;br /&gt;&lt;br /&gt;上記を読んで、東電も色々大変だと思い、土曜日にざっくりと「節電しようぜ！」というアプリを作成しました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-hbmrNntnufY/TY9XA_odSrI/AAAAAAAAAG4/Mc0iRPoii-k/s1600/device1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-hbmrNntnufY/TY9XA_odSrI/AAAAAAAAAG4/Mc0iRPoii-k/s320/device1.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;これはただ単にCSV形式ファイルをダウンロードして、最新の電気使用量を取得するアプリです。&lt;br /&gt;&lt;br /&gt;yahooなどのWEBと表示できる機能は同じですが、アプリを立ち上げると最新情報を取得するできる点が異なっています。&lt;br /&gt;また、WEBが繋がらない場合でも、内部に過去のデータをもっているので、データを見ることができます。&lt;br /&gt;&lt;br /&gt;とりあえず急ぎでざっくりと作成したので、今は電力情報しか見ることができませんが、時間があるときに&lt;br /&gt;バージョンUPして色々と機能を追加していけたらと思っています。&lt;br /&gt;明日くらいには検索でもひっかかるようになると思います。アプリ名は「節電しようぜ！」です。 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんな感じの現状報告です。&lt;br /&gt;自分からツイートする気はないので、ダウンロードしてくれた方が呟いてくれたら幸いです。&lt;br /&gt;&lt;br /&gt;疲れた休日でした。では、お休みなさい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7975501124578833375?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7975501124578833375/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/03/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7975501124578833375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7975501124578833375'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/03/android.html' title='android アプリ 節電しようぜ！ リリース'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-hbmrNntnufY/TY9XA_odSrI/AAAAAAAAAG4/Mc0iRPoii-k/s72-c/device1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3870731798174056032</id><published>2011-03-16T21:27:00.000+09:00</published><updated>2011-03-16T21:27:43.093+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Pythonはじめました</title><content type='html'>Pythonの勉強をはじめました。&lt;br /&gt;理由はソーシャルサイトを作成しようと考えているからです。&lt;br /&gt;そのための言語を色々と調査していたのですが、結局Pythonにすることにしました。&lt;br /&gt;正直、最後はRubyとPythonのどちらにするか激しく迷ったのですが、Google App EngineとFaceBookで&lt;br /&gt;の実績を評価することにしました。&lt;br /&gt;&lt;br /&gt;というわけで、これからはPythonの情報も取り扱っていこうと思います。&lt;br /&gt;なんか日本語の情報がやたら少ないですけど、日本じゃ人気ないんですね。&lt;br /&gt;でも、英語圏では情報が多いのであまり気にする必要もなさそうです。&lt;br /&gt;本格的に利用していくつもりなので、基本からがっつり勉強する為に&lt;br /&gt;「初めてのpython」第3版&lt;br /&gt;を購入しました。&lt;br /&gt;&lt;br /&gt;まだ全部は読んでいませんが、良い本です。&lt;br /&gt;Pythonはプログラミング経験のある人なら、「なんとなく」動くコードが書けてしまう言語です。&lt;br /&gt;でも、本格的に利用しようと思うのなら、絶対にこの本を読んでおくことをおすすめします。&lt;br /&gt;さらにいうなら、繰り返し読み込み、演習も覚えこむくらい何度も解いたほうがいいでしょう。&lt;br /&gt;結局のところ、そういった無意識レベルの基礎力が最終的な作りこみの段階でいきてくるのですから。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=masayan11315-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;ref=tf_til&amp;amp;asins=487311022X" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3870731798174056032?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3870731798174056032/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/03/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3870731798174056032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3870731798174056032'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/03/python.html' title='Pythonはじめました'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8936798778079234399</id><published>2011-03-05T19:04:00.000+09:00</published><updated>2011-03-05T19:04:31.750+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Tips TextView内の文字列リンクから特定のActivtyを呼び出す ～ContentProviderとLinkifyの理解～</title><content type='html'>Linkifyのリンクからパラメーターを渡してActivityを呼び出す処理が必要になり、ググッたらContentProviderの理解が必要だとわかりました。 しかし、ContentProviderの情報は色々と分散していて理解しにくかったので、まとめます。&lt;br /&gt;&lt;br /&gt;・ContentProviderとは？&lt;br /&gt;&lt;br /&gt;ContentProviderを利用すると、異なるアプリケーション間でデータを共有できる。&lt;br /&gt;COntentProviderを利用することで、特定のデータタイプを他のアプリケーションが利用できる。&lt;br /&gt;&lt;br /&gt;例えば、Androidで利用されている正式なContentProviderには、電話帳がある。&lt;br /&gt;電話帳には、名前、住所、電話番号がリストで表示されている。&lt;br /&gt;&lt;br /&gt;content://contacts/people/&lt;br /&gt;&lt;br /&gt;という特定のURIを利用することで、どのアプリケーションであってもこのデータにアクセスすることができる。&lt;br /&gt;androidURIの構成は以下の通り。&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;スキーム&lt;/td&gt;&lt;td&gt;content://&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;オーソリティ&lt;/td&gt;&lt;td&gt;contacts&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;パス&lt;/td&gt;&lt;td&gt;people&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;WEBのURIとほぼ同じですね。オーソリティがホストにあたります。ということで、実装して試してみます。&lt;br /&gt;&lt;br /&gt;開発用os(jar)は現在メインで開発している2.1、エミュレータは2.3で確認&lt;br /&gt;&lt;br /&gt;１、まずはエミュレーターを立ち上げて電話帳にデータを投入&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-C79E1RSno2w/TXIBVe9bwMI/AAAAAAAAAGc/qzRG4Rcn6zU/s1600/contact_sample.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/-C79E1RSno2w/TXIBVe9bwMI/AAAAAAAAAGc/qzRG4Rcn6zU/s320/contact_sample.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;２、では、実装していきます。&lt;br /&gt;&lt;br /&gt;２－１、&lt;br /&gt;&lt;br /&gt;AndroidManifest.xmlに&lt;br /&gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.READ_CONTACTS" /&amp;gt;&lt;br /&gt;&lt;br /&gt;を記述。&lt;br /&gt;&lt;br /&gt;２－２、&lt;br /&gt;&lt;br /&gt;Activityクラスを作成します。&lt;br /&gt;&lt;br /&gt;以下ソースコードです。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;public class ProviderTest extends ListActivity {&lt;br /&gt;&lt;br /&gt;    public static final String TAG = "ProviderTest";&lt;br /&gt;    &lt;br /&gt;    private ArrayList&amp;lt;ContactPojo&amp;gt; list;&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.provider);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onStart() {&lt;br /&gt;        super.onStart();&lt;br /&gt;        Log.d(TAG, "onStart start ");&lt;br /&gt;        &lt;br /&gt;        ContentResolver resolver = this.getContentResolver();&lt;br /&gt;        Cursor c = resolver.query(Contacts.CONTENT_URI, new String [] {Contacts.DISPLAY_NAME} , null, null, null);&lt;br /&gt;        &lt;br /&gt;        this.list = new ArrayList&amp;lt;ContactPojo&amp;gt;();&lt;br /&gt;        while(c.moveToNext()) {&lt;br /&gt;            &lt;br /&gt;            ContactPojo contactPojo = new ContactPojo();&lt;br /&gt;            &lt;br /&gt;            contactPojo.display_name = c.getString(0);&lt;br /&gt;            &lt;br /&gt;            this.list.add(contactPojo);&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        if (c != null) {&lt;br /&gt;            c.close();&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        Log.d(TAG, "onStart end ");&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onResume() {&lt;br /&gt;        super.onResume();&lt;br /&gt;        setListAdapter(new ProviderTestList(this, R.layout.provider_list, this.list));&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;    class ProviderTestList extends ArrayAdapter&amp;lt;ArrayList&amp;lt;ContactPojo&amp;gt;&amp;gt; {&lt;br /&gt;        private Context mContext;&lt;br /&gt;        private ArrayList&amp;lt;ContactPojo&amp;gt; list;&lt;br /&gt;&lt;br /&gt;        public ProviderTestList(Context context, int textViewResourceId, ArrayList&amp;lt;ContactPojo&amp;gt; list) {&lt;br /&gt;            super(context, textViewResourceId);&lt;br /&gt;            this.mContext = context;&lt;br /&gt;            this.list = list;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        @Override&lt;br /&gt;        public int getCount() {&lt;br /&gt;            return this.list.size();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public long getItemId(int position) {&lt;br /&gt;            return position;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        @Override&lt;br /&gt;        public View getView(int position, View convertView, ViewGroup parent) {&lt;br /&gt;            &lt;br /&gt;            View row = convertView;&lt;br /&gt;            ViewWapper viewWapper = null;&lt;br /&gt;                &lt;br /&gt;            if (row == null) {&lt;br /&gt;                LayoutInflater inflater = getLayoutInflater(); &lt;br /&gt;                row = inflater.inflate(R.layout.provider_list, parent, false);&lt;br /&gt;                viewWapper = new ViewWapper(row);&lt;br /&gt;                row.setTag(viewWapper);&lt;br /&gt;            } else {&lt;br /&gt;                viewWapper = (ViewWapper)row.getTag();&lt;br /&gt;            }&lt;br /&gt;            &lt;br /&gt;            &lt;br /&gt;            ContactPojo contactPojo = (ContactPojo)this.list.get(position);&lt;br /&gt;            &lt;br /&gt;            viewWapper.getDispName().setText(contactPojo.display_name);&lt;br /&gt;               &lt;br /&gt;            contactPojo = null; // release&lt;br /&gt;            &lt;br /&gt;            return row;&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;        &lt;br /&gt;    /**&lt;br /&gt;     * ホルダーパターンView&lt;br /&gt;     */&lt;br /&gt;    class ViewWapper {&lt;br /&gt;        &lt;br /&gt;        View base;&lt;br /&gt;        TextView disp_name;&lt;br /&gt;        &lt;br /&gt;        ViewWapper (View base) {&lt;br /&gt;            this.base = base;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        TextView getDispName() {&lt;br /&gt;            if (disp_name == null) {&lt;br /&gt;                disp_name = (TextView)base.findViewById(R.id.disp_name);&lt;br /&gt;            }&lt;br /&gt;            return disp_name;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;一覧を表示するように、ListActivityで作成してます。&lt;br /&gt;&lt;br /&gt;特に重要なのは&lt;br /&gt;&lt;ul&gt;&lt;li&gt;getContentResolverでContentResolverを取得していること。&lt;/li&gt;&lt;li&gt;Cursorオブジェクトを取得していること。&lt;/li&gt;&lt;/ul&gt;です。&lt;br /&gt;&lt;br /&gt;続いて表示xmlのprovider.xml&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;     &amp;lt;ListView &lt;br /&gt;         android:id="@id/android:list"&lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="wrap_content" /&amp;gt;&lt;br /&gt;        &lt;br /&gt;     &amp;lt;TextView &lt;br /&gt;        android:id="@id/android:empty" &lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="wrap_content" &lt;br /&gt;        android:text="データはありません"  /&amp;gt;&lt;br /&gt;        &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;加えて、リストxmlのprovider_list.xml&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;TextView &lt;br /&gt;        android:id="@+id/disp_name" &lt;br /&gt;        android:layout_width="fill_parent" &lt;br /&gt;        android:layout_height="wrap_content" &lt;br /&gt;        /&amp;gt;&lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記のソースをビルドして実行します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh3.googleusercontent.com/-2bcP-3udCrY/TXIEKpbCeWI/AAAAAAAAAGg/ypyvQxGPpuo/s1600/contacts_results.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/-2bcP-3udCrY/TXIEKpbCeWI/AAAAAAAAAGg/ypyvQxGPpuo/s320/contacts_results.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;上記のような感じで出力されます。&lt;br /&gt;&lt;br /&gt;ContentResolverのqueryで指定してる「Contacts.CONTENT_URI」が電話帳のデータにアクセスする為のURIです。Contacts.CONTENT_URIのURIの形式を取得してみましょう。以下が結果。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;URIスキーム(Contacts.CONTENT_URI.getScheme()):content&lt;/li&gt;&lt;li&gt;ホスト名(Contacts.CONTENT_URI.getHost()):com.android.contacts&lt;/li&gt;&lt;li&gt;パス(Contacts.CONTENT_URI.getPath()):/contacts&lt;/li&gt;&lt;/ul&gt;となります。…というか、URI違うじゃん。調査したところ、androidのversionによって違うみたいです。&lt;br /&gt;確認のために、自分でURIを作成してアクセスしてみます。&lt;br /&gt;&lt;br /&gt;getContentResolverの後ろのコードに以下の処理を追加します。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;ContentResolver resolver = this.getContentResolver();&lt;br /&gt;    &lt;br /&gt;    Uri.Builder builder = new Uri.Builder();&lt;br /&gt;    builder.scheme("content");&lt;br /&gt;    builder.authority("com.android.contacts");&lt;br /&gt;    builder.path("contacts");&lt;br /&gt;    &lt;br /&gt;    //Cursor c = resolver.query(Contacts.CONTENT_URI, new String [] {Contacts.DISPLAY_NAME} , null, null, null);&lt;br /&gt;    Cursor c = resolver.query(builder.build(), new String [] {Contacts.DISPLAY_NAME} , null, null, null);&lt;br /&gt;        &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ビルドして実行します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-2suN5U6UzTo/TXIFDtF9n3I/AAAAAAAAAGk/aHbnrwWY9NQ/s1600/contact_result2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-2suN5U6UzTo/TXIFDtF9n3I/AAAAAAAAAGk/aHbnrwWY9NQ/s320/contact_result2.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;同じ結果になりましたね。&lt;br /&gt;&lt;br /&gt;以上の処理から理解できるのは、URIで電話帳にアクセスすることができ、結果をCursorオブジェクトで取得していることですね。&lt;br /&gt;&lt;br /&gt;気になるのは、ContentProviderがCursorを返す仕組みになっていることです。&lt;br /&gt;データベースを通さない処理の場合はどうするのでしょうか…。また、intentを利用する仕組みとどう関連があるのか…。&lt;br /&gt;&lt;br /&gt;とにかく、ContentProviderは理解したのでLinkifyとintentを関連付けるサンプルを作成していきます。&lt;br /&gt;&lt;br /&gt;３、Linkfyサンプルを十分に読み込んで実装していきます。&lt;br /&gt;&lt;br /&gt;参照するのは&lt;br /&gt;&lt;br /&gt;&lt;a href="http://android-developers.blogspot.com/2008/03/wikinotes-for-android-routing-intents.html"&gt;http://android-developers.blogspot.com/2008/03/wikinotes-for-android-routing-intents.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;まずは文字列リンクを作成します。&lt;br /&gt;&lt;br /&gt;getViewメソッドのContactPojoオブジェクトを取り出している下に、以下のコード処理を追加します。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;ContactPojo contactPojo = (ContactPojo)this.list.get(position);&lt;br /&gt;    &lt;br /&gt;    // viewWapper.getDispName().setText(contactPojo.display_name);&lt;br /&gt;    &lt;br /&gt;    Pattern matcher = Pattern.compile("テスト");&lt;br /&gt;    viewWapper.getDispName().setText(contactPojo.display_name);&lt;br /&gt;    String viewURL =    "content://jp.co.sample.android.muzukashii/name/";&lt;br /&gt;    Linkify.addLinks(viewWapper.getDispName(), matcher, viewURL);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ビルドして実行します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/--uMUIbxskIo/TXIFeYSczRI/AAAAAAAAAGo/Wu7ogWDWXXU/s1600/linkfy1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/--uMUIbxskIo/TXIFeYSczRI/AAAAAAAAAGo/Wu7ogWDWXXU/s320/linkfy1.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;おお、リンクが作成されましたね。&lt;br /&gt;&lt;br /&gt;次はAndroidManifest.xmlに&lt;br /&gt;&lt;br /&gt;&amp;lt;provider android:name="jp.co.sample.LinkTestProvider" android:authorities="jp.co.sample.android.muzukashii" /&amp;gt;&lt;br /&gt;&lt;br /&gt;を追記します。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;android:authoritiesは、URIのホストと同じ意味です。URIのROOTとして扱われます。&lt;/li&gt;&lt;li&gt;android:nameはjavaクラスのフルパスを指定します。&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;では、呼び出されるLinkTestProviderクラスを作成していきましょう。このクラスでは、ContentProviderクラスを継承します。&lt;br /&gt;&lt;br /&gt;注意すべき点は、updateやinsertをOverrideする必要があるということです。なんかずさんな抽象化ですね。DB使わない人もいるでしょうに。&lt;br /&gt;&lt;br /&gt;気持ち悪いけどここは無視して作成します。で、作成したのが以下のコードです。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;public class LinkTestProvider extends ContentProvider {&lt;br /&gt;    &lt;br /&gt;    public static final String TAG = "LinkTestProvider";&lt;br /&gt;    &lt;br /&gt;    public static final String AUTHORITY =&lt;br /&gt;            "jp.co.sample.android.muzukashii";&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    private static final int NOTE_NAME = 2;&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;    private static final UriMatcher URI_MATCHER;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int delete(Uri uri, String selection, String[] selectionArgs) {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public String getType(Uri uri) {&lt;br /&gt;        switch (URI_MATCHER.match(uri)) {&lt;br /&gt;          &lt;br /&gt;        case NOTE_NAME:&lt;br /&gt;            &lt;br /&gt;            return "hatoyama.kan.owawa/minsyu.kiero";&lt;br /&gt;&lt;br /&gt;        default:&lt;br /&gt;            throw new IllegalArgumentException("Unknown URL " + uri);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Uri insert(Uri uri, ContentValues values) {&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public boolean onCreate() {&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public Cursor query(Uri uri, String[] projection, String selection,&lt;br /&gt;            String[] selectionArgs, String sortOrder) {&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public int update(Uri uri, ContentValues values, String selection,&lt;br /&gt;            String[] selectionArgs) {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    static {&lt;br /&gt;&lt;br /&gt;        URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH);&lt;br /&gt;        URI_MATCHER.addURI(AUTHORITY, "name/*",&lt;br /&gt;                           NOTE_NAME);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記のコードで重要なのは、staticとgetTypeメソッドです。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;staticでUriMatcherにURIを作成しています。&lt;/li&gt;&lt;li&gt;投げるURIに応じたUriMatcherを全て作成します。&lt;/li&gt;&lt;/ul&gt;URIはProviderTestのgetViewメソッドに追加した以下のソースと対応しています。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;Pattern matcher = Pattern.compile("テスト");&lt;br /&gt;    viewWapper.getDispName().setText(contactPojo.display_name);&lt;br /&gt;    String viewURL =    "content://jp.co.sample.android.muzukashii/name/";&lt;br /&gt;    Linkify.addLinks(viewWapper.getDispName(), matcher, viewURL);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;getTypeメソッドで、Uriを振り分ける処理を行っています。&lt;br /&gt;色々なパターンで分岐可能なので、以下の公式サイトのソースを参考にしてみてください。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developer.android.com/reference/android/content/UriMatcher.html"&gt;http://developer.android.com/reference/android/content/UriMatcher.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上記のソースではcase NOTE_NAME:に処理が入り、「hatoyama.kan.owawa/minsyu.kiero」文字列が返却されます。&lt;br /&gt;&lt;br /&gt;この文字列はMIMEタイプを表しています。なので、このMIMEタイプによって呼び出されるActivityクラスを作成するようにします。&lt;br /&gt;&lt;br /&gt;作成したのが以下のクラスです。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;public class GoalActivity extends Activity {&lt;br /&gt;    &lt;br /&gt;    private TextView sendparam;&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;        setContentView(R.layout.goal);&lt;br /&gt;        &lt;br /&gt;        this.sendparam = (TextView)findViewById(R.id.sendparam);&lt;br /&gt;        &lt;br /&gt;        Intent intent = getIntent();&lt;br /&gt;        Uri uri = intent.getData();&lt;br /&gt;&lt;br /&gt;        if (uri != null) {&lt;br /&gt;            this.sendparam.setText(uri.getPath());&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onStart() {&lt;br /&gt;        super.onStart();&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    @Override&lt;br /&gt;    public void onResume() {&lt;br /&gt;        super.onResume();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記の処理では、URIのパスを取得して画面に表示しています。&lt;br /&gt;&lt;br /&gt;続いて表示xmlのgoal.xml&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:orientation="vertical"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;TextView &lt;br /&gt;        android:id="@+id/sendparam" &lt;br /&gt;        android:layout_width="fill_parent" &lt;br /&gt;        android:layout_height="wrap_content" &lt;br /&gt;        /&amp;gt;&lt;br /&gt;        &lt;br /&gt;&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;最後にandroidManifest.xmlにGoalActivityのintentを設定します。&lt;br /&gt;&lt;br /&gt;&lt;pre style="-moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial; background: rgb(255, 204, 255) none repeat scroll 0% 0%;"&gt;&amp;lt;activity android:name=".GoalActivity"&lt;br /&gt;                  android:label="@string/app_name"&amp;gt;&lt;br /&gt;            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;                &amp;lt;action android:name="android.intent.action.VIEW"/&amp;gt;&lt;br /&gt;                &amp;lt;category android:name="android.intent.category.DEFAULT"/&amp;gt;&lt;br /&gt;                &amp;lt;category android:name="android.intent.category.BROWSABLE"/&amp;gt;&lt;br /&gt;                &amp;lt;data android:mimeType="hatoyama.kan.owawa/minsyu.kiero"/&amp;gt;&lt;br /&gt;            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;        &amp;lt;/activity&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;intent-filterを設定します。android:mimeTypeは、LinkTestProviderクラスのgetTypeメソッドで返すMIMEタイプ文字列に対応します。&lt;br /&gt;&lt;br /&gt;では、上記のソースをビルドして実行します。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-jEVmUQ2tWxk/TXIF3Xllc5I/AAAAAAAAAGs/8OOUVNU6t18/s1600/linkfy2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-jEVmUQ2tWxk/TXIF3Xllc5I/AAAAAAAAAGs/8OOUVNU6t18/s320/linkfy2.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;続いて、リンク文字をタップします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-Na4JTjfwJDI/TXIGEJpdUGI/AAAAAAAAAG0/0Mh61FrGhBg/s1600/linkfy_result.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-Na4JTjfwJDI/TXIGEJpdUGI/AAAAAAAAAG0/0Mh61FrGhBg/s320/linkfy_result.png" width="213" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;おお。見事にActvityが呼び出されて画面遷移できましたね。&lt;br /&gt;&lt;br /&gt;URIのpathもきちんと取得できています。&lt;br /&gt;&lt;br /&gt;上記の処理から理解できるのは、&lt;br /&gt;&lt;ul&gt;&lt;li&gt;文字リンクのパターンを利用して特定のURIを作成することで、activityの呼び出しを制御できる。&lt;/li&gt;&lt;li&gt;Providerクラスで受けとったURIをgetTypeメソッドで分岐し、任意のactivityを呼び出すことが出来る。様々なパラメーターも付加出来る。&lt;/li&gt;&lt;/ul&gt;これまでやってきたことを応用することで、WEBのような処理を行うUIが色々作れそうですね。&lt;br /&gt;&lt;br /&gt;かなり長くなってしまいましたが、これで終了です。お疲れ様でした。&lt;br /&gt;&lt;br /&gt;android開発にそれなりに通じていないと、内容的に少し難しかったかもしれませんが、すごく役に立つパターンだと思うので、是非勉強してみてください。&lt;br /&gt;&lt;br /&gt;みなさんが素晴らしいアプリを開発して、僕を唸らせてくれることを期待しています。&lt;br /&gt;&lt;br /&gt;でわ。&lt;br /&gt;&lt;br /&gt;追伸&lt;br /&gt;&lt;br /&gt;URIの概念がよくわからないという人は以下の書籍がオススメです。WEB開発に携わるエンジニアは是非是非読んでもらいたい名著です。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=masayan11315-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as1&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;asins=4774142042" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8936798778079234399?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8936798778079234399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/03/android-tips-textviewactivty.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8936798778079234399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8936798778079234399'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/03/android-tips-textviewactivty.html' title='Android Tips TextView内の文字列リンクから特定のActivtyを呼び出す ～ContentProviderとLinkifyの理解～'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh3.googleusercontent.com/-C79E1RSno2w/TXIBVe9bwMI/AAAAAAAAAGc/qzRG4Rcn6zU/s72-c/contact_sample.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-980121645588769954</id><published>2011-03-05T12:21:00.002+09:00</published><updated>2011-03-05T12:27:49.669+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビジネスとしてのWEB'/><title type='text'>バラク・オバマどっとこむに学ぶWEB構成</title><content type='html'>Google app engineやAmazonのサーバーをはじめ、色々なクラウドが格安で利用できるので、ソーシャルサイトでも構築しようかと考えています。しかし、これまでにWEBサイトは構築してきましたが、あまりソーシャルサイトは利用したことがありません。&lt;br /&gt;ということで色々と勉強していこうと思っています。&lt;br /&gt;まずは、FaceBookの創業者でオバマのインターネット戦略担当を務めたクリス・ヒューズの手法を参考にするために、バラク・オバマどっとこむの研究とまとめ。&lt;br /&gt;&lt;br /&gt;・ベースの色は青色&lt;br /&gt;青色は、知性と精神に関する重要な色彩で、創造性、心のコントロール、頭の回転などを高める。演説が必要なときなどに大きな力を発揮したり、コミュニケーションを円滑にする効果があるとのこと。&lt;br /&gt;&lt;a href="http://www.blogger.com/goog_310126642"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://homepage2.nifty.com/osiete/s590.htm"&gt;http://homepage2.nifty.com/osiete/s590.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;・言語はphp&lt;br /&gt;まあ、ざっくりつくるのには適してますね。私はphp嫌いなのでパス。&lt;br /&gt;&lt;br /&gt;・構成のメモ書き&lt;br /&gt;&lt;br /&gt;------------------------------------------------------&lt;br /&gt;header&lt;br /&gt;------------------------------------------------------&lt;br /&gt;navi&lt;br /&gt;------------------------------------------------------&lt;br /&gt;recommned comtents(4つ)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | 寄付&lt;br /&gt;(数秒ごと)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;------------------------------------------------------&lt;br /&gt;main&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;                                 | aside bar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;------------------------------------------------------&lt;br /&gt;footer&lt;br /&gt;------------------------------------------------------&lt;br /&gt;&lt;br /&gt;・他に気がついたこと。&lt;br /&gt;naviにstoreがあって収益にしているw。日本の政治家が同じようなことしたら叩かれるな。&lt;br /&gt;&lt;br /&gt;・利用しているネットワークメディア&lt;br /&gt;faceBook&lt;br /&gt;twitter&lt;br /&gt;Youtube&lt;br /&gt;Flickr&lt;br /&gt;MysSpace&lt;br /&gt;Black Planet&lt;br /&gt;MiGente&lt;br /&gt;Linkedin&lt;br /&gt;&lt;br /&gt;使いすぎ。普通の個人なら&lt;br /&gt;&lt;br /&gt;faceBook&lt;br /&gt;twitter&lt;br /&gt;Youtube&lt;br /&gt;Flickr&lt;br /&gt;&lt;br /&gt;でいいんじゃないんでしょうか。&lt;br /&gt;&lt;br /&gt;・Blogのshare&lt;br /&gt;Digg&lt;br /&gt;FaceBook&lt;br /&gt;Newsvine&lt;br /&gt;Stumble&lt;br /&gt;del.icio.us&lt;br /&gt;&lt;br /&gt;とりあえず、ブログ構成も色々と良いパターンをためしていくつもりです。&lt;br /&gt;少しうっとうしく感じるかもしれませんが、より良い情報とUIご提供のためしばらくはご容赦ください。&lt;br /&gt;&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-980121645588769954?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/980121645588769954/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/03/1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/980121645588769954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/980121645588769954'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/03/1.html' title='バラク・オバマどっとこむに学ぶWEB構成'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-9105640970692830575</id><published>2011-02-26T08:23:00.002+09:00</published><updated>2011-02-26T08:31:53.092+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>プログラマ(ITエンジニア)の勉強方法</title><content type='html'>プログラマは継続的な勉強が必要です。&lt;br /&gt;もちろんプログラマに限らず、どの知的職(ホワイトカラー職)は同じことが言えるでしょう。&lt;br /&gt;しかし、ここではあえてプログラマに焦点を絞ります。&lt;br /&gt;プログラマはどのような勉強をすべきなのでしょうか。&lt;br /&gt;&lt;br /&gt;例えば、私のようにソフトウェアの実装・設計・仕様策定を主な業務としているような人は自宅でも何かしらのアプリを作成するべきだと思います。アプリをスクラッチから設計・作成・リリースすることで、技術、管理、マーケティングの力がバランス良く身につきます。&lt;br /&gt;　特にマーケティングやマネタイズ等は、プログラマが業務で関わる割合は低いのが一般的なので、自己で学んでいくべきです。&lt;br /&gt;&lt;br /&gt;世の中には色々なタイプの人がいて、資格の勉強をする人、ただ単にサンプルプログラムを書いて勉強する人、何もしない人がいます。&lt;br /&gt;&lt;br /&gt;何もしない人はそもそもプログラマという仕事に向いてないと思います。というよりはホワイトカラーに向いてない。&lt;br /&gt;&lt;br /&gt;資格の勉強をする人は、真面目で定型的なサラリーマンという人が多い気がします。彼らを観察していると、基本的に彼らは仕事ができないというわけでもなく、特別有能というわけでもありません。常になにかしらの不満を抱えていて、他の会社への転職を考えています。だから勉強はそれなりにする。でも、転職しても、給料があがっても、不満は解消されなくて、常に不満たらたらな人達です。&lt;br /&gt;ようは、自分に合ってない仕事に就いているけど、そこそこ仕事がこなせてしまうので、なんとなく続けてる。器用貧乏と言えるかもしれません。自分の能力、仕事、やりたいことの結合度が低いのです。&lt;br /&gt;&lt;br /&gt;サンプルプログラムを書いて勉強する人は、仕事が好きなひとに多いです。仕事が出来る人が多いですが、できない人もいる。&lt;br /&gt;一番扱いに困るのがこういったタイプで仕事の出来ない人です。利益を出すのがビジネスという意識が低く、アウトプットとインプットのバランスがめちゃくちゃなのです。&lt;br /&gt;「無能な働き者は銃殺せよ」&lt;br /&gt;という言葉がありますが、まさしくその通りです。&lt;br /&gt;基本的に対処方法は無く、私の場合は、同じチームにならないようにただただ祈るだけです。&lt;br /&gt;&lt;br /&gt;プログラマの勉強で大切なのは、自分がどういったキャリアを積んでいきたいかだと思います。&lt;br /&gt;　私が何も勉強しない人が問題外だと思うのは、自分のキャリアを会社の業務内容に完全に委ねてしまうからです。&lt;br /&gt;　これはあまりに危険です。今の日本の会社の仕組みでは、余程運がよくない限り社畜という生き物に変身するだけです。&lt;br /&gt;どういうキャリアを歩みたいかが、勉強する内容を決めるというのは、考えてみれば当たり前のことですね。イチローになりたいのに、松井秀喜になる練習を重ねても効果は薄いでしょう。根底の基礎となる部分は同じでも、積み上げていく強みの部分は自分で意識していく必要があります。&lt;br /&gt;&lt;br /&gt;結論は、一番重要な勉強は、自分を知る勉強ってことですね。&lt;br /&gt;全然答えになってません。私も、日々悩んでいるのですw。&lt;br /&gt;凡人はつらいです。「苦悩とは飛躍なんです」なんてイチローみたいにかっこよく言ってみたいです。&lt;br /&gt;&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-9105640970692830575?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/9105640970692830575/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/02/it.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9105640970692830575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9105640970692830575'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/02/it.html' title='プログラマ(ITエンジニア)の勉強方法'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-320021710389951496</id><published>2011-02-24T06:30:00.001+09:00</published><updated>2011-02-24T06:31:21.612+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>当たり前度をあげていくということ</title><content type='html'>業務や技術のレベルがあがるほどに、基礎技術・基礎知識の重要さを感じている今日このごろです。この傾向は、今後の社会でさらに顕著になっていくでしょう。&lt;br /&gt;なので、常に能力をあげていく必要があります。&lt;br /&gt;向上させていきたい能力は沢山あります。しかし、全ての能力をあげることなど不可能です。&lt;br /&gt;今後身につけたい能力は山ほどあるのが実情です。&lt;br /&gt;&lt;br /&gt;そこで、今後は当たり前に出来ることを少しづつ増やしていこうと思っています。&lt;br /&gt;つまり基礎の習得と積み上げ。あとは反復です。&lt;br /&gt;&lt;br /&gt;もちろん今年力を入れている&lt;br /&gt;android、iphone、google app Engine等の勉強は引き続き行っています。&lt;br /&gt;&lt;br /&gt;しかし、そのほかに最近は基礎を積みあげる時間を多めに取るようにしました。&lt;br /&gt;今は3D数学、英語、中国語の基礎を積み上げています。&lt;br /&gt;取り組み方としては、ひたすら同じ参考書を反復・暗記(計算)しています。体に覚えこませるまで反復しようと思っています。&lt;br /&gt;体力を維持するトレーニングもかなり基礎的な動作から毎日トレーニングを行っています。&lt;br /&gt;&lt;br /&gt;当たり前度を高くしておかないと、今後色々と世の中に振り回されるようになる。&lt;br /&gt;そんな気がしているこの頃であります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-320021710389951496?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/320021710389951496/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/02/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/320021710389951496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/320021710389951496'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/02/blog-post.html' title='当たり前度をあげていくということ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2783685973406749286</id><published>2011-02-19T07:51:00.004+09:00</published><updated>2011-02-19T08:08:37.486+09:00</updated><title type='text'>Android Tips Activityの挙動</title><content type='html'>Activity, GroupActivity, SeacrhBarを複合させたアプリ作成時に、挙動で色々とはまったので今後のためにメモ。&lt;br /&gt;はまった時に基本に立ち返るのはやっぱ重要ですね。もっと基礎を固めないと…&lt;br /&gt;&lt;br /&gt;osは現在メインで開発している2.1、エミュレータは2.3で確認&lt;br /&gt;&lt;br /&gt;１、まずは基本。&lt;br /&gt;&lt;br /&gt;1.1、&lt;span style="font-weight:bold;"&gt;画面表示までに呼び出しが行われるメソッドの流れ&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;onCreate&lt;br /&gt;↓&lt;br /&gt;onStart&lt;br /&gt;↓&lt;br /&gt;onResume&lt;br /&gt;↓&lt;br /&gt;画面表示&lt;br /&gt;&lt;br /&gt;1.2、&lt;span style="font-weight:bold;"&gt;onNewIntent()メソッドの使い方。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;search barで使用するときにちょっと挙動にとまどいました。&lt;br /&gt;このメソッドは一度目のActivityの起動では呼び出されません。二度目以降に呼び出されます。&lt;br /&gt;&lt;br /&gt;つまり、&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-qvGvmM6pJvk/TV74CV1tYGI/AAAAAAAAAGM/EI7J3q2je8M/s1600/activity1.2-1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 94px; height: 320px;" src="http://3.bp.blogspot.com/-qvGvmM6pJvk/TV74CV1tYGI/AAAAAAAAAGM/EI7J3q2je8M/s320/activity1.2-1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5575166107837096034" /&gt;&lt;/a&gt;&lt;br /&gt;上記のような遷移の場合、画面Aから画面Bに遷移する時には、onNewIntent()は呼ばれません。それがたとえ、&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;     Intent intent = new Intent(this, 画面B.class);&lt;br /&gt;     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);&lt;br /&gt;     startActivity(intent);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;のように画面Aのコード内でFLAG_ACTIVITY_SINGLE_TOPを指定してもです。&lt;br /&gt;onNewIntent()が呼ばれるのは、画面Bから画面Bにアクションを行う場合のみです。&lt;br /&gt;この時、FLAG_ACTIVITY_SINGLE_TOPを指定します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;    public void onClickButton(View view) {&lt;br /&gt;     Intent intent = new Intent(this, 画面B.class);&lt;br /&gt;        intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);&lt;br /&gt;     startActivity(intent);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;この時画面BのActivityで呼び出されるメソッドは&lt;br /&gt;onNewIntent&lt;br /&gt;↓&lt;br /&gt;onResume&lt;br /&gt;の順序となります。&lt;br /&gt;&lt;br /&gt;覚えておいて欲しいことは、&lt;span style="font-weight:bold;"&gt;stackには遷移前の画面Bは積まれない&lt;/span&gt;ということです。&lt;br /&gt;デバイスの戻るを押した場合には、画面Aに戻ります。&lt;br /&gt;ちなみに、コード内でIntent.FLAG_ACTIVITY_SINGLE_TOPを指定しなくても、android:launchMode="singleTop" をAndroidManifest.xmlに指定すれば同じことです。&lt;br /&gt;むしろ、こちらのほうが可読性が良いのでオススメします。&lt;br /&gt;&lt;br /&gt;1.3、&lt;span style="font-weight:bold;"&gt;Intent.FLAG_ACTIVITY_CLEAR_TOPを使ったActivityの挙動を理解する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;activityはstackの形式で蓄積されます。例えば、以下のような画面遷移があるとします。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-I9cfkYbDAMI/TV76mc19tPI/AAAAAAAAAGU/Tad5isq-Lgg/s1600/activity1.3-1.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 58px; height: 320px;" src="http://3.bp.blogspot.com/-I9cfkYbDAMI/TV76mc19tPI/AAAAAAAAAGU/Tad5isq-Lgg/s320/activity1.3-1.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5575168927215760626" /&gt;&lt;/a&gt;&lt;br /&gt;上記のような画面遷移を行うと、stackにはA, B, C, D, Bの順でactivityが積みあげられます。なので、画面Bでデバイスの戻るを押すと、&lt;br /&gt;&lt;br /&gt;D→C→B→A&lt;br /&gt;&lt;br /&gt;の順番で画面が戻っていきます。&lt;br /&gt;しかし、このデフォルトのactivityの仕様だと非常に困るときがあります。&lt;br /&gt;　例えば、画面Bが通常画面、画面Cがユーザデータの入力画面、画面Dがユーザ入力項目の確認画面と仮定しましょう。&lt;br /&gt;画面Dでボタン押下後にデータベースに登録して画面Bに戻る処理を行います。この時、画面Bに戻った後にデバイスの戻るを押されると、画面Dに戻ってしまいます。そこでユーザが登録ボタンを再び押せば、二重登録処理となってしまいます。バリデーションが実装されていてもこれは問題でしょう。このケースの場合、画面Dから画面Bに遷移する場合は、画面Cと画面Dのactivityはstackから消えていなければいけません。&lt;br /&gt;&lt;br /&gt;こういった場合に使うのが、Intent.FLAG_ACTIVITY_CLEAR_TOPです。この例の場合だと、画面Dから画面Bに遷移する場合に以下のようにコードを記述する&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;    public void onClickButton(View view) {&lt;br /&gt;     Intent intent = new Intent(this, 画面B.class);&lt;br /&gt;     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);&lt;br /&gt;     startActivity(intent);&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;こうすることで、画面Bに遷移したときstackの中身はA, Bになります。CとDがstackから削除されます。これなら、デバイスの戻るを押されても、画面Aに戻るだけです。&lt;br /&gt;&lt;br /&gt;色々な使い道があるので、googleのマニュアルにも目を通しておくといいでしょう&lt;br /&gt;http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP&lt;br /&gt;&lt;br /&gt;疲れたので、今回はとりあえずこんな所です。 &lt;br /&gt;でわ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2783685973406749286?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2783685973406749286/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/02/android-tips-activity.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2783685973406749286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2783685973406749286'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/02/android-tips-activity.html' title='Android Tips Activityの挙動'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-qvGvmM6pJvk/TV74CV1tYGI/AAAAAAAAAGM/EI7J3q2je8M/s72-c/activity1.2-1.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1911363445905502441</id><published>2011-02-14T01:07:00.002+09:00</published><updated>2011-02-14T01:12:55.103+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>Android,iphone スマートフォンのビジネスモデル</title><content type='html'>Androidとiphoneの普及により、日本でもスマートフォンの普及が広がっています。&lt;br /&gt;そして、ユーザ数の増加に比例して、スマートフォンをプラットフォームに据えたビジネスに取り組む企業や人が増えてきています。&lt;br /&gt;&lt;br /&gt;しかし、気になることもあります。&lt;br /&gt;その殆どが「日本のみをターゲット」にしたビジネスモデルなのです。&lt;br /&gt;そして安定して利益を出している仕組みは、ほとんどが「月額課金」のモデルです。&lt;br /&gt;ソーシャルゲーム、携帯アプリ。最近ではブログで有名になった人のメルマガの発行が目立ちます。&lt;br /&gt;&lt;br /&gt;月額課金の強みは、デッドユーザが存在することです。つまり、すでにサービスを利用していないのにお金を払い続けている人が一定以上存在することです。&lt;br /&gt;&lt;br /&gt;私は別にこのビジネスモデルを批判する気はありません。新聞購読、NHK料金、携帯料金、全て同じ仕組みです。貨幣社会の現在では、お金が継続的に流れる仕組みは絶対に必要です。お金の流れが止まれば、社会が停滞してしまいます。&lt;br /&gt;私が気になるのは前者。つまり、「日本のみをターゲット」にしたビジネスモデルです。&lt;br /&gt;&lt;br /&gt;不況とはいえ、日本にはまだまだ大量のお金が溢れています。&lt;br /&gt;一億人を超える日本語のみのマーケットは十分に大きく、海外でのビジネス展開は考えにくいのが現状です。&lt;br /&gt;ですが、これは小さなパイの潰しあいで、これ以上の市場の成長が見込めません。&lt;br /&gt;日本のIT技術者の待遇が悪いのは、日本の労働システムの問題もありますが、生産性の悪さと、市場が広がらないことにも原因があると思います。&lt;br /&gt;車産業と同じように、ITビジネスも海外を見据えたビジネスに転換していくべきですし、スマートフォンの普及はちょうどいい機会だと思います。&lt;br /&gt;とはいえ、現在の日本のIT企業に海外展開を望むのは無茶でしょう。特に大手ではまず不可能。かといって、メディアも保守的で期待できません。アルファブロガー達も完全に日本市場メインです。&lt;br /&gt;やはり海外市場への進出は、技術力の高い個人やベンチャーが少しずつ市場を切り開いていくしかないと思います。&lt;br /&gt;&lt;br /&gt;今後私は、海外展開を含めたビジネスモデルもいくつか試していきたいと考えています。&lt;br /&gt;今はクラウド化が進み、ほぼ無料で、サラリーマンをやりながら誰でもビジネスを展開できる世の中です。&lt;br /&gt;それなりの技術レベルがあれば、いつでも開始できるでしょう。&lt;br /&gt;我々技術者は、もうちょっと貪欲に海外にちょっかいをだしていくべきだと考えています。&lt;br /&gt;&lt;br /&gt;そんな感じの現状報告でした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1911363445905502441?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1911363445905502441/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/02/androidiphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1911363445905502441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1911363445905502441'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/02/androidiphone.html' title='Android,iphone スマートフォンのビジネスモデル'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-816976472220068688</id><published>2011-02-11T06:32:00.002+09:00</published><updated>2011-02-11T06:36:24.326+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android市場の拡大 スマートフォンビジネスモデルの考察</title><content type='html'>Androidの市場が拡大してきました。&lt;br /&gt;来年くらいには、Androidでも利益を見込めるようなビジネスもちょこちょことでてくるのではないでしょうか。&lt;br /&gt;&lt;br /&gt;私も技術の勉強と平行して、マーケティングの本を読み始めました。&lt;br /&gt;こういったマーケティングみたいな勉強はあまり好きではないのですが、会社の一構成員としてはそうもいってられません。&lt;br /&gt;マーケットを海外に全部取られて、中国とかに出稼ぎにいくようになるのはさすがに嫌なので。&lt;br /&gt;&lt;br /&gt;個人アプリは趣味なので、たいして利益が出なくても構わないのですけどね。（新しい個人アプリに取りかかりましたよ～）&lt;br /&gt;&lt;br /&gt;というわけで、これからは技術の情報だけでなくWEBのビジネスについても扱っていきたいと思います。&lt;br /&gt;主に、スマートフォンやSNS関連になると思います。&lt;br /&gt;&lt;br /&gt;新たなビジネスモデルの実験も色々と行っていきたいと思います。&lt;br /&gt;&lt;br /&gt;というわけで今回は&lt;br /&gt;iphone版産経新聞アプリの情報です。&lt;br /&gt;&lt;br /&gt;http://www.sankei-digital.co.jp/advertising/pdf/iphone_userdate/110203.pdf&lt;br /&gt;&lt;br /&gt;ユーザの平均年収が高いですね。&lt;br /&gt;個人的には、ソーシャルゲームみたいな搾取システムより、こっちのほうが好みです。&lt;br /&gt;ソーシャルゲームほどは稼げませんが、ビジネスアプリは安定しているのが特徴です。&lt;br /&gt;スマートフォンアプリの開発者・開発を考えている人は、是非目を通してみてください。&lt;br /&gt;&lt;br /&gt;でわ。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4883999572" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-816976472220068688?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/816976472220068688/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/02/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/816976472220068688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/816976472220068688'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/02/android.html' title='Android市場の拡大 スマートフォンビジネスモデルの考察'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8607336956883407904</id><published>2011-01-28T23:20:00.002+09:00</published><updated>2011-01-28T23:34:15.575+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>Facebook Creditという仮想通貨 ～錬金術は銀行からエンジニアへ～</title><content type='html'>最近、FaceBookの動きが活発です。&lt;br /&gt;今年は本格的にFacebook Creditを導入する計画らしく、個人的にとても注目しています。&lt;br /&gt;&lt;br /&gt;お金の価値は、金額ではなく信頼性にあります。&lt;br /&gt;5億人を超えるユーザーがいるFacebook Creditという仮想通貨の信頼性が高まれば、そこらへんの新興国の通貨より価値が出てくる可能性もあります。&lt;br /&gt;&lt;br /&gt;今後は、各社のスマートフォンにNFCが対応していきます。それは、Facebook Creditとスマートフォンが連携し、現実の通貨として利用できる時代の到来を予感させます。&lt;br /&gt;　&lt;br /&gt;　日本では、FaceBookはあまり使われていないのが現状です。私もユーザ登録はしていますが、周囲の人が使ってないので、やはり利用頻度は低いです。&lt;br /&gt;　しかし、これがFacebook Creditの導入により、コンビニやスーパーの決済で利用できるようになったら、話は別です。&lt;br /&gt;　Facebook CreditがスマートフォンのNFCにより管理が可能となり、現実世界で利用できるようになれば、FaceBookはあっというまにSNSのNo1プラットフォームに躍り出るでしょう。&lt;br /&gt;これは十分にありえる話です。セブンイ○ブンとか普通にやりそうですw。&lt;br /&gt;　もしそういう動きが起これば、私はすぐにFaceBookのアプリを作ります。サービスの課金は当然Facebook Credit。財政破綻が予想される日本円は使いません。リスク分散としても申し分ないです。税金は…かかるのかな？？この場合どう計算するのでしょうかね。&lt;br /&gt;&lt;br /&gt;　そのうちに、日本円で三千万の家が、二千万FaceBook Creditで売り出されるような時代がくるのかもしれません。(私は法律には疎いのでこれが法に違反しているかどうかはわかりません）。そうなればちょっとした世界通貨ですね。paypalはお役ご免です。&lt;br /&gt;　&lt;br /&gt;上記の事柄が現実になった世界では、エンジニアの目指すキャリアの最終目標も変わってきます。これまでは作成したサービスを浸透させて、巨万のお金を「得る」のが普通でした。しかしこれからは、サービスを浸透させて、お金を「作る」という時代が到来です。&lt;br /&gt;&lt;br /&gt;こうなれば現在の銀行による世界支配の時代を終わりにできるかもしれません。&lt;br /&gt;銀行のビジネスモデルは、みなさんが既に理解している通り、お金を貸して利子や手数料を稼ぐというものです。&lt;br /&gt;　これはものすごく洗練されたビジネスモデルです。&lt;br /&gt;　利子は100万円を110万や、時には150万円へと増やします。しかも、元手の100万円は、お客から集めたお金です。&lt;br /&gt;　つまり銀行とは、お客のお金をお客に貸し出し、利子や手数料で稼ぐというビジネスです。よくITを実態のない虚業といって批判する人がいますが、銀行に比べたら全然です。&lt;br /&gt;　銀行は借金という負債を、人の金で生み出す究極の虚業です。&lt;br /&gt;&lt;br /&gt;　色々とよくない話もあるFacebookですが、世の中を大きく変えてくれるんじゃないかという期待があります。&lt;br /&gt;Facebook Creditのような仮想通貨が広まれば、私たちの働き方・企業のあり方も大きく変わるでしょう。特に、WEBは若い世代の利用が中心で、既得権だらけの老年層や政治家の理解が浅いというのは大きな利点です。彼らが理解できないうちに、世の中のルールを変更してしまうことが可能だからです。&lt;br /&gt;&lt;br /&gt;新興国の急速な発展で世の中の構造が変わってきていますが、こういった場でも徐々に世の中は変わってきています。&lt;br /&gt;「英語の社内公用語化は失敗する」「ほとんどの人は英語が必要ない」&lt;br /&gt;とかいっている日本は平和というか暢気ですよね。&lt;br /&gt;間違いなく、世界は新しい方向へと向かっています。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4894518309" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8607336956883407904?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8607336956883407904/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/facebook-credit.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8607336956883407904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8607336956883407904'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/facebook-credit.html' title='Facebook Creditという仮想通貨 ～錬金術は銀行からエンジニアへ～'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2223830855992619480</id><published>2011-01-26T23:55:00.002+09:00</published><updated>2011-01-27T00:00:14.344+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Tips keyboardの挙動メモ</title><content type='html'>keyboardの特定ボタンを押した場合に、特定のアプリを呼び出すという実装を試しました。&lt;br /&gt;キーボードアプリとして、Googleのサンプルキーボードアプリを実装しました。&lt;br /&gt;その際、調査のため色々といじくりまわしたので後学のためにメモを残します。&lt;br /&gt;今後役に立つかは微妙ですが…私はキーボードアプリを作る気ゼロなので。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;・Keyクラス&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;キーボードのキーの文字とポジションを描写するクラスである&lt;br /&gt;&lt;br /&gt;qwerty.xml&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;Row&amp;gt;&lt;br /&gt;        &amp;lt;Key android:codes="99" android:keyLabel="c"/&amp;gt;&lt;br /&gt;        &amp;lt;Key android:codes="118" android:keyLabel="v"/&lt;br /&gt;&amp;lt;/Row&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;というqwerty.xmlがあるとすると、&lt;br /&gt;キーボードの「c」を押下した場合、&lt;br /&gt;&lt;br /&gt;KeyboardViewListenerを実装したクラスの&lt;br /&gt;public void onKey(int primaryCode, int[] keyCodes) メソッドの&lt;br /&gt;primaryCodeで&lt;br /&gt;&lt;br /&gt;99&lt;br /&gt;&lt;br /&gt;が取得できる。&lt;br /&gt;&lt;br /&gt;また、&lt;br /&gt;public boolean onKeyDown(int keyCode, KeyEvent event) メソッドの&lt;br /&gt;keyCodeは&lt;br /&gt;&lt;br /&gt;31(KeyEvent.KEYCODE_C)&lt;br /&gt;&lt;br /&gt;が取得できる。&lt;br /&gt;&lt;br /&gt;EditText上にカーソルがある状態でキーボードを押下すると、&lt;br /&gt;&lt;br /&gt;onKey()&lt;br /&gt;&lt;br /&gt;が呼ばれるようだ。&lt;br /&gt;&lt;br /&gt;エミュレーターのキーボードを押すと&lt;br /&gt;onKeyDown()&lt;br /&gt;↓&lt;br /&gt;translateKeyDown()&lt;br /&gt;↓&lt;br /&gt;onKey()&lt;br /&gt;の順番で呼び出される。&lt;br /&gt;&lt;br /&gt;onKey()以降でメイン処理が行われているようだ。&lt;br /&gt;&lt;br /&gt;スペースキーを押すと、&lt;br /&gt;onKey()&lt;br /&gt;↓&lt;br /&gt;sendKey()&lt;br /&gt;と呼び出される。&lt;br /&gt;&lt;br /&gt;onKey()の中では、isWordSeparator()がtrueになる。&lt;br /&gt;isWordSeparatorはstrings.xmlのword_separators属性で指定している。&lt;br /&gt;InputConnectionクラスのcommitTextメソッドで、word_separators属性で指定した文字を設定している。&lt;br /&gt;&lt;br /&gt;以降は、自分のやりたかった処理。&lt;br /&gt;キーボードの「a」が押された場合に、他アプリのHelloWorldを呼びだす(aの文字はテキストエリアに挿入しない)。&lt;br /&gt;&lt;br /&gt;onKeyメソッドに以下の処理を追加した。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;    public void onKey(int primaryCode, int[] keyCodes) {&lt;br /&gt;&lt;br /&gt;    if (primaryCode == 97) {&lt;br /&gt;    // a押下&lt;br /&gt;    String clazz = "co.hoge.sample.Test";&lt;br /&gt;            Intent intent = new Intent(Intent.ACTION_MAIN);&lt;br /&gt;&lt;br /&gt;            int idx = clazz.lastIndexOf('.');&lt;br /&gt;            String pkg = clazz.substring(0, idx);&lt;br /&gt;&lt;br /&gt;            intent.setClassName(pkg, clazz);&lt;br /&gt;            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);&lt;br /&gt;&lt;br /&gt;            startActivity(intent);&lt;br /&gt;    } else if () {&lt;br /&gt;    // 以降変更なし&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;とすると、co.hoge.sample.Testが起動する。&lt;br /&gt;加えて、co.hoge.sample側のアプリのAndroidManifest.xmlファイルのIntentFilterに&lt;br /&gt;android:schemeとandroid:hostを指定してやると、なお良い。&lt;br /&gt;&lt;br /&gt;以上。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2223830855992619480?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2223830855992619480/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-tips-keyboard.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2223830855992619480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2223830855992619480'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-tips-keyboard.html' title='Android Tips keyboardの挙動メモ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7936740226661370061</id><published>2011-01-26T23:46:00.002+09:00</published><updated>2011-01-26T23:54:46.840+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>今後プログラマーに求められそうな能力　</title><content type='html'>前回の言語編に続いて、今回は能力編です。&lt;br /&gt;とはいえ今日取り上げる能力は、プログラマーも他の職業も、そんなに変わらないのではないかと思います。&lt;br /&gt;&lt;br /&gt;・コミュニケーション力&lt;br /&gt;&lt;br /&gt;当然ですね。人は、一人では生きていけません。&lt;br /&gt;今後はリアルな周囲の人間環境だけでなく、ネットを介した繋がりも重要になり、ソーシャルメディアを活用するのが当たり前になるのではないでしょうか。&lt;br /&gt;&lt;br /&gt;・会計(簿記)&lt;br /&gt;&lt;br /&gt;ざっくりとしたお金の流れは知っておく必要があると思います。&lt;br /&gt;簿記の資格をとるとか、公認会計士の勉強をするとかいう意味じゃありませんよ。&lt;br /&gt;BS、PL、CFくらいは読めるようにしておきましょうということです。&lt;br /&gt;結構見かけるのは「簿記2級まで取得したけど、内容はもう忘れた」みたいな人。これでは全く意味がないと思います。&lt;br /&gt;おすすめなのは、ちょっとした金額で投資をはじめて、財務諸表に目を通すことです。基本的なことだけ勉強すればいいと思います。&lt;br /&gt;&lt;br /&gt;・プレゼン力&lt;br /&gt;&lt;br /&gt;自分を売り込む力を鍛えましょう。&lt;br /&gt;日本と違い、グローバル社会では、謙譲の心は美徳じゃないですからね。&lt;br /&gt;とことん攻めるべきです。&lt;br /&gt;&lt;br /&gt;・マネジメント&lt;br /&gt;&lt;br /&gt;既存の日本の会社の管理職のような、いい加減なマネジメントではありません。&lt;br /&gt;きっちりとした体系だったマネジメントスキルを身につけましょう。&lt;br /&gt;&lt;br /&gt;・数学・統計分析&lt;br /&gt;&lt;br /&gt;これは今後エンジニアに要求され、なおかつ高給に繋がる能力だと思います。&lt;br /&gt;当たり前ですが、受験勉強の数学ではありません。&lt;br /&gt;3Dで扱うベクトルや行列、ビジネスに有効なデータを抽出する統計分析の力等です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;こんなところでしょうか。&lt;br /&gt;色々ありすぎですね。もちろん全部身につけるなんて無理に決まっています。&lt;br /&gt;時代の流れを読んで、自分の強みに合った能力を身につけるべきです。&lt;br /&gt;ネットの発達と技術の進化で効率的に学ぶことが出来るようになったのに比例して、人に期待される能力はあがる一方になっています。&lt;br /&gt;この傾向はしばらく続くでしょう。&lt;br /&gt;20年を超える先の時代の社会は想像すらつかないので、生涯続けられるスキルを臨機応変に身につけることが必要になってきます。&lt;br /&gt;&lt;br /&gt;さてさて、どんな未来が待っているのでしょうか。&lt;br /&gt;でも、必死でくらいついていけば、きっとワクワクで素敵な未来が待っている。そんな気がします。&lt;br /&gt;&lt;br /&gt;でわん&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7936740226661370061?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7936740226661370061/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post_26.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7936740226661370061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7936740226661370061'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post_26.html' title='今後プログラマーに求められそうな能力　'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2895194254230994349</id><published>2011-01-24T02:37:00.000+09:00</published><updated>2011-01-24T02:38:25.438+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>今後プログラマー(ITw技術者)に求められそうな言語</title><content type='html'>社会の流れが速すぎるこの頃。&lt;br /&gt;今日は、今後プログラマーに求められる言語についてぼんやりと考えてました。&lt;br /&gt;以下が結論。&lt;br /&gt;&lt;br /&gt;・Java&lt;br /&gt;&lt;br /&gt;これは必須ですね。すでにCと並ぶ基本言語ですね。&lt;br /&gt;&lt;br /&gt;・Objective-C, C、C++等のC系&lt;br /&gt;&lt;br /&gt;Objective-CはMac・iphone・ipad次第ですね。ただ、固定ファンが多く、お金が流れる市場がきちんと確立しているので、&lt;br /&gt;趣味のソフトウェアでお金を稼ぐなら、Objective-C,やCに力をいれるほうがいいでしょう。&lt;br /&gt;趣味プログラマーは絶対こっちがおすすめ。&lt;br /&gt;&lt;br /&gt;・python&lt;br /&gt;&lt;br /&gt;ダークホース。海外のフリーソフトをいじくりまわす人は必要だと思います。&lt;br /&gt;&lt;br /&gt;・HTML5, css3, javaScript&lt;br /&gt;&lt;br /&gt;多分5年後には、javaを抜いてメイン言語になりますね。まず間違いないでしょう。&lt;br /&gt;javaやCはあくまで、HTML5, css3, javaScriptで出来ないことを実装するための補助的な言語になるでしょうね。&lt;br /&gt;プログラマー的にはあまり想像したくない未来です…。でも、多分間違いないです。&lt;br /&gt;&lt;br /&gt;・英語&lt;br /&gt;&lt;br /&gt;すでに英語は必須ですね。&lt;br /&gt;そもそも今でもandroid、objective-C、Html5を勉強するには、ある程度できないと話にならないです。&lt;br /&gt;プログラマーうんぬんではなく社会人として必須になるでしょうね。&lt;br /&gt;新卒のTOEICでの足切も本格的に始まるんじゃないでしょうか。&lt;br /&gt;&lt;br /&gt;・中国語&lt;br /&gt;&lt;br /&gt;職場でも中国の人がだいぶ増えてきました。&lt;br /&gt;今は日本語を話せる中国の方が来てくれていますが、いずれ中国語が必要になるのはもう明らかな状況です。&lt;br /&gt;ネット上の情報も飛躍的に増えてきてるので、中国語の習得は避けられないでしょう。&lt;br /&gt;今の共産中国バブルが崩壊しても、シンガポール、香港、台湾は力を増大させ続けるでしょうから。&lt;br /&gt;ただ、企業が就職要件として必須にするまでは10年くらいは猶予があると思います。&lt;br /&gt;みなさんもちょこっとづつはじめましょう。ピンインからがっつりと。&lt;br /&gt;&lt;br /&gt;・スペイン語&lt;br /&gt;&lt;br /&gt;20年後先を見るならスペイン語も必要でしょう。&lt;br /&gt;世界の三大言語は、英語・中国語・スペイン語になるのはほぼ決定的です。&lt;br /&gt;ただ、スペイン語は日本語と相性が良いので、英語程習得に時間がかからないのではないでしょうか。&lt;br /&gt;基本文法しかやったことないからわかりませんがw&lt;br /&gt;&lt;br /&gt;と言語に関してはこんな感じではないかと。&lt;br /&gt;つーか、もっと頑張れ日本。できれば、日本で快適に住み続けられる世の中を望みます。&lt;br /&gt;でも、実際はかなり厳しそうですからね。&lt;br /&gt;政府が法人税とかの前に、老人の負担を若者に被せる今の仕組みを変えないとダメでしょうね。&lt;br /&gt;政治家が老人な時点で絶望的かと。&lt;br /&gt;&lt;br /&gt;小泉Jrの奇跡に期待するか…。&lt;br /&gt;&lt;br /&gt;次回は、言語でなく能力について書いてみようかと思ってます。&lt;br /&gt;でわん。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2895194254230994349?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2895194254230994349/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/itw.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2895194254230994349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2895194254230994349'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/itw.html' title='今後プログラマー(ITw技術者)に求められそうな言語'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5451577801687633796</id><published>2011-01-23T23:41:00.003+09:00</published><updated>2011-01-24T00:10:14.038+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Tips</title><content type='html'>今後も再利用しそうな実装の簡単なメモ書き&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;アンドロイド機種端末の取得&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;String model = android.os.Build.MODEL;&lt;br /&gt;&lt;br /&gt;とすると、model変数に端末名が設定される。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;ListViewでグループ分けをする&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;isEnabledメソッドを利用する&lt;br /&gt;&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;class SampleActivity extends ListView {&lt;br /&gt;&lt;br /&gt;    // ListViewの処理&lt;br /&gt;&lt;br /&gt;    class SampleList extends ArrayAdapter&amp;lt;ArrayList&amp;lt;String&amp;gt;&amp;gt; {&lt;br /&gt;&lt;br /&gt;        private Context mContext;&lt;br /&gt;        private ArrayList&amp;lt;ContentsCategoryBean&amp;gt; list;&lt;br /&gt;&lt;br /&gt;        public ContentsCategoryList(Context context, int textViewResourceId,&lt;br /&gt;            ArrayList&amp;lt;ContentsCategoryBean&amp;gt; list) {&lt;br /&gt;            super(context, textViewResourceId);&lt;br /&gt;            this.mContext = context;&lt;br /&gt;            this.list = list;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public int getCount() {&lt;br /&gt;            return this.list.size();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public long getItemId(int position) {&lt;br /&gt;            return Long.valueOf(this.list.get(position).id);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public View getView(int position, View convertView, ViewGroup parent) {&lt;br /&gt;&lt;br /&gt;            if (!isEnabled(position)) {&lt;br /&gt;                // 処理false&lt;br /&gt;            } else {&lt;br /&gt;                // 処理true&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return row;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public boolean isEnabled(int position) {&lt;br /&gt;&lt;br /&gt;            // 処理&lt;br /&gt;            // trueとfalseに分岐して返す&lt;br /&gt;&lt;br /&gt;            return true;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;isEnabledメソッドの中で、列のデータによるグルーピングを行うのがポイント。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;TABを画面下に設定する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;AndroidのTABを画面下に設定するやり方です。&lt;br /&gt;layoutの構築は、ここではRelativeLayoutを使います。LinerLayoutでも可能ですが、私は使わないのでここでは記述しません。&lt;br /&gt;&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;TabHost xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:id="@android:id/tabhost"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&amp;gt;&lt;br /&gt;    &amp;lt;RelativeLayout&lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="fill_parent" &amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;FrameLayout&lt;br /&gt;            android:id="@android:id/tabcontent"&lt;br /&gt;            android:layout_width="fill_parent"&lt;br /&gt;            android:layout_height="fill_parent"&lt;br /&gt;            android:layout_alignParentTop="true"&lt;br /&gt;            android:layout_above="@android:id/tabs" /&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;TabWidget&lt;br /&gt;            android:id="@android:id/tabs"&lt;br /&gt;            android:layout_width="fill_parent"&lt;br /&gt;            android:layout_height="wrap_content"&lt;br /&gt;            android:layout_alignParentBottom="true" /&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&amp;lt;/TabHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ポイント&lt;br /&gt;・FrameLayoutタグはコンテンツの位置なので、TabWidgetの上に配置する&lt;br /&gt;・Tabを画面下に配置するのだから、TabWidgetタグは当然FrameLayoutの下になる。&lt;br /&gt;&lt;br /&gt;以上で～す。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5451577801687633796?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5451577801687633796/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-tips.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5451577801687633796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5451577801687633796'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-tips.html' title='Android Tips'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6339936973121764257</id><published>2011-01-19T21:49:00.007+09:00</published><updated>2011-01-19T22:16:23.235+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androd Tutorial   iphone風の画面作成 その4</title><content type='html'>前回は背景や画像の調整を行いました。&lt;br /&gt;今回は文字の調整を行います。&lt;br /&gt;&lt;br /&gt;最初は表示タイトルを表示するTextViewのitme_titleから変更しましょう。&lt;br /&gt;&lt;br /&gt;文字の調整はstyles.xmlを利用するべきです。layoutのxmlファイルに記述するのは、効率が悪い上に可読性も損なわれるので避けましょう。&lt;br /&gt;&lt;br /&gt;styles.xmlはvaluesフォルダ内に作成します。記述内容は以下の通りになります。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;style name="itme_title_style"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textSize"&amp;gt;20sp&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textColor"&amp;gt;#000000&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:typeface"&amp;gt;monospace&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textStyle"&amp;gt;normal|bold&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style name="itme_explain_style"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textSize"&amp;gt;14sp&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textColor"&amp;gt;#ff0000&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:typeface"&amp;gt;monospace&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textStyle"&amp;gt;normal&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;以下に属性の説明を記述します。&lt;br /&gt;android:textSizeはテキストのサイズを指定します。単位はpxでなく、spを使ってください。 spを使うことで、ユーザーが指定したフォントサイズが自動で拡大縮小されます。&lt;br /&gt;スクリーンの解像度と指定したフォントのサイズを端末側でうまく調整してくれるのです。&lt;br /&gt;&lt;br /&gt;もっと詳しく知りたい方はhttp://developer.android.com/guide/topics/resources/more-resources.html#Dimension を熟読してください。&lt;br /&gt;&lt;br /&gt;android:textColorはテキストの色です。16進数で指定します。&lt;br /&gt;&lt;br /&gt;android:typefaceはテキストの書体を指定します。&lt;br /&gt;日本語の場合はmonospaceを指定し、英語はsansを指定するのが一般的です。好みの問題もありますが、これらが一般的には読みやすいとされています。&lt;br /&gt;腕の良いデザイナーさんが近くにいる場合は、その辺をレクチャーしてもらうといいと思います。私はgimpやinkscapeを使って画像の作成もよく行うのですが、周りのデザイナーさんの影響は凄く大きいです。デザインの勉強は、プログラミングにも絶対プラスになります。って話がずれましたね。&lt;br /&gt;&lt;br /&gt;android:textStyleはテキストのスタイルを指定します。&lt;br /&gt;boldは太字です。他にはにitalic（斜体）も指定できます。&lt;br /&gt;&lt;br /&gt;続いて、このstyles.xmlで指定した文字情報をhome_list.xmlに反映させましょう。以下のように指定します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:background="#ffffff"&lt;br /&gt;    &amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/image"&lt;br /&gt;       android:layout_width="100dip"&lt;br /&gt;       android:layout_height="wrap_content" &lt;br /&gt;       android:adjustViewBounds="true"  /&amp;gt;&lt;br /&gt;              &lt;br /&gt; &amp;lt;TextView&lt;br /&gt;   android:id="@+id/itme_title"&lt;br /&gt;   android:layout_width="wrap_content"&lt;br /&gt;   android:layout_height="wrap_content"&lt;br /&gt;   android:layout_toRightOf="@id/image" &lt;br /&gt;   &lt;span style="color:#FF0000;"&gt;style="@style/itme_title_style"&lt;/span&gt; /&amp;gt;&lt;br /&gt;    &lt;br /&gt; &amp;lt;TextView&lt;br /&gt;   android:id="@+id/item_explain"&lt;br /&gt;   android:layout_width="190dip"&lt;br /&gt;   android:layout_height="wrap_content" &lt;br /&gt;   android:layout_toRightOf="@id/image" &lt;br /&gt;   android:layout_below="@id/itme_title" &lt;br /&gt;   &lt;span style="color:#FF0000;"&gt;style="@style/itme_explain_style"&lt;/span&gt; /&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/arrow_image"&lt;br /&gt;       android:layout_width="35dip"&lt;br /&gt;       android:layout_height="wrap_content" &lt;br /&gt;       android:layout_alignParentRight="true"&lt;br /&gt;       android:layout_centerVertical="true"&lt;br /&gt;       android:adjustViewBounds="true" &lt;br /&gt;       android:src="@drawable/arrow_button" /&amp;gt;&lt;br /&gt;    &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;赤の部分が変更した箇所です。style="@style/ + 属性名"で設定します。&lt;br /&gt;さて、ビルドして、androidエミュレーターを起動しましょう。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TTbfrL2S89I/AAAAAAAAAFo/TTwELblZmUE/s1600/iphoneUi_tutorial1_img7.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TTbfrL2S89I/AAAAAAAAAFo/TTwELblZmUE/s320/iphoneUi_tutorial1_img7.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563880322670719954" /&gt;&lt;/a&gt;&lt;br /&gt;Good!!&lt;br /&gt;うまいこと表示されましたね。&lt;br /&gt;&lt;br /&gt;次はヘッダーを追加しましょう。アプリケーションのタイトルバーも不要なので削除します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;public class HomeActivity extends ListActivity {&lt;br /&gt; &lt;br /&gt; private File sdcardDir = Environment.getExternalStorageDirectory();&lt;br /&gt; &lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;&lt;br /&gt;    @Override&lt;br /&gt;&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        &lt;span style="color:#FF0000;"&gt;requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;/span&gt;&lt;br /&gt;        setContentView(R.layout.home);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // 以降変更なし&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;requestWindowFeature(Window.FEATURE_NO_TITLE);が追加されています。&lt;br /&gt;これでアプリケーションのタイトルバーが消えます。&lt;br /&gt;続いてheaderを追加します。画像を用意します。gimpで作成します。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TTbgcZ6RoVI/AAAAAAAAAFw/r2MhNso7m5M/s1600/header_home.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 36px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TTbgcZ6RoVI/AAAAAAAAAFw/r2MhNso7m5M/s320/header_home.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563881168259096914" /&gt;&lt;/a&gt;&lt;br /&gt;だいぶ色が濃くなってしまいましたね。まあ、ご愛嬌ということでw。&lt;br /&gt;ではheaderをリストの上に配置しましょう。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:background="@drawable/bg_home"&lt;br /&gt;    &amp;gt;&lt;br /&gt;    &lt;br /&gt; &lt;span style="color:#FF0000;"&gt;&lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;        android:id="@+id/header"&lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_height="40dip"&lt;br /&gt;        android:text="@string/header_home" &lt;br /&gt;        android:background="@drawable/header_home"&lt;br /&gt;        style="@style/header_home_style" /&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;ListView  &lt;br /&gt;        android:id="@+id/android:list" &lt;br /&gt;        android:layout_height="fill_parent" &lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        &lt;span style="color:#FF0000;"&gt;android:layout_below="@id/header"&lt;/span&gt;  /&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;        android:id="@+id/android:empty"&lt;br /&gt;        android:layout_width="wrap_content"&lt;br /&gt;        android:layout_height="wrap_content"&lt;br /&gt;        android:text="@string/nodata"&lt;br /&gt;        &lt;span style="color:#FF0000;"&gt;android:layout_below="@id/header"&lt;/span&gt; /&amp;gt;&lt;br /&gt;       &lt;br /&gt;&lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;注意して欲しいのは、ImageViewでなくTextViewを利用していることです。&lt;br /&gt;画像に直接文字を記述したheader画像を用意するより、文字のない画像を用意したほうが汎用性があるのでお勧めです。&lt;br /&gt;&lt;br /&gt;style="@style/header_home_style"で文字の調整指定を行っているので、styles.xmlに追加が必要です。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;style name="itme_title_style"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textSize"&amp;gt;20sp&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textColor"&amp;gt;#000000&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:typeface"&amp;gt;monospace&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textStyle"&amp;gt;normal|bold&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;style name="itme_explain_style"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textSize"&amp;gt;14sp&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textColor"&amp;gt;#ff0000&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:typeface"&amp;gt;monospace&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textStyle"&amp;gt;normal&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt;    &lt;br /&gt; &lt;span style="color:#FF0000;"&gt;&lt;br /&gt;    &amp;lt;style name="header_home_style"&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textSize"&amp;gt;25sp&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textColor"&amp;gt;#ffffff&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:typeface"&amp;gt;monospace&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:textStyle"&amp;gt;normal|bold&amp;lt;/item&amp;gt;&lt;br /&gt;        &amp;lt;item name="android:gravity"&amp;gt;center&amp;lt;/item&amp;gt;&lt;br /&gt;    &amp;lt;/style&amp;gt;&lt;br /&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;赤の部分が変更した箇所です。&lt;br /&gt;さて、ビルドして、androidエミュレーターを起動しましょう。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TTbhpQD60EI/AAAAAAAAAF4/6zZ1MEDV2Yk/s1600/iphoneUi_tutorial1_img8.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TTbhpQD60EI/AAAAAAAAAF4/6zZ1MEDV2Yk/s320/iphoneUi_tutorial1_img8.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563882488465117250" /&gt;&lt;/a&gt;&lt;br /&gt;Good!!&lt;br /&gt;うまいこと表示されましたね。&lt;br /&gt;ただこうしてみると、header画像の背景に透過処理は不要ですね。今回は面倒なので、このままにしときますw。実際に作る場合は気をつけましょう。&lt;br /&gt;&lt;br /&gt;あとは、個人的に分割線が気になるので、分割線を変更します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:background="@drawable/bg_home"&lt;br /&gt;    &amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/header"&lt;br /&gt;      android:layout_width="fill_parent"&lt;br /&gt;      android:layout_height="40dip"&lt;br /&gt;      android:text="@string/header_home" &lt;br /&gt;      android:background="@drawable/header_home"&lt;br /&gt;      style="@style/header_home_style" /&amp;gt;&lt;br /&gt;    &lt;br /&gt;    &amp;lt;ListView  &lt;br /&gt;        android:id="@+id/android:list" &lt;br /&gt;        android:layout_height="fill_parent" &lt;br /&gt;        android:layout_width="fill_parent"&lt;br /&gt;        android:layout_below="@id/header" &lt;br /&gt;        &lt;span style="color:#FF0000;"&gt;android:divider="#696969"&lt;br /&gt;        android:dividerHeight="2sp"&lt;/span&gt; /&amp;gt;&lt;br /&gt;        &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/android:empty"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:text="@string/nodata"&lt;br /&gt;      android:layout_below="@id/header" /&amp;gt;&lt;br /&gt;       &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;赤の部分が変更した箇所です。&lt;br /&gt;android:dividerで分割線の色を指定、android:dividerHeightで高さを指定しています。&lt;br /&gt;さて、ビルドして、androidエミュレーターを起動しましょう。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZI-uFiqogUM/TTbiPfuPGTI/AAAAAAAAAGA/CH-WVfXFntI/s1600/iphoneUi_tutorial1_img9.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_ZI-uFiqogUM/TTbiPfuPGTI/AAAAAAAAAGA/CH-WVfXFntI/s320/iphoneUi_tutorial1_img9.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5563883145504168242" /&gt;&lt;/a&gt;&lt;br /&gt;Great!!&lt;br /&gt;色が濃い灰色に変更され、高さも変わりました。&lt;br /&gt;とはいうものの、あまり違いがわからなくなってきたかもしれませんね。&lt;br /&gt;これ以上はキリがないので、これでtutorialは終了です。&lt;br /&gt;というわけで、長いチュートリアルをここまでつきあってくださったみなさん、大変お疲れさまでした。&lt;br /&gt;&lt;br /&gt;今回私がこのチュートリアルを作成したのは、普段海外のチュートリアルに色々助けられていて、なにか自分にもできることがないかなと考えたのが発端です。&lt;br /&gt;日本だと、tipsのようなちょっとした情報はたくさんあっても、チュートリアルのような作成に手間がかかる説明は少ないのが現状です。これは日本のエンジニアが置かれている無駄に長い労働環境が影響しているのかもしれません。&lt;br /&gt;ただ、せっかく世界標準のandroidなのだから、こういった文化も世界標準にしていきたいです。&lt;br /&gt;&lt;br /&gt;次は番外編でgimpを使ったandroid用画像の作り方なんかできたらなと思います。ちょっとした画像が作成できると、プログラマーは重宝すると思います。 gimpはフリーソフトだし、是非覚えておくといいと思います。&lt;br /&gt;&lt;br /&gt;では、このへんで。みなさん素敵なandroid Lifeを。&lt;br /&gt;See you next time.&lt;br /&gt;Bye!&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4806139211" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6339936973121764257?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6339936973121764257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6339936973121764257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6339936973121764257'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-4.html' title='Androd Tutorial   iphone風の画面作成 その4'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZI-uFiqogUM/TTbfrL2S89I/AAAAAAAAAFo/TTwELblZmUE/s72-c/iphoneUi_tutorial1_img7.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-536352850058412114</id><published>2011-01-13T21:21:00.007+09:00</published><updated>2011-01-13T21:40:19.873+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androd Tutorial   iphone風の画面作成 その3</title><content type='html'>さて、今回は前回作成した画面をブラッシュアップさせていきます。&lt;br /&gt;&lt;br /&gt;まずは背景を変更することからはじめましょう。&lt;br /&gt;黒だとiphoneっぽくないですもんね。&lt;br /&gt;ということで背景画像を作成します。ソフトはフリーソフトのgimpを使います。&lt;br /&gt;android開発者なら、photoshopでなく、やはりフリーのgimpでしょう(お金かからないですからね)。&lt;br /&gt;作成した画像は以下のファイルです。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7ukBW_MzI/AAAAAAAAAE4/n_-5n6K0eLs/s1600/bg_home.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7ukBW_MzI/AAAAAAAAAE4/n_-5n6K0eLs/s320/bg_home.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561644892456694578" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;gimpを使った画像ファイルの作成の仕方もそのうちtutorialにする予定ですが、今回は上記のファイルをそのままDLして利用してください。もしくは、他の画像を使って代用するなどしてください。&lt;br /&gt;&lt;br /&gt;さて、これをhome.xmlの背景に設定しましょう。ファイルはdrawableフォルダに配置します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &lt;span style="color:#FF0000;"&gt;android:background="@drawable/bg_home"&lt;/span&gt;&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ListView &lt;br /&gt;        android:id="@+id/android:list"&lt;br /&gt;        android:layout_height="fill_parent"&lt;br /&gt;        android:layout_width="fill_parent" /&amp;gt;  &lt;br /&gt;       &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/android:empty"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:text="@string/nodata" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;android:background="@drawable/bg_home"で背景の設定を行っています。&lt;br /&gt;&lt;br /&gt;レイアウトの変更なので、こまめに確認していきましょう。ビルドして、androidエミュレーターを起動させてみます。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7vaPxTXOI/AAAAAAAAAFA/jhJW0QPo5kE/s1600/iphoneUi_tutorial1_img3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7vaPxTXOI/AAAAAAAAAFA/jhJW0QPo5kE/s320/iphoneUi_tutorial1_img3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561645824038100194" /&gt;&lt;/a&gt;&lt;br /&gt;Oh Yeah!!&lt;br /&gt;しかし、リストの中の背景まで変わってしましましたね。&lt;br /&gt;これだと見づらいので、リストの中の背景は白に変更しましょう。&lt;br /&gt;リストの中の背景はhome_list.xmlに設定します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &lt;span style="color:#FF0000;"&gt;android:background="#ffffff"&lt;/span&gt;&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/image"&lt;br /&gt;       android:layout_width="100dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:adjustViewBounds="true"  /&amp;gt;&lt;br /&gt;              &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/itme_title"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"  /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/item_explain"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"&lt;br /&gt;      android:layout_below="@id/itme_title" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;android:background="#ffffff"を追加しました。&lt;br /&gt;ビルドして、androidエミュレーターを起動します。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TS7wHPlyhKI/AAAAAAAAAFI/yuljErSrftA/s1600/iphoneUi_tutorial1_img4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TS7wHPlyhKI/AAAAAAAAAFI/yuljErSrftA/s320/iphoneUi_tutorial1_img4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561646597083923618" /&gt;&lt;/a&gt;&lt;br /&gt;Oh Yeah!!&lt;br /&gt;白になりましたね。&lt;br /&gt;&lt;br /&gt;だいぶiphoneっぽくなりましたが、まだまだです。&lt;br /&gt;iphoneはリスト列に矢印画像がありますよね。というわけで矢印画像も追加してみましょう。&lt;br /&gt;背景と同じようにgimpで作成します。以下のような画像を作成してみました。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7wYN7Pq5I/AAAAAAAAAFQ/4FPMjL-ky78/s1600/arrow_button.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 100px; height: 75px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7wYN7Pq5I/AAAAAAAAAFQ/4FPMjL-ky78/s320/arrow_button.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561646888694819730" /&gt;&lt;/a&gt;&lt;br /&gt;これをリスト画面で表示されるようにhome_list.xmlに追加します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:background="#ffffff"&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/image"&lt;br /&gt;       android:layout_width="100dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:adjustViewBounds="true"  /&amp;gt;&lt;br /&gt;              &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/itme_title"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"  /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/item_explain"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"&lt;br /&gt;      android:layout_below="@id/itme_title" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &lt;span style="color:#FF0000;"&gt;&lt;br /&gt;    &amp;lt;ImageView android:id="@+id/arrow_image"&lt;br /&gt;       android:layout_width="35dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:layout_alignParentRight="true"&lt;br /&gt;       android:layout_centerVertical="true"&lt;br /&gt;       android:adjustViewBounds="true"&lt;br /&gt;       android:src="@drawable/arrow_button" /&amp;gt;&lt;br /&gt;    &lt;/span&gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;android:id="@+id/arrow_image"を追加しました。画像なのでImageViewです。&lt;br /&gt;ビルドして、androidエミュレーターを起動します。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZI-uFiqogUM/TS7w7-Ih2SI/AAAAAAAAAFY/E8WZUf0_myA/s1600/iphoneUi_tutorial1_img5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_ZI-uFiqogUM/TS7w7-Ih2SI/AAAAAAAAAFY/E8WZUf0_myA/s320/iphoneUi_tutorial1_img5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561647502930860322" /&gt;&lt;/a&gt;&lt;br /&gt;Oh Yeah Great!!&lt;br /&gt;うまいこと表示されましたね。&lt;br /&gt;さて、ここでは色々な属性を使ったので、重要な属性の説明をしておきましょう。&lt;br /&gt;&lt;br /&gt;注意して欲しいのが&lt;br /&gt;&lt;br /&gt;android:layout_centerVertical="true"&lt;br /&gt;&lt;br /&gt;です。&lt;br /&gt;これを&lt;br /&gt;&lt;br /&gt;android:scaleType="center"&lt;br /&gt;&lt;br /&gt;としてしまわないようにしましょう。&lt;br /&gt;こうしてしまうと、&lt;span style="font-weight:bold;"&gt;&lt;span style="color:#FF0000;"&gt;画像は中央に配置されません。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;android:scaleType="center"はあくまで、ImageViewオブジェクト内での配置の位置を決定します。layoutの位置を決定するわけではありません。&lt;br /&gt;一方でandroid:layout_centerVertical="true"はlayoutの中での相対的な位置を示しています。ここでやりたいことはlayoutの中央に配置することなので android:layout_centerVerticalを設定するのです。&lt;br /&gt;慣れないうちは、はまってしまうことが良くあるので注意しましょう。&lt;br /&gt;&lt;br /&gt;さて、中央の説明文の文字が画像とかぶっているのが気になりますね。これも修正しておきましょう。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    android:background="#ffffff"&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/image"&lt;br /&gt;       android:layout_width="100dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:adjustViewBounds="true"  /&amp;gt;&lt;br /&gt;              &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/itme_title"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"  /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/item_explain"&lt;br /&gt;      &lt;span style="color:#FF0000;"&gt;android:layout_width="190dip"&lt;/span&gt;&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"&lt;br /&gt;      android:layout_below="@id/itme_title" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/arrow_image"&lt;br /&gt;       android:layout_width="35dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:layout_alignParentRight="true"&lt;br /&gt;       android:layout_centerVertical="true"&lt;br /&gt;       android:adjustViewBounds="true"&lt;br /&gt;       android:src="@drawable/arrow_button" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;android:layout_width="190dip"に変更しました。&lt;br /&gt;ビルドして、androidエミュレーターを起動します。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZI-uFiqogUM/TS7xyWG_a8I/AAAAAAAAAFg/F04xK6R0DA8/s1600/iphoneUi_tutorial1_img6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://1.bp.blogspot.com/_ZI-uFiqogUM/TS7xyWG_a8I/AAAAAAAAAFg/F04xK6R0DA8/s320/iphoneUi_tutorial1_img6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5561648437079796674" /&gt;&lt;/a&gt;&lt;br /&gt;ポイントはandroid:layout_width="190dip"ですね。この辺の値の感覚は慣れが必要です。&lt;br /&gt;単位はspでもうまく動くのですが、layoutにはdipを使用するのが正式です。&lt;br /&gt;このあたりのことは、次回の文字の調整で説明します。&lt;br /&gt;&lt;br /&gt;というわけでまだまだ続きます。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=487311456X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-536352850058412114?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/536352850058412114/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/536352850058412114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/536352850058412114'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-3.html' title='Androd Tutorial   iphone風の画面作成 その3'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZI-uFiqogUM/TS7ukBW_MzI/AAAAAAAAAE4/n_-5n6K0eLs/s72-c/bg_home.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6901599389840524682</id><published>2011-01-12T02:00:00.005+09:00</published><updated>2011-01-12T02:24:00.622+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androd Tutorial   iphone風の画面作成 その2</title><content type='html'>今回は、リスト画面を作成していきます。&lt;br /&gt;&lt;br /&gt;まず、画面リストに表示するデータのクラスを作成します。 DataObjectクラスという名前で作成します。画面に表示するサンプルデータを5件返すgetDataObjectListメソッドも用意します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;public class DataObject {&lt;br /&gt;&lt;br /&gt;    public String id;&lt;br /&gt;    public String imagePath;&lt;br /&gt;    public String itme_title;&lt;br /&gt;    public String item_explain;&lt;br /&gt;   &lt;br /&gt;    public DataObject() {&lt;br /&gt;        id = null;&lt;br /&gt;        imagePath = null;&lt;br /&gt;        itme_title = null;&lt;br /&gt;        item_explain = null;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    public ArrayList&lt;DataObject&gt; getDataObjectList() {&lt;br /&gt;       &lt;br /&gt;        ArrayList&lt;DataObject&gt; list = new ArrayList&lt;DataObject&gt;();&lt;br /&gt;       &lt;br /&gt;        DataObject obj1 = new DataObject();&lt;br /&gt;        obj1.id = "1";&lt;br /&gt;        obj1.imagePath = "cat.jpg";&lt;br /&gt;        obj1.itme_title = "猫";&lt;br /&gt;        obj1.item_explain = "かわいい猫ですね";&lt;br /&gt;       &lt;br /&gt;        list.add(obj1);&lt;br /&gt;       &lt;br /&gt;        DataObject obj2 = new DataObject();&lt;br /&gt;        obj2.id = "2";&lt;br /&gt;        obj2.imagePath = "hinaningyo.jpg";&lt;br /&gt;        obj2.itme_title = "ひな人形";&lt;br /&gt;        obj2.item_explain = "明かりをつけましょぼんぼりに";&lt;br /&gt;       &lt;br /&gt;        list.add(obj2);&lt;br /&gt;       &lt;br /&gt;        DataObject obj3 = new DataObject();&lt;br /&gt;        obj3.id = "3";&lt;br /&gt;        obj3.imagePath = "kurisumasu.jpg";&lt;br /&gt;        obj3.itme_title = "クリスマス";&lt;br /&gt;        obj3.item_explain = "まっかなお鼻の。トナカイさんは";&lt;br /&gt;       &lt;br /&gt;        list.add(obj3);&lt;br /&gt;       &lt;br /&gt;        DataObject obj4 = new DataObject();&lt;br /&gt;        obj4.id = "4";&lt;br /&gt;        obj4.imagePath = "same.jpg";&lt;br /&gt;        obj4.itme_title = "鮫";&lt;br /&gt;        obj4.item_explain = "海の王者やね";&lt;br /&gt;       &lt;br /&gt;        list.add(obj4);&lt;br /&gt;       &lt;br /&gt;        DataObject obj5 = new DataObject();&lt;br /&gt;        obj5.id = "5";&lt;br /&gt;        obj5.imagePath = "sentouki.jpg";&lt;br /&gt;        obj5.itme_title = "戦闘機";&lt;br /&gt;        obj5.item_explain = "ばんばんばんばん";&lt;br /&gt;       &lt;br /&gt;        list.add(obj5);&lt;br /&gt;       &lt;br /&gt;        return list;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;DataObjectクラスに用意した各フィールドに値を格納してリストとして返しています。内容は、&lt;br /&gt;&lt;br /&gt;id:一意なキー&lt;br /&gt;imagePath:画像のファイル名&lt;br /&gt;itme_title:表示タイトル&lt;br /&gt;item_explain:表示画像・タイトルの説明&lt;br /&gt;&lt;br /&gt;となります。&lt;br /&gt;&lt;br /&gt;表示する画像は、/sdcard直下に配置することにします。&lt;br /&gt;EclipseのDDMでsdcardフォルダにドラッグするか、adbコマンドで格納しましょう。&lt;br /&gt;(sampleコードを打ち込む場合は、適当な画像ファイルを上記のファイル名に変えて格納してみましょう)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TSyPB1T19WI/AAAAAAAAAEo/n8AQjWELHnM/s1600/eclipse_ddm.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TSyPB1T19WI/AAAAAAAAAEo/n8AQjWELHnM/s320/eclipse_ddm.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5560976901548668258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;配置すると上記のようになるはずです。&lt;br /&gt;&lt;br /&gt;この時注意して欲しいのは、eclipseに画像をドラッグすると、日本語のファイル名だと失敗します。 adbコマンドだと日本語でもOKなのですが、基本的にファイル名に日本語を利用するのは避けるべきです。&lt;br /&gt;&lt;br /&gt;次にリスト行のレイアウトファイルを作成します。 home_list.xmlという名前で作成します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ImageView android:id="@+id/image"&lt;br /&gt;       android:layout_width="100dip"&lt;br /&gt;       android:layout_height="wrap_content"&lt;br /&gt;       android:adjustViewBounds="true"  /&amp;gt;&lt;br /&gt;              &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/itme_title"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"  /&amp;gt;&lt;br /&gt;      &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/item_explain"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:layout_toRightOf="@id/image"&lt;br /&gt;      android:layout_below="@id/itme_title" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ここでは、大まかにタグを配置します。細かい調整は後々行っていきます。&lt;br /&gt;一応RelativeLayoutのタグの説明もしておきましょう。&lt;br /&gt;&lt;br /&gt;id/itme_titleで設定しているandroid:layout_toRightOf="@id/image"は imageの右横に配置するという意味です。&lt;br /&gt;id/item_explainで設定しているandroid:layout_toRightOf="@id/image"はimageの右横、 android:layout_below="@id/itme_title"はitme_titleの下。つまり、画像の右横かつ、タイトルの下に配置しています。 あとは、この作成したhome_list.xmlをHomeActivityクラスで呼び出すようにします。 &lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;public class HomeActivity extends ListActivity {&lt;br /&gt;   &lt;br /&gt;    private File sdcardDir = Environment.getExternalStorageDirectory();&lt;br /&gt;   &lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.home);&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    &lt;span style="color:red;"&gt;&lt;br /&gt;    @Override&lt;br /&gt;    public void onStart() {&lt;br /&gt;        super.onStart();&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    @Override&lt;br /&gt;    public void onResume() {&lt;br /&gt;        super.onResume();&lt;br /&gt;        DataObject dataObject = new DataObject();&lt;br /&gt;        ArrayList&lt;DataObject&gt; list = dataObject.getDataObjectList();&lt;br /&gt;        dataObject = null; // release&lt;br /&gt;        setListAdapter(&lt;br /&gt;            new HomeListAdapter(this, R.layout.home_list, list));&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    class HomeListAdapter extends ArrayAdapter&lt;DataObject&gt; {&lt;br /&gt;        private Context m_context;&lt;br /&gt;        private ArrayList&lt;DataObject&gt; list;&lt;br /&gt;        private ExecutorService ex;&lt;br /&gt;       &lt;br /&gt;        public HomeListAdapter(Context context, int textViewResourceId, &lt;br /&gt;                ArrayList&lt;DataObject&gt; objects) {&lt;br /&gt;            &lt;br /&gt;            super(context, textViewResourceId, objects);&lt;br /&gt;            this.m_context = context;&lt;br /&gt;            this.list = objects;&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        @Override&lt;br /&gt;        public int getCount() {&lt;br /&gt;            return this.list.size();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public long getItemId(int arg0) {&lt;br /&gt;            return Long.valueOf(this.list.get(arg0).id);&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        @Override&lt;br /&gt;        public View getView(int position, View convertView, ViewGroup parent) {&lt;br /&gt;            View view = convertView;&lt;br /&gt;            if (view == null) { &lt;br /&gt;                // 受け取ったビューがnullなら新しくビューを生成&lt;br /&gt;                LayoutInflater inflater = getLayoutInflater();&lt;br /&gt;               &lt;br /&gt;                view = inflater.inflate(R.layout.home_list, parent, false);&lt;br /&gt;            }&lt;br /&gt;           &lt;br /&gt;            // 表示すべきデータの取得 &lt;br /&gt;            DataObject item = (DataObject)list.get(position);&lt;br /&gt;           &lt;br /&gt;            ImageView image = (ImageView)view.findViewById(R.id.image);&lt;br /&gt;            Log.d("log", sdcardDir.getPath());&lt;br /&gt;            image.setImageBitmap(BitmapFactory.decodeFile(&lt;br /&gt;                sdcardDir.getPath() + "/" + item.imagePath));&lt;br /&gt;           &lt;br /&gt;            TextView itme_title = (TextView)view.findViewById(R.id.itme_title);&lt;br /&gt;            itme_title.setText(item.itme_title);&lt;br /&gt;           &lt;br /&gt;            TextView item_explain = (TextView)view.findViewById(R.id.item_explain);&lt;br /&gt;            item_explain.setText(item.item_explain);&lt;br /&gt;           &lt;br /&gt;            return view;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;赤字の部分が今回追加したソースコードです。&lt;br /&gt;長いように思うかもしれませんが、やっていることは&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;span style="color:red;"&gt;ただ単にDataObjectクラスからリストデータを取ってきてhome_list.xmlのオブジェクトに設定している&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;だけです。&lt;br /&gt;よく利用するパターンなので、何回か写経して覚えておくと良いと思います。&lt;br /&gt;&lt;br /&gt;では、ここまでやったことが上手くいっているか、確認してみましょう。ビルドして、androidエミュレーターを起動させてみましょう。すると以下のような画面が表示されるはずです。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZI-uFiqogUM/TSyQKF8Hn6I/AAAAAAAAAEw/FE5yBx3EKwA/s1600/iphoneUi_tutorial1_img2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://2.bp.blogspot.com/_ZI-uFiqogUM/TSyQKF8Hn6I/AAAAAAAAAEw/FE5yBx3EKwA/s320/iphoneUi_tutorial1_img2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5560978142963146658" /&gt;&lt;/a&gt;&lt;br /&gt;Oh Yeah Great Job!!&lt;br /&gt;リストデータがきちんと表示されましたね。&lt;br /&gt;&lt;br /&gt;次は画面の細かい調整を行っていきたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4883377075" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;というわけで、また次回。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6901599389840524682?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6901599389840524682/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6901599389840524682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6901599389840524682'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-2.html' title='Androd Tutorial   iphone風の画面作成 その2'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZI-uFiqogUM/TSyPB1T19WI/AAAAAAAAAEo/n8AQjWELHnM/s72-c/eclipse_ddm.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5452415501785299370</id><published>2011-01-11T00:10:00.003+09:00</published><updated>2011-01-11T00:27:53.669+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androd Tutorial   iphone風の画面作成 その1</title><content type='html'>androidの開発をしていて、よく言われるのが、&lt;br /&gt;&lt;br /&gt;「見た目をiphoneっぽくしたい」&lt;br /&gt;&lt;br /&gt;という要求です。&lt;br /&gt;androidなんだから、android推奨のインターフェース (http://dl.google.com/googleio/2010/android-android-ui-design-patterns.pdf) にするべきだと思うのですが、 iphoneのインターフェースが好きなんだという人はかなり多いです。&lt;br /&gt;確かにiphoneのインターフェースは良い出来ですから、気持ちはわからなくもないです。&lt;br /&gt;&lt;br /&gt;というわけで、iphoneっぽい画面の作り方を記載しておこうと思います。&lt;br /&gt;これは本当に要求度が高いので、自分でも再利用できるように詳しい記述にしていこうと思っています。多分、結構長くなると思いますが、おつきあいをよろしくお願いします。&lt;br /&gt;&lt;br /&gt;では、さっそくはじめましょう。&lt;br /&gt;&lt;br /&gt;まずは、プロジェクトを作成しましょう。 androidのversionは1.6以上なら大丈夫ですが、もう2.1以上でもいいと思います。&lt;br /&gt;&lt;br /&gt;立ち上げ時に起動する画面を作成します。HomeActivityクラスという名前で作成します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;public class HomeActivity extends ListActivity {&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState) {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;        setContentView(R.layout.home);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ListActivityクラスを継承していることに注意してください。&lt;br /&gt;&lt;br /&gt;次にlayoutのxmlファイルをhome.xmlとして作成します。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;br /&gt;    android:layout_width="fill_parent"&lt;br /&gt;    android:layout_height="fill_parent"&lt;br /&gt;    &amp;gt;&lt;br /&gt;   &lt;br /&gt;    &amp;lt;ListView &lt;br /&gt;        android:id="@+id/android:list"&lt;br /&gt;        android:layout_height="fill_parent"&lt;br /&gt;        android:layout_width="fill_parent" /&amp;gt;  &lt;br /&gt;       &lt;br /&gt;    &amp;lt;TextView&lt;br /&gt;      android:id="@+id/android:empty"&lt;br /&gt;      android:layout_width="wrap_content"&lt;br /&gt;      android:layout_height="wrap_content"&lt;br /&gt;      android:text="@string/nodata" /&amp;gt;&lt;br /&gt;      &lt;br /&gt;&amp;lt;/RelativeLayout&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;layoutのxmlファイルでUIを作成する場合、なるべくRelativeLayoutを使うようにしましょう。後々の修正が楽になります。 javaでのハードコードとか問題外なのでやめましょうね。後で改修する人が泣きます…。&lt;br /&gt;&lt;br /&gt;ListViewの下に記述したTextViewタグは、ListViewにデータが存在しない場合に表示されるテキストメッセージです。&lt;br /&gt;&lt;br /&gt;&lt;span style="color:red;"&gt;android:id="@+id/android:empty"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;と指定するのが決まり事です。&lt;br /&gt;表示されるメッセージは、android:text="@string/nodata"と記述したので、 strings.xmlに記載する「nodata」属性が反映されます。 では、strings.xmlファイルを以下のように書きかえましょう。&lt;br /&gt;&lt;pre style="background:#FFCCFF;"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;resources&amp;gt;&lt;br /&gt;    &amp;lt;string name="app_name"&amp;gt;iphone風インターフェース&amp;lt;/string&amp;gt;&lt;br /&gt;    &lt;span class="changePoint"&gt;&amp;lt;string name="nodata"&amp;gt;データが存在しません&amp;lt;/string&amp;gt;&lt;/span&gt;&lt;br /&gt;&amp;lt;/resources&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;上記のようにすることでデータが存在しない場合に、strings.xmlに記載した「nodata」属性の文字が表示されるようになります。&lt;br /&gt;&lt;br /&gt;では、ここまでやったことが上手くいっているか、確認してみましょう。ビルドして、androidエミュレーターを起動させてみましょう。すると以下のような画面が表示されるはずです。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TSsj7mpcSXI/AAAAAAAAAEY/RSXxMOklGaw/s1600/iphoneUi_tutorial1_img1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 214px; height: 320px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TSsj7mpcSXI/AAAAAAAAAEY/RSXxMOklGaw/s320/iphoneUi_tutorial1_img1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5560577671812630898" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oh Yeah Great!!&lt;br /&gt;思った通りの動きをしましたね。&lt;br /&gt;&lt;br /&gt;さてさて次回は、リストの中身を作成していきましょう。&lt;br /&gt;まだまだ続きます。おつきあいよろしくお願いします。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4844329405" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5452415501785299370?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5452415501785299370/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5452415501785299370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5452415501785299370'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/androd-tutorial-iphone-1.html' title='Androd Tutorial   iphone風の画面作成 その1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZI-uFiqogUM/TSsj7mpcSXI/AAAAAAAAAEY/RSXxMOklGaw/s72-c/iphoneUi_tutorial1_img1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1970921678197641342</id><published>2011-01-07T23:42:00.003+09:00</published><updated>2011-01-08T00:38:35.662+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>phoneGap(HTML + CSS + JavaScript)でandroidアプリを作成してみた</title><content type='html'>phoneGap(HTML + CSS + JavaScript)でandroidアプリを作成してみたのでメモを残しときます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;いきなり結論&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;現状のversion(0.93)では、使用は控えましょう。&lt;br /&gt;&lt;br /&gt;以下、手順と記録です。&lt;br /&gt;&lt;br /&gt;使用したphoneGapのversionは0.9.3。&lt;br /&gt;ダウンロードは以下のサイトから行えます。&lt;br /&gt;http://www.phonegap.com/download&lt;br /&gt;&lt;br /&gt;まずはお決まりのHello worldを作成してみる。&lt;br /&gt;&lt;br /&gt;動作に必要なのは下記の二つのファイルらしい。&lt;br /&gt;&lt;br /&gt;phonegap-0.9.3.jar&lt;br /&gt;phonegap-0.9.3.js&lt;br /&gt;&lt;br /&gt;とりあえず、普段どおりにeclipseからandroidプロジェクトを動作させる。&lt;br /&gt;androidのversionは1.6を使用する&lt;br /&gt;&lt;br /&gt;プロジェクトのrootディレクトリに以下のフォルダを作成してファイルを格納する&lt;br /&gt;&lt;br /&gt;/libs/phonegap-0.9.3.jar&lt;br /&gt;/assets/www/phonegap-0.9.3.js&lt;br /&gt;&lt;br /&gt;wwwフォルダにindex.htmlを作成&lt;br /&gt;sampleを見る限り、html5で記述するのがよさそう。&lt;br /&gt;ファイルエンコードはUTF-8に設定&lt;br /&gt;&lt;br /&gt;index.htmlの内容は&lt;br /&gt;http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart&lt;br /&gt;のCreating A New Projectのindex.htmlの部分を丸々コピー＆ペースト。&lt;br /&gt;&lt;br /&gt;続いて、Activityクラスを作成。&lt;br /&gt;チュートリアルだとjarのパスを通す旨が記述されていないが、きっちりと通す必要あり。&lt;br /&gt;通常はActivtyクラスを継承するのだが、DroidGapクラスを継承する。&lt;br /&gt;&lt;br /&gt;私の場合、activityクラスを作る場合は「～Activity」としているのだが、「～DroidGap」とするべきなのだろうか…。&lt;br /&gt;とりあえず無視。&lt;br /&gt;setContentViewでなく、loadUrlを利用する。&lt;br /&gt;urlにindex.htmlを指定する。&lt;br /&gt;&lt;br /&gt;最後にmanifest.xmlファイルを記述。&lt;br /&gt;http://wiki.phonegap.com/w/page/30862722/phonegap-android-eclipse-quickstart&lt;br /&gt;のsupports-screensから下のtagを全てコピーして貼り付ける。&lt;br /&gt;&lt;br /&gt;さらにandroid:configChanges="orientation|keyboardHidden"を追加。&lt;br /&gt;これは指定したイベントが発生した場合に、index.htmlがリロードされないように必要なようである。&lt;br /&gt;縦横対応できないのかな？？？&lt;br /&gt;よくわからないので、後で要調査。&lt;br /&gt;&lt;br /&gt;さて、あとはビルドしてエミュレーターでアプリを実行。仕様osはandroid2.3を利用する。&lt;br /&gt;画像はキャプチャしないけど、うまく動きました。&lt;br /&gt;&lt;br /&gt;続いて、apkファイルを作成。&lt;br /&gt;これもいつも通り作成してみる。&lt;br /&gt;と思ったら既にフォルダに出来てた…。自動生成か？keystoreファイルはいらないのか？&lt;br /&gt;これも要調査。&lt;br /&gt;&lt;br /&gt;とりあえずapkをインストール。&lt;br /&gt;起動成功。若干もっさりな気がするが気のせいか？いや、気のせいじゃないな。&lt;br /&gt;&lt;br /&gt;さらに画像などを組み込んで色々といじってみる。&lt;br /&gt;&lt;br /&gt;…&lt;br /&gt;…&lt;br /&gt;…&lt;br /&gt;…&lt;br /&gt;&lt;br /&gt;微妙…。というかandroidでは現状のバージョンでは使い物にならない。&lt;br /&gt;機種ごとに解像度が異なるandroidで、画像サイズの自動調整を行ってくれないのでは利用価値がない。&lt;br /&gt;iphoneなら3と4でhtmlファイルを切り替えて画像対応、もしくはcanvasで画像サイズを切り替えるという手段が使えるので使えなくもないと思う。でも、objective-Cを使ったプログラミングのほうが安全だし、結局は楽。&lt;br /&gt;私がジョブスでもこんなツールで作成したアプリは認めませんね。フリーソフトなら別ですけど…。&lt;br /&gt;批判してごめんよ、ジョブス。あんたが正しい。&lt;br /&gt;&lt;br /&gt;つまりのところ、javaScriptで満足のいくアプリが作れるのはまだまだ先のことになりそうです。&lt;br /&gt;でも、待っているよりjavaとobjective-Cを覚えたほうが絶対早いです。&lt;br /&gt;みんなnative言語やろうぜ!!&lt;br /&gt;&lt;br /&gt;&lt;table border="0"&gt;&lt;br /&gt;  &lt;tbody&gt;&lt;br /&gt;    &lt;tr&gt;&lt;br /&gt;      &lt;td&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4883377075" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;br /&gt;      &lt;td&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4797358106" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;/td&gt;&lt;br /&gt;    &lt;/tr&gt;&lt;br /&gt;  &lt;/tbody&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;そんな感じです。&lt;br /&gt;&lt;br /&gt;でわん&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1970921678197641342?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1970921678197641342/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/phonegaphtml-css-javascriptandroid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1970921678197641342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1970921678197641342'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/phonegaphtml-css-javascriptandroid.html' title='phoneGap(HTML + CSS + JavaScript)でandroidアプリを作成してみた'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3028852721611614986</id><published>2011-01-05T22:44:00.003+09:00</published><updated>2011-01-05T22:49:11.055+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android Live Wallpaper</title><content type='html'>仕事でLive Wallpaperの調査と勉強をしたのでメモに残します。&lt;br /&gt;これは想像以上に面白いことができそうな機能です。&lt;br /&gt;オリジナルアプリも作ってみたいと思いました。&lt;br /&gt;&lt;br /&gt;・android2.1以上で実装する必要がある&lt;br /&gt;・xmlは結構煩雑&lt;br /&gt;サービスクラスを作成し、パーミッション「android:permission="android.permission.BIND_WALLPAPER"」の設定が必要&lt;br /&gt;Serviceのintent-filterに&lt;action android:name="android.service.wallpaper.WallpaperService"&lt;br /&gt;/&gt;」を設定する必要がある&lt;br /&gt;meta-dataでLiveWallpaperのリソースを定義。これはres/xml/に作成。wallpaper.xmlとするのが一般的で良いと思う。&lt;br /&gt;&lt;br /&gt;ServiceクラスはWallpaperServiceクラスを継承する。&lt;br /&gt;&lt;br /&gt;・壁紙の解像度の取得&lt;br /&gt;width:getWallpaperDesiredMinimumWidth()&lt;br /&gt;height:getWallpaperDesiredMinimumHeight()&lt;br /&gt;&lt;br /&gt;動きの処理はEngineを継承したクラスを利用する。&lt;br /&gt;EngineはSurfaceViewの使い方とほぼ同じ。androidでゲームプログラミングを組んだことがある人だと、若干とっつき易い。&lt;br /&gt;&lt;br /&gt;・各メソッドの動き&lt;br /&gt;onOffsetsChangedが&lt;br /&gt;スライドさせたときに呼びだされている模様&lt;br /&gt;http://d.hatena.ne.jp/hyoromo/20100513/1273768279&lt;br /&gt;上記のサイトで記述されているHomeScreenは違うのではないか？&lt;br /&gt;&lt;br /&gt;取得できるoffsetはどれだけ移動したかの値。距離の差。あんま使わなさそう。&lt;br /&gt;&lt;br /&gt;xPixelsでは、絶対値の位置が取得できるようである。&lt;br /&gt;&lt;br /&gt;値はandroidOS2.3で確認。左端で0、右端で-320。&lt;br /&gt;HomeScreenが右に一つ切り替わると、-80xPixels移動する(加算される)。&lt;br /&gt;&lt;br /&gt;なので、0 &gt; 変数 &gt; -80&lt;br /&gt;&lt;br /&gt;のような感じで現在のhomeScreenの場所を特定できると思われる。&lt;br /&gt;コーディングしてみたら、やはりうまくいった。&lt;br /&gt;ソースはもっと深く理解して汎用性を持たせてからUPしよう…。汚すぎ。&lt;br /&gt;&lt;br /&gt;homeScreenが4の場合は、&lt;br /&gt;HVGAの場合、width(480 × 4)のサイズの画像を用意するといいのだろう。&lt;br /&gt;アプリのようにlayoutでごまかせないので、端末ごとに画像を用意する必要がある。&lt;br /&gt;&lt;br /&gt;onOffsetsChangedメソッドで取得された値に応じて、canvasに設定するx(left)値の値を計算する。そして、canvasでxの値を設定してやるとうまく動く。あとはアニメーションを用意すればOKっぽい。&lt;br /&gt;&lt;br /&gt;ただし、ずっとスレッドを走らせておくのは電池消費的によくない。。&lt;br /&gt;なので、タッチで動かしたときだけ動作させるのが良いと思われる。&lt;br /&gt;&lt;br /&gt;色々なLive Wallpaperアプリを見てみたけど、コカコーラのLiveWallpaperが現在の完成度では一番かな。&lt;br /&gt;　興味ある人は、「cocacola」で検索してダウンロードしてみてはいかがでしょうか。かっこいいですよ。&lt;br /&gt;　OpenGLを使ってグリグリ動かしているんだろうなあ。3Dプログラミングはわからんから、勉強しないといけない。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;というわけでメモ終了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3028852721611614986?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3028852721611614986/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-live-wallpaper.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3028852721611614986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3028852721611614986'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/android-live-wallpaper.html' title='Android Live Wallpaper'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2146599720205652380</id><published>2011-01-04T20:37:00.002+09:00</published><updated>2011-01-04T20:42:00.404+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>英語が必要な時代へ</title><content type='html'>半年ほど前、楽天やファーストリテイリングが社内公用語を英語にするというニュースを聞いて、内心アホだと思いました。&lt;br /&gt;　しかし同時に、その頃はスマートフォンアプリの開発を本格的に始めていたので、英語の必要性を強く感じてもいました。&lt;br /&gt;なぜなら、スマートフォン開発の情報は、WEB上では英語が中心だからです。&lt;br /&gt;&lt;br /&gt;スタンフォード大のiPhoneプログラミング講座やandroidのgoogleの講座も全て英語です。英語ができると、これらの授業をituneやyoutubeで無料で利用できるのです。これを使わない手はありません。&lt;br /&gt;&lt;br /&gt;今後、こういったサービスはどんどん展開されるでしょう。そして、そのサービスが提供される言語は、世界共通語である英語です。英語がわからない…ではどうしようもなくなるのは時間の問題です。&lt;br /&gt;&lt;br /&gt;というわけで、英語の勉強にもう少し時間を割いていこうと思います。&lt;br /&gt;とりあえず、lang-8を始めてみました。かなり良いサービスだと思いました。できる限り毎日続けていきたいと思います。&lt;br /&gt;こういった良質のサービスが無料で利用できる時代。&lt;br /&gt;だからこそ、今後はより高度なスキルが求められていくのでしょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2146599720205652380?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2146599720205652380/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post_04.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2146599720205652380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2146599720205652380'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post_04.html' title='英語が必要な時代へ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8215277406470584991</id><published>2011-01-04T20:31:00.002+09:00</published><updated>2011-01-04T20:36:49.973+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>スマートフォンアプリ開発　個人アプリと企業アプリ</title><content type='html'>スマートフォンの開発を手がける企業が多くなってきました。&lt;br /&gt;私も今は会社でandroidアプリの開発に携わっています。&lt;br /&gt;そして思うことは、個人で開発するアプリが、企業で開発するアプリに勝つにはアイディアで勝負するしかないということです。&lt;br /&gt;&lt;br /&gt;企業の強みは、それぞれの得意分野で分担作業ができることです。&lt;br /&gt;グラフィックを作成するデザイナー、アプリを作成するプログラマー、コンテンツを作成するディレクター。各々の得意とする分野で一つのアプリの作成に注力できます。&lt;br /&gt;&lt;br /&gt;一方、個人のアプリ作成は分担作業ができません。&lt;br /&gt;グラフィック、プログラム、コンテンツを自分ひとりで作成しないといけません。なので、企業がリリースしているのと同じようなアプリを作成したのでは、勝負はみえています。&lt;br /&gt;なので、個性・アイディアで勝負することが必要となります。&lt;br /&gt;&lt;br /&gt;スマートフォンアプリ開発の良いところは、必ずしも多機能で素晴らしい製品が売れるわけではないということです。むしろ、多機能なアプリは敬遠され、どちらかというと、シンプルなアプリがよく利用され、ダウンロードされます。&lt;br /&gt;&lt;br /&gt;だから個人でも十分に勝負ができます。むしろ、継続的に利益を出し続けないといけない企業には、実験的なアプリは作りづらいはずです。&lt;br /&gt;&lt;br /&gt;これからはソーシャル化が進み、個人のブランドが特に重要になるでしょう。&lt;br /&gt;アプリを作成することは、個人ブランドを大きく高めてくれるはずです。&lt;br /&gt;まずは、利益を考えないで、個人で作成してみることからはじめてみましょう。&lt;br /&gt;そのうち、色々なことが理解でき、個人におけるスマートフォンの大きな可能性がわかってくると思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8215277406470584991?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8215277406470584991/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8215277406470584991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8215277406470584991'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2011/01/blog-post.html' title='スマートフォンアプリ開発　個人アプリと企業アプリ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8424245060297852825</id><published>2010-12-17T00:45:00.002+09:00</published><updated>2010-12-17T00:49:17.861+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Android開発における端末別の画面表示対応</title><content type='html'>androidの開発で苦労するのが端末別の対応です。&lt;br /&gt;現在のアプリの対応端末の基本はXperia、Desire、Galaxyでしょう。&lt;br /&gt;しかし、これにIS03が加わると大変です。&lt;br /&gt;&lt;br /&gt;なぜなら、Xperia、Desire、Galaxyの画面SkinはWVGAなのですが、IS03はHVGAなのです。&lt;br /&gt;IS03はHVGAなので、現状の主力端末の表示方法とは相容れない「ガラパゴススマフォ」なのです。&lt;br /&gt;&lt;br /&gt;個人アプリならScrollView、RelativerLayout、dpi、spの組み合わせで、画面layoutを無視してなんとでも対応できます。&lt;br /&gt;しかし、仕事となるとスクロールを使えない場合があります。ScrollViewが使えず、画面レイアウトを重視されるともう大変です。個人的にはIS03は無視でいい。と思うのですが、日本の仕事場はそこまで割り切った切捨てができない場合が多いので、にっちもさっちもいかなくなる。そして、一画面にデータを収めるのに四苦八苦しないといけないわけです。&lt;br /&gt;&lt;br /&gt;これはandroid端末の最大の欠点です。&lt;br /&gt;将来、androidがiphoneに負けるとしたらこれが理由になるでしょう。&lt;br /&gt;つまり、「バラバラな端末仕様のせいで、良質のアプリが全ての端末に提供できない」ということです。&lt;br /&gt;　海外では切捨てをあまり気にしなさそうなので、androidは間違いなく一番手で普及するでしょうが、日本で切捨ては無理でしょう。&lt;br /&gt;というわけで、とりあえずの私が緊急に行った対応方法をメモに残しときます。&lt;br /&gt;&lt;br /&gt;今回のケースはxperiaの解像度に合わせて作成した画面WVGA854（480 x 854）を他の主力端末に合わせるケースです。&lt;br /&gt;WVGA800でも表示は特に問題はなかったのですが、ついでに対応しました。&lt;br /&gt;&lt;br /&gt;xperia以外の対応端末は&lt;br /&gt;&lt;br /&gt;WVGA800&lt;br /&gt;（480 x 800）の&lt;br /&gt;Desire（HTC）&lt;br /&gt;Galaxy S&lt;br /&gt;&lt;br /&gt;と&lt;br /&gt;&lt;br /&gt;HVGAの&lt;br /&gt;（640 x 960）&lt;br /&gt;HVGA&lt;br /&gt;IS03&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;私の場合、layoutフォルダに画面レイアウトxmlをひとまとめにしていたので、これを分割しました。&lt;br /&gt;resの配下に「layout-854x480「「layout-800x480」フォルダを作成します。&lt;br /&gt;&lt;br /&gt;つまりは、&lt;br /&gt;res - layout&lt;br /&gt;&lt;br /&gt;から&lt;br /&gt;&lt;br /&gt;res - layout-854x480&lt;br /&gt;    - layout-800x480&lt;br /&gt;    - layout&lt;br /&gt;&lt;br /&gt;といったフォルダ構成に変更します。&lt;br /&gt;&lt;br /&gt;フォルダ構成変更後、既存のlayoutフォルダの中身を&lt;br /&gt;&lt;br /&gt;layout-854x480,layout-800x480&lt;br /&gt;に格納します。&lt;br /&gt;&lt;br /&gt;これでxperiaのレイアウトは&lt;br /&gt;layout-854x480フォルダ内のxmlが適用されます。&lt;br /&gt;Desire（HTC）とGalaxy Sのレイアウトは&lt;br /&gt;layout-800x480フォルダ内のxmlが適用されます。&lt;br /&gt;&lt;br /&gt;そして、IS03はlayoutフォルダ内のxmlが適用されます。&lt;br /&gt;あとは、それぞれの端末に合わせた調整をすればOKです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;http://developer.android.com/guide/practices/screens_support.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8424245060297852825?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8424245060297852825/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/12/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8424245060297852825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8424245060297852825'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/12/android.html' title='Android開発における端末別の画面表示対応'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5748479810593004155</id><published>2010-12-14T23:20:00.002+09:00</published><updated>2010-12-14T23:32:29.452+09:00</updated><title type='text'>androidでWEB接続 その1</title><content type='html'>最近は、androidを使ったWEB周りのコーディングを行っていました。&lt;br /&gt;WEB周りは今後も色々とコーディングする機会が多そうなので、詳細なメモを残しときます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;・例1&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;WebViewクラスを利用して、yahooやgoogleなどのサイトに接続する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;layoutのxmlにWebViewタグを記述する&lt;br /&gt;&lt;br /&gt;    &amp;lt;WebView&lt;br /&gt;     android:id="@+id/webview"&lt;br /&gt;     android:layout_width="fill_parent"&lt;br /&gt;     android:layout_height="fill_parent" /&amp;gt;&lt;br /&gt;&lt;br /&gt;activityクラスで呼び出す&lt;br /&gt;&lt;br /&gt;private final static String YAHOO_URL = "http://www.yahoo.co.jp/";&lt;br /&gt;private WebView webview;&lt;br /&gt;&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;setContentView(R.layout.test);&lt;br /&gt;&lt;br /&gt;this.webview = (WebView) findViewById(R.id.webview);&lt;br /&gt;this.webview.loadUrl(YAHOO_URL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;manifest.xmlにインターネット接続の許可を記述&lt;br /&gt;&lt;br /&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;&lt;br /&gt;&lt;br /&gt;あとはapkファイルを作成して、アプリを立ち上げればyahooに繋がります。&lt;br /&gt;…とはいえ、このまま使うことはあまりないでしょう。&lt;br /&gt;「構築したサイトにBasic認証で接続」とかが一般的でしょう。&lt;br /&gt;というわけで、WebViewを利用して、Basic認証を行ってみます。&lt;br /&gt;&lt;br /&gt;・例2&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;WebViewクラスを利用して、Basic認証で接続する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basic認証を行う場合は、activityクラスを以下のように変更します。&lt;br /&gt;&lt;br /&gt;private final static String TEST_URL = "http://www.test.com/";&lt;br /&gt;&lt;br /&gt;public static final String USERNAME = "hoge";&lt;br /&gt;&lt;br /&gt;public static final String PASSWORD = "hogehoge";&lt;br /&gt;&lt;br /&gt;public static final String HOST = "www.test.com";&lt;br /&gt;&lt;br /&gt;public static final String REALM = "Access Directory";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;private WebView webview;&lt;br /&gt;&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;this.webview = (WebView) findViewById(R.id.webview);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setJavaScriptEnabled(true);&lt;br /&gt;WebViewDatabase.getInstance(this).clearHttpAuthUsernamePassword();&lt;br /&gt;this.webview.setHttpAuthUsernamePassword(HOST, REALM, USERNAME, PASSWORD);&lt;br /&gt;this.webview.setWebViewClient(new WebViewClient(){&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;public void onReceivedHttpAuthRequest (WebView view,&lt;br /&gt;HttpAuthHandler handler, String host, String realm){&lt;br /&gt;String[] up = view.getHttpAuthUsernamePassword(host, realm);&lt;br /&gt;if( up != null &amp;&amp; up.length == 2 ) {&lt;br /&gt;handler.proceed(up[0], up[1]);&lt;br /&gt;} else{&lt;br /&gt;Log.d("LOG_TAG","Could not find user/pass for domain :"+&lt;br /&gt;host+" with realm = "+realm);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;this.webview.loadUrl(TEST_URL);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TEST_URLをhttp://username:password@www.test.com/&lt;br /&gt;と変更しても接続できないので注意してください。&lt;br /&gt;&lt;br /&gt;又、Realmまできっちりと設定してください。でないと、動作しません。&lt;br /&gt;あとは、HOSTとURLの指定を間違えないようにしてください。&lt;br /&gt;&lt;br /&gt;これでapkファイルを作成して、アプリを立ち上げればbasic認証が行われ、TEST_URLに繋がります。&lt;br /&gt;ただ、basic認証は接続に結構時間がかかるので、プログレスバーを利用したほうがいいでしょう。&lt;br /&gt;&lt;br /&gt;なので、&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;WebViewクラスを利用して、Basic認証で接続&lt;/span&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;接続開始時にプログレスバーを表示&lt;/span&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;接続終了時にプログレスバーを非表示にして、toastメッセージを出力&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;とします。&lt;br /&gt;以下がそのコードです&lt;br /&gt;&lt;br /&gt;private final static String TEST_URL = "http://www.test.com/";&lt;br /&gt;&lt;br /&gt;public static final String USERNAME = "hoge";&lt;br /&gt;&lt;br /&gt;public static final String PASSWORD = "hogehoge";&lt;br /&gt;&lt;br /&gt;public static final String HOST = "www.test.com";&lt;br /&gt;&lt;br /&gt;public static final String REALM = "Access Directory";&lt;br /&gt;&lt;br /&gt;private ProgressDialog mProgressDialog;&lt;br /&gt;&lt;br /&gt;private WebView webview;&lt;br /&gt;&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;this.webview = (WebView) findViewById(R.id.webview);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setJavaScriptEnabled(true);&lt;br /&gt;WebViewDatabase.getInstance(this).clearHttpAuthUsernamePassword();&lt;br /&gt;this.webview.setHttpAuthUsernamePassword(HOST, REALM, USERNAME, PASSWORD);&lt;br /&gt;this.webview.setWebViewClient(new WebViewClient(){&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;public void onReceivedHttpAuthRequest (WebView view,&lt;br /&gt;HttpAuthHandler handler, String host, String realm){&lt;br /&gt;String[] up = view.getHttpAuthUsernamePassword(host, realm);&lt;br /&gt;if( up != null &amp;&amp; up.length == 2 ) {&lt;br /&gt;handler.proceed(up[0], up[1]);&lt;br /&gt;} else{&lt;br /&gt;Log.d("LOG_TAG","Could not find user/pass for domain :"+&lt;br /&gt;host+" with realm = "+realm);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;        public void onPageStarted(WebView view, String url, Bitmap favicon) {&lt;br /&gt;        //ダイアログを作成して表示&lt;br /&gt;        mProgressDialog = new ProgressDialog(view.getContext());&lt;br /&gt;    mProgressDialog.setTitle("ネットワーク接続");&lt;br /&gt;    mProgressDialog.setMessage("接続中です");&lt;br /&gt;    mProgressDialog.show();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onPageFinished(WebView wv, String url){&lt;br /&gt;&lt;br /&gt;        if (mProgressDialog != null &amp;&amp; mProgressDialog.isShowing()) {&lt;br /&gt;        mProgressDialog.dismiss();&lt;br /&gt;        mProgressDialog = null;&lt;br /&gt;        Toast.makeText(wv.getContext(), "ネットワーク接続に成功しました", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;        }&lt;br /&gt;});&lt;br /&gt;this.webview.loadUrl(TEST_URL);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;onPageStartedがネットワーク接続開始時に呼び出され、onPageFinishedが接続終了時に呼ばれます。&lt;br /&gt;&lt;br /&gt;最後にクッキーも扱えるように処理を追加します。&lt;br /&gt;&lt;br /&gt;private final static String TEST_URL = "http://www.test.com/";&lt;br /&gt;&lt;br /&gt;public static final String USERNAME = "hoge";&lt;br /&gt;&lt;br /&gt;public static final String PASSWORD = "hogehoge";&lt;br /&gt;&lt;br /&gt;public static final String HOST = "www.test.com";&lt;br /&gt;&lt;br /&gt;public static final String REALM = "Access Directory";&lt;br /&gt;&lt;br /&gt;private ProgressDialog mProgressDialog;&lt;br /&gt;&lt;br /&gt;private WebView webview;&lt;br /&gt;&lt;br /&gt;    /** Called when the activity is first created. */&lt;br /&gt;    @Override&lt;br /&gt;    public void onCreate(Bundle savedInstanceState)&lt;br /&gt;    {&lt;br /&gt;        super.onCreate(savedInstanceState);&lt;br /&gt;requestWindowFeature(Window.FEATURE_NO_TITLE);&lt;br /&gt;setContentView(R.layout.main);&lt;br /&gt;&lt;br /&gt;this.webview = (WebView) findViewById(R.id.webview);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);&lt;br /&gt;&lt;br /&gt;this.webview.getSettings().setJavaScriptEnabled(true);&lt;br /&gt;WebViewDatabase.getInstance(this).clearHttpAuthUsernamePassword();&lt;br /&gt;this.webview.setHttpAuthUsernamePassword(HOST, REALM, USERNAME, PASSWORD);&lt;br /&gt;this.webview.setWebViewClient(new WebViewClient(){&lt;br /&gt;&lt;br /&gt;String loginCookie = "";&lt;br /&gt;        @Override&lt;br /&gt;        public void onLoadResource(WebView wv,&lt;br /&gt;        String url){&lt;br /&gt;        CookieManager cMgr = CookieManager.getInstance();&lt;br /&gt;        loginCookie = cMgr.getCookie(url);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;public void onReceivedHttpAuthRequest (WebView view,&lt;br /&gt;HttpAuthHandler handler, String host, String realm){&lt;br /&gt;String[] up = view.getHttpAuthUsernamePassword(host, realm);&lt;br /&gt;if( up != null &amp;&amp; up.length == 2 ) {&lt;br /&gt;handler.proceed(up[0], up[1]);&lt;br /&gt;} else{&lt;br /&gt;Log.d("LOG_TAG","Could not find user/pass for domain :"+&lt;br /&gt;host+" with realm = "+realm);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;        public void onPageStarted(WebView view, String url, Bitmap favicon) {&lt;br /&gt;        //ダイアログを作成して表示&lt;br /&gt;        mProgressDialog = new ProgressDialog(view.getContext());&lt;br /&gt;    mProgressDialog.setTitle("ネットワーク接続");&lt;br /&gt;    mProgressDialog.setMessage("接続中です");&lt;br /&gt;    mProgressDialog.show();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        @Override&lt;br /&gt;        public void onPageFinished(WebView wv, String url){&lt;br /&gt;&lt;br /&gt;        CookieManager cMgr = CookieManager.getInstance();&lt;br /&gt;        cMgr.setCookie(url, loginCookie);&lt;br /&gt;&lt;br /&gt;        if (mProgressDialog.isShowing()) {&lt;br /&gt;        mProgressDialog.dismiss();&lt;br /&gt;        mProgressDialog = null;&lt;br /&gt;        Toast.makeText(wv.getContext(), "ネットワーク接続に成功しました", Toast.LENGTH_SHORT).show();&lt;br /&gt;        }&lt;br /&gt;        }&lt;br /&gt;});&lt;br /&gt;this.webview.loadUrl(TEST_URL);&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;以上です。&lt;br /&gt;次はURLConnectionクラスを使ったネットワークのつなぎ方を記述する予定です。&lt;br /&gt;&lt;br /&gt;それでわ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;参考サイト&lt;br /&gt;http://developer.android.com/reference/android/webkit/WebView.html#setHttpAuthUsernamePassword%28java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String%29&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5748479810593004155?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5748479810593004155/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/12/android%E3%81%A7web%E6%8E%A5%E7%B6%9A-%E3%81%9D%E3%81%AE1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5748479810593004155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5748479810593004155'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/12/android%E3%81%A7web%E6%8E%A5%E7%B6%9A-%E3%81%9D%E3%81%AE1.html' title='androidでWEB接続 その1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-1277943468104405087</id><published>2010-12-10T19:53:00.001+09:00</published><updated>2010-12-10T19:55:02.687+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidのsqliteを日本語で使う</title><content type='html'>androidのsqliteの日本語処理ではまりました。&lt;br /&gt;はまったのは以下のケース&lt;br /&gt;&lt;br /&gt;・sqliteのsqlファイルを用意。sqlファイルの文字エンコーディングはUTF-8&lt;br /&gt;・テーブルのtext型に文字列を格納。改行文字を\nとして格納&lt;br /&gt;・android側でDBからデータを取得。文字をTextViewに設定すると\nがそのままviewに出力されていまう。&lt;br /&gt;・\nを置換する。しかし、\nが置換されない。&lt;br /&gt;&lt;br /&gt;というケースで半日はまった。&lt;br /&gt;これでもjavaプログラマーなのかと自己嫌悪。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;原因&lt;/span&gt;&lt;br /&gt;・置換改行文字をUTF-8に変換していなかった。&lt;br /&gt;&lt;br /&gt;最初は&lt;br /&gt;&lt;br /&gt;String hoge = getDB();&lt;br /&gt;hoge.setText(hoge.replaceAll("\\\\n", "\n"));&lt;br /&gt;&lt;br /&gt;とやっていた。&lt;br /&gt;&lt;br /&gt;だが、これはNG。すっかり忘れていたが、javaの文字列内部コードはISO-8859-1なのである。androidとて例外ではない。&lt;br /&gt;脳がフレームワーク脳になっている。&lt;br /&gt;&lt;br /&gt;ここは、パターンマッチに使う改行文字をUTF-8のコードに変換してやる必要がある。&lt;br /&gt;以下、解決方法&lt;br /&gt;&lt;br /&gt;byte[] bytes = "\\\\n".getBytes("ISO-8859-1");&lt;br /&gt;String new_line = new String(bytes, "UTF-8");&lt;br /&gt;&lt;br /&gt;これでUTF-8の改行パターンマッチが取得できる。&lt;br /&gt;あとは普通にreplaceAllを使う&lt;br /&gt;&lt;br /&gt;hoge.setText(hoge.replaceAll(new_line, "\n"));&lt;br /&gt;&lt;br /&gt;これで思い通りの結果が出力される。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ps&lt;br /&gt;スマートフォンアプリの開発では英語力があったほうが良い。&lt;br /&gt;これはiphoneもandroidでも共通だ。&lt;br /&gt;ドキュメントや講義のyoutubeが英語が中心だからだ。&lt;br /&gt;仕方なしに空き時間には英語の勉強もちょこちょこやっているのだが、英語ができるようになればなるほど日本語が好きになるのが不思議だ。&lt;br /&gt;英語が世界共通語だから英語メインになっていくのは仕方ないが、英語に触れれば触れるほど、&lt;br /&gt;日本人ということを強く意識するようになるは皮肉なものである。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-1277943468104405087?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/1277943468104405087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/12/androidsqlite.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1277943468104405087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/1277943468104405087'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/12/androidsqlite.html' title='androidのsqliteを日本語で使う'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4485235474001896915</id><published>2010-12-10T19:47:00.001+09:00</published><updated>2010-12-10T19:49:56.003+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidのlogcatで日本語を使う</title><content type='html'>世阿弥も愛した素敵な日本語。しかし、androidは日本語をあまり愛していないようだ。なので、ときどき文字コードで困ったことが起こる。&lt;br /&gt;以下、解決方法をメモ。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;Logで日本語を出力&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;eclipseでlogcatを見ると、日本語が文字化けする。なんという非国民。愛国者になるには、コマンドプロンプトを利用する&lt;br /&gt;&lt;br /&gt;windowsXPの場合の手順&lt;br /&gt;&lt;br /&gt;・コマンドプロンプトを立ち上げる&lt;br /&gt;&lt;br /&gt;・タイトルバーを右クリック&lt;br /&gt;&lt;br /&gt;・プロパティ&lt;br /&gt;&lt;br /&gt;・フォントタブを選択肢、MSゴシックにする&lt;br /&gt;&lt;br /&gt;・UTF-8に変更するため、プロンプトに以下のコマンドを打ち込む&lt;br /&gt;chcp 65001&lt;br /&gt;&lt;br /&gt;・logを出力(サンプルはDebugレベル)&lt;br /&gt;adb logcat -d&lt;br /&gt;&lt;br /&gt;で日本語でlogが出力されるようになります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4485235474001896915?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4485235474001896915/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/12/androidlogcat.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4485235474001896915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4485235474001896915'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/12/androidlogcat.html' title='androidのlogcatで日本語を使う'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-822819974944447504</id><published>2010-11-29T00:08:00.003+09:00</published><updated>2010-11-29T00:16:04.364+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidのListViewの動き　その1</title><content type='html'>androidアプリ作成時には必ずお世話になるListViewの特徴と動きのメモです。&lt;br /&gt;このListViewをうまく使えるかどうかで、androidアプリの完成度は大きく変わります。&lt;br /&gt;はまりそうな箇所を中心に記述しておきます。自分のメモ代わりでもあります。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;ListViewのlist側のxmlに設定したButtonが反応しない&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;リストにButtonを設定する場合、Buttonタグに&lt;br /&gt;&lt;br /&gt;android:focusable="false"&lt;br /&gt;&lt;br /&gt;を設定する。そうしないと、onListItemClickが使えなくなる。&lt;br /&gt;これは結構はまりがち。嫌な仕様ですが、気をつけましょう。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;スライド時にタッチすると項目が黒くなる&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ListViewタグに&lt;br /&gt;&lt;br /&gt;android:scrollingCache="false"&lt;br /&gt;&lt;br /&gt;を設定する。&lt;br /&gt;&lt;br /&gt;参考サイト&lt;br /&gt;http://typea.info/tips/wiki.cgi?page=Android+Tips#p27&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;list側の背景を利用したくない。親の背景をそのまま透使いたい（透過処理）。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ListViewタグに&lt;br /&gt;&lt;br /&gt;android:cacheColorHint="#00000000"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;を設定する。&lt;br /&gt;&lt;br /&gt;参考サイト&lt;br /&gt;http://d.hatena.ne.jp/isher/20091009/1255029532&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;getViewメソッドの挙動&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;画面をスクロールさせて、列が表示されるたびにgetViewメソッドは呼ばれる。&lt;br /&gt;&lt;br /&gt;・&lt;span style="font-weight:bold;"&gt;境界線の色と高さを変更する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ListViewタグに&lt;br /&gt;&lt;br /&gt;色&lt;br /&gt;        android:divider="#808080"&lt;br /&gt;&lt;br /&gt;高さ&lt;br /&gt;        android:dividerHeight="2sp"&lt;br /&gt;&lt;br /&gt;のように設定する&lt;br /&gt;&lt;br /&gt;とりあえずその1はここまで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-822819974944447504?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/822819974944447504/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidlistview1.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/822819974944447504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/822819974944447504'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidlistview1.html' title='androidのListViewの動き　その1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-361150147643698451</id><published>2010-11-17T20:23:00.002+09:00</published><updated>2010-11-17T20:29:09.829+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>android端末をwindowsにUSB接続する</title><content type='html'>&lt;span style="font-weight:bold;"&gt;android端末をwindowsにUSB接続する&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;android端末をwindows7より前のwindowsXP、Vista等で認識させるには、ドライバが必要になることがあります。&lt;br /&gt;また、adbコマンドを利用する場合、最新の端末は認識されないことがあるので自分で設定が必要となります。&lt;br /&gt;&lt;br /&gt;xperiaは特に必要ありません。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;HTC Desire&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;softbankのHTC Desireは以下のサイトからソフトウェアをダウンロードしてください。&lt;br /&gt;http://www.htc.com/jp/SupportViewNews.aspx?dl_id=932&amp;news_id=623&lt;br /&gt;&lt;br /&gt;ダウンロード後、&lt;br /&gt;HTCSync.exe&lt;br /&gt;をクリックしてinstallします。&lt;br /&gt;これで端末にアクセスできます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;コマンドプロンプトでadbコマンドを使用できるようにする&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;端末のアプリケーションのUSBデバッグをチェック、スリープモード非設定をチェックします。&lt;br /&gt;C:\android-sdk-windows\usb_driverのandroid_winusb.infをテキストエディタで開きます。&lt;br /&gt;&lt;br /&gt;; HTC Desire&lt;br /&gt;%SingleAdbInterface% = USB_Install, USB\VID_0BB4&amp;PID_0C87&lt;br /&gt;%CompositeAdbInterface% = USB_Install, USB\VID_0BB4&amp;PID_0C87&amp;MI_01&lt;br /&gt;&lt;br /&gt;上記の記述を&lt;br /&gt;[Google.NTx86]と[Google.NTamd64]の部分にコピペして貼り付けます。&lt;br /&gt;&lt;br /&gt;コマンドを開き&lt;br /&gt;&lt;br /&gt;adb devices&lt;br /&gt;&lt;br /&gt;で確認してみましょう。端末番号が表示されるはずです。&lt;br /&gt;表示されない場合は、コントロールパネルからUSBディバイスを認識させるか、再起動してみてください。たぶん上手くいきます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ギャラクシーS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;サムソンのギャラクシーSの場合は、以下のサイトからソフトウェアをダウンロードしてください。&lt;br /&gt;http://software.gamblis.com/mobile/samsung-i9000-galaxy-s-driver-software-download/&lt;br /&gt;&lt;br /&gt;ダウンロード後、&lt;br /&gt;Kies_1.5.1.10074_2_6.exe&lt;br /&gt;をクリックしてinstallします&lt;br /&gt;携帯電話だけをチェックしてインストールします。&lt;br /&gt;これで端末にアクセスできます。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;コマンドプロンプトでadbコマンドを使用できるようにする&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;端末のアプリケーションのUSBデバッグをチェック、スリープモード非設定をチェックします。&lt;br /&gt;C:\android-sdk-windows\usb_driverのandroid_winusb.infをテキストエディタで開きます。&lt;br /&gt;&lt;br /&gt;; Samsung galaxy&lt;br /&gt;%CompositeAdbInterface% = USB_Install, USB\VID_04E8&amp;PID_6640&amp;MI_00&lt;br /&gt;%SingleBootLoaderInterface% = USB_Install, USB\VID_04E8&amp;PID_6640&amp;MI_04&lt;br /&gt;&lt;br /&gt;上記の記述を&lt;br /&gt;[Google.NTx86]と&lt;br /&gt;[Google.NTamd64]の部分にコピペして貼り付けます。&lt;br /&gt;&lt;br /&gt;コマンドを開き&lt;br /&gt;&lt;br /&gt;adb devices&lt;br /&gt;&lt;br /&gt;で確認してみましょう。端末番号が表示されるはずです。&lt;br /&gt;表示されない場合は、コントロールパネルからUSBディバイスを認識させるか、再起動してみてください。たぶん上手くいきます。&lt;br /&gt;&lt;br /&gt;追記&lt;br /&gt;adbコマンドだけで事足りる場合は、ソフトウェアのインストールは必要ありません。&lt;br /&gt;android_winusb.infに上記の内容を貼り付ければOKです。&lt;br /&gt;&lt;br /&gt;以上。最新androidOSが楽しみな管理人でした～。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-361150147643698451?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/361150147643698451/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidwindowsusb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/361150147643698451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/361150147643698451'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidwindowsusb.html' title='android端末をwindowsにUSB接続する'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5362660494525903734</id><published>2010-11-17T01:33:00.003+09:00</published><updated>2010-11-17T01:45:16.040+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>android,iphoneアプリ開発では、バージョン管理システムは分散型を使う</title><content type='html'>&lt;span style="font-weight:bold;"&gt;android,iphone開発ではバージョン管理システムは分散型を使う&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;スマートフォン開発では、ソースコードの管理は分散型を使ったほうが良いです。&lt;br /&gt;なぜなら、スマートフォンアプリは頻繁なversion upが要求されるからです。&lt;br /&gt;開発では、次期versionとバグフィックスの平行開発が普通なので、分散型でないと色々と面倒なことが発生する可能性が高いです。&lt;br /&gt;企業ではいまだにsubversionを使用しているところが多いですが、あまりおすすめできません。もし、cvsを使ってるなら、androidやiphoneの開発を行うまえに、バージョン管理の本を読みましょうw。&lt;br /&gt;&lt;br /&gt;ちなみに私はandroid開発ではgitを使っています。&lt;br /&gt;iphone開発ではMercurialです。&lt;br /&gt;&lt;br /&gt;別にバージョン管理ソフトを使い分ける必要はないと思います。私はバージョン管理ソフトの勉強を兼ねて分けて使用しています。&lt;br /&gt;個人的にはgitがBESTだと思います。世の中もそういう流れですしね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=427406767X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;私はgitは上記の本にお世話になっています。バージョン管理ソフトが苦手なアホの私でも使えるようになりました。&lt;br /&gt;ただ、windows7だとgitは日本語が使えないかもしれません。&lt;br /&gt;windows7を使っている人は気をつけてください。&lt;br /&gt;でわ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5362660494525903734?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5362660494525903734/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidiphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5362660494525903734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5362660494525903734'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/androidiphone.html' title='android,iphoneアプリ開発では、バージョン管理システムは分散型を使う'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8851865854812187185</id><published>2010-11-14T23:05:00.001+09:00</published><updated>2010-11-14T23:07:44.731+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidアプリのフォルダ構成</title><content type='html'>&lt;span style="font-weight:bold;"&gt;androidアプリのフォルダ構成&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;開発を行うとき、ソースを格納するフォルダを作成します。&lt;br /&gt;この時、androidでは、javaソースフォルダは一つにまとめたほうが良いと思います。&lt;br /&gt;例えば、これまでのWEBの開発では、form, action,utilなど機能ごとに色々まとめるのが一般的でした。&lt;br /&gt;でも、androidの開発ではやめたほうがいいです。&lt;br /&gt;もちろん規模にもよりますが、普通のアプリでは無駄です。逆にフォルダ階層が異なることによる制約のほうが邪魔です。&lt;br /&gt;&lt;br /&gt;Hogeというアプリがあるのなら&lt;br /&gt;&lt;br /&gt;jp.co.hoge&lt;br /&gt;&lt;br /&gt;というフォルダを作成し、そこに全てのjavaファイルを作りましょう。&lt;br /&gt;ativityクラスをおくために&lt;br /&gt;&lt;br /&gt;jp.co.hoge.activity&lt;br /&gt;&lt;br /&gt;とかはよほど規模の大きいプロジェクト以外はやめたほうが良いです。&lt;br /&gt;Activityクラスは「画面名」 + Activityとするべきです。&lt;br /&gt;&lt;br /&gt;TOP画面なら&lt;br /&gt;TopActivtyとするのが良いと思う。&lt;br /&gt;&lt;br /&gt;ただし、TOP画面を直接「android.intent.category.LAUNCHER」で立ち上げるべきではありません。&lt;br /&gt;これは意外とやらかしてしまっているアプリが多いです。&lt;br /&gt;&lt;br /&gt;起動画面はSplash.java&lt;br /&gt;を作成し、そこで初回起動時、update時、アプリ立ち上げ時の処理を通すようにします。&lt;br /&gt;&lt;br /&gt;つまりは、&lt;br /&gt;&lt;br /&gt;Splash.java(startActivity)&lt;br /&gt;&lt;br /&gt;↓&lt;br /&gt;&lt;br /&gt;TopActivity.java とか HomeActivity.java とか MainActivity.java&lt;br /&gt;&lt;br /&gt;として、TopActivity.javaで画面表示するのが良いです。&lt;br /&gt;&lt;br /&gt;そして、&lt;br /&gt;Splash.javaは&lt;br /&gt;&lt;br /&gt;Manifestファイルのactivityの設定に&lt;br /&gt;&lt;br /&gt;android:noHistory="true"&lt;br /&gt;&lt;br /&gt;を記述しましょう。&lt;br /&gt;&lt;br /&gt;Splash.javaはstackに積んではいけません。deviceの戻るで表示されてしまうからです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8851865854812187185?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8851865854812187185/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/android_14.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8851865854812187185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8851865854812187185'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/android_14.html' title='androidアプリのフォルダ構成'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2519857903996032044</id><published>2010-11-09T23:32:00.000+09:00</published><updated>2010-11-09T23:33:42.051+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidアプリバージョンアップ</title><content type='html'>オリジナルandroidアプリのダイレコをversion1.2.0にupdateしました。&lt;br /&gt;今回は、入力補助の機能を追加しました。これで随分と入力が楽になると思います。&lt;br /&gt;是非、ご利用ください。&lt;br /&gt;&lt;br /&gt;今後、version1.2.x系は、インターフェースをもっと使いやすいよう、短いスパンでversionUpしていきたいと思います。&lt;br /&gt;&lt;br /&gt;操作説明のHPの更新はもうちょっと待ってください…。更新の連続でちょっと(かなり？)疲れ気味です。&lt;br /&gt;&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2519857903996032044?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2519857903996032044/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/android_09.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2519857903996032044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2519857903996032044'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/android_09.html' title='androidアプリバージョンアップ'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8352461962565503837</id><published>2010-11-04T01:05:00.003+09:00</published><updated>2010-11-04T01:10:28.576+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>第二作目のAndroidアプリを公開</title><content type='html'>本日、第二作目のAndroidアプリを公開しました。&lt;br /&gt;非常にシンプルなアプリですが、色々なネタが満載のアプリです。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TNGJB1gsT5I/AAAAAAAAAEM/JcupSIXpvb8/s1600/stage5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 267px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TNGJB1gsT5I/AAAAAAAAAEM/JcupSIXpvb8/s400/stage5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5535356081652125586" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;今回もフリーアプリなので、暇つぶしに是非どうぞ。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msg-mario.sakura.ne.jp/app/hit/hit_index.html"&gt;新作アプリ説明ページへ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.android.com/market/#app=com.fourtechnologies.mynetdiary.ad"&gt;Adroid marketへ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;「hit」という文字列検索で表示されると思います。&lt;br /&gt;&lt;br /&gt;疲れたので、今日は短文です。&lt;br /&gt;それでわん。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8352461962565503837?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8352461962565503837/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8352461962565503837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8352461962565503837'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/android.html' title='第二作目のAndroidアプリを公開'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_ZI-uFiqogUM/TNGJB1gsT5I/AAAAAAAAAEM/JcupSIXpvb8/s72-c/stage5.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-4127559039195694290</id><published>2010-11-03T20:04:00.002+09:00</published><updated>2010-11-03T20:15:34.060+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='プログラマーズバイブル'/><title type='text'>「すべては戦略からはじまる」の感想</title><content type='html'>　なぜ、この本がプログラマーズバイブルのラベル設定になっているかというと、戦略的な思考をプログラマにも多少はもって欲しいからです。&lt;br /&gt;　優秀なプログラマなら分かっていると思いますが、技術とお金を稼ぐ能力は別です。優秀なプログラマと優秀でないプログラマの生産性は100倍にも及ぶことがあります。&lt;br /&gt;　しかし、どんなに優秀なプログラマでも、お金を稼ぐ能力は他から学ばないといけません。&lt;br /&gt;　プログラマという職業の地位を向上させ、職業プログラマが幸せになるためには、多くのプログラマがマネタイズする力を身につけ、社会の中で地位を掴み取っていかなければいけないのです。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4478014566" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;　&lt;br /&gt;　この本は会社経営の戦略本です。事業がうまくいっていない架空のゲーム会社を題材に、会社を立て直すための戦略を小説形式で説明していきます。いわゆるMBA式の経営戦略本なのですが、ストーリーのある小説なので読み易いです。ゲームソフトウェア事業がテーマなので、プログラマにはお薦めです。&lt;br /&gt;　また、途中途中で問題演習が入るので、読んだだけで満足して終了ということにはならない点が優れています。最低限必要な知識を強制的にアウトプットさせる仕組みになっています。&lt;br /&gt;　ストーリーは完全に最近はやりの「萌え」路線。「もし高校野球の女子マネージャーがドラッカーの『マネジメント』を読んだら」のようなイラストだったらもっと売れると思います。前者の例に漏れず内容とストーリーは薄いですが、内容は悪くないです。事業計画の入門本としては、十分な内容だと思います。&lt;br /&gt;　しかし、主人公が篠原涼子風の美人キャリアウーマンというのは失敗です。中途半端すぎます。どうせなら、MBA戦略の天才女子中学生、しかもめがねっ娘とかにしないといけません。これは編集さんの責任です。この世界のマーケットをまったく分かっていませんね。&lt;br /&gt;　また、この本を読んだ後には、自分の会社の経営戦略をシュミレーションしてみるといいと思います。自分が今後習得するべき技術や、進む方向性の助けにもなると思います。&lt;br /&gt;&lt;br /&gt;　私はコンサルタントみたいな連中はあまり好きではありません。しかし、バリバリの技術者こそ、こういった本を読むべきだと思います。技術者はもっと自分の技術を有効に使い、イノベーションを巻き起こし、社会を変えていくべきなのです。&lt;br /&gt;　プログラマにはそれができるのです。&lt;br /&gt;　&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-4127559039195694290?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/4127559039195694290/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4127559039195694290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/4127559039195694290'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/blog-post.html' title='「すべては戦略からはじまる」の感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-9146010424027870724</id><published>2010-11-03T19:27:00.001+09:00</published><updated>2010-11-03T19:30:09.546+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='業務の失敗と解決方法のメモ'/><title type='text'>MediaWikiをVirtualHostに設定したらページが表示されなくなった</title><content type='html'>MediaWikiをVirtualHostに設定したらページが表示されなくなったので、その解決方法のメモ&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;環境&lt;/span&gt;&lt;br /&gt;Ubuntu  9.10&lt;br /&gt;Mysql   5.1.37&lt;br /&gt;php     5.2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;実施する（した）こと&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    * Apache2のVirtualHostに、MediaWikiの情報を設定する&lt;br /&gt;&lt;br /&gt;    * LAN内でアクセスできるようにwindowsとmacのhostsファイルにドメインを指定&lt;br /&gt;    &lt;br /&gt;    * ブラウザでアクセス。しかし、wikiが表示されない。他に設定してあるRedmine(Passenger動作)やTestLinkは正常に動作する&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;原因&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;error_logを見ると、File Not Foundエラーが表示されていた。&lt;br /&gt;urlの指定がhttp://ドメイン/wiki/wiki。本来はhttp://ドメイン/wiki/でなくてはいけない。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;はまったこと&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;VirtualHostのファイル設定に間違いはなかったのに、ここが間違いだと仮定してtry&amp;errorを行ってしまった。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;解決方法&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;MediaWikiのフォルダ直下にあるLocalSettings.phpの&lt;br /&gt;&lt;br /&gt;$wgScriptPath     = "/wiki";&lt;br /&gt;&lt;br /&gt;の部分を&lt;br /&gt;&lt;br /&gt;$wgScriptPath     = "";&lt;br /&gt;&lt;br /&gt;に変更する。&lt;br /&gt;&lt;br /&gt;それだけで復活しました。&lt;br /&gt;&lt;br /&gt;直し方は&lt;br /&gt;&lt;a href="http://www.mediawiki.org/wiki/Manual:Short_URL/wiki/Page_title_--_PHP_as_a_CGI_module,_no_root_access"&gt;こちら&lt;/a&gt;&lt;br /&gt;を参考にしました。&lt;br /&gt;&lt;br /&gt;久しぶりにサーバー周りをいじったので時間がかかってしまいました。&lt;br /&gt;ちょこちょこいじる時間をとらないと駄目だと実感した管理人でした。&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-9146010424027870724?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/9146010424027870724/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/mediawikivirtualhost.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9146010424027870724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/9146010424027870724'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/mediawikivirtualhost.html' title='MediaWikiをVirtualHostに設定したらページが表示されなくなった'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2434947373502913257</id><published>2010-11-02T07:11:00.007+09:00</published><updated>2010-11-02T07:24:23.902+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><title type='text'>faceBookのファンページでFBMLを使ってみる その1</title><content type='html'>最近やたらと世間でfaceBookがプッシュされています。&lt;br /&gt;ローソン、TBS、著名な個人では&lt;a href="http://www.facebook.com/kazuyo.katsuma"&gt;勝間和代さんもファンページ&lt;/a&gt;をはじめましたね。&lt;br /&gt;&lt;br /&gt;私は別に有名人ではないので、ファンページを作る必要性は感じません。&lt;br /&gt;でも最近はandroidアプリの作成もしていますし、今後はiphoneアプリやWEBサービス、facebookのアプリも作成したいと思っているので、とりあえずこの勢いでファンページも作ってみようかと思っています。&lt;br /&gt;&lt;br /&gt;しかし、このファンページの作り方。やたらとっつきにくいのです。本当に日本でfaceBookははやるのかと疑うくらい使いにくい。&lt;br /&gt;職業エンジニアの私がそう思うのだから、普通のユーザーではなおさらでしょう。&lt;br /&gt;&lt;br /&gt;そんなわけで作成メモを残しながら、ファンページを作成していこうと思います。&lt;br /&gt;ただし、ここではファンページの作成とFBMLの導入はすでに完了済みであるとします。&lt;br /&gt;&lt;br /&gt;でわでわ、一番簡単そうなFBMLというアプリケーションを使ってファンページをいじることにしましょう。&lt;br /&gt;&lt;br /&gt;FBMLの使い方は&lt;br /&gt;http://developers.facebook.com/docs/reference/fbml/&lt;br /&gt;を参考にします。、英語は苦手なんですがこれくらいならなんとかなるでしょう。&lt;br /&gt;&lt;br /&gt;まずは、訪問してくれた友人を出迎えるメッセージを作成してみましょうか。&lt;br /&gt;&lt;br /&gt;作成するメッセージは、&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;WELCOM TO MY PAGE!! おお、我が心の友よ。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;というメッセージにでもしましょうか。&lt;br /&gt;&lt;br /&gt;画像下のファンページ編集を選択し、左メニューのアプリケーションを選択します。&lt;br /&gt;FBMLがインストールされていれば、右側にFBMLが表示されているはずなのでそれを選択します。&lt;br /&gt;&lt;br /&gt;次に、FBMLの中にHTMLを記述します。&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_ZI-uFiqogUM/TM88E1tr3RI/AAAAAAAAADk/SlgV9IezpG4/s1600/face1_1.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 292px;" src="http://4.bp.blogspot.com/_ZI-uFiqogUM/TM88E1tr3RI/AAAAAAAAADk/SlgV9IezpG4/s400/face1_1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5534708520897469714" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;上記のように記述したら、「変更を保存」ボタンを押下します。&lt;br /&gt;&lt;br /&gt;さて、変更後のページを確認してみましょうか。&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ZI-uFiqogUM/TM88lvLlqmI/AAAAAAAAADs/TKpgMGRWOvE/s1600/face1_2.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 349px;" src="http://1.bp.blogspot.com/_ZI-uFiqogUM/TM88lvLlqmI/AAAAAAAAADs/TKpgMGRWOvE/s400/face1_2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5534709086079527522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;おお、見事にHTMLタグが効いてますね。&lt;br /&gt;しかし、これではfaceBookっぽくないですね。せっかくなんだからもっとfaceBookっぽくしたいですね。なので、facebookで用意されているAPIを利用してみます。&lt;br /&gt;&lt;br /&gt;色々見てみると、fb:headerというtagを発見。&lt;br /&gt;http://developers.facebook.com/docs/reference/fbml/header&lt;br /&gt;&lt;br /&gt;この部分はヘッダーなので、上記のタグが良さそうですね。では、さっそく使ってみましょう。。&lt;br /&gt;&lt;br /&gt;属性のdecorationはヘッダーの下に下線を加えるみたいですね。これも追加しましょうか。&lt;br /&gt;以下のように記述します。&lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_ZI-uFiqogUM/TM894pyuL6I/AAAAAAAAAEE/_s_4Sj74KaE/s1600/face1_3.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 317px;" src="http://2.bp.blogspot.com/_ZI-uFiqogUM/TM894pyuL6I/AAAAAAAAAEE/_s_4Sj74KaE/s400/face1_3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5534710510562193314" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;記述を終えたら、「変更を保存」ボタンを押下します。&lt;br /&gt;そして、変更後のページを見てみましょうか。&lt;br/&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_ZI-uFiqogUM/TM888DjRSGI/AAAAAAAAAD8/zuABOUqH_e4/s1600/face1_4.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 358px;" src="http://3.bp.blogspot.com/_ZI-uFiqogUM/TM888DjRSGI/AAAAAAAAAD8/zuABOUqH_e4/s400/face1_4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5534709469504686178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;おおおお、faceBookっぽくなりましたねえ。このダサさがなんともfacebookっぽいw。&lt;br /&gt;&lt;br /&gt;ってなわけで疲れたので今回はここまで。次回はもっと色々といじる予定です。&lt;br /&gt;このペースだと果たしていつ完成するのでしょうかw。&lt;br /&gt;とりあえず、お疲れ様でした～～。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2434947373502913257?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2434947373502913257/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/11/facebookfbml-1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2434947373502913257'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2434947373502913257'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/11/facebookfbml-1.html' title='faceBookのファンページでFBMLを使ってみる その1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_ZI-uFiqogUM/TM88E1tr3RI/AAAAAAAAADk/SlgV9IezpG4/s72-c/face1_1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6450361976839023078</id><published>2010-10-29T13:25:00.001+09:00</published><updated>2010-10-29T13:47:35.884+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビジネスとしてのWEB'/><title type='text'>faceBook・ビジネス・マーケティング</title><content type='html'>faceBookを使ってファンページを作成してます。&lt;br /&gt;ついでに、faceBookの特徴も調査中です。以下、調査結果とまとめです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;・ファンページとはなにか&lt;br /&gt;&lt;br /&gt;「企業サイト」のようなもの&lt;br /&gt;&lt;br /&gt;・普通のHP, Blogと何が違うのか&lt;br /&gt;&lt;br /&gt;ファンページは、facebookの中に出店できる支店サイトのようなもの。&lt;br /&gt;商品やサービスの注文を受付けできること以外にも、商品やサービスについて興味を示すお客と掲示板で直接やり取りできたり、イベント情報を発信できたり、普通のホームページ以上に便利な機能が満載。&lt;br /&gt;&lt;br /&gt;・効果&lt;br /&gt;&lt;br /&gt;ユーザー数は、世界で5億人を超える。単純計算で全世界の1/12のユーザ数が存在するので、影響力は大きい。&lt;br /&gt;しかし、現時点では日本のユーザー数は少ない。浸透するかどうかも微妙。ただし、英語、スペイン語が出来るのであればやったほうがよい。というより、やらない理由がない。&lt;br /&gt;&lt;br /&gt;・操作性&lt;br /&gt;&lt;br /&gt;現状のUIは日本人には合わないと思う。確かに色々なことが可能だし、WEBの扱いに慣れている人やエンジニアには魅力である。&lt;br /&gt;しかし、一般ユーザーが使ってもなにをやっていいかわからず、登録して放置となる可能性が高い。また、使っていても掲示板にツイッターのつぶやきを垂れ流しているだけの人も多いようだ。日本で広がるには、もっと操作が簡単になるか、手厚いサービスが必要だと思う。&lt;br /&gt;&lt;br /&gt;・その他のソフトウェアとの連携&lt;br /&gt;&lt;br /&gt;かなり良い。Twitter, Youtube, Ustreamとの相性も良い。楽しいゲームもある。それなりのWEB知識で、かなりの効果を生み出すマーケティングも可能。今後、色々なマーケティング手法とイノベーションが生まれると思う。特に、金をばらまかない政治的な活動ができるようになれば、世界は大きく変わるだろう。…これは無理か。&lt;br /&gt;&lt;br /&gt;・将来性&lt;br /&gt;&lt;br /&gt;高い。ビジネスという観点だけからみるなら、googleを超える。英語、スペイン圏でビジネスをやるなら必須のツールになるはず。&lt;br /&gt;&lt;br /&gt;・日本&lt;br /&gt;&lt;br /&gt;実名での公開がネック。若い世代は抵抗ないだろうが、2ch全盛期頃にWEBを使い始めた世代は拒否反応が強いだろう。ITの世界でも世代間格差がどんどん生まれてくるはず。今後、格差社会を広げる原因を担うアプリともいえる。今の格差はお金に関する話が多いが、10年後にはIT格差が社会問題になると思う。&lt;br /&gt;&lt;br /&gt;追伸&lt;br /&gt;&lt;br /&gt;公開できる状態になったら、ファンページを公開します。&lt;br /&gt;そのときはよろしくお願いします。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6450361976839023078?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6450361976839023078/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/facebook.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6450361976839023078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6450361976839023078'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/facebook.html' title='faceBook・ビジネス・マーケティング'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8722643080090257703</id><published>2010-10-26T08:10:00.002+09:00</published><updated>2010-10-26T08:14:24.124+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='読書感想'/><title type='text'>「夜と霧」の感想</title><content type='html'>この本を読後、すぐに眠りについた。&lt;br /&gt;&lt;br /&gt;そして、夢をみた。&lt;br /&gt;&lt;br /&gt;その世界は戦争中だった。&lt;br /&gt;&lt;br /&gt;私は戦火の中で彼女を探していた。しかし、発見した彼女は敵兵士に乱暴されている最中だった。&lt;br /&gt;&lt;br /&gt;私は駆け出した。しかし、走っても走っても彼女には近づけない。なぜ距離が近づかないのかと私は焦った。&lt;br /&gt;&lt;br /&gt;彼女と目が合った。その目はうつろで人形のようだった。私は叫び声をあげた。&lt;br /&gt;&lt;br /&gt;そこで目が覚めた。時計を見るとまだ4:00前だった。隣には無造作に置かれた「夜と霧」の本があった。私の全身からは、冷や汗が出ていた。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4622039702" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;若者の「希望は戦争」という記事を書いた赤木智弘さんの論文が一時期話題になったことがある。&lt;br /&gt;&lt;br /&gt;若者といっても赤木氏は私より年上だ。彼より社会を長く生きていない私が彼に物を言うのには抵抗があるが、あえて言いたい。&lt;br /&gt;&lt;br /&gt;「この本を読め」&lt;br /&gt;&lt;br /&gt;と。&lt;br /&gt;&lt;br /&gt;　私も氷河期世代の人間だから、色々と苦労はしてきた。定職に就いていない時期は「この先どうするの？死ぬの？」ようなことも普通に言われたりした。しかし、戦争を望んだことは一度も無い。私が楽天的な性格ということもあるだろうが、私と赤木氏の思考の違いの答えはこの本にあると思った。&lt;br /&gt;&lt;br /&gt;　この本はアウシュヴィッツという悲劇の歴史を知るための本ではない。この本で知ることができるのは、人間の精神のあり方だ。&lt;br /&gt;&lt;br /&gt;本の中に&lt;br /&gt;&lt;br /&gt;わたしたちが生きることからなにを期待するかではなく、生きることが私達から何を期待しているかが問題なのだ&lt;br /&gt;&lt;br /&gt;という言葉があった。&lt;br /&gt;&lt;br /&gt;その通りだと強く思った。&lt;br /&gt;&lt;br /&gt;　私には夢がある。多くの夢が。それを果たしたいと強く思っている。生きることが私に期待しているのはこれらの夢を成就することに違いないとこの言葉を咀嚼しながら考えた。我ながら単純な思考だとも思う。&lt;br /&gt;&lt;br /&gt;未来を見据えている人の精神は強い。驚くほどに。この本はそれを教えてくれる。&lt;br /&gt;&lt;br /&gt;「希望が戦争」などと言ってしまうのは、現在にも未来にも希望が見い出せないからだろう。この本に記述されている被収容者達と同じように。&lt;br /&gt;&lt;br /&gt;今の日本の若者の胸に去来しているのは、アウシュヴィッツの非収容者達と同じ精神状態なのだろうか。&lt;br /&gt;&lt;br /&gt;しかし、ただ時代の流れに沿って生きているだけで日本人だけが極上の生活を得られる時代はバブルの崩壊と共に終了したのだ。&lt;br /&gt;&lt;br /&gt;未来は与えれられるものから、掴み取るものへと変わっている。&lt;br /&gt;&lt;br /&gt;現在(2010/10)、日本は中国の尖閣問題で世論が揺れている。ネット上では中国に対する過激な意見が飛び交っている。&lt;br /&gt;&lt;br /&gt;もし、戦争が始まり日本が勝利すれば、中国人に対しナチスのような行動に出るのではないかと危惧するほどにだ。それは、中国側にも同様なことが言えるだろう。&lt;br /&gt;&lt;br /&gt;今の状態で、両国が友好を結ぶことはできない。また、必要もない。しばらく距離を置いて頭を冷やしたほうが両国のためになる。&lt;br /&gt;&lt;br /&gt;大切なのは日本人や中国人といった人種ではない。&lt;br /&gt;&lt;br /&gt;個人の精神だ。&lt;br /&gt;&lt;br /&gt;中国人にも良い人間はたくさんいる。私は開発現場で多くの中国人に出会ったし、彼らはみな真面目でとても親切であった。ベトナムや台湾の人達も同様だ。&lt;br /&gt;&lt;br /&gt;逆に、日本人でも性根の腐った人間はたくさんいた。&lt;br /&gt;&lt;br /&gt;この本でも記述されているが、結局行動とは個人の精神の実体化した結果なのである。&lt;br /&gt;&lt;br /&gt;国同士の仲が悪かろうと良かろうと、個人個人の人間性は別物だ。&lt;br /&gt;&lt;br /&gt;著書のフランクルはこう述べている。&lt;br /&gt;&lt;br /&gt;この世にはふたつの人間の種族がいる。まともな人間とまともでない人間と。&lt;br /&gt;&lt;br /&gt;受難の民は攻撃的になる。とりかえしがつかなくなる前に、わたしたちも自分に問いかけなければならない。&lt;br /&gt;&lt;br /&gt;自分はまともな人間なのか、と。&lt;br /&gt;&lt;br /&gt;その時、この本は必ず大きな助けとなるだろう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8722643080090257703?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8722643080090257703/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post_26.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8722643080090257703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8722643080090257703'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post_26.html' title='「夜と霧」の感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3189463147404654881</id><published>2010-10-23T12:01:00.002+09:00</published><updated>2010-10-23T12:07:23.525+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='業務の失敗と解決方法のメモ'/><title type='text'>Eclipseのsubversion操作ではまったこと</title><content type='html'>Eclipseのsubversion操作ではまったので、その解決方法のメモ&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;実施する（した）こと&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;subversionのリポジトリからプロジェクトを取得&lt;/li&gt;&lt;br /&gt;&lt;li&gt;取得したプロジェクトを、プロジェクト名称を変更して完全な別プロジェクトとして作成&lt;/li&gt;&lt;br /&gt;&lt;li&gt;作業完了後、別プロジェクトとしてコミットを行う&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;はまったこと&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;プロジェクトフォルダ右クリック　→　チーム　→　プロジェクトの共有&lt;br /&gt;&lt;br /&gt;で同一リポジトリに別プロジェクトとしてコミットしようとした。&lt;br /&gt;しかし、リポジトリから作成したプロジェクトなので、他のプロジェクトに関連づいてしまっている。&lt;br /&gt;&lt;br /&gt;なので、別プロジェクトとして管理するには&lt;br /&gt;&lt;br /&gt;プロジェクトフォルダ右クリック　→　チーム　→　&lt;span style="font-weight:bold;"&gt;切断&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;という作業が必要となる。これがeclipseでのやり方がわからなくてはまりました。&lt;br /&gt;（言い訳をさせていただくと、私は普段はコマンドで叩いているのです。自宅はgitですし…。）&lt;br /&gt;&lt;br /&gt;上記切断作業後、&lt;br /&gt;&lt;br /&gt;プロジェクトフォルダ右クリック　→　チーム　→　プロジェクトの共有&lt;br /&gt;&lt;br /&gt;が可能になるので、あとは普段の作業と一緒でOKになりました。&lt;br /&gt;既存のリポジトリを選択し、コミットしたいファイルを選択して、コメントを記述してcommitを行う。無事リリースも終了。&lt;br /&gt;eclipseは最高ですが、時々最悪ですね。&lt;br /&gt;でも、作業トータルで考えると明らかにプラスなので手放せませんよね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3189463147404654881?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3189463147404654881/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/eclipsesubversion.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3189463147404654881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3189463147404654881'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/eclipsesubversion.html' title='Eclipseのsubversion操作ではまったこと'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2047762943794906062</id><published>2010-10-23T11:51:00.002+09:00</published><updated>2010-10-23T11:55:39.250+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='プログラマーズバイブル'/><title type='text'>「プログラムはなぜ動くのか　第２版　知っておきたいプログラムの基礎知識」の感想</title><content type='html'>数年前に読んだ本ですが、もう一度基本を見直そうということで再読しました。&lt;br /&gt;そして、再読して思ったのは、良本というのは何度も繰り返し読むべきだということです。&lt;br /&gt;特に、このような時代の流行り廃れに左右されない基礎を身につけられる本は、自らの理解度を計るための試験問題を作成し、きちんと身につくまで繰り返し復習をしたほうが良い。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=4822283151" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;　現在は技術の進歩が、とてつもなく早い世の中です。だからこそ、基本となる知識はしっかりと理解し、身につけておかないといけないと思うのです。&lt;br /&gt;　家の建設でいうと基礎の部分です。基礎の部分がダメだと、どんなに素晴らしい外装や内装を施しても、ちょっとしたことで全てが崩壊してしまいます。大きな家であればあるほど、基礎が重要となります。&lt;br /&gt;　技術も同じです。知識を積み重ねれば積み重ねるほど、基礎の部分をしっかりと強くしていかないといけません。基礎が貧弱だと、新しい技術をに身につけるのも時間がかかるりますし、理解も表面にとどまってしまいます。&lt;br /&gt;　何事も基礎の反復が重要。一流の人達もよくいっていることです。でも、飽きちゃんですよね。私は凡人ですから…。&lt;br /&gt;というわけで、これからは私も問題を作り、理解するまで繰り返し反復したいと思います。いつかきっと底力となって役に立ってくれるときがくると信じて。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2047762943794906062?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2047762943794906062/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2047762943794906062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2047762943794906062'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post_23.html' title='「プログラムはなぜ動くのか　第２版　知っておきたいプログラムの基礎知識」の感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2243517702462394336</id><published>2010-10-23T11:14:00.003+09:00</published><updated>2010-10-23T11:28:07.425+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidでsqlite</title><content type='html'>&lt;span style="font-weight:bold;"&gt;sqliteを使う場合はパフォーマンスを意識する習慣を身につけましょう。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;androidアプリを作成すると、sqliteを使用するケースは非常に多いと思います。しかし、アプリでsqlを使用する場合は、ただ単に期待通りの結果を取得するのではなく、体感速度も意識しましょう。携帯端末アプリでの、長時間検索は不快なことこの上ないです。&lt;br /&gt;&lt;br /&gt;そして、sqlのパフォーマンスを改善する時に役に立つのが、explainコマンドです。&lt;br /&gt;explainを使うと、sqlの実行計画を閲覧することができます。&lt;br /&gt;&lt;br /&gt;コマンドライン上で&lt;br /&gt;&lt;br /&gt;explain select * from hoge;&lt;br /&gt;&lt;br /&gt;とsql文を実行します。&lt;br /&gt;ただし、このままだと非常に見難いので、&lt;br /&gt;&lt;br /&gt;.explain ON&lt;br /&gt;&lt;br /&gt;最初にコマンドを叩きましょう。&lt;br /&gt;&lt;br /&gt;その後、&lt;br /&gt;&lt;br /&gt;explain select * from hoge;&lt;br /&gt;&lt;br /&gt;と実行すると、体裁が整っていて非常に見やすいはずです。&lt;br /&gt;&lt;br /&gt;ちなみにexplainの見方は以下のサイトに記述されています。&lt;br /&gt;http://www.hwaci.com/sw/sqlite/opcode.html&lt;br /&gt;最初はとっつきにくいですが、頑張って理解してください。同時に、技術をユーザーの視点から見ることができるようにもなるはずですから。&lt;br /&gt;&lt;br /&gt;追伸1&lt;br /&gt;もうすぐオリジナルandroidアプリの第2作目を公開できそうです。シンプルなアプリなので暇つぶしにでもどうぞ。&lt;br /&gt;&lt;br /&gt;追伸2&lt;br /&gt;色々androidに関する知識が蓄積してきたので、このへんで色々とoutputしていきたいと思います。私がよく利用しているサイト・書籍・アプリ等々。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2243517702462394336?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2243517702462394336/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/androidsqlite.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2243517702462394336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2243517702462394336'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/androidsqlite.html' title='Androidでsqlite'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5385686237190599277</id><published>2010-10-20T23:29:00.003+09:00</published><updated>2010-10-20T23:37:53.088+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='小説'/><title type='text'>「幼年期の終わり」の感想</title><content type='html'>個人的にSF小説はあまり好きではありませんが、この作品は別格でした。&lt;br /&gt;本当の名作は時代やジャンルをも超越するのだということを教えてくれた本です。&lt;br /&gt;SFなんてくだらない。そう思い込んでいた私の考えを粉砕してくれました。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=433475144X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;　ここでは、この物語をSFという視点ではなく、文学という視点から物語を思索してみようと思います。&lt;br /&gt;&lt;br /&gt;　この物語は、&lt;br /&gt;「人間が争いを放棄し、生きていくのに必要 な物質を全て満たしとき、人類はどういった方向へと向かうのか。」&lt;br /&gt;という問いを投げかけてきます。&lt;br /&gt;　この本が書かれたのは1950年代で、現在は2010年です。当時と比べて、人類の生産性は大きくあがりました。世界の先進国では、貧乏な人間ほど肥満になるという現象が浮上するほどにです。&lt;br /&gt;　しかし、貧困国では、いまだに大勢の餓死者が出ています。日本では、コンビニ、ファミレス、スーパー等の店舗で大量の食事が廃棄されているというのに…。これはひどく矛盾した社会です。しかし、この問題もそう遠くない未来に解決されるでしょう。そして、人類は飢えを克服すれば、さらなる生活の向上を目指すようになります。世界の一部の先進国ではすでにそうなっているように。&lt;br /&gt;　人類の努力で、素晴らしい多くの技術が発展しました。しかしその結果として、世界中の先進国では、職のない失業者が大量にあふれています。皮肉なことに、人を幸せにするはずの技術が、人から仕事を奪ってしまったのです。&lt;br /&gt;&lt;br /&gt;過去は&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;仕事量 &lt; 需要&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;だったのが、&lt;br /&gt;&lt;br /&gt;現代は&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;仕事量 &gt; 需要&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;となってしまったのです。&lt;br /&gt;&lt;br /&gt;　この現象は新興国の急速な発展でさらに高まるでしょう。今後、食料は今より少ない人口で大量生産が可能となり、「働かざるもの食うべからず」という言葉は、過去ものとなり、働かなくても食える社会が到来するはずです。このような社会で人はどう生きていけばいいのでしょうか。&lt;br /&gt;&lt;br /&gt;　この物語の中では、人は学ぶことに重きをおいて生きていました。大学院で高度な専門項目を学ぶ、専門項目以外にも好きなことを突き詰めていく。確かに理想です。私もそういう世界がいつかきてほしいと強く願っています。&lt;br /&gt;　しかし、そんな世界が果たしてうまく機能するのでしょうか。人は、自分の生活を過去とは比較しません。&lt;br /&gt;他人と比較するのです。&lt;br /&gt;　物質が全て満たされた世界では、人は生れながらの顔や身長でお互いを比較するようになるのでしょうか。でも、顔や身長も自由に変更できる時代もくるでしょう。そのとき人はなにをもって幸福感や満足感を得るのでしょうか・・・。&lt;br /&gt;&lt;br /&gt;そんなことを色々と考えさせてくれる本でした。未読のかたは、ぜひ一読をお勧めします。&lt;br /&gt;その辺のビジネス書・専門書・歴史本を読むよりも、多くの示唆を与えてくれる素晴らしい本です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5385686237190599277?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5385686237190599277/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5385686237190599277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5385686237190599277'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/blog-post.html' title='「幼年期の終わり」の感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6117303942305883036</id><published>2010-10-12T00:58:00.003+09:00</published><updated>2010-10-12T01:06:00.223+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='小説'/><title type='text'>悪霊1巻の感想</title><content type='html'>光文社古典新訳文庫より、亀山郁夫氏の新訳が発売されました。&lt;br /&gt;ドストエフスキーの代表作の一つ「悪霊」です。&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=FFFFFF&amp;IS2=1&amp;npa=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=masayan11315-22&amp;o=9&amp;p=8&amp;l=as1&amp;m=amazon&amp;f=ifr&amp;asins=433475211X" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;私は、亀山訳の「カラマーゾフの兄弟」と「罪と罰」を読んでドストエフスキーにはまったので、ためらいもなく即購入した。&lt;br /&gt;&lt;br /&gt;亀山氏は、この悪霊をドストエフスキーの地獄編と評している。しかし、この1巻では、そのような雰囲気は感じられない。淡々と、1861年のロシアの農奴解放令(*1)によって揺れる世界が描かれている。一方で、罪と罰のような読み易さはなく、第1章の説明描写はカラマーゾフの兄弟を連想した。&lt;br /&gt;&lt;br /&gt;この物語の主人公はニコライ・スタヴローギン(以下ニコライ)であるが、ニコライの本格的な登場は1巻の後半になる。1巻の前半～中盤までの話は、ステパン・ウェルホヴェンスキー(以下ステパン)と友人のワルワーラ・スタヴローギン(以下ワルワーラ)が中心となっている。彼らの20年にも及ぶ友情と恋愛を綯い混ぜたような奇妙な関係が、この先物語に大きな影響を及ぼすことが伝わってくる。&lt;br /&gt;&lt;br /&gt;2章のハリー王子縁談では、ワルワーラの息子ニコライの狂った複数のエピソードが紹介される。一方で、ステパンはワルワーラからダーリヤ(以下ダーシャ)との結婚話を突きつけられる。&lt;br /&gt;&lt;br /&gt;ここで怪訝に思うのが、ワルワーラが、なぜダーシャとステパンを結婚させようとしたかである。ダーシャはワルワーラの養女である。ステパンとワルワーラはかつて恋愛関係に近い仲にもなっている。なのに、養女ダーシャとの結婚を強制的に勧めた。この時のワルワーラの心情はいかなものだったのだろうか。&lt;br /&gt;&lt;br /&gt;3章は、一気に色々な人物が登場する。一度に、彼らの関係を理解することは難しいが、栞にある主要登場人物を照らし合せながら読み進めた。&lt;br /&gt;&lt;br /&gt;4章では、マリヤ・レビャートキナ(以下マリヤ)が登場する。教会堂での礼拝式にいたワルワーラの前にマリヤが現れ、ワルワーラは、ワルワーラ婦人の屋敷へと彼女を連れて行く。&lt;br /&gt;&lt;br /&gt;5 章は、この1巻で最も話が盛り上がる。マリヤの兄であるレビャートキン大佐が登場し、マリヤが施しを受けた金をワルワーラに突き返す。一方で、妹のマリヤは領地を貰い受けたと主張する。この辺のワルワーラとレビャートキンの立場は、農奴解放令という大きな時代の変遷を受けとめようとしながらも、受け取りきれていない状況を描いているのだろうか。&lt;br /&gt;&lt;br /&gt;また、ラストではステパンの息子であるピョートルが登場する。ステパンはあくまで息子としてピョートルに接するが、ピョートルはステパンに親愛の情をもっていないのは明らかだ。この悲しい現実に打ちのめされるステパンは不憫であった。&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;それにしても、なんという凄い小説なのだろうというのが1巻全体を通しての感想だ。&lt;br /&gt;&lt;br /&gt;ドストエフスキーの小説からは、強烈な作者からのメッセージと思想が伝わってくる。それは「罪と罰」「カラマーゾフの兄弟」もそうだった。&lt;br /&gt;&lt;br /&gt;亀山氏の悪霊は全3巻で刊行される予定のようだ。次の2巻を楽しみに待ちたいと思う。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(*1)ロシアの農奴解放令&lt;br /&gt;&lt;br /&gt;1861年にアレクサンドル2世によって発令。クリミア戦争に敗北したアレクサンドル2世が、ロシアの後進性を痛感して取り組んだ。&lt;br /&gt;　ツアーリズム(ロシア帝国の絶対君主制体制)の危機を感じた皇帝が、「下からの革命による改革よりは上からの改革の方が良い」と廃止を決めた。&lt;br /&gt;　しかし、この農奴解放は、旧地主の大反対によって、農民にとってかなり不利だったため、農民の生活はすぐにはよくならなかった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6117303942305883036?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6117303942305883036/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/10/1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6117303942305883036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6117303942305883036'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/10/1.html' title='悪霊1巻の感想'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6223428840075773525</id><published>2010-09-28T13:40:00.001+09:00</published><updated>2010-09-28T13:42:16.473+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　最終回</title><content type='html'>～スマートフォンの今後と期待～&lt;br /&gt;&lt;br /&gt;これまでアプリ開発者としての視点から色々とスマートフォンアプリの現状についてだらだらと語ってきました。なので、最後は消費者としての視点からスマートフォンについて色々と意見を述べていきたいと思います。&lt;br /&gt;&lt;br /&gt;まず思うのは、スマートフォンは電話として使いにくいです。これはandroidもiphoneも同じです。私には、ガラケ―のほうが全然使いやすい。世界標準だかなんだか知りませんが、正直腹がたつことも多いです。&lt;br /&gt;　個人的には、ガラケーで電話 + スマートフォンでメール・アプリ・ネットがベストだなと思っています。今現在なら、一番安いdocomo端末 + iphone4(itouch4)の組み合わせが最高だと思います。ただ、費用が別々なのがアホラシイし、二台持ち運ばなければいけないのがネックですね。&lt;br /&gt;&lt;br /&gt;あと、スマートフォンはソーシャルメディアとの連携が非常に重要です。&lt;br /&gt;今のスマートフォン利用の最大の目的は、ビジネスなんですよ、結局。アプリなんて基本おまけです。スマートフォンはソーシャルメディアと連携することで、最高のビジネスツールになるわけです。&lt;br /&gt;　特にこれからの時代は、ネット上で自己ブランドを形成し、個のブランド力が重要になることが予想されます。なので、スマートフォンでソーシャルメディアを違和感なく扱えるようにしていただきたい。&lt;br /&gt;&lt;br /&gt;　ただ私個人としては、スマートフォンの価値は、人と人との繋がりを強化することにあると思います。電話をはじめとして、SMS、メール、ブログ、twitter, facebook等もそうですね。ネットを通じて、スマートフォンとソーシャルメディアでいつでも世界中の情報を取得し、情報を発信できる。それが重要なんじゃないでしょうか。&lt;br /&gt;　それによってこれまでなら見過ごされてきたような小さな事柄が解決できるかもしれません。又、メディアが取り上げない見えない世界の貧困を救えるかもしれない。命を救えるかもしれない。色々な事柄が解決できるかもしれません。&lt;br /&gt;&lt;br /&gt;　でも世の中では、このスマートフォンというツールを、新しいビジネスの舞台としてしかとらえてない人が多いです。正直、がっかりさせられます。&lt;br /&gt;iphoneやandroid端末は、ビジネス以外でも多くの可能性があります。&lt;br /&gt;なので、個人的には、人の生活に役立つようなフリーアプリを色々と作っていきたいと思っています。&lt;br /&gt;&lt;br /&gt;まだまだスマートフォンの時代ははじまったばかりです。&lt;br /&gt;どんな未来が待ち受けているのでしょうか、楽しみですね。&lt;br /&gt;&lt;br /&gt;以上です&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6223428840075773525?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6223428840075773525/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone_28.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6223428840075773525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6223428840075773525'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone_28.html' title='androidアプリとiphoneアプリを開発して思ったこと　最終回'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6515023354799728190</id><published>2010-09-21T23:16:00.002+09:00</published><updated>2010-09-21T23:20:20.818+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　その5</title><content type='html'>～スマートフォンアプリで利益を稼ぐ方法を考える。市場を知る　～の巻&lt;br /&gt;&lt;br /&gt;さて、その1からその4まで読んでくれた方は、スマートフォンアプリでお金を稼ぐことの難しさが認識できたと思います。&lt;br /&gt;&lt;br /&gt; 有料アプリの価格の30%を受け取るgoogleやappleとは、我々開発者は立場が違います。なので、上記2社とは違う利益の出し方を、我々開発者は考えていかないといけません。&lt;br /&gt;「これからはiphone, ipad, androidの時代。超大チャンス」なんて誰でも言えます。もっと現実的な目線で考えてみましょう。&lt;br /&gt;&lt;br /&gt;標準的に考えられるのは&lt;br /&gt;１、有料アプリ販売&lt;br /&gt;２、無料アプリ広告展開&lt;br /&gt;３、アプリの開発請負&lt;br /&gt;&lt;br /&gt;といった所でしょう。&lt;br /&gt;しかし、現在の市場で、1と2で生活費を稼ぐのは困難です。3が一番現実的でしょう。&lt;br /&gt;案件の単価を調査してみたところ、iphoneで月50～程度は稼げそうです。実績があればもう少し稼げるでしょう。&lt;br /&gt;　もちろん一発当たれば、莫大な金額が稼げますが、安定した収入という視点で考えた場合はこれが一番現実的だと思います。&lt;br /&gt;&lt;br /&gt;androidアプリは、現状3しかないです。&lt;br /&gt;ただ、android marketがずっと現状のままとも考えにくいです。このままでは開発者はどんどん離れてしまうので、googleもなんらかの対策を練ってくるはずです。その時を期待して、開発のテクニックの技術を磨いたり、アプリを開発しておくのもありでしょう。未来を見据えた投資です。&lt;br /&gt;　ただし、googleはappleとはビジネスモデルが全く異なるので、androidの普及に失敗してもgoogleにはほとんど影響がないことも知っておきましょう。失敗だと判断した時点でandroidOSを切り捨ててしまうことも考えられます。&lt;br /&gt;&lt;br /&gt;ざっと考えられる収益モデルは上記のような感じです。&lt;br /&gt;　ただ、私がスマートフォンアプリで利益を稼げるだろうなあと思う一番の方法は、最近話題のマーケティング3.0の視点ではないかなと思っています。&lt;br /&gt;&lt;br /&gt;さて、今回はこれで終了です。&lt;br /&gt;次回がとりあえず今回のテーマの最後になります。&lt;br /&gt;&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6515023354799728190?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6515023354799728190/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6515023354799728190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6515023354799728190'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone5.html' title='androidアプリとiphoneアプリを開発して思ったこと　その5'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8633760085637767842</id><published>2010-09-18T04:44:00.003+09:00</published><updated>2010-09-18T05:51:25.747+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>オリジナルandroidアプリ【ダイレコ】のCMを作成してみました</title><content type='html'>&lt;a href="http://cmizer.com"&gt;コマーシャライザー&lt;/a&gt;というサイトを使って、オリジナルandroidアプリのCMを作成してみました。&lt;br /&gt;以下が、そのCMです。&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript" charset="UTF-8" src="http://cmizer.com/javascripts/version02/swfobject.js"&gt;&lt;/script&gt;&lt;script type="text/javascript" charset="UTF-8" src="http://cmizer.com/javascripts/version02/cmizer_1_0_1.js"&gt;&lt;/script&gt;&lt;div id="cmizer-movie-113903" style="margin-bottom:3px;width:420px;height:390px;"&gt;&lt;noscript&gt;&lt;a href="http://cmizer.com/movie/113903?vos=ncomprsbz10020901"&gt;簡単フラッシュ動画制作サイト：コマーシャライザー：androidアプリ【ダイレコ】CM&lt;/a&gt;&lt;/noscript&gt;&lt;/div&gt;&lt;script type="text/javascript"&gt;var cm_option = new Object();cm_option["auto_play"]="true";cm_option["repeat_play"]="false";cm_option["mute"]="true";cm_option["volume"]="0";cm_option["jump_action"]="normal";SetPlayer("cmizer.com/swfs/cmizer_player.swf",420,390,"cmizer.com/cm/movie/r/mj/uh/c6x93.xml","113903", cm_option);&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;驚くことに、上記のCMはフリーで作成することができます。&lt;br /&gt;なんとも凄い時代になったものだと感心すると同時に、半ば呆れてしました。&lt;br /&gt;テレビなど既存のメディアが消えるのも、そう遠い未来のことではなさそうです。個人がブランドを築き、市場の中で企業とガチンコで勝負する時代がもうすぐそこまできてるようです。&lt;br /&gt;　ただ一つ懸念なのは、IT業界に従事している人間以外が、この飛躍的な技術の進歩についていけるのかということです。&lt;br /&gt;　これらの技術を使いこなせる知識があるのとないのでは、全く違う世界を生きることになってしまうでしょう。経済格差よりも激しい、技術格差の時代が来るのかもしれませんね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8633760085637767842?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8633760085637767842/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidcm.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8633760085637767842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8633760085637767842'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidcm.html' title='オリジナルandroidアプリ【ダイレコ】のCMを作成してみました'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-37466988281835158</id><published>2010-09-16T08:06:00.000+09:00</published><updated>2010-09-16T08:08:57.047+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　その４</title><content type='html'>～技術者視点で見るスマートフォンアプリ開発 ～の巻&lt;br /&gt;&lt;br /&gt;さてさて、今回はiphoneアプリの開発とandoidアプリの開発を技術者目線から見ていきたいと思います。&lt;br /&gt;&lt;br /&gt;いきなり結論から入りますが、開発しやすいのはiphoneアプリだと思います。&lt;br /&gt;ただ、開発者・エンジニアとして魅力を感じるのはandroidです。androidはまだまだ発展途上であり、無限の可能性とパワーを感じます。&lt;br /&gt;&lt;br /&gt;iphoneは本当にiphoneアプリためだけの技術を習得するという感じです。&lt;br /&gt;マイナーなobjective-C + Cocoaという開発環境なので、余計にそういう印象を強めます。&lt;br /&gt;また、一番のメジャー言語javaで開発できるandroidと違い、objective-Cは汎用性がない印象です。&lt;br /&gt;javaなら他分野の開発スキルの向上にもつながりますからなおさらそういう思いが強くなりますね。&lt;br /&gt;&lt;br /&gt;私もこれまではobjective-Cを使ったことがなく、iphone開発が初めての経験でした。&lt;br /&gt;しかし、最初こそ癖があって少し戸惑いましたが、objective-Cは良い言語だと思います。&lt;br /&gt;私は仕事ではjavaで開発を行っているプログラマなのですが、個人的には凄く気に入りました。&lt;br /&gt;ちなみに私の好きな言語は、&lt;br /&gt;Ruby &gt; scala &gt; objective-C =&gt; java &gt; その他言語 &gt;&gt;&gt;&gt;&gt;&gt; php&lt;br /&gt;といったとこでしょうか。&lt;br /&gt;&lt;br /&gt;今後、iphoneの開発はobjective-C + Cocoa以外では不可能になるようです。&lt;br /&gt;これに対し、多くの開発者がこのアップルの方針を批判しています。&lt;br /&gt;しかし、私にはこのアップルの決断が間違っているとは思えません。&lt;br /&gt;アップルの経営方針は、不特定多数のみんなに使ってもらう製品の開発というより、アップルを支持してくれるユーザを満足させることにあるように思えます。&lt;br /&gt;&lt;br /&gt;となると、メーカーが想定できないミスを混入させないために、環境を限定してしまうのは、ひとつの手段として有効です。ユーザーもそんなアップルを支持しているのですから、開発者が口を出す問題ではありません。&lt;br /&gt;　言語が使えないなら、覚えれば良いのです。きちんと基礎を身につけて経験を積んだプログラマーなら、すぐに使いこなせるようになる言語です。&lt;br /&gt;&lt;br /&gt;一方のandroidはJavaで開発できるので、敷居が低く、開発しやすいです。何が疑問があっても、ググレば多くの解決手段が発見できます。今後scalaでも開発できるようになれば、工数もぐっと減るだろうし、なによりどんどん進化していくので楽しいです。&lt;br /&gt;　ただ、間口は広いですが、開発の難易度は高いです。javaでありながら、メモリの使用には注意を払う必要がありますし、バックグラウンドでの処理はかなり複雑です。また、一般的に良いとされるjavaのコーディング方法が、良い方法でないのもマイナスです。javaだからこう書くのがいい。という既存の方法でコードを書くとかなりパフォーマンスの悪いアプリになります。&lt;br /&gt;&lt;br /&gt;つまり、どちらのアプリを開発するにしろ開発者は結局勉強しなければいけないのです。&lt;br /&gt;となると、やはりiphoneのxcodeを使った特殊環境での開発に問題があるとは思えません。&lt;br /&gt;確かにobjective-Cには技術としての将来性や汎用性はありませんが、安定したアプリを使いたいユーザーと、提供したいappleの立場を考えると、appleのやり方は正しいです。&lt;br /&gt;&lt;br /&gt;ジョブスは傲慢だし、腹黒だし、性格最悪だけど、この慧眼ぶりだけは本物ですね。&lt;br /&gt;実際、iphoneアプリで生活費を稼ぐのは難しいですが、コーヒー代くらいなら稼いでる人は多いでしょう。&lt;br /&gt;androidアプリでは明治時代で米も買えませんが・・・。どちらにしろ、生活するのは無理という点では同じですけどね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さて、次回はスマートフォンアプリでお金をかせぐ方法を考えてみましょう。&lt;br /&gt;&lt;br /&gt;でわ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-37466988281835158?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/37466988281835158/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/37466988281835158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/37466988281835158'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone.html' title='androidアプリとiphoneアプリを開発して思ったこと　その４'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3865452948429532742</id><published>2010-09-07T23:54:00.000+09:00</published><updated>2010-09-07T23:55:28.245+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>AndroidのopenGLが理解できないので愚痴</title><content type='html'>openGLで立方体の作成ができません。&lt;br /&gt;GLU.gluLookAt()を呼び出すと、画面に何も表示されない。&lt;br /&gt;どうやるんだ…。わからん、わからん…。iphoneで試してみるか…。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3865452948429532742?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3865452948429532742/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidopengl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3865452948429532742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3865452948429532742'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidopengl.html' title='AndroidのopenGLが理解できないので愚痴'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-6432954716394478840</id><published>2010-09-04T10:43:00.003+09:00</published><updated>2010-09-04T10:52:30.920+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　その3</title><content type='html'>～フリーのandoroidに潜む危険　タダメシには気をつけろ ～の巻&lt;br /&gt;&lt;br /&gt;さて、今回はスマートフォンアプリというよりは、andoroidを中心とした話をしましょう。&lt;br /&gt;&lt;br /&gt;すでにご存知の方も多いでしょうが、海外ではandroidがiphoneの市場を超えました。&lt;br /&gt;2，3年後には、androidの市場はiphoneの2～3倍くらいまで膨れ上がるでしょう。&lt;br /&gt;これはかなりの確率で間違いないと思います。だからこそ、色々な会社が今後はandoidに注力しようという戦略をとり始めたのだと思います。&lt;br /&gt;&lt;br /&gt;だが、しかし！！&lt;br /&gt;その考えは企業戦略として、間違ってます。&lt;br /&gt;と、個人的に思います。&lt;br /&gt;&lt;br /&gt;androidの市場がなぜここまで加速して広がっているか。&lt;br /&gt;それはandroidOSが「フリー」で「google」だからに他なりません。&lt;br /&gt;なかでも、iphoneのように銭ゲバ性悪王・ジョブス様が搾取していないのが最大のandroidの魅力なのです。&lt;br /&gt;　アプリにもこのgoogleのスタイルは表れていて、アップルのような審査もありません。&lt;br /&gt;閉鎖的なアップルと違い、androidはオープンです。&lt;br /&gt;つまり企業の考えとして、&lt;br /&gt;&lt;br /&gt;androidはフリーOSでグーグル&lt;br /&gt;&lt;br /&gt;↓&lt;br /&gt;&lt;br /&gt;androidは売れる（実際広がっている）&lt;br /&gt;&lt;br /&gt;↓&lt;br /&gt;&lt;br /&gt;andoirdアプリは儲かる&lt;br /&gt;&lt;br /&gt;という風が吹けば桶屋が儲かる的な発想なのでしょう。&lt;br /&gt;&lt;br /&gt;だが、しかし！！&lt;br /&gt;この考えも企業戦略として、間違ってます。&lt;br /&gt;しかも、アプリで金儲けという視点から考えているなら、とんでもない大誤りです。&lt;br /&gt;&lt;br /&gt;androidを使うほとんどのユーザは、googleのサービスを中心に利用しているし、期待しているでしょう。&lt;br /&gt;実際、私はそうです。Gmail, picasa等。androidの価値はgoogleであることです。&lt;br /&gt;そしてそのサービスは基本「フリー」です。googleはそういうスタンスの会社です。今までもそうでしたし、これからもそうでしょう。ユーザにとって、googleのサービスは「フリー」であることは当たりまえになっています。ほとんどのユーザーもそういう固定概念をすでに抱いているでしょう。&lt;br /&gt;　だから、androidのアプリを使うときも、「フリー」であるアプリを無意識に探します。&lt;br /&gt;これは実際数値にも表れていて、「フリー」でないとアプリは使われない傾向にあります。androidアプリはiphoneアプリと比較すると、異常にフリーアプリの割合が高いのです。&lt;br /&gt;&lt;br /&gt;androidアプリ市場は、iphoneアプリの市場とは全く違います。&lt;br /&gt;Appleという会社を信用し、それに対価を払っているiphoneユーザが溢れる市場と、ソフトウェアサービスはフリーが基本と考えるgoogleユーザの市場は全然違うのです。&lt;br /&gt;&lt;br /&gt;しかし現実には、androidはappleの3倍以上の市場が見込めから、きっとチャンスも3倍以上。&lt;br /&gt;そう考えているコンサルタント、マネージャー、経営者は多いのではないでしょうか。&lt;br /&gt;&lt;br /&gt;でも、ありえません。&lt;br /&gt;有名なドラッガーのマネジメント本「基本と原則」には、&lt;br /&gt;マーケティングは「何を売りたいか」ではなく、「顧客は何をかいたいか」を問う。&lt;br /&gt;とあります。&lt;br /&gt;これにandroidのマーケティングを当てはまると、&lt;br /&gt;androidのマーケットで望まれているのは、&lt;br /&gt;「フリー」で「googleのような良質サービス」&lt;br /&gt;ということが当てはまります。&lt;br /&gt;&lt;br /&gt;となると、androidでは、アプリはフリーであることが重要となります。&lt;br /&gt;そうなると、どこの企業も、広告という形態でお金を稼ごうという安易な発想になるでしょう。&lt;br /&gt;とすると、現在androidアプリで利用できるのは、admobという広告サービスです。&lt;br /&gt;では、admobはどれくらいの利益を生みだす可能性があるのでしょうか。&lt;br /&gt;&lt;br /&gt;実は、私が趣味で作成したandroidアプリ「ダイレコ」はadmobの広告を利用しています。&lt;br /&gt;このアプリは、2010/07/05にリリースし、最近versionUpも行いました。&lt;br /&gt;まだ完成度も低く（ごめんなさい。完成度あがるまで、もうちょっと待っててね。）人気がないのが現状ですが、現在2010/09/04でダウンロード数が400程になります。&lt;br /&gt;&lt;br /&gt;では、このアプリを公開して2ヶ月。どの位の広告収入があったか、特別にここで発表しちゃいます。&lt;br /&gt;&lt;br /&gt;驚く無かれ、その金額。なんと、&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;$0.19&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;です。&lt;br /&gt;円高の現在１ドル=83円のレートで計算を行うと、&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;15円&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;の収入になります。&lt;br /&gt;&lt;br /&gt;モニターの前で爆笑した貴方。もしくはすでに起業とか、会社の一大事業としてぶちあげて青くなった貴方。本番はこれからですよ。もっと衝撃の事実を教えましょう。&lt;br /&gt;私は、redmineという管理ソフトで工数をきっちり記録しています。&lt;br /&gt;なので、特別に時給換算もして差し上げましょう。&lt;br /&gt;今のバージョンまでに費やした時間は総数350時間です。&lt;br /&gt;&lt;br /&gt;つまり！&lt;br /&gt;&lt;br /&gt;15/350 = 0.0428…。&lt;br /&gt;&lt;br /&gt;なんと、&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;時給にして4銭&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;ちなみに、明治10年の白米1kgが約5銭らしいのです…。&lt;br /&gt;なんという最強最悪のブラック労働。派遣とか・アルバイトとかそういう次元じゃあありません。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;缶拾いのほうが稼げる&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;これが現状のandroidアプリってやつなのです。&lt;br /&gt;私は趣味の一環としてやってるから自虐的に笑って話せますが、これが企業として考えると全く笑えないでしょう。&lt;br /&gt;　でも最近、Bi○lobeという会社がandroidアプリで100億円稼ぎたいと豪語しましたね。&lt;br /&gt;&lt;br /&gt;投資家のみなさん。このサイトを読んでから、投資するか冷静に決めましょうね。&lt;br /&gt;&lt;br /&gt;まだまだ書きたい事は沢山ありますが、今回はここまでです。&lt;br /&gt;&lt;br /&gt;次回はandroidとiphoneを開発者の視点で見てみようかと思います。&lt;br /&gt;&lt;br /&gt;でわ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-6432954716394478840?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/6432954716394478840/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone3.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6432954716394478840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/6432954716394478840'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/09/androidiphone3.html' title='androidアプリとiphoneアプリを開発して思ったこと　その3'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-7417684794994159152</id><published>2010-08-29T22:43:00.004+09:00</published><updated>2010-08-29T22:52:09.934+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　その2</title><content type='html'>&lt;p&gt;～スマートフォンアプリはお金にならない。&lt;wbr&gt;とりあえず冷静になって現実を見ろ ～の巻&lt;/p&gt; &lt;p&gt;iphoneアプリやandroidアプリは基本儲かりません。&lt;br /&gt;最近、&lt;wbr&gt;iphoneアプリでお金を稼ぐ灘の高校生が話題になりましたね&lt;wbr&gt;。&lt;br /&gt;でも、メディアが取り上げるのは極一部の人です。&lt;wbr&gt;しかもこれは陽の部分。&lt;br /&gt;実際、iphone長者とかになれるのは、プロ野球選手とか、&lt;wbr&gt;作家とかになるくらいの確率なのが現実だと思います。&lt;/p&gt; &lt;p&gt;さらに、androidアプリの場合はもっとひどいです。&lt;br /&gt;iphone長者になった人はいても、&lt;wbr&gt;android長者になった人は聞いたことがありません。&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;a href="http://www.excite.co.jp/News/it_g/20100826/Itmedia_news_20100826054.html"&gt;最近の記事&lt;/a&gt;で、androidの「Advanced Task Manager」を作成したアプリの開発者は、&lt;wbr&gt;年間10万ドル以上を稼ぐ見通しだということですが、&lt;wbr&gt;iphoneアプリに比べるとだいぶ規模が落ちますね。&lt;br /&gt;　しかも、このアプリは、&lt;wbr&gt;androidの市場シェアがiphoneの市場を越えた海外市&lt;wbr&gt;場での話です。&lt;br /&gt;日本国内でのシンデレラストーリーはまだ存在してません。&lt;/p&gt; &lt;p&gt;それもそのはず、&lt;wbr&gt;androidMarketの現状は以下のような状況なのです。&lt;/p&gt; &lt;ul&gt;&lt;li&gt;50の壁。有料アプリの76%は販売本数50本未満にとどまる。&lt;/li&gt;&lt;li&gt;99の法則。有料アプリの値付けの最頻値は0.99ドルと安価。&lt;wbr&gt;次が1.99ドル。値付けへの下方圧力は強い。&lt;/li&gt;&lt;li&gt;30の事実。実体験では、有料アプリのキャンセル（返品）&lt;wbr&gt;率は34%と高い。&lt;/li&gt;&lt;li&gt;有料アプリの比率は43%。&lt;/li&gt;&lt;li&gt;英語圏が圧倒的に優勢。コメントの分布を見ると、&lt;wbr&gt;英語によるコメントが81.3%、日本語によるコメントは1.&lt;wbr&gt;1%。アクティブユーザーは英語圏に集中している。&lt;/li&gt;&lt;li&gt;ドル建てが優勢。有料アプリの値付けは、ドル建て、&lt;wbr&gt;円建てなどを選べるが、ドル建てが70.86%、ユーロが13.&lt;wbr&gt;89%、UKポンドが9.20%、円が6.05%.&lt;/li&gt;&lt;li&gt;日本が強いのはコミック。&lt;wbr&gt;コミックのカテゴリでは円建てアプリが54%&lt;wbr&gt;と過半数を越えている&lt;/li&gt;&lt;/ul&gt;       &lt;p&gt;参考データ：&lt;a href="http://hoshi.air-nifty.com/diary/2010/08/android76500992.html" target="_blank"&gt;http://hoshi.air-nifty.&lt;wbr&gt;com/diary/2010/08/&lt;wbr&gt;android76500992.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;とんでもなく、厳しい数値ですね。&lt;wbr&gt;スーパーブラックマーケットです。&lt;br /&gt;現状では、&lt;wbr&gt;とてもビジネスとしてなりたっているとはいえません。&lt;br /&gt;今androidアプリの開発を行うのは、未来への投資であり、&lt;wbr&gt;ボランティアだと割り切るくらいの覚悟が必要です。&lt;/p&gt; &lt;p&gt;　このようなぺんぺん草も生えてないような状況にも関わらず、&lt;wbr&gt;これからはandroidの時代だ！と言い切る識者の多いこと多いこと。根拠はなんなのでしょうか？&lt;/p&gt;&lt;p&gt;Googleというブランドを脊椎反射に信仰してるだけなのでは&lt;wbr&gt;ないでしょうか。&lt;/p&gt;&lt;p&gt;&lt;br /&gt;私に言わせれば、androidはまだ時期尚早のプラットフォームです。&lt;br /&gt;確かに、androidは一技術者・開発者として見ると、&lt;wbr&gt;iphoneの10倍くらい魅力があります。&lt;br /&gt;でも、ユーザー視点でみると、買う理由がないと思います。&lt;br /&gt;androidはOSが3.&lt;wbr&gt;x位になってようやくiphoneとまともに戦えるようになるの&lt;wbr&gt;ではないでしょうか。&lt;/p&gt; &lt;p&gt;ちょっと長くなってしまったのでこの続きは次回にします。&lt;br /&gt;せっかくなので、&lt;wbr&gt;次回はandroidアプリを中心にお話をしていきたいと思いま&lt;wbr&gt;す。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-7417684794994159152?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/7417684794994159152/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidiphone2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7417684794994159152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/7417684794994159152'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidiphone2.html' title='androidアプリとiphoneアプリを開発して思ったこと　その2'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8028380215688188056</id><published>2010-08-24T14:58:00.000+09:00</published><updated>2010-08-24T14:59:17.748+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強9</title><content type='html'>今日はclassとobjectの扱い方を学ぶ&lt;br /&gt;・対応したクラスとオブジェクトを、コンパニオンクラス・コンパニオンオブジェクトと呼ぶ。&lt;br /&gt;コンパニオンクラスをもたないオブジェクトは、スタンドアロンオブジェクトと呼ぶ。&lt;br /&gt;&lt;br /&gt;スタンドアロンオブジェクトでmain関数がよべない…。&lt;br /&gt;scalaプログラムを実行するには、&lt;br /&gt;スタンドアロンシングルトンオブジェクトの名前を指定するとかなんとか。よくわかんね～。&lt;br /&gt;だが、objectを作成して実行すると成功。&lt;br /&gt;動いても概念がわからないので、なんか納得いかない。&lt;br /&gt;&lt;br /&gt;・applicationトレイトなるものがmainの代わりになるようだ。&lt;br /&gt;ただし、&lt;br /&gt;コマンド引数がとれない&lt;br /&gt;マルチスレッドプログラムで使えない&lt;br /&gt;というデメリットがあるそうだ。&lt;br /&gt;&lt;br /&gt;・型はjavaとほぼ一緒だが、シンボルリテラルなるものがある。よくわからんので放置。&lt;br /&gt;これはある程度理解してから、本を買って理解したほうがよい。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1:00minites&lt;br /&gt;ネットのみの情報だと、これ以上の理解は厳しいかな。やっぱ本が必要だ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8028380215688188056?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8028380215688188056/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala9.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8028380215688188056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8028380215688188056'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala9.html' title='Scalaの勉強9'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2005169943671277310</id><published>2010-08-23T14:52:00.000+09:00</published><updated>2010-08-23T14:54:51.657+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強8</title><content type='html'>今日は2Dレイアウトライブラリーの勉強&lt;br /&gt;&lt;br /&gt;・ファクトリーメソッド&lt;br /&gt;インスタンスの生成をサブクラスに委ねる。&lt;br /&gt;前に勉強したのに完全に忘れてます…。&lt;br /&gt;&lt;br /&gt;・宣言だけで定義のない抽象メソッドは、abstract修飾子はつけなくてもよい。&lt;br /&gt;&lt;br /&gt;・空括弧省略メソッドは、フィールドで定義してもよい。また、空括弧省略でフィールドや&lt;br /&gt;メソッドを区別しない使えるようにすることを、「統一形式アクセスの原則」という。&lt;br /&gt;&lt;br /&gt;違いは、&lt;br /&gt;一般的に、フィールドで実装すると初回に計算結果を保持するので、値の呼び出しが早い分メモリを確保してしまう。&lt;br /&gt;メソッドであれば、毎回計算するので呼び出しに若干時間がかかる分メモリを節約できる。&lt;br /&gt;&lt;br /&gt;・クラスのメソッドの実行方法をまだ勉強してなかった・・・。今まで全部objectでやっていた。&lt;br /&gt;だが、違いがわからないと厳しくなってきたので、メモ。&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100610/1276142337&lt;br /&gt;&lt;br /&gt;・javaと違って静的メンバー(staticな変数やメソッド)がもてない。代わりにシングルトンオブジェクトをもっている。scalaは完全なオブジェクト指向だから…らしい。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1:00minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100609/1276056014&lt;br /&gt;よくわからないことが多すぎる。初心者本を購入して、それで基礎を固めるべきかな。&lt;br /&gt;体系立ててやらないときつい&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2005169943671277310?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2005169943671277310/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala8.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2005169943671277310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2005169943671277310'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala8.html' title='Scalaの勉強8'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-697153643733779934</id><published>2010-08-23T00:00:00.002+09:00</published><updated>2010-08-23T00:03:46.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='世間を語る'/><title type='text'>androidアプリとiphoneアプリを開発して思ったこと　その１</title><content type='html'>～スマートフォンアプリで起業を勧める愚かな評論家様達～の巻&lt;br /&gt;&lt;br /&gt;オリジナルのandroidアプリを公開してから約一ヶ月半。最初のupdateも終了し、&lt;br /&gt;次なるandroidアプリとiphoneアプリの開発にとりかかっています。&lt;br /&gt;&lt;br /&gt;会社の仕事のほうでも半年以上androidアプリとiphone(ipad)アプリ開発には色々と関わっているので、色々なことがわかってきました。というわけで、現時点でのスマートフォンアプリの現状について何回かにわけてちょっと語ってみたいと思います。&lt;br /&gt;&lt;br /&gt;まず思うのは、最近のiphoneの人気の凄さです。私はxperiaを利用しているのですが、周囲の人はほとんどiphoneを使っています。これから買う予定だという人も多いです。まあ、これは当然です。xperiaユーザの私が言うのもなんですが、はっきりいって現在のandroid端末とiphoneでは勝負になりません。開発していて端末を触ってると、断然iphoneのほうが完成度が高いことがわかります。私がxperiaを使ってるのは、電波の問題だけで、プラットフォームの完成度としては、現時点(2010/08/19)では、androidは話になりません。このことはまたあとで詳しく掘り下げます。&lt;br /&gt;&lt;br /&gt;そして、最近ではipadも発売され、現在apple様は超バブリーです。猫も杓子もiphoneとipadを大絶賛。&lt;br /&gt;macユーザーでありながらxperiaを使っている私は、疎外感を感じてしまいます。&lt;br /&gt;&lt;br /&gt;そしてこのブームにのっかっているのが、偉く賢い評論家様や、企業コンサルタント様達です。アップルのビジネスモデルを大絶賛し、iphone,ipadアプリで起業をする大チャンスだと声高に叫んでいます。&lt;br /&gt;そして、さらにその中にandroidアプリも加えて、&lt;br /&gt;「今が起業の大チャンスだ。世界にうってでよ、若き日本人達よ！」と&lt;br /&gt;煽っています。&lt;br /&gt;&lt;br /&gt;そんな熱い状況を見て私は思うのです。&lt;br /&gt;「実際に現場で物を作らない（作れない・作った事のない）人間は、言うことだけは立派だな」&lt;br /&gt;と。&lt;br /&gt;まあ、それが評論家やコンサルタントのお仕事なわけですけどね。&lt;br /&gt;&lt;br /&gt;半年以上にわたるiphoneアプリやandroidアプリの開発でわかったことがあります。それは、&lt;br /&gt;「現在のスマートフォンアプリ開発では、appleとgoogle以外が金を稼ぐのは難しい」&lt;br /&gt;ということです。&lt;br /&gt;&lt;br /&gt;それなのに、評論家やコンサルタント様達は、無責任に起業や金を得る千載一遇のチャンスだといい続けてます。&lt;br /&gt;これは銀行預金は金利が低いから、株や投資信託で運用したほうが良いとサブプライム前に言い放っていた腐れ金融マン達と同レベルの戯言です。&lt;br /&gt;&lt;br /&gt;というわけで、次回はなぜスマートフォンアプリの開発が金にならないかについて書こうと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-697153643733779934?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/697153643733779934/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidiphone.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/697153643733779934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/697153643733779934'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidiphone.html' title='androidアプリとiphoneアプリを開発して思ったこと　その１'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2862910880107238824</id><published>2010-08-22T23:43:00.002+09:00</published><updated>2010-08-22T23:47:02.321+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>androidアプリリリース</title><content type='html'>androidアプリのversion1.1.0をリリースしました。&lt;br /&gt;変更点が多くて時間がかかりましたが、前より使いやすいアプリになったと思います。&lt;br /&gt;今後も、もっと使いやすいように改良を重ねていくつもりです。&lt;br /&gt;なんか追加機能が欲しいとか、こうして欲しいとか意見がある方は、ブログでもマーケットのコメント欄にでも書き込んでいただけるとフィードバックできてありがたいです。&lt;br /&gt;&lt;br /&gt;でわ&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2862910880107238824?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2862910880107238824/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2862910880107238824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2862910880107238824'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/android.html' title='androidアプリリリース'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2161187887423821502</id><published>2010-08-19T12:42:00.003+09:00</published><updated>2010-08-19T12:53:01.764+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ開発メモ'/><title type='text'>iphoneアプリ開発メモ1</title><content type='html'>ブログにiphoneプログラミングに関することを書くのは今回が初めてです。&lt;br /&gt;&lt;br /&gt;androidアプリのversion1.1.0の開発とテストが終了しました。&lt;br /&gt;問題がなければ、週末にandroid marketにupdateできそうです。&lt;br /&gt;&lt;br /&gt;androidアプリは今後もupdateしていく予定ですが、次の新作アプリの開発はandroidだけでなくiphoneにも対応したいので、はじめてのiphone3プログラミングをちょこちょこ読んでは実装しています。&lt;br /&gt;&lt;br /&gt;しかし、objective-Cの経験がないので、あいまいな理解な箇所が多いので、詳細objective-C2.0も読み進めながら理解を深めていこうと思います。&lt;br /&gt;以下は、そのメモです。&lt;br /&gt;基本java使いなので、javaと比較しながらのメモ書きです。&lt;br /&gt;&lt;br /&gt;３章　「基本的なインタラクションを処理する」のまとめ&lt;br /&gt;&lt;br /&gt;@propertyについて&lt;br /&gt;詳細objective-C2.0p286 - P296&lt;br /&gt;宣言プロパティ。&lt;br /&gt;@interface(インターフェース部)で使用する。&lt;br /&gt;javaでいうsetter, getterである。&lt;br /&gt;ただし、@propertyは宣言を行うだけなので、&lt;br /&gt;プロパティがインスタンス変数で実現されているか&lt;br /&gt;どうかは関係ない。&lt;br /&gt;オプションの指定で挙動が変化する。&lt;br /&gt;オプションがない場合は、読み書き可能&lt;br /&gt;&lt;br /&gt;はじめてのiphoneプログラミングでは、いきなり&lt;br /&gt;@property(nonatomic, retain) IBOutlet UIWindow *window&lt;br /&gt;とでてきた。&lt;br /&gt;本の中では、この部分が激しく無視されていたが、詳細objective-C2.0&lt;br /&gt;のp293 - p296に詳しく記述されていた。&lt;br /&gt;&lt;br /&gt;retainはオブジェクトを保持して設定するオプション。&lt;br /&gt;このオプションはプロパティがオブジェクトで、カウンタ管理方式を利用している場合に指定できる。&lt;br /&gt;iphoneでは、ガーベジコレクションが使えず、リファレンスカウンタ&lt;br /&gt;（参照カウンタ）方式でメモリ管理を行っている（理由はここでは&lt;br /&gt;説明しない）。&lt;br /&gt;なので、iphoneではp295の図12-3setterとgetter構成されることになる。&lt;br /&gt;&lt;br /&gt;又、デフォルトでは、assignオプションが指定される。なので、iphone&lt;br /&gt;での実装の場合は、属性としてretainを指定してやらなければばらない&lt;br /&gt;のである。&lt;br /&gt;&lt;br /&gt;nonatomicオプションは、同時に実行されるかもしれないメソッド定義をつくるという指示である。このnonatomicオプションを指定しないと、アクセサの定義には@synchronizedというコンパイラ指示子が含まれる。&lt;br /&gt;&lt;br /&gt;@synthesizeについて&lt;br /&gt;コンパイラ指示子&lt;br /&gt;インターフェース部で宣言した属性に応じてアクセサが構成される。&lt;br /&gt;@implementation 〜 @endまでのどこかに記述する。&lt;br /&gt;また、通常のメソッドと異なり、インターフェース部に@property&lt;br /&gt;の宣言がなければ、@synthesizeを記述することができない。&lt;br /&gt;&lt;br /&gt;実際のインスタンス変数名と異なる名前をプロパティとして外部に提供&lt;br /&gt;することも可能。&lt;br /&gt;&lt;br /&gt;メソッドについて&lt;br /&gt;ざっくりとした説明ではあるが、&lt;br /&gt;- (戻り値の型)メソッド名:引数の型&lt;br /&gt;が基本の形。&lt;br /&gt;メソッド宣言で型を指定しないと、id型であるとみなされる。&lt;br /&gt;&lt;br /&gt;メッセージ式について&lt;br /&gt;詳細objective-C2.0p18-p19&lt;br /&gt;オブジェクトはどのクラスに属するものでも、idという特別な型で表現される。&lt;br /&gt;id obj;&lt;br /&gt;のように。&lt;br /&gt;これはメッセージ式と呼ばれる。&lt;br /&gt;メッセージに引数がある場合は、コロン「:」をつける。&lt;br /&gt;&lt;br /&gt;[sender  titleForState:UIContorolStateNormal];&lt;br /&gt;&lt;br /&gt;ってな感じ。&lt;br /&gt;二つ以上の引数がある場合は、コロン「:」をつけた別のキーワード&lt;br /&gt;を追加する。あるいは、キーワードなしでコロン「:」だけを追加する。&lt;br /&gt;&lt;br /&gt;インスタンス生成と初期化&lt;br /&gt;詳細objective-C2.0p20-p21&lt;br /&gt;[クラス名 alloc]&lt;br /&gt;[NSString alloc]&lt;br /&gt;のように記述する。&lt;br /&gt;&lt;br /&gt;ただし、このように生成されたインスタンスは、メモリ上に必要な領域が&lt;br /&gt;確保されただけである。なので、通常はこの直後に初期化が必要。&lt;br /&gt;&lt;br /&gt;[[クラス名 alloc ] init ];&lt;br /&gt;[NSString alloc] initWithFormat];&lt;br /&gt;のように記述する。&lt;br /&gt;&lt;br /&gt;cocoaでは、イニシャライザはinitか、initから始まるメソッド名を&lt;br /&gt;もつものが多い。&lt;br /&gt;&lt;br /&gt;デリゲートについて&lt;br /&gt;委譲処理のこと。javaでもadapterパターンなどでよく利用しますね。&lt;br /&gt;UIApplicationの代理として、UIApplicationDelegateを使う。&lt;br /&gt;もっと進んだときに理解を進めるべきかな。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上。&lt;br /&gt;３章　「基本的なインタラクションを処理する」のまとめの終了。&lt;br /&gt;良い本ですが、本当のプログラム初心者が理解できるかは結構疑問な本だと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2161187887423821502?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2161187887423821502/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/iphone1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2161187887423821502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2161187887423821502'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/iphone1.html' title='iphoneアプリ開発メモ1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5484095637985843847</id><published>2010-08-18T15:05:00.000+09:00</published><updated>2010-08-18T15:06:21.724+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強7</title><content type='html'>・パターンガードの勉強&lt;br /&gt;記述順が大事&lt;br /&gt;&lt;br /&gt;・シールドクラスがある&lt;br /&gt;パターン漏れが防げる&lt;br /&gt;&lt;br /&gt;・Option型なるものがある&lt;br /&gt;実際の値を持っているSome()&lt;br /&gt;と&lt;br /&gt;値が無いことを表すNone&lt;br /&gt;がある&lt;br /&gt;&lt;br /&gt;活用方法としては、渡される値がnullになる可能性がありそうな場合はOption型をつかうとよろしい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1:30minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100818/1282103955&lt;br /&gt;タプルのところから。まだまだ文法を理解していない。&lt;br /&gt;しかし、railsで自分のサイトを構築する予定だったけど、scalaとliftを使ってGEAを利用して勉強するのもいいかなと思い始めてきた。&lt;br /&gt;どうしようかなあ。設計があるていど終わるまでに決めないと。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5484095637985843847?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5484095637985843847/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala7.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5484095637985843847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5484095637985843847'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala7.html' title='Scalaの勉強7'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3176014544009565820</id><published>2010-08-17T15:08:00.000+09:00</published><updated>2010-08-17T15:09:42.603+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強6</title><content type='html'>・タプルという概念が存在する&lt;br /&gt;複数の値をカンマ区切りで並べて括弧で囲むと、タプルになる。&lt;br /&gt;_1, _2というようなフィールド名でアクセスできる。&lt;br /&gt;・束縛変数？なるものがある。&lt;br /&gt;つーか、詳細な資料が見つからん。&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1:30minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100817/1282017571&lt;br /&gt;次回はパターンガードの勉強から&lt;br /&gt;ネットだけの勉強では理解が浅く、物足りなくなってきた。&lt;br /&gt;コップ本が欲しいけど、railsの本を買うので今はやめとこう…。もっと知識がついてからだな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3176014544009565820?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3176014544009565820/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala6.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3176014544009565820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3176014544009565820'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala6.html' title='Scalaの勉強6'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-8965536545950433006</id><published>2010-08-16T15:01:00.000+09:00</published><updated>2010-08-16T15:02:13.798+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強5</title><content type='html'>Listの勉強&lt;br /&gt;・変数にNilを入れてforeachで回しても、javaのようなnullpoiterにはならない。&lt;br /&gt;・値の追加ができない…。is not menber of …とでる。nilを宣言してから追加ができないのか？？&lt;br /&gt;時間がないので次回。&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;40minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/unageanu/20080518&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-8965536545950433006?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/8965536545950433006/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala5.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8965536545950433006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/8965536545950433006'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala5.html' title='Scalaの勉強5'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5484009008949639017</id><published>2010-08-16T14:14:00.000+09:00</published><updated>2010-08-16T14:15:25.605+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>Androidアプリケーション　Junitテストの作り方　～その２～</title><content type='html'>開発を行うと、かならず作ることになるのがutilクラスではないでしょうか。&lt;br /&gt;機能テストのやり方は紹介しましたが、普通の単体テストの紹介はまだだったので紹介します。&lt;br /&gt;&lt;br /&gt;１、まずは機能テストの時と同じように、テストパッケージを作成します。&lt;br /&gt;&lt;br /&gt;２、testクラスを作成します。&lt;br /&gt;&lt;br /&gt;テストクラス&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class SampleUitlsTest extends AndroidTestCase {&lt;br /&gt;&lt;br /&gt; public void testGet() {&lt;br /&gt;  String result = SampleUtils.get();&lt;br /&gt;  assertEquals("aaaa", result);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;テストされるクラス&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;public class SampleUtils {&lt;br /&gt; &lt;br /&gt; public static String get() {&lt;br /&gt;  return "aaaa";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;このとき注意するのは、AndroidTestCaseを継承していることです。&lt;br /&gt;Utilityはstaticメソッドのテストになると思います。&lt;br /&gt;なので、Activityのライフサイクルをテストする必要がないので、AndroidTestCaseを使用します。&lt;br /&gt;&lt;br /&gt;３、あとはAndroid Unit Testを実行すればテストを行えます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5484009008949639017?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5484009008949639017/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidjunit.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5484009008949639017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5484009008949639017'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/androidjunit.html' title='Androidアプリケーション　Junitテストの作り方　～その２～'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-2481698316361629387</id><published>2010-08-13T15:47:00.001+09:00</published><updated>2010-08-13T15:49:08.105+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強4</title><content type='html'>今日もケースクラスの勉強&lt;br /&gt;・パターンマッチは変数を使ってもできる。&lt;br /&gt;・コンストラクターを使っても可能&lt;br /&gt;これは素晴らしい。&lt;br /&gt;・マッチするパターンがないとMatchErrorの例外をなげる。&lt;br /&gt;・ワイルドカードはマッチ対象全体でなく、パターン内の要素でも使える&lt;br /&gt;これも良い機能。&lt;br /&gt;・Anyを使ったパターンマッチも可能。&lt;br /&gt;&lt;br /&gt;全ての型のルートはAny&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1hour30minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100810/1281412749&lt;br /&gt;つぎは先に進む前に、Listの勉強をしよう。&lt;br /&gt;今日でscalaの勉強をはじめて４日目。時間にして計6時間です。&lt;br /&gt;まだまだわからないことだらけです。&lt;br /&gt;はやくフレームワークをいじりたい。playってやつがよさそうです。&lt;br /&gt;まあでも、基礎は大切なので、じっくりやっていきます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-2481698316361629387?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/2481698316361629387/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala4.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2481698316361629387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/2481698316361629387'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala4.html' title='Scalaの勉強4'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-5090652307647044219</id><published>2010-08-12T16:29:00.000+09:00</published><updated>2010-08-12T16:30:14.830+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強3</title><content type='html'>・scalaは全てがオブジェクトである。&lt;br /&gt;&lt;br /&gt;・かっこがない「引数無しメソッド」を定義することが可能&lt;br /&gt;&lt;br /&gt;・オーバーライドはjavaと異なり、override修飾子が必須である。&lt;br /&gt;&lt;br /&gt;・ケースクラスというものが存在する&lt;br /&gt;クラスインスタンスをつくるのにnewが不要(ファクトリーメソッド)&lt;br /&gt;getterが自動でさせる。オブジェクト変数で値が取得できる&lt;br /&gt;パラメーターをval化(フィールド化)する&lt;br /&gt;パターンマッチをサポートする&lt;br /&gt;パターンマッチはセレクターをmatchキーワードの前におく。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;・REPL(対話型実行環境)の実行方法&lt;br /&gt;コマンドプロンプトで&lt;br /&gt;scala&lt;br /&gt;とコマンドを叩く&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1hour30minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://d.hatena.ne.jp/plasticscafe/20100809/1281326371&lt;br /&gt;ネット上のサンプルでは、よく理解できないサンプルが多い。&lt;br /&gt;何の役に立つのかが明白でないのだ。&lt;br /&gt;とりあえず、scalaを触って三日が経過して感じたことは、&lt;br /&gt;rubyとjavaと比較しながら勉強したほうがよくscalaを理解できると思った。&lt;br /&gt;フレームワークを使ったアプリやandroidを作成するには、まだまだかなりの勉強が必要だ。&lt;br /&gt;次は変数を使ったパターンマッチから勉強。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-5090652307647044219?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/5090652307647044219/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5090652307647044219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/5090652307647044219'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala3.html' title='Scalaの勉強3'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-445342565011454897</id><published>2010-08-11T18:41:00.001+09:00</published><updated>2010-08-11T18:42:56.269+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強2</title><content type='html'>本日のまとめ&lt;br /&gt;&lt;br /&gt;・classはデフォルトのコンストラクターをひとつもつことが推奨されている&lt;br /&gt;&lt;br /&gt;・traitという仕組みがある。&lt;br /&gt;Mix-inのための仕組みである。&lt;br /&gt;Mix-inとは、メソッドが実装されたインターフェースみたいなものである。&lt;br /&gt;&lt;br /&gt;・import文&lt;br /&gt;好きな位置でスコープを限定してimportできる。&lt;br /&gt;&lt;br /&gt;・変数&lt;br /&gt;valは後で変更不可能(javaでいうfinal)&lt;br /&gt;varは後で変更可能&lt;br /&gt;&lt;br /&gt;・scalaにはREPLが提供されている。&lt;br /&gt;REPLは対話型の実行環境&lt;br /&gt;&lt;br /&gt;・引数なしのメソッドもつくれる&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1hour30minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://codezine.jp/article/detail/5329?p=4&lt;br /&gt;http://homepage.mac.com/takashi_miyamoto/scala/ScalaTutorial.pdf&lt;br /&gt;はじめての概念が多く、結構手こずった。だが、面白い。&lt;br /&gt;次回はtutorialのクラスから再開する&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-445342565011454897?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/445342565011454897/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/445342565011454897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/445342565011454897'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala2.html' title='Scalaの勉強2'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-3132236617828126212</id><published>2010-08-10T15:57:00.002+09:00</published><updated>2010-08-10T15:59:08.736+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scalaの勉強1</title><content type='html'>Scalaの勉強&lt;br /&gt;&lt;br /&gt;ダイレコの改修が落ち着き次第、iphoneの勉強の傍らに、FaceBookでも何かアプリを作成しようと思っています。&lt;br /&gt;んで、開発言語ですが、scalaを使おうと考えています。&lt;br /&gt;理由は言語思想が素晴らしいのと、androidの開発にも利用でき、今後のメイン言語として活躍してくれそうだからです。&lt;br /&gt;というわけで、まずは基礎から勉強していこうと思います。以下は、防備録を兼ねたメモです。&lt;br /&gt;&lt;br /&gt;・scalaのバージョンをチェック&lt;br /&gt;&lt;br /&gt;scala -version&lt;br /&gt;&lt;br /&gt;・scalaのコンパイル&lt;br /&gt;&lt;br /&gt;scalac ファイル名&lt;br /&gt;&lt;br /&gt;・返り値&lt;br /&gt;&lt;br /&gt;void == Unit(正確ではないが、ざっくりとした意味)&lt;br /&gt;&lt;br /&gt;・クロージャー&lt;br /&gt;&lt;br /&gt;関数のこと？&lt;br /&gt;&lt;br /&gt;・callbackパラメーター&lt;br /&gt;&lt;br /&gt;渡される関数がパラメーターを取らず (「()」で示されます)、&lt;br /&gt;返すもの (「=&gt;」で示されます) がない (関数型の値「Unit」で示されます) 場合のみ&lt;br /&gt;&lt;br /&gt;・ラムダ式&lt;br /&gt;&lt;br /&gt;名前を持たない関数またはサブルーチン。&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;記録&lt;br /&gt;勉強時間&lt;br /&gt;1hour20minites&lt;br /&gt;学習に利用しているサイト&lt;br /&gt;http://www.ibm.com/developerworks/jp/java/library/j-scala01228.html&lt;br /&gt;リスト 5まで完了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-3132236617828126212?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/3132236617828126212/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3132236617828126212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/3132236617828126212'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/08/scala1.html' title='Scalaの勉強1'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7588247842394426706.post-583467172350853361</id><published>2010-07-26T23:42:00.004+09:00</published><updated>2010-07-26T23:48:30.864+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Android'/><title type='text'>実用androidメモ　その１</title><content type='html'>androidのアプリケーションの作成を始めて半年が経ち、色々とわかってきたことがあるのでそのメモを残していこうと思います。以下は、HPに纏める前の、ブログメモです。&lt;br /&gt;&lt;br /&gt;＊バックボタンの長押しでアプリケーションを終了させる。&lt;br /&gt;(If back button is long pressed, application is finised.)&lt;br /&gt;AndroidOS version 1.6&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;    // If backButton is long pushed , variable set true. otherwise false.&lt;br /&gt;    private boolean isBackButtonLongPressed = false;&lt;br /&gt;   &lt;br /&gt;    @Override&lt;br /&gt;    public boolean onKeyDown(int keyCode, KeyEvent event) {&lt;br /&gt;               &lt;br /&gt;        if (KeyEvent.KEYCODE_BACK == keyCode &amp;&amp; 3 &lt; event.getRepeatCount()) {&lt;br /&gt;            Log.d(LOG_TAG, "onKeyDown() : back button is long pressed.");&lt;br /&gt;            isBackButtonLongPressed = true;&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    @Override&lt;br /&gt;    public boolean onKeyUp(int keyCode, KeyEvent event) {&lt;br /&gt;       &lt;br /&gt;        if (!isBackButtonLongPressed) {&lt;br /&gt;            isBackButtonLongPressed = false;&lt;br /&gt;        } else {&lt;br /&gt;            applicationFinish();&lt;br /&gt;        }&lt;br /&gt;       &lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;   &lt;br /&gt;    /**&lt;br /&gt;     * Application is finished.&lt;br /&gt;     * All process will be killed.&lt;br /&gt;     */&lt;br /&gt;    private void applicationFinish() {&lt;br /&gt;        Log.d(LOG_TAG, "applicationFinish() : aplication is finished. All processes killed");&lt;br /&gt;        System.exit(RESULT_OK);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;API:http://developer.android.com/reference/android/view/KeyEvent.html&lt;br /&gt;上記(戻るボタン長押し)の他に、HomeButton押下時もプロセスを切る処理は入れるべきでしょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7588247842394426706-583467172350853361?l=edywrite.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edywrite.blogspot.com/feeds/583467172350853361/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://edywrite.blogspot.com/2010/07/android.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/583467172350853361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7588247842394426706/posts/default/583467172350853361'/><link rel='alternate' type='text/html' href='http://edywrite.blogspot.com/2010/07/android.html' title='実用androidメモ　その１'/><author><name>Masa</name><uri>http://www.blogger.com/profile/11407125730031787409</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
