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 sshでvagrantにアクセスできます。vagrant initしたフォルダで実行してください。
#vagrant ssh
vagrantを終了したいときはvagrant環境からログアウトした後にvagrant haltで終了できます。
#vagrant halt
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で音声と動画にアクセスする際にAndroidとiPhoneだとユーザエージェントが異なるものでアクセスされることが分かった。
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で判定していると痛い目を見る。
UITableViewでUITableViewCellの高さを自動で可変する
今回はUILabelとUITextViewを使用した場合にUITableViewCellの高さを自動で可変する方法を書きます。UITableViewは予め設定し終わった状態と過程して話を進めます。
StoryBoard上の設定は以下のようにmarginをセットしてます。
画像はUILabelですが、UITextViewも同じようにします。
UILabelを使用するときは設定でLinesを0にしてください。
UITextViewを使用するときは設定でScrolling Enabledのチェックを外してください。
そして以下のコードを追記します。
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension }
estimatedHeightForRowAtIndexPathは予めUITableViewCellの高さを指定してやることで実際に表示した際に負荷を軽減してくれます。
heightForRowAtIndexPathは実際のUITableViewCellの高さを取得します。
今回は返り値にUITableViewAutomaticDimensionというUITableViewCellの高さを自動で取得してくれる値を書きます。
ちなみにネット上で色々コードが転がっていたので、それぞれ試してみました。
//OK tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 100 //OK tableView.rowHeight = UITableViewAutomaticDimension func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension } //OK これが同じ所に書けるし、一番いいのでは? func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension } func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return UITableViewAutomaticDimension } //NG 何故・・・estimatedRowHeightにはUITableViewAutomaticDimensionを直に設定することが出来ない tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = UITableViewAutomaticDimension
iPhoneアプリを一人で開発している俺がstoryboardの分割に踏み切った理由
iPhoneアプリを複数人で開発していると衝突を避けるためstoryboardの分割は必須だと思いますが、一人で開発している分には別に衝突しないし特に気にする必要もないと思っていたのですが、画面数が増えてきたところで色々と問題が出てきたので同じように一人で開発している人に共有したいと思います。
分割しない場合
メリット
・なにも考えないでstoryboardが書ける。
デメリット
・画面数が増えてくると表示に時間がかかる
・新規画面を追加している際に既存の画面を間違えて変更した時に気づきにくい
特に"画面数が増えてくると表示に時間がかかる"
これが結構問題で、作業効率が著しく落ちます。
(※私の仕事で使用しているMacMiniが5年前以上に買った物というのもありますが・・・)
最初はイメージで画面1枚に付き、storyboardを1枚用意しないといけないと思っていたのですがiOS8以降が対象であるならば以下が使用できます。
Storyboard Reference
developer.apple.com
xcodeの右下のほうにあるのですが、これをstoryboard上に持ってきます。
Storyboard Reference内の設定でStoryboardのファイル名の一覧がでてきます。
あとはStoryboard Referenceに対して今までどおりにSegueを張るだけでOKです。
Storyboard Referenceを導入すると
メリット
・画面分割を機能ごとのStoryboardで分割できる
・Segueがそのまま使える
デメリット
・iOS8の場合はRelationship Segueが使用できない
対してデメリットはないのでオススメです!!