2011年12月2日金曜日

PHP用都道府県コード配列

こういうの案外使うからメモしておきます。

selectフォーム作るときなんかに使ってください。

$prefecture_list = array(
   '01' => '北海道',
   '02' => '青森県',
   '03' => '岩手県',
   '04' => '宮城県',
   '05' => '秋田県',
   '06' => '山形県',
   '07' => '福島県',
   '08' => '茨城県',
   '09' => '栃木県',
   '10' => '群馬県',
   '11' => '埼玉県',
   '12' => '千葉県',
   '13' => '東京都',
   '14' => '神奈川県',
   '15' => '新潟県',
   '16' => '富山県',
   '17' => '石川県',
   '18' => '福井県',
   '19' => '山梨県',
   '20' => '長野県',
   '21' => '岐阜県',
   '22' => '静岡県',
   '23' => '愛知県',
   '24' => '三重県',
   '25' => '滋賀県',
   '26' => '京都府',
   '27' => '大阪府',
   '28' => '兵庫県',
   '29' => '奈良県',
   '30' => '和歌山県',
   '31' => '鳥取県',
   '32' => '島根県',
   '33' => '岡山県',
   '34' => '広島県',
   '35' => '山口県',
   '36' => '徳島県',
   '37' => '香川県',
   '38' => '愛媛県',
   '39' => '高知県',
   '40' => '福岡県',
   '41' => '佐賀県',
   '42' => '長崎県',
   '43' => '熊本県',
   '44' => '大分県',
   '45' => '宮崎県',
   '46' => '鹿児島県',
   '47' => '沖縄県'
              );

2011年10月18日火曜日

【Android】ワイプアニメーション作ってみた

どうせネットに転がっているだろうと思ったんですが、案外見つからなかったので作りました。
FPS30で10px広がっていきます。 FPSManagerクラスはこちらより利用させていただきました。


ありがたや、ありがたや。
public class WipeView extends SurfaceView implements SurfaceHolder.Callback{
 
 private int viewWidth;
 private int viewHeight;
 private Paint paint;
 private int radius = 0;
 private Thread wipeAnimation;
 private FPSManager manage = new FPSManager(30);
 
 public WipeView(Context context) {
  super(context);
  init();
 }
 public WipeView(Context context, AttributeSet attrs) {
  super(context, attrs);
  init();
 }

 public WipeView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init();
 }
 
 public void init(){
  //背景を透過するため
  getHolder().setFormat(PixelFormat.TRANSLUCENT);
  getHolder().addCallback(this);
  setZOrderOnTop(true);
 }

 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  wipeAnimation = new Thread(wipeZoomIn);
  wipeAnimation.start();
 }

 @Override
 protected void onDraw(Canvas canvas){
  super.onDraw(canvas);
  this.viewHeight = canvas.getHeight();
  this.viewWidth = canvas.getWidth();
  //前フレームの描画をクリア
  canvas.drawColor(0, PorterDuff.Mode.CLEAR);
  //くり抜く円のパス
  Path clip = new Path();
  clip.addCircle(viewWidth/2, viewHeight/2, radius, Path.Direction.CW);
  canvas.clipPath(clip, Op.DIFFERENCE);
  paint = new Paint();
  paint.setColor(Color.BLACK);
  canvas.drawPaint(paint);
  Log.d("debug", "radius = " + radius);
 }
 
 Runnable wipeZoomIn = new Runnable(){
  @Override
  public void run() {
   SurfaceHolder holder = getHolder();
   try{
    while(wipeAnimation != null){
     TimeUnit.NANOSECONDS.sleep(manage.state());
     Canvas canvas = holder.lockCanvas();
     if(canvas != null){
      radius += 10;
      onDraw(canvas);
      holder.unlockCanvasAndPost(canvas);
      if(radius >= viewWidth){
       break;
      }
     }
    }
   }catch(Exception e){
    
   }
   return;
  }
 };
 
 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
 }
 
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  wipeAnimation = null;
 }

}

2011年9月12日月曜日

onTouchListenerでACTION_UPが発動しない

下らないことで困ったのでメモ

AndroidでViewにOnTouchListenerを実装するとまずMotionEventにACTION_DOWNが飛んできますが、なぜかACTION_UPが反応しない。。。

何でかと思ったらどうやらonTouch()メソッドでtrue返さなきゃいけないらしい。
ドキュメントには以下の記述

True if the listener has consumed the event, false otherwise.
http://developer.android.com/intl/ja/reference/android/view/View.OnTouchListener.html

それにしても仕事する気が起きない

2011年8月20日土曜日

高校野球

甲子園も大詰めとなってきましたね。

個人的に一番盛り上がったのは神奈川県大会のY校対横浜だったかなww

今年甲子園で注目だったのが習志野高校。なんてったって吹奏楽部の応援が尋常じゃない。もう見れないと思うと寂しいですね。。。

特にレッツゴー習志野がかっこいい!!フルユニゾンからの最後のハーモニーがブルッとくるレベル

音聞くとどう考えても甲子園球場に天井があるとしか思えないww

2011年8月16日火曜日

富士五湖ツーリングレポート

少々遅くなりましたが、この夏のツーリングレポートです。

今回は1泊2日での富士五湖キャンプツーリング!!
メンバーはいつものSevenSwell3人とうちの嫁。

集合は例のごとく5時ですのでパッキング時間も考慮して4時前気起床です。
こういう日って難なく起きれるんですよ。平日は8時でも辛いのに←

さて、心配性のキャプテンは荷物満載!2人分のうちより多いってどういうことだよww


今回はバイク乗りのメッカ「東名~ヤビツ~宮ヶ瀬~道志」ルートです。
峠を上りお馴染みのヤビツ峠展望台へ。東名も空いてたのでこの時点でまだ7時


相変わらずヤビツはタイトなので荷物満載&タンデムには厳しいですね。


しっかし山は涼しい!!この日都内は猛暑日らしいですが、大山周辺は25℃切ってます。清流がいかにも涼しげですな。





峠を登りきり、道志道を抜けるとこちらもお馴染み道の駅どうし。
某巨大掲示板では猫とホモの目撃情報が随時更新されてますねww

ここの裏の川も冷たくて気持ちいい!!
今年度より弊社へ入社した後輩君は頭から逝ってます


そんなうちに本日の宿である本栖湖キャンプ場へ到着!!
さすがに野宿は手慣れたもので、設営はスピーディー。
他2名は水遊びしているので自分は嫁と周辺ツーリング。ほとんど走ってばかりで寄ったのは富士の風穴だけ







洞窟内が涼しいだけに外出たときの反動が辛い。まぁそれでも山なので涼しいけどね
水遊びも落ち着いたところで、温泉へ。富士眺望の湯ゆらりとかいうところでなかなか素敵だった。
さすがに写真はとれないけど、おすすめです。タオルとかも全て貸出なのでライダーにはうれしいですね。
夕食はキャンプと言えばということで、BBQ


予定ではGETした魚が食えると思ってたけど不漁だったようで。。。

2日目はしっかりリベンジしてもらいましたよ。まぁ食えたもんじゃなかったけどww




キャンプ場のチェックアウトは12時なのでギリギリまで粘って富士山一周します。
静岡県入るとすぐに謎のバイク博物館が!!


とりあえずYAー1は抑えておきました。他にも色々ありましたが入場料500円はちと高いか?


お昼は定番の富士宮焼きそば!!
横須賀でも食える店があったので初めてではないけど、本場はやはり違う??
正直同じだったかもww


帰りは富士スカイラインから、東名へ。
東名上りは事故渋滞で大井松田から横浜町田まで動かないので厚木から下道で帰りました。




まぁ今回も事故なく帰宅できてなによりです。家に帰るまでがツーリングです。
次は奥多摩あたりか、グンマーのリベンジか。。。



2011年8月15日月曜日

【Android】HTMLで太字表示

AndroidのWebViewではfont-weight: bold属性を指定しても日本語が太字になりません。

そもそも太字用フォントがOSに組み込まれていないのでしょう。

仕方が無いのでそれっぽくしてみました

text-shadow:1px 0 1px black;

邪道かな??

2011年6月15日水曜日

ブルーレイ

先日ブルーレイの話を書き込みましたが、結局テレビ用のプレーヤーを無難に買いました。

接続環境は当然HDMIと光デジタル音声です。

AC/DCのBlack Iceツアーのブルーレイを購入して早速視聴したのですが、解像度の高さが予想以上にすごい。

早くSTARWARSみてぇ!!

【Android】WebViewのjavascriptとネイティブの連携

AndroidではWebViewに表示したjavascriptからJavaで記述したアプリのソースを起動できる仕組みが用意されています。
肝はWebViewのaddJavascriptInterface()メソッド。
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        WebView web = (WebView)this.findViewById(R.id.webkitWebView1);
        web.getSettings().setJavaScriptEnabled(true);
        ClickEvent obj = new ClickEvent();
        web.addJavascriptInterface(obj, "android");
        web.loadUrl("file:///android_asset/index.html");
    }
    
    public class ClickEvent{
     
     public void callEvent(){
      //任意の処理
     }
    }

このような記述をするとClickEventクラスのインスタンスobjをjavascript上でandroidというオブジェクト名で起動できます。
具体的に、callEventメソッドを呼ぶにはこんな感じ。
android.callEvent();

この処理でUIの書き換えもインテントの発行もできます。
実態はWEBアプリでもネイティブアプリっぽく作れますね。

2011年5月19日木曜日

【Android】アプリを終了させる

マルチタスクがウリのAndroidですが、アプリから自分自身を終了させたい場合があると思います。

とりあえず3つほど方法を

①System.exit();
文字通り強制終了です。Activityのライフサイクルも無視しますからおすすめできないと思います。
もしかすると予想だにしない動作をする可能性があります。

②ActivityManager.restartPackage(PackageName);
なんか正統派な気がするようなww
ただ同一アプリ内でonPause中のActivityがあるとそれが起動します。
ActivityManager manager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());

③Activity.moveTaskToBack(true);
これは該当するアプリのActivityをすべてonPause()状態にします。ですので復帰時にはonCreate()は通りません。
基本的にホームボタンを押したときと同じ動作です。

④Activity.finish()
こちらは③と違い、ActivityをDestryしますが、あくまでActivity単位ですのでアプリまるごと終了というわけではありません。戻るボタンを押したときと同じです。

ちなみにマニフェストにを記述するとActivityをスタックしなくなります。
ということはfinish()すればすべて終了しますね。ただし戻れないActivityになります。

ブルーレイドライブ 再生スペック

STARWARSコンプリートサーガが発表されましたね。

今まで見向きもしなかったブルーレイの再生環境が必要になりそうです。

PC用のドライブを買うか、またはテレビで見るようなプレーヤーにするか悩みどころです。

PC用のドライブだとハードスペックがネックになるようです。折角買ったのにカクカクじゃたまらん
そこでこんなの発見↓↓

自分のパソコンでBlu-rayが問題なく再生できるかどうかが数秒でわかるフリーソフト
http://gigazine.net/news/20090114_blu_ray_disc_advisor/

PS3買うっていう選択肢もありましたね笑

【Android】画像のトリミング

GridViewに画像の部分的なものを並べたい要求があったので、Bitmapを切断するViewを渡してみた。


private class GridImageView extends ImageView{

public GridImageView(Context context) {
super(context);
}

public Bitmap cutBitmap(Bitmap bmp) {
Bitmap result = Bitmap.createBitmap(bmp.getWidth() / 3 ,bmp.getHeight() ,Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(bmp, 0, 0, null);
return result;
}
}

とりあえず横に3等分して真ん中だけ表示する感じ。

2011年5月6日金曜日

Goproで車載動画【SR400】

会社から借りたGoproでゴールデンウィークのツーリング中車載動画を撮影してみました。

マウント方法は付属の吸盤でタンクに設置しています。撮影道路は国道最高地点で有名な志賀草津道路です。

【Android】TexiViewの文字に縁取り

当たり前ですが、白い背景に白い文字だと縁取りとかしないと見えなくなりますよね?

だからといって他の色と言っても、背景が可変の場合そうもいかず縁取りが欲しくなると思います。

結論から言いますと、TextViewでは厳密な意味での縁取りはできません。Viewを自作してdrawtextでなんとかするしかないです。

ただ、影は付けれます。自分的にはこれで満足です。

setShadowLayer(float radius, float dx, float dy, int color);

xmlで指定することもできます。Texiview シャドウとかググると色々出てきます。

2011年5月2日月曜日

Activity名文字列からintent発行

なぜか気がつかなかったのでメモ。


明示intentの引数はClassですので、通常Activity.classにします。

Activity名を文字列変数などで格納している場合Class.forName("Activity")で起動できた。
当たり前ですね。

ゲームのセーブ機能なんかに使えるかな?

2011年5月1日日曜日

戻れないActivityをつくる

Androidで戻れないActvityをつくるには?


Intent発行したらfinish()メソッド実行するだけでした

2011年4月15日金曜日

【Android】サービス起動時に引数を渡す

ちょっと困ったのでメモ。

AndroidでActivityから別Activityに情報を渡す際は、Extraの利用が一般的だと思います。

しかし、Serviceの場合はgetIntentメソッドが無いので困った。

よくよく考えて見ればonStart()が引数でintentとってるじゃん!!

ということでこんな感じ↓
@Override
public void onStart(Intent intent, int startId){
   this.dataSource = intent.getStringExtra(タグ名);


2011年4月12日火曜日

openPNEでスマートフォン表示その2

openPNEでスマートフォン表示する際に、UserAgentの判定をcontroller.php内のexecute()で行ってたら、問題が発生。

do系の処理時に、直接forwordを呼ばれる場合があるようでその時にモジュール名にktaiを渡すと弾かれてしまう。
すでに他のページが見れる状態ならおそらく何も処理をせずにh_homeが表示される。

リダイレクトを使っているところはモジュールを再判定するので問題ない

2011年4月7日木曜日

smartyで配列ダンプ

{$var_arr|@debug_print_var}


こういうちょっとしたことで案外困るんデスネ。。。

2011年4月6日水曜日

PHPでマルチスレッド (非同期)

なんかかっこいいタイトル付けてますが、コマンド実行して出力を/dev/nullに捨てるだけ

system('スクリプト等' > /dev/null &, );

こんな感じのリダイレクトすれば処理を待ちません。
exec()でも同様です。

別サーバーへスクリプト流すのにレスポンスを待たせたくなかったのでやってみました。

openPNEでスマートフォン表示

スマートフォン用の表示というより、テンプレートの切り分け方に関して発見したのでメモ。

テンプレートファイルをセットしているのはcontroller.phpのopenpne_forwardメソッド。
150行目付近でdo系かpage系か判定した直後

$smarty->templates_dir = $module . '/templates';

これ↑

$module変数はこのメソッドの前にopenpne_execute内でisKtaiUserAgentにて判定。
要は携帯のエージェントじゃなきゃPCで来る。

ので、こんな感じのことやればいいのではないかと


if($module == 'pc' && (strstr($_SERVER['HTTP_USER_AGENT'], 'iPhone')|| strstr($_SERVER['HTTP_USER_AGENT'], 'Android'))){
         $smarty->templates_dir = 'ディレクトリ名/templates';
        }else{
         $smarty->templates_dir = $module . '/templates';
        }

こうすればロジックはPCでテンプレートだけ別物を使うことが可能ではないでしょうか?

2011年4月2日土曜日

AndroidエミュレーターからホストPCにアクセス

ちょっと困ったのでメモ。

Androidアプリの開発する際に、ホストPCのローカルサーバーにエミュレータからアクセスしたいことがあるかともいます。

その際、localhostや127.0.0.1ではエミュレータ自身にリクエストしてしまいます。iPhoneシュミレータは確かこれでホストPCにいくはず。

正しくは10.0.2.2がホストPCになる。
バーチャルホストなどでhostsを書き換える場合は/system/etc/hostsを書き換える。

adb shellにはviなどのエディタコマンドがないのでddmsやadb pullコマンドなどを使ってファイルを引っ張り出して編集します。

ちなみに実機に場合はhostsの書き換えにルート化が必要です。
IPはローカルIPでやるのが無難かと思います。

ソース(英語)
http://developer.android.com/guide/developing/tools/emulator.html

ブログ始めてみました

記念すべき初投稿ですが、早速ネタがありません。

まぁ技術メモなので見る人もそういないでしょうが。。。
(だったらEvernoteでも使ってろよ!!)

まぁIT業界の方なら経験あるかと思いますが、フレームワークなんか使っててクラスの仕様とかわからなくなるとドキュメントよりブログの方がわかりやすい場合もありますよね。
当然情報の信頼性に関して裏付けが必要ですが・・・
私もCakePHPの件では大変お世話になりました笑

間違ったことがあれば誰か見た人が訂正してくれることもありますし、これは純粋なオンラインメモにはない強みですね。

最近ではAndroidネタなんかも多いですね。
僕ももう少し身についたら、かっちょいいクラスでも公開してみたいな。

さて、このブログを始めるに当たってどこのサービスを使おうか少々悩みました。
Webの開発とかやってるわりにソーシャルメディアとか疎いもんで。。。

結果、このbloggerを選んだわけです。理由は単純に私がGoogleサービスにどっぷりだからです。
メールは当然Gmail、ブラウザはChrome、携帯も先日Android(HT-03A)からAndroid(XPERIA arc)に変えました。

Androidの専用アプリやPicasaとの親和性なんかも期待してます。
ブログサービスは他のところを知らないので比較はできませんがインプレッションなんかもしようかと思います。