Hatena::ブログ(Diary)

Web系がおもしろい。

2014-02-15

ぼちぼち移行します

22:32 | ぼちぼち移行しますのブックマークコメント

移行と言っても、多分こっちは放置気味になると思います。。

一層、記事の質をあげれたら良いな。

http://esperia.hatenablog.com/

2013-10-11

「Webアプリ開発を加速する CakePHP2定番レシピ119」献本頂きました!!

| 00:00 | 「Webアプリ開発を加速する CakePHP2定番レシピ119」献本頂きました!!のブックマークコメント

献本頂きました!!

CakePHPの本欲しかったので、とっても嬉しいです!!

しかも直接献本頂いたのはこれが最初です。記念すべき一冊!

長谷川さんとは直接なつながりはなかったのですが、最近CakePHPやってるよアピールをTwitterやら岡山Git勉強会でアピールしていたら、以前からお世話になっているパトラッシュさん経由でご連絡させていただくことになりました。

頂いて少しずつ読み始めたので感想を書こうと思います。


サンプルがついてる!

まずこの本で嬉しいのは、サンプルがついてることでした。

僕のCakePHPの触り始めの頃、つまりブログチュートリアル学び終えてホヤホヤの頃、一番知りたかったのは「正しいCakePHPの書き方」でした。そして欲しかったのは「正しいCakePHPのコードが書かれたサンプル」です。

この頃。。

  • そもそもModelの呼び出し方がよく分かっていない
    • ModelとViewとControllerがそもそもどのように結びついているのかがちゃんと理解できていない
  • ググってもCakePHP 1.3.x系の情報が出てくる

MVCの考え方はCakePHPに限らないし、この何をどこに書くのが良いのかは分かってるんです。が、「そこに書いてどう呼び出せばよいのか」。繋ぎ目がわからなかったのです。ブログチュートリアルは、バリバリ「規約」に則ったサンプルになっているので、ちょっと規約から外れると動かしかたが分からない(例えばPostsControllerじゃなくてHogeControllerにしたい場合、Controllerに$usesを使えばいいよとは書いてない)。

Googlabilityが低いよwとか言われるとそれまでだけど…

僕はそういうところにすごく時間を取られてしまっていたのです。。

この本の著者、長谷川さんは「CakePHP 1.x系の頃から使っています」という事で、とても信頼度の高いCakePHPerのコードと言えます。これがすごい嬉しかったです。


ほしい情報が欲しい粒度でまとまっている

CakePHPをしていて一番読むのは、やはりというか、多分CakePHPクックブックです。公式であることの安心感や情報の信頼度の高さ、ググって見つけたと思って試してみたら動かなくて、実はv1.3系の記事であることに気づいてげんなりすることがないなどのメリットがあります。

ただし、クックブック、「APIの説明に寄りすぎていて、実際にやりたいことがわかりにくい」面があると思うのです。

例えば、割と最近認証(AuthComponent)に手を出したのですが、結局クックブックではなく、CakePHP 2.x 系で会員認証 / ログイン関係の機能を AuthComponent を使って構築する方法 | ウェブルを見て実装しました。クックブックの方は目的や説明が長すぎて、求めているものが見えにくいのです。

ドキュメントとして、それらが必要なのは分かるんですが、実装例となるControllerとテーブルのスキーマのサンプルがついているだけで、とりあえずは分かるんだけどなー…とか思ったりしてしまいます。

それに対してこのレシピ本は、逆引きになっているため、ほしい情報が目次からすぐに参照できます。細かい話は抜きにして「実際に困ったこと」を項目としているため、困ったときに参照するとヒットしそうな項目が並んでいます。実際に、僕が困った項目を参照すると、すべて答えが書いてありました。ありがたい。。

細かい話はクックブックを見れば良いんですよね。APIの詳しい話はわかりやすく書いてくれているので。困ったときにググれるキーワードだけ教えてもらえれば。



本書は「技術者が欲しがっている」内容が整理され、まとまっている本です。「クックブックで満足!全部そっちでおk」っていう人は、もうかなりCakePHP分かりきっている人だと思うのでなくても良いかもしれません。しかし、ブログチュートリアルを終わらせた後くらいの方から、僕のような基本機能大体使った!っていうくらいのCake歴をお持ちの方は、持っておいて損はないです。


初めて使った時には「PHPは十分経験があるのにCakePHPで推奨される書き方が分からず時間がかかる」であるとか、「書き方が分からないので無理矢理PHPの書き方をしてしまいCakePHPの美味しいところを使えないばかりか余計な手間がかかる」という状態になりがちです。

*

ただ、現状では基本的な使い方を学習した後の使い勝手の良いリファレンスが不足していました。

既刊で、すべてを網羅したとても壮大なリファレンスがあるのですが、その網羅性の反面個々の項目の記述が簡潔で困ることもありました

*

僕にとってすごいマッチしている本だったのでなぜかと思ったら、本のコンセプトがまさに僕の困っていたポイントだからなんだと思ったりしました。

ご執筆お疲れさまでした!

2013-09-27

Xcode5で作ったプロジェクトをiOS5で動かす時にStoryboardが見つからないと言われる件

| 10:14 | Xcode5で作ったプロジェクトをiOS5で動かす時にStoryboardが見つからないと言われる件のブックマークコメント

2013/10/10 追記しました。


こんなん出て起動時に落ちてた

reason: 'Could not find a storyboard named 'Main' in bundle

iOS7.0 Simulator, iOS 6.x Simulatorで動いたのに、iOS5 Simulatorだけで、とかって出て動かなかった件の直し方。

ちなみにiphone - Could not find a storyboard named 'MainStoryBoard' in bundle NSBundle - Stack Overflowは試してみたけどだめだったです。


操作
  1. Main_iPhone.storyboardとMain_iPad.storyboardの参照を削除(Remove References)
  2. Finderでプロジェクトフォルダを開く
  3. /path/to/project_name/Base.lproj 内の Main_iPhone.storyboardとMain_iPad.storyboardを、 /path/to/project_name/en.lproj 内に移動
  4. XcodeのProject Navigatorの、プロジェクト名のついたフォルダを選び、サブメニューより[Add Files to "<project_name>"]
  5. 先ほど移動させた Main_iPhone.storyboardとMain_iPad.storyboard を選択
    • Destinationのチェックは外す
    • Foldersは[Create groups for any added folders]を選択

あとはiOS5向けのビルド設定をして実行。

iOS5.0 Simulatorで確認しました。


あと

なんかイミフなんですけど、この対応をしてアプリ実行できた後、git reset --hard使って問題が出ていた時の状態に戻して実行したら、問題なく動いた。なんだこれ…Xcodeってキャッシュみたいなのしてるんです?

iOS始めたばっかりで分かってないんですけど、この対応は多国語対応でまずい気がするし、先が不安です。


追記

やっぱり国際化対応関係みたいです。

http://ninjinkun.hatenablog.com/entry/2013/01/14/192206

iOS5だと、Baseを使うことは出来んようになってるのかも…。

上記の対応は、なるべくしないほうがよさそうです。


追記2 (2013/10/23)

ios5 - Is "Use Base Internationalization" supported in iOS 5? - Stack Overflow

iOS5はBaseに対応していないのが原因とのこと。

2013-09-23

ruby入れたった

| 23:45 | ruby入れたったのブックマークコメント

Rubyやることにした!!

環境構築

ruby入れた環境は以下です。



構築方法について

とりあえず、rubyはバージョンによってAPIすごい違うみたいな話を聞いたことがあるので、そもそも入れるバージョンどうするか迷ってました。

つぶやいたところ、

とのこと。そのあと、

とのことなので、2.0を入れることにしました!ほんとにありがたい…

環境自体についても、

とアドバイスを頂いたので、rbenvでやりくりすることに!


構築開始

OS X で rbenv を使って ruby 1.9.3 or 2.0.0 の環境を作る - Qiitaの手順に沿って入れることに。僕は既にhomebrew使っていたので、homebrewインストールは飛ばしました。

$ brew install openssl
$ brew install readline
$ brew install libyaml
$ brew install autoconf
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir -p ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

続けて、~/.zshrc(もしくは~/.zshenv)に以下を記述。

export PATH=$HOME/.rbenv/bin:$PATH
export PATH=$HOME/.rbenv/shims:$PATH
eval "$(rbenv init -)"

2行目のやつは、QiitaのTipsの節に書かれていたものをちょっとカスタマイズしたやつです。

そして最後にrubyインストール。既に記事にある2.0のバージョンは、リビジョン番号?が若干古いみたいだったので、インストールバージョンを確認した上で導入。

$ rbenv install -l
Available versions:
(省略)
  2.0.0-p247
(省略)

$ RUBY_CONFIGURE_OPTS="--enable-shared --with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)"  rbenv install 2.0.0-p247

そして、最後にインストールしたものを常に利用するように設定。

rbenv shell <version> とやっても、コンソール立ち上げ直すともとに戻っていたので、rbenv global <version> で設定。

$ rbenv global 2.0.0-p247

以上で完了っぽいです!rubyのバージョンを最終確認しておわり。

$ ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.5.0]

railsインストール

あとこれから使うことになりそうなのでrailsインストールも。

$ rbenv which gem
/Users/esperia09/.rbenv/versions/2.0.0-p247/bin/gem

$ gem i rails
Fetching: i18n-0.6.5.gem (100%)
(省略)
28 gems installed

$ rbenv rehash

2013-09-20

VM上のUbuntu Server(LVMあり)のパーティションを拡張したった

| 23:44 | VM上のUbuntu Server(LVMあり)のパーティションを拡張したったのブックマークコメント

仮想環境(ESXi)のHDDが足りんなったので拡張したった!

30GB -> 130GBです。その時のメモ。


環境

$ uname -a
Linux unko 3.5.0-36-generic #57~precise1-Ubuntu SMP Thu Jun 20 18:21:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

参考サイト

以下のサイトがすごい参考になりました。。( Thanks @ebiflyer )


そもそもLVMってなんなの

LVM(logical volume manager)とは、複数のハード・ディスクやパーティションにまたがった記憶領域を一つの論理的なディスクとして扱うことのできるディスク管理機能。LinuxをはじめとしたUNIX系OS上で利用できる。

LVMとは

パーティションすらも僕よく分かってなかったんですけど、上記日経BPの記事はすごい分かりやすいです…!

LVMには、

  • PV: 物理ボリューム
    • 実際にささってるHDDの領域
  • LV: 論理ボリューム
    • 使う側が普段意識するボリューム
  • VG: ボリュームグループ
    • 上記を統括するおおきなグループ

の3つがあるみたいです。

HDDの容量を増やすというのは、新しい領域を認識させた後、それらの領域をそれぞれ拡張してあげることが必要みたいです。


流れ

  1. vSphere Client経由でVMHDDを増設
  2. fdiskでパーティションを拡張
  3. PVの拡張
  4. LVの拡張
  5. ファイルシステムの拡張

vSphere Client経由でVMHDDを増設

GUIで普通にHDDを増設します。フィーリングで設定できます。たぶん。

増設できたら起動して、コマンドだして確認しましょう。

$ sudo lshw -C disk
  *-disk                  
       description: SCSI Disk
       physical id: 0.0.0
       bus info: scsi@2:0.0.0
       logical name: /dev/sda
       size: 130GiB (139GB)
       capabilities: partitioned partitioned:dos
       configuration: signature=00017ad2
  ...

僕の場合は 30GB -> 130GB なのでこれでうはおk。


fdiskでパーティションを拡張

…するんですが、その前にいろいろ情報を見ておきましょう。


$ df -H

Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/unko-root    106G   51G   51G  50% /
udev                     2.1G  4.1k  2.1G   1% /dev
tmpfs                    830M  267k  830M   1% /run
none                     5.3M     0  5.3M   0% /run/lock
none                     2.1G     0  2.1G   0% /run/shm
/dev/sda1                239M   56M  171M  25% /boot

今回、拡張するのは /dev/mapper/unko-root です。(上記はもう拡張後の情報なので増えちゃってます)


$ sudo fdisk -lu /dev/sda

Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017ad2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          501758    62912511    31205377    5  Extended
/dev/sda5          501760    62912512    31205376    5  Linux LVM

/dev/sda2 が拡張パーティション、/dev/sda5 が論理ボリューム?になるのかな。。(よく分かってない)

sdaはhdaだったりとかもしますが同じです。

あと、上記一覧上記は保持しておきましょう。この後使います。


※上記結果もですが、ここから先の記事は事後に書いてるので、HDD拡張後の値になってます…。試行錯誤でやったので、前のデータが以下しか残ってません。。参考までにおいておきます。

255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

/dev/sda1   2048    499711   248832  83 Linux
/dev/sda2 501758  62912511 31205377   5 Extended
/dev/sda5 501760  62912512 31205376  8e Linux LVM

で、この後、一旦マシンを落として、root権限を持ったrescue modeで起動。編集していきます。

# fdisk /dev/sda

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

コマンドを発行すると編集モードになるので、まずmを押してそれぞれのコマンドを確認。

Command (m for help): p

Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017ad2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          499712   272629759   136065024    5  Extended
/dev/sda5          501760   272629759   136064000   8e  Linux LVM

現在の状態も確認できます。

では、まずはパーティションを仕切りなおすため、一旦パーティションを削除します。(ここも僕よく分かってないんですが、拡張の場合パーティション内のデータは消えませんでした。仕切りなおすだけだからかな。)

Command (m for help): d
Partition number (1-5): 2

Command (m for help): p

Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017ad2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux

/dev/sda2パーティション消えました。sda2に対する論理パーティションsda5も同時に消えました。元がなくなるので当然ですね。

では、新たに仕切りなおします。

Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (1-4, default 2): <リターン>
Using default value 2
First sector (499712-272629759, default 499712): <リターン>
Using default value 499712
Last sector, +sectors or +size{K,M,G} (499712-272629759, default 272629759): <リターン>
Using default value 272629759

sda2はプライマリではなく、拡張パーティションなので"e"(extended)を選択。今回は増設した分MAXに使うので、default値として計算してくれている値(First sectorは499712, Last sectorは272629759)を選択するため、数値を入力しないでそのままリターン連打で先に進みます。

続けて論理パーティション


Command (m for help): n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (501760-272629759, default 501760): <リターン>
Using default value 501760
Last sector, +sectors or +size{K,M,G} (501760-272629759, default 272629759): <リターン>
Using default value 272629759

Command (m for help): p

Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017ad2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          499712   272629759   136065024    5  Extended
/dev/sda5          501760   272629759   136064000   83  Linux

論理パーティションは"l"(logical)。sda5。値はすべてdefault値。

これで仕切りなおしができたのですが、sda5のパーティションIdがまだ"Linux LVM"になっていないので続けて以下を実行。

Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 8e
Changed system type of partition 5 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sda: 139.6 GB, 139586437120 bytes
255 heads, 63 sectors/track, 16970 cylinders, total 272629760 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017ad2

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      499711      248832   83  Linux
/dev/sda2          499712   272629759   136065024    5  Extended
/dev/sda5          501760   272629759   136064000   8e  Linux LVM

無事なりました!ちなみに途中で入力した 8e は、fdiskの対話モードで l を押すと見れます。

Command (m for help): l

 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
 5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
 6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
 8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
 9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
 a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
1e  Hidden W95 FAT1 80  Old Minix     

そして最後に間違いないか確認しながら、 w で保存。

上記fdiskの対話モードの状態は、この「w」を発行するまでは書き込まれません。途中で不安になったり失敗した時は、Ctrl + cで一旦中断しましょう。


Command (m for help): w

# exit

上記fdiskコマンドの処理は、最後の「w」を発行するまでは書き込まれません。途中で不安になったり失敗した時は、Ctrl + cで一旦中断しましょう。

ここの拡張は、 【Linux サーバ構築 - Fedora Core5編】LVM - LVM - パーティションの拡張を伴うPV, VG, LVの拡張方法の 2 を見ながら行いました。



残りの処理

上記の3つあたりは【Linux サーバ構築 - Fedora Core5編】LVM - LVM - パーティションの拡張を伴うPV, VG, LVの拡張方法を参考にするとできました!(書き疲れた)

注意点は、

  • 上記の記事にある「/dev/VolGroup00/LogVol01」や「/dev/VolGroup00/LogVol02」に該当するものは、僕の記事にある「/dev/mapper/unko-root」です。
  • Ubuntu Serverには、上記の記事にある ext2online コマンドが無い
    • この部分は飛ばしても問題なかったです。
    • 代わりに(?)、resize2fsの前に、lvresizeコマンドは発行しました。
    • lvresizeコマンドはこの辺りからみつけた。


これで、晴れて拡張できました。なんかよく分かってないところ多くて大丈夫かな…って感じするけど、df -Hとかみてもちゃんとなってるし、もともとのデータも消えてないしよしとします!