投稿

5月, 2014の投稿を表示しています

PHPでUUIDを生成するための拡張モジュールをインストール

イメージ
PHPでUUID(Universally Unique Identifier)を生成したかったときの覚書。環境: CentOS 6.5, nginx 1.6.0, PHP 5.4.28コマンドラインツール(pecl)をインストールする
# yum install php-devel php-pear検索してインストール
# pecl search uuid
# pecl install uuidエラーconfigure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
ERROR: `/var/tmp/uuid/configure --with-uuid' failedコンパイラがないらしい。
# yum install gcc
# pecl install uuidまたエラーconfigure: error: 'uuid/uuid.h' header not found
ERROR: `/var/tmp/uuid/configure --with-uuid' faileduuid用のライブラリがないらしい。yumで検索してインストール。
# yum search uuid
# yum install libuuid-devel
# pecl install uuid成功Build process completed successfully
Installing '/usr/lib64/php/modules/uuid.so'
install ok: channel://pecl.php.net/uuid-1.0.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=uuid.so" to php.ini# vi /etc/php.d/uuid.iniextension=uuid.so# /etc/rc.d/init.d/php-fpm restartphpinfo確認
# php -i | less提供されているメソッドをヘッダーファイルで確認。http://…

Lets Note S9の内蔵Wifiが壊れたので無線LAN子機を買った

イメージ
有線LANから無線LANに切り替えると正常に動くこともあったけど、必要なときに使えないと困るので何とかしようとしたときの覚書。環境: Let's note CF-S9L(CF-S9LY9BDP)Windows8.1 64bit先に結論を書くと内蔵wifiデバイスが壊れていたので、以下はそう判断するまでのログ。デバイスマネージャーで見ると無線LANはこんな風に表示されてた。Let's note S9はWindows8のサポート対象外なのでIntelのサイトから最新のドライバをインストールしてみた。Windows 8.1* 用インテル® PROSet/Wireless ソフトウェア | ダウンロード・センターWireless_16.11.0_e164.exeをダウンロード・実行・再起動した。するとデバイスマネージャーから消えて無線LANは全く反応しなくなった。他試したこと。「システムの復元」を実行しても前の状態に戻らなかった。 Wireless_16.11.0_De164.exeも試してみた。 PanasonicのサポートページにあるWindows8対応しているS10のドライバもインストールしてみても改善せず。パナソニックのサポート情報はこちら。CF-S10A、S10B、S10C、S10Dシリーズ Windows 8評価情報 | よくある質問(FAQ)Windows 8 サポート情報 | パナソニック パソコンサポート大人しくUSB無線LAN子機を買うか、Windows7のまま使う方がよさそう。Windows8は堪能したし、どっかのタイミングでWindows7に戻すと思う。< 2014/06/05 Modified >
リカバリーディスクを使って工場出荷時(Windows7)に戻したけど変わらず。そもそもデバイスマネージャに表示されないまま。修理に出す?< 2014/06/20 Modified >
いつの間にかデバイスマネージャに表示されるようになったけどWifiは使えないまま。無線LAN子機を買った。11ac Wi-Fi 子機 無線LAN 高速通信433Mbps(理論値)対応 - WDC-433SU2Mシリーズ< Related Posts >Let's note CF-S9にWindows8をInsta…

CentOS上でJSHint + Gruntを使ってJavaScriptの文法チェック

イメージ
前の記事はMac向け。今回はCentOS向け。実行するコマンドが少し違う。環境: CentOS 6.5 x64, node.js v0.10.28node.jsのインストールは省略。こちらの記事を参考に。nodejsプロジェクトに移動して、JSHintとGruntをインストール。
# su - node
$ cd /home/httpd/project/api/
$ npm install jshint -g
$ npm install grunt-cli -gGrunt本体とプラグインをインストール。
$ npm install grunt --save-dev
$ npm install grunt-contrib-jshint --save-dev
$ npm install grunt-contrib-watch --save-dev「save-dev」オプションは開発用モジュールをインストールするときにpackage.jsonの「devDependencies」に自動で追加してくれる。devDependenciesのモジュールをアップデートするときは下記コマンド。
$ npm update -dgrunt設定ファイルを作成。
$ vi Gruntfile.jsGistで公開しているのを参考に。Grunt Configuration with JSHint for Titanium Project | GitHub Gistmodule.exports = function(grunt){
    var files = [];    // Load plugins
    grunt.loadNpmTasks("grunt-contrib-jshint");
    grunt.loadNpmTasks("grunt-contrib-watch");    // Watch Files
    files.push('app.js');
    files.push('config.js');
    files.push('lib/**/*.js');
    files.push('routes/**/*.js');    grunt.initConfig({
        op…

CentOS6 + nginx + PHP5.4 + MariaDB10 + WordPress + node.jsの環境を構築する手順をまとめ

イメージ
CentOS-6.5-x86_64-minimalの環境にWordPressとREST APIの開発環境を構築するまでの手順を覚書。環境: CentOS 6.5 x64目次Firewallを設定 nginxをYUM経由でインストール Remiリポジトリを追加してPHP5.4をインストール MySQLの代わりにMariaDBをインストール phpMyAdminをインストール WordPressをインストール REST API用にnode.jsをインストール REST API用にnginx設定ファイルを編集1.Firewallを設定ファイヤーウォール設定ツールをインストールして実行。# yum install system-config-firewall-tui
# system-config-firewall-tui開発用サーバーはsambaで共有するのでSELinuxを切っておく。# vi /etc/sysconfig/selinuxSELINUX=disabled# rebootSELinuxの現在の動作モードを確認
# getenforce2.nginxをYUM経由でインストール前の記事を参考にCentOSのバージョンだけ変更。詳しくは公式ドキュメントを参考に。# vi /etc/yum.repos.d/nginx.repo[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1# yum update
# yum install nginx自動起動設定# /etc/rc.d/init.d/nginx start
# chkconfig nginx on3.Remiリポジトリを追加してPHP5.4をインストール標準リポジトリはPHP5.3なのでRemiリポジトリを追加。これも前の記事を参考にCentOSのバージョンだけ変更。wgetがなかったのでインストールしてから(curlでもいい)。# yum install wget
# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
# wget http://ftp.jaist.ac.jp/pub/Lin…

Mac上でJSHint + Gruntを使ってJavaScriptの文法チェック

イメージ
Titaniumの開発で、今まではTitanium Studioの画面にエラーがないか確認していた。しかしTitanium StudioはJSLintを使っているのでチェックが厳しい。for文内のcontinueを許可したかったり、Warningを消す設定が面倒くさくなったので、Titanium Studioを使わずJSHint + Grountを使ってリアルタイムにファイル監視しながら開発してみることにした。環境: Mac OS X 10.9.3, Titanium SDK 3.2.3.GA基本はCentOS上にインストールしたときと一緒。JSHintをインストール。
$ sudo npm install jshint -gGruntのコマンドラインツールをインストール。
$ sudo npm install grunt-cli -gプロジェクトディレクトリに移動してGrunt本体とプラグインをインストール。
$ cd ~/Documents/Titanium_Studio_Workspace/project/
$ sudo npm install grunt
$ sudo npm install grunt-contrib-jshint
$ sudo npm install grunt-contrib-watchgrunt-contrib-jshintを試してみる。
$ vi Gruntfile.jsmodule.exports = function(grunt){
    // Load plugins
    grunt.loadNpmTasks("grunt-contrib-jshint");    grunt.initConfig({
        jshint : {
            all : ['Resources/**/*.js']
        }
    });
};実行
$ grunt jshint:allオプションなど詳しくはgrunt-contrib-jshintのGitHubページで確認。次はファイルを保存したタイミングで実行する処理を追記。
$ vi Gruntfile.jsmodule.exports = function(grunt){
    // Load plugins
    grunt.loadNpmTa…

MacPortsからHomebrewに切り替えてSubversion 1.8をインストール

イメージ
相変わらずMacの共有フォルダのファイルをWindowsのTortoiseSVNからコミット出来ない。せめてログだけは確認したいとMacのsvnを1.8にアップグレードしようとしたときの覚書。環境: Mac OS X 10.9.2, TortoiseSVN 1.8.6目次MacPortsを削除 Homebrewをインストール Subversion 1.8をインストール<2014/05/16 Modified>
Mac OS X 10.9.3にアップデートしてもみてもTortoseSVNからコミット出来なかった。1.MacPortsを削除以前Node.jsのためにMacPortsを利用したけど今は使ってない。MacPortsだと依存関係で苦労する印象なので、最近人気なHomebrewに移行することにした。アンインストールは公式ドキュメントを参考に。2.5. Uninstall | Chapter 2. Installing MacPortsインストール済みのパッケージを削除する。$ sudo port -fp uninstall installedError: No ports matched the given expression何もインストールしてないのでエラーになったんだと思う。次は関連するファイルを全削除。$ sudo rm -rf \
    /opt/local \
    /Applications/DarwinPorts \
    /Applications/MacPorts \
    /Library/LaunchDaemons/org.macports.* \
    /Library/Receipts/DarwinPorts*.pkg \
    /Library/Receipts/MacPorts*.pkg \
    /Library/StartupItems/DarwinPortsStartup \
    /Library/Tcl/darwinports1.0 \
    /Library/Tcl/macports1.0 \
    ~/.macports2.Homebrewをインストール公式ドキュメントを参考に。Homebrew — The missing package manager for OS X$ ruby -e "…

[Titanium] アイコン画像はフォントに変換した方がよさそう

イメージ
下記記事を読んで、今作ろうとしているアプリはアイコンをフォントに変換して埋め込む方法を試してみることにした。Create an icon font with IcoMoon | TiDevTitaniumで開発する場合は色、大きさ、iOS用、Android用で複数の画像を用意しないといけないので、これが1つになるのは開発も楽。こちらの記事でも画像は全てbitmapで描画されるからメモリを圧迫すると書いてある。Memory Management | TiDevただ、どれだけのコストパフォーマンスがあるのかは未知数。あとで感想を追記予定。記事の最後にあるアイコンへのリンクはとっても参考になった。ちなみに私がよく使うライセンスフリーのアイコンを配布しているサイトはこちら。ライセンス上再配布できないので注意。iconmonstr - Free simple icons for your next project< 2014/06/02 Modified >
実際にやってみたときの記事を書いた。SE奮闘記: [Titanium] fontcustomをインストールしてアイコンフォントを作成< Related Posts >[Titanium] メモリリークを起こさないために気をつけることTitaniumを使ったアプリと苦労した事とかのまとめ2013年

[Titanium] メモリリークを起こさないために気をつけること

イメージ
Titaniumでメモリリークを起こさないための良記事があった。Memory Management | TiDev詳しくは読んでもらうとして、最後のおすすめガイドラインだけ翻訳。それぞれ自分の経験からコメントも書いてみた。グローバル変数は使わない。グローバル変数はガベージコレクトされない。使うつもりなら考え直せ。
→ CommonJSモジュールのスタティックメンバーとして宣言する方法を使う。書き方はこちら変数を使うときは「var」宣言して使う。
→ 「use strict」を宣言するか。JSLintを使って常に監視する方法がお勧め。 使い終わったオブジェクトは「null」をセットして開放する。
→ なるべくvar宣言したviewをaddしない書き方を心がける。 ビューの作成はインスタンス化して後で開放できるCommonJSモジュールでカプセル化する。もしくはAlloyを使う。
→ CommonJSモジュールで作っておけば開放するメソッド1つで管理できるから楽。・・・ということだと思う。 ビューやモデルをバインドしてるときは、使い終わったときに関連する繋がりを破壊する。
→ Alloyを使っているなら$.destoroy()を使う(Alloyを使った方がいいのかな。。。) 後で開放するオブジェクトでない限りクロージャを使わない。
→ 記事内でfor文の中にクロージャを使ってaddEventListenerをバインドしているが、このような場合はどうすればいいのか?
→ starのカスタムプロパティにiをセットしてe.sourceでアクセスすればメモリリークは起きない? グローバルなイベントリスナーは必ず1つだけバインドするように気をつける。他の言語で用いているテクニックをJavaScriptに持ち込まない。変数スコープ、var宣言の巻き上げ、prototype継承、クロージャを理解する。グローバルな変数を利用するためにTitaniumプロキシ(Ti.*)を利用しない。
→ CommonJSモジュール内でスタティック宣言すればいい。Titanium公式ドキュメントも参考に。Managing Memory and Finding Leaks | Titanium 3.X - Appcelerator Docs< Related Posts >Titaniumを…

Androidアプリで表示できないJPEG画像がある

イメージ
teniteoのユーザーから問合せがあって調査したときの覚書。<現象>teniteoアプリでスナップ写真が表示できない。 特定の写真のみ いくら待っても画面に写真が表示されない。環境:Android(バージョン不明、Titanium SDK 3.1.2.GAで作成)この写真はPicasaアルバムからAPI経由で配信している。実際手持ちのAndroid端末でも同様の現象が起きるのを確認。表示できない画像のURLをブラウザアプリで開いても同様に表示できない。imageViewで表示する際には下記ログを吐いていた。[DEBUG] skia: --- decoder->decode returned false
[DEBUG] skia: --- SkImageDecoder::Factory returned null原因はCMYKのICCプロファイルが埋め込んであるため、Android標準の画像処理でエラーになるらしい。Issue 57502 - android - BitmapDecoder doesn't decode JPG/JPEG images with custom ICC profile (CMYK) - Android Open Source Project - Issue Tracker - Google Project Hosting確かに元画像を見るとPhotoshopで加工した形式があって、ファイル情報を見ると「Japan Color 2001 Coated」(日本の標準印刷用CMYKプロファイル)の記述があった。 運営しているのが紙媒体を作ってるデザイナーの人が多いのでこれはしょうがないか。。。 <考えた対応策> 正しい形式でアップロードし直す そんな画像でもエラーにならないTitaniumモジュールを作る Picasa API経由で元画像より小さい画像を指定すると、CMYK情報が削除されたJPGを配信してくれるので、これを利用する
→ 大きいサイズの画像をアップロードする運用にしておけばよかったと後悔中Titaniumモジュールを作る場合は下記を参考にすると出来る気がする。yagitoshiro/ImageAsResized - GitHubDeep Shah's Blog: Fixing the "…