2013年12月26日木曜日

MacをMavericksにしたらTortoiseSVNのコミットが失敗する

windows8_mac_tortoisesvnTitaniumもMavericksをサポートするようになったので、開発サーバーになっているMac miniをMavericksにアップグレードしてみたときの覚書。

環境: OS X Mavericks 10.9.1, Windows 8.1, TortoiseSVN 10.8.4

WindowsからMacの共有フォルダにあるソースをTortoiseSVNでコミットしようとすると下記エラー

Error: Commit failed (details follow): 
Error: Can't move 
Error:  '\\hoge\hogehoge\.svn\tmp\svn-CF8BDE60' 
Error:  to 
Error:  '\\hoge\hogehoge\.svn\pristine\3a\3abd0eabfa1e58f83cfcce2403a3dc22dcb7ad79.svn-base': 
Error:  パラメーターが間違っています。 

 

Macのログには下記エラー

$ less /var/log/system.log

Dec 25 11:21:11 local smbd[184]: File system does not support 0X0, size attrs
Dec 25 11:21:11 local smbd[184]: File system does not support 0X40000, file attrs
Dec 25 11:21:11 local smbd[184]: File system does not support 0X0 time attrs

 

フォーラムにも上がっていてまだ直ってないらしい。

SMB1のみに切り替えると出来るという情報があるが私の環境では成功しなかった。

しょうがないので、しばらくはSSH経由でsvn commitすることにした(一度別フォルダに退避して、svn checkoutしてから上書きする)。

MacのSubversionを1.8に挙げないとTortoiseSVNでログを確認できないのが不便。

Appleさん、早く直してください。

 

< Related Posts >

2013年12月18日水曜日

Node.js + Expressの環境でファイルをアップロードする処理

nodejs_upload-fileTitaniumで開発しているアプリからファイルをアップロードして保存する処理を開発していたときの覚書。

環境:node.js v0.10.22, express v3.4.6, busboy v0.0.12

よく見かけるのは

app.use(express.bodyParser());

としてreq.filesを参照する方法。しかし、これを記述すると下記エラーをnodejsが出力する。

connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0

リンク先を見ると、ディスクにファイルを保存するのはセキュリティ上の問題から非推奨となり、他のパーサーを使えとある。

multipartybusboyを試した結果、難易度は上がるけどbusboyを使ってストリーム形式で処理することにした。

理由は

busboyはアップロードするファイルサイズを制限できる

から。

ちなみにmultipartyはTitaniumからアップロードしたcontent-typeに対応してない(multiparty3.1.0で確認)。こちらのissue#29にあるように正規表現を直せば対応可能。

サンプルコードはGitHubのReadmetestを見れば何となく分かると思う。

 

実際に使ってみた注意点をいくつか(※v0.0.12)

  • アップロードしたファイル名が日本語だとfilenameが化ける。issue#20に上がってる
    → filenameを使わない実装を推奨
    → ちなみにmultipartyは大丈夫
    → v0.0.13で修正されたらしい。試してない。 
  • busboy.on('file')の中でfileに対して操作をしないとbusboy.on('end')が発生しない。このissue#16で説明してる。
  • ファイルサイズの制限に引っかかったら「limit」イベントが発生するので、書き込み中のファイルは自前で削除する必要がある。

 

< Related Posts >

2013年12月17日火曜日

node.jsでImageMagick + gmをインストールして画像処理

nodejs_imagemagickNode.jsで画像処理(Resize, Crop)をする方法を調べたときの覚書。

環境: CentOS 5.10, node.js v0.10.21

GraphicsMagickもしくはImageMagickをnode.jsから利用できるモジュール「gm」が良さそうなのでインストールしてみた。

 

< 2014/08/21 Modified >
CentOS6.5の環境ではYUM経由でImageMagick 6.5.4-7がインストールされて問題なかったので、こっちを推奨。

 

まずはImageMagickでJPEGとPNGをサポートするようにライブラリをインストール
# yum install libjpeg libjpeg-devel libpng libpng-devel

何となくJPEG 2000にも対応しておく
# yum install jasper-devel

ImageMagickをソースからコンパイル(yum経由は古いから)
# cd /opt/software/
# wget http://www.imagemagick.org/download/ImageMagick.tar.gz
# tar xzvf ImageMagick.tar.gz
# cd ImageMagick-6.8.6-4/
# ./configure
# make
# make install

バージョンの確認
# convert --version

対応しているフォーマット一覧
# convert -list format

 

今度はgmのインストール
# cd /home/project/hoge/
# npm install gm

 

ImageMagickを使う場合は次のようになる。

var gm = require('gm').subClass({ imageMagick: true });
gm("img.png").resize(150, 150).write('/path', callback);

 

 

< Related Posts >

2013年12月13日金曜日

REST APIのテストする開発ツール Google Chrome「Postman」

restapi_chrome_firefoxiPhone, Androidアプリ向けにRest APIなWebサービスを開発している時にアプリを起動せず簡単にテストするツールを探したときの覚書。

参考

 


Google Chrome拡張機能「Postman - REST Client

多機能でサクサク動くので使いやすい。

履歴機能など必要なものは揃っていて、ソースコードも公開されているので素敵すぎる。

image

 


Firefoxアドオン「Poster

Postman - REST Client」があればいらない。

インストール後は右下の「P」かツールから起動する。

image

「Headers」は任意の値を設定するときに使う。

「Parameters」を登録しておけば「Body from Parameters」で値を生成してくれるので便利。

 

 

< Related Posts >

2013年12月12日木曜日

Titaniumを使ったアプリと苦労した事とかのまとめ2013年

teniteo_titaniumTitanium™ Advent Calendar 2013の12日目です。

今年の仕事はTitanium Mobileを使ったアプリ開発の1年でした。今回は開発したアプリの紹介と経験をまとめてみました。

開発したアプリがこれ。

 

このアプリの特徴

 

苦労したこと

 

運用してみて分かったこと

  • サーバー側の応答が遅いと「もっさり感」が3倍増する
  • アプリを使って投稿までしてくれる人のほとんどはiPhoneユーザー

 

まとめとバージョン2に向けて

今までのノウハウを結集してバージョン2を開発中。サーバー側はnode.jsを利用して、アプリはYouTubeアプリみたいな感じにする予定。

Titanium + WordPress + node.jsでマルチプラットフォームなサービスを少人数かつ短期間で構築できる手応えを感じてるので、WordPressとJavaScriptに自信があるWebエンジニアの次のステップとしてTitaniumとnode.jsをオススメしたい。

 

< Related Posts >

2013年12月2日月曜日

Google Play BooksへPDF形式を登録・出版(電子書籍化)

teniteo-mini愛知県中心に発行しているフリーペーパー「teniteo」の東京版「teniteo mini」を無事出版できた。

iPhone, Android向けのteniteoアプリも利用者が増えてきたので、以前から要望のある「フリーペーパー自体をスマフォで見れるようにしたい」というのをGoogle Play Booksでどの程度実現できるか試してみた。

詳しくは公式ヘルプで。

利用登録後、ブックスパートナーで設定できる配信先は2つ。

Google Play
→ 主にスマフォ向け
「Playストア」で検索でき、購入後Androidの「Playブックス」で読める。
Googleアカウントで紐付いていて、いろんなプラットフォームで読む方法が提供されている(Web, Android, iOS)
Google ブックス
→ 主にPC向け
Googleの書籍検索から検索・プレビューが出来るようになる。
プレビュー出来る範囲を指定可能。
Flash版のデジタルブックと比べて、本のような動きは出来ないけど問題なく読める。
Googleの検索に引っかかるようになるのは大きい。

40ページ(46MB)のPDFファイルをアップロードして処理完了するまで、約1時間かかった。

ページごとのPDFをアップロードすることも可能。その際はファイル名をガイドラインに従う必要がある。

 

結局2時間経ってもGoogle Play、Google ブックスに表示されなかったので、次の日(約22時間後)確認したら表示されてた。

 

でも「要対応」に次のエラーが表示されていて、Google Playから購入できない(価格は「無料」に設定)。

この書籍は次の理由で掲載されていません:

  • 価格情報がないか、適切ではありません

 

「Google Playの設定」から価格のところで国コードを入力する箇所に「WORLD」としていたのが原因みたい。「JP」に変更してしばらくしたら無料でダウンロードできるようになっていた。

最初原因が分からずペイメントセンターも登録したのでこちらも必要かもしれない。

 

< 2014/07/04 Modified >
日本語名のPDFをアップロードすると24時間以上経っても「処理中」のままだったので注意。英字のみにアップロードし直すと数時間で公開された。

 

< Related Posts >

Related Posts Plugin for WordPress, Blogger...

Blog Archives