Google

2012年10月31日水曜日

室内ドアの修理が面倒だった件

今回は技術と全く関係ない話です。
長年使ってた室内ドアが突然故障しました。

ノブを回しても戻しても横にある斜めの出っ張りがでないなーと思ったら、金属疲労て中のパーツが壊れてしまってました。
この忙しい時期にあーめんどくさいと思ったのですが、自前修理を決行。

まずは近所のホームセンターで部品を調達。
どうやらこの中の部品はレバー用ラッチと言うんだそうです。

ドアは川口技研互換のものがほとんど。
現物を持って行って一番近い形のものを購入。
取り外したドアノブの固定枠。これは交換しません。
ドアノブ。古いけどそのまま使います。
両側でつないでネジ止めするタイプでした。
今回活躍した器具。
ネジ穴を作れるドライバー
ネジの滑り止め液
斜めになってるやつ。
今回はこれがおかしかった。
とはいっても壊れたのはこのパーツじゃありません。
中の引っ掛かりの部分が壊れていたのでした。
購入したノブの中身をドアに半端に差し込んでみた状態。
新しいのを買ったら真ん中がプラスチックでした。
はめ込んだところ。
サイズは規格があるので普通の家なら問題ないようです。
ここから枠を戻します。
無事完了。
ラッチは蓋をかけてネジで止めます。
実はこの斜めのパーツは左右どちらがわでも対応可能。
掛かった金額はノブの中身だけで千円ちょい程度。
特に作業も難しくないのですが、面倒なことは面倒でした。
業者さんに頼むと高いんでしょうかね、、。

2012年10月29日月曜日

Unityでコインゲー開発:NGUIの活用

Unity開発における画面話の続きです。
今回はUnity勉強会で発表した内容の1つを少し掘り下げて紹介。

以前NGUIとTexturePackerの組み合わせ話を書きました。
NGUIは素晴らしく便利なのですが、使い方にはルールがあります。
UIButtonやUIPanel等、FWが指定したクラスから派生し、かつメニューから順序良く生成していくのが一応の決まりです。
仕方ないと思いつつも、現場ではこのようなニーズがありました。

  自分で作った階層構造付きのオブジェクトにNGUIを適用したい

それぞれ子供のパーツがアニメーションもしたりします。
当たり前ですが、子供のテクスチャをアトラスで効率化するということも必須です。
そんな場合にどうするか、という事で出た答えがこれ。

  サポートするクラスを新規で作ればOK

UIAtlusの考え方は有効で、最初からUnityにあってもいいんじゃない?って感じの設計です。
作りも簡単で修正もできるので、有効活用するクラスを書くのもどうにかなったりします。
で、それをやってくれる今回のソースがこちら。


using UnityEngine;
using System.Collections;
public class PackageTextureUtil : MonoBehaviour
{
public UIAtlas atlas;
public string spriteName;
public void ChangeTexture()
{
if(atlas == null || string.IsNullOrEmpty(spriteName))
return;
MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>();
if(renderer == null)
return;
UIAtlas.Sprite sprite = atlas.GetSprite(spriteName);
if(sprite == null)
return;
Vector2 textureSize = new Vector2(atlas.texture.width, atlas.texture.height);
Vector2 offset = new Vector2(
sprite.inner.x / textureSize.x,
(textureSize.y - sprite.inner.y - sprite.inner.height) / textureSize.y
);
Vector2 scale = new Vector2(
sprite.inner.width / textureSize.x,
sprite.inner.height / textureSize.y
);
renderer.material.mainTexture = atlas.texture;
renderer.material.mainTextureOffset = offset;
renderer.material.mainTextureScale = scale;
}
public void ChangeSharedTexture()
{
if(atlas == null || string.IsNullOrEmpty(spriteName))
return;
MeshRenderer renderer = gameObject.GetComponent<MeshRenderer>();
if(renderer == null)
return;
UIAtlas.Sprite sprite = atlas.GetSprite(spriteName);
if(sprite == null)
return;
Vector2 textureSize = new Vector2(atlas.texture.width, atlas.texture.height);
Vector2 offset = new Vector2(
sprite.inner.x / textureSize.x,
(textureSize.y - sprite.inner.y - sprite.inner.height) / textureSize.y
);
Vector2 scale = new Vector2(
sprite.inner.width / textureSize.x,
sprite.inner.height / textureSize.y
);
renderer.sharedMaterial.mainTexture = atlas.texture;
renderer.sharedMaterial.mainTextureOffset = offset;
renderer.sharedMaterial.mainTextureScale = scale;
}
}


簡単に解説行きます。
このクラスは、アトラスを自前で指定したいGameObjectに追加で入れて使って下さい。
GameObjectには複数のMonoBehaviourが割り当てできるので、動き等のみを実装したクラスと別個につけることも可能です。
やれることはこんな感じ。

  • UIAtlusで設定したアトラスを自前オブジェクトに反映できる
  • 自インスタンス単体でも、マテリアル全体でも適用可能
まずメンバ変数が2つあります。
1つ目はアトラスが貼られているUIAtlusのプレハブをD&Dで指定して下さい。
2詰めはNGUIの特徴である、アトラス指定の文字列情報。
これは以前TexturePackerでやりましたが、ファイル名から拡張子を抜いたものがそのまま指定できるという便利なものです。
この仕組みのお陰で指定が非常に楽になるはずです。

メンバ関数は2つ。
前者は、現在のインスタンスのみ変更を掛ける関数です。
後者はこのインスタンスが使っているマテリアル全体を変更します。

NGUIが有料プラグインのため、さすがにサンプルファイルは出せません。
なので画面で使った感じを少々。

これがアトラスのインスペクタ。見えているのは数字の0です。
これが上記クラスを貼りつけた状態です。
メンバで指定した名前がそのまま適用されます。
やってるのはこんな感じ。
コインの枚数をインスタンス別に変更するため、2桁の数値をアトラスで出してます。
このようにバッチレンダリングされるアトラスは高速化に欠かせません。
今回の例はコインの親子関係まるごとCG屋さんに作ってもらった場合の例です。
他にも応用は様々に効くのではないでしょうか。


2012年10月27日土曜日

Unityでコインゲー開発:アスペクト比変化対処

大分前回から間が開いてますが、アスペクト比の問題について。
アスペクト比やドットの違いは以下の問題となって開発者を苦しめます。
  • 余計な場所が見えてしまう
  • 逆に大事な場所が見えない
  • バランスが取れなくなる
毎フレーム描画されてしまうOnGUIをiOSで使う人はいないと思われますが、ポリゴンで描かれたGUI系の処理も影響大です。
みんなどうやっているのか解らない、で締める記事も多いのですが、実際は以下のどれかになる可能性が高いです。
  • 見えても問題ない構成にする
  • 先日の記事のように仕切りを作る
  • サイズを動的に変更する
3D空間はカメラ等の工夫で比率が変わってもなんとかなると思います。
しかしマウスの入力位置やGUIのタップ位置、その他画面サイズに引っ張られる問題はちょっとだけ考慮が必要です。

例えば、320x480と想定した全体画面の中で、特定の比率を持ったエリアを作りたい場合。
現在の画面サイズ情報はScreen.widthやheightで入手できます。
ここから想定サイズからの比率を計算し、返す関数を作ればいいわけです。
例えば矩形だと以下のような感じになります。


private int w = 320;

private int h = 480;
private Rect rectifyRectScale(ref Rect pos)

{
Rect new_pos = new Rect();
new_pos.x = (pos.x / w) * Screen.width;
new_pos.y = (pos.y / h) * Screen.height;
new_pos.width = (pos.width / w) * Screen.width;
new_pos.height = (pos.height / h) * Screen.height;
return new_pos;
}


矩形だけでなくVector2でもx,yでも仕組みは一緒です。
Input.mousePosition等の入力があった瞬間にこういった関数で比率を計算すれば、UnityEditorで作業中にウィンドウサイズが変わっても動作に問題は出ません。
ただ、マウスの入力座標は下から上にかけて値が増加する3D概念の構成になっていますので、そこにだけは注意しましょう。

アンドロイドのようにスマホ別にサイズが違いすぎる環境なら、こういった比率計算をGUIの表示に施せば、見苦しくても画面上の比率は保てます。
もしくは先日公開したカメラの仕切りと組み合わせ、見えている範囲だけ比率を保つようにすればさらに見栄えの問題は減るでしょう。


今回は簡単な話なのでサンプルはありません。
次回はNGUIを応用する話です。

2012年10月20日土曜日

iPhone5用ストラップ取り付け

今回は愛機iPhone5に日本トラストテクノロジーのストラップを試してみました。
公式はこちら。

 http://www.jtt.ne.jp/shop/product/neck_strap_s/

全面がこちら
背面がこちら。
中身はストラップ、ネジ、リング、ドライバです。
ドライバは4S等と共通の星型
さて、ここからネジを外していきます。
ネジを半分外したところ。毎度ながら慎重にやらないと山が潰れそうです。
取れました。ドライバは磁石で心遣いがあります。なくさないように保存しましょう。
問題はここ。新しいネジはいいんですが、リング付けが大変、、、。
無事にストラップ装着完了。
持った感じ。私にはちょうど良い長さです。
ということで所感まとめです。
そもそも片方のネジなので、強度を過度に期待すべき商品ではありません。
落とさないための保険と考えるべきでしょう。
ねじ自体も無理に回すとiPhoneを傷つけるので注意との記載があります。

取り付け作業で一番難関になると思われるのはリング取り付けになるかと思われます。
どちらも小さいのでラジペンx2が欲しくなるところです。
多分素手ではかなり時間が掛かるかも知れません。
私は先にネジを本体に取り付けて固定し、そこからリングをはめ込んだのでラジペン1個でどうにかなりましたが。

後はLightning変換アダプタに未対応という点にはご注意下さい。

2012年10月19日金曜日

新規アプリ販売

今回は手前味噌の記事です。
片手間に開発していたiPhoneアプリをリリースしました。
暗算が得意なエンジニアにはあまり縁がないかもしれませんが一応。

 お買い得比較アプリ「どれとく2」



日々の買い物に役立つ、節約管理系アプリです。
記録と管理機能を強化していますので、使い続けることで大きな節約が可能です。
特に最近スーパーやメーカーは、数字のマジックで値段をごまかすような値段の付け方をすることが多いので、対策に如何でしょうか。

公式Twitterアカウントはこちらです。

 https://twitter.com/DORETOKU

中の人は私じゃありませんが、生身なので居たり居なかったりします。
居ない時はボットで自動返答しますのでよろしくです。

2012年10月16日火曜日

Apple申請情報の続き


先日の記事の続き。

あの件を調べたら日本でも何人か困ってるようでした。
しかし海外ではあまりヒットせず。
仕方ないのでアップルにサポートメールを出してみたところ、こんな返事が。

Thank you for contacting the App Review team about the status of your app, XXXXXXX.
I understand you are concerned with the review time for your app.
I checked on your app and see it is currently Waiting for Review.
I understand the excitement of having your app in the App Store can make it difficult to wait during the review process, but I assure you we are working as quickly as possible to get your app reviewed.
There are many factors involved in the review process, so I would not be able to tell you exactly when your app will be reviewed or how long the process might take.
To get an estimate of how long it may take once your app is in review, please visit the following link:
https://developer.apple.com/appstore/resources/approval/index.html
As soon as the review is complete you will receive an email with the outcome.
If we need any additional information from you, we will contact you directly.
I appreciate your patience while your app is being reviewed and I hope you have a great day.

どうやら質問の仕方が悪かったようです。
が、こちらが審査期間を気にしてることを理解してくれました。
この文面から察するに、追加情報が必要なら改めて連絡するって話のようです。
テストに垢が必要なアプリは別として、そうじゃない場合はひとつの会社に多数のアプリがあるようなケースにおいてあの情報が必要になるんではないかと。

発売済みのアプリにまで赤い文字でエラーがあるため驚きましたが、何もしなくてもいいみたいなので黙って待つことにしました。
今回のケースが全てとは思いませんが、ご参考まで。


2012/10/19:追記
Appleからは何も言われずに申請が通りました。
やはり大きな会社以外は何も考えなくていいものと思われます。
余計な修正をかけた結果、申請のキューが一番後ろに回されてしまうのが一番いやなことですし。
という訳でこの件は完全に終了です。

2012年10月13日土曜日

AppStore申請用情報が追加された件

現在申請中のアプリをiTunesConnectで見てたら、なんか項目が増えてる気がしたので記事化。
10日ほど前に申請した際にはなかったと思うんですが、、、、。

まずアプリのバージョン詳細に入るとこんな赤文字でエラーが。


コンタクト情報がたんないって言われてますな。
で、スクロールしてみたら、サムネイルの下にこんなエリアができてました。
どうやらレビューに必要な追加項目のようです。
今まではまとめて記載していたはずなのですが、細かくなってますね、、、。


で、Editを押したポップアップ編集画面がこちら。
どうやらそのアプリに関して、社内で担当してる人とか、レビューの助けになる情報とか、チェック用の垢情報の記載が並んでるようです。

これやんないと審査通らないんだろうか、、、、。
Apple上を探してもまだ情報が見当たらないんですが。

ふと思い立って、既にAppStoreで販売済みのアプリの詳細も開いてみました。
そしたらおんなじ警告文とカラムがwww
もしかして全部のアプリに入れろってことですかい>アップルさん
うーん、困りました。


引き続き調査続行中。


10/16追記:
サポートにメールを出して戻ってきたのでその記事を書きました。
http://pukapuka-ahirusan.blogspot.jp/2012/10/apple.html

2012年10月11日木曜日

Chrome用Gmailチェッカの挙動がおかしかった件

最近Gmailの挙動がおかしかったのでその件について。
正確にいうと、Chromeで動いてるGmail拡張機能チェッカの挙動がおかしいって話なんですが、即解決しなかったので備忘録を兼ねて記録。

そもそもの発端は、いつもようにチェックしてるGmailチェッカの件数。

この件数表示拡張。あまりに定番すぎるのですが。
あ、メール見なきゃってGmailを開くと0件。
is:unreadしても0件。あれ?
なんか同期ズレでもしてんのかな、と思って最初は気にしなかったのですが。
0件になった後受信トレイを再度表示しても0件に戻らない。

Windows、Mac両方同じ現象でした。

しばらく仕事してて、この現象が困ることに気づきました。
「あ、メール件数が増えてる」→「あれ0件」→しばし時間が経つ→最初へ
仕事の邪魔をされてるようでイライラ。

んで、試してみて駄目だったこと一覧はこれ。
  • OS再起動(WIndows,Mac共に)
  • Gmailの拡張機能を削除してインストールし直し
  • 複数あるGmail拡張機能のうち、別のものをそれぞれ試す
  • オフラインGmail拡張機能のアンインストール
  • ゾンビプロセスの検査
そのうち変なことに気づきました。
Gmail拡張機能を削除したはずなのに、Chromeストアではインストール済みになっているという現象です、
もしやと思って試したのはこれ。
  • chromeの常駐機能を外す
これが正解でした。
設定する場所はここ。

設定画面から詳細設定を開くと出てきます。

常駐してる場合、Winのシステムトレイにこう表示されてます。
これを設定してから現象が全く発生しなくなりました。
キャッシュを持っている常駐プロセスが同期できてなくて、そっちのステートでも見てしまっていたんでしょうか。
中身まで解析する気はなかったので、対策が分かった時点で終了。
いつのバージョンから出たのかの正しい記憶がないのですが、少なくとも現在のバージョンはこれです。

  22.0.1229.94 m

ご参考まで。

2012年10月10日水曜日

iPhone5用Lightning変換コネクタが到着

朝一でなんか荷物が。


中身は以前注文してあった変換コネクタでした。

こんな箱が1個だけ。開封の儀の始まり。
中身は本体と小冊子x2。箱には陳列棚用の透明フックがぺったりついてます。
外そうとしたら、コネクタが紙に刺さってました。どうやって取り出すか、、。
と思ったら、下を折れば簡単にとれました。短かったんですね。
机にただおいてみました。まあなんとなくってかんじで。
当然以前のコネクタはリバーシブルじゃありません。表面の模様を見ましょう。
プラスチック部分はちゃんと表裏で内容が違います。
先っぽ。樹脂で接続面がコーティングされてるのがわかります。
さっそく接続実験。
無事接続完了。やや硬い印象もあります。
こっちの形にも接続実験。
問題は無さそうです。無理やりの変換なので形状には問題があるとは思われ。

ではiPhone5に接続の儀。
しっかり充電できました。動確完了です。当然ひっくり返してもOKです。
変換コネクタだけ挿した図。縦長の接続面なので見た目より安定性が悪いです。
うーん、ケーブルでもコネクタでもやっぱ安定悪いですね、、、

ということで、特に折れ曲がり防止の突起などは一切ないため、ボキッと行く日がいつか来るのかもしれません。
今までの周辺機器に対応しない等の情報もありますが、充電のみと割り切るのならそれはそれでいいのかも。
iPhone用ケーブルが沢山あるなら悪くはない商品です。



2012年10月2日火曜日

iPhone5の不具合っぽい現象

iPhone4Sから移行して使いまくった感じについて、私の環境で出ている不具合というか未解明な現象を幾つか。

私の実機はこう。

 ・キャリア:バンク
 ・色:黒
 ・64GB

キーバッファが勝手に貯まって吐き出される

使い終わってしばらく横に置いてるとたまに発生。
勝手にキータッチ音が高速で何度か鳴り(音がオンなので)操作も勝手に行われます。
初めて出会したときは一瞬ポルターガイストかと思いましたw
購入後最初の電源オフ以降、頻度は減りました。

何度やっても設定が元に戻る

「設定」から入るメニューがいつの間にか戻ってました。
WIFIや通知関連の設定とか。
設定後、即設定アプリを落とすと出たような気も。(かなり再現性低し)
おやすみモードは何度やってもその時間が過ぎるとオフに戻っているので、もうそういう仕様だろうと理解して使ってます。

LTEと3Gの切り替えは時間が掛かる

明らかにLTE圏内と確信できる場所に来ても5分位変わらない事がしばしば。
たいしたことじゃありませんが。

LTE環境で電波が弱いと電話が遠くなる

これは気のせいでしょうか?
なんというか、弱い際に電話が遠いと何度も言われました。

現状そんなレベルで済んでます。
売らなかったiPhone4Sは、SIMを抜いて回収しろとは言われてないらしく、しばらく3Gのアンテナが数本経ってましたが、今は圏外表示するようになってます。