tumblrへ
これからはtumblrでブログ書いていこうと思います。
http://blog.takady.net
よろしくお願いします。
rubyとJavaの文字列比較の違い
昨日からruby勉強しています。
rubyの制御構文について見ていると、おっと思うことがありました。
==演算子と文字列比較について、ちょうどjavaのそれとは正反対では?
試してみました。
rubyで文字列同士が同じか比較しようと思ったら、==演算子を使います。
equal?メソッドでは、インスタンスが同一かどうかを比較してしまいます。
irb(main):001:0> a,b = 'abc','abc' => ["abc", "abc"] irb(main):002:0> a == b => true irb(main):003:0> a.equal?(b) => false
javaでは逆だなぁ。
public static void main(String[] args) { String a = "abc"; String b = new String("abc"); System.out.println(a.equals(b)); System.out.println(a == b); } (結果) true false
へー。
と思ったらまとめてる方いました笑
JavaのequalsメソッドとRubyのequal?メソッドについて | simultechnology.blog
http://simultechnology.blendmix.jp/blog/archives/926
Java勉強会に参加してきました
Java勉強会 ~ シューティングゲームを作ろう! その2 ~
http://tohoku-dev.jp/modules/news/article.php?storyid=236
初心者向けってことでしたが、スレッドのこととかもあって結構おもしろかったです。
git flowについて
下記を読んで、git flow という考え方について理解が深まりました。
- 見えないチカラ: A successful Git branching model を翻訳しました
http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html
- 【保存版】SourceTreeでGitの使い方まとめ2 チーム開発編 | 備忘録 | 俺日記
http://blog.shinji.asia/sourcetree-git2/
テスト自動化・自動デプロイ実現のために、
このブランチ運用モデルを試そうと思っています。
spring batchとか
インフルエンザになりました。
3日目で、熱は下がってきましたが、今週いっぱい会社には行けないです。。
spring batchをちょっと調べたり触ってみたので、参考サイトをメモしておきます。
※会社でも使っているんですが、詳細わかってなくて、。
参考にしたサイト
【ハウツー】概説 Springプロダクト(12) - Spring Batchで簡単にバッチを作る
http://news.mynavi.jp/articles/2010/07/14/spring12/index.html
SpringBatch:コマンド引数の利用方法 - omotenashi-mind
SpringBatchサンプルコードから学ぶ - omotenashi-mind
やったこと
・spring-batchのダウンロード
・spring-batch-simple-cliのeclipseインポート
・eclipse marketplaceからmavenプラグインm2eをインストール
・spring-batch-simple-cliの実行
・spring-batch-samplesのeclipseインポート
・spring-batch-simple-cliの実行
サンプルコード動かしてみた感想として、
普段から使っててちょっと思ってたけど、設定ファイル多いな。
あと、mavenもっと理解しないと。pom.xmlとかってどうやって書くんだろう。
依存ライブラリ全部書いてくのってひたすら面倒くさそうだけど、それってIDE(というかmavenプラグイン?)が勝手に書きだしてくれるんだろうか。。
くるりワンマンライブツアー2013 特別公演 〜国民の成長が第一〜 in 武道館
くるりの武道館ライブ行って来ました。
http://natalie.mu/music/news/83373
平日だったので、仕事終わってから行きました。
くそ素晴らしかったです。
学生時代思い出しました。
くるりライブ見つけてまた行こう。
iPhoneアプリのHTTP通信時のエラーハンドリング
下記2つのHTTP通信での、それぞれのエラー時のハンドリングについてmemoしておきます。
・NSURLConnectionでNSData型を取得する場合
・UIWebViewのloadRequestでリクエスト送ってweb画面を表示する場合
どちらの場合も、エラーが起きたらアラートビューを出して別画面へ戻すようにしました。
・NSURLConnectionでNSData型を取得する場合
- (void)viewDidLoad { [super viewDidLoad]; [self configureView]; } - (void)configureView { NSString *url = @"http://192.168.1.1:8080/app/select_question_id"; /* POST */ NSString *keyValue = [NSString stringWithFormat:@"grade=%@&category=%@&level=%@&personalId=%@", self.grade, self.category, self.level, self.personalId]; NSData *post = [keyValue dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:url]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:post]; NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; // HTTPリクエストのエラー if (response == nil){ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"問題の読み込みに失敗しました", @"") message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil]; [alert show]; return; } self.questionIds = [NSJSONSerialization JSONObjectWithData:response options:0 error:nil]; // JSONデータのパースエラー if (self.questionIds == nil){ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"問題の読み込みに失敗しました", @"") message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil]; [alert show]; return; } } // delegateメソッド - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) { [self goSetting]; // 設定画面へ飛ばす } } // 設定画面へ飛ばす - (void)goSetting { SettingTableViewController *settingTableViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"settingTableViewController"]; settingTableViewController.navigationItem.hidesBackButton = YES; // 戻るボタン消しとく [self.navigationController pushViewController:settingTableViewController animated:YES]; }
・UIWebViewのloadRequestでリクエスト送ってweb画面を表示する場合
- (void)configureView { NSString *url = @"http://192.168.1.1:8080/ichiyazuke_web/select_question_by_id"; /* POST */ NSString *keyValue = [@"questionId=" stringByAppendingString:self.questionId]; NSData *post = [keyValue dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:url]]; [request setHTTPMethod:@"POST"]; [request setHTTPBody:post]; CGRect frame = [[UIScreen mainScreen] bounds]; self.myWebView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,frame.size.width,frame.size.height)]; self.myWebView.scalesPageToFit = YES; self.myWebView.delegate = self; [self.view addSubview:self.myWebView]; [self.myWebView loadRequest:request]; } // delegateメソッド // webViewが画面のloadに失敗したら呼ばれる - (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { [UIApplication sharedApplication].networkActivityIndicatorVisible = NO; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"問題の読み込みに失敗しました", @"") message:nil delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK",nil]; [alert show]; return; } // delegateメソッド - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if (buttonIndex == 0) { [self.navigationController popViewControllerAnimated:YES]; // 前画面に戻る } }