Vagrantメモ

あけましておめでとうございます。

今年も宜しくお願いいたします。

今年の1発目は正月の間に触っていたVagrantについてのまとめ。

インストール方法や使い方は以下の参考サイトを参照
とりあえずドットインストール見ておけばいいと思う。

ドットインストール:Vagrant入門 (全13回)
※共有フォルダとかProvisioningの説明もあり

Windows7にVirtualBoxとVagrantをインストールしたメモ – k-holyのPHPとか諸々メモ

Vagrantの備忘録 | jekylog

Vagrant – naoyaのはてなダイアリー

Vagrantで固定IPのVMを作ってみたら超簡単だった

Bridged Networking

A list of base boxes for Vagrant

CentOS 上で Vagrant を導入するまでのメモ(CUI)

Vagrantのboxに少しだけ手を加えたものをboxとして取っておきたい

以下コマンドなどメモ書き

■バージョン確認

vagrant -v

■Boxの追加

vagrant box add 名前 boxのURL

■今あるBoxの確認

vagrant box list

■初期化

vagrant init

■仮想サーバの起動

vagrant up

■仮想サーバの状態確認

vagrant status

■仮想サーバの停止

vagrant halt

■データを破棄

vagrant destroy

■仮想サーバを再起動

vagrant reload

■仮想サーバの一時停止

vagrant suspend

■仮想サーバへの接続

vagrant ssh

■ネットワーク設定(ブリッジ接続)※hostがwindowsの時
Vagrantfileをエディタで開き以下の場所のコメントアウトを外す

#config.vm.network :public_network
↓
config.vm.network :public_network

保存後に仮想サーバを再起動する

■MacBookAirでブリッジの設定をした時
以下のコマンドを実行しアダプタの名前を取得

$ VBoxManage list bridgedifs | grep ^Name
Name:            en0: Wi-Fi (AirPort)

Vagrantfileをエディタで開き以下の設定をファイル末尾に追記

Vagrant::Config.run do |config|
  config.vm.network :bridged, :bridge => "en0: Wi-Fi (AirPort)"
end

保存後に仮想サーバを再起動する

■vagrantにcommit、rollback機能を追加できるSaharaをインストールする

vagrant gem install sahara

□sandbox モードに入る

vagrant sandbox on

□sandbox モード on に入った時点まで巻き戻す!

vagrant sandbox rollback

□変更を確定

vagrant sandbox commit

■任意のタイミングでOSのスナップショットを取得する

vagrant package

fullcalendar.jsで予定が重なったときの表示順番を指定する

fullcalendar.jsで予定が重なったときの表示順番を指定する

すごく優秀なfullcalendar.js

元々の「fullcalendar.js」では予定が重なった場合に
タイトルを比較してどちらを左に出すのか決めているみたい。

これだと予定に色をつけた場合にタイトルで左右が
決まってしまうから同じ色の予定でも左右バラバラに
表示されて美しくない。

ということでfullcalendar.jsを変更。

function compareSlotSegs(seg1, seg2) {
    return seg1.start - seg2.start || // earlier start time goes first
        (seg2.end - seg2.start) - (seg1.end - seg1.start) || // tie? longer-duration goes first
        (seg1.event.title || '').localeCompare(seg2.event.title); // tie? alphabetically by title
}

もともと週表示では↑のようになっているので

function compareSlotSegs(seg1, seg2) {
    return seg1.start - seg2.start || // earlier start time goes first
        (seg2.end - seg2.start) - (seg1.end - seg1.start) || // tie? longer-duration goes first
        (seg1.event.color || '').localeCompare(seg2.event.color) ||
        (seg1.event.title || '').localeCompare(seg2.event.title); // tie? alphabetically by title
}

↑このように変更。
タイトルで比較する前にcolorプロパティで比較するのを追加。
登録順とかも気にする場合はidとかで比較するのもいいかも。

// A cmp function for determining which segments should appear higher up
function compareDaySegments(a, b) {
    return (b.rightCol - b.leftCol) - (a.rightCol - a.leftCol) || // put wider events first
        b.event.allDay - a.event.allDay || // if tie, put all-day events first (booleans cast to 0/1)
        a.event.start - b.event.start || // if a tie, sort by event start date
        (a.event.title || '').localeCompare(b.event.title) // if a tie, sort by event title
}

↑月表示側も

// A cmp function for determining which segments should appear higher up
function compareDaySegments(a, b) {
    return (b.rightCol - b.leftCol) - (a.rightCol - a.leftCol) || // put wider events first
        b.event.allDay - a.event.allDay || // if tie, put all-day events first (booleans cast to 0/1)
        a.event.start - b.event.start || // if a tie, sort by event start date
        (a.event.color || '').localeCompare(b.event.color) ||
        (a.event.title || '').localeCompare(b.event.title) // if a tie, sort by event title
}

↑同じ感じで修正

■参考URL

jQuery fullcalendar integration with PHP and MySQL

FullCalendarの日本語化やオプションいろいろ

FullCalendarの導入からカレンダー毎の色指定まで

Googleアナリティクスのトラッキングコードのメソッド一覧

Googleアナリティクスのトラッキングコードのメソッド一覧

クロスドメインでのトラッキングを取得するときに「?」じゃなくて「#」
で引き継ぎたいとかなったので調べた。

公式のメソッド一覧は以下。
Google Analytics Tracking Code

ざっくり引数でuseHashってなってるところが関連メソッド。

HTML5を使ったフォームで電話番号を 入力した時に先頭の0が確認画面で消えてしまう 現象

HTML5を使ったフォームで電話番号を
入力した時に先頭の0が確認画面で消えてしまう
現象に遭遇した。

IE10やFirefox、Chromeでは再現しない動作で、
どうもiOS系で発生する問題のよう。
まるでExcelのような挙動。。。

原因はiOSがPOSTのときにtype=”number”の値の先頭の0を取り除いて
しまうかららしい。

numberは数字だから先頭0はおかしいだろといわれればそれまでなんだけど、、
以前は動いてたものだから結構動揺した。

type=”number”はスマホなどで数字キーボードがデフォルトで
表示されるから重宝してたわけだけどこれは仕様を変えなきゃ
いけない予感。。

電話番号専用の入力ならtelを使えばいいんだろうけど色々事情が・・・。

【以下参考ページ】
■郵便番号フィールドにinput[type=”number”]を使ってはいけない

■iOS5/6でHTML5のinput type=”number”の挙動が変わる

VMware Playerがアンインストールできない場合

VMware Playerがアンインストールできない場合

VMware Playerを5から6にアップデートしようとしたときに
VMware Player5を一旦削除する操作が入るのですが、
削除する時に

MSI「」が失敗しました

という謎のメッセージが出て削除ができない状態に。

Fix itでの削除も試してみたけどFix it的には削除できたっていってるけどまだVMware Playerは起動する・・・。

しょうがないので色々と調べて試してみた↓↓↓

VMware Playerのアンインストール失敗

VMWare Player のアンインストールが出来ない件

VMware Workstationのアップデートに失敗し、アンインストールもできない件
しかし自分の環境では/cleanをつけても途中でエラーが出てしまい、
クリーンアンインストールもできなかった。。

しょうがないので手動での削除を試みることに。
手動削除は以下のページを参考にした。

Cleaning up after an incomplete uninstallation on a Windows host (1308)

※Manually cleaning a Windows system の個所。
※レジストリの変更は、自己の責任において行ってください。

とりあえず削除は出来たみたいだ。。

特定ディレクトリ以下のhtmlのファイル数を調べたい。

特定ディレクトリ以下のhtmlのファイル数を調べたい。
よく忘れる・・・。

一旦以下のコマンドで検索し結果を確認する

find ./対象ディレクトリ -path "./除外ディレクトリ名" -prune -o -name "*.html" -type f

で、「| wc -l」を追加してファイル数を取得。

find ./対象ディレクトリ -path "./除外ディレクトリ名" -prune -o -name "*.html" -type f | wc -l

※このとき除外のディレクトリ名が入ってるので-1しとくw

■参考
ディレクトリ内のファイル総数を調べる

findで特定のディレクトリを検索対象外(除外)にする

レンタルサーバでscpもlftpも無い場合にwgetで一括データバックアップする

レンタルサーバでscpもlftpも無い場合にwgetで一括データバックアップする

某レンタルサーバは容量無制限だからバックアップ用途に
使おうとおもったらscpもlftpコマンドも無く、ftpでしか
データをやり取りできないことが判明。
ftpで再帰的にデータを取得するようにスクリプトを組む
こともできるけどそれは面倒なので、他に手段が無いか調査。

するとwgetにミラーリングオプションがあるってことでwgetで
データバックアップを行うことにした。
※wgetコマンドはあった。

以下コマンド

wget -mc -a logfile -P /local_path ftp://username:password@hostname/backup_target
-m ミラーリング
-c ダウンロードが途中で終わったものを継続するレジューム機能
-a ログファイルを指定したログファイルに書き出す(追記)
-P ローカル保存の起点を指定する

■参考URL
FTPサーバからファイルを一括転送

wget の使い方
↑-Pのオプションが小文字になってるけど大文字が正解

DELL studio XPS 9000をZALMAN Z9 Plusに移植した。

DELL studio XPS 9000 の具合が悪く、FF14をやるのに不安だったの
でケースと電源を交換することにした。

ケースは同僚にお勧めされた「ZALMAN ATX ミドルタワーケース Z9 PLUS」。
めっちゃ冷えると言われたので購入。レビューを見てもかなり期待できる。

最初はケースだけのつもりだったけど、studio XPS 9000の電源がATX規格より大きくて
入らない可能性があったし、そもそも電源周りも怪しいなと思ったので電源も新調することに。。

電源はこちら。「玄人志向 PC用電源 ATX 定格600W 12cm静音ファン 80PLUS BRONZE取得 KRPW-SS600W/85+」

で、ケースの写真。

IMG_2625

もっと読む DELL studio XPS 9000をZALMAN Z9 Plusに移植した。

Symfony2既存のデータベースからEntityを作る方法メモ

How to generate Entities from an Existing Database

上記を参考に行ったけど、Resource/config/doctrine以下のxmlの設定を
利用するようになってしまい、あとでライフサイクルコールバックが使いづらくなったので
Entity内にマッピングされるようにEntityを作成する。

Symfony2.3.2の状態
まずはデータベースを作って、app/config/parameters.ymlに設定をしておく。

バンドルは↓と仮定します。
./src/Devel/TestBundle/

まず最初にDoctrineにデータベースの内部を調べさせて、
「./src/Devel/TestBundle/Resources/config/doctrine」以下にXMLのメタデータファイルを作成する。

$ php app/console doctrine:mapping:convert xml ./src/Devel/TestBundle/Resources/config/doctrine --from-database --force

次にメタデータを元にデータベース情報をマッピングしたEntitiyを作成する

$ php app/console doctrine:mapping:import DevelTestBundle annotation

一応リレーションも設定された状態でEntityができるのでうれしい。

XMLのメタデータファイルを削除しておく※これが大事

$ rm src/Devel/TestBundle/Resource/config/doctrine -rf

上記で作成したEntityはセッター、ゲッターがないので以下のコマンドで追加する

$ php app/console doctrine:generate:entities DevelTestBundle --no-backup

この状態で↓のページのCRUD生成を行うと素敵な状態からはじめられる。
Symfony2 でアプリを作る基礎

リレーション設定した状態でCRUDを作成すると、
新規登録時に__toStringが無いって言われるので、
Entityに__toStringメソッドを追加して表示したい内容を
返すとgood。