ゆずかまたまうどん

技術, PCゲームレビュー, PCゲームトラブルシュート

Secure container kappa 手に入れました 【Escape from Tarkov】

f:id:tenmihi:20200524105614p:plain
長い道のりだった

2019年12月末に購入した自分にとっては初めてのSecure container Kappaです

0.12での目標にしつつ、コツコツとクエストを進めてました

escapefromtarkov.gamepedia.com

メジャーパッチが来てワイプされてすぐではなく、2020年1月頭から再開したので取得までにかかったのは4ヶ月ちょいでしょうか

取得時のステータスはこんな感じでした

f:id:tenmihi:20200524111322p:plain

f:id:tenmihi:20200524111341p:plain

f:id:tenmihi:20200524111359p:plain

f:id:tenmihi:20200524111417p:plain

以下楽しかったクエストと苦労したクエストです

楽しかったクエスト 😊

  • Test drive - Part 1
    • 扱う銃のコストにビビりまくってましたが、Thermal Scopeの楽しさを教えてくれました
  • Gunsmith系
    • お金かけるだけで済むのと、様々な銃のカスタムとステータスを色々知れるので楽しかったです
  • The guide
    • 失敗するとリセットと知ったときは焦りましたが、緊張感を持ってraidを完了していけて達成感もひとしおでした

苦労したクエスト 😩

  • Collector
    • FirekleanやGolden roosterなど割と取り置いてなかったものを探しに行くのが大変でした。でも割と2,3日で見つかるもんですね
  • Decontamination service
    • へなちょこ装備だとscav2体相手にすると死ぬのでキツかったです。それでもInterchangeのリワークが来る前に終えたのでよかったですが…
  • "The Tarkov shooter" - Part 8
    • Part 7 でPMC 3人倒したりしてたんですがいざPart 8になるとなかなかうまく行かず。woods 20 raidほど回して成功
  • A Shooter Born in Heaven
    • 初めてこのクエストの内容を見たときは崩れ落ちました。大変でしたが割と狙撃ポイントを踏まえれば100mキル狙えるもんだなと思いました
  • Silent caliber
    • 相手に使われると強いんですが、自分が使うとヨワヨワなショットガン。もう少しショットガンについてはいろいろ試してみたいと思ってます

目標は果たしたのでいったんここでEFTはお休みです

おいしいreserve scav play (loot編)【Escape from Tarkov】

おいしいscav reserve

おいしいです

reserveはraiderもボスも湧くし人気マップで危なっかしいですが、高価なアイテムがざっくざっくでおいしい

そんなreserveをscavだとノーリスクでわいわい遊んで帰ってこれるんでとってもおいしいです

Map

海外wikiのほうにいろいろ載ってます

escapefromtarkov.gamepedia.com

どこがおいしい

ホワイトナイトの建物

f:id:tenmihi:20200308130628p:plain
壁面にホワイトナイトが描かれています

この建物付近でscav spawnすることが多くて到達しやすい場所です

豊富なweapon modと食料、回復、ジャンクなど様々なものが落ちます

3階一番奥左の部屋

f:id:tenmihi:20200308181559p:plain
まず目につくのはweapon crate

ここにはツールボックスx1、大きい武器クレートx1があります

f:id:tenmihi:20200308181652p:plain
このようにAESAがどーんと置いてあることが

机の上にはweapon modが湧き、椅子の上にgold chain, intelligence, AESAなど高価なものが湧いたりします

ちなみに机の中にintelligenceが湧くこともあるので見ておくと良いです

屋上

たくさんのweapon modが湧きます

目玉はサーマルスコープのFLIRです

ブラックビショップ(?)の建物

ヘリコプターが停まっている広場のヘリコプターの向いている正面の建物です

こちらの建物は各部屋にダッフルバッグ、医療品、PCなどがあります

2階端の鍵がかかった部屋(RB-AK)

この部屋は本当はRB-AKで開けなければ行けないんですが、実は鍵がなくとも入ることができる方法があるのでSCAVでも到達可能です

よく中で誰かしら死んでます。競争率高めです

この部屋の中の棚にInterchangeのtexhoやtechlightのようなテック系の品々が湧きます

目玉はTetriz, Graphics Cardです

E2バンカー

f:id:tenmihi:20200308181749p:plain
バンカー名の部分に黒猫が書いてあります

f:id:tenmihi:20200308181827p:plain
ひっそりParacord

ここ入って右のロッカーの中に最高で2つまで(?)Paracordが湧きます

それ以外は特に美味しいものは湧いているのを見たことがないです

Chrome拡張の "Dark Reader" を使ってほとんどのサイトをダークモードで閲覧する

f:id:tenmihi:20191202225239p:plain
githubのprofileページをダークモードで閲覧した例

Dark Readerを使うことでほとんどのWebサイトをダークモード(黒基調とした配色)で閲覧することができます

インストールしてすぐ適用されますし、コンパネが日本語化されていることもあってとても使いやすいです

ライトモード・輝度の調節

ダークモードだけでなくその逆の白基調とするライトモードもあります

ライトモードの状態で輝度を落とすことでもダークモードとはまた違った見やすさを得ることができます

f:id:tenmihi:20191204003707p:plain
githunのprofileページをライトモード+輝度を落として閲覧した例

単に輝度を調節するだけでもダークモードがうまく聞かないWebページなども目にやさしい表示で閲覧できそうです

ブラックリスト/ホワイトリスト

ブラックリストあるいはホワイトリストでダークモード化するWebページを設定することができます

f:id:tenmihi:20191202224728p:plain:w200

chrome.google.com

Docker上で動くdiscord.pyで実装したbotがdiscord.opus.OpusNotLoadedを吐いてしまい音声の再生ができない

概要

Docker上で動くdiscord.pyで実装したbotがdiscord.opus.OpusNotLoadedを吐いてしまい音声の再生ができない問題です

前提

docker-image: python:3.6-alpine3.9

解決策

opus-devを入れれば再生できるようになります

RUN apk add --no-cache opus-dev

似たようなパッケージにopusが存在するんですが、こちらでは解決できません

参考

github.com

短い音声を流すためのDiscord botを作った

タイトルのとおり、短い音声を流すためのDiscord botを作りました

github.com

チャットで特定の単語を入力するとそれに対応した短い音声(SE)が再生されるsay soundというアドオンがTeam Fortress 2に存在しまして、個人的に好きだったのでDiscordでも再現してみました

(連続で流れてくる酔っ払ったおじさんの声みたいなのがsay soundで再生されてる音声です)

誰かが特定の言葉をしゃべるとDiscordのvoice channelに接続して音声を再生してくれます

動機

python3でdiscord bot書いてみたかったのとdockerでらくらくdeployできる環境を作ることをやりたかったので自分で作りました

技術スタック

botの実装はpython3で、実行環境の構築にdockerを用いてます

実際のところraspberry piで動かしたかったんですがarm向けにdocker imageをうまくビルドすることができず、 結局そのままdependenciesを入れて直接動かしてました(dependenciesはREADMEに書いてます)

pythonで書いてみてどうだったか

以前rubyで軽めのbotを書いたことがあったんですが、どちらも簡単に書くことができて差はほとんどないです

自分が書きやすい言語で書いちゃえばいいんじゃなかろうかと思いました

特定のAndroid OSバージョンでVueのコンポーネントを読み込んだ際に`Uncaught SyntaxError: Duplicate data property`が出る【Vue】

概要

Android OS 4.4系でVueのコンポーネントを読み込んだ際にUncaught SyntaxError: Duplicate data property in object literal not allowed in strict modeが出る問題です

Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict modeとは

エラー内容の通り、オブジェクトのキーが重複していると起こるエラーです

const obj ={
  a: "hoge",
  b: "fuga",
  a: "piyo", // <-重複しているよ!
}

Android 4.4系でVueのコンポーネントを読み込んだ際に発生するパターン

例えば以下のコンポーネントを読み込むと起こります

<template>
  <div>
    <span>ただのチェックボックス</span>
    <input
      type="checkbox"
      v-model="checked"
      :checked="false"
    >
    </input>
  </div>
</template>

<script>
export default {
  data() {
    return {
      checked: true,
    }
  },
}
</script>

オブジェクトのキーが重複していると言われるとexport defaultしているオブジェクトにどうしても目が行きがちなのですが、コントローラーの実装はシンプルでそのような箇所はありません

エラーが起こってるのはtemplate側ということになりますが、こちらもそのまま見ても原因がわからないのでwebpackでビルドした後のバンドルファイルを覗いてみます

__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"render\", function() { return render; });
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"staticRenderFns\", function() { return staticRenderFns; });
var render = function() {
  var _vm = this
  var _h = _vm.$createElement
  var _c = _vm._self._c || _h
  return _c(\"div\", [
    _c(\"span\", [_vm._v(\"ただのチェックボックス\")]),
    _vm._v(\" \"),
    _c(\"input\", {
      directives: [
        {
          name: \"model\",
          rawName: \"v-model\",
          value: _vm.checked,
          expression: \"checked\"
        }
      ],
      attrs: { type: \"checkbox\" },
      domProps: {
        checked: false,                      // 👈ココ
        checked: Array.isArray(_vm.checked)  // 👈ココ
          ? _vm._i(_vm.checked, null) > -1
          : _vm.checked
      },
      on: {
        change: function($event) {
          var $$a = _vm.checked,
            $$el = $event.target,
            $$c = $$el.checked ? true : false
          if (Array.isArray($$a)) {
            var $$v = null,
              $$i = _vm._i($$a, $$v)
            if ($$el.checked) {
              $$i < 0 && (_vm.checked = $$a.concat([$$v]))
            } else {
              $$i > -1 &&
                (_vm.checked = $$a.slice(0, $$i).concat($$a.slice($$i + 1)))
            }
          } else {
            _vm.checked = $$c
          }
        }
      }
    })
  ])
}
var staticRenderFns = []
render._withStripped = true

//# sourceURL=webpack:///./src/example/views/App.vue?./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options"

domPropsのオブジェクトにcheckedが重複しているのがわかります

今回の例ではv-modelと:checkedどちらかを抜いてしまえばdomPropsの重複キーが無くなりエラーを解消できます

vue-loader v15でVue SFCからcssを読んだときと直接.cssファイルを読んだときに利用するloaderを使い分けたい【Vue】

概要

vue-loader v15でVue SFCからcssを読んだときと直接.cssファイルを読んだときに利用するloaderを使い分ける方法です

(cssはあくまで例としてで、scssやjsなどやり方はどれも同じです)

使い分けている例

webpackのoneOfというオプションを利用して使い分けることができます

以下の例を実際にwebpackのconfigで表現してみます

  • 直接.cssファイルを読んだとき -> css-loader + postcss-loader
  • Vue SFCに記述したcssを読んだとき -> vue-style-loader + css-loader
rules: [
  {
    test: /\.css$/,
    oneOf: [
      {
        resourceQuery: /vue/,
        use: [
          'vue-style-loader',
          'css-loader',
        ]
      },
      {
        use: [
          'css-loader',
          'postcss-loader',
        ]
      },
    ]
  }
]

vue-loaderを通して読み込まれた場合resourceQueryにvueが付与されることを利用して判定することができます