auのiPhone4SでCメール(SMS)が送信できない、電話できない、ネットワークに繋がらない、EZWEBメールが送受信できないなどのとき

auiPhone4Sで4つの不具合に遭遇しましたが、なんとか全て解決できたので報告します。


購入して2週間ぐらいで以下の4つの不具合に遭遇しました。

  • 電話できない
  • ネットできない
  • EZWEBメールの送受信ができない
  • Cメールの受信はできるが送信のみできない
ダメだった対処
有効だった対処
  • 再起動
  • iPhone4Sで「設定」→「一般」→「リセット」→「すべての設定のリセット」→言語、地域、位置情報サービス、Wi-Fiネットワークを設定→「iCloudバックアップで復元」
  • ※「すべての設定のリセット」じゃなくてiPhone4Sで「設定」→「一般」→「リセット」→「ネットワーク設定をリセット」ではダメでした。
自分で頑張った理由

まず、auショップで見てもらってダメだと「修理交換などはお近くのappleストアに行くか、appleサポート(0120-27753-5)に電話してください」と言われます。
次に、appleサポートに電話して指示された方法でダメだと、修理になり、3〜5日手元からiPhoneなしの状態になります。
「手元からiPhoneなしの状態が発生するのは困る」というと、「3,400円払えば交換だか貸し出しだかで手元から離れないで済む」とのこと
「修理ということはおたくの不具合なのに、私が更にお金を払うのおかしくないですか?」と質問すると「申し訳ありませんが、お支払いいただく形になってしまいます」とのこと
無料で手元からiPhoneを離したくない場合は、自分で頑張るしかないみたいです。
appleストアに行けばもっといいことがあるかもしれませんが、僕は遠かったので行ってません。


おすすめの作業

とりあえず、iPhoneを交換しても初期化しても復元できるように、Wi-Fi経由でネットワークに接続できるなら以下はやっておきましょう
「設定」→「iCloud」→「ストレージとバックアップ」→「iCloudバックアップ:ON」→「今すぐバックアップを作成」
ネットワークに接続できないならPCのiTunesを使ってバックアップを作成(appleサポートからは「iPhone、iPad、iPod を工場出荷時の状態に戻す (初期化する) - Apple サポート」を紹介されましたが、iCloudのほうが簡単です)
http://itunes.apple.com/jp/app/id438171814で集めたなめこも全部復元されたのが嬉しかったです。


僕がやった作業

以下に示すのは正しい対処法ではなく、あくまで僕がこうしたら直ったっていう報告です。
困っている人が原因の切り分けなどに有効活用してもらえればと思います。
困り度の高い順で書きます。


電話できなかったとき

現象
電話 できない
ネット Wi-Fi経由は接続できるが3G経由は接続できない
EZWEBメール Wi-Fi経由は送受信できるが3G経由は送受信できない
Cメール(SMS) 送受信できない
その他 simカードが挿入されていません」とエラーメッセージが表示される
対処:再起動

ネットできなかったとき

現象
電話 できる
ネット Wi-Fi経由は接続できるが3G経由は接続できない
EZWEBメール Wi-Fi経由は送受信できるが3G経由は送受信できない
Cメール(SMS) 送受信できない
その他 safariを起動すると「データ通信機能を起動できませんでした」とエラーメッセージが表示される
対処:「設定」→「一般」→「リセット」→「すべての設定のリセット」→言語、地域、位置情報サービス、Wi-Fiネットワークを設定→「iCloudバックアップで復元」

EZWEBメールが送受信できなかったとき

現象
電話 できる
ネット Wi-Fi経由も3G経由も接続できる
EZWEBメール 送受信できる場合とできない場合がある
Cメール(SMS) 送信のみできない
その他 EZWEBメール新着確認時に「メールサーバーimap.ezweb.ne.jpに応答しません」とエラーメッセージが表示される場合がある
対処:「設定」→「一般」→「リセット」→「すべての設定のリセット」→言語、地域、位置情報サービス、Wi-Fiネットワークを設定→「iCloudバックアップで復元」

Cメール(SMS)が送信のみできなかったとき

現象
電話 できる
ネット Wi-Fi経由も3G経由も接続できる
EZWEBメール 送受信できる
Cメール(SMS) 送信のみできない
その他 Cメール(SMS)を送信すると送信ステータスバーが途中で止まる
対処:「設定」→「一般」→「リセット」→「すべての設定のリセット」→言語、地域、位置情報サービス、Wi-Fiネットワークを設定→「iCloudバックアップで復元」※不具合発生後に行ったバックアップデータでもOKでした。


時系列で現象と対応を書くと以下の順でした。

2011/10/24 電話できない(SIMカードエラー)
2011/10/24 再起動で直る
2011/10/24 Cメール(SMS)が送信のみできない
2011/10/29 EZWEBメールが送受信できない場合が頻発する
2011/10/30 auショップSIMカード交換してもらうが改善なし
2011/10/30 appleサポート(0120-27753-5)に電話してiPhone4Sを工場出荷時状態に復元を指示される(そのとき紹介されたページは「iPhone、iPad、iPod を工場出荷時の状態に戻す (初期化する) - Apple サポート」)
2011/10/30 iPhone4Sを工場出荷時状態に復元するが改善なし
2011/10/30 iPhone4Sを工場出荷時状態に復元し、iCloudバックアップの復元で30分前の状態に復元するが改善なし
2011/10/30 appleサポート(0120-27753-5)に電話して修理を指示される
2011/10/30 3G経由のネット接続ができなくなる
2011/10/30 「すべての設定のリセット」でCメールEZWEBメール、3G経由のネット接続が直る


前回、僕にとってはHTC EVO 3D ISW12HTのほうが100倍良いですって書きましたが、やっぱり1000倍良いです。くどいようですが、僕にとってはの話ですよ。
auiPhone向けにいろいろ対応整備したり、siriの日本語対応とかするころにはぐっとiPhone4Sも良くなってくるのではないでしょうか。来年の春ぐらいかな。
auiPhoneユーザーがんばれ。

auのiPhone4Sでデコメール


やっと、auiPhone4Sデコメールできるアプリが登場しましたね。
デコメーラー
ちょうどiPhone4S発売後1週間後リリースで第一号じゃないかな。


auiPhone4Sスマホデビューした人は@ezweb.ne.jpのメールでかなり困ってるんじゃないでしょうか。
まず、メール設定、アドレスインポートの難易度がかなり高め。
で、デコメ送信不可、絵文字送受信不可、文字化けしまくり、使いづらいメーラー、受信が15分間隔。
普通の女の子は泣くか怒るかのどっちかのはず。


で、とりあえず、絵文字はauの対応までもうしばらくの間あきらめて、「デコメーラー」を使いましょう。
デコメが送信できて、標準でついてるメーラーよりずっと使いやすくて、電池食いそうだけど設定で1分間隔受信もできるし。
インストール後、起動すると出てくる設定画面で@ezweb.ne.jpメールアドレスとそのパスワード(iPhone4S買って帰って最初に設定したときのやつ)入れれば設定完了です。


ちなみに、かみさんがiPhone4Sを買って、僕がHTC EVO 3D ISW12HT買って、両方を毎日使っていますが、僕にとってはHTC EVO 3D ISW12HTが100倍良いです。
僕にとってはの話ですよ。


今後もまだまだ良いアプリが出てiPhoneを助けてくれるでしょう。
auiPhoneユーザーがんばれ。僕はEVO 3Dで楽します。

STANDARDさんのホームページ作らせていただきました


仲良くさせていただいている会津若松のヘアサロン「STANDARD」さんのホームページを作らせていただきました。


STANDARDさんの店長夫妻とは、20年来のお付き合いです。

病的なまでに徹底的にこだわり抜いた感覚で、デザインやら音楽に接する店長と気が合いました。

STANDARD主催として一緒に企画実行した音楽イベント(レコード回すやつ)は、今思い出しても、ネタ、運営ともにかなり上質なものだったと自負しております。





今回のページ作成も、当然お互いにこだわり抜き、結果的に29パターンもHTMLを作って完成。

デザインにここまで注力できるページを作らせてくれるクライアントはなかなかいないので、ずっと前からやらせて欲しいと思っていた仕事でした。

といっても、僕のは職業はSE・プログラマーであって、WEBデザイナーじゃないですけどね。



よかったら、ホームページ、もちろんお店にも、行ってみてください。

STANDARD ホームページ

JavaScriptでconsole.log


JavaScriptで以下みたいに書いてブラウザのコンソールに出力。

console.log('デバッグログ');


以下はOK。


以下はダメ。(エラーになります)

  • Opera10
  • IE7
  • IE6


無念。。


じゃ、こんなのをどこかに追加してみる。

if (typeof window.console != 'object' ) {
  if (window.opera) {
    window.console = {log : opera.postError}
  } else {
    window.console = {log : function(){}};
  }
}

Opera10はOK。
IE6、7はダメだけど、一応エラー回避。

Struts1.2.xでファイルアップロード

ちと最近、Struts1.2.xでファイルアップロードやって面倒だったことがあったので、いまさらまとめ。

マルチパートフォーム処理のアクションから別アクションにフォワードさせると、フォワード先ではパラメーターがアクションフォームに設定されない。

でも、getParameterでは取得できる。


ということでgetParameterした値をアクションフォームに設定するアクションをフォワードの間に挟むと解決できる。
org.apache.struts.util.RequestUtils#populate(java.lang.Object, java.lang.String, java.lang.String, javax.servlet.http.HttpServletRequest)
の処理そのまんまです。

public class ForwardFromMultipartAction extends Action {

  @Override
  public String doAction(ApRequestContext ctx, ApForm actionForm) {

    Enumeration<?> names = getHttpServletRequest(ctx).getParameterNames();
    HashMap<String, Object> properties = new HashMap<String, Object>();

    while (names.hasMoreElements()) {
      String name = (String) names.nextElement();
      Object parameterValue = getHttpServletRequest(ctx)
          .getParameterValues(name);

          if (!(name.startsWith("org.apache.struts."))) {
              properties.put(name, parameterValue);
          }
    }
    try {
      BeanUtils.populate(actionForm, properties);
    } catch (Exception e) {
      throw new ApplicationException("BeanUtils.populate", e);
    }
    return FWD_SUCCESS;
  }
}

あとはstruts-config.xmlでA→BだったのをA→上記のアクション→BとすればOK。

ファイルアップロードの入れ子(ネスト)

ファイルアップロードの話というより、struts入れ子Listのパラメータ設定の話です。

FormFileを要素に持つListをFileListとして、またそのFileListを要素に持つListをFileListListとしてみる。

ということで、アクションフォームはこんな風に作る。

/** 全レコードのアップロードファイルリスト */
private FileListList fileListList = new FileListList();

/**
 * 全レコードのアップロードファイルリスト を返します.
 * @return 全レコードのアップロードファイルリスト
 */
public FileListList getFileListList() {
  return fileListList;
}

/**
 * 全レコードのアップロードファイルリストを設定します.
 * @param fileListList 全回答のアップロードファイルリスト
 */
public void setFileListList(FileListList fileListList) {
  this.fileListList = fileListList;
}

/**
 * 全レコードのアップロードファイルを保持するリスト
 */
public class FileListList extends ArrayList<FileList> {
  
  public FileList get(int index) {
    while (this.size() <= index) {
      this.add(new FileList());
    }
    return super.get(index);
  }
}

/**
 * 各レコードのアップロードファイルを保持するリスト
 */
public class FileList extends ArrayList<FormFile> {
  
  public void setFormFile(int index, FormFile formFile) {
    this.add(index, formFile);
  }
}

HTMLがこんな感じで出力されるように、JSPを書く。
1レコード目
<input type="file" value="" name="fileListList[0].formFile[0]"/>
<input type="file" value="" name="fileListList[0].formFile[1]"/>

2レコード目
<input type="file" value="" name="fileListList[1].formFile[0]"/>
<input type="file" value="" name="fileListList[1].formFile[1]"/>

3レコード目
<input type="file" value="" name="fileListList[2].formFile[0]"/>


例として「fileListList[2].formFile[0]」の値がアクションフォームに設定されるロジックを見て理解してみる。

  1. org.apache.commons.beanutils.PropertyUtilsBean#getIndexedProperty()がfileListList.get(2)を呼び出す。
  2. 上記で呼び出して取得したインスタンスに対しorg.apache.commons.beanutils.PropertyUtilsBean#setIndexedProperty()が取得したインスタンス.setFormFile(0, FormFileインスタンス)を呼び出す。

つまり

  • fileListList.get(2).setFormFile(0, FormFileインスタンス)、つまりFileListListの2番目のFileListのsetFormFileを使って0番目にFormFileをセットする。
  • FileListListやFileListがArrayListを継承する理由は以下のメソッドでListの場合の処理を行ってほしいため。
    • PropertyUtilsBean#getIndexedProperty()
    • PropertyUtilsBean#setIndexedProperty()
  • FileListListでget()をオーバーライドしているのはget(int)が確実に値を返す必要があるから。
  • FileListでsetFormFile()を作成したのはPropertyUtilsBean#setIndexedProperty()がformFile[n]という文字列からsetFormFile(int, FormFile)を呼び出すからファイル要素のnameに対応させる必要がある。

バルバルのホームページ作らせていただきました


行きつけのダイニングバー「ご近所ダイニング・バルバル」のホームページを作らせていただきました。

お店は2009年7月中旬から11月末までシェフの産休のため長期休業なのですが、年末にリニューアルオープンします。

その間もお店の情報を発信するために作りました。




バルバルにはいままで大変お世話になって、僕がIT業界で仕事を始めたばかりのつらい時期を乗り切れたのも、このお店があったからです。

その頃は週3回ぐらい通っていたなー。

マスターや他のお客さんといろいろ話して、シェフに料理を教えてもらったりと、、、まー、最近は結婚したし引っ越したしで、月1回ぐらいですかねー。


好きなお店のホームページを作れるなんてかなり幸せなことだと思います。

また、ホームページとかシステムとか作る技術っていうのは、案外身近なところにも喜んでくれる人が多いんだなーと思いました。


ちょっと仕事が落ち着いたら、またどこかのホームページでも作るかなー。


ご近所ダイニング・バルバル
ご近所ダイニング・バルバル(携帯用)
ご近所ダイニング・バルバルのブログ

Eclipseでリモートデバッグ


いつもローカルデバッグばっかりで、何年かぶりにリモートデバッグやったら手こずったのでメモ。
WebLogic9.2での話。


WebLogicドメイン直下の「startWebLogic.cmd」の適当なところに以下を追記(ドメイン/binの「startWebLogic.cmd」は本体という感じなのでドメイン直下の「startWebLogic.cmd」のほうがいいでしょう)

set JAVA_OPTIONS=%JAVA_OPTIONS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9999


これでWebLogicを起動すると以下のようなログが出る

Listening for transport dt_socket at address: 9999


ということで、WebLogicはポート9999でデバッグ接続を待ってる。


Eclipseの「実行」→「デバッグの構成」→「リモートJavaアプリケーション」右クリック→「新規」で以下を設定

  • 名前:適当
  • プロジェクト:デバッグしたいプロジェクトを選択
  • 接続タイプ:標準(ソケット接続)
  • 接続プロパティー


デバッグ」クリック


デバッグパースペクティブデバッグビューで接続されたことを確認


あとはブレークポイントを付けて、そこが通るような画面遷移をブラウザで操作する。



また、Eclipseをjava1.6以上で動かして、WebLogic9.2〜10.0をjava1.5以下で起動とかデバッグするとエラーになる。(WebLogicをデフォルトのJRockitで動かすなら1.5だからエラーになるはず)
そんなときはeclipseルートディレクトリの「eclipse.ini」に以下を記述

-Dsun.lang.ClassLoader.allowArraySyntax=true

で、Eclipse再起動すれば大丈夫なはず。