2015年10月17日土曜日

そんな・・・どっちかなんて選べない!:名刺管理、EightとCamCard

おはようございまーす。
なんか早く目が覚めちゃった。

さて唐突ですがみなさん、名刺ってどう管理してますか?
ワタシは名刺を頂いたらとりあえず写真を撮って、Evernoteに突っ込んでました。
まあそれでいいや、と思ってたんですが。

昨日シェアスペース「Dexi」さんで仕事をしてましたら、なんか面白そうなものが置いてあるじゃないですか。


ほう、名刺管理アプリ「Eight」のスキャナーですか。しかも無料で使える、と。
さっそく試してみました。
・・・うん、いいですね。名刺の画像スキャン自体はスキャナでさくさくと進む。
名刺のテキスト情報の入力はEight側で人力で行うみたいですね。OCRと違って時間はかかりますが、まあ正確です。
人力!・・・Dr.Walletもそうですが、最近こういうサービス、増えてないですかね。

名刺の登録が終わると、Eightに登録済みの人とは自動的に「つながり」ができたりして。
おー、便利!・・・しかも、「最近の仕事は?」みたいな、なんかタイムラインみたいな機能もあるし。
こりゃ、名刺を軸にしたSNSですねー。データ化されるのが楽しみだ。

で、ほくほくと名刺がテキストデータになるのを自宅で待っていましたら。
友人が「私はCamCardってのを使ってるよ」と。

・・・。そんなこと言われたら、試すしかないじゃないですか!
こちらも、まずはアプリをダウンロードして、会員登録。
名刺画像は・・・スマホに保存してあった画像を使いました。
こちらのサービスは人力じゃなくてOCR(光学文字認識)による情報入力。
文字を認識した後に手直しが必要ですが、・・・まあ、あまり必要ないですね。
手直しが不要な分、Eightの方が少し楽です。

ただ、CamCardにあって、Eightにはない重要な機能が・・・。
それは、連絡先との連携機能。

Eightで登録した名刺を他の用途で活用するには、有償サービスに登録して、CSV書き出しをするしかないみたいです。一応、Webサイトでも名刺は確認できるんですが、一件一件コピペってのも・・・ねえ。

CamCardは、ご親切にも、名刺をGmailの連絡先と同期する機能がありました。
しかも端末に保存されているアカウントから、同期先のアカウントを都度選べる!
もちろんデフォルトで同期するアカウントを設定しておくこともできる。
・・・こりゃ便利だ。便利すぎる。どうしよう。

・・・どうしよう。
EightとCamCard、どっちのサービス使っていこうかしら。

散々悩んだ挙句(10分くらい)、両方使っていくことに決めました。
どうせ、今までも頂いた名刺はスマホで写真に撮っていたわけですし、EightでもCamCardでもスマホの写真を入力ソースにすることはできますし。

・とりあえず名刺をもらったら、その場でスマホのカメラで撮影
・スキャナがあるとき:まとめて名刺をEightにつっこむ
・連絡先に追加したい人の場合は、CamCardに名刺の写真を登録する
・そうでもないひと、つながりを持ちたい人はEightにも写真を登録する

それぞれ良いところがあるので、悩むくらいなら両方使っちゃえば良いじゃない!
みんな仲良くね!

(さて、問題はいつまで続くかだ)


2015年10月15日木曜日

ハードな罠:iPhoneのボリュームボタンで写真を撮ると上下逆になるかも

こーんばーんはー。
昨日はObjective-C、一昨日はJava、そして今日はPHPいじってて、もうなんでも来い!な気分です。はー。

ちょっと今日は個人的に「うへえ」と思ったことがあったので書いてみます。

iOS用のカメラアプリをApp Storeで公開しているのですが。
カメラで撮影して、ちょっとしたメモを合成してから写真を保存する、というアプリなんですね。
これに、カメラからの入力画像だけじゃなく、カメラロールから選択した画像にも、メモを合成できるようにしたんですよ。

そしたら、
「カメラロールから、ボリュームボタンで撮影した画像を選択してメモを付けようとすると、画像が上下逆さまになる」
とご指摘いただきました。
・・・へ?
そんな状況、見たことないな・・・。
でも、一応検索してみましたら、あったあった。

iPhoneで撮った写真が逆さまになる理由

こんな感じ?・・・ちょーっと分かりにくいかなー?


写真を撮るときに、ボリュームボタンを上にしてしまうと、カメラの向きが逆になってしまう、ということらしいです。
正しい向きは「ボリュームボタンが下、ホームボタンが右」なんだそうで。

・・・。
いやね、私自身は普段ボリュームボタンで写真撮らないんで、困らないんですが・・・。
ヒトコト、言わせてもらうわ。
「これは酷い仕様」

だってさ、普通のコンデジとかデジカメのシャッターボタンって、右上じゃん?
ボリュームボタンで写真が撮れると分かったら、そりゃ、ボタンが右上になるように構えるよ・・・。
端末の向きが「ホームボタン左」になったら撮影した画像の上下を補正するとか、そういう風に標準カメラアプリ作れなかったのかね・・・アップルちゃん・・・。

さーて、対応どうしようかなー・・・。

2015年10月9日金曜日

起動せぬなら 殺してしまおう setupAVCapture:カメラアプリのレイアウトをシミュレータで確認する

どうも。へへへ。おはようございます。
只今絶賛不具合修正中ですが、個人的にちょっと衝撃的だったので、備忘録として投稿ー。

iOSのカメラアプリを開発しているのですが、ワタクシ、実機はiPhone 5sしかもってません。えへへ。だってお金ないもん。
でもXcodeのSimulatorでは、カメラが扱えない。
カメラアプリを起動すると、最初のスプラッシュスクリーンが表示されて、そこで止まってしまうんですね。カメラからの入力画像が表示されない。
だからカメラアプリの開発には、どうしても実機が必要になるのですが・・・。

ここで問題が。
iPadでシャッターボタンなどが表示されないよ、とアップル様からご指摘を受けました。
でも自分は実機持ってない。
・・・どうしよう。試せない。試せないと修正できない。うわー。

で、10分くらい悩んだ結果、はたと思いついた。
「カメラ機能を一時的に使えなくすれば、Simulatorでも動くんじゃね?」

やってみました。
いつもはこうしてるのを、
[self setupAVCapture];
こうしてみた。iPhoneの時だけsetupAVCapture動かしたるw
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {        [self setupAVCapture];    }

・・・動いた。SimulatorのiPadで。ほんとかよ。
まあ、もちろんカメラからの撮影機能とかは試せませんし、リリースする前に元に戻さなきゃならんのですが。
少なくとも、これでレイアウト崩れは再現と修正ができそうです。

やれやれ。

(最初からStoryboard使ってレイアウト作っとけばよかったな。次はそうしよう

2015年10月5日月曜日

iOS9のいじわるー。:iOS9でcanOpenURLを使ってみた

こんばんわ。お久しぶりです。
なんか寝つけないので、ブログでも更新してみんとす。

ついこの間リリースされた「iOS9」で、カスタムURLスキームを使って別のアプリを呼び出そうとしてたんですよ。
でも、iOS9には痛い目に遭っているので(詳しくはまたいずれ)、今度は事前によーく調べてからにしようかなーと、検索してみましたら、こちらの記事がヒット。

【追記】iOS9でcanOpenURLを有効にする方法

えっなになに・・・「iOS9でcanOpenURLが使えなくなった」・・・。
ダメじゃん。きー!とか思ってたら、対処方法も書いてあった。ふんふん。
「Info.plist」に「LSApplicationQueriesSchemes」のキーと、アプリで許可するカスタムURLスキーマを登録すればいいらしい。

ふんふん。
で、このinfo.plist、XcodeでProperty Listとして値を編集することもできるようですが(というかこっちがデフォルト)、最近Xcodeがすっごく重くなってまして。

一度Property List表示で編集しようとしたら、画面が乱れてしまいました・・・
(;_;)
仕方ないので、Open AsのSource Listでソースとして開いて編集。
これなら問題ないやね。
というか、ワタシはもともとSGMLやらXMLのヒトなので、こっちの方がやりやすかったりする。

で、端末にカスタムURLスキーマを設定した自社アプリがあればそっちを起動するし、なければApp Storeのダウンロードページを表示するようにしてみた。

んー。上手くいかない(笑)
・・・最初は「canOpenURL」で分岐させてたんだけど、上手くいかないー。
ちょっと悩んだけど、もっと単純に考えたらあっさりできました。
要はデバイスのアプリをまず開いてみて、失敗したらストアに飛ばしゃいいのよ。うん。

NSURL *url_store = [NSURL URLWithString:@"https://アプリストアのURL"];
NSURL *url_device = [NSURL URLWithString:@"CustomURLSchema://"];
if ([[UIApplication sharedApplication] openURL:url_device]) {
        NSLog(@"OK");
} else {
        [[UIApplication sharedApplication] openURL:url_store];

}

この、何でもめんどくさく考える癖、直さなきゃな。
ということで、おやすみなさーい。










2015年9月17日木曜日

滅びゆくものこそ美しけれ。:iOSのカメラロールに任意のアルバムを作成しようとしてハマった話

へいへいへい。みなさんこんばんは。おひさしぶりです。

今日はiOSのカメラアプリ開発で、ハマったことをメモ代わりにちょっとだけ。

ALAssetsLibraryを使って、デバイスのカメラロールにアプリの名前がついたアルバムを作成しようとしてたのです。

こちらの記事「iPhoneアプリ開発 芳名帳アプリ作成(6) -写真に保存-」を参考にさせて頂いたのですが・・・
うーん、説明は分かりやすいんだけど、まず、どうしてもアルバムが作れない。
なーんでーだろー?と思ってたら、

アルバム名にスペースが入ってた
・・・ソフト名「XXX Pro」をそのままアルバムの名前にしようと思ってたんですけど、・・・スペースの代わりにアンダースコア「_」にしたら、あっさり作成に成功。

ハマりポイントその1:アルバム名にスペースはいってた!

で、アルバムを作成できたのはいいんですが、今度はそこに写真を保存する方法がわからない。
それまでは、ALAssetsLibraryの「writeImageToSavedPhotosAlbum」でカメラロールに写真を保存してたわけですが・・・。
そもそもアセットとは何か、というのをロクに理解もせずに使っていたので、さて、アルバム指定するにはどうしたらよかんべ?となると、ちんぷんかんぷん。

アルバム名はわかってるんだから、「writeImageToSavedPhotosAlbum」にアルバム名を指定するオプションとかあるんじゃないのー?と勝手に考えてました。
ないない。そんなの。なかった。

結局は、
1. ALAssetsLibraryの「enumerateGroupsWithTypes:ALAssetsGroupAlbum」を使ってアルバムの一覧を取得
2. 目的のアルバムが見つかったところで、おもむろに「ALAssetsGroup」の「addAsset」を使って、ALAssetsGroup」(アルバム)にAsset(写真)を追加
こんな流れで、ようやく指定したアルバムに写真を保存できました。

ハマりポイントその2:Assetってなんなのか良くわかってなかった

ま、ぐだぐだだったけど、なんとかできて良かった。
アルバムに写真を保存するところでは、「Quiita」さんのこの記事ios7,8でアルバム名を指定して画像を保存するが参考になったわけですが・・・
Swiftで書かれてて・・・ちょっと・・・難儀しましたねえ・・・
まあ、やってることは同じなんで、大変たすかりましたが・・・。
なんか、英語の資料を見ながらフランス語のレポートを作ってるような気分になりましたよ・・・。

・・・。
でも、今日配布がはじまったiOS9では、Asset Libraryはdeprecated(非推奨)となるそうな・・・。


The Assets Library framework is deprecated as of iOS 9.0. Instead, use the Photos framework instead, which in iOS 8.0 and later provides more features and better performance for working with a user’s photo library.
・・・せっかく覚えたのに・・・。
ちょっとね、なんだかなあ、ってオチですみません。
うん、寝よう。


2015年8月2日日曜日

サンプルはあくまでサンプルである:Mapbox iOS SDKを使ってOpenStreetMapを表示する

やー、まいにちマイニチ蒸し暑くていやになっちゃいますねー、こんばんは。
というわけで今夜もファミレスに逃げてきましたよ。

今日はMapboxを試してました。
自分を自分好みにカスタマイズして公開できるという、素敵なウェブサービスです。

OpenSreetMapがベースだし、iOSやAndroidのSDKもあるし、ずっと試してみたかったんですよねー。
モバイルアプリを作るからには、地図は使いたい!
でもAPI制限のことを考えるとGoogle Mapはどうも気軽に使いにくいというかー。

途中、ちょこちょことつまづきましたが・・・Mapboxのサンプルを見ながら、なんとかiPhoneアプリまで作成。
といっても地図をiPhoneに表示させるだけですけど。

一つ、はまった点があったので、備忘録としてメモメモ。

サンプル通りにコード書いて、実機で確認しようとビルドすると「RMFoundation.h」が無いと怒られました。
もちろん、ファイルがあるのは確認済み。あっれー?おっかしーいーなー。

色々検索したところ・・・一つ前のバージョンのSDKにすればいいみたい。
ここを参考に、バージョン1.6.0に戻しました。
'RMFoundation.h' file not found in 1.6.1 #631

以下のようにpodfileに書いて、pod installを実行。
無事バージョン1.6.0に戻り、ビルドも通りましたとさ。
pod 'Mapbox-iOS-SDK', '1.6.0'
で、とりあえず作ったのがコレ。地図のスタイルはすっごくシンプルにしてみた。

地図のデザインは、Mapbox側で色々といじれるみたいなので、これから楽しみ!




2015年7月29日水曜日

ちょー便利なライフログアプリ:Google Mapアプリにタイムライン表示機能が追加

こんばんはー。おひさしぶりです。
毎日暑いですねー。

今日はAndroidアプリのお話。

最近、Android版のGoogle Mapアプリが更新されましたね。
知らない場所へお出かけするときには、必ずお世話になるこのGoogle Map。
このGoogle Mapに、前回のアップデートでタイムライン表示機能が追加されました。

まあこんな感じ。すげー。


自分が訪れた場所と道のりが、地図と時系列で確認できちゃいます。
Androidの設定でロケーション履歴を有効にしていることが条件だと思うのですが、びっくりしたのは、その場所で撮った写真も、タイムラインに表示されるってこと。

自分は行動記録をメモする代わりに、移動した先でちょいちょい写真を撮るようにしています。
仕事で訪れた場所や、ポストに投函した手紙、銀行での振り込み、エトセトラエトセトラ。
それらの写真は、あとで「あの手紙、いつ出したっけな」とか、自分の行動を振り返るのに使っています。
位置情報もつけているので、写真を撮った場所も地図で表示できますしね。

だから、別に驚くことでもないかもしれないんですが・・・。

なんかこう、今回のGoogle Mapのタイムラインのように、こうやってタイムラインという形でまとめてくれちゃうと、・・・なんかすっごく便利ですね。

ちょっと前から「Moves」というアプリを使っていて、行動記録代わりにしていたのですが。歩数とか計算してくれるし、便利ではあったけど、撮った写真を見せてくれるところまではいかない。

もう、ちょっとしたライフログアプリじゃないですか、これ。

位置情報付きの写真だとか、ロケーション履歴だとか、もうずっと以前からあった技術ではあるんですが、それらを上手く組み合わせて便利なものを作ってしまう。

こういうのが、本当の創造性だと思うのですよね。

一応、IT技術者のはしくれではあることですし、「あ、いいなコレ」って思ってもらえるアプリを作れるように、また明日から頑張りたいと思います。

でもせめてクーラーの効いた場所で仕事したい。扇風機だけだと脳みそ溶ける。










2015年7月10日金曜日

日本語でおk!?:iOSでEXIFのUserCommentに日本語を設定しようとすると、途中で切れる

こんにちは。ぷんぷん。怒っています。

今日は朝からXcodeくんと戯れていました。
カメラアプリです。
撮影した写真に、メタ情報を埋め込もうとしていたのです。ええ、EXIFのUserCommentですね。

AndroidではCommons Imagingを使って、さくっと行きましたので、まあiOSでも問題ないだろうと。
こんな感じで。
UserComment = @"そんなこといったって、だめだもんはだめだで、しゃーがないべさ。ほだら。だば、あきらめてしごとしてくんろ。ほりほり。わーったか?ほーり。";
[EXIFDictionary setObject:UserComment forKey:(__bridge NSString *) kCGImagePropertyExifUserComment];

で、ビルドして、実機でテスト。
アプリで撮った写真をMacに転送し、コマンドラインからexiftoolを実行して、UserCommentを確認しましたら・・・。
User Comment: そんなこといったって、だめだもんはだめだで、しゃーがないべさ。ほだ
途中できれとるがな
なんでやねん。
EXIFのUserCommentに文字数制限なんかあったか?・・・まああるかもしらへんけど、そんな長い文字列とは思えへんしー。
ネットで検索したら、日本語と英語が混じってる時は、途中で切れることもあるとか書いてあるけど、・・・今回、全部日本語やしー。
ううう。

ちなみに、全部英語だったら、長い文字列でもいいのかなー?
というわけで、以下の文章でテスト。

NSString *UserComment = @"Can I set Exif UserComment String in such a way? I cannot understand why apple doesn't pass Japanese Characters. Are they jerous about Japanese Food? Sushi? Tenpura!?";
・・・きれてなーい。きれてないよー?

もうね、これ、日本語があかん、というやつなのかなー・・・。
まあ引き続き調査はしますが、あまりに腹がたったので記事にしました。ぷんすか。

(オチなし)

2015年7月9日木曜日

たかが一行、されど一行:ClamAV + Amavis-new + Postfixでウイルス対策

はー。死ぬかと思った。こんばんわ。
今日はメールサーバーのお話です。ていうか懺悔。

実は先日、一年ほど前に立てたメールサーバーでちょっとやらかしちゃいまして。
bad_headerが理由で、メールが配信されずに削除されちゃって、ユーザーさんにご迷惑をおかけしてしまいました。
せっかくだから、もう一度サーバの設定を見直そうと思ったわけです。


例によってグーグルせんせーに教えを請いまして。
メールヘッダがぶっ壊れてるメールへの対処は「/etc/amavisd/amavisd.conf」の、$final_bad_header_destinyですればいいんだな、ふんふん、なるほど。
「$final_bad_header_destiny = D_PASS;」ってやっとけばヘッダが壊れてようが華麗にスルーか、なるほどなるほど、ああ現代人にはスルー力が足りないよな、とか、のん気に構えていました(まだこの時点では)。

$final_virus_destiny・・・へー・・・これ、ウイルスメールを華麗にスルーするかどうかって設定か・・・。
ほんとうはウイルスはがっちりサーバーで削除するのがいいんだけど・・・。
誤検出とかあったら、またこっぴどく怒られるしな・・・
いやいやでもでも、ウイルスメールをユーザーに華麗にスルーそのまま配信するってどうなの・・・?やっぱり削除しといて、隔離するべきじゃない?
どうしようかな・・・。

ま、結局「$final_virus_destiny = D_DISCARD;」にして、削除+隔離することにしました。
あとは隔離する先のディレクトリを設定。
$QUARANTINEDIR = "/var/virusmails";」、これでよし。
amavisdと念のためpostfixも再起動して。
まあ念のためにテスト用ウイルスメールで、隔離動作を確認しときましょうか。

テスト用ウイルスはここからダウンロードできるみたいですね。
でも、もっと簡単な方法が。
この記事「必ずスパムと判定されるメールと、ウィルスの作り方」を参考にさせていただきました。
以下の文字列を貼るだけ。わー便利!ちょーかんたん!
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
ほくほくほく。やっぱ簡単なのがいいよねー。
別のパソコンからメーラー起動してー。メール本文にさっきのウイルス文字列(w)コピペしてー。宛先を自分にしてー。送信ッ!ひゃっはー。
そそくさと「tail -f /var/log/maillog」を実行して、ログを監視。
でっきるっかな でっきるっかな♪

Jul  8 12:46:34 myserver amavis[25298]: (25298-01) Passed CLEAN {RelayedInbound}, [xxx.xx.xx.xx]:35856 [xxx.xx.xx.xx] <admin@mydomain.com> -> <user@mydomain.com>, Message-ID: ...

・・・。え?ぱす?クリーン?きれい?
ウイルスにひっかかったら「Blocked INFECTED (Eicar-Test-Signature)」ってでるんじゃないの?えええええ!?
あわてて、ウイルスメールの隔離先として設定した「/var/virusmails」を確認・・・予想通り、なーんもない。からっぽ。

さてここから苦悩の時間がはじまりました。
なになになに?えっウイルスとして認識されてないってこと?ウイルス定義が古いのか?いやいや毎日更新するスクリプト作ったし!もしかしてLocalSocketあたりが違う?あばばばそもそもこのテスト用ウイルスって信用できるのー?いやいやそれじゃテストの意味ないしそもそもこういうの信用しないと本当にウイルスメールなんか用意できるわけないしおあおうぇいとぉえwそいいえちwsっを!!!

・・・。
ま、結論からいうと、
/etc/amavisd/amavisd.conf」の「@bypass_virus_checks_maps = (1); 」がコメントアウトされてました・・・。
そっかー・・・そもそもウイルスチェック自体を華麗にスルーしてたのか俺は・・・。
「まさかそんな」って思い込みのせいで発見が遅れました・・・

で、この行をコメントして、amavisd再起動して・・・テストのウイルスメール送信したら・・・
さくっと・・・
Blocked INFECTED (Eicar-Test-Signature) {DiscardedInbound,Quarantined}
はい、ちゃーんと隔離もされてました・・・あわててGoogleで事例調べまくって振り回されたりせずに、設定ファイルを一つずつ冷静に吟味してたら、もっと早く復旧できたよなー・・・
反省。自戒の意味をこめて、今日はこのブログを書きました。

ま、そのあと「(!)ClamAV-clamd av-scanner FAILED: 」なんてエラーがでて、もうひと慌てしたんですが。
これは「/etc/clamd.conf」に、/var/配下をスキャンの除外フォルダとして指定してたためでした。
さすがにこれはすぐわかった。といっても一通りGoogleで検索して、わちゃわちゃしましたが(笑)
#ExcludePath ^/var/
ま、なんにせよ、日付が変わる前に致命的なところは解決してよかった。めでたしめでたし。






2015年6月19日金曜日

ぼくはやればできるこ:Windows 7で写真の「タグ」を表示「Common Imagings」

こんにちはー。ご無沙汰です。
うわー、一ヶ月以上もブログ書いてなかったー。

実は、最近ちょっとアプリ開発から離れておりまして。
今週くらいからやっとAndroid Studio触れるようになりました。

でも、久しぶりにコードを触ったものだから、自分で書いたはずのコードなのに、「あれ?なんでココでこんなことやってんの?」ってことばかり。
あかんなあ。これからちょこちょこ触るようにしよっと。

で、本題。
Google Playに公開してるカメラアプリも、ようやく総ダウンロード数が1,000を越えまして、記念にいっちょ機能を追加してみようかと。

カメラで撮影した写真の上に、ちょっとしたメモを追加するってアプリなんですが。
どうせなら、そのメタ情報を写真ファイル自体にも埋め込んじゃおう、ってね。

まあ埋め込むとしたらEXIFのUserCommentかなー、ってわけで、またまたこちらのライブラリの出番です。

「Commons Imaging」

このTiffOutputDirectoryに、メモの文字列をadd()してやればオッケー。
TiffOutputDirectory.add(ExifTagConstants.EXIF_TAG_USER_COMMENT, "メモ");

「add」のパラメータに、追加先のEXIFタグと、メモの文字列を渡してやればいいんですな。楽勝楽勝。
ドヤ顔でGoogle Playに公開して、その旨ボスに報告したところ、・・・当然といえば当然すぎるツッコミが。
「で、そのメモ、どうやって見るの?」

・・・。
「いや、exiftool使うなり、別のツールを開発したりしてですね・・・」と喉元まででかかったけど、なんとかこらえる。
そうだよなー。
Windowsの表示オプションで、「コメント」って項目にチェックを付ければ、一応UsetComment見られるんだけど。
そもそも、Windowsのフォルダ表示オプションを変更できるユーザーさんて、意外に少ない。
やっぱ、せっかくだから、パソコンでさくっと使いたいよなー。

というわけでGoogle先生に泣きついて、こんなページを見つけました。

「画像を検索しやすいようにタグ付けする」

へー。そーなんだー。ふーん。
こんなんなるらしい。デフォルトの状態から、「詳細表示」に切り替えるだけ。



・・・正直Windows 7、結構長いこと使ってるけど、こんなん全然知らなかった。
Evernoteのタグみたいな感じかな。
でも、「タグ」て。名前、「タグ」って。そのままじゃん。
いや使う分には簡単な名前の方がいいんだけどさ。
じゃ、どうすりゃいいのよ、って検索してみると・・・すっごく探しにくい。
余計な情報ばっかり検索結果に出てくるし。
どうやったら追加できるかとか、そもそもJPEGファイル自体に埋め込めるのかとか、Javaから操作できるのか、とか、さっぱり出てこない。

・・・うう、さくっと公開して、素敵な週末を迎えるはずだったのに。
いやいや諦めるのは、まだ早い。

まず、この「タグ」なるものがなんなのか、調べてみた。
Windows 7で画像に「タグ」を追加して、それをExiftoolにかけてみる。
追加したタグは「lunch」。
・・・こんなん出た。
XP Keywords: lunch
Subject: lunch
Last Keyword XMP: lunch
・・・あれ?情報・・・あるねー。

ちなみに-sオプションをつけるとこのように。
XPKeywords: lunch
Subject: lunch
LastKeywordXMP: lunch
情報のってる、しかもExiftoolで取れるってことは、・・・なんとかなるんじゃないの!?

ダメ元で、Common Imagingsのドキュメント、もう一度探してみた。

んで、発見。「Interface MicrosoftTagConstants」

この「EXIF_TAG_XPKEYWORDS 」ってのが怪しそうだにゃー。
で、先ほどのUserCommentと同じように、以下の定数をaddしてあげたら成功ー。
MicrosoftTagConstants.EXIF_TAG_XPKEYWORDS
Microsoftのタグ、ってことか・・・。
・・・。
やー、ドキュメントは読んでおくものですねー(いまさら)。
ま、やっとこれで素敵な週末になりました。ちゃんちゃん。

2015年5月15日金曜日

【仕切り直しの第一回】ど素人がWebサービスを立ち上げるまで何日かかる?:SQLインジェクション対策

こんばんわ。ご無沙汰です。

最近ちょーっとバタバタして(仕事で忙殺+頭に大怪我+五月病)、更新とまっておりました。

この「ど素人がWebサービスを立ち上げるまで何日かかる?」シリーズ、連載とか言いつつ、結局2回でストップ。
三日坊主も裸足で逃げ出すほどのいい加減っぷりでした。てへ。

で、もう本人もそんな存在を忘れていた頃、社命で一つWebサービスを立ち上げることになりまして、慌てて勉強を再開した次第でございます。

まあ、とは言っても、壁の中(社内LAN)での簡単なWebアプリなら作った経験はございまして。プロトタイプは比較的すいすいっと作れたんですが、・・・それを外に公開するとなると、話は全く別物。

  • セキュリティどうすんの?
  • なんとかインジェクションとかクロス・・・なんとかやら、攻撃手法はいっぱいあるみたいだけど、具体的にどうやって防げばいいん?
  • 公開したらログから怖くて目がはなせないよう!

・・・知識として知ってはいても、それらに実際に対処するとなるとガクブルです(へたれ)。

まあ不安がっててもしょうがないのよね。
どうやったらいいかわからなかったら、お勉強すればいいじゃん。
ということで、IPAの「安全なウェブサイトの作り方」からテキストをダウンロードして、お勉強しながら、へーはーふーんと、修正してみることにしました。

テキストはPDFでダウンロードできました。べんりー。


・・・まず手をかけたのが、SQLインジェクションへの対策。
ワタクシ本業は物書きでございますので(こう見えても)、知識として知っているつもりではありました。
でも所詮、知識は知識。
どうしてそんなに怖いのか、テキストの実例を見るまではピンときませんでした。

で、テキストに「脆弱な実装」として書かれているのが、例えばこんなの。

$query = "SELECT * FROM usr WHERE uid = '$uid' AND pass = '$passh';
・・・へ?これ脆弱なの?だってネットにあるサンプル、だいたいこんなんだよ・・・
でもテキスト様曰く:
「・・・$uidに悪意あるSQL文が形成される値が指定された場合、SQLインジェクション攻撃が成功してしまいます。」
・・・えーと・・・攻撃されるとどうなんの?
「たとえば、ユーザIDに「taro'--」という文字列が与えられた場合、(略)ハイフンの繰り返し「--」は、それ以降の内容をコメントとして無視させる意味をもちます。このため、この文字列が与えられた場合、データベースは「' AND pass = eefd5bc2...」を無視します。」
・・・。
!?
えっ、それって、太郎さんのパスワード知らなくても、「SELECT *」で太郎さんの情報全部とれちゃう・・・の・・・?
太郎さんのパスワードはおろか、太郎さんのあんな情報もこんな情報も筒抜けになってしまうってこと?
怖い!!・・・ハイフン二つで太郎さん丸裸!!怖すぎる!

これ読んでから、プレースホルダを使って後から変数を当てはめるよう、慌てて全部のSQL文を修正・・・。
それにしても量が多すぎる・・・しんどいよう・・・しかもただ修正しただけでは動かないところ多いし・・・。

ちゃんと最初からテキスト読んでおけばよかった・・・。

P.S.:
そういえば、今週、メインの携帯をASUS Zenfone 5に変えました。16GB。

モンスターマシンのZenfone 2が発売されたっていうのに、あえて旧モデルをチョイス。
だって、Zenfone 2ってスペックもモンスターなら、大きさもモンスターなんですもの。でけえ。あんなの片手で持ったら疲れちゃうよ。

それに比べるとZenfone 5は、ちょっと大きめではあるけど、なんとか片手で使えるくらいの大きさ。
画面も綺麗だし、写真も綺麗に撮れるし、電池もわりと持つし、わたしゃこれで十分ですわ。
なんてったって、安い。XperiaとかiPhoneとかの半分くらいだもの。それでいて、別に大した違いはないし。

でも、バッテリーが交換できない機種を使うのは初めてで、いつ切れるかハラハラしながら使ってます。ぷー。
(でもおかげでバッテリーを長持ちさせる方法とか調べまくって、やっとまっとうな使い方を覚えました。やたらと充電しちゃいけない。放置プレイはダメダメ、など)



2015年3月3日火曜日

分離されたって、あーた。:Raspberry Piでファイルサーバを構築。sambapasswdが見つからかった件

こんばーんわー。
今日はふと思いついてディスクの空き容量が少なくなってきたので、ファイルサーバを新調することにしました。

数年前に使っていたHPのネットブックにCentOS載せて、外付けのハードディスクくっつけて運用してたんですが。
でも容量が250GBだし、ちょっと物足りないんですよね。
ちょうど先日購入したRaspberry Piもホコリをかぶっていることだし、電気屋さんで安いハードディスク買ってきて、ファイルサーバにしちまおう、と。

戦利品。2TBで一万円ちょっと。まあこんなもんじゃろ。

で、あとはRaspberry Piに外付けハードディスク接続してー。認識自体は無問題ー。
sambaの設定してー・・・。
おっと、そもそもsamba入れてなかった。うふふー。

さくっとインストール・・・しようと思ったらエラー。
どうもパッケージの情報が古かったみたい。コチラの記事を参考にして、「sudo apt-get update」を実行。
よっしゃ。今度は通った。
下の画面は、MacBook AirからVNC使ってRaspberry Piの画面を表示させてるところ。
でも考えてみれば、guiってほぼ使わないし、動作も遅いしで、これ以降はssh経由で作業してました。


で、今度は接続した外付けハードディスクをマウント。
お買い上げ状態ではNTFSフォーマットされてます。
でも、万一Raspberry Piがぶっ飛んだら、Windowsパソコンにでも接続して使えるようにしたい。
というわけで、Linuxのファイルシステムにはせず、NTFSのまま使うことにする。

今度はntfs-3gをapt-getでインストール。
「apt-get install ntfs-3g」でさくっと。いやー、便利だなー。

ここらへんはさくさく進む。webmin入れて〜。sambaの共有フォルダの設定して〜。
そーれWindows機から接続だー!わははははー、らくしょうじゃーん。

・・・。
・・・・・・。あれー・・・?

(じつは本記事のメインはここから。)
何度やっても共有フォルダにアクセスできない。MacBook Airからもダメ。
webminで何度もパスワードの設定をやりなおした。
すでに稼働しているファイルサーバの設定画面を横に並べて、まったく同じ設定にした。
それでも繋がらない。
ユーザ名が存在しないか、パスワードが違うよーって怒られる。
ああ、怒られるのは仕事だけでいいんです。最近怒られっぱなしだから、もういいんですよう。

・・・で、ググっているうちに、「smbpasswdでパスワード設定しないとダメよ?」みたいな情報を見つける。えー・・・。
・・・だってwebminでUnixユーザとSambaユーザを同期するように設定したもん。ちゃんとやったもん。
でもできてないのは確かなので、とりあえずsmbpasswdを実行・・・実行・・・じっ・・k
コマンドがみつかりません
えええええ!
だってさっき、「apt-get install samba」やったじゃん!
パスワード設定ツールくらい、一緒に入れてくれるんじゃないの!?

と思ったら違った。
http://lists.debian.or.jp/debian-users/201104/msg00010.html
「samba-common-binパッケージに分離されたようです。」

。゚(゚´Д`゚)゚。
ぶ、ぶんり・・・って・・・。
半信半疑のまま、「apt-get install samba-common-bin」を実行。
smbpasswd userでパスワードを設定。
う、Windows機からログイン・・・。
・・・。
嘘みたいにあっさり繋がった

えっ、ええー・・・。
前はこんな苦労したことなかったのにな・・・。

教訓:「人間はしばらくやってないことはあっさりと忘れる」

おまけ:
ついでにこんなのも買っちゃった。Raspberry PiはUSBケーブルで給電だし、便利かなって。
最近、この類の製品ふえてますよねー


2015年2月24日火曜日

une histore un peu privee

C'est fini, c'est fini; le boulot d'aujourd'hui est enfin fini.
Moi, dans cette entreprise oû je travaille, ils considèrent que je déteste travailler.

Les Japonais travaillent vraiement dûrs; comme s'ils ont la haîne de la vie privées:
Il y a 20 ans,  je travaille comme un homme de vente. Là bas, si un staff rentre chez lui, par example à 20 du soir, il serait battu au lendemain matin par sa boss, en disant "pourquoi tu as rentré chez toi aussi tôt, si bien que les autres restaient et travaillaient encore?"

C'est fous: mais, C'EST LES JAPONAIS: ... moi, j'en avais marre, mais je restait à cette bureau pendant 4 mois. C'est la raison que je ne veux pas travailler si durement:

merci:



2015年2月19日木曜日

Mais c'est COOL! : OpenStreetMap est devenu un navigateur enfin!

Bonjour, tout le monde!
J'attrappe la grippe et j'ai mal a tete up peu, hehe.

J'aime bien OpenStreetMap, qui est la carte libre comme le wikipedia.
http://openstreetmap.fr/

Ce service de web pocede maintenant la fonction de navigteur de route comme Google Map; c'est super!

J'aimerais bien visiter Lille encore une fois...

2015年2月18日水曜日

【連載第二回】ど素人がWebサービスを立ち上げるまで何日かかる?:お名前.comでドメインをとるのじゃ

はーいこんばんわ。
「明日は何やろっかなー?」とか、ほざいときながら、昨日はサボってしまいました。
だって風邪ひいてたんだもの。ごほげほがほ。

まあ昨晩早めに床にはいって、ぐっすり眠ったら大分良くなりまして。
めでたく今日、連載を再開できる運びとなりました。
・・・別に毎日やんなくてもいいんだけど、うん。

で、前回はConoHaさんでサーバ立てたので、今日はドメインを取得してみました。
でもでもまだ実働じゃないしー。お金ないから安くすませたいしー。
というわけでお名前.comさんを利用することにします。安いから。
だって年間99円からとか、広告ばんばん出てるんだもの。

さっそくトップページにアクセス。
・・・「まずは、ドメイン名を検索してみよう!」はいはい。
くーまーさーんーのーいーうーとーおーりー。

わーい、いっぱいでてきたー・・・。

ど・れ・に・し・よ・う・か・な?
でも、99円のドメインは、「.pw」とか「.red」とか・・・。うーん、いくら「とりあえず」といっても、pwってなんかイメージしにくいなー。
と思ったら、「.link」ってあるじゃないですか。
かっこいい。これにしよう。ポチッとな。
(すでに紙パックワインをしこたま飲んでいるので気が大きくなってる)

年間180円。うん。安いよね。Whois情報公開代行もおねがいしますよっと。

支払いは、コンビニ払いにしました。しかし、コンビニ手数料と登録料がほぼ同じ、っつーのもなんだけど、まあ酔っ払ってるからいいや。あはははは。

さて、今日はここまで。
次回は(明日とは言わないw)、サーバでドメインの設定をしようかな。

2015年2月16日月曜日

【連載第一回】ど素人がWebサービスを立ち上げるまで何日かかる?:まずサーバよね。ConoHaの無料クーポン使おう

はいこんばんわ。ど素人でえす。

もともと片足突っ込んでたとはいえ、この一年、サーバー管理だのアプリ開発だの、ゼロから独学で始めて突っ走って参りました。
もうここまできたら行くところまでいっちゃえ、ということで。
そろそろWwbサービスを立ち上げることにしました。

(アプリも単体じゃ採算もなにもあったもんじゃないですしねー)

まあ、なにはともあれサーバでしょ。
でも、普段実稼働してる自社サーバでいきなり試すなんて怖い。
なんかトラブルがあったら、実務にガツーンと影響出ますしね。どうせ対応・復旧するのは自分だし。
これ以上、休日にサーバのことを気にしながらコドモと散歩するのは嫌だ(本音)。

というわけで、先日「オープンソースカンファレンス  2015 Hamanako」で頂いてきた、ConoHaさんの三千円分無料クーポンを投入してみます。


ConoHaさん太っ腹だぁ・・・。
ちなみにこちらが一緒にもらった薄い本。

うふふ。二巻か三巻あたりからよんでみよっかなー。

・・・本題本題。
まずはConoHaのアカウントを作成して、ログインします。
アカウント作成時に、電話認証が必要になるので注意。でも自動音声による案内だったので、とくに問題なくクリア。

で、コントロールパネルから、[アカウント] > [クーポン]の順に選択。

「クーポンを登録」をクリックして・・・

クーポンコードを入力。で、[確認]をクリック。
わーい。

とりあえずこれで、無料でサーバを立てる準備はオッケー。次はVPSを作成せねばなるまい。

[サービス] > [VPS]の順に選択し、・・・

[VPS追加]をクリック。
とりあえずお試しなので、プランとrootパスワードの他は、あんまり選ぶところはないなー。
シンプルでええこっちゃ。



で、作成後、しばらく待ってると、「準備ができたでー!」とメールが届きます。
たぶん30分もかからないくらい。

やった、ぼくにもできたー。

さーて、明日は何をやろうかなー。



2015年2月14日土曜日

きたきたきたー。:GitHubからAndroid Studioにプロジェクトをチェックアウトしてみた

みなさんこんにちは!
今日は日本Androidの会浜松支部の定例会にきています!

今日のお題は、「Android Studio」。
そろそろ開発環境もAndroid Studioにシフトしないとまずいよねー、ということで、勉強会に参加です。

勉強会そのものはAndroid Studioのインストールなど環境構築から始まったのですが、私は前回すでに環境構築すませてたので、らくちんらくちん(遅刻もこれでとりもどした)。

で、HelloWorldもなんなく実機で動作しました。
ケーブルでMacBook Airにさして、そのままRunするだけ。
・・・なんか、Windows 8であれだけ苦労したのが嘘のよう。

で、お次は・・・。支部長さんがOpenStreetMapを表示するサンプルアプリを作ってきて頂いたので、それをAndroid Studioにインポートして動かしてみよう、と。
ソースコード自体はGitHubにあるらしい・・・。

まずは既存のプロジェクトを全部閉じて、「Checkout project from Version Control」を選択します。

で、「GitHub」を選択。

GitHubへのログインが必要になりますよー。
ログインできたら、「Vcs Repository URL:」にプロジェクトのURLを入力、「Clone」をクリック。

・・・えええええ!?の、No files are ...?

あ、開いてないだけだった。画面左から適当に開けばオッケー。

・・・わーい。
これで幸せになりましたー。
Macbook Airで開発ってのもらくちんでいいですねー。



2015年2月7日土曜日

開発環境をシフトしてくよ。:Macbook AirでAndroid Studioのプロジェクトをcodebreakで管理しよう

ううう、眠いよう・・・。最近ハードワーク気味です、こんにちは。

今日は用事で外出しましたが、ちょっと時間が空いたので、お仕事を突っ込みます。
最近開発仕事によく使ってるMacbook Airを持って、デニーズへGO。
いいですねMacbook Air。軽いし。薄いし。ターミナルを開けばそこはもうUNIXライクな世界。うふふふーふ。

・・・もう、開発業務はこっちにシフトしようかしら・・・と先日のブログ記事でつぶやいてたんですが、まあ時間的にちょうどいいので実行しちゃおうと。
で、まあ、結果的には成功したんですが、なにぶん疲れ果てていたので、一体なにをどうやったか、ロクに覚えていない・・・。

でもまあ、自分の備忘録的に、メモを残しておくことにします。

前提

  • codebreakにアカウント、リポジトリを作成済み
  • Android Studioはインストール済み
  • Androidプロジェクトはcodebreakから取得し、Android Studioに新規プロジェクトとしてインポート済み
  • gitクライアントにはSourceTreeを使用

・・・なにやったっけ。

ええと、すでにAndroid Studioにプロジェクトとしてコードは取り込んであるんで、これをcodebreakのリポジトリに紐付ければええんじゃないか・・・と思って・・・。

そうそう、codebreakのリポジトリをブラウザで開いて、Clone URLをコピーしたんだっけ。下の画像の右上の部分。

えーとー。次はー・・・。
あ、SourceTreeを起動してー。「新規リポジトリ」から「既存のローカルリポジトリを追加」ってクリックしたんだった。これで、Android Studioのワーキングディレクトリを選択してー・・・。


あと・・・はー。そうそう、確か、SourceTreeで、追加したローカルリポジトリを開いて、っと。
で「リポジトリ」メニューから「リポジトリ設定」を選択・・・したはず・・・。


ここで「リモートの名称」は適当に。「URL / パス」で、先ほどコピーした、codebreakのURLをペタっと貼り付け。

これでオッケー。だったはず。
・・・あ。違った。
Android Studioでコードを変更して、いきなりコミット、プッシュしようとしたら、拒否されたんだっけ。競合がある、とかで。

こちらの記事を参考にさせていただいて。
まずSourceTreeでcodebreakのリモートリポジトリからプルしてから、コミット、プッシュしたら、無事に成功。

・・・。あかん。疲れとる。ぐだぐだや。
でもまあ、結果よければ全てオーライ。これで外出先でも仕事ができるね。わーい!・・・わー・・・い・・・。










2015年2月4日水曜日

TIFFか!TIFFか!TIFFなのか!!:iOSのカメラアプリでメーカー名などを写真のEXIFに埋め込む



えーと。こんばんは。

今日一日苦しんでた不具合がやっと解消されそうなので、愚痴を吐きます。げえーっ。

つい先日、Apple様のApp StoreにiPhoneアプリを公開した訳ですが。

ボスからまた連絡が。「このアプリ使えんの?」
いやー、使えますよ、やだなあえへへへ、と答えようとしたら、
「EXIF情報ないんだけど」

( ̄△ ̄;)

そ、そんなはずは・・・。
EXIF情報は、Android版を作ったときに散々やったしなー・・・
Commons Imagingちゃん口説き落とした: Exif情報のコピー

まあでも、そんなこと言ってても仕方ない。できてないもんはできてない。
で、確認してみましたら、

・・・。うん、確かに無いね。
いや、大事な情報の、「DateTimeOriginal」と「DateTimeDigitized」はきちんと保存されてる・・・されてるけど・・・
他の情報がほとんどない
・・・えええええ・・・。

NSDictionary作るときに、きちんとCGImageSourceCopyPropertiesAtIndexでコピーしたんだけどなー・・・。と思いつつ、コードをもいっぺん見てみると
NSMutableDictionary *EXIFDictionary = [[NSMutableDictionary alloc] init];
コピーしてねぇじゃん orz オイ俺!しっかりせえ!1
あかんわー。初期化して、箱だけ作って満足してるじゃんー。
慌てて修正。こんな感じに。
NSMutableDictionary *EXIFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyExifDictionary]mutableCopy];
これで安心。ふー。
と思ったけど、・・・んー。なんか、メーカー名(「Apple」とか)、モデル名とか、あとは作成日付とか、そこら辺の情報がまだ保存されてないのよねー。
リファレンス(こちら)見て、関係ありそうなのはセットしてるんだけどなー。

メーカー名とモデル名は、特に変更しないから、最初にmutableCopyで持ってきたもの使えばいいし。
変更したいのは撮影日時とデータ化日時だから、それはsetObjectしてるし・・・
[EXIFDictionary setObject:originalDateTime forKey:(__bridge NSString *) kCGImagePropertyExifDateTimeOriginal];
[EXIFDictionary setObject:originalDateTime forKey:(__bridge NSString *) kCGImagePropertyExifDateTimeDigitized];

EXIFのDictionaryに、他に関係してるエントリはないしなー・・・と思いつつ、ふと「TIFF Dictionary Keys」の方も覗いてみましたら。
const CFStringRef kCGImagePropertyTIFFMake;
const CFStringRef kCGImagePropertyTIFFModel;
const CFStringRef kCGImagePropertyTIFFDateTime;
あるやん あるある あるやんかー・・・
( ̄△ ̄;)

で、TIFFのディクショナリー追加して、
 NSMutableDictionary *TIFFDictionary = [[metadataAsMutable objectForKey:(NSString *)kCGImagePropertyTIFFDictionary]mutableCopy];
このエントリたちをsetObjectして・・・。
[EXIFDictionary setObject:originalDateTime forKey:(__bridge NSString *) kCGImagePropertyTIFFDateTime]; 
[TIFFDictionary setObject:Make forKey:(__bridge NSString *) kCGImagePropertyTIFFMake]; 
[TIFFDictionary setObject:Model forKey:(__bridge NSString *) kCGImagePropertyTIFFModel]; 
[TIFFDictionary setObject:Software forKey:(__bridge NSString *) kCGImagePropertyTIFFSoftware];
ビルドしてみたら。
ほい。
半日以上悩んでたのが、あっという間に解決しましたよ。
( ̄∇ ̄;)

ま、できたから良いとすっか・・・。


あと関係ないけど、kCGImagePropertyMakerAppleDictionaryって何に使うんだろな・・・。最初これが無いせいかと思って追加したけど、なーんも変わらなかった。しくしく。


2015年1月27日火曜日

5.7使うの、早まったかなあ。:concrete5で「Simple PHP block」使おうと思ったら5.7には対応してなかった件

こんにー・・・ちー・・・は。
久しぶりの投稿なのにダウン系です、こんにちは。

先日、concrete5を使って自社サイトをリニューアルしました。
デフォルトのテーマでもそこそこ使えてしまうconcrete5って便利ですね。
(そこそこ以上のことをやろうとすると、ブロックやらテーマやら、色々と勉強しなければいけませんが・・・)

で、あまりに簡単にコンテンツの追加ができるし、HTMLブロックてのを使えば、HTMLコードを直接書ける。
facebookやらtwitterやらのタイムラインをブロックとして埋め込むのも簡単。
ひゃっはー!
・・・ひょっとして、PHPのコードを埋め込めば、自分のサーバのデータベースからデータ引っ張ってきて、整形して表示できるんじゃね?できるんじゃね!?とか思ったり。

・・・。甘かった。
きょかされた たぐじゃ ありません、とか表示されて、ブロックにはPHPコードがそのまんま表示される。・・・ですよねー。

まあググってみたら、こんなスレッドを見つけたりして。
ふんふん、「Simple PHP block」ってブロックがあるのか。しかも無料。やったー!
ということで、以下のページからダウンロードしました。
http://www.concrete5.org/marketplace/addons/simple-php-block/

で、この記事を参考にして、サイトの/packages/フォルダに解凍して突っ込んだはいいんですが・・・。
・・・えっ?

「インストールできません!」

どういうことだ・・・。「このパッケージには問題があります」とか言われても、おじちゃん困っちゃうよ。
なになに?「... concrete5.7以上に対応してアップデートされているかどうかを確認してください。」?
・・・はっ!「Simple PHP block」のページにこんなこと書いてある!!
Works with 5.3 - 5.6.3.2
orz

だみだこりゃ。

5.7だと色々機能が追加されてるとか、SNSでのログインが可能になったとか、5.6からのアップデートはできないとか、色々聞いて5.7をダウンロードしたんだけど・・・
はやまったかなあ・・・

とりあえず、「Simple PHP block」に代わるもの、何か見つけなきゃ・・・。



2015年1月10日土曜日

Java、また貴様か!:Android StudioをMacで起動しようとしたらJVMが見つからない件

みなさんこんにちは!今日は日本Androidの会 浜松支部の定例会にきています。


今日のテーマは、「Pushpin」相当のAndroidアプリを作ろう!です。
http://pushpinosm.org/

このPushpinというアプリ、OpenStreetMapのPOI(スポット情報)を簡単に登録できるというすぐれたアプリなんですが、いかんせんiOS版しかありません。
ないんだったら作っちまえ!ということで、みんなで作戦会議ー、なわけです。

・・・いやいやいや。この記事の目的はそっちじゃなくて。

で、皆で開発するにあたって、コードを置くのはGitHubにしようかとか、いろいろ話しているのですが・・・開発環境をどうしようか、と。
そのなかで「EclipseでのAndroid開発はもうそろそろ終わりのようなので、Android Studioでいいよね」って・・・
えっ。知らなかった。

ということで、こっそりMacBook AirにAndroid Studioをインストールすることにしました。

ダウンロードはこちらから。
http://developer.android.com/sdk/index.html#top

で、落としたdmgを開いてみると、こんな感じ。

いやー、このドラッグするだけっての、いつまでたっても慣れないわー。
ま、簡単なのはいいことよね。って、インストールして、起動しようとしましたら・・・

・・・えっ。JVMが見つからない?ええええ?

速攻、Javaのバージョンを確認。
java -versionjava version "1.8.0_25"

・・・。あっれー?助けてGoogleせんせー!
・・・あった。StackOverflowすげえ。
http://stackoverflow.com/questions/27369269/android-studio-was-unable-to-find-a-valid-jvm-related-to-mac-os

Open the application package for Android Studio in finder, and edit the Info.plist file. Change the key JVMversion. Put 1.6+ instead of 1.6*. That worked for me!.

Android StudioのパッケージをFinderで開いて、Info.plistってファイルを編集しろ?
・・・どうもこういうことらしい。


すると、Finderのウィンドウが新しく開いて、無事パッケージの中身を見られるようになりました。
あとはInfo.plistってファイルをテキストエディタで開いて、以下の記述をさがします。


<key>JVMVersion</key>

<string>1.6*</string>
この1.6*の「*」を、「+」に変更すればOK。
(アスタリスクは1.6系、プラスは1.6以上、って意味らしいです。なるほどー!)

これで、無事起動できましたー!
ふうやれやれ。・・・もう仕事のAndroid開発も、MacBook Airでやろっかなー?





2015年1月8日木曜日

有名人は大変よね。:「info」というアドレス宛のメールがエイリアスの設定で届かなかった件

皆さまこんにちは。
今日もサーバー君に「ぎゃふん」と言わされ、悔しかったのでブログに書き殴ります。

・・・新しいサイトにですね、お問い合わせのフォームを設置したのですよ。
で、分かりやすいように「info@xxx.xx.xx」みたいなアドレスにして。

・・・送受信。ぴっ。・・・。送信できない。受信もできない。・・・パスワード・・・は・・・合ってる。
・・・他のメールアドレスは送受信できてる。
・・・なーぜーだー!!

おーかしーいーなー、なんでだろーなー、と思いつつログを見ていましたら。

to=<root@xxx.xx.xx>, orig_to=<info@xxx.xx.xx>, relay=local, delay=13, delays=0.07/0.01/0/13, dsn=5.2.0, status=bounced (can't create user output file. Command output: procmail: Couldn't create "/var/spool/mail/nobody" procmail: Couldn't chdir to "//Maildir" procmail: Error while writing to "./.procmail.log" procmail: Unable to treat as directory "./new" procmail: Skipped "." )

ん?root?rootなんかに送った覚えはないぞ・・・?
と思いつつ、Google先生に聞いてみましたら・・・

ありましたありました。
http://www.aconus.com/~oyaji/bbs/past/0011/B0007239.html


エイリアスの設定・・・とな・・・。たしかに「info」ってwellknownだよな。
記事を参考にして「/etc/aliases」を確認すると、ありましたありましたありました。
info: postmaster
つまり、info宛のメールが、postmasterに転送されて、rootに回った、と。
すぐにこの行をコメントアウト。
あ、あとはnewaliasesコマンドを実行して、エイリアスデータベースを再構築。

これで無事、info@xxx.xx.xxで送受信できるようになりました。
やー、べんきょうになるなー(棒





2015年1月7日水曜日

長いパスワードがいいのよねん。:concrete5のインストールでMySQLの古い形式のパスワードが通らない

皆様、新年あけましておめでとうございます。
ずっと正月休みが続けばいいのに。いいのに。いいのに。

と、そんなことも言ってられないので、今日もお仕事がんばってます。
ちょいと自社のホームページをconcrete5使って再構築しようと思い立ち、最新バージョンの5.7系をダウンロード、インストールしていたのですが。

http://concrete5-japan.org/about/download/

・・・なんかエラーが出とる・・・。


「SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client」

えっと・・・。え?パスワード・・・?ええ?
ググってみると、どうもMySQLで古い形式のパスワードを使ってたみたい。

MySQL5.5、php5.4、mysqlnd で authentication method unknown エラー

記事の通りにmysqlのuserテーブルを覗いてみると・・・。あったあった。
concrete5用にさっき追加したユーザーのパスワード、短い。これ古いやつだ。
急いで/etc/my.cnfを編集。「old_passwords=1」はどこだ!
・・・あれ?
これ、自分で追加してた。ご丁寧にコメントつけてる。あう。
さっそくold_passwords=1の設定を削除して、mysqld再起動。
パスワードを再設定。・・・ほっ。パスワード新しい形式になった。長い長い。

concrete5のインストール続行・・・あっ、今度は大丈夫みたい。

インストール成功!「おめでとうございます」なんて言われちゃうと、照れちゃいますね。へへ。

ほんとはコンテンツまで午前中にやっときたかったけど、ま、しゃあないなー。
おひるにしよっと。