明日も楽をするために

めんどくさがりなITエンジニアが書くメモ帳

aws-sdk-phpでIDCFとMinioのオブジェクトストレージに投稿する設定

AWS

aws-sdk-phpの3.x系で動作確認済み

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'region' => 'ap-northeast-1',
    'version' => '2006-03-01', //latestでもいい
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

Minio

aws-sdk-phpの3.x系で動作確認済み

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'region' => '', //値はなくても構わないがkeyは必要
    'version' => '2006-03-01', //latestでもいい
    'endpoint' => 'http://127.0.0.1:9000', //minioのipでhttpから記述する必要がある
    'use_path_style_endpoint' => true,
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

IDCF

aws-sdk-phpの2.x系で動作確認済み
※3.x系はsignatureの関係なのか動かない・・・

<?php
$s3 = Aws\S3\S3Client::factory(array(
    'credentials' => [
        'key'    => '',
        'secret' => '',
    ],
    'endpoint' => 'http://ds.jp-east.idcfcloud.com',
    'signature' => 's3', //IDCFはsignatureV4に対応していないのでsignatureV2にする必要がありs3でsignatureV2の指定になる
));
$result = $s3->putObject(array(
    'Bucket' => 'bucket-test',
    'Key'    => 'key',
    'Body'   => 'body',
    'ACL'    => 'public-read',
    //'ContentType' => 'image/jpeg',
));
echo $result['ObjectURL'];

s3はバケットURLが複数ある
例:bucket-testをバケット名とした場合
https://s3-ap-northeast-1.amazonaws.com/bucket-test/
https://bucket-test.s3-ap-northeast-1.amazonaws.com/

aws-sdk-php3.x系だとバケットサブドメインでリクエストが投げられるのでMinioなどipで指定したい場合は'use_path_style_endpoint' => true,を指定してバケット名パスを有効にする必要がある
IDCFもAWSと同じ両方のURLパターンに対応しているがsignatureはまだ完全に対応しきれていないっぽい?

ReactNativeでiOS実機デバッグを行う

通常デバッグを行う際にreact-native run-iosだとシミュレータが立ち上がりますが、iOSの実機でデバッグをしたくなることがあります。
例えばプッシュ通知のトークン取得や、決済処理など実機でしかできないことがあります。

github.com

npm install -g ios-deploy
react-native run-ios --device "デバイス名"

※有効な開発証明書がMacにインストールされている必要があります

最近のフロントエンド技術はAD広告を採用しているサイトと相性がよくない

1.レスポンシブデザイン
スマホとPC用にレスポンシブデザインを採用している場合に例えば動画広告を張っているとスマホでは表示されてないPCの動画が裏で再生されていることがありユーザの帯域を無駄に使用する。よく分かってない人がスマホの場合はPCの動作を表示しないようにすればいいのでは?というが、それだったら最初からレスポンシブデザインを採用しなければよかったのでは?ちなみに該当の動画広告は非同期に非対応で全て同期で再生しないといけないのでサイトが糞重くなる(動画広告って基本的に同期なの?)

2.SPA(vue.js、react.js)
まず画面遷移が減るのでPV数を元に広告費をもらっている場合は売り上げがさがる。ajaxで外部からdomを取得してきた場合にADが再生されない物も多数ありADを提供している会社の選定も必要になってくるが、システムチームに裁量権がない場合に外部からの鶴の一声で別の広告システムを使うことになったりして詰む。

プログラムで書くAutoLayout

tableViewに対してAutoLayoutを設定する際のサンプルコード

//AutoLayoutを有効化する
self.tableView.translatesAutoresizingMaskIntoConstraints = false

//上下左右に指定
self.tableView.topAnchor.constraint(equalToConstant: self.topAnchor).isActive = true
self.tableView.bottomAnchor.constraint(equalToConstant: self.bottomAnchor).isActive = true
self.tableView.leadingAnchor.constraint(equalToConstant: self.leadingAnchor).isActive = true
self.tableView.trailingAnchor.constraint(equalToConstant: self.trailingAnchor).isActive = true

//横と高さをを指定
self.tableView.heightAnchor.constraint(equalToConstant: self.heightAnchor).isActive = true
self.tableView.widthAnchor.constraint(equalToConstant: self.widthAnchor).isActive = true

//X軸とY軸を指定
self.tableView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
self.tableView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true

//上部からマージン100を指定
self.tableView.constraint(equalTo: self.topAnchor, constant: 100).isActive = true

iOS9以上で使用できます

3Dプリンタで印刷してもらった(DMM.make編

3Dプリンタには興味があったが買うとなると3Dデータを作ったことがない私がいきなり買うのはハードルが高かったが、どうやら世の中には3Dデータを送れば印刷してくれるサービスがあるしい。

高価格な3Dプリンタを使って印刷してくれるのは中々できない事なので非常にありがたい。今回はDMM.makeさんで印刷してもらうことにした。
make.dmm.com


まず用意する3Dデータだがstl形式のデータが必要だ。今回は3DCADのFusion360を使うことにした。
www.autodesk.co.jp

注意点としては作る際はmm単位で作ることと、z軸を高さとして調節することだった。最初cm単位で作ってしまっていて印刷が出来ないと連絡がきた・・・。
試行を重ねてようやく下記の状態まで作成できた。

f:id:makoto1212:20170713234437p:plain

DMM.makeで使える素材は色々あるのだが今回は一番安いナイロンを選択した。オプションで色の選択や磨きなどがある。
選べる素材一覧 - DMM.make 3Dプリント


f:id:makoto1212:20170713234826j:plain
約一週間ほど待って実際に届いた現物がこちらで想像よりかなり綺麗。このサイズで642円だがオプションに色と磨きをつけると1600円ほどになる。思ったよりも楽しかったので3Dプリンタを今度は買おうと思っている。

CentOS6 日本語化設定

vimで編集する際にキーボード設定が出来てないと困るので、まず一時的にキーボード設定を行う

#loadkeys jp106

以下の設定でキーボード設定を行う

#cat /etc/sysconfig/keyboard
KEYTABLE="jp106"
MODEL="jp106+inet"
LAYOUT="jp"
KEYBOARDTYPE="pc"

言語設定

#vi /etc/sysconfig/i18n
LANG="ja_JP.UTF-8" ※うまくいかない場合は"ja_JP.eucJP"

コマンドで確認→設定反映→確認する

#echo $LANG
#source /etc/sysconfig/i18n
#echo $LANG

時刻設定

#vi /etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=true

タイムゾーンを設定

#cp /usr/share/zoneinfo/Japan /etc/localtime

vagrantでcentosを簡単に用意して使用する方法

vagrantを使用する際にまずはboxをダウンロードしてくる必要がありますが
boxを配布しているサイトは公式の物と非公式の物があります。

centosは以下に公式のboxがありますので、こちらを使用します。
centos | Atlas by HashiCorp

centos6を今回は選択して使用します。
boxのurlにcentos/6を指定すると自動で最新のバージョンが落ちてきます。

#vagrant box add centos/6
#mkdir ~/dev
#cd ~/dev
#vagrant init centos/6
#vagrant up
#vagrant ssh 

urlを指定する場合はダウンロードしたいバージョンを選択し、該当のURLをベースにproviders/virtualbox.boxを最後に追記します。
https://atlas.hashicorp.com/centos/boxes/6/versions/1611.01

#vagrant box add game_dev https://atlas.hashicorp.com/centos/boxes/6/versions/1611.01/providers/virtualbox.box

vagrant upでvagrantを起動することができます。

#vagrant up

vagrant sshvagrantにアクセスできます。vagrant initしたフォルダで実行してください。

#vagrant ssh

vagrantを終了したいときはvagrant環境からログアウトした後にvagrant haltで終了できます。

#vagrant halt