ことさら−古都プログラマーの更級日記

京都でお寺を回りながら御朱印集めをしていたり、LoLをしたり試合を見に行ったりしているエンジニアのブログです。技術的なはなしとか日常的なはなし、カメラやLoLや競馬の話も書きます。右メニューに検索やらカテゴリーやらがあるので、見たい記事だけ見てね!

リーグ・オブ・レジェンド オデッセイ 何が強いかなーという話

もくじ

オデッセイとは

こちらを見てください

オデッセイ:脱出 | League of Legends

チャンピオン考察

ヤスオ

多分オデッセイで一番強くて一番重要なチャンピオンです。重要なのはアルティメットの「鬼哭啾々」を強化することと、鬼哭啾々と相性の良い竜巻を強化することが重要かと思います。

強化ユニット

  • 風渡り -- 鬼哭啾々のダメージ、効果時間、射程が増加。他の敵に対して再発動可能
    • 多分最重要で、射程が増加するのと、再発動が強いです。射程が伸びることでマルファイトのウルトにも合わせやすくなるのも大きいです。
  • 破風 -- 鬼哭啾々で無敵になり、当たったユニット1対につきつむじ風を2つ発射
    • 風渡りとの相性が良い
  • 流浪 -- つむじ風のダメージが増加し、さらにヤスオのもとに戻ってくる
  • 発達 -- つむじ風が距離に応じて大きくなっていく

多分この4つついていたら十分な気がしています。ビルドは通常のヤスオのビルドで良いでしょう。オデッセイモード特有の強化は少ないので、その点は通常のサモリフと同じ感覚でプレイできるかも。マルファイトと合わせると強いです。

マルファイト

これもめちゃめちゃ強いです。ADASビルドに行くのがキモです。マルファイトのパッシブのシールドのクールダウンが通常攻撃をするたびに短縮されるので、ASが上がるとすごい勢いでパッシブのシールドが回復するので死ななくなります。

また、オデッセイのマルファイトは最初からADが100あるので、ステラックの篭手を積むことでいきなりADが高い状態でスタートします。その後はグインソーやファントムダンサーでASを稼ぎ、インフィニティエッジで確定ダメージを得るといった、ADCのようなビルドに進みます。

強化ユニット

  • スライド -- アンストッパブル・フォースが壁に当たるまで止まらなくなり、更にダッシュの途中で触れた敵すべてを巻き込んで全員ノックアップする。
    • とにかくこれで敵を集めてヤスオのウルトなどのAOEで一気に雑魚を倒すのが重要です
  • オンスロート -- アンストッパブルフォースのダメージが増加し敵に命中するごとにクールダウンが短縮
    • クールダウン短縮が重要です

その他には威嚇によるグランドスラムのタウンと付与が強いので、グランドスラムを強化していくのが重要かも。あとはとにかく敵を殴りましょう。ヤスオほどではないですがダメージめちゃめちゃ出ます。

ジンクス

ウルトの使い方が重要です。

  • コメット -- メガデスロケットが敵に当たってもそのまま飛びつづけて炎の軌跡を残す
    • コメットの炎のダメージ強化のためAPビルドに行くのが重要です。これでザコ敵を一層できます。コグマウやヴェルコズのような、遠くにいて厄介なザコ敵に向かって打ちましょう。
  • 予備弾頭 -- メガデスロケットを3発までスタックできてかつクールダウンも短縮される
    • 説明不要の強さ

ザコ敵一掃がかりです。そう言うと「道中しか役に立たなくね?」と思うかもしれませんが、結局このゲーム、死ぬ時はザコ敵で溢れた時だとおもうので、超重要な役割です。

とりあえず今回はここまで

とりあえず今回はここまでにします。個人的ジグスが一番弱いかなという気がします。ヤスオ2マルファイト1ソナ1ジンクス1くらいが一番強そう。

【LoL】今のパッチでMIDをやった時に試合開始1分くらいまでにやること

  • 味方ジャングルがBOTスタートの時はTOPサイド、味方ジャングルがTOPスタートの時はBOTサイドに陣取って、相手がリバーまたはこちらのバフに入ってきたりワードを置かないことを確認。
  • カニが重要である。相手がTOPサイドのカニをやっているのか、またはBOTサイドのカニをやっているのか確認できるようにリバーのブッシュにワードを置く。

MacBookにあこがれていて、仕事で使う機会があったので使ってみたら意外と微妙だった話

もくじ

はじめに

f:id:yoshiki_utakata:20180908102631p:plain

この画像は以下の記事の画像ですがなんかいろいろ思うところがありますね。

アップルMacBookより455g軽い高性能PC「GPD Pocket 2」 - 週刊アスキー

なんてことはどうでもいいです。

私、MacBookにあこがれていた時期がありました。

MacBookとは?

Macのノートパソコンには大きく分けて3つあります。

MacBook ProMacのノートパソコンで最も高機能なやつです。

MacBook AirMacBook Pro の軽量化版です。

Appleは主にこの2種類のノートパソコンを展開していたのですが、数年前にMacBookというのが登場しました。

www.apple.com

スペックもそれなりに追求しつつ、とにかく軽量化に力を入れたモデルです。MacBook Air よりも断然薄くて小さいです。

MacBookを使ってみたら微妙だったという話

MacBook、薄くていいじゃないですが、あのMacBook Airよりも薄いんですよ。そしてスペックも悪くない。しかしちょっと値段が張るのと、今持っているノートPCで特に困っていなかったので買っていませんでした。

しかし去年あたり、仕事でMacBookを購入できる機会が訪れました。そこから半年~1年くらいガッツリ使ってみたら、僕の期待したのとはちょっと違ったな、という話です。

発熱めっちゃするし思ったほどパフォーマンスが出ない

まず、僕の普段のPCの使い方ですが、

  • docker コンテナを立ち上げながらサーバーサイドの開発をしたり、
  • iOSアプリを開発したり
  • docker上では結構重いバッチ処理が定期的に動いているので、どちらかといえば結構CPUをばりばり使って開発をしています。

今までMac miniを使って開発していたのですが、ちょっと試しにMacBookで開発していました。

まず思った点ですが

  • 発熱がすごい

とにかく発熱がすごいです。膝の上において開発とかしてたらやけどします。

そして発熱に伴ってCPUのパフォーマンスが劣化していきます。カタログほどのスペックが出ることはほぼない気がします。開発中にPCが止まることもしばしば。確かにdockerで重めの処理を走らせているとはいえ、ちょっと厳しいなという気がしました。

dockerを止めてiOSアプリの開発だけをしている時は大きな問題はありませんでした。ただ実機テストする時はiPhone繋げないと行けないと思うんだけど、USBないしどうやってつなげるんだろう、という疑問が。

それ以外の点

キーボード

キーボードはぺったんこですが特に押しづらいということはありません。むしろキーがでかくて押しやすいのですが、キーがヘタりやすい気がしました。*1 キーがヘタると打鍵感覚がなくなってめっちゃ違和感があります。キーボードにこだわる人はやっぱりダメそうってのと、打鍵が強い人には向いていない気がします。

USB Type-C について

USB Type-C しかないですが、僕はクラウド管理ですからUSBメモリも刺さないし、ネットも無線LANだし、サブモニタも刺さないので特に困らないです。逆に

  • USBメモリやSDカードを使ったりする
  • モニタをつなげたい
  • ネットは優先でつなげたい
  • USBを使ってiPhoneなどをつなげたい

などなにかケーブルを刺したい民については変換アダプタ(1万円近くする)が必須です。

まとめ(感想)

MacBookにあこがれて使ってみたけど発熱がやばくて思ったほどのパフォーマンスが出ないという話でした。

あんまり重くない処理をする開発だったらいいんだけど、dockerとかIDEとか使うんだったら結構厳しいかも。

以上です。

*1:このあたりは打鍵パワーの差とかもありそうですが

PHP Mockeryでパーシャルモックなどを作る場合にコンストラクタがちゃんと呼ばれるようにしたい

Mockeryでパーシャルモックを作ることがある

<?php

class モックしたいクラス {

    public function __construct()
    {
        $this->repository = new Repository();
    }

    public function モックしたいメソッド() 
    {
    }

    public function モックしたくないメソッド()
    {
    }
}

// テスト

$mock = \Mockery::mock(モックしたクラス)->makePartial();
$mock->shouldReceive(モックしたいメソッド)
    ->andReturn($something);

しかしここで問題が出た。モックするとコンストラクタが呼ばれないので、$this->repository が new できなくてテスト中に死ぬ。

そもそも、コンストラクタの中でnewしていたり、パーシャルモックを使わなきゃテストできあにようなことをしているコードが悪いのだが、過去の遺産となってしまったコードでは仕方がないこともある。

コンストラクタを呼びたい場合はこうする

$mock = \Mockery::mock(モックしたクラス, [])->makePartial();

わかりやすく言うとこういうことだ

$mock = \Mockery::mock(モックしたクラス, [コンストラクタ引数1, コンストラクタ引数2, ...])->makePartial();

これでコンストラクタがきっちり呼ばれるようになり、$this->repositoryもちゃんとnewされるわけだ。めでたしめでたし。

参考

Ruby on Rails 5 の ActiveRecordやmigration で id を string 型にしたいとき、テーブル名を複数形じゃなくて単数形にしたいとき

もくじ

migrationのときにstring型のidを使いたいとき

Ruby on Rails

rails generate migration <マイグレーションクラス名>

ってしたあとにファイルにテーブル定義を書いていく事を考えます。このとき、デフォルトのままだとint型でauto incrementかつprimary keyなidという属性が勝手に追加されますが、必ずしもそのようなidを使いたくない場合もあるでしょう。例えば、string型のidを使いたい場合の定義はこうです。

とりあえずマイグレーションクラスを生成します。

rails generate migration CreateChampion

マイグレーションクラス名は何でも良いですが、動作+テーブル名 みたいな感じがいいでしょう。今回は champion テーブルを作成するので CreateChampion としました。

db/migrate/20180815052519_create_champion.rb みたいなファイルができるので中身を書きます。

class CreateChampion < ActiveRecord::Migration[5.1]
  def up
    create_table :champion, id: false do |t|
      t.string :id
      t.string :name_jp, index: true
      t.string :version, index: true
      t.string :body
    end
    execute "ALTER TABLE champion ADD PRIMARY KEY (id);"
  end

  def down
    drop_table :champion
  end
end

多分最初は def change が定義されていると思いますが、今回の場合 updown をちゃんと定義する必要があるのでupとdownを定義します。

upではまず、 create_table :champion とするのですが、 id: false をつけます。これにより、デフォルトの、intでauto incrementなidが自動でつかないようにします。

その後、改めてstring型でidを定義しなおして、テーブル作成後に alter table で id を primary key に指定するようにします。(もしかしたらもっときれいな方法があるかもしれませんが...あったら教えてください)

この書き方の場合、downも自分で書く必要があるので、downはdrop_tableとします。

テーブル名を単数形にしたい場合

マイグレーション

テーブル名を単数形にしたい場合は、

class CreateChampion < ActiveRecord::Migration[5.1]
  def up
    create_table :champion, id: false do |t|

というように、 create_table :champion と書き換えます。これがデフォルトのままだと :champions と複数形になてっています。

Ruby on Rails命名規則ですと、テーブル名は複数形になるのですが、一般的にテーブル名は単数形のほうが多いかと思います。わざわざ単数 - 複数の単語をマッピングするのも面倒ですし*1、そもそも複数にすると違和感のある単語をテーブル名に使うこともあるでしょう。

ActiveRecord

ActiveRecordの方は、通常クラス名を複数形にしたテーブル名が自動的にマッピングされるのですが、今回の場合明示的に対応関係を渡してやる必要があります。

class Models::Champion < ActiveRecord::Base
  self.table_name = 'champion'
end

こういう感じです。

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

改訂3版基礎 Ruby on Rails (KS IMPRESS KISO SERIES)

*1:datum - data みたいな不規則変化がめんどくさい