投稿

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' failed uuid用のライブラリがないらしい。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.ini extension=uuid.so # /etc/rc.d/init.d/php-fpm restart ph

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シリーズ

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

イメージ
前の記事 はMac向け。今回はCentOS向け。実行するコマンドが少し違う。 環境: CentOS 6.5 x64, node.js v0.10.28 node.jsのインストールは省略。 こちらの記事 を参考に。 nodejsプロジェクトに移動して、JSHintとGruntをインストール。 # su - node $ cd /home/httpd/project/api/ $ npm install jshint -g $ npm install grunt-cli -g Grunt本体とプラグインをインストール。 $ 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 -d   grunt設定ファイルを作成。 $ vi Gruntfile.js Gistで公開しているのを参考に。 Grunt Configuration with JSHint for Titanium Project | GitHub Gist module.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

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/selinux SELINUX=disabled # reboot SELinuxの現在の動作モードを確認 # getenforce   2.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 on   3.Remiリポジトリを追加してPHP5.4をインストール 標準リポジトリはPHP5.3なのでRemiリポジトリを追加。 これも 前の記事 を参考にCentOSのバージョンだけ変更。wgetがなかったのでインストールしてから(curlでもいい)。 # yum install wget # wget http://rpms.familleco

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 -g Gruntのコマンドラインツールをインストール。 $ 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-watch grunt-contrib-jshintを試してみる。 $ vi Gruntfile.js module.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.js module.exports = func

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 installed Error: 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 \     ~/.macports   2.Homebrewをインストール 公式ドキュメントを参考に。 Hom

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

イメージ
下記記事を読んで、今作ろうとしているアプリはアイコンをフォントに変換して埋め込む方法を試してみることにした。 Create an icon font with IcoMoon | TiDev Titaniumで開発する場合は色、大きさ、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

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