Category Archives: Programming

Tap Warpを写真アップロードアプリとして使いしましょう。

Tap Warp (タップワープ)は写真アップロードに特化したアプリです。Tap Warpは特定のウェブサイトに限定されず、どのサイトでも簡単に導入できます。Tap Warpを使えば、サイト毎にアップロード用のアプリを開発する手間は無くなります。サーバー側にデータ受付のAPIのみを用意するだけになります。開発のコストを大幅に削減できます。 Tap Warpの簡単な使い方については、デモンストレーションサイトからもご覧いただけます。 以下は典型的な流れを想定して、Tap Warpウェブサイトに導入する方法を説明してみます。 1. 設定を決めてJSONコードを作る 決めておきたい項目はいくつかあります。 写真の送信先(targetUrl):HTTP/HTTPSのPOSTメソッドで写真のデータを受け取ります。詳細は後ほどで。 送信先の表示名(realm):この表示名はユーザーが写真のアップロード先を取得する場合に、ユーザーに目視で確認される物です。短くて分かりやすい物を考えましょう。表示名を指定しなければ、送信先のホスト名は代用されます。 認証キー(authKey):送信者はあなた(サイトの管理者)から提供された情報にしたがって写真を送っていることを確保するため、認証コードが必須です。これは半角英数で構成される64~128文字の乱数です。 上記のtargetUrlとauthKeyは必須項目です。 簡単ながら、下記のJSONコードに纏めます。

このJSONコードはターゲットコード(Target Code)と呼ばれます。 2. QRコードを作る 上記のJSONをQRコードに変換する。 お好きなツールを使いましょう。PHPの場合はphpqrcodeは簡単に使えます。

できたQRコードの一例は右のような物です。 このQRコードは送信先の全情報を保有しています。これをあなたのサイトに掲載してユーザーにスキャンしてもらいます。 3. 写真の受け取りAPIを整備する Tap Warpが写真をあなたのサーバーに送信する場合は、HTTPのPOSTメソッドで送信してきます。リクエストのボディはJSONテキストです。詳細の仕様はAPIの説明書に記載されています。 Tap Warpからのデータの受信先として、適切なヘッダーを返す必要があります。 まずは、サーバーがHTTPのOPTIONSメソッドを処理するようにしましょう。これに関しては、各サーバーの設定ガイド等をググってみましょう。 OPTIONSメソッドとPOSTメソッドのリクエストに対して、下記のようにヘッダーを返してください。

Access-Control-Allow-*ヘッダーを返さないと正常に受信できないので、ご注意ください。 POSTされてきたデータはJSONフォーマットのテキストなので、これを解析してデータの中身を取得しましょう。 authKeyを最初に確認すべきです。データは適正のユーザーから送信されてきたかをチェックします。このauthKeyはターゲットコードでユーザーに渡された物です。サーバー側のデータベースに照合するなりにして、不正ユーザーからのリクエスト排除します。 写真のフォーマットはformatプロパティに記載されます。「image/jpeg」になります。 写真のデータはdataプロパティにBase64エンコードされた状態で渡されます。 纏めて、簡単な受信APIは下記のコードを有します。ご参考ください。

4. 纏め 「Tap Warp」は写真のアップロードを経常に必要としするウェブサイトにとって非常に有用なアプリです。ウェブサイトを製作する度にアップロード用のアプリを製作する手間とコストを省き、開発周期を短縮して、自社提案の魅力を向上させることが期待できます。ぜひ、導入の方をご検討ください。

Tap Warp対応の無料写真共有サイトを公開

Tap Warpは写真アップロードに特化したアプリです。iOS版とAndroid版を有しています。 此度はTapWarp対応の写真共有サイトを公開します。 「無料写真 @ QAON」です。このサイトの特徴として、写真のアップロードは「Tap Warp」でQRコードをスキャンしてアップロードしています。なので、パソコンに転送してからアップするという面倒さはまったくありません。 今すぐ、Tap Warpで写真を撮ってみて、快適なアップロードを体験してみましょう。

treeコマンドで特定のパスを排除する方法

treeコマンドはフォルダの構造を出力します。ドキュメント作成等の場合において便利なツールです。しかし、特定のフォルダを除きたい場合はてこずります。 treeコマンドは-Pと-Iのパラメータを提供しテイルのですが、これらはファイル名のパタンを認識するもので、「/」が入っている長いパスには通用しません。ここで工夫を加えます。 ステップは treeにフルパスを出力させます。 grep等で除きたいパスを取り払います。 パスの部分を消します。 具体的に見てみましょう。ここでスペースを節約するためにフォルダのみを取ります。 例えば、gems/doc/*のすべてを除きたい。 普通のtreeコマンドにフォルダを出力させては、下記のようなものになります。

フルパスを出力させれば:

gems/doc/*を取り除きます:

最後に、「./gems/gems/rubygems-update-2.6.6」のような前綴りを消します。これは正規表現の出番です。

これで綺麗に終わります。

(en) MySQL 5.7 Data truncated for column ‘xxx’ at row 1

After upgrading to MySQL 5.7, unexpected problem appeared.

The col1 column is of ENUM type, and the empty string ” is not in its range.  This caused problem. However, in MySQL5.6 there was no problems.  But it errs in 5.7. After searching the internet, I found no help.  All… Read more »

MySQL 5.7 Data truncated for column ‘xxx’ at row 1

MySQL 5.7にアップグレードしましたら、思わぬ問題が出てきました。

カラムcol1はENUM型ですが、”は定義範囲に入ってしません。問題はここになります。 なぜ、MySQL5.6で行けたのに、5.7でダメなのか。 ネットを検索しましたが、いろいろ問題の根本に触りもしない答えばかりでした。 再度MySQLの公式ドキュメントをよく読みますと、問題はSQL方式(MODE)にありました。 STRICT_ALL_TABLES と STRICT_TRANS_TABLES が 環境変数SQL_MODEにないことを確認してください。また、無効の日付型を許したい場合は、ALLOW_INVALID_DATESがSQL_MODEにあることを確認してください。 セッション毎に設定したい場合は、下記のSQLを接続後とに実行してください。

/etc/my.cnfで設定する場合は、下記のような語句を入れます。

再起動したら、完了です。 SQL MODEに関して、もっと知りたいなら下記のページをご覧ください。 http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html 以上

rsyncでメモリオーバーして、sshとtarの組み合わせで代用する

大量なファイルをrsyncでコピーしようとすると、メモリが足りていますか?今日は下記のエラーに遭遇しました。

頼りになっているrsyncがダメであれば、別の手段でやってみるしかありません。 まずはscpを試しました。理論上で行けるのですが、何よりも時間がかかりまして、一個のファイルは1秒か2秒かかります。十数万のファイルがあるので、数日かかります。これは待てません。 次はtarで圧縮ファイルを作ってローカルにコピーしてから展開する。まあ…いかにも大変普通な方法ですね。

無事開始しました。待とう。…… やっぱり普通過ぎます。 rsyncなら、ローカルにパッケージを作らず大量のファイルを転送できるのに、tarでいけないかなぁ~ よし、やります。 tarに圧縮データをstdoutに書き出させます。sshでデータを取り寄せて、ローカルでまたtarで直接に展開します。いけそう。 最終に、次のコマンドになりました。

成功!!

HOWTO: Selenium IDE Post to New Window(Tab)

      No Comments on HOWTO: Selenium IDE Post to New Window(Tab)

Selenium IDE is a very good tool for automated testing.  But when dealing with multiple windows, you may encounter some problems.  Especially when posting a form to a named target that results in another window.  Just like the following one:

Selenium will not be able to find the new… Read more »