思い出は銀の弾

ひよっこエンジニアが調べたことや経験したことをまとめます!

Webでマテリアルデザインを簡単につくれるMaterializeを使ってみた

Googleが言い出したマテリアルデザイン。

Android 5.0:LolipoのCMを最近目にしたりしますが、Lolipopが広まってくるにつれ、世の中にのなんとなく認知されてきたかなと思ってます。

このマテリアルデザインをWeb上で表現する際に強力にサポートしてくれるMaterializeというものがあり、最近ちょっとした経緯でこれを使いました。

サンプルとhowtoをまとめたので御覧ください。

Materializeの使い方 f:id:masayuki610930:20150712224946p:plain

github.ioにあげてます。 github.com

公式のドキュメントはかなりしっかりしてていい感じです。が、

  • 何ができるか
  • どうしたらできるか

という情報の所在と知らされる順番がいまいちにように感じてしまい、だったらせっかくだしと思いまとめた次第です。

間違い等なにかあれば教えて下さい!

角度や方向に対する評価関数

角度や方向に対する評価関数について考えました。

使用例

サッカーを例に考えます。

f:id:masayuki610930:20150629222057p:plain

今ボールを持ったプレイヤーに対して、近くにいる仲間A,Bがいるとき、どちらにボールをパスしたらいいでしょうか?

ゴール近くにいる仲間Aにパスする!と皆さん考えるでしょうが、例えば仲間Aと仲間Bに能力差があり、

能力差:仲間A<仲間B

という場合では答えは難しいです。また、仲間までの距離も考慮に入れたくなります。

いろいろな要素が考えられますが、今回はこのうち「角度」に注目して角度のみに関する評価関数を考えてみました。

普通の考え方

プレイヤーを中心にゴール方向を0度とし、仲間が360度中のどこにいるかを元に考えます。

単純に考えると、0度に近いほど良い評価値を与えればよく、

{ \displaystyle
evaluation = cos(\theta)
}

となり、負数を無視しゼロと置換えて次のようになります。

f:id:masayuki610930:20150630083751p:plain

提案

考え方

先の例で充分な例もあるでしょうが、

  • もっとシビアな評価
  • もっとメリハリのある評価

を求めるケースもあるでしょう。そこでシグモイド関数を使いこれを解決します。

評価関数

{ \displaystyle
evaluation = \frac{1}{1+\exp(-\alpha(\frac{|\theta_x-180|-180+\theta_h}{\theta_h}))}
}

{ \displaystyle
\theta_x
} は仲間の角度、

{ \displaystyle
\theta_h
} は評価値半減点、

{ \displaystyle
\alpha
}シグモイド関数のゲインを示します。

評価値半減点とゲインはパラメータ(設定値)であり、評価値半減点に評価値0.5を取る角度の値を、ゲインにはとりあえず5~10の値入れておけばいいです(後述)。

関数をプロットすると、次のようになります。

f:id:masayuki610930:20150630083810p:plainf:id:masayuki610930:20150630083814p:plain

図の通り、パラメータ評価値半減点により高い評価を与える角度の範囲設定を、ゲインにより評価値のメリハリの変化をつけることが出来ました。ゲインについては実際に試してチューニングすることをオススメします。

注意点

この手法は評価値が極めて低い値を取ることが理論上仕方ありません。プログラムに起こす際は、評価値半減点を閾値として、今回の関数に掛けるかどうかを判断するとよいでしょう。

この点だけを気をつけて頂いて、今回の提案手法をぜひ利用してみてください。

知っておくと嬉しい、ストレージの技術用語

スケールアップ型とスケールアウト型

スケールアップは、サーバーのCPUやメモリーといったハードウエアを高性能なものにして処理性能を上げる方法。一方のスケールアウトは、サーバーの数を増やすことで性能を上げる方法です。後者の場合、1台1台が高性能でなくても、大量のサーバーで同じWebサービスを動かせば処理性能を上げられます。スケールアップより構築コストが安く済む、1台くらいサーバーが停止してもWebサービスを提供し続けられる、というメリットがあります。

SPOF

Single Point of Failureのこと。

単一障害点(たんいつしょうがいてん。英: Single Point of Failure, SPOF)とは、その単一箇所が働かないと、システム全体が障害となるような箇所を指す。情報システム工学や通信、サプライチェーン・マネジメントなどの分野で使われる概念である。単一故障点と訳されることもある。

CVS

Hyper-V 2.0は、「クラスタ共有ボリューム(Cluster Shared Volume: CSV)」という特殊なボリューム・マネージャ機構をWSFCに実装した。これにより、ファイル・システムは通常のNTFSのままに、複数ホストからの同時アクセスを可能にしたのである。

NFS

概要

Network File Systemのこと。サーバ・クライアントシステムの体型であり、サーバサイドのストレージにクライアントからアクセスを行い読み書きを行うことが可能である。

仕組み

NFSプロトコルを利用した通信で行う。一般的にUDPまたはTCPの2049番ポートが利用される。サーバサイドで特定のディレクトリ領域のアクセスの許可・制限をかけ、クライアントはそのアクセスポイントに対しマウントをする。

使用例

  • ファイルの共有
  • フリーアドレス(どの端末でも自身の環境になる)
  • ファイルの保存やバックアップ専用(耐久性の高いHD)

NFSv3/v4の違い

  • ステートフルなインタラクションと権限移譲の導入
  • クライアントは一時的な排他的アクサセス
  • クライアント側のキャッシュ処理

などの変更がv4にあり、セキュリティー面での改善が施された。パフォーマンス的には、メリットがあまりないとの検証結果が出ている。

知っておくと嬉しい、ネットワークの技術用語(その2)

ルーティングプロトコル

BGP

Border Gateway Protocolの略で、AS間の通信交換のために作られたプロトコル

BGPはTCPポート179番を利用して通信を行います。BGPルータはピアを確立するために、メッセージと呼ばれる形式で機能情報を交換します。メッセージはBGPの状態により数種類存在します。ピアが確立した後は、経路情報を伝達するためのメッセージを定期的に交換し、お互いの持つ経路情報を保持、更新し続けます。 BGPではピアを確立するルータが同じAS間である場合と、異なるAS間である場合とで異なる方式で経路情報を処理します。同じAS間でのピアをiBGP(内部BGP)ピアと呼び、異なるAS間でのピアをeBGP(外部BGP)ピアと呼びます。

EIGRP

EIGRP(Enhanced IGRP)はCisco独自のIGRPを改良した、クラスレスの拡張ディスタンスベクタプロトコルです。 EIGRPでは、クラスレスルーティング、VLSMのサポート、手動集約、ルーティング認証、マルチキャストによる 差分アップデート、DUALを使用したIGP一番の高速収束、レイヤー2でのシームレスな接続、リンクステートの 特性といえるHelloによるネイバー検出と隣接関係の維持、ルーティングのループフリーなどが実現されており、 Cisco製品だけで構成された小規模、中規模ネットワークにおいては最も適した IGP と言えることができます。

OSPF

OSPF(Open Shortest Path First)は、ルーターやレイヤー3(L3)スイッチがパケットの転送先を動的に決定するためのルーティングプロトコルの一種である。主に中・大規模ネットワークで使う。  L3スイッチでOSPFを動作させると、ネットワークの経路情報(LSA)を他のL3スイッチとやり取りし、ネットワーク構成図(トポロジーマップ)を作る。その構成図から最適経路を判断し、パケットの転送情報であるルーティングテーブルを作成する(図)。L3スイッチはこのルーティングテーブルを見てパケットを送る。

RIP

RIP(Routing Information Protocol)は、IP用のルーティング・プロトコルとして、非常に古くから使用されています。このプロトコルは、UDPのブロードキャスト・データ・パケットを用いて、経路情報を隣接ルータにアナウンスします。この中には、「メトリック」と呼ばれるあて先ネットワークまでのディスタンスを表す情報(ルータのホップ数)が含まれており、ルータを超えるごとに1つずつ加算されます。RIPは、このメトリックを利用してネットワーク・トポロジを把握するため、「ディスタンス・ベクタアルゴリズム」に基づいたルーティング・プロトコルと呼ばれています。RIPでは、メトリックがより少ない経路情報が最適経路として使用されます。最大メトリックは15となっており、これを超えた場合は到達不能と見なされます。RIPでは、これらのすべての経路情報を30秒周期で隣接ルータにアナウンスすることにより、情報の更新を行います。

セキュリティー

ARPキャッシュポイズニング

ARPキャッシュを悪用した盗聴方法の一つです。 具体的には、下図のようにARPによる問い合わせがあった際にMACアドレスを偽った応答を相手に返送することで誤った内容を記録させ、以降、本来の宛先とは異なる宛先にデータを送信させようとします。

802.1X認証

IEEE802.1xとは、有線LANや無線LANで使用される認証について規定したプロトコルです。このIEEE802.1Xに対応したLANスイッチのポートでIEEE802.1Xが有効な場合、そのポートにPCなどを接続してもすぐにLAN接続が行われることはなく認証された機器のみが接続されます。IEEE802.1Xは検疫ネットワークでは中核の技術です。

知っておくと嬉しい、仮想化の技術用語

qemu

オープンソースエミュレータ。ホストにカーネルドライバを必要としない。プロセッサをエミュレートするだけでなく、必要なすべてのサブシステムをエミュレートできる。

kvm

Kernel-based Virtual Machineのことで、Linuxカーネルに搭載されているハイパーバイザ。

KVMは仮想化のためのCPU拡張命令(HVM)をカーネルモジュールを介して使用するQEMUの特殊なオペレーティングモード。

libvirt

仮想化管理用の共通APIを提供するオープンソースプロジェクトであり、仮想間マシンの制御を抽象化したライブラリ。

qemu/kvmの場合VMのハードウェア仕様などを定義するXMLファイルは、標準では/etc/libvirt/qemu/.xmlにインストールされる。同様に仮想ネットワークのXML定義ファイルは/etc/libvirt/qemu/networks/.xmlにインストールされる。

virsh

libvirtコマンドラインツール。virshツールlibvirt管理APIを土台にして構築されている。

qemu-img

virshのコマンドの一つ。仮想化ゲストイメージ、追加のストレージデバイス、及びネットワークストレージのフォーマットに使用される。

qcow2, raw

qemu-imgが扱うイメージ形式のこと。qcow2はスナップショットが取れ、ディスク領域を拡張する際、IO性能が極端に劣化する。rawはスナップショットは取れず、ディスク領域を拡張する際のIO性能劣化はqcow2より優れる。

ブリッジ

セグメントとセグメントを接続する機器のこと。LAN同士のパケットのやりとりの橋渡しを子なう。リピータの機能に加えて、MACアドレスを元にフィルタリングを行うことができる。

Linux Bridge

ソフトウェアブリッジを使ってハードウェアをエミュレートできる。仮想化アプリケーション内で仮想NICを設定するなどが可能。

tapデバイス

仮想ネットワークのカーネルデバイスのこと。ソフトウェアで完全にサポートされているネットワークデバイスである。リンクレイヤをシュミレートし、イーサフレームのようにL2で動作する。

OpenStack

オープンソースで開発されているクラウド環境構築用のソフトウェア群。AWSのようなものをじぶん自身の環境でプライベートに構築できるものと捉えるとわかりやすい。各フェーズを管理するもの、認証系を担当するもの、WebUIでかんりできるもの、オーケストレーションを行うものなど、多くのツールがある。

知っておくと嬉しい、サーバの技術用語

BMC

Base Management Controllerの略で、主にサーバに搭載される管理用のコントローラー。リモートから電源のON/OFFの操作などが可能。

Baremetal

物理ハードウェアにより近いところで処理を行う仮想化のこと。

KVM

Kernel-based Virtual Machineの略で、OS仮想化の方法。VMWareXenはホストOSを介してOS仮想化を実現するが、KVMLinuxカーネル自体をホストのように制御する。Baremetalを実現する。

http://image.itmedia.co.jp/ait/articles/0903/12/r12fig02.jpg

(出典:@IT)

SENSU

サーバの監視を行うツール。クライアントが立ち上がると自動で監視対象に登録される。NAGIOSではこれができなかったらしい。

Fabric

デプロイ・システム管理ツール。一括に一斉にコマンドを投げたりするときに楽。

Open Compute

大手ソフトウェアサービスサプライヤーにとって効率のよいサーバなどの仕様を、ハードウェアベンダーに提供・依頼すること。過去のハードウェアベンダーが市場を主導するもでるからの脱却を狙う。

NEMA規格

アメリカ電気工業会によって標準された規格。この規格に合うアプライアンスでデータセンターが構成されていたりする

PDU

Power Distribution Unitの略で、データセンターで使われる電源タップみたいなもも。アプライアンスごとに使用電力が測定できたり、ラック内の温度や湿度情報を取得できる。

【参考にしたもの】

続きを読む

知っておくと嬉しい、ネットワークの技術用語

セキュアネットワーク

一般のネットワークと隔離をさせ、アクセスを厳しく制限したネットワークのこと。 機密性の高い情報をこのネットワーク配下に置き、外部から容易にアクセス出来ないようにする。

IDS

Intrusion Detection Systemの略で、不正侵入を検知する機能。 通過するパケットを監視することで実現する。 ファイアフォールはIPを参照するのみであり、その先での不正侵入を検知できる。

IPS

Intrusion Prevention Systemの略で、不正侵入を妨げる機能 不正侵入に関連するセッションやトラフィックを切断する。

PCI DSS

Payment Card Industry Data Security Standardの略で、クレジットカード会員データを安全に取り扱う事を目的として策定されたセキュリティの世界基準。

NAT

Network Address Translationの略で、プライベートIPアドレスグローバルIPアドレスに変換する技術。

ICMP

Internet Control Message Protocolの略で、誤りの通知や通信に関する情報の通知に使われる。 ロードバランサーのヘルスチェックで使用されている。

GSLB

Global Server Load Balancingの略で、DCが複数ある際にDC単位で広域に負荷分散を行う機能。 災害対策などを目的にしている。

その他の関連用語

Splunk

サーバへのアクセスログなどを集約・解析する製品。 フォーマットの違いを吸収してくれ、グラフ化も行うことが可能。

アプライアンス

特定の機能や用途に特化した専用機器のこと。特にネットワーク機器やサーバ製品などで提供されることが多い。

【参考にしたもの】

続きを読む

知っておくと嬉しい、ハードディスクの技術用語:サーバ構築

SAS (Serial Attached SCSI)

  • 業務用製品のHD規格SCSIから発展
  • 常に高速なアクセスが必要である際に好まれる
  • 高価

SATA(Seleal ATA)

  • 一般向け製品のHD規格ATAから発展
  • アクセスが少ない場合に好まれる
  • 安価

RAID

  • 冗長性を向上させる技術
  • 複数台のハードディスクを組み合わせることで実現
  • RAID 0
    • 複数台のHDにデータを分散
    • 冗長性・対障害性がない
  • RAID 1
  • RAID 10
    • RAID 1RAID 0 化した構成
    • 速度・容量・対障害性の向上
  • RAID 5
    • ブロック単位でのパリティー分散記録
    • ドライブ台数が増えるほど読み出しが高速化が見込める
    • 書き込みが低速になる(ドライブ台数が少ない場合)  

【参考にしたもの】

続きを読む

知っておくと嬉しい、メモリの技術用語:サーバ構築

Registerd

  • クロック信号のタイミングを補正できる
  • Registered bufferという集積回路を介する
  • Unbufferdは上記の機能がないもの

ECC

  • 誤り訂正符号化(Error Correction Coding)のこと
  • エラー訂正機能を持つ

DDR4

  • メモリの規格でDDR3の後継
  • 何が行われてるかよくわからないが、DDR3の2倍早い

メモリインターリーブ

  • 複数のメモリバンクに平行して読み書きを行うこと
  • CPUがアクセス要求を出してからデータが送られる時間を短くする

Androidでビープ音を出す

Android開発の過程ででセンサー系を試している時、ビープ音があるとわかりやすいです。

Androidでビープ音を出す

ToneGeneratorのコンストラクタの第二引数は音量で、
.startTone()の引数には音の高さと長さを指定します。

詳しい情報はこちら。

ToneGenerator | Android Developers