気象庁とUSGSの地震データを比較してみる

まず気象庁
———–
地震の発生日時 震央地名 緯度 経度 深さ M 最大震度
1 2018/03/12 19:21:26.0 沖縄本島近海 27°15.0′N 128°25.6′E 48km M4.6 3

USGS
———-
Magnitude
uncertainty
4.9 mb
± 0.1
Location
uncertainty
27.131°N 128.447°E
± 7.0 km
Depth
uncertainty
52.5 km
± 7.1
Origin Time 2018-03-12 10:21:26.840 UTC
Number of Stations –
Number of Phases 48
Minimum Distance 37.0 km (0.33°)
Travel Time Residual 1.18 s
Azimuthal Gap 74°
FE Region RYUKYU ISLANDS, JAPAN (238)

時間はほぼ一緒ですが、マグニチュード、緯度経度、depth、全て値が微妙に異なります。

マグニチュード:地震が発するエネルギーの大きさを対数で表した指標値
地震のエネルギーを1000の平方根を底とした対数で表した数値で、マグニチュードが 1 増えると地震のエネルギーは約31.6倍になり、マグニチュードが 2 増えると地震のエネルギーは1000倍になる

マグニチュード測定方法:地震計
USGS:GPSや地震計を一定間隔で配備して、ネットワーク化、地下深くまでドリルで穴を開けて分析

気象庁とUSGSでは、どちらのデータが精度が高いのか疑問に思ったのですが、
下記資料をざっと流し読みすると、やってる事にあまり違いがないように感じます。
http://www.spaceref.co.jp/homepage/colum/images/US_earthquake_observation.pdf

ということで、今回は、USGSのデータを使って、地震情報をつくっていきたいと思います。

EPELリポジトリとは

EPELリポジトリとは、Centos標準のリポジトリでは提供されていないパッケージをyumコマンドでインストールすることを可能にするリポジトリのこと。EPELはエンタープライズ向けリポジトリ。

EPELリポジトリをインストール
yum install epel-release

続いて、php7.1をインストール
yum install –enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt

base64_encode

base64でエンコードする。
メール本体のように、8ビットクリーンではないトランスポート層でもバイナリデータが生き残るように設計されている。

<?php

$str = "高リスク仮想通貨株にガートマン氏も賭け";
echo base64_encode($str);
?>

結果:
6auY44Oq44K544Kv5Luu5oOz6YCa6LKo5qCq44Gr44Ks44O844OI44Oe44Oz5rCP44KC6LOt44GR

RFC3986とrawurlencode

URIまたはURLで使用できる文字をRFC3986で定義している。
This document obsoletes [RFC2396], which merged “Uniform Resource Locators” [RFC1738] and “Relative Uniform Resource Locators” [RFC1808] in order to define a single, generic syntax for all URIs.
RFC3986が分散したURIの定義を全て統合することを狙っている。

予約文字は不可、!、♯などの非予約文字は自由に使用可。

例えば、チルダをurlencodeすると、%7Eに変換されるが、rawurlencodeなら、チルダとなる。

<?php

$str = "~";
echo urlencode($str). "<br>";
echo rawurlencode($str);

CPS Concepts

Physical World
– sensing, actuation
Communication Network
Cyber System

IoT, Clud, M2M, WSN, Big Data

Interoperability attributes composability, scalability, heterogeneity
Predictability attributes accuracy, compositonality

Security objective: Availability
Network topology: static
Patching: infrequent updates

Random Testing (Fuzzing)

-Feed random inputs to a program
-Observe whether it behaves “correctly”
execution satisfies given specification
or just does not crash
-Special case of mutation analysis

“The infinite monkey theorem”

Thread 1:

...
p = null;

Thread 2:

...
if(p != null){
 ...
 p.close();
}

black-box and white box

black-box testing
-can work with code that cannot be modified
-does not need to analyze or study code
-code can be in any format(managed, binary, obfuscated)

White-box testing
-efficient test suite
-potentially better coverage

HttpPost localHttpPost = new HttpPost(...);
(new DefaultHttpClient()).execute(localHttpPost;

Automated testing is hard to do
probably impossible for entire system

A pre-condition is a predicate
A post-condition is a predicate

class Stack{
	T[] array;
	int size;

	Pre: s.size() > 0
	T pop() { return array[--size]; }
	Post: s'.size() == s.size() -1

	int size() { return size; }
}
int foo(int[] A, int[] B){
	int r = 0;
	for (int i = 0; i < A.length; i++){
		r += A[i] * B[i];
	}
	return r;
}

Software Testing

Learn methods to improve software quality
-reliability, security, performance
-Become a better software developer

Security Vulnerabilities
-Exploits of errors in programs

Dynamic, static, hyprid

An invariant at the end of the program

int p(int x){ return x * x; }
void main(){
	int z;
	if(getc() == 'a')
		z = p(6) + 6;
	else
		z = p(-7) -7;

	if (z != 42)
		disaster();
}
void main(){
	z = 3;
	while (true){
 	 if(x == 1)
 	 	y = 7;
 	 else
 	 	y = z + 4;
 	 assert (y == 7);
	}
}

Branches

1.Conditional branches
2.Unconditional branches
3.Function Calls
4.Indirect Jumps

Branch Architecture
Speculation: predicting branches, executing in anticipation
Predication: removing branches, converting code into one that depends on outcome of a condition for a commit.

VLIW Data Path

The way things are organized inside processors to allow storage of data!

CISC and DSP
-Memory-to-memory and complex addressing modes
-Accumulator:a target register of ALU
-Some storage specialities force complier to make binding choice and optimizations too early

RISC and VLIW
-Registers-to-registers: large register files
-Decoupling scheduling and register allocation

Processor: 16×16 bit, 32x32bit
ARM7, ARM9E, ARMv5TE

VLIW Machine:A VLIW machine with 8 32-bit independent datapaths

In the embedded world, characteristics of application domain are also very important
Simple Integer and Compare Operations
Carry, Overflow, and other flags

Fixed Point Multiplication

Partial interconnect clusters promise better scalability
The bypass network of a clustered VLIW is also partitioned.

Index Register Files
illegal, outputs locals, static
-compiler can explicitly allocate a variable-sized section of the register file
-used in proc call and return for stack management

VLIW instructions are separated into primitive instructions by the compiler.
During each instruction cycle, one VLIW word is fetched from the cache and decoded.
Instructions are then issued to functional units to be executed in parallel.
Since the primitive instructions are from the same VLIW word, they are guaranteed to be independent.

VLIW is load/store architecture
– mostly reuse RISC memory-addressing concepts
– special addressing modes
– registers – data and address
– memory could be banked, power efficient
– X-Y memory
– GPUs constant memory, shader memory, shared memory, local memory