ミドルウェアとソフトウェアの違いはなに?

ミドルウェアって何???

ミドルウェアは、アプリケーションとOSの中間的処理を行うソフトウェアのこと
ということは、ミドルウェアもソフトウェアの一部って理解でよさそうだ。
つまり、ミドルウェアはソフトウェアの一部だから、ミドルウェアとソフトウェアの違いという質問自体が愚問といって良いだろう。

では、OSは例えば、CentOS7.0として、アプリケーションをLaravel5.7とした場合、PHP、MySQL、Composerなどはミドルウェアと呼んでよいのだろうか?

Web
Apache, IIS, Nginx
サーバーを提供しているこれらはミドルウェアになる。

Application
Tomcat, JBoss, WebLogic Server, WebSphere Application Server, Cosminexus Application Server
Tomcatもミドルウェアに含まれる。わかる気がしますね。

Database
MySQL, Oracle, PostgreSQL, SQLServer, DB2
はい、Mysqlもミドルウェアになります。

その他
arcserve, backup exec, netbackup, netvault, jp1, senju, systemworker, tivoli, websam, hinemos, zabbix, clusterpro, hacmp, haモニタ、heartbeat, lifekeeper, mscs, primecluster, serviceguard, vcs
zabbixもミドルウェアですか。アプリケーションのイメージありますけど。。

色々調べると、DBMSやモニター類が代表的なようですね。phpなど、言語はあまりミドルウェアとは呼んでないようです。

ヨ〇バシ mac book air 64GB 2011年モデル 査定額

純正のアダプターがなかったので、じゃんぱら、ソフマップで買い取り対象とならず。
さすが、しっかりしてますね。

しょうがないので、ヨ〇バシに行ってみよう

11時ごろ
定員「osが入ってないので、査定に早くても夜くらい、もしくは朝になりますね」
わたし「そんなにかかりますか?」
定員「OSダウンロードに時間かかりますので」
わたし「(OSのダウンロードって20分の筈だが…) 」


正直ここで止めとけばよかった。嫌な予感が走った。


わたし「えらいかかりますね、、わかりました。お願いします。」
定員「査定が終わったら連絡します。」

翌日10:30
定員「もしもし、査定が終わりまして、付属品がない為、2000円になります」

わたし「??? 」
わたし「(焼肉一回食べるのと一緒じゃん…)」
わたし「(爽やか風に)今回は止めときますー」

ということで結論
2000円

なるほど、こういう風に商売するのか。これは誰がやっても絶対に利益が出るね。
実際の査定は30分くらいだけど、査定に1日かけるってところがミソだな。

同じ仕組み作るかー

パソコン(mac book air)断捨離の覚書

パソコン (mac book air 64GB 2011年モデル)を断捨離したいと思う。エンジニアにとってパソコンは商売道具だから、断捨離の順番でいくと本当に最後の最後(20万のスーツより後)になった。

パソコン(macbook)を断捨離する理由
– 現在、他のパソコンを使っており、ほぼ使用していない
– 64GBはHDDのスペック低すぎる。Unity、X-codeを入れたらすぐに容量が足りなくなる。HDDは256GBくらい欲しい
– CPUもcore-iシリーズの一つ前のスペックで、遅い。最低corei 5以上は欲しい
– mac bookにはphotoshop、illustrator、x-codeが入っており、それが気になって、思考の邪魔をする
– 必要なタイミングでmac bookを買いなおしてphotoshop、illustrator、x-codeを入れればいいと思えるようになった

macbookの断捨離方法
– 必要なデータはi cloudに移行
– データを全て削除し初期化
– mac bookの外装を掃除
– キーボードカバー、電源アダプターなどは処分
– じゃんぱらに買い取ってもらう
http://www.janpara.co.jp/

パソコン断捨離の効果

– 時間が増える(パソコンを買い替えるかどうか考えなく済むようになった)
– 思考がよりクリアーになり、優先順位がつけやすくなった
– より今の仕事にコミットできるように感じる
– 自分自身を今のクライアントに捧げている感じ
– するとクライアントから少しづつ面白い仕事が舞い込んでくる。これはマジ。自分でも理解不能。
– 周りのエンジニアとのコミュニケーションが格段に良くなった。みんなが色々教えてくれる。これもすげー不思議。
– 相手の要望をちゃんと聞ける余裕ができてきた。余裕がないときは自分のプライドをひたすら守っていたが、今は、相手のプライドや立場、考えを尊重しようと思えるようになった。結果的に1対1の交渉事が上手くいきやすくなる。
– その結果、謎の臨時収入が入る(笑) 使い道が全くない。再投資か。。。
– そして更に、金だけでなく色々教えてもらえる。
– やりたかったことをしたり贅沢しまくってるのに金が全く減らない。どうしよう。

パソコン断捨離のデメリット
– 正直何一つない
– あえて言うならば他に断捨離するものがほぼなくなってきた

OK!三連休一番の仕事した!!

yum -yの[-y]とは?

オプション -y は 問い合わせにすべて「y」と返答するオプション

$ man yum でマニュアルを見ると、

-y, –assumeyes
Assume yes; assume that the answer to any question which would
be asked is yes.
Configuration Option: assumeyes

なるほどね~

linuxのディレクトリ構造

/ ルートディレクトリ。全ての始まり。
/bin cpやchmodなどのシステムを管理する上で基本コマンド
/boot ブートに必要なファイル。ブートログやカーネルイメージ(Linuxカーネルを格納して圧縮したファイル)が保存されている。
/dev デバイスファイルが配置されている。デバイス(装置〈ハードウエア〉)をファイルとして扱うUNIXの設計思想からきています。
/etc ほとんどの設定ファイルが配置されます。カーネルだけでなく、追加された各ソフトの設定ファイル等が配置されているため、ファイル数が膨大で内容を把握するには骨が折れます。
⇒なるほど
/home 一般ユーザーのホームディレクトリ。通常ユーザーを追加するごとにユーザー名のディレクトリを追加します。
⇒vagrantは homeの中に入ってますね。
/lib /binや/sbinのコマンドを実行するのに必要なファイルが配置されています。基本的にユーザーが変更を加えることはありません。64bit用の共用ファイルは別途「lib64」というディレクトリにあります。
⇒/binは基本コマンド。libとbinは分けてるのですね。
/lost+found システムのバックアップや復元用のファイルが格納される。意図しない再起動やシャットダウン時に使われる。
⇒ すげー。人間の英知を感じずにはいられない。
/media リムーバブルメディアのマウントポイント。(floppy、CD、DVDなど)
⇒ 触ったことないな。
/mnt 一時的なマウントポイント。mediaとの違いは、一時的なファイルシステム(fstabなど)のマウントに使う点。
⇒ マウントの意味がわからん。。
/opt rpmなどパッケージ管理システムのインストール先。複数のユーザーで利用する場合追加したものをここに保存しておけば、変更点を把握しやすい。
⇒ /optは使用頻度が高いですね。
/proc プロセスのIDの付いたディレクトリが配置されています。プロセス独自の情報を格納することからプロセスディレクトリと呼ばれる。各種プロセスのステータスを確認する際に利用される。
/root rootユーザーのホームディレクトリ。homeがセキュリティ上の脅威にさらされてもこちらは大丈夫。という保険のディレクトリです。
⇒ 入れません。。。
/sbin 再起動やファイルシステムの操作などシステム管理者用のコマンドが配置されています。/bin同様、新しいコマンドの追加や変更は推奨されません。
/selinux セキュリティーを向上させるために利用する、Security-Enhanced Linux。rootへの権限が集中を分散することでセキュリティの向上を図る。ものらしい。CentOSではデフォルトで作成される。
/srv FTP、WWWなどで利用するユーザー用のスペース。/homeとも違う、FTP専用、WWW専用のユーザー用ディレクトリ。
/sys システム関連と思いきや、動作しているプロセスやドライバを/procで管理すると膨大になるため、/sysにドライバ関連のプロセスをまとめている。
/tmp テンポラリデータの保存場所。メモリ上の一時ファイルを保存します。ダウンロードフォルダとして利用することもあります。再起動時に消去されます。また通常はcronで定期的に消去されます。
⇒ なるほど、tmpにはおいては駄目なのね。
/usr 各ユーザーが共通して利用するプログラム・ライブラリのデータ。ソースからコンパイルしたソフトなどはこちらにインストールされます。通常パッケージの追加するこのディレクトリにインストールされることが多い。
⇒ インストールしたものは基本 /usrですな。
/var ログやキャッシュなど、可変的システムデータ(動的ファイル)。一時的なデータとしては/tmpと同じですが、こちらは再起動しても消去されずに残ります。
⇒ なるほど。ログはvarか。
/var/www Apacheのデフォルトデータ保存場所。インターネット関連のディレクトリはここに収めるのが普通。かつては/home/httpdディレクトリにあった。

ほう、使うものと使わないディレクトリがありますね。fluentdで使うvarはログだそうです。

macOSをSierraにupdateしてx-codeもupdate

Sierraを入れられず、mac book買い換えないとダメかと思いmac bookを物色していましたが、ストレージ周りをいろいろ整理していたら、何故かいけましたね。一安心。今日が日曜でなければ一杯飲んでたところ。
Xcodeが最新でないと、swiftの書き方だけでなく、あらゆる面で死活問題でしたので。。。

強制停止はcomand + option + esc

x-code 9.3.1 入りました。半日かかった。ヒャッホー

javascriptでランダムな英数字10桁と数字10桁

console.time('timer1');
var char = "abcdefghijklmnopqrstuvwxyz123456789"
var id = "";
for(var i=0; i<10; i++){
	id += char[Math.floor(Math.random()*35)];
}
document.write(id);
console.timeEnd('timer1');

0.24609375ms
timer1: 0.411865234375ms ※2回目
timer1: 0.324951171875ms ※3回目

min:1000000000 ~ max 9999999999 の10桁の数字の場合

var id = Math.floor(Math.random() * 9000000000)+ 1000000000;
document.write(id);

timer1: 0.329833984375ms
timer1: 0.248779296875ms ※2回目
timer1: 0.24462890625ms ※3回目

感覚的に、1回の演算処理に較べて10回のforループを回す場合、レジストリの演算処理が10倍に増えるので、処理時間も約10倍位になるかと思いきや、計算してみるとforループでも処理時間はほとんど変わらない(2倍以下)ですね。multiplyとplusのCPUの処理はそんなに時間がかからない、ということなんでしょうか。よくわかりませんね。

Parallel Processing

CPU1 CPU2 CPU3

#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>

void* f1(void* arg){
	int whos_better;
	whos_better = 1;
	while(1)
		printf("Thread 1: thread %d is better.\n", whos_better);

		return NULL;
}

void* f2(void* arg){
	int whos_better;
	whos_better = 2;
	while(1)
		printf("Thread 2: thread %d is better.\n", whos_better);

	return NULL;
}

int main(int argc, char **argv){
	pthread_t th1, th2;

	pthread_create(&th1, NULL, f1, NULL);	
	pthread_create(&th2, NULL, f2, NULL);

	pthread_join(th1, NULL);
	pthread_join(th2, NULL);

	pthread_exit(NULL);
}

File System

Key Abstractions
1. file
2. file name
3. Directory Tree

#include 
#include 
#include 
#include 

int main(int argc, char **argv){
	int fd;
	ssize_t len;
	char *filename;
	int key, srch_key, new_value;

	if(argc < 4){
		fprintf(stderr, "usage: sabotage filename key value\n");
		exit(EXIT_FAILURE);
	}

	filename = argv[1];
	srch_key = strtol(argv[2], NULL, 10);
	new_value = strtol(argv[3], NULL, 10);
}

Naive Memory Model

CPU
Memory: fast, random access, temporary
Disk: slow, sequential access, durable

CPU Register <- cache -> Main Memory
10 cycle latency, 256 bytes / cycle

Memory Hierarchy
CPU
Main Memory

Write Policy
Hit:
– write-through
– write-back

Miss:
– write-allocate
– no-write allocate

Virtual Address Abstraction
Kernel addresses, user stack, heap, uninitialized data, initialized data, code