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

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

http://www.omotenashi-mind.com/index.php/SpringBatch%EF%BC%9A%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%BC%95%E6%95%B0%E3%81%AE%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95

 

SpringBatchサンプルコードから学ぶ - omotenashi-mind

http://www.omotenashi-mind.com/index.php/SpringBatch%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6

 

 

やったこと

spring-batchのダウンロード

・spring-batch-simple-clieclipseインポート

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];  // 前画面に戻る
    }
}