身体的特徴のせいで自分に自身が持てない人に薦めたい – 片眼の猿―One-eyed monkeys

「カラスの親指」を見てから道尾秀介さんの存在を知り読んでみた。話の内容は非常にざっくり言うと「盗聴専門の探偵がある会社の調査の依頼を受ける。調査のために新たに雇った女性と一緒に会社の調査を行うが、その会社の調査中に殺人事件が起こり」という話。

この話の最大の特徴は登場人物だと思う。耳が異常に大きく聴覚が発達しているがそれを隠すために大きなヘッドフォンをしている主人公。目が異常にでかく非常に視力がいいがそれを隠すために常にサングラスをしている新たに雇われる女性。なんらかの特徴を持ってスーパーマンのように活躍していくのかとおもいきや人間味を持ちながら話が進んでいく。道尾秀介さんらしく最後に全てをばらすという記述方式はさすがの一言。

読んだ後に身体的な特徴など些細な事だと思えるだろう。身体的な特徴というのは自分が気にするほど他人は気にしていないことも多く、その身体的な特徴をプラスに変えるかマイナスに変えるかはその人次第なんだろう。身体的な特徴に対して自信と誇りを持ち、堂々とその特徴と一緒に生きていく心構えがあれば身体的な特徴はプラスへと変わる。そういった励ましが本書を通して作者は語りかけているのではなかろうか。

生々しい人物描画で思わず嫌悪感を覚える一冊 – 殺意に至る病

簡単に話をまとめると「猟奇殺人犯とそれを追いかける元警察官と猟奇殺人犯の母の複雑に入り乱れる心情を描いた作品」となるんだが、この心情の描き方が非常にリアルでエグい。殺人を神聖な行為だと勘違いし自分に陶酔していく殺人犯。元警察官の葛藤。自分の子供が殺人犯ではないかという疑いが段々と強くなっていく母親。全てが緻密に描画されており臨場感が強いため読んでいて嫌悪感を覚えるほどにすごい。

僕の年齢まで来ると自分の子供がもし殺人犯だったらという目線になってしまい、母親に感情移入して読んでしまった。自分の子供が殺人犯になったら僕は一体どういう行動を取るのだろうか。信じたくはないし、信じられないんだろうが、もし本当に殺人犯だったのであれば次の強行に及ぶ前に殴ってでも止めないといけない。しかしその行動を起こすということは自分の子供が殺人を犯さないという信頼を裏切るという行為にほかならない。もし間違いであったのであれば笑って流してくれるのか?それとも間違いを契機に自分の子どもとの信頼関係が崩れるのではないか?考え出せばきりがないが、殺人事件が現実で起こっているということはその殺人犯の親も存在するということで、その親に自分がならないという保証はどこにもない。もしそうなったらどうなるのか?ということをリハーサルするという意味でもこの本は読んでみるべきなのかもしれない。

最後に、一つだけ言っておきたい。この本を最後まで読めば必ずあなたは驚く。まさかそんなっと言わずにはいれないだろう。そういった驚きを求めているのであればそういった意味でもこの本はおすすめの一冊である。

自分がひねくれてきたと思ったら見て欲しい映画 – Good Will Hunting

テレビでやってるのを始めてみたのが中学生の頃。それからテレビでやってるのを2回ほど見ていたけど、ブルーレイのきれいな音と映像でもう一度見てみたくなってレンタルしてみた。あらすじとしては「心に傷を持った天才数学者が恋人、友達、カウンセラーの助力を得ながら少しずつ立ち直っていく」という話なんだけど、これが非常に良い。アメリカのドラマ、恋愛映画などは最終的にみんなハッピーになって抱き合って終わりみたいなアメリカーンって思わずいいたくなる話が多くて僕は非常に苦手なんだけどこの話だけはなぜか何度も見たくなってしまう。

カウンセラーの暖かい言葉、親友のわざと突き放してくる言葉、恋人の全力でぶつかってくる言葉、一つ一つの言葉が非常に重く、心を震わせてくれる。感動して号泣する映画というわけではないが、終わったあとになにか心地よい気分になり、自分も素直に生きてみたほうがいいかと考えさせられる作品だと思う。

スマホで音楽を聞くためにBluetoothスピーカーを買うぐらいならシアターバーを買ったほうがなにかと捗る

AWA、Line Musicを筆頭にApple Music、Spotifyと続々とサブスプリプション型の音楽サービスがリリースされている。ただ、スマホで音楽を聞く上で一番気になるのは音質だと思う。最近の機種だと少しづつ音も良くなってきてはいるが音量を大きくするとどうしても音が割れてしまい聞き苦しい。移動中に音楽を聞く際はイヤホンをつけて高音質で音楽を楽しむことができるが、家で音楽を聞く時までイヤホンをつけて聞きたくない。どうせなら

そこでおすすめはこいつ。我が家の音楽環境はこいつが届いてから激変したと言っても過言ではない。

なぜシアターバーなのか?という疑問も出てくるかもしれないがブルートゥーススピーカー単体で購入する値段を考えるとスマホで音楽を聞くだけのために買うのにはもったいない。どうせ買うのであればテレビから流れる音も高音質になるシアターバーを買ったほうがお得だと思う。

こいつのいいところはスタイリッシュな外観のくせに音がいい。5.2chだと場所をとるし、いつも座っている部分で音を合わせないといけないためジャストポイント以外ではあまり意味が無い。それなら省スペースかつ音がいい方がいい。サブウーハーが付いているため重低音もきっちり聞こえる。もし使っている携帯がxperiaならNFCをかざすだけでbluetoothとの接続設定が完了するという痒いところに手がとどくところも素晴らしい。こいつのお陰でDVDとブルーレイでここまで音が違うのかと再認識することができた。もし今あるテレビで音の違いがわからないという人がいるのであればぜひ買って試してみたほしい。

また、持ち運び出来てスタイリッシュなスピーカーが欲しい人はこいつがおすすめ。

これからの季節外でバーベキューをしながら音楽を聞きたくなることもあるだろう。ラジカセを担いで音楽をガンガン流しながら歩いているのはもうださい。これぐらいのコンパクトなものを持ち運んでスマホから音楽を飛ばせば省スペースかつ高音質で音楽を聞くことができる。四角い箱の形と言いソニーらしいかっこよさが溢れ出る逸品だと思う。

パズルのピースが綺麗に埋まるのに消化不良になる映画 – 9ine

ざっくり言うと「9人の男女が監禁され自分たちが監禁された理由がわからなければ10分毎に一人づつ殺される」という話。「ラスト8分に全てがつながる」というキャッチコピーにそそられて見た作品で確かにラスト8分で全てがつながる。見終わったあとの消化不良感が非常に多いけど、パズルのピースが一つづつはまっていって綺麗につながるのはお見事だと思う。消化不良は残るけど良い映画でした。

parseを使ってtwitterに画像付きの投稿を行う

めも

- (void)p_postTwitterMedia
{
    NSData* data = UIImageJPEGRepresentation(image, 1.0);
    AFHTTPRequestOperationManager* manager = [AFHTTPRequestOperationManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    NSMutableURLRequest *tweetRequest = [manager.requestSerializer multipartFormRequestWithMethod:@"POST"
                                                                                        URLString:@"https://upload.twitter.com/1.1/media/upload.json"
                                                                                       parameters:nil
                                                                        constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
                                                                            [formData appendPartWithFormData:data name:@"media"];
                                                                        }
                                                                                            error:nil];
    
    [[PFTwitterUtils twitter] signRequest:tweetRequest];
    
    AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:tweetRequest success:^(AFHTTPRequestOperation* operation, id responseObject){
        NSLog(@"success!");
        [self p_postTwitterStatus:responseObject[@"media_id_string"]];
    }failure:^(AFHTTPRequestOperation* operation, NSError* error){
        NSLog(@"operation=%@",operation);
        NSLog(@"eror=%@",error);
    }];
    
    [manager.operationQueue addOperation:operation];
}

- (void)p_postTwitterStatus:(NSString *)mediaId
{
    NSMutableURLRequest *tweetRequest = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST"
                                                                                      URLString:@"https://api.twitter.com/1.1/statuses/update.json"
                                                                                     parameters:@{@"status":@"hogehoge", @"media_ids":mediaId}.mutableCopy
                                                                                          error:nil];

    [[PFTwitterUtils twitter] signRequest:tweetRequest];
    
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:tweetRequest];
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject){
        NSLog(@"success!");
    }failure:^(AFHTTPRequestOperation *operation, NSError *error){
        NSLog(@"fail!");
        NSLog(@"operation=%@",operation);
        NSLog(@"error=%@",error);
        
    }];
    
    [[NSOperationQueue mainQueue] addOperation:operation];
}

まとめ

「statuses/update_with_media」を使うサンプルがよくあるけど、こいつdeprecatedになっている。なので、画像を一旦上げてから帰ってきたmediaIdを使ってつぶやきを投稿することでひも付けされる。

parseで認証してfacebookのopen graph storyを投稿する

メモ

    FBSDKSharePhoto *photo = [[FBSDKSharePhoto alloc] init];
    photo.image = shareImage;
    
    NSDictionary *properties = @{
                                 @"og:type": @"hoge:huga",
                                 @"og:title":@"title",
                                 @"og:description":@"description",
                                 @"og:url": @"http://hogehoge.hugahuga",
                                 @"og:image": @[photo]
                                 };
    FBSDKShareOpenGraphObject *object = [FBSDKShareOpenGraphObject objectWithProperties:properties];
    
    FBSDKShareOpenGraphAction *action = [[FBSDKShareOpenGraphAction alloc] init];
    action.actionType = @"hoge:huga";
    [action setObject:object forKey:@"huga"];
    [action setString:@"true" forKey:@"fb:explicitly_shared"];
    [action setString:@"this is user message" forKey:@"message"];
    
    FBSDKShareOpenGraphContent *content = [[FBSDKShareOpenGraphContent alloc] init];
    content.action = action;
    content.previewPropertyName = @"playlist";
    
    [FBSDKShareAPI shareWithContent:content delegate:self];

まとめ

注意点としては以下の条件でフィードに出なくなる

  • fb:explicitly_sharedがついていない
  • 審査が通っていないアプリで、かつテストユーザではない

ここではまるとめんどくさいのでご注意を

parseで認証してfacebookのフィードに投稿する

parseで認証

認証するときに[publish_actions]をつけてあげる

    [[PFFacebookUtils logInWithPermissionsInBackground:@[@"publish_actions"]] continueWithSuccessBlock:^id(BFTask *task) {
        // なにがしかのログイン後の処理
    }]

投稿

apiにPOSする

    NSDictionary *params = @{@"message"    : @"hoge",
                             @"name"       : @"name",
                             @"caption"    : @"caption",
                             @"description": @"description",
                             @"link"       : @"linkUrl",
                             @"picture"    : @"imageUrl"};

    [FBRequestConnection startWithGraphPath:@"me/feed"
                                 parameters:params
                                 HTTPMethod:@"POST"
                          completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                              if (error) {
                                  NSLog(@"エラー:%@", result);
                                  return;
                              }
                          }];