2014年1月29日水曜日

Xcode5でアイコン画像が変更できない場合の対処方法

Asset Catalog以前の環境ですが、アイコン画像を変更してもなぜか反映されない症状が発生しました。
そういえば、この症状は・・・。

Xcodeのワークスペース(DerivedData)の削除

いろいろ試してみるも効果があったのは、Xcodeのワークスペースの削除でした。
メニューの[Window]->[Organizer]を開いて、Derived Dataの[Delete]ボタンで削除できます。
または、オーガナイザーでパスも見えているので、Finderや直接コマンドでもOKです。
cd ~/Library/Developer/Xcode/DerivedData
rm -fr ProjectName-xxxxxxxxxx
変なところではまりたくないものですね。

2014年1月25日土曜日

NGINXの仮想ホスト名(server_nameディレクティブ)のメモ

NGINXで仮想ホスト名(サーバ名)を指定する方法が公式のドキュメントにコンパクトにまとまっていたのでメモ。
あまり難しいことをやらない分わかりやすいですね。

マスタリングNGINX(20,21ページ)はもう少し詳しいですが、普通の使い方なら以下の完全一致、ワイルドカード、正規表現の内容で十分かもしれません。


サーバ名

http://nginx.org/ja/docs/http/server_names.html

以下引用です。

サーバ名解決の優先順位

  1. 完全一致名
  2. アスタリスクで始まるワイルドカード名: *.example.org
  3. アスタリスクで終わるワイルドカード名: mail.*
  4. 設定ファイル内の順序での正規表現

ワイルドカード

・ワイルドカード名にはそのサーバ名の最初か最後のみ、そしてドットに隣接したところのみにアスタリスクが含まれます。
・サーバ名 www.*.example.org や w*.example.org は無効です。
・特別なワイルドカードの形式 .example.org は、完全一致名 example.org とワイルドカード名 *.example.org の両方にマッチさせるように利用できます。

正規表現

サーバ名は正規表現を使用して、例えば ~^www\..+\.example\.org$ や ~^w.*\.example\.org$ として指定することができます。

ワイルドカードで有効なサーバ名の指定方法

server_name *.example.org
server_name example.*
server_name ~^www\..+\.example\.org$
server_name ~^w.*\.example\.org$

無効なサーバ名の指定方法

server_name www*.example.org
server_name www.*.example.org

サーバ名未定義のリクエストを防ぐには、_のように無効なドメイン名を使います。

サーバ名未定義のリクエストの処理を防ぐ

http://nginx.org/ja/docs/http/request_processing.html#how_to_prevent_undefined_server_names
server {
    listen       80  default_server;
    server_name  _;
    return       444;
}
シンプルでわかりやすいルールですね。
仕事ではApacheを使うことが多いですが、個人的にはNGINXいいですね。

2014年1月23日木曜日

Vagrant環境でMySQL5.6が起動しない?

VagrantでCentOS6.5でMySQLインストールしても起動しない・・・、
MySQL5.6だから?とかmy.cnfの設定がダメ?とかいろいろ考えすぎましたが、
デフォルトでも起動しないためそんなことはないようです。
ログには Cannot allocate memory・・・・と、
空きメモリーあるんだけどなと思いつつもinnodb_buffer_pool_sizeを小さくしてもダメでした。
[Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
[ERROR] InnoDB: Cannot allocate memory for the buffer pool
[ERROR] Plugin 'InnoDB' init function returned error.
[ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
[ERROR] Unknown/unsupported storage engine: InnoDB
[ERROR] Aborting

対策

メモリー(物理)を増やすほど富豪ではなかったのでswap領域を追加してみることにしました。

swap領域の確認

swapon -s
Filename    Type  Size Used Priority
確かにありません・・・。

スワップ領域作成

容量は環境に合わせて適宜変更してください。
sudo dd if=/dev/zero of=/swapfile bs=1024k count=512
sudo mkswap /swapfile
sudo swapon /swapfile
sudo chown root:root /swapfile
sudo chmod 0600 /swapfile

再起動しても反映されるように修正

sudo vi /etc/fstab
# 次の行を追記
/swapfile swap swap defaults 0 0 

OSのスワップの利用頻度を低くする

できるだけスワップしない用に設定する(0〜100) 100の方が多くスワップ領域を使用する
vi /etc/sysctl.conf
vm.swappiness=10
sysctl -p 

これで無事にMySQL5.6が起動したのでいろいろ検証できます。
ちなみにPHPでもワーニング出ていたのが解消しました。
 PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/gd.so' - libvpx.so.0: cannot map zero-fill pages: Cannot allocate memory in Unknown on line 0
ここにもさりげなくCannot allocate memoryが。
ワーニング?・・・レベルなのかな・・・

2013年11月10日日曜日

Python 3.3.2でmysql-connector-pythonを試す

Python3.3.2でmysql-connnector-pythonを試してみました。

1. pipでインストール

pip install mysql-connector-python
pipではインストールできませんでした。ドキュメントでは3.1は対応しているようなのですが無理っぽいですね。
$ pip install mysql-connector-python
途中省略
error: invalid command 'egg_info'

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_user/mysql-connector-python
Storing complete log in /path/to/.pip/pip.log

2. MySQL Connector/Pythonを確認

ChangeLogを確認したところ
1.1.0の開発版からprint()文に変更されているので、Python3系の対応が行われているっぽい
http://dev.mysql.com/doc/relnotes/connector-python/en/news-1-1-0.html

いずれにせよ安定版ではないので、少しでもバグフィックが多い最新バージョンの1.1.2をインストールしてみます。
Changes in MySQL Connector/Python 1.1.2 (2013-10-23)

ちなみにまだリリースされていない1.1.3の情報では、sjisなどバックスラッシュ(0x5c)問題があるようなので、sjisを扱う場合は導入はまだ難しいようです。
Changes in MySQL Connector/Python 1.1.3 (Not yet released)

3. ソースコードでインストール

ソースコードはこちらから http://dev.mysql.com/downloads/connector/python/
curl -L -o mysql-connector-python-1.1.2.tar.gz "http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-1.1.2.tar.gz/from/http://cdn.mysql.com/"
tar zxfv mysql-connector-python-1.1.2.tar.gz
mysql-connector-python-1.1.2
python setup.py install

4. 動作確認

$ python
Python 3.3.2 (default, Nov  3 2013, 19:17:12)
[GCC 4.7.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql.connector
>>> config = {
...    'user': 'username',
...    'password': 'password',
...    'host': '127.0.0.1',
...    'database': 'databasename',
... }
>>> cnx = mysql.connector.connect(**config)
>>> cur = cnx.cursor(buffered=True)
>>> cur.execute("SHOW STATUS LIKE 'Uptime'")
>>> print(cur.fetchone())
('Uptime', '678')
>>> cur.close()
True
>>> cnx.close()
簡単な動作確認ですが、動作しました。

2013年10月26日土曜日

Mac OS X 10.8 (Mountain Lion) -> 10.9 (Mavericks) アップグレードしてみた

新しいOSが出たらすぐにアップデート派なので、
発表されてすぐに10.8 (Mountain Lion) -> 10.9 (Marvericks)アップグレードしました。

当然新しいOSにはトラブルがつきもので、
もちろん覚悟はしていたのですが以外に無くてびっくりしています。
また機能的にはデスクトップやマルチモニタ環境の改善がすごく気に入っています。

が、しかし、100%問題無いということは無いので、アプリケーションの対応状況について実際に動作させて気になった点をご紹介いたします。

以下クリーンインストールではなく10.8からのアップデートという前提となります。

まずは致命的な所からのご紹介です。


Intel HAXM [×]

http://software.intel.com/en-us/forums/topic/477793

Intel HAXMのように致命的なものもあったりするので、仕事で使っているMacの場合は、使用しているアプリケーションが正式対応するまで待った方が安全かと思います。ちなみに実際に試してみましたがIntel HAXMを使用しているエミュレータ等を起動するとカーネルパニックになって電源OFF,ONしか復旧できません。Titanium MobileとかTizenなど開発に影響が出ているようです。

でも、こちらも中の人が反応してくれているので、
近いうちに10.9対応版がリリースするのではないかと思います。

追記 2013-10-29
Intel HAXM teamがMavericksとWindows8.1対応版をテスト中らしいです。

アンインストール方法

sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh

追記 2013-11-06
Mavericks用のhotfix(バージョン1.0.7)を適用したら動作しました。
http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager


MacPorts [△]
対応しているバージョンは、2.2.1以上ですね。
しかも、再ビルドが必要な場合が多いようです。
けっこうな手間ですが、今後のために再構築します。

ソースコード
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1.tar.bz2
パッケージ
https://distfiles.macports.org/MacPorts/MacPorts-2.2.1-10.9-Mavericks.pkg

いろいろ問題はあるようでこちらにまとめられています。
http://trac.macports.org/wiki/MavericksProblems

ソースコードをビルドすると次のようにtclで止まります。おそらくオプションつければいけるとは思いますが、ここは素直にパッケージで導入しました。
checking for Tcl configuration... configure: error: Can't find Tcl configuration definitions

VMWare Fusion [△〜◯]

4系は動作しないという情報も目にしたのですが、私の場合は、動作しています。
WindowsXPもWindows8.1も動作上は問題ないですね。

追記 2013-10-29
既存環境が動作する分には問題ないですが、設定変更などができませんでした。

5系は、仕事用のMacで使用していて、こちらはまだアップデートしていないのですが、Marvericksのマルチモニタ機能には対応していないようですが、動作しないということはなさそうですね。
https://discussionsjapan.apple.com/message/100804960#100804960

6系で正式に対応ってことですね。

追記 2013-10-29
正式にMavericksとWindows8.1対応版がリリースされました。
http://t.co/y0Aazo1vyn

VirtualBoxとVagrant [◯]

以前バージョンでは下記のようなエラーが出て起動しませんでした。
こちらも最新バージョンにアップデートして解決しました。

VirtualBox 4.3
https://www.virtualbox.org/wiki/Downloads
追記 2013-11-02
インストーラに含まれるVirtualBox_Uninstall.toolで前のバージョンをアンインストールしてから4.3.2をインストールする

直らない場合は、次のコマンドで回避できそう。私の環境は不要でした。
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.plist

Vagrant 1.3.5
http://downloads.vagrantup.com/tags/v1.3.5

VirtualBoxバージョンアップ前
vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["hostonlyif", "create"]

Stderr: 0%...
Progress state: NS_ERROR_FAILURE
VBoxManage: error: Failed to create the host-only adapter
VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface
VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 68 of file VBoxManageHostonly.cpp

Vagrantバージョンアップ前
$ vagrant up
Vagrant has detected that you have a version of VirtualBox installed
that is not supported. Please install one of the supported versions
listed below to use Vagrant:

プログラミング言語  [個人的に◎]

とりあえずバージョンをさらしてみます。
perl -v
This is perl 5, version 16, subversion 2 (v5.16.2) built for darwin-thread-multi-2level (with 3 registered patches, see perl -V for more detail)

php -v
PHP 5.4.17 (cli) (built: Aug 25 2013 02:03:38)

python --version
Python 2.7.5

ruby -v
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
個人的にはどれもすぐに開発で使えるバージョンですね。
こういうの地味に助かるんじゃないでしょうか。

あと、Chrome, Firebox, Safari, Dropbox, Evernote, Office2011, SublimeText, Coda2, mi, などなど・・・今のところ問題なくアッグレードはすごく満足度が高いものとなりました。



2013年10月14日月曜日

OSX CPU情報の取得

OSXでCPU情報を取得する機会があったのでメモ

sysctl -a | grep cpu

かなりいろいろな情報が取れるがいくつかを抜粋すると

物理コア数
hw.physicalcpu: 8

論理コア数
hw.logicalcpu: 16

ブランド名
machdep.cpu.brand_string: Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz

クロック数
hw.cpufrequency: 2260000000

system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: Mac Pro
      Model Identifier: MacPro4,1
      Processor Name: Quad-Core Intel Xeon
      Processor Speed: 2.26 GHz
      Number of Processors: 2
      Total Number of Cores: 8
      L2 Cache (per Core): 256 KB
      L3 Cache (per Processor): 8 MB
      Memory: 6 GB
      Processor Interconnect Speed: 5.86 GT/s
      Boot ROM Version: MP41.0081.B07
      SMC Version (system): 1.39f5
      SMC Version (processor tray): 1.39f5
      Serial Number (system): ****************
      Serial Number (processor tray): ****************
      Hardware UUID: ********-****-****-****-************
こちらは[ユーティリティ]->[システム情報]で参照できる情報に近いですね。
同じものを参照しているのかもしれません。

詳しくはこちら https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/system_profiler.8.html
CPU以外にも取得できるデータ型は次のコマンドで確認できます。
system_profiler -listDataTypes

Available Datatypes:
SPParallelATADataType
SPUniversalAccessDataType
SPApplicationsDataType
SPAudioDataType
SPBluetoothDataType
SPCameraDataType
SPCardReaderDataType
SPComponentDataType
SPDeveloperToolsDataType
SPDiagnosticsDataType
SPDiscBurningDataType
SPEthernetDataType
SPExtensionsDataType
SPFibreChannelDataType
SPFireWireDataType
SPFirewallDataType
SPFontsDataType
SPFrameworksDataType
SPDisplaysDataType
SPHardwareDataType
SPHardwareRAIDDataType
SPInstallHistoryDataType
SPNetworkLocationDataType
SPLogsDataType
SPManagedClientDataType
SPMemoryDataType
SPModemDataType
SPNetworkDataType
SPPCIDataType
SPParallelSCSIDataType
SPPowerDataType
SPPrefPaneDataType
SPPrintersSoftwareDataType
SPPrintersDataType
SPConfigurationProfileDataType
SPSASDataType
SPSerialATADataType
SPSPIDataType
SPSoftwareDataType
SPStartupItemDataType
SPStorageDataType
SPSyncServicesDataType
SPThunderboltDataType
SPUSBDataType
SPNetworkVolumeDataType
SPWWANDataType
SPAirPortDataType

system_profiler SPHardwareDataType

2013年10月5日土曜日

pip listのAssertionError

メモから再開する逆襲のエンジニアブログ

久しぶりにOSXでpython環境を作成したところ、
いきなりpip listでAssertionError

追記 2013-10-06 Debian 7.1でも同様のAssertionErrorを確認
$ pip list
distribute (0.6.49)
pip (1.4.1)
Exception:
Traceback (most recent call last):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/basecommand.py", line 134, in main
    status = self.run(options, args)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 80, in run
    self.run_listing(options)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 127, in run_listing
    self.output_package_listing(installed_packages)
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/commands/list.py", line 136, in output_package_listing
    if dist_is_editable(dist):
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/util.py", line 347, in dist_is_editable
    req = FrozenRequirement.from_dist(dist, [])
  File "/Users/foo/.pythonz/pythons/CPython-3.3.2/lib/python3.3/site-packages/pip-1.4.1-py3.3.egg/pip/__init__.py", line 194, in from_dist
    assert len(specs) == 1 and specs[0][0] == '=='
AssertionError

もうstackoverflowなしじゃ生きていけない・・・
http://stackoverflow.com/questions/18542633/pip-list-error-124-installing-on-mac-os-x

というわけで、distributeをアップデートして対策完了
$ pip install -U distribute

$ pip list
distribute (0.7.3)
pip (1.4.1)
setuptools (0.6c11)
stevedore (0.12)
virtualenv (1.10.1)
virtualenv-clone (0.2.4)
virtualenvwrapper (4.1.1)