明日も楽をするために

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

プログラムで書く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

PHPカンファレンス2016に行ってきました!

f:id:makoto1212:20161104232102j:plain:w400f:id:makoto1212:20161104232107j:plain:w400f:id:makoto1212:20161104232112j:plain:w400
スタンプラリーがあったのですが本が2冊当たりました。ありがとうございます。

「Cygamesを支えるPHPと、その高速化の取り組み」を聞いてきましたが、とても面白い話でした。今後もイベントは積極的に参加して行こうかなと思います。

Cygamesさんのサーバー構成を聞く限りだとnginx、vagrant、ansibleってどこでも結構使ってるんですね。
自分はapache環境が多いのでnginxの勉強もしないと行けませんね。

vagrant、ansibleは絶賛勉強中です。便利過ぎて使ってすぐに仕事での導入を考えました。

PHPでコーディング規約の自動化 PHP CodeSniffer

どうしても開発者が増えてきたりするとコーディング規約が適当になりがちです。
そこでコーディング規約を自動化しようと思いました。

職場のコーディング規約はPEARを元にしたものですが、現在では時代遅れ感が否めないのでPSRを採用する方向で考えました。
最近のPHP系のフレームワークはこれを採用しているところが多いです。
www.php-fig.org


実際に試したのはPHP_CodeSnifferと
github.com


PHP-CS-Fixerです。
github.com

某QiitaでPHP_CodeSnifferは古いと書かれていたのでPHP-CS-Fixerを先に使ってみましたが、現在self-updateすると落ちてくるのが2.0のDEV版なのですが、2.0からどうやらオプションが変わるようで1.x系のオプションが使えないので苦労しました。それとDEV版だからなのか、if文が複数行あるとインデントが崩れるため今回の使用は見送りました。

PHP_CodeSnifferは古いと書かれていましたが、現在でも開発は行われているようで全然問題ありませんでした。PHP_CodeSnifferはxmlのruleset.xmlを元にオレオレコーディング規約も作れるので便利です。

ダウンロード

PHP_CodeSnifferは2種類ありまして、phpcs.pharがコーディング規約を適用したさいのdiffを取れます。phpcbf.pharがコーディング規約の適用です。
それぞれgithubから落としてきます。

wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.6.1/phpcs.phar -O phpcs.phar
wget https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.6.1/phpcbf.phar -O phpcbf.phar
mv ./phpcs.phar /usr/local/bin/phpcs.phar
mv ./phpcbf.phar /usr/local/bin/phpcbf.phar
chmod 755 /usr/local/bin/phpcs.phar
chmod 755 /usr/local/bin/phpcbf.phar
使い方

--standardでコーディング規約を指定します。--report=diffをつけるとどこが変わったか見ることができます。

php phpcs.phar --standard=PSR2 /foo/foo.php
php phpcs.phar --standard=PSR2 --report=diff /foo/foo.php

コーディング規約を改造したい方はGithubのPSR2のxmlを元に自分流に改造できます。改造したファイルのPathを--standardに指定すれば使えます。
PSR2 ruleset.xml
https://github.com/squizlabs/PHP_CodeSniffer/blob/master/CodeSniffer/Standards/PSR2/ruleset.xml

変換実行
php phpcbf.phar --standard=ruleset.xml /foo/foo.php

ignoreで除外もできます。
php phpcbf.phar --standard=ruleset.xml /foo/foo.php --ignore=*Base.php

AndroidとiPhoneでhtml5を使用して音声と動画にアクセス時にユーザエージェントが変わる件

Html5で音声と動画にアクセスする際にAndroidiPhoneだとユーザエージェントが異なるものでアクセスされることが分かった。

Androidの場合(Zenfone5)
stagefright/1.2

iPhoneの場合(iPhone6の9.2)
AppleCoreMedia/1.0.0.13D15 (iPhone; U; CPU OS 9_2_1 like Mac OS X; ja_jp)

私が試した環境だと音声だけだが、調べてみると動画でも起きるらしい。Androidの場合は端末によって端末名が入っていたり、Zenfone5のようにAndroidの文字すら入ってない場合もあるのでユーザエージェントをandroidで判定していると痛い目を見る。