ただ日々を記すもの

意識高めを装うことができます

【プレミア16-17】アーセナルがUCL出場権を獲得するための条件を整理してみた

プレミアリーグも残すところあと1節。

優勝チーム、降格チームが決まり落ち着きつつあるリーグ戦ですが、まだ決まっていないのがUCL出場権を獲得できる4位争い。

ここでは、明日の試合に備え、アーセナルが4位でフィニッシュするための必要条件を整理してみました。

現状

まずは、兎にも角にも現状の順位表と最終節の対戦相手を確認

3位:マンチェスターC 75ポイント(最大78ポイント) 得失点差 36

5.21(日) v ワトフォード 15位 (アウェイ)

4位:リバプール 73ポイント(最大76ポイント) 得失点差 33

5.21(日) v ミドルスブラ 19位 (ホーム)

5位:アーセナル 72ポイント(最大75ポイント) 得失点差 31

5.21(日) v エバートン 7位 (ホーム)

4位以内に入る条件

アーセナルが負けた場合

アーセナルに負けは許されません。この場合は、残念ながら5位確定です。。

アーセナルが引き分けた場合

リバプールの2点差以上の負けが条件となります。

仮にリバプールが2点差以上で負けたとして、得失点差で並んだとしても

現状アーセナルは総得点数でリバプールを下回るので(アーセナル: 74, リバプール: 75)4位に入るのは非常に厳しい状況です。

相手がミドルスブラだけに2点差以上の負けはまずなさそう。。。

アーセナルが勝った場合

マンチェスターシティが大敗することが条件になりそうです。

アーセナルが勝ち、マンCが負けたとしても得失点差ではシティがかなり有利なため、それをひっくり返すくらいのアーセナルの大勝、もしくはシティの大敗が必要になります。仮に得失点差で並んだとしたらシティの総得点は75のためアーセナルが上回ることが決まりますが可能性としては低そう。。

リバプールが引き分けもしくは負けること。

1番可能性が高いのはここ!!

ファンとしてはここにかけるしかない!!

まとめ

アーセナルの勝ちは絶対条件、そしてリバプールが引き分けもしくは負ける。これが条件です。

対戦相手のミドルスブラは、降格が確定していること、リバープールホームでの試合だということを考えるとかなり難しいですがアーセナルなら奇跡を起こしてくれるはず…!

【Huawei nova】購入から使用まで

今まで使っていた「Huawei P8 Lite」があまりにも動作が遅いので我慢できず新しく「Huawei nova」に買い換えました。 ちょっと予想外なこともあったのでここにメモ書き。

「Huawei nova」を購入

新しいスマホはSIMフリー端末で買おうと決めていたので まずは端末を確認、YMobileのSIMがそのまま使えるか確認するために家電量販店に。

  • メモリが3GB
  • 価格がiPhone7の半額程度
  • 使用レビューがかなりよかった

話を聞く中で上記の点を確認できたため、「Huawei nova」を買うことに決定。

どこで買うか色々見て回ったのですが、それなりに安く早く届きそうだったのでAmazonで購入

「Huawei nova」をセットアップ

注文から2、3日で到着。

かなり綺麗にまとまってました。

中身はこんなこんじ

f:id:RONKUN:20170507225623j:plain

f:id:RONKUN:20170507225637j:plain

いざSIMを挿入! が、ここで問題.. SIMのサイズが合わない...

YMobileに確認したらSIMカードのサイズ変更はできないとのこと。 (端末とセットでSIMを契約している場合は、SIMのサイズを変更できないよう...量販店で聞いたときはそのまま入れれるって言ってたのに...)

やむなく、こちらのSIMカッターを買うことに。。 (ちなみに買ったのはこちら↓)

Micro SIMサイズからnanoSIMサイズにカットし、いざ使用!

それ以降のセットアップは、言語設定したり、Googleのアカウントと連携させたりと困ることは特になく簡単に設定できました。

「Huawei nova」を使用

今までHuawei P8 Liteはあまりに動作が遅かったため、ネットでの検索はiPhone5sを使用していました。

Huawei novaはiPhone5sと比べてほぼ変わりなく使用することができています。(たぶんベンチマーク?はnovaのが上。)

今のところ何の不自由もなく使えています。 iPhone5sから乗り換えの人(レビューだとiPhone6からの乗り換えの人も)は、少なくとも使い勝手が悪くなることはないと思います!

最後に

SIMのサイズはスマホ購入前にしっかり確認しましょう。

ORACLE MASTER Bronze 12c DBAに受かった話

先日Oracle Master Branze 12c DBA試験に合格しました。 勉強法とか勉強時間とかを書いていこうとおもいます。

勉強方法

絵で見てわかる Oracleの仕組みを1周読んだ後に、白本を1周しました。その後に章末問題をさらに1周し、巻末の問題集で1度間違った問題を解き直しました。

  • 絵で見てわかる Oracleの仕組み  -> 1周(期間的には1週間くらい)
  • 白本 -> 全体を1周 + 章末問題1周 + 巻末問題(間違った問題)1周

白本を1周した後に巻末問題(模擬試験)に挑戦しましたが、2つある模擬試験どちらも50%くらいしか正解できませんでした。

そのあと章末問題を1周し、巻末問題の間違った問題を解き直しました。その際、半分くらい正解しました。

単純に考えてこれで75%くらい正解できるかなぁと思って受験しました。

試験前の実力

エンジニア2年目。

業務では、Mysqlを使用。SQL文はたまに書くくらい。DBの管理は担当していない。

去年の初めに新人研修に関わりDB周りを教えることがあり、そこでちょっと勉強していました。

試験結果

  • 試験でかかった時間 1時間弱 (試験時間: 2時間)
  • 正答率 79% (合格率 70%)

感想

勉強を始めてから資格を取得するまでにかかった期間は1ヶ月弱。

だいたい毎日1~1.5hくらい勉強していた感じです。

所感としては、SQLの試験に比べてかなり簡単に受かります。

最初に絵で見てわかる Oracleの仕組みを読んだことで、勉強しやすかったです。友人から勧められた勉強法ですが、確かに理解しやすかったのでこれから勉強する方にもオススメです。

ポートフォワードとは

業務においてサーバーへSSH接続する機会がありました。 その際上司に、 「ポートフォワードすればローカルで確認できるから」と言われました。 自分としては、「、、、ぽ、ポートフォワード?」

そんなこんなで、ちょっとだけ調べたのでここに最低限のことをまとめておきます。

ポートフォワードとは

SSHで接続した際に、設定した自マシンのポートで接続先のアプリケーションを確認できるもの。 多分参考にしたサイトの説明の方がわかりやすいのでそちらを参考にしてみてください。

ssh ポート転送とは他マシンにあるIPポートを、自マシンのポートとして 扱うための技のひとつ。つまり、自マシンの特定ポートへの接続が sshサーバを介しての他マシンの指定ポートへの接続となる。

参考

他マシンからも接続する方法

ssh [接続先のホスト名] -L 8081:localhost:8080

これでローカルでlocalhost:8080 で接続すると[接続先のホスト名]の8081ポートにつながっていることになります。

ただ!!

これだと他のPCからIPアドレスを指定して接続しようとしてもできません。。

そんな時は、-gをオプションをつけましょう。

ssh [接続先のホスト名] -g -L 8081:localhost:8080

こんな感じ! これで他PCでIPアドレスを指定してあげれば接続できます。

以上です。どなかの参考になれば。。

【Scala, Slick】Slickのmonadic joinには上限があるっぽい

コンパイルエラーがないのに、Slickのコードで実行時にエラーが発生していました。

いろいろ調べてみたのですが、どうやら monadic join にはjoinできるテーブルに上限があるようです。

monadic joinに関して

細かいことは、今後まとめます。

使い方は2種類。flatMapを使う場合とforを使う場合。

とりあえず、↓がドキュメント

公式ドキュメント

ちなみにこちらのドキュメントでは、implict inner join と紹介されている

people.flatMap(p =>
  addresses.filter(a => p.addressId === a.id)
           .map(a => (p.name, a.city))
)
val monadicCrossJoin = for {
  p <- people
  a <- addresses
} yield (p.name, a.city)

使い方としては、こんな感じになります。

複数のテーブルをjoin!!

使い方がわかればあとは、好きに使うだけ。

複数テーブルを使うときは、↓こんな感じ。

val monadicCrossJoin = for {
  c <- coffees
  s <- suppliers
  p <- people
  pd <- peopleDetal
} yield (c, s, p, pd)

….って使い方をしたいんですが、 実はこれできないんです。

どうやらmonadic join でjoinできるテーブルには上限があるようなんです。(詳細はこちら

対応策

じゃあ、一体どうやって4つ以上のテーブルをjoinすればいいの?

対応策は、至極簡単で、そもそもmonadic join だけで対応するのを諦めることです。

val monadicCrossJoin = for {
  (c, s) <- coffees.join(suppliers)
  p <- people
  pd <- peopleDetal
} yield (c, s, p, pd)

↑のような感じで記述すれば問題なく使用できます。

ちょっと説明すると、

val crossJoin = for {
  (c, s) <- coffees join suppliers
} yield (c.name, s.name)

coffees join suppliers の部分はapplicative join です。

生成されるSQL文に違いがあり、

monadic join

SELECT c.name, s.name FROM coffees c, suppliers s

applicative join

SELECT c.name, s.name FROM coffees c join suppliers s

となります。

まとめ

バグなのかはいまいちわからないですが、 とりあえず対応策を書いておきました。

参考になれば幸いです。
あと、細かく知ってる方いたら具体的になんでダメなのか教えてもらえるとすごく嬉しい