haneuma.log

生きるのをがんばりたい

プロメアを観た

はじめに

プロメアを観た、レイトショーで。

promare-movie.com

アツい、最高、優勝です。めちゃくちゃすき。 グレンラガンキルラキルをやってバーンでした。最高です。

いい心の揺さぶられ方をしたので、明日も元気に生きる気持ちになった。

ゲームマーケット2019春で買い物をした

はじめに

サークル参加じゃないです。ただの買い物です。

gamemarket.jp

朝に弱い人間なので13時くらいに行ったらいろいろ完売してて泣いた。 前回は試遊できなかったので、今回は試遊して買い物をするのを目標にした。目標は達成できたのでよかった。

買ったもの

  • インサイダーゲーム

ブラフゲーム。好きなやつ。人のでよく遊ぶので自分用を買った。

  • ソクラテスラ〜キメラティック偉人バトル〜/ソクラテスラ〜キメラティック偉人バトル〜 拡張版 死のプレゼンテーション

パーティーゲーム。3枚に分割された偉人のカードを組み合わせて戦う。 拡張版で大喜利モードが追加され、お題に合う偉人を召喚できた人にポイントがつくようになった。 試しに遊んだら「へヴァエリース一世一世」が召喚できました。

  • 宇宙の瞬き

レガシーゲーム。ジャケ買い

  • クク21

駆け引き/運ゲー。すごろくや版のデザインが好き。

  • 閻魔裁判

ワーカープレイスメント/拡大再生産ゲーム。閻魔裁判で現世での徳をアピールしてより良い来世を手に入れる。 「賽の河原で石を積む」アクションがやりたくて買った。

欲しかったもの

  • 神機共鳴コア・コネクション:暗躍のナブラ

デッキ構築ゲーム。買い物・アクションが共通のコストで行える。戦略性とさっくり感が両立してて良かった。 カードデザインがカッコいい。絵柄もカッコいい。試遊してたら完売して泣いた。誰か持ってたら僕と遊んでください。 エウレカセブン的な世界観が最高なんですよ、こういうの大好きです。もっとこういう世界観のゲーム増えてほしい。 第一弾(暗躍のナブラは第二弾)の本体と拡張は秋に再販を計画しているとのことなので、こちらも再販されることを祈って暮らします。

おわりに

コア・コネクション:暗躍のナブラ、再販待ってます。2019秋は早起きすると誓います。

Zombies are standing out とポルノグラフィティらしさ

下書きに漬けられていたので続きを書きました。高まりすぎて何書いたらいいか分かんなくなっちゃったんだね…。


PORNOGRAFFITTI 16th LIVE CIRCUIT "UNFADED" 福岡公演に参戦して高まったので、ポエムを書きます。

サブスクリプション解禁と "UNFADED"

UNFADADE に込めた意味を晴一さんが、サブスクリプションが解禁されたことで、シングル曲もカップリング曲も、昔の曲も今の曲も横並びになって、そういう中で昔の曲が「色褪せて」いないか、今の曲が「色褪せない」と良いとか、そういう話です。詳しくはライブに参戦してBlue-ray か DVD を買って MC を聞いてください。

色褪せない、横並びになった、という切り口で思い出すのは、人に「ポルノグラフィティ好きなんですよ」と言うとだいたい言われる

ポルノグラフィティは昔の曲が好きかな』

です。若干かなしくなりつつ、「あーそうなんすねー」とか「最近の曲もいいですよー」とか答えています。みなさん覚えはありますか。

一般的にファッションや機械など昔のものは古くなって色褪せがちですが、ポルノグラフィティの曲について僕の観測範囲では「昔の曲が好きだった」と称されがちです。これは、特定の世代で流行るという、アーティストの性質によるものだと思います。中高生の頃に好きだったものはずっと好き、みたいな話です。

つまり、むしろ色褪せることはなく、アポロやアゲハ蝶が煌々と輝き続ける一方、THE DAYやカメレオン・レンズには目が向けられていないのではないか、とか考えたりします。

そこで表題です。

Zombies are standing out

突然発表された配信限定シングルです。控えめに言ってめちゃくちゃカッコいい曲です。みんな聴くべき。

www.youtube.com

めちゃくちゃカッコいいんですが、「今までのポルノグラフィティと雰囲気が違う気がする…?」という気持ちが芽生えました。

方向性が変わったという点では、TAMA さんの脱退、ak.homma さんがプロデューサーから退くなど、制作体制の変更タイミングが2回ほどありました。そういったタイミングで、「この辺から曲の雰囲気変わった気がするなー」と感じます。 それはとても嬉しいことで、いろんなポルノグラフィティじゃん、最高、感謝、みたいな気持ちです。

Zombies are standing out も、そんな、ポルノグラフィティらしくないポルノグラフィティ、でもやっぱりポルノグラフィティだなあ、という、認識を深められた曲です。

色褪せないポルノグラフィティ

昔のポルノグラフィティも今のポルノグラフィティも変わらずポルノグラフィティで、いつのポルノグラフィティポルノグラフィティらしさがあり、「昔のポルノグラフィティが好き」な人の色褪せないポルノグラフィティらしさも大事にしてほしいけど、今のポルノグラフィティのらしさも感じてくれたらな、と思います。

以上、ポエムでした。


2019年9月7日/8日に20周年東京ドーム2DAYライブがあるよ!!!!!!!!!!!!!!!!!!!!! いこう!!!!!!!!!!!!!!!!!!!

sp.pornograffitti.jp

自宅に食洗機を導入した

はじめに

前からずっと欲しがっていた食洗機を買った。

食器洗い乾燥機 NP-TCM4 商品概要 | 食器洗い乾燥機/食器洗い機 | Panasonic

家事がとにかく嫌いなので、なるべく機械化していく試みとして導入した。

よかった点

食器を入れておけば洗浄されるのは、思ったより体験がよかった。 洗うぞ!と決意するより、詰めるぞ!と決意するほうがコストが低いので、気軽に食器を洗えるようになった。

手が荒れないのも嬉しい。 自炊をして毎日食器を洗うような生活をしていた頃は、ずっと手が荒れていた。 ゴム手袋をすれば手荒れは防げるけど、蒸れるのであまり気が進まなかった。 そういう問題が解決したのはめでたい。

わるかった点

食洗機はうるさいと聞いていた。確かに洗濯機みたいな音がする。 いつ食洗機を回すかは自分で制御可能なので、うるさくても良い時間に回すと良さそう。

食器をきれいに詰めるのが案外難しくて、少し面倒を感じる。慣れれば多少解決しそう。

設置

設置場所の都合上、電源コードを延長する必要があった。 食洗機は接地が必要な機器なので、秋葉原の電気街まで3ピンプラグのアース線が入った延長コードを探しに行った。 自分では見つけられなかったのでお店の人に聞いたら、普通に出してくれた。自作するはめにならなくてよかった。かまぼこ型のモールも出してくれた。

分岐水栓は説明書どおりに接続できた。ただ、六角レンチが合わずに蛇口の頭が外せないトラブルが発生したので、3日ほど設置作業を延期するはめになった。

工具が揃っていれば、設置作業はそれほど難しくなかった。

終わりに

食洗機はいいぞ

CliftonStrengths テストを受けた

はじめに

CliftonStrengths テストを受けた。

www.gallupstrengthscenter.com

CliftonStrengths テストは、質問に対する[そう思う・どちらかと言えばそう思う・どちらでもない・どちらかと言えばそう思わない・そう思わない]的な回答から受験者の強み=資質を分析するツールである。資質(theme)は4分類・34種ある。

CliftonStrengths Quick Reference Card

テストの結果から、上位の資質5つを見れるライセンス($19.9)と、全ての資質の順位が見れるライセンス($49.99)がある。上位5つを見てから全ての順位を見るためのライセンス($39.9)もある。

自分の思考や行動の傾向を探るのが好きなので、自分のことはなんとなくわかっているつもりでいた。なので、上位資質5つだけ見てみることにした。やすいし。

結果

  1. 内省 - Intellection (戦略的思考力)
  2. 着想 - Ideation (戦略的思考力)
  3. 学習欲 - Learner (戦略的思考力)
  4. 指令性 - Command (影響力)
  5. 個別化 - Individualization (人間関係構築力)

それぞれの資質の説明を以下に引用する*1。また、簡単に日本語をつける。

Intellection® | People exceptionally talented in the Intellection theme are characterized by their intellectual activity. They are introspective and appreciate intellectual discussions.

内省の人は知的な活動を好む。知的な議論を有益と感じる。

Ideation® | People exceptionally talented in the Ideation theme are fascinated by ideas. They are able to find connections between seemingly disparate phenomena.

着想の人は新しいアイディアを好む。事象間の関連性を見出すことができる。

Learner® | People exceptionally talented in the Learner theme have a great desire to learn and want to continuously improve. The process of learning, rather than the outcome, excites them.

学習欲の人は強い学習欲求をもち、向上を求める。結果より過程に興味をもつ。

Command® | People exceptionally talented in the Command theme have presence. They can take control of a situation and make decisions.

指令性の人は存在感がある。主導権をもって決定を下す。

Individualization® | People exceptionally talented in the Individualization theme are intrigued with the unique qualities of each person. They have a gift for figuring out how different people can work together productively

個別化の人は個々のユニークな特性に興味をそそられる。異なる人々が生産的に働けるようにまとめられる(?)

ライセンスに含まれる電子書籍や自身の資質に関するレポートに詳しいことが書いてあるので、各自参照してください。

感想

戦略的思考力が強いのは予想してたけど、指令性と個別化は意外だった。

言われてみれば、自分に主導権が無い状態を強く嫌うので、指令性の資質に納得できる。「自分の意見を主張するのに迷いがなく、意見の対立に怯えない」というのも当てはまる。社会性がない、協調性がない、と言われるの、これのせいでは…?

個別化は自分を特性のある個として見てほしいとも言える。わかる。でかい主語で雑にくくられると「は?」ってなる。

内省と着想、学習欲は妥当っぽい。 頭使ってゲームするのが好きで、プレイについてあれこれ考えたり、人と議論したり、そういう過程自体を楽しいと思っている。 負けたらちょっと悔しいけど、勝ち負けに頓着しないところがある。なので、自分より十枚くらい上手なプレイヤーと遊ぶのが一番楽しい。仕事も同様かもしれない。

開発/研究チームのリーダー(チームメンバー全員僕より優秀)みたいな人になると強そう。ただ決定的な欠陥として、結果に頓着しないところがある。自身の資質に関するレポートにも、アウトプットせよ、と書いてあった。

まとめ

意識していなかった資質が見れてよかった。残りも見たくなった。今度ライセンス購入します。

*1: Gallup, Inc. : CliftonStrengths® Themes, 入手先〈https://www.gallup.com/workplace/245090/cliftonstrengths-themes-quick-reference-card.aspx〉(参照2019-05-23)

仕事のがんばり具合を記録して可視化する(記録する編)

はじめに

これは Yahoo! JAPAN 18 新卒 Advent Calendar 2018 の21日目の記事です。

みなさん仕事がんばってますか?自分は新卒らしくがんばっています。がんばっているので、がんばり具合を記録して可視化します。

やりたいことはだいたいこういうことです。 pokutuna.hatenablog.com

ざっくり書くと:

  • 開いているウィンドウのログを記録する
  • グラフにする

ということをやります。どんなウィンドウを開いていたかを時系列に並べてグラフにすれば「10時から1時間くらい Emacs 開いてるからコード書いてるんだな、がんばってるっぽいぞ!」というのがわかります。これががんばり具合です。

セキュリティ的に、社外秘を含む情報を扱う端末のログの外部送信は問題があるので、このような取り組みを社内の環境で行えるような仕組みを自分で作ります。今回は記録するところについて書きます。

できたもの

社用 PC が Mac なので Cocoa でアプリケーションを作ります。Swift は書いたことがないのでインターネットを駆使してがんばります。がんばると、このような JSON が獲得できます。

[
  {
    "kCGWindowAlpha" : 1,
    "kCGWindowLayer" : 0,
    "kCGWindowMemoryUsage" : 1128,
    "kCGWindowSharingState" : 0,
    "kCGWindowOwnerPID" : 39418,
    "kCGWindowNumber" : 154478,
    "kCGWindowOwnerName" : "Xcode",
    "kCGWindowStoreType" : 1,
    "kCGWindowBounds" : {
      "X" : 135,
      "Height" : 877,
      "Y" : 23,
      "Width" : 1305
    },
    "kCGWindowName" : "AppDelegate.swift"
  },
  {
    "kCGWindowAlpha" : 1,
    "kCGWindowLayer" : 0,
    "kCGWindowMemoryUsage" : 1128,
    "kCGWindowSharingState" : 1,
    "kCGWindowOwnerPID" : 2160,
    "kCGWindowNumber" : 151228,
    "kCGWindowOwnerName" : "Google Chrome",
    "kCGWindowStoreType" : 1,
    "kCGWindowBounds" : {
      "X" : 170,
      "Height" : 62,
      "Y" : 92,
      "Width" : 366
    },
    "kCGWindowName" : ""
  }, ...

開いているウィンドウの名前と、どのアプリケーションから起動されているかがわかりますね。おおむね重なり順も合っているはずですが、雑に作ったので怪しいかもしれない。 JSON が得られたので、Elasticsearch + Kibana で可視化できそうな感じがしますね。

しくみ

常駐の Cocoa App で5秒ごとにウィンドウログ取得して、JSON 形式で保存させています。XCode の気持ちになって、しかるべき場所にこのようなコードが書いてあると思ってください。

func applicationDidFinishLaunching(_ aNotification: Notification) {
    Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.saveLog), userInfo: nil, repeats: true)
}

@objc func saveLog() -> Void {
    let filename = self.getDocumentsDirectory().appendingPathComponent("\(NSDate().timeIntervalSince1970).json")

    let windowList = self.getWindowList()
    let data: Data = try! JSONSerialization.data(withJSONObject: windowList!, options: [])

    do {
        let windowInfoList = try JSONDecoder().decode([MyWindowInfo].self, from: data)

        let encoder = JSONEncoder()
        encoder.outputFormatting = .prettyPrinted
        let encoded = try! encoder.encode(windowInfoList)

        do {
            try String(data: encoded, encoding: .utf8)!.write(to: filename, atomically: true, encoding: String.Encoding.utf8)
        } catch {
            print(error)
        }
    } catch {
        print(error)
    }
}

getWindowListMyWindowInfo あたりが大事なので、詳しく説明します。

ウィンドウリストを取得する

CGWindowListCopyWindowInfo() でさっくりウィンドウリストが取得できます。CFArray で結果が返ってくるので、外側は NSArray にキャストします。中身は NSDictioanry とします。.optionAll ですべてのウィンドウを取ってくると常駐アプリケーションや Desktop プロセスなどのがんばり具合に寄与しないものが取れてしまうので、適当にフィルタします。高さが23以下のウィンドウは常駐アプリケーションで、layer が 0 より小さいのは Desktop プロセスとかその辺です。用途によっては自作のフィルタではなく、CGWindowListCopyWindowInfo() のオプションでいい感じに必要なウィンドウだけ取得することもできます。

func getWindowList() -> [NSDictionary]? {
        guard let windowList: NSArray = CGWindowListCopyWindowInfo(.optionAll, kCGNullWindowID) else {
            return nil
        }

        let swiftWindowList = windowList as! [NSDictionary]

        let filteredWindowList = swiftWindowList.filter { (windowIndo: NSDictionary) -> Bool in
            var flag: Bool = true

            // Bounds filter
            let bounds = windowIndo[kCGWindowBounds] as! NSDictionary
            let height = bounds["Height"] as! Int
            if height <= 23 {
                flag = false
            }

            // Layer filter
            let layer = windowIndo[kCGWindowLayer] as! Int
            if layer < 0 {
                flag = false
            }

            return flag
        }

        return filteredWindowList
    }

JSON に変換する

getWindowList() で得られるのは NSDictionary の NSArray なので、JSON 文字列に変換していきます。 JSONSerialization -> JSONDecode -> JSONEncode という手順でやります。 Serialization で潰したデータを一旦 Decode して、人間に優しい表記で Encode する感じです。

平たく書くとこうなっています。例外の気持ちになって、しかるべきコードに読み替えてください。

let windowList = self.getWindowList()  // -> [NSDictionary]

// windowList を1行に潰す
let data: Data = JSONSerialization.data(withJSONObject: windowList, options: [])

// ねじ込む
let windowInfoList = JSONDecoder().decode([MyWindowInfo].self, from: data)

// 人間に優しい表記にする
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let encoded = encoder.encode(windowInfoList)
let dst = String(data: encoded, encoding: .utf8)!

Decode するときは Codable を使います。潰したデータを任意の構造体にねじ込めます。便利ですね。

struct MyWindowInfo: Codable {
    var kCGWindowAlpha: Double
    var kCGWindowBounds: MyWindowBounds
    var kCGWindowIsOnscreen: Bool?
    var kCGWindowLayer: Int
    var kCGWindowMemoryUsage: Int
    var kCGWindowName: String?
    var kCGWindowNumber: Int
    var kCGWindowOwnerName: String
    var kCGWindowOwnerPID: Int
    var kCGWindowSharingState: Int
    var kCGWindowStoreType: Int

    struct MyWindowBounds: Codable {
        var Height: Int
        var Width: Int
        var X: Int
        var Y: Int
    }
}

ログについて

ログは溜めて使ってこそ価値がありますね。弊社もそのようにやっています。そういうわけで、運用にあたって調べておきたいことを調べておきます。

容量・転送

常駐アプリケーションで5秒毎にテキストデータを生成しているので、ログが気になります。見てみると1ファイルあたり 44KB でした。 1時間で 60 * 60 / 5 * 44 = 31680KB になります。32MB くらいですね。今月の必要労働時間は147時間15分らしいので、1ヶ月で (147 * 60 * 60 + 15 * 60) / 5 * 44 = 4664880KB になります。4.7GB くらいですね。 保存期間を1年間とすると 56GB くらいになります。現実的な容量ですね。

また、ログの保存と可視化のために、適当なサーバに定期的に転送する必要があります。 1時間ごとに転送するとして 32MB くらいなので、現代のインターネットなら問題なさそうです。 社内のネットワークを計測したところ、7.80MB/sec でした。5,6秒あれば転送できそうです。

メモリ使用量

だいたい 12MB くらい食べています。社用 PC のメモリは 16GBなので、常駐させても問題なさそうです。

セキュリティ

ウィンドウ名に社外秘情報が含まれる可能性があるので、生ログは社内にしまっておく必要があります。

まとめ

いつ、どのくらい、どんなウィンドウ(アプリケーション)を開いていたかのログを使って、仕事のがんばり具合を記録・可視化する取り組みについて書きました。 この記事では Cocoa でロガーを作るところと、ログの保管について少しだけ検証しました。可視化するところは作業中なので、また別の記事に書きます。

Swift は初めて書いたので、記事内のソースコードについてコメントがあればぜひお願いします。また、このプログラムは社内の GHE に置いているので、興味のある方は入社して一緒にがんばり具合を記録しましょう。

以上、Yahoo! JAPAN 18 新卒 Advent Calendar 2018 の21日目の記事でした。

参考

第51回 情報科学若手の会に参加しました

はじめに

wakate.org

今年も情報科学若手の会に行ったので書きます。こちらは参加者の気持ちで、幹事の気持ちは反省会後にまた書きます。

過去の参加記録はこちらです。

今年で参加も4回目になるので、感慨深いかもしれない。今年は気づいたら終わってた気がしました。楽しい時間は終わるのが早いというので、そういうことですね。気が抜けているだけかもしれないので、気合を入れたい。

発表の感想

招待講演と若手特別講演

招待講演はコンテナーデータセンターを個人で作ったお話を、宇田さん。

「データセンターを個人で作った」という文字列が強力なので何を聞いても面白く、とても楽しい時間だった。「コンテナー即売会」「いかにもコンテナーを置くためのようないい物件」「土地が買えてしまったので後戻りできなくなった」がお気に入りワードベスト3です。 普段キーボードを叩いて暮らしているので現実空間に存在するものを作る話は夢があるし、遠い存在だと思っていたデータセンターに親近感がわいて良かった。ラック3台くらいなら単相電源で良いのか〜なるほど〜と思った。質問者が皆「自分もデータセンター欲しくなりました、」という枕詞をつけて質問を始めており、やはりこれは情報科学の人間の夢なんだと思う。僕もほしいので、とりあえず家で雑になっているラズパイをどうにかするところから始めたい。

若手特別講演はプログラムの難読化手法について、黒米さん。

難読化というとソースコードをややこしくするだけだと思っていたけれど、ロジックの難読化や論理式の複雑化など、色々なアプローチがあって興味深いと思った。 一番面白かったのは、プログラムの高速化の手法を難読化の方法として用いるところ。他のセッションでちょうど高速化はコードが複雑になって辛いという話をしていたので、ふつうのソフトウェア開発で欠点になるところを活用してしまうのは皮肉っぽい。活用する側が攻撃側なので欠点といえば欠点なのだけど。SATソルバの話なども出てきて、プログラミング言語の色々を使って攻防が繰り広げられているのだあ、と思った。あとはやっぱり機械学習が使われてきており、今後もっと使われていくという見解を得た。後輩がそのようなことをやっていて、構文木をデータとして入れて云々という内容だった気がするので、今度会ったら詳しく聞こうと思った。 聞いてて面白いけど詳しく理解できなかったことはとても残念だったので、精進したい。

一般/ショート

情報科学のことならなんでもOKという趣向で発表を募っているので、毎年様々な分野の深い話を聞けて良い。 トピックスはだいたいこう。

プログラミング言語、セキュリティ、インフラの話が多かった気がする。同じ人を壇上で3回くらい見かけるのを2回くらいやった気がするので、そういう関係かもしれない。

印象に残った感想を述べていきます。

  • 非同期処理の手法がとっちらかりすぎててすごい

  • Lispは神言語

  • やはり一度コンパイラを作りたい
  • サイバー攻撃の可視化には学生時代の研究室の関係上一家言あるので(以下略)
  • ポートを家の扉に例えるのはかわいかった
  • 極力人間の仕事を減らすために環境構築を自動化したいが、年1回のためにどこまでやるかは考えるところがある
  • 「(時間を食われすぎるため)CTFは明らかに社会人には難しい」
  • 企業がこれほどまでにCTFに力を入れているのは、ハッカーの技術を吸収できるとか、未知の脆弱性を見つけられることもあるとか、メリットが大変大きいため
  • OSSは人
  • 発表中にOSSのオーナーにTwitterでメンションを投げて無事返信があり、めでたかった
  • 会計データで会社のマッチング
  • IaaSの多様性がしんどい
  • Rustは要するに安全なC++
  • REmacs
  • アカデミアでのニューラルネットはブームの終わりを迎えているところ
  • 計算機科学の知見が脳科学に示唆を与えている!可能性を感じて嬉しくなる
  • ディープラーニングは脳になれるか?→No(激うまギャグ)
  • ディープラーニングで中間表現を扱えるようになってきている
  • GANすごい
  • 「discriminatorがグレる」

交流イベントの感想

今年はナノブロックを説明書を見ないで組み立ててもらうゲームをしました。説明書を見て指示を出す人、ブロックを組み立てる人に分かれてやります。また、箱の中身は何だろな?クイズをやりました。ガラケーとかアヒルのおもちゃとか入れました。

みんな集中してて茶々を入れても構ってもらえず寂しかったです。 僕もやりたかった。

ナイトセッション・懇親会

会場の都合上、みなさんとお話できる時間は短かったですが、話したかった人と話せて良かったです。

おわりに

来年は発表したい。

推しきのこ #wakate2018