しろログ

日々巡り会ったものの感想・レビュー

Author: しろいわ (page 1 of 89)

群衆の英知もしくは狂気

群衆の英知もしくは狂気

群衆の英知もしくは狂気

人々のネットワークと、思考・判断・行為の伝搬、印象、集団浅慮(集団思考)など、群衆の動きについて、閲覧者(あなた)の操作を通じて分かりやすく表現しているインタラクティブサイト。

形成されるネットワーク次第で、例えば飲酒する人が実際よりも多くいるように思えるなどのメカニズムを知ることができます。

特に深く強すぎるネットワークが害悪になる(集団思考)というのが、言われてみればその通りなのですが、盲点でした。

身近なネットワークであるところの、会社や団体などの組織で言えば、そもそも単一の目的や理念を共有するところからスタートしているので、常に集団思考に陥りがちだということを認識すべきだなぁと。

自分一人が何かしても世界は変わらない。
けれども、その行為は確実に自分のネットワークを通じて人々に影響を及ぼすという観点で、意味のあることなんだと。

そんな気になるサイト(作品)。

箱庭リバーシ

リバーシ(オセロ)で遊べる箱庭リバーシを作ってみました。

対NPC戦・対人戦、どちらもできます。

もともとリアルタイムDBを使った対人戦ゲームの勉強がてら作っていたのですが、ついでにオセロAIとかも少し調べて実装してみました。
自分がオセロ素人なのでアレですが、NPCの中でも箱庭娘は地味に強くなった気がしますので、遊んでみてください。

以下、技術談義。

もうずっとアプリばかり作っていて、Web技術が完全におろそか&時代遅れな感じになっていたので、少しでも取り戻そうと勉強。
SPAとかPWAとか、そんな感じです。
(service workerは調整してもキャッシュがきつくて、思うように更新できず、いったん外してあるので、正確にはPWAにはなっていないのですが・・)

フロンドエンドはVue.js。laravelいじってた時の名残で、laravel-mixかませつつ、webpack使ってる感じです。

バックエンドはFirebase。基本無料なのと、リアルタイムDBに惹かれて使ってみました。
実験的なサービスのためにいちいち実費でサーバー(VM)借りて、環境設定してソフト入れてSSLも・・とかやらずに済むのでとても楽。
ホスティングのdeployやロールバックもとても簡単。

Firestoreも取り扱いがめっちゃ楽で、1時間経たずにリアルタイムな動きができてテンション上がったんですけど、だんだんとセキュリティ的に面倒なことに気付いてテンション下がり気味に・・

なんかこう、サーバー使ってる時のクセで、うちのドメインから以外はAPI接続禁止すればOKだよね、みたいのイメージしてたんですけど、いやいやこれJavaScriptでクライアントがダイレクトにつないでるやんけ・・どうするの・・的な。

で、これについてはFirestore側でJavaScript風コードでセキュリティルール策定するんですけど、微妙に手間がかかるのがネック。
NoSQLとかドキュメントベースのDBに慣れてないせいもあるのかもですが・・

結局コレクションごとのスキーマ的なものを書き、
createやupdateのパターンごとにバリデータ的なものを書き・・
ってこれなら、フィールドと型をあらかじめ設定できるほうが楽なんじゃ、と思いつつ。
テストもしづらいし。

セキュリティルールはとりあえず、

allow write: if request.auth.uid != null

とか、一応

allow write:
    if request.auth.uid != null
    && request.resource.data.title is string
    && request.resource.data.title.size() <= 100

みたいのでいいかなー、とか意外と軽く考えるかもですが、例えばこのルールだと確かにtitleは100文字以下の文字列に絞れるんですけど、逆にtitleが100文字以内であれば、fooとかいうフィールドに1万文字入れたリクエストなんかも通っちゃうんですよね。
なので

allow write:
    if request.auth.uid != null
    && request.resource.data.keys().hasOnly(['title'])
    && request.resource.data.title is string
    && request.resource.data.title.size() <= 100

みたいにしてゴリゴリ限定していく方向で・・。
これを全コレクション全フィールドでやるんだよ、おらぁ。

ちなみにrequest.resource.dataってのは、やってきたデータだけじゃなくて、更新後のresource.dataのイメージなので、更新するドキュメントにtitle以外のフィールドがあったりすると、hasOnlyにならなくて弾かれるぞ。ハマりポイント。

だからね、最初にね、全フィールド計画的にしようね。

サービスイン後にフィールドいじりたくなったら、メンテかけるか、止めたくなければ、バージョンフィールド作って、その値を元にバージョン別のセキュリティルール適用すればいいんじゃないかと思います。

あと他にも、Authenticationとか、許可済みコールバックにlocalhostが入ってたりするの、リリース時に消しておこうねっていう。

なんというか、今までと勝手が違う環境で、罠が多い・・

Firebase自体はまだベータな雰囲気がいろいろあるので、これからに期待したいです。

さくらVPSを借りてやることメモ 2018

主に自分用メモ。

■とりあえずアプデ

yum update

■作業用ユーザー追加/パスワード設定

useradd ユーザー名
passwd ユーザー名 ※pass設定しないとロックされたままでsshのpemログインできない

nginxの公開ディレクトリ置く場合
chmod 705 /home/ユーザー名

■SSH設定
まず自分のマシン(mac)でキーペア作る

ssh-keygen -t rsa
ssh-add id_rsa
scp id_rsa.pub サーバー:/home/ユーザー名/.ssh/authorized_keys

サーバー側

chmod 700 ./ssh
chmod 600 ./ssh/authorized_keys

これで自分のマシンから

ssh ユーザー@サーバー -i id_rsa

でログイン可能になる

セキュリティ向上のため、サーバー側でポート変更と、公開鍵のみ受け付けるようにする

vi /etc/ssh/sshd_config
※同じ場所にある ssh_config ではないので注意

Port 10022
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
RhostsRSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AllowUsers sshを許可するユーザー名
SyslogFacility AUTHPRIV

■ポートの設定

現在の設定確認
firewall-cmd --list-service --zone=public

sshのポートを10022に変更する
vi /usr/lib/firewalld/services/ssh.xml

dhcpv6-clientを削除
firewall-cmd --remove-service=dhcpv6-client --zone=public --permanent

httpdなどを追加
firewall-cmd --add-service=http --zone=public --permanent

反映
firewall-cmd --reload

■ホスト名を変更

hostnamectl set-hostname ホスト名

■必要なソフトウェアの追加

LANG=C yum groups list
yum groups install "Compatibility Libraries"
yum groups install "Development Tools"

■自動起動設定

一覧
systemctl list-unit-files -t service

自動起動on
systemctl enable ***.service

自動起動off
systemctl disable ***.service

起動や停止、再起動など
systemctl restart ***.service

■nginx

vi /etc/yum.repos.d/nginx.repo

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
yum install nginx
vi /etc/nginx/nginx.conf
vi /etc/nginx/conf.d/default.conf

configtest的な
nginx -t -c /etc/nginx/nginx.conf

起動
systemctl start nginx.service
systemctl enable nginx.service

■ssl化
Let’s Encrtptを利用

cd /usr/local/
git clone https://github.com/certbot/certbot

cd certbot/
./certbot-auto

更新テスト

/usr/local/certbot/certbot-auto renew --force-renew --dry-run

cronで定期的に更新

crontab -e

00 05 01 * * /usr/local/certbot/certbot-auto renew --force-renew && /sbin/service nginx restart

ssl_dhparamのためのpem生成

openssl dhparam 2048 -out dhparam.pem

■PHP

yum install epel-release
yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install --enablerepo=remi,remi-php70 \
php \
php-devel \
php-mysqli \
php-pdo \
php-openssl \
php-mbstring \
php-opcache \
php-fpm \
php-intl

AWSのSDKなどで必要
php-xml

Laravelとか入れるなら下記も
php-pecl-zip

pear(pecl)

yum install libxslt
yum install --enablerepo=remi,remi-php70 php-pear

php-fpm

vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

;listen = 127.0.0.1:9000
listen = /run/php-fpm/php7.sock
listen.owner = nginx
listen.group = nginx
systemctl start php-fpm.service
systemctl enable php-fpm.service

■MySQL
yumのrepoをDL・localinstall

yum remove mariadb-libs
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum localinstall mysql57-community-release-el7-11.noarch.rpm 
yum install mysql-community-server

起動
systemctl start mysqld.service

初期パスワード表示
grep 'temporary password' /var/log/mysqld.log

初期パスワードでログイン後、パス変更
(デフォルトでは大文字、小文字、数字、記号が1つ以上、かつ8文字以上の必要がある)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; 

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'password'; 
GRANT ALL ON *.* TO 'root'@'127.0.0.1';

民主主義

民主主義というのは選挙の結果と議会を尊重することで、一部のマスコミやでデモの声を聞くことじゃない、みたいな発言を見かけて。

正論ちっくに民主主義を骨抜きにするような考えで厄介だなぁと。
そしてこれが一般市民の口から出てくるのがなんとも。

なんとなくこれに同意すると、全体主義とか、扇動者の罠から逃れられないんですよね。
そもそも有権者が常に合理的で正しい判断をしてるとは限らない。

世論調査を見ても、ほかの内閣より良さそうとか、人柄が信用できないとか、その日によって意見が変わったり、そういう不安定な感情がの大勢を占めるこの世の中、どちらかと言うと、私たちはむしろ誤った選択をする可能性が高いと思うくらいがいいんじゃないか。

定義というより概念・理念の話で、これもいろんな意見があるとは思いますが、
民主主義の基本は、違う意見を持つ者同士がどう折り合いをつけて行くかってことだと思うのです。
なので、理想は常に満場一致。全員がとことん議論を尽くして万人が納得する落とし所を見つける。

もちろんこれは人数や時間的な面で現実的ではないので、一定の区切りを設けて、選挙や投票で決着を付けることにしてる。
そういう意味で、選挙の結果やその延長上にある議会というのは尊重しないといけない。これはその遠り。

しかし、そもそもの基本をすっ飛ばして、民主主義とは選挙であり多数決なのである、などと言うと途端に危うくなる。
みんなが賛成しているなら仕方がない、そんな思考停止にも陥りやすい。

まして、多数決が全てで、その他一部の声などいらないとというのは本末転倒も甚だしいんじゃなかろうか。

基本は意見をぶつけ合って、落とし所を探ることだ。
おかしいと思うなら声を上げるべきだし、上げて良いのだ。

選挙こそが全てで、デモや抗議は邪魔だし無駄という考えは、政治家はもちろん、全ての人が捨てないといけない。

(むろんレイシストやら感情論だけのトンチンカンなマスコミやデモもありますけどね。そこは十把一絡げにすべきではないところ)

そして声が上がったなら、聞くべきだと思います。
できるだけ折り合いを付ける努力をする、議論をする。

ただ、そのためには双方が真摯に、本気で落とし所を探ろう、という意思が無いといけない。

非常に重要なことのはずだけれども、ありえないほどにそういうのが欠けていると思うことがあるんですよ。

ダイバーシティ

Google、中の人の「女性は生まれつきエンジニアに向かない」文書回覧で社内騒然

この件に関連して、「性別関係なく、能力で見て採用すべき」という意見をチラホラ見かけた。

一見ダイバーシティ的とは思うけれど、真にダイバーシティを実現するにはまずは無理にでも男女半々という目標は掲げてみて良いように思う。

これはいろんな分野で言えることだけれども、男女問わずエンジニアという職に就いてやっていけるという事実と社会的な認識が無い限り、主に女性の裾野が広がらない。
つまり能力で見るにしても、結局いつまでたっても「多くの男性と一部の女性」からしか選べないことになる。

これを「多くの男性と多くの女性」から選べるようにしたいわけだ。

そこで無理にでも男女半々という事実を作っておくことで、生活手段としての「エンジニア」という職業が全ての女性にとって現実的になるようにする。
その結果、エンジニアを志してみようという女性が増え、最終的には男女問わず、能力の高い者を選べるようになる。

エンジニアに男性も女性もない、そういう認識が当たり前のようになって初めて、
「性別関係なく、能力で見て採用すべき」
というやり方が生きてくるように思う。

まずは平等である事実を作る。

無理に男女半々にするのは短期的には損失であり、何も良いことが無いように見えるかもしれない。
しかし、それが将来もっとも合理的な状況を作り出すことににつながるのではないか。

社会的な観点からも、Googleレベルの企業であれば、これは試す価値のある挑戦であり投資のように思える。

# 人によってエンジニアに向き不向きがあるらしいことは医学的にも根拠があるらしいが、性別でそういうのがあるかは分からない。ここでは無い前提で考えた。

# 日本でも女性の活躍云々を謳うなら、まず平等な環境からだとも思うけど、何故か男女平等という言葉は聞こえてこないな・・

Older posts

© 2018 しろログ

Theme by Anders NorenUp ↑