VagrantでAngularサーバーを立てる

割と無駄にハマったのでセルフ墓標。

Angularのインストール
順序としてはNode.jsのインストールが先。

curl --silent --location https://rpm.nodesource.com/setup_8.x | bash -
yum install -y nodejs
npm install -g @angular/cli

AngularJSのインストールのためにはnpmのバージョンアップをしなきゃいけなくてそっちでも結構ハマったのだけどまあそれはいい。nって何さあのググラビリティ低いコマンド……

サーバー立ち上げ
インストールが終わったらアプリを作成、とりあえずサーバーを起動

ng new app
cd app
ng serve

** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ **

問題発生
よし、と思ってブラウザからhttp://192.168.33.10:4200にアクセスしてみたらConnection Refusedとか言われる。
まあわりといつものことだし〜と思ってSELinuxやっつけたりfirewalldやっつけたりしたんですがまだつながらない。うん?

・Vagrantのforwarded_portは設定した
・なんならprivate_networkも設定している
ip aしてみてもやっぱりIPは正しい
・Vagrant内部からcurlしてみたらつながった→つまり外部からのアクセスがだめっぽい
・SELinuxやっつけた
・firewalldやっつけた
→でもつながらない。

解決
あれー……他何かあるっけー……?と思いつつあれそれ試して数時間。ふとnetstat -anpしてみたら

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:4200 0.0.0.0:* LISTEN 4159/ng

あっこれかっってなってとりあえずローカルアドレスを変更するためにAngularServerの設定変更方法〜〜〜〜つってggってたんですけど(無駄な時間)、なんてことはない、 ng serve --host 0.0.0.0 で解決した。
進捗のない作業は本当に疲れる……。

Laravel5.4でCookieを使うメモ

 仕事で作って案の定却下されたけど勿体無いので供養だオラァ!!

経緯

  • Remember meの機能をつけることになる
  • なるほどと思ってつける
  • テスト仕様書を見たら想定されている機能が違う(語の定義が食い違っていた)
  • 気合で組み込む
  • コードレビュー時点で怒られが発生、棄却

語の定義の話

上司「リメンバーミーって画面にIDとパスワード保存してくれるやつじゃろ」
私「リメンバーミーってログイン状態保持してくれるやつじゃろ」
→事故発生

ちなみにLaravelのリメンバーミーはログイン状態を保持してくれるやつ。だからこそ上司との意見の食い違いに気付けなかった。
説明するより組んで見せた方が早いと判断して取り敢えず組んだ(冒頭の「案の定」はそのため)
っていうか画面にIDとパスワード覚えてくれるやつはリメンバーミーっていうかブラウザの機能では?(素)

ソース

クッキー保存

ちなみに今回はログインも独自ソースなのでこれで済んでるけどAuthenticatesUsersはtraitなのでそのへんはなんとかしてください。まあコピペでなんとかなるじゃろたぶん。

# LoginController.php

public function login(Request $request)
{
    // 〜ログイン処理〜
    // 〜ログイン成功〜
    if($request->input('remember')){
        $name = cookie()->make("name", encrypt($request->input('name')), 129600);
        $password = cookie()->make("password", encrypt($request->input('password')), 129600);
        return redirect('/home')->withCookie($name)->withCookie($password);
    }
}

クッキー展開

#LoginController.php

public function showLoginForm(Request $request)
{
    $name=$password="";
    if(old('name')!=null){
        $name=old('name');
        $password=old('password');
    }else if($request->hasCookie('name')){
        $name=decrypt($request->cookie('name'));
        $password=decrypt($request->cookie('password'));
    }
    return view('auth.login',compact('name','password'));
}

 優先順位は前回入力値が上。しかしなんで画面にIDとパス残ってるのに入力を間違うなんてことがあろうか(反語)
 あとはこのnameとかpasswordをvalueに設定してやるだけ。エラーで戻ってきてもちゃんと復元してくれるよ!

Railsでフロントと管理画面のデザインを分ける

 忘備録。

  1. フロントと管理画面のデザインが違う
  2. 読み込むSCSSも違う
  3. Railsのアセットパイプラインを素直に使うと全部読み込まれてしまう

というケースの解決。

@import "compass";
@import "_reset.scss";
@import "_mixin.scss";
.application{
    @import "front/_layout.scss";
    @import "front/_design.scss";
}
.admin{
    @import "admin/_layout.scss";
    @import "admin/_design.scss";
}

こう。

んで

layout/application.html.erb

...
<body class="application">
...

こう。

fontawesomeとかbootstrapとか入れたいけどgemインスコが上手く動かんねんキシャー!!っつってもう直接ファイル入れたれと思ったら読み込み順が違って壊れてまたキシャー!!ってなる件については

stylesheets
  ├─ fontawesome
  │   └─ scss
  │       └─ fontawesome.scss
  └─ original
      └─ common.scss

みたいな具合にファイルを組んで

@import "fontawesome/scss/fontawesome.scss";
@import "original/common.scss";

って感じにするとちゃんと読み込まれた。
_hoge.scss系を一列に置いちゃうとしんどみがしんどいので階層化するといいっぽい。original/common.scssの中に一番上の@import系が書かれている。

GoogleMapsJavascriptAPIのUIを改造する

プロマネさん! 死ですよ! 死!!(裏声)

デザイナーさんからすごくきれいなデザインモックが飛んできてお客様確認済みで内部設計とか実装は丸投げで取り敢えずマーカーのクラスタリングとラベル改造は必須だということになったらそれぞれいい感じのライブラリはあったんですけどそこの食い合わせがなかなかに悪かったりして血泡吹きながらあれそれしています。しかもデザインがXDだからHTMLから起こさなきゃいけないとかいうバックエンドエンジニア殺し。保守性は死んだ! もういない! 貴様の行為は炎上案件に油を注ぐだけだ!

Q.火を付けたのは誰ですか?
A.空気を圧縮すると温度が上がりますね。納期も圧縮すると温度が上がって燃えますね。それだけです。はいでは行ってみよう〜〜〜〜

ピンにマウスをかざした時にピンの画像を変えたい

はい。

var normalIcon = "hogehoge.png";
var hoverIcon  = "fugafuga.png";

google.maps.event.addListener(icon.marker, 'mouseover', (function(icon){
      return function(){
    this.setIcon({
      url: icon
    });
      };
    })(hoverIcon));

google.maps.event.addListener(icon.marker, 'mouseout', (function(icon){
      return function(){
    this.setIcon({
      url: icon
    });
      };
    })(normalIcon));

表示範囲で拡大縮小ボタンを付けたい

つまるところ「1km」ってボタンを押したらマップ中心から1kmの範囲が表示されてほしいと。
地球上の任意の座標を中心とした円を描き座標を取れと。

$(".zoom_m").on('click',function(){
  var distance = $(this).attr('data-distance');
  var center = gmap.getCenter();
  // 緯度一度110942.97m
  var lngRadix=110942.97;
  var lngDiff = distance / lngRadix;
  var west = center.lng() - lngDiff;
  var east = center.lng() + lngDiff;

  // var pi = 3.1415926535898;                      // 円周率近似値
  var r = 6378137;                            // 地球の半径(m)
  var c = Math.cos(center.lat() / 180 * Math.PI) * 2 * Math.PI * r;    // 任意の緯度の円周(km)
  var latRadix = c / 360;                          // 経度 1度あたりの km

  var latDiff = distance / latRadix;
  var north = center.lat() - latDiff;
  var south = center.lat() + latDiff;

  //北西端の座標を設定
  var sw = new google.maps.LatLng(south,west);
  //東南端の座標を設定
  var ne = new google.maps.LatLng(north,east);
   
  //範囲を設定
  bounds = new google.maps.LatLngBounds(sw, ne);

  gmap.fitBounds(bounds,5);
});

これもっとマシな実装は無かったんだろうか……。

マーカーのラベルをきれいにしたい

デザイナさんのデザインはとてもきれいなのでフォントも色も縁取りも指定されていますが素のGoogleMapにそんな機能はないのでLabeledMarkerを導入します。

LabeledMarker

参考はこちら : GoogleMapでカスタム可能なラベルを持つマーカー – Qiita
先人の叡智……うめ……うめ……

ソース編集

LabeledMarkerを追加してもまだまだ要件に足りないのでソースに手を突っ込みます。まあCSSクラス追加しただけなんですけどコピペだけで動くなんてそんなオイシイ話は無いわね。

 

LabeledMarker.prototype.createLabel = function (labelOptions) {
    var label = new google.maps.OverlayView();
    label.parent = this;
    label.bindTo('map', this);
    label.bindTo('position', this);
    label.onAdd = function () {
        var el = document.createElement('div');
        el.style.position = labelOptions.style.position || 'absolute';
     // el.innerHTML = labelOptions.innerHTML || '<div>' + labelOptions.text + '</div>';
        el.innerHTML = labelOptions.innerHTML || '<div class="label">' + labelOptions.text + '</div>';
        this.el = el;
        var panes = this.getPanes();
        panes.overlayLayer.appendChild(el);
    }
...

あとなんか使ってないソースは消した。
あとは.labelに対してデザイン作るだけなので余裕(余裕とは言ってない)。

近隣のマーカーをクラスタリングしたい

MarkerClusterer

MarkerClusterer自体は有名なので探せばいくらでも資料があるので大丈夫です。使い方もそんなに難しくない。
ただし今回の場合LabeledMarkerとの兼ね合いがあったので暫定的にこう書いた(取り敢えず動いた)

var markers = [];
// LabeledMarker
var icon = new LabeledMarker(gmap,{
  icon: {
    url: normalIcon
  },
  map: gmap,
  position: latLng
},{
  text: data.title,
  style:{

  }
});

// LabeledMarkerがインスタンス変数(って言うのはJavaScriptてきに正しいんだろうか?)として持っているmarkerだけを渡す
markers.push(icon.marker);

var markerCluster = new MarkerClusterer(gmap, markers,
    {
      styles:  [
      {
        textColor: 'white',
        url: '<?= get_stylesheet_directory_uri() ?>/images/piyopiyo.png',
        height: 30,
        width: 30
      }
      ],
      zoomOnClick:false
  });

クラスタリングされたマーカーのラベルを非表示にしたい

ただ今より毒ガス訓練を開始する!!(カッ)
現状だとクラスタリングされたマーカーのラベルが出っぱなしで、ごちゃごちゃして見苦しいのです。縮小に合わせてラベルを消し、拡大に合わせてラベルを表示します。
いろいろ調べた結果(二日くらいかかった)、MarkerClustererからラベルが見えていないという割と当たり前の事実に突き当り、ソースを修正。

markers.push(icon);

LabeledMarkerの中のmarkerだけをMarkerClustererに渡していたところをまるごと渡すように修正。
それからMarkerClustererも修正。具体的には、markerを参照しているところをmarker.markerに書き換え。ちなみに一発置換とかやっても動かないです。はははちょっとした地獄だった。道は前にしか開かれません。進みましょう。
google.maps.Markerの内容が見たいときはmarker.markerにアクセス、管理はmarkerごとっていう具合になると思います。変数名はちゃんと変えた方がいいと思いますけどいっぺんにやると何でバグってるかわからなくなって血を吹くので注意。

そしてこう

 

Cluster.prototype.addMarker = function(marker) {
  if (this.isMarkerAlreadyAdded(marker)) {
    return false;
  }

  if (!this.center_) {
    this.center_ = marker.marker.getPosition();
    this.calculateBounds_();
  } else {
    if (this.averageCenter_) {
      var l = this.markers_.length + 1;
      var lat = (this.center_.lat() * (l-1) + marker.getPosition().lat()) / l;
      var lng = (this.center_.lng() * (l-1) + marker.getPosition().lng()) / l;
      this.center_ = new google.maps.LatLng(lat, lng);
      this.calculateBounds_();
    }
  }

  marker.marker.isAdded = true;
  this.markers_.push(marker);

  var len = this.markers_.length;
  if (len < this.minClusterSize_ && marker.marker.getMap() != this.map_) {
    // Min cluster size not reached so show the marker.
    marker.marker.setMap(this.map_);
    // クラスタリングされていないピンのラベルを表示
    $(marker.label.el).children('.label').show();
  }

  if (len == this.minClusterSize_) {
    // Hide the markers that were showing.
    for (var i = 0; i < len; i++) {
      this.markers_[i].marker.setMap(null);
      // クラスタリングされたピンのラベルは非表示
      $(this.markers_[i].label.el).children('.label').hide();
    }
  }

  if (len >= this.minClusterSize_) {
    marker.marker.setMap(null);
    // クラスタリングされたピンのラベルは非表示
    $(marker.label.el).children('.label').hide();
  }

  this.updateIcon();
  return true;
};

同じ住所の複数テナントの処理

同じビルに複数のテナントが入っている場合がある。どれだけ拡大してもピンがクラスタリングされたままになって、いつまでも情報を取ることができないので困る。
参考はこちら : GoogleMapAPIでMarkerClustererを利用した時のマーカークリックについて – teratail
上記を参考にしながらクラスタの横にマーカーを追加してデータの取得はそっちで行うみたいな(伝われ)ことにしました。

google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
    gmap.panTo(new google.maps.LatLng({
    lat: cluster.center_.lat(),
    lng: cluster.center_.lng()
  }));
  var zoom=gmap.getZoom()
  if(zoom<18){
    // ズームレベル18までは普通にズームする
    // 一個ずつズームするのちょっとだるいのでいい方法があれば修正はしたい
    gmap.setZoom(++zoom);
  }else{
        var i=0;
        // 同じ住所でも微妙に座標が違うとかめんどくさかったので近所の住所は同じ座標で扱う
        var lat=cluster.markers_[0].marker.data.latitude;
        var lng=cluster.markers_[0].marker.data.longitude;
      cluster.markers_.forEach(function(e){
        var latLng = new google.maps.LatLng({
        lat: parseFloat(lat)-(0.1+i)/5000,
        lng: parseFloat(lng)+1/5000
      });
      i++;
    });
  }
});

MarkerClustererの自動ズームは切ってズームレベルをいちいち確認しながら挙動を分けました。
そもそも登録画面を住所だけにして座標は自動取得とかにしておけばいいのに座標まで手作業で設定するから微妙に数字がズレていたり緯度と経度がひっくり返っていたりして死です死。
座標変えて表示しちゃってるけどまあどうせ詳細見る場所はあるのでだいじょうぶだいじょうぶ。
これは常々思っていることなんですけど営業とプログラマーの間にシステムエンジニアが生まれたようにデザイナーとプログラマーの間にも何かのクッションが必要だ。そうじゃなければ下流のプログラマがしぬ

あけましてよろしくお願いします2018

世知辛い。

世の中!世知辛い!!!

世知辛い〜〜〜〜〜〜〜〜のじゃ〜〜〜〜〜〜〜〜〜〜〜(腕をわさわさ振りながら)(バーチャルのじゃろり狐娘Youtuberおじさん)

ハマってます。伝染ってます。いいよねバーチャルのじゃろり狐娘Youtuberおじさん。可愛いし、声がいい。落ち着くボイス。何よりも「世知辛い」って言葉があの可愛いのじゃろり狐娘に紐付けられてちょっとほっこりしたワードになっているのが素晴らしい。「世知辛い」のあとに「のじゃ」って付けるだけでちょっと笑顔になれる。世知辛いのじゃ〜〜〜。

さて世知辛いの内実。愚痴。

デザイナーはデザインのことしか考えてなくてマーケッターさんはマーケティングのことしか考えてなくてまあそれは仕方ないというかむしろ割と正しいことだと思うんですけど誰もマネージメントをしないもんだから実際に手を動かすプログラマー(私)の方に全体調整とかスケジュールとかの責任が全部来る。設計にもお客様との会議にも参加していないのになんか全部来る。
デザイナーさんのデザインはDB構造とか一切考えててくれないしお客様とデザイナーさんが会議して機能とUI決めてきちゃうしそこに介入する権限など無くて詰む。詰む詰む。
もちろんUIは美しい。すばらしい。でもハードコードでしか解決できないみたいな。エンジニアをストレスで殺すおつもりでおられる?エンジニアはハムスターばりにストレスに弱い生き物なので簡単に死ぬぞ。コピー用紙とか食べ始めちゃうぞ。ISO27001に則ってシュレッダーに掛けられる運命の裏紙とかもりもり食べちゃうぞ。
今回は画像(デザイナーさんがIndesignで作ってくれたもの・お客様確認済み)をシステムにする仕事が全部来たのでそりゃ悲鳴あげたくもなるよう。バックエンドエンジニアはSassなんてよくわかってないよう。

まあね、わかってますよ。エンジニアが書くデザインだってそこそこ汚物なんです。平気で!importantとか使うしね。DOMにスタイル直書きしたりするしね。そういう柔軟性のないことはやっちゃダメです。なんでプログラムではハードコードを嫌うのにスタイルの話になると平気でそれをやっちゃうのかな。ともあれお互いがお互いを理解していないのはお互い様なんです(?)。わかってます。
デザイナーさんでもいるけどね! spanとかdivとかに直接スタイル当てちゃう人! reset.css以外でやっちゃダメでしょそれ?! ってなるよね〜〜〜。器用貧乏のなんちゃってフルスタックさんは色んな所で胃が痛いです。ああでもRoRとかはStringの上書きとかもできるんだっけ……? 一周回ってむしろモダンなのか? でも老害としてはあれはちょっと好きになれないというか、保守拡張向きじゃないように見えてしまう……。ちゃんと設計しない限りプロトタイプの上書きとかやっちゃダメだと思うんだけど……。ブツブツ
たぶん、なんちゃって程度のフルスタックだから応用が効いてないとか柔軟性がないとかそういうことなんだろうけど、専念できる環境なんて手に入ったことがないものなー。しゃーないなー。一人なら八十点程度の仕事ができるけど誰かと協力する能力が低すぎて組織の中にあっては六十点しか出せないみたいな。人のデザインを汲む能力がないのです僕はー。

っていうか今回のデザインだってエラー層とかエンプティ層とか全然作られてないしね……。正常ケースしか作られていないプログラム然り、正常ケースしか作られていないデザインも正直どうかとは思うわけで。綺麗で使いやすいけどこれはWebサイト向けのデザインであってCMS向けじゃないんだよな。コンテンツが増えることも想定されてないっぽいし。
別件でもあったけどさあ似たような話。Webで一括りにするからそういうデザインになるんです。毎回手動で更新するおつもりだろうか。
プログラマと営業の間にSEという職業があるように、プログラマとデザイナの間にも何かしらの役職が必要よね。正直なところ、ワイヤフレームをプログラマが作ってその上にデザイナーさんがデザインを作り込んだ方がいいのでは?と思うのだけど……トップスピードは落ちるよね。お客様とデザイナーだけでやり取りした方が早いんだ、もちろん。まあその早さのツケは後の工程に来るわけですけど。うんち!(せいかいのおと)

そして年末年始、実家に戻ったら親やら親戚から結婚せえいい人はおらんのかと激詰めに遭っており、世知辛いのじゃあ……。

子育ての不安とインターネットの話

数日前インターネットの海の中で、こんな話を見た。
「子供のイヤイヤ期に参っていたとき、保育士さんに『お子さんから信頼されてる証拠ですよ』と言ってもらってすごく救われた」

うん。いい話だ。いい話なんだけどインターネットに書いてはいけない。
なぜかっていうと、イヤイヤ期がまだ来ていない子の親やイヤイヤ期が無かった子の親を傷つけるから。
もちろん一対一で言うのはいい。素晴らしいことだ。平たく言えば、方便とはそういうものだ。

たとえば私はイヤイヤ期(第一次反抗期)が遅かった。四歳に近かったはずだ。その話を私が母から聞いたのは中学生になってからで、あんたは何もかも鈍くさくってねと母は笑っていた(今思うとひどい誹謗中傷だ)。けれど、反抗期が来る前にその記事を読んでいたらどうだろうか? 三歳にもなったのにまだ反抗期が来ない、私は我が子に信用されていない! と恐慌状態に陥っていたのではないか。
まあ、うちは親も私のことを言えないほど鈍くさい人なので、うちの親に限ってはそうならなかったかもしれないが、色んな情報が日々目の前を流れ去っていくこの時代のインターネットでそれは良くない。
特にこういう記事は「イヤイヤ期」で検索すると出てきやすい。イヤイヤ期が来なくて不安になってる母親がこんな記事を見てしまったら追い打ちになる。

インターネット上での知識の共有は素晴らしいものだ。だが、これは良くない。たかがパンピーの個人ブログなのでそこまで責任を持てとはもちろん言えないが、良くない。
たぶん自分と似たような状況で苦しんでいる人に「救われた言葉」をシェアしたかっただけなのだろうが……

子供の発育には違いがあります。体についてもそう、心についてもそう。歩き始めるのが遅い子も、イヤイヤ期が遅い子も、それはそういうもの。私はどっちも遅かったけど。
あんたは人より鈍くさいけど、ゆっくりでも成長はしてる。人より遅くなったっていつかできるようになる。うちの母はしょっちゅうそんな風に言いました。「できない」「できていない」と言われることはほとんどありませんでした。「今はまだできない」「ちょっとずつうまくなっている」という言い方をします。人よりも遅いけど、人よりもまだ下手だけど、それだけだから。
まあ度を超えてのんびり(極めて婉曲な表現)した人間に育ったことは確かですけど、「できない」と「まだできない」は明確に違うものです。

何の話だっけ。そう、インターネットも良し悪しだねって話です。
鵜呑みにしちゃだめですよ。発信の敷居が下がれば下がるほど、情報を受け取る側は気をつけないといけなくなります。うっかりしていると傷ついちゃう。
統計に意味が無いとは言わない、先人の知恵だってそれは尊いものですけど、眼の前にいる我が子は世界に一人だけの存在です。速度は人それぞれ。その時の水準で(私は先天性疾患を持っていたので周りと比べれば相対的にあんまり元気ではなかった)元気なら良し。優先すべきは目の前の子供であり、それを育てる親自身であり、平均値じゃありません。

あーあとついでにもう一個。知人が「私には親の適性が無いんじゃないか」みたいな悩み方をしていたので書く。そういう風に悩んでいる事自体が十分に親の適性だと思うよ、私は。
子供の性格が千差万別であるのと同じように、親の性格も千差万別だ。虐待しているわけでもないのに、それ以上「こうあるべき」なんてもんは存在しない。形はどうあれ、責任感こそが親の愛そのものだと思うわけだ、個人的には。それは真摯さでもいいし、悩むことでもいいし、とにかく稼ぐことでも、暗い顔をしないことでも、なんでもいい。親であろうとする限りあなたは親だよ。

って書くと、言葉というのは難しいもので、毒親持ちを傷つけそうだなとも思う。
ときどき、子供を所有物として扱う親がいる。そういうのもまあ「親面」の一種ではあるわけで……。それは越権だからね。
愛と札を貼られたものだって、受け取るかどうかは受け取る側の自由だ。暴力はもちろん受け取らなくていい。
受け取られなかった手紙が送り主のところに返るしかないように、怒りというのもまた受け取られなければ送り主のところに返るしかないのだ。

悪し様に言われがちな二分の一成人式も、感謝の手紙を読むとかそういうのを抜きにすればいいものだと思うんだよね。大人の半分の権利と責任を持っている、という自覚を促すためには。
選挙権や納税義務を教え始めるきっかけとしてもちょうどいいだろうし。

SAWⅣ〜ザ・ファイナルを見た

SAWⅣは以前途中まで見ていたので途中から。

まず第一の問題なんですけど、ストラムとホフマンの見分けがつきません。相貌失認とまでいかないんですけど人の顔を覚えるのが苦手すぎる……。その上時系列まで入れ替わるので大混乱です。ゲーム参加者はわりとわかるんですけど、スーツ男性二名を見分けろってなるとどうにも困る……。
あとマシューズ。よく生きてたね? Ⅲの回想時点で死んだと思っていたので驚きました。生きとったんかワレ。っていうかあなた一回ゲームに負けてるのに……。
マシューズの頭は砕け、アートが撃ち殺され、リッグもまあ順当に行けば死ぬんでしょう。あのまま。
ストラム生還についてはよくそんな正確に穴開けたなってのが真っ先に来る感想。

SAWⅤ。面白かったのにメインゲームの影が薄く感じられたのはストラムとホフマンがえらい出張ってたからですかね。っていうかメインゲームあんまり話に関係なかったのでは?
メインゲームの四つめを見ながら、いやあ半分も血を失ったら流石に死ぬよねと思いました。失血致死量じゃん。どっちかを犠牲にして進むしか無いのでは?と思ったんだけど、なんとかなりましたね。なんとかなったんでしょうか。知らんけど。

ストラムはホフマンを追い詰めたつもりで、結局圧死しました。どういう仕組み? とかつい考えますが無視します。いやホフマン自分それどうやってそこから出るん? とも思いましたけど、Ⅵの冒頭で普通に出てきましたね。内側からは簡単に開く仕掛けってどんなんだろう。扉を完全にはめ込んじゃって外からは掴めないとかそんなんだろうか(地味)

Ⅵのホフマンは良くなかったね。実に良くなかった。結局快楽殺人犯じゃん自分。なーんにも学んじゃいない。アマンダもそうだったけどさ。

アマンダといえば、ジルの件。アマンダがセシルを唆して強盗をやらせるのが割と本気でわからない。ヤク中から足を洗えていなくて薬を盗みに行ったのか? と思ったんですけど、今ggったら「ジルへの嫉妬では」って出てきてやっぱり首をひねっている。
でもなーSAW3のときのジョンへの態度を見るとなー。ジルを死なせるのが目的ならまだわかるんですよ。ただ盗むだけ。ジルを消そうとしないなら、目的はジョンではなくジルの方にあるはずなんですよね。何だろう。釈然としない。人の感情の機微は苦手です。

あとⅥからⅢへの、ジョン側の時系列がよくわかってないな。
ジル流産→ガン宣告→医療保険を断られる→ゲーム開始、ってのはわかりますけど、自殺未遂の位置がわからない。あとⅥで言ってた治療は結局どこでやったんだろう。あれがうまく行かなくて絶望して自殺未遂? ガン宣告→自殺未遂→治療法発見→保険屋?
お金はあるって言ってたから治療は受けたんじゃないかと思うのだけど、まあどちらにせよ天国から地獄ではあっただろうな。Ⅲ時点で致命的にはなっていたのだし。

Ⅵのメインゲームのラスト。あれが正直よくわからない。ゲームじゃないじゃん?
ジョンのゲームは「生きたければ代償を払え」に一貫していたのだけど、母子は死ぬわけじゃないし。DIEを選んだら全員死亡、ALIVEを選んだら全員生還。もしくは自分たちが死んでも相手を許せるか? っていう形式じゃないとどうもゲーム感がない。Ⅲの判事のゲームが似た感じではあったけど、あれも息子の思い出の品を燃やせっていう代償はあったしな。

ナイフの件。えっあれ毎回手作業だったの? ってのが個人の感想。焼きごて的なものでじゅっとやってるのかと思ってた。器用か。

で、さっきも言ったⅥのホフマン。あれは非常に良くない。あの男、復讐の件は取り敢えず置いとくとしても保身で殺人やっちゃだめでしょ。
まあもちろん既に余命宣告を受けていたジョンと同じことをやれっていうのは無理なんだけどさ。「どうせ死ぬ」っていうのは最強の武器だもの。死にたくないと思えばああいう行動は取れない。Ⅱとか。ジョンは結局諦念の上に立って他人を見下していたのだと思うわけです。俺は死ぬのにお前らは命を粗末にする、それが許せないっていう、あれ八つ当たりですよね? 死に瀕する自分だけが命の重みを知っているっていう種類の傲慢では?

閑話休題、ザ・ファイナル。なーんでそんなわざわざ虎の尾を踏む真似をしてみるのか。でも金を儲ける人っていうのはある程度の危険を犯すのだろうね。危険手当こそ最上の儲け話なのかも。最良かはともかく。

字幕で見ているわけですが、岐路って言葉に「クロスロード」が当てられているのね。もともとクロスのロードだからそれはそれで普通の言葉なんだけど、個人的にはクロスロード作戦を思い出すなあ。長門と酒匂が沈んだアレ。水爆実験。まあ別に関係ないのですけど。何の岐路だったんだろうあの作戦。

SAWザ・ファイナルのラスト、ファラリスの雄牛、あれもなあ……ジョンは基本ゲーム参加者以外は死なせてなかったんだけど。無印とか2のマシューズの息子とかさ。ゲームオーバーとは言ってもあんたゲームしてないじゃんよという不服。

ゴードン先生の出番短かったな……。これ冒頭で出さなくてよかったのでは……。

電話の話

電話が嫌いなので電話の悪口を書く。

まず手が塞がる。メモが取れない。撫で肩とは不便なもので、特に最近の小さい携帯電話は無理だ、片手を目一杯上げないと耳元に電話機を挟めない。手だけ空いたってそれでは意味がない。気絶した西川君のポーズになる。イヤホンマイクというものも存在はしているが、特に会社の電話においてそれは使えない。

次に、音が悪い。電話越しのガビガビした音声はほんとうに嫌なものだ。声も近すぎ、大きすぎる。これは私の能力あるいは特性上の問題かもしれないが、音声処理に普段の倍近くの負荷がかかる。口元も見えない。音の大きさに気を取られて処理が落ちる。ADD気味だって自覚はあるけど聴覚過敏なんだろうか?

顔が見えるからと言ってSkype通話がいいかと言えばそれも良くはない。画面共有はいいものだ。確実に同じものを見ながら会話ができる。でもお互いの顔を映したまま「資料を見てください」とかやる連中は頭に何が詰まってるんだと思う。海苔の佃煮とかさもなくば梅びしおでも詰まっているんだろうか。

あと機密性がない。口から音を垂れ流しにする。あれが本当に良くない。文章ならセキュアな場でのやりとりも可能なのに、なぜわざわざ機密を口頭で話さにゃならんのか。いやまあわかるよ、物証が残らないのはセキュアな気がするでしょうさ。でもさ。逆に言えばエビデンスが残らないってことでもあるからね。

そう、エビデンスが残らないのもよくない。お互いの言ったことが曖昧になる。上司に報告したことが真逆になって別の上司に伝えられていることがある。馬鹿なのか。でも録音していなかった私も馬鹿だ。

あとこれは会社の電話ピンポイントの話なんだけど、他人が耳と頬に付けたものを自分の顔面に付けるのが無理。順序が逆でも無理。

そもそも文章なら校閲もできるし、Slackとかなら後から書き換えもできる。誤字脱字の修正ができる。電話では同音異義語の区別がつかない。
まあこのあたり、変えると換えると代えると替えるの区別もつかないような人は掃いて捨てるほどいるので救いにはならない。てにをははおろか句読点すらまともに使えない社会人もやっぱり掃いて捨てるほどいるので嫌になる。

文章が下手な人ほど電話したがるのは、あれは「汲み取ってくれ」って種類の甘えでしょう。自分の時間は最小限に抑えるけど相手の時間は平気で取っていくっていう。その自覚がないのか。頭にマッシュポテトでも詰まってんのか。

日記 2017年10月1日

行ってきましたスピッツ30周年記念ツアー、最終日!
シャトルバスのチケットを取って友人と待ち合わせ、のつもりが、「着いたよー」と友人に連絡したら「もう乗ってる」との返答があり、割とバラバラに現地へ。

私「そういえば君はそういうやつだったよ」
友「忘れてたの?」
私「忘れてた……」

現地に着いたのがおよそ二時過ぎ。グッズ購入列が長くなかったのでサクッとTシャツとタオルを買い、トイレ待機列も長くなかったのでサクッと着替え。しばらく会場周辺を散歩して、五時半からライブ。
あと付箋も買っちゃったんですけど、もったいなくて使える気がしません。どうしよう。

さすがに三時間分のセットリストは覚えられなかったので割愛。「ちょっと前の曲」という前フリで夢追い虫だったのは笑ったwつぐみよりは前の曲かなーと思ってたけど2001年の曲ですよそれ……。
就活時代を支えられた曲だったので当時のトラウマが蘇りちょっと泣きそうになりました。当時はひたすら聞いてたなあ、あの曲。夢追い虫の「夢で見たあの場所に立つ日まで」と君は太陽の「理想の世界じゃないけど、大丈夫そうなんで」には何回となく支えられてきました。今も大好きです。

正夢が流れている時、ピンク(だと思うけど白かもしれない、ライトがピンクだったのでそう見えただけかも)の紙吹雪が舞ってきたのすてきだったー。
拾える位置にまでは飛んでこなかったので残念。

今日のステージは後ろにモニターがあって、演奏しているメンバーの姿が大写しで見えました。モニターは大きいのがひとつではなく小さいのが複数あって、カメラも動くのでいろんなところがばらばらに写ります。歌っているマサムネさんの喉仏が大写しになったときにはなんだか狼狽えてしまった。えっちだ。
あと三輪さんはあれです、サングラス部分がモニタの間で隠れちゃうと金髪美女に見えます(視力が足りていない)。ギターソロで手元が写ったの嬉しかったなー。
田村さんは動き回っているので撮るのが大変そうだなとか、撮ってるからちょっと動くの我慢してるのかなとかはらはら。ライブ中見失う確率が一番高いですリーダー。
それから崎山さん!自分が映る場所を一箇所だけ先に知ってるとのことで、MCでいじられてましたけど、その後!カメラ目線!笑顔!!今年一番きゅんと来てしまった。危うくガチ恋勢になるところだった。

今回のライブはソロが多かった!気がする!普段のライブでもあるけど。田村さんのベースソロかっこよかったなあ……

インディーズ時代の曲もやってくれました、353号線のうた。インディーズだと晴れの日はプカプカプーとか、なんなら惑星S・E・Xのテーマでもやってくれないかナーとちょっと期待してましたがwスピッツのライブには珍しい、観客参加型での演奏。楽しかった。ぱーぱーぱぱーぱぱーぱー。

ロビンソンの演奏の前、スピッツの最盛期の曲みたいな説明がありましたけど、そう思ってる人とライブに来てる人は層として重ならないんじゃないかな。いつだって今が最高です。っていうか何千回も言ってるけど50歳になってなお涙がキラリ☆の高音が出るマサムネさんはおかしい……。
「僕が天使だったなら」の歌詞の部分で「あなたが天使じゃないなら何なんだ?!」と毎回思います。天使です。後光が差しています(物理)。

あんまり関係ないのだけど、会場に段差?が無く、全席パイプ椅子で、後ろの席の人が身長低い人だったのでやたら気を使ってしまったw腕なんか振り上げたら見えないかなーとか。あの段差って大事なのね。

日記 2017年9月25日

買い物に出た。爪やすりを買ってこようとして、結局買い忘れた。ヴィセのコンシーラーと、アイシャドウを買った。それからナチュラル系の服を売っている服屋さんに出かけて、セット品を含めいくつかの衣服を買った。赤いセーターと、白いシャツと、ベージュのスカート。とても可愛い。今日はおやすみですかと訊かれて、厳密には私は求職中であるから「おやすみ」ではないのだけれど、はいと答える以外の選択肢を知らない。

好みの色のズボンが無かったのでユニクロに行こうと思ったらユニクロは新装開店準備中だった。仕方ないので同じビルに入っている丸善に行ったら、ビートたけしが書いたという恋愛小説が売られていたので、買った。普段は恋愛小説は読まない。テレビに出て、喋ったり笑ったりしているのを知っている人の書いた恋愛小説というのは、何だか少し後ろめたい感じがする。

丸善を出て道を歩いていたら「レモネードあります」の看板(と言って正しいのかわからない、布)が見えたのでふらっと入って値札を見たら五百円もしたので飲み物に五百円払うならと思って千二百円のカレーセットを食べた。マンゴーラッシーが飲みたい。

それからユニクロの系列の、もう少し若い層向けのお店に行った。最近はガウチョパンツというのが流行っていて、私はあれがどうもすきになれない。流行りに阿るのも癪なので、結局ズボンは買わなかった。代わりに可愛いネックレスとピアス。それぞれ五百円ちょっと。とても可愛い。

本当は靴も欲しかったけれど、二十五センチの靴も心もとないような私の大きな足に合う靴はそう滅多に見つかるものではない。

今週は久しぶりに美容院に行こうと思っている。生きていくというだけで、やることが多い。

“日記 2017年9月25日” の続きを読む