2013年9月28日

sphero買ってみた

 WBS(ワールドビジネスサテライト)で紹介していた、ちょっと高めのおもちゃを買ってみました。
ほとんど勢いで買ったんだけど、結構いい動きをします。

 AndroidやiOSの端末にアプリをインストールしていろいろなことができるようです。
まだ、やってませんがAR(拡張現実)で遊ぶこともできるようです。



実際に遊んで見た


sphero

2013年9月26日

JavaScriptでタスクをスケジュール実行する

 あるシステムで任意のタスクをスケジュールされた時刻になったら、自動的に実行するという要件がありまして、それをJavaScriptで実現するためのクラスを作ってみました。
 タスクの終了関係なしに、時間が来たら次のタスクが実行されます。
 もともと、Javaでやっていたものの移植になります。

ファイルの説明

  • index.html
    ジョブを実行するサンプルのhtmlです。
  • main.js
    ジョブを実行するサンプルのJavaScriptです。
  • scheduler.js
    ジョブのスケジューリングを行うメインのJavaScriptです。
    TaskerとSchedulerという2つのオブジェクトがあります。
    Taskerは、主にタスクのスケジューリング管理とタスクの実行を行います。
    Schedulerは、スケジュールデータのタスクデータを管理します。


用途
 テレビのように時間が来たら番組が変わるように、時刻をきっかけに動画の再生を強制的に切り替えるようなアプリケーションなどに使えると思います。
 実行中のタスクを無視して次のタスクを実行するというような要件がどれくらいあるかわかりませんが…。

使い方の解説
 最低限やることは、3つだけです。

  1. タスクデータの準備
    タスクを連想配列として定義し、配列として準備します。
    タスクのデータ構造は、自由に定義してもよいですが、タスクの実行開始時刻を計算できる項目を持たせる必要があります。
    TaskerのgetIntervalTimeでタスクを実行する前のIntervalTime(待ち時間)を計算するためです。
  2. SchedulerとTaskerのインスタンスの準備と、Taskerの一部関数の書き換え(Override的な)です。
    TaserのインスタンスのuserProcessとgetIntervalTime関数を書き換えます。
    userProcess関数は、タスクを実行する関数の内容を記述します。引数として、タスクデータを受け取ります(サンプルでは、タスクデータのmsgキーの値をコンソールに表示しています)。
    getIntervalTime関数は、受け取ったタスクデータを実行するまでの時間を秒で返却します(サンプルでは、現在時刻とタスクデータの時刻の差を算出し、秒にして返却しています)。
    他にも、startJob、endJobという関数があります。それぞれ、ジョブの開始時と終了時に呼び出されます。
  3. 上記準備ができたら、実行します。
    SchedulerのインスタンスをTaskerにコンストラクタに渡してインスタンスを生成し、実行します。
    実行するためには、Taskerオブジェクトのexecuteメソッドを使用します。
    executeメソッドは、bool型の引数を一つ持っています。
    true..既に開始時刻を経過しているタスクを即実行し、次のタスクをスケジュールする。
    false(または、未指定)..既に開始時刻を経過しているタスクは実行せずに、次のタスクをスケジュールする。

    コーディング例)
    var data = [
                {time: "100000", msg: "タスク1"},
                {time: "100100", msg: "タスク2"}
               ];
    var sch_data = new Scheduler(data);
    var task = new Tasker(sch_data);
    task.execute(false);
    

Download

おすすめ図書

2013年9月24日

Mac miniでSSDのファームウェアアップデートする

 以前、Mac miniでSSDを増設する記事を書きましたが、SSDのファームウェアがバージョンアップしているようですのでそのやり方をメモします。
 大抵のメーカでは、iso形式でファイルを配布しており、linuxを使ってアップデートをしているようです。

※USBメモリにisoファイルを書き込むツールは、Windows上で動作します。

 今回ターゲットのSSDは、「PX-256M5Pro」です。他のメーカのものでも同じようにできると思います。


  1. ファームウェアのisoファイルをダウンロードする。
    PX-256M5Proのファームウェア(1.05)
  2. UNetbootinをダウンロードする。
    ISO形式のファイルをUSBブートできるようにするツールです。
  3. UNetbootinを起動して、ディスクイメージに予めダウンロードしていたisoファイル「PX-256M5Pro 1.05.iso」を指定し、OKをクリックする。
    これでUSBメモリで起動できるようになります。
  4. Mac miniのUSBに作ったUSBメモリを挿して、optionキーを押しながら起動すると、起動ドライブを選択できるようになるので、USBメモリを指定して起動します。
  5. 青い画面でメニューが3個表示されるので、中央を選択して、Enterキーを押してください。
  6. その後は、起動したインストーラにしたがってインストールをします。
  7. A:\>が表示されたら終了です。ここで何をしても終わらないのでMac miniの電源を入れ直します。
 文字だけなのでわかりにくいかもですが、CDドライブが無くても簡単にファームウェアのインストールができます。


参考サイト


2013年9月23日

CakePHPでJSONPに対応させる

 CakePHPは、レスポンスをJSONで戻しても、JSONPに対応することができません。
バージョン2.4以降では、対応しているようです。

 今使っているCakePHPのバージョンは、2.3なので調べました。
同じことを調べて対応している方がいたのでサイトをメモしておきます。

be-hase.comさんのサイトです。

対応方法を抜粋すると以下のとおりです。

  1. lib/Cake/View/JsonView.phpをapp/View/JsonpView.phpへコピーする。
  2. コピーしたJsonpView.phpの改造する(後述)。
  3. json形式でレスポンスする時のviewClassを"jsonp"に変更する。
    コーディング方法は、CakePHPでjson形式でレスポンスする方法参照。

JsonpView.phpの抜粋
変更点は、クラス名とrenderメソッドのみです。

クラス名の変更
JsonpViewに変更する。

renderメソッドの変更
赤字の部分が変更した箇所です。
レスポンスデータをjson形式にした後に、Queryパラメータにcallbackが付いていたら、Content-typeをJavaScriptに変更し、レスポンスデータをCallBack関数の引数にするという処理を記述します。

public function render($view = null, $layout = null) {
$return = null;
if (isset($this->viewVars['_serialize'])) {
$return = $this->_serialize($this->viewVars['_serialize']);
}else if ($view !== false && $this->_getViewFileName($view)) {
$return = parent::render($view, false);
}
if(isset($this->request->query['callback'])) {
$return = sprintf('%s(%s)', h($this->request->query['callback']), $return);
$this->response->type('js');
}
return $return;
}

ちなみに、呼び元は、JQueryの$.ajaxを使っています。


これで、サーバーサイドのアプリケーションは、ますます、CakePHPで作ることが多くなりそうです。
WebAPIは簡単に作れますね。

参考図書

CakePHPでjson形式でレスポンスする方法

  サーバーサイドのアプリケーションをCakePHPで作成した、クライアントに(Androidだったり、ブラウザだったり)Json形式でデータを返却する時のコーディング方法について説明。
 実に簡単!


コーディング例(コントローラクラスで記述)
  1. // Json形式にするデータ
  2. $data = array('k1'=>'d1', 'k2'=>'d2', 'k3'=>'d3', 'k4'=>'d4', 'k5'=>'d5');

  3. // Json形式で返却する
  4. $this->set('json_data', $data);
  5. $this->viewClass='Json';
  6. $this->set('_serialize', 'json_data');
返却結果
 [{"k1":"d1", "k2":"d2", "k3":"d3", "k4":"d4", "k5":"d5"}] 
  • 2行目:Json形式として返却するデータを配列や、連想配列で作成する。Modelからデータを取得してもなんでもOK
  • 5行目:Json形式で返却するデータをViewにセットする。(複数ある場合は、必要分セットする)
  • 6行目:Viewを編集するクラスを"Json"に変更する(setしたデータをJson形式にしてくれる便利)
  • 7行目:キー名に"_serialize"を使用して、setメソッドでセットしたキー名を設定する。これで、Json形式のデータにして返却してくれます。
    第二引数を配列にして複数のキー名を指定することもできます。
    例)$this->set('_serialize', array('json_data', 'json_data2');
    配列にした場合、指定したキー名は、Jsonデータのキー名になります。

公式サイトの説明
JSONとXMLビュー


参考図書


2013年9月18日

Mac miniにSSDを増設してみた

 いままでは、Windowsとか、Linuxしかさわってなかったのですが、iOSのアプリ開発もしたいと思って、Mac miniを購入しました。
 Apple Storeでカスタマイズした状態で購入すると、結構高くなってしまうので、安く売ってるとこからバラバラで買ってあとで組立てることにしました。

 初めてのMacでメモリはいいとして、SSDの増設は実は、保証対象外になる可能性があるらしいです。(参考サイトを見ても自信がない人は行わないようが良いです。
 それと、既存のハードディスクの位置(上下)によって使用するSSDのケーブルが違うということもあります。
 結局、Mac mini本体が来てから上下のどっちにドライブがついているかを確認してから増設キットを注文しました。

 Fusion Drive化の時に、Macの勝手がわからないのでちょっと戸惑ったりしたとこは、ありましたが、下に書いた参考にしたサイトの手順通りにすればできます(先人の人に感謝です)。

 ただ、SSDの速度が出ないのでおかしいと思って調べたら、購入したSSDがSATA2.0の遅いやつでした。SATA3.0のやつだったら1.5倍くらいの速度になりそうです。
 なので、買い直しです…(涙)。


購入したもの
  • Mac mini
  • SSD 250GB
    左は、誤って購入したSSDです。本来は、右を買う必要がありました。
    違いは、速度です。SATA2.0(3Gbps)かSATA3.0(Gbps)です。
    1.5倍は速度が違うようです。
  • メモリ 16GB
  • ワイヤレスキーボード
  • Magic TrackPad
  • 増設キット
    必要最低限ですが、トルクスドライバー6,8がもついているのでとても良いです。
やりたかったこと
  • SSD+HDDでFusion Drive


参考にしたサイト


こんなにバラバラにしてから、SSDを付けてから組み立て直します。



2013年9月16日

つい翻訳0.7.1公開しました

 
 ツイッターのタイムラインを多言語に翻訳するAndroidアプリを機能強化して公開しました。

2年前にAndroidことについて右も左も分からない状態で開発して公開したアプリです。

良かったら使ってみてください。


つい翻訳


2013年9月10日

メールの書き方

 昨今はメールでやりとりすることが多いと思いますが、そろそろメール本文のレイアウトにも気をくばって書いてほしいものです。
 ※かといって、自分が正解とか、これが標準とかいうつもりはありませんが。

気になるメールたち

  1. メール本文の右上らしきとこメール送信者の所属や名前を書く
     報告書とか文書のレイアウトでは、文書の作成者の情報を右上に書くと思いますが、メールでもそうする人がいます。
    自分のメールソフトのエディタ上では、右上っぽいかもしれませんが、受信者のメールソフトでは、真ん中だったりしますよ。
  2. メールのスレッドのことを知らない
     全然関係ない内容を別のメールの返信で書いてしまう。
     これをされると何が起こるかというと、メールをスレッドで管理しているとメールが行方不明になってしまう(探せば良いのでは?というのは、愚の骨頂)。
     やりとりは、流れで見たいので途中に無関係の内容が入るとか作業効率を著しく低下させる。
     これは、会社がデフォルトで提供している古いメールソフトを使っている人に見られます。
    せいぜい、振り分けと日付とかでの並び替えくらいしかできないような古いものの場合です。
  3. インデントをスペースで空ける
     前行と行頭を揃えるために、スペースで埋めたりしますが、メールソフトによっては、ただガタガタするだけで、何もいいことがない。
    せいぜい、文頭の空白ぐらいでしょ。
  4. 文書の改行位置がでたらめ
     自分のメールソフトの横幅で改行させてしまうので、受信者側のメールソフトではおかしな所で改行されていて読みづらくなってしまう。
    やはり、。や、で改行させるほうがよいと思います。
     日本人特有(と言われていたような…)の枠の中に収めたいという欲求のせいでしょうか?
 面倒だとかいう人は、「結果的に読めればいいんじゃね?」とかいう人もいると思いますが、そういう文書は、内容がどんなに良くても読んでもらえなくなってしまうのですよ。

 みなさん、「伝わればいいんだっ!」ではないんです。伝わるのは当たり前なのです!どれだけ、読みやすいとか、誤解されないかなんです!

2013年9月9日

TeamViewerを買うことを検討

 あるユーザにリリースしたアプリケーションが動作しないということで問い合わせが来ました。

 絶対、正しくリリースをしたはずだと思って、当時のことを思い出したら、古いファイルを上書きして帰ってきたことを思い出してしまいました。
 上書きしたらそのファイルの内容をちょっと変更しないとダメということをすっかり忘れていました。

 実際は、Access2003のMDBファイルないのテーブルレイアウトを変更する必要がありました。
修正内容は、大したことないのですが、利用者に直してもらうのは、危険なのですが、「伺うのは手間でしょうから、手順を教えてくれれば修正します」と言っていただいたので、電話で対応しました。

 その後、まだ、連絡は来ていませんが、多分大丈夫と思いますが…。

本題

 今回思ったのですが、やはり、リモートで他人のPCを操作できるようにする機能がほしいということで、ちょっと思い出しながら探しました。

 TeamViewerという製品があります。
これは、個人で使用する場合は、無料で使用できますが、商用で使用する場合は、有料になります。
55,300円くらいなので、ちょっと買うことを検討しようかと思いました。

 良い所は、リモートで操作される側は、アプリケーションをインストールしなくても、TeamViewerを QuickSuppoert(顧客モジュール)実行してもらうだけで、通信経路を確保できるのでとても便利です。
ダウンロード:TeamViewer QuickSuppoer(顧客向けモジュール)



 これで、サービス向上になり、お客さんの満足度が上がるのであれば、安いものです。

 ただ、問題は、こういうサービスを悪用して、不要なアプリケーションをインストールしたり、情報を盗んだりする悪い人がいるということです。
 ユーザには、信用してもらうしかないんですけどね。

2013年9月5日

言葉を知らないと恥ずかしいという話


支払サイトという言葉を知らない営業の人がいた。
少なくとも営業をしている人の中では、当たり前用語だと思うんですが。

「支払サイトは、何日ですか?」という話をしたら、「えっ?ホームページのアドレスですか?」とWebサイトのことだと思ったらしい。


自分も一般用語とかその業界の用語くらい知っておこうと思う一幕でした。
でも、ちょっと寒くなりました。

2013年9月4日

Accessのトランザクションにハマるの巻

 人から引き継いだMS Accessのプログラムで外部ファイルをテーブルに取り込んで処理をするというよくあるプログラムのバグ調査をしている時にトランザクションに関わるプログラムのバグに悩まされた。

 トランザクションを開始してから、入力ファイルがないのでそのサブルーチンをを抜けるというロジックがありました。
 で、トランザクションを閉じず(Commitとか、Rollback)にサブルーチンを抜けているもんだから、次のサブルーチンでトランザクションを開始してテーブルにレコードをいくら登録して、全然登録されないという気持悪い現象に大ハマリでした。

 1)トランザクション開始(BeginTrans) ← これをちゃんと閉じないのが問題!
 ↓
 2)トランザクション開始(BeginTrans)
 ↓
 3)レコードをINSERTを繰り返す
 ↓
 4)Commit
 ↓
 5)終わり

 1)のトランザクションがかかりっぱなしなので、4)でコミットをしてもデータは登録されずにそのまま。


 Accessは、Workspaceに対してトランザクションをかけるのですが、同じワークスペースには、1つしかトランザクションをかけられないので、1)のトランザクションは、かかっているけど、触りようがないトランザクションになっているのです。


 開けたら、閉める。これ当たり前の動作。皆さん気を付けましょう。


これでやっと、本当のバグ調査ができますよ。

2013年9月2日

SoftBank Arrows A 202F退院

 結構早めに、SoftBank Arrows A 202Fが戻ってきました。
思っていたとおり、「症状を確認できず」という答えでした。まぁ、どうやったらその現象を発生させるかも分からないのだから当然です。
 ですが、無償で基板を交換してくれたそうです。(治ったかどうかは別の話)

 まぁ、原因もわからいのに、修理しましたとかいって戻ってくるよりもいいですが。


きっとまた発生するような気がしますが、仕方ありません。

またダメだったら、よろしく!富士通モバイルコミュニケーションズの皆さん。

ただ、嫌だなとおもったのが、以下。

  • 液晶に貼ってある保護シートとかが剥がされてきて(最初に言われてますが)きて、また新しく買い直さないとダメなので、余計な出費がでる
  • 設定内容が全部なくなっているので元に戻さないと。
    アプリのダウンロードとか設定とか。

気をつけようがないですが、皆さん気をつけましょう。

2013年9月1日

フォルダをISO形式のファイルにする方法

 アプリケーションを作成するとセットアップ用のCDを作成すると思います。
ユーザへは、CDを納品して、トレーサビリティの為に自分のところにもCDをもつと思います。
でも、リリースのたびに2枚づつCDやDVDを使うのはもったいないのでちょっと調べました。

 フォルダをISO形式の1ファイルに変換してくれるツールです。

Folder2ISO
です。
窓の杜にレビューもあります。

 ISO形式にするファイルが保管されているフォルダと作成されるISOファイルの名前を指定するだけで、簡単に作ってくれます。

ポイントは、以下のとおりです(窓の杜のレビューにも書いていますが)。

  1. ISO形式にしたファイルを1ディレクトリにまとめる
    まとめ元のフォルダ名はなんでもOKです。ISOファイルには影響しません。
  2. Charsetは、UTF-8を指定する
    これをしないと、マルチバイトのファイル名が文字化けします。


 これでISO形式ファイル化すればファイルサーバーにそのまま保管しておくか、DVDやBlu-rayとかの大容量のメディアに保存しておけばディスクの枚数が稼げますよね。


 よかった、よかった。

メールに添付するファイルのファイル名とか

 メールに添付するファイルのファイル名に「○○添付.xls」とかってつけるのとかってどうかと思う。
その時点では、なんのメールかはわかるかもしれないけど、なんのメールかが全然わからない。完全にメモレベル。きっと、デスクトップにそのファイルがおいてあるのでしょう。

 今回の場合は、問い合わせ表に対する補足的な説明を書いているんだけど、それだったら、新しいブックに書くのではなく、その問い合わせのブックにシートを増やして書いてくれればいいんだけどね。

 以前にも、こっちから送ったファイルに対して内容を変更して送ってきたファイルの名前が「○○ コピー.xls」というのもあった。あとで判ったことですが、デスクトップにおいてあったファイルらしい。
 この時点で管理すらされていない。


寒くなるわっ。