めも

メモ.

最近買った本について (2019.07.25付近)

購入した本など.

いい本教えてください.

順番は特に意味はありません.

漫画でわかるFGO(著 リヨ)

FGOのリヨさんの絵柄が好きなので購入.

中国語版も出版されているらしいが、かなり探したものの日本から正規で購入できるルートが見つけられず断念.

もしも国内で販売している箇所ありましたら教えていただけると嬉しいです.

ついでに葛飾北斎もゲットしました、座布団も同時購入.

f:id:misos:20190816220722j:plain
FGO葛飾北斎

座布団は以下の物を使用, 大きすぎると思いましたがフィギュア自体が大きいためちょうどいいサイズでした.

リヨさんのtwitterは以下より. いいですね...

委員長のノゾミ(著 戸田 大貴)

未発売ですが...買ったことにします.

以下の動画(著者の方のチャンネルです)かどこかのタイミングのテトリス?の動画で知り、

早朝の配信が自分の活動時間とたまたまマッチして見続けていました.

www.youtube.com

赤くて覚めたくない (著 ハヌル)

twitterで漫画の存在を知り購入.

「感情」から書く脚本術(著 カール・イグレシアス, 島内哲朗)

もう少し早く読んでおきたかった本.

物語を作る上で必要な要素、対立がなぜ必要か...などほとんど全てのページがためになる内容だと思います.

長編の脚本を書く人でなくとも、読んで見る価値はあります.

「感情」から書く脚本術  心を奪って釘づけにする物語の書き方

「感情」から書く脚本術 心を奪って釘づけにする物語の書き方

技術者のための特許実践講座(著 小川 勝男)

特許周辺の知識が不足していると感じたため読破.

これと「技術者の逆襲 経営者の期待を超える発想と実践のノウハウ(著 藤井 隆満)」を読みましたが、こちらの内容が実践に近く有用でした.

あくまでエンジニア視点の本であり、特許資料の記述方法などを説明するものではないので注意してください.

統計的因果探索 -機械学習プロフェッショナルシリーズ- (著 清水 昌平)

以下の動画で因果探索に関する基本的な内容を触れています.

www.youtube.com

より詳しく知るために購入しましたが、まだ本をひらけていません...

日本人の英語 (著 マーク・ピーターセン)

英語で a, the などの付け方の理解を整理するために購入.

日本人の英語 (岩波新書)

日本人の英語 (岩波新書)

動作表現類語辞典 (著 マリーナ・カルダロン, マギー・ロイド=ウィリアムズ他)

よくweblioの類語表現のページを参照するのですが、

手に取れるサイズの本を本屋で見つけたため勢いで購入.

できればkindle版が欲しいのですが..

気が向いたらアンジェラ・アッカーマン著の感情類語辞典も読んでみようと思います.

俳優・創作者のための動作表現類語辞典

俳優・創作者のための動作表現類語辞典

  • 作者: マリーナ・カルダロン,マギー・ロイド=ウィリアムズ,シカ・マッケンジー
  • 出版社/メーカー: フィルムアート社
  • 発売日: 2019/07/26
  • メディア: 単行本
  • この商品を含むブログを見る

わたしのあたまのなかのにわ(作 水井 軒間)

イラスト作品集なので文章はないです.

以下の個展の場所が手近だったので足を向け、購入.

GirlsGeneration~少女の時間~2019夏 展 - AAA Gallery

やさしい人物画(A. ルーミス著, 北村孝一 訳)

購入。

前回

基本情報技術者試験の結果

午前80, 午後83でした. (およそ午前60, 午後60以上で合格)

終わってから感じたのは、午後のセキュリティとCの問題(特にセキュリティ)はぶっつけ本番で行くと(正解していても)自信が持てずに不安だったこと.

結果論ですが, 参考書を一冊ざっと読み→メモしながらわからない単語チェック・深掘り→過去問等でランダムに午前の問題を解いていく→午後のセキュリティの過去問とソフトウェア開発(C言語)の過去問を何個か解く、感じでよかったのかもしれません.

参考書は以下の80日前の記事に乗せたもので十分でしたが, 午後のCの問題とセキュリティに関しては過去問を解いて覚えたほうがいいと思いました. 本にはCを含む言語の問題がありませんが, 配点的には落とすことができません. セキュリティ=必須、言語=どれか一つ選択で必須.

また他のを受ける際もメモは残したいと思います.

過去のメモ

GoogleTestで特定のテストだけを実行する

実現したいこと

各テストに名前がつけられている中で、特定の名前のテストだけを実行したい.

TestAAA
 |--Test_GetXXXTest
 |--Test_SetXXXTest
 |--Test_GetYYYTest
  ...

方法

GoogleTestのadvanced.md内, SelectingTestの章を参照する. フィルタの指定方法も記載されている.

  • gtest_filter=*XXX*:*YYY*: 「XXX」か「YYY」が名前に含まれるものを実行
  • gtest_filter=-*XXX*: 「XXX」が名前に含まれないものを実行

以下は[XXX]が含まれるテストのみを実行する場合を示す.

コマンドラインから実行時に指定

--gtest_filter=*XXX*をオプションに指定

コードにて指定

RUN_ALL_TEST()を実行する前にフィルタを記述.

::testing::GTEST_FLAG(filter) = "*XXX*";

環境変数にて指定

export GTEST_FILTER = "*XXX*"

参考文献

googletest/advanced.md at master · google/googletest · GitHub

youtubeで動画のタイトルに合わせて自動で指定した再生リストに追加する

やりたいこと

動画タイトルに「大乱闘オンライン対戦!」などと書いた時に、すでに作成済みの「大乱闘動画リスト」に自動でこの動画を追加したい.

もちろんライブ配信画面や動画設定画面でもリストを指定できるが、毎回指定するのは多少面倒.

1.「再生リストの設定」画面へ

再生リストのページから「再生リストの設定」をクリック。

f:id:misos:20191102144607p:plain
再生リストのページにてオレンジの箇所をクリックして「再生リストの設定」へ移動する.

2. 「詳細設定」画面へ

そのまま「詳細設定」をクリック.

f:id:misos:20191102144850p:plain
詳細設定をクリック.

3. 「自動的に追加」タブへ移動し, ルールを設定する

f:id:misos:20191102145013p:plain
「ルールを追加」から自動的に追加をするルールを指定できる.

現状では「タイトル」「説明」「タグ」に特定の文字が含まれる場合に、指定した再生リストに自動で追加するようなルールを作成できる. ルールはOrになっており、どれか一つでも当てはまると自動で追加される.

f:id:misos:20191102145255p:plain
ルール指定例.

特許の調べ方についてメモ

自分の理解の整理のためのメモ. 自身の現状の理解なので、詳細は特許庁:2019年 知的財産権制度説明会(初心者向け)テキストの確認をお願いいたします.

技術者(弁理士などでは無く、アイデアを自ら開発した後に先行文献を知りたい人)にとっての調べ方です.

特許の概要

何かを実現する上で問題があり、それを解決する発明がある。その発明の中で特許の要件を満たす形に説明されたものが特許.

特許に関する資料として、特許庁:2019年 知的財産権制度説明会(初心者向け)テキスト が公開されている.

知的財産

*人間の幅広い知的創造活動の成果について、その創作者に一定期間の権利保護を与えるようにしたのが知的財産権制度です。知的財産権は、様々な法律で保護されています。

出典:特許庁ウェブサイト(https://www.jpo.go.jp/system/patent/gaiyo/seidogaiyo/chizai02.html

そして、知的財産に含まれるものは更にいくつかに分けられる。その中の一つが特許 であり現実の課題を解決するための「発明」に対して特許の形で保護される。

*知的財産権には、特許権や著作権などの創作意欲の促進を目的とした「知的創造物についての権利」と、商標権や商号などの使用者の信用維持を目的とした「営業上の標識についての権利」に大別されます。

出典:特許庁ウェブサイト(https://www.jpo.go.jp/system/patent/gaiyo/seidogaiyo/chizai02.html

そして、知的財産は以下のように分類される。 特許は独占的な権利を得る代わりに公開する必要がある。特許として公開せずに営業秘密にする場合、情報が漏洩してしまった時にそれを証明することが難しくなる場合もある。

  • 創作意欲を促進するもの
    • 実用新案権
    • 特許権
    • 著作権
    • 意匠権
    • 営業秘密(不正競争防止法)
  • 信用の維持をするもの
    • 商標権
    • 商品表示・商品形態(不正競争防止法)

先行文献の調査

特許公報の検索

最も単純には特許情報プラットフォーム(J-PlatPat)から特許広報を検索することができる.

特許公報を検索してみましょう | 経済産業省 特許庁

FIの検索

特許にはFIと呼ばれるインデックスが付与されている.

FI(File Index)は、日本の特許庁が採用する独自の特許分類であり、明治期以降の全ての日本の特許に付与されています。

引用元:日本の特許を特許分類から調べる | 調べ方案内 | 国立国会図書館

FI/Fターム、IPCを特定したい場合は以下で調べる. 特許審査時の検索にも使われるので、自身の技術に関連するFIは事前に調べて、そこを中心に関連を調べる.

特許・実用新案分類照会(PMGS)

初めは自身の技術がどのFIに該当するかは未知のはずなので、

  • 特に自身の技術に関連性の高い単語・ワードで広報を検索
  • 収集した文献の本願に付与されたFタームを確認
  • PMGSにてFI/Fタームの意味を確認
  • 特に関連度が高いFI/Fターム+文字列で特許を確認

する.

Fターム

日本の特許庁が採用する独自の特許分類です。FIで規定される技術分野は、2019年6月時点で約2,600件の「テーマ」と呼ばれる技術範囲に区分されており、うち約1,800件について、複数の観点(目的、用途、材料、制御、制御量など)から細分類を行った特許分類であるFターム(File Forming Term)が作成されています。

引用元:日本の特許を特許分類から調べる | 調べ方案内 | 国立国会図書館

FIが20万項目あるのに対し、Fテーマは2500超しか存在しない. 自身の技術を構成・関連するFテーマを連結させて検索をすることで大まかにフィルタリングをかけることができる.

参考文献

野崎篤志. "IT・ソフトウェア特許の新潮流~ 活用・防御から標準化まで~: 3. IT エンジニアが知っておくべき特許情報調査の基礎知識." 情報処理 54.3 (2013): 200-207.のみ、ウェブ上でpdfを閲覧できます. (Google Scholar検索結果)

  • 「技術者のための特許実践講座 技術的範囲を最大化し,スムーズに特許を取得するテクニック」 (小川 勝男, 金子 紀夫, 齋藤 幸一 著)
  • 技術者・研究者のための特許入門 元特許庁審査官の実践講座」 (KS科学一般書, 渕 真悟 著)
  • 野崎篤志. "IT・ソフトウェア特許の新潮流~ 活用・防御から標準化まで~: 3. IT エンジニアが知っておくべき特許情報調査の基礎知識." 情報処理 54.3 (2013): 200-207.
  • 「出典:特許庁ウェブサイト(url)」での参照元の記載は特許庁サイト上の「出典の記載について」で規定されている記述法に従っています.

基本情報技術者試験の対策時のメモ(7日前)

以下で問題を解きつつ, ミスを確認.

基本情報技術者過去問道場|基本情報技術者試験.com

本番前に用意

  • 証明写真(受験票に貼る)
  • HBまたはB以上の鉛筆/シャーペン+消しゴム
  • 時計

試験の流れ

揃えて9:00前に会場につき, 9:10までに着席. 午前は途中退席可能. 午後は12:40までに着席、試験は13:00~15:30を想定. (自身で受験票・試験要網 を確認してください)

問題を解きながら調べた内容

用語の確認の意味合いが大きいです. 先週の金曜に確認した内容です.

ソフトウェア

  • 用語

    • 抽象化:同じ性質をもつ複数のオブジェクトをまとめる、複数クラスから共通する要素を抜き出して基底クラスを作成するのは汎化
    • 継承:基底クラスの性質が派生クラスにも受け継がれる事
    • カプセル化:データを操作する処理を内部に隠蔽する事
    • リエントラント:同時に複数プロセスから共有しながら実行しても正しい結果が得られるプログラム
    • リユーザブル:一度ロードしたら再びロードしなおさずに実行可能なプログラム
    • リロケータブル:メモリ上のどのアドレスに配置しても正しく実行できるプログラム
    • 委譲:あるオブジェクトに依頼されたメッセージの処理を、他のオブジェクトに委ねる
  • マイクロカーネルとモノリシックカーネル

    • モノリシックカーネル:主要な機能のすべてを同じメモリ空間に置いて運用
    • マイクロカーネル:OSの必要最小限の機能のみを保持
    • https://linuc.org/study/knowledge/460/
  • AOTコンパイラとJITコンパイラ
    • AOT: Javaのバイトコード, C, C++, プログラムの実行時間を短縮できる可能性がある
    • JIT: 実行環境を知った状態でそれに応じた最適化ができる
  • テスト
    • トップダウン <-> スタブ:未完成の下位モジュールの入出力のみを定義したもの
    • ボトムアップ <-> ドライバ:テストしたい下位のモジュールを呼び出すもの
  • スラッシングなど
    • スラッシング:主記憶の容量が十分でない場合にページイン・ページアウトが多発してCPUを使用している割合が減少すること
      • ページング: 仮想アドレス空間をページと呼ばれる単位に分割、ページを単位として仮想アドレス(メインメモリー)から実アドレス(ハードディスク)へとデータを変換すること

      • ページングとは何? Weblio辞書
    • スワッピング:待機状態の実行中のプログラムをスワップファイルに退避
    • メモリリーク:メモリが解放されないまま主記憶上に残っている状態
    • フラグメンテーション: 主記憶の空き容量は多いが、使用領域がバラバラに存在するために大きな領域の確保ができない状態
  • メールサーバ周辺のプロコトル
    • CHAP/PPP: IDとパスワードによってを認証するときのプロトコル
    • SMTP: メールサーバー間でのメールの交換
    • POP3(Post Office Protocol): Post Office Protocol - Wikipedia
      • ユーザがメールサーバから自分のメールを取り出す時に使用する、メール受信用プロトコル。現在は、改良されたPOP3 (POP Version 3) が使用されている。

    • SMTP: 電子メールを送る際に使用するプロコトル
  • 言語など
    • HTML5
    • XML, XLink( XLink - Wikipedia )
      • DTD(Document Type Definition): 文書構造を定義するためのスキーマ言語
    • Report Program Generator:事務処理など
    • Extensible Business Reporting Language:財務処理など
    • Standard Generalized Markup Language: マニュアルなどを作成するためのマークアップ言語
  • テスト
    • 静的テスト:構文チェックを含む、コードを実行せずに行うテスト
    • 動的テスト:メモリダンプ・スナップショットの確認などコードを実行しながら行うテスト
    • インスペクション
      • モデレータ、オーナー(成果物作成者、指摘された問題の対応を行う)、インスペクタ(評価者、問題を発見する人)、スクライブ(発見・修正された問題など記録する人)
    • ウォークスルー
    • リグレッションテスト

セキュリティ

アルゴリズム

  • ビット演算
  • ページイン

ページング方式 とは、コンピュータのオペレーティングシステムにおいて記憶装置をページと呼ばれる小さな単位に分割して割り当てを行うアルゴリズム群.仮想記憶のベースとなる設計の一つ.

ページング方式 - Wikipedia

ネットワーク

  • 用語
  • TCP/IP
  • OSI基本参照モデル: OSI基本参照モデルとは何? Weblio辞書
    • フィジカル>データリンク>ネットワーク>トランスポート>セッション>プレゼンテーション>アプリケーション
    • 物理的な通信媒体>ノード間の伝送>ルーティングなどの伝送>誤り検出や再送などの伝送手順>プロセス管理など>データの形式指定>アプリケーション
    • ゲートウェイ = トランスポート層以上でネットワーク同士で通信をする役割
  • ルーター:パケットを最適な経路に通信する装置
  • ブリッジ:データリンク層、送出ポートの判断を行う
  • リピーター:物理層、弱まった信号を強くする
  • 基数変換法
    • 指定された基数で計算した後、指定桁にかけ算を行いハッシュ値を確定させる
  • OpenFlow

データベース

  • ACID特性
    • A: 指定された実行を行なうか全く行わないかの2状態しかあり得ない
    • C: データの矛盾が生じない
    • I: 実行順に関わらず結果が等しい
    • D: 終了した実行内容の情報は以降で障害がおきても失わない
  • E-R図(Entity-Relationship Model)
  • 操作
    • 射影:特定の列
    • 選択:特定の行の選択
  • プロシージャ
  • ロック
    • ツーフェーズロック/2相ロッキング: リード/ライトするなら、そのオブジェクトに共有/排他ロックを使用しなければならない. + コミット時に解放.
      • Strict 2PLはデッドロックを完全には防げない.
      • C2PL: トランザクション前に必要な全ロックをかける.
      • セキュア状態: 2相コミットメント制御の一相目でロックを行った後の状態.
  • 制約
    • FOREIGN KEY制約: 参照先のテーブルにこの制約がある場合, 親テーブルのカラムに格納されている値しか格納することができなくなる.
    • NOT NULL制約
    • チェック制約: データの有効性と保全性を確保
    • 主キー制約: IDなどに指定

コンピュータの構成

  • 用語
    • MIPS = 100万命令毎秒 = 10^6
    • 実行アクセス時間:(キャッシュメモリのアクセス時間×ヒット率)+主記憶のアクセス時間×(1-ヒット率)
      • ヒット率=キャッシュメモリにデータが存在する確率と考えると覚えなくても大丈夫か
  • キャッシュメモリ
  • 平均応答時間
    • 待ち行列理論でのモデル
    • 平均サービス時間xp/(1-p) + 平均サービス時間
  • セクタとブロック
    • どんなに小さいデータでも最低一ブロックが割り当てられる.
    • ブロック・クラスター=ファイルシステム上の領域を扱う最小単位
    • ディスクセクタ - Wikipedia
  • アクセスメモリ
  • アナログ音声をディジタル化
  • 障害発生時の対応
    • デュアルシステム: 二台で同じ処理を行い、処理結果をチェックする. 障害発生時は一方のみで処理を続行する.
    • デュプレックスシステム: ホットスタンバイ、コールドスタンバイ、ウォームスタンバイなどが含まれる
    • フォールトトレラントシステム: 電源・プロセッサなどを二重で用意しておき、障害発生した場合に切り替えを行う
  • メモリ
    • UV-EPROM: 紫外線により内容の一括消去が可能なメモリ
    • Static RAM: CPUのキャッシュメモリ
    • Dynamic RAM: 常にリフレッシュし続ける必要があるが安価、揮発性
  • アドレスバス
  • プロセッサ
    • マイクロプログラム(microprogramming): マイクロ命令の組合せで実行する、複雑な命令を増やすとパイプラインによる並列化の効果を悪くする可能性がある
    • AMP(Asymmetric Multiple Processor):コンパイラがプログラム生成時に命令を実行する演算器を決定する方式
    • SMP(Symmetric Multiple Processor)
    • マルチプロセッサ: 密結合型と疎結合型, 大原雄介のEmbedded Processor Forum 2004レポート

マネジメント

C/Java

  • Java
    • JavaVM: Javaを実行するOSで実行可能な形式のコードに変換するソフトウェア
    • JDBC(Java Database Connectivity): Javaから関係データベース接続するためのAPI群。java.sqlパッケージに実装。
    • オブジェクト指向: カプセル化(クラス), 継承(メソッド/クラスの継承), ポリモーフィズム(抽象化/オーバーライド)

その他

Leetcodeを進める:easyのみ(6)

コード:GitHub - Y-kyoto/leetcode

他の問題:leetcode カテゴリーの記事一覧 - めも

Problem500

概要:入力として単語のリストが与えられる. 英字キーボードの特定の一行だけで打てる単語を見つける.

Python3

愚直な方法.

class Solution:
    def findWords(self, words: List[str]) -> List[str]:
        res = []
        d = {'Q': 0, 'W': 0, 'E': 0, 'R': 0, 'T': 0, 'Y': 0, 'U': 0, 
             'I': 0, 'O': 0, 'P': 0, 'q': 0, 'w': 0, 'e': 0, 'r': 0, 
             't': 0, 'y': 0, 'u': 0, 'i': 0, 'o': 0, 'p': 0, 
             'A': 1, 'S': 1, 'D': 1, 'F': 1, 'G': 1, 'H': 1, 
             'J': 1, 'K': 1, 'L': 1, 'a': 1, 's': 1, 'd': 1, 
             'f': 1, 'g': 1, 'h': 1, 'j': 1, 'k': 1, 'l': 1,
             'Z': 2, 'X': 2, 'C': 2, 'V': 2, 'B': 2, 'N': 2, 
             'M': 2, 'z': 2, 'x': 2, 'c': 2, 'v': 2, 'b': 2, 
             'n': 2, 'm': 2}
        
        for word in words:
            isAns = True
            lw = len(word)
            if lw==0:
                continue
            elif lw==1:
                res.append(word)
            else:
                for i in range(lw-1):
                    if d[word[i]]==d[word[i+1]]:
                        continue
                    else:
                        isAns = False
                        break

                if isAns:
                    res.append(word)
        
        return res

Runtime: 36 ms, faster than 67.67% of Python3 online submissions for Keyboard Row. Memory Usage: 13.9 MB, less than 6.67% of Python3 online submissions for Keyboard Row.

submission detail

Problem575

概要:与えられたキャンディのリストを二人に等しい数に分けるとき、最もたくさんの種類のキャンディーを持っている方は何種類のキャンディーを持っているか?

Python3

答えになりうる最大はキャンディーの半分の数。

class Solution:
    def distributeCandies(self, candies: List[int]) -> int:
        return int(min([len(set(candies)), len(candies)/2]))

Problem1002

概要:英単語がリストとして与えられるので、全てに共通して出現する文字を見つける. ooが全てに出現するなら o o も答えに含める.

Python3

はじめに最も短い単語を見つけて、その単語を対象にして文字が全ての単語に出現するかをチェック.

class Solution:
    def commonChars(self, A: List[str]) -> List[str]:
        res = []
        wordLengthList = [len(a) for a in A]
        mostShortWord = A[wordLengthList.index(min(wordLengthList))]
        
        for ci in mostShortWord:
            for i, ai in enumerate(A):
                if ci in ai:
                    A[i] = ai.replace(ci, '', 1)
                    continue
                else:
                    ci = ''
                    break
                    
            if not ci=='':
                res.append(ci)
                
        return res

Runtime: 52 ms, faster than 85.77% of Python3 online submissions for Find Common Characters. Memory Usage: 13.8 MB, less than 5.55% of Python3 online submissions for Find Common Characters.

submission detail

Problem1025

概要:N%2==0を返せばいいとわかる. (問題文)

Rust

impl Solution {
    pub fn divisor_game(n: i32) -> bool {
        return n%2==0;
    }
}

Runtime: 0 ms, faster than 100.00% of Rust online submissions for Divisor Game. Memory Usage: 2.4 MB, less than 100.00% of Rust online submissions for Divisor Game.

submission detail

Problem1051

class Solution {
public:
    int heightChecker(vector<int>& heights) {
        int res = 0;
        auto sortedh {std::vector<int>(heights)};
        std::sort(sortedh.begin(), sortedh.end());

        for(size_t i=0; i<sortedh.size(); i++)
            if(sortedh[i]!=heights[i]) res++;

        return res;
    }
};

Problem1078

概要:テキストが渡され、さらに二つの単語が渡される。テキスト中に二つの単語が連続している箇所が存在するとき、その次にきた単語を返す.

Python

愚直に一つずつチェック。wordi==firstの時のみ words[i+1]==secondが評価される.

class Solution:
    def findOcurrences(self, text: str, first: str, second: str) -> List[str]:
        res = []
        words = text.split(" ")
        if len(words)<2:
            return res
        else:
            for i, wordi in enumerate(words[:-2]):
                if wordi==first and words[i+1]==second:
                    res.append(words[i+2])
                else:
                    continue
        return res      
class Solution:
    def findOcurrences(self, text: str, first: str, second: str) -> List[str]:
        text = text.split(" ")
        textlen = len(text)
        res = []

        if textlen>1:
            for i in range(textlen-2):
                if text[i]==first and text[i+1]==second:
                    res.append(text[i+2])
        return res

Runtime: 40 ms, faster than 28.77% of Python3 online submissions for Occurrences After Bigram. Memory Usage: 14 MB, less than 100.00% of Python3 online submissions for Occurrences After Bigram.