2013年7月21日日曜日

LLS-201買った

SONYのパーソナルコンテンツステーションLLS-201なるものを買いました
これは発表当時から気になっていた製品で、NFCとWiFiに対応したメディアストレージの様な物です。
  1. 取り込む
  2. 見る
  3. ネット利用
とWiFiとスマートフォンを活用して利用することができます。
購入した理由は、
  1. 嫁さんがMAC+iPhone、自分がWindows8+WindowsPhone(Androidも)を使っているので、写真がそれぞれの環境にバラバラに保存されているので一元化したい。
  2. MACでデジカメ写真取り込みに問題が起きやすい、動画の取り込みができない
  3. WiFi内蔵のデジカメを持っている、しかもSONY製品だから、きっと親和性が高いに違いない。(TransJetはどうなった?)
  4. これは売れなそう、普通の人は見向きもしないというか、気が付かないと思う。こんな製品を企画して発売する心意気を買った。
ですが、ちょっと思っていたのと使い勝手が違いました
予想と違ったというか不満な点
  1. ワンタッチでは取り込めない。この製品の売り文句としてワンタッチで取り込みというのがありますが、ワンタッチ取り込みができるのはNFCに対応したスマートフォンだけでした。まぁ分かっていたことですがNFC対応のスマートフォンを持っていなかったので…それにしてもSDカードを直接挿しても自動で取り込んでくれないのは一寸残念。いちいち取り込み操作をスマホからしなければならない。ちなみにNFC対応では無いおサイフケータイを乗せると、LLS-201の製品ページへのリンクが開きます。そこまで出来るのに取り込み操作の簡略には使えないのが残念
  2. スマートフォンで本体を操作して、TVにつないで写真を見ることができる。でも、スマホの操作レスポンスが悪すぎて、使う気がしない。写真一枚見るのに数秒待たなければいけない。
  3. ネット利用はスマホ経由でないと出来ない。クラウドサービスに自動的に転送したりしてくれるわけでは無い。
  4. 電源ボタンの位置がわかりにくい、しばらく使用しないと勝手に電源が切れるのですが、再度利用しようと思ったときに電源ボタンの位置がわからず、持ち上げて本体側面を見ないと見つけられません。そのたびに何だかな〜と思います
  5. ファンの音が結構うるさい。隣の家で掃除機かけてるような音がする。電源が自動的に切れるのも不満だけど、切れないとうるさくて気になる。スタンバイ中ファンは止まっているけどWiFiは生きてる、だと良かったのに
とにかく、スマホが無いと何も出来ないのに、操作のレスポンスが悪くてストレスがたまります。もうちょい何とか出来なかったのかな…と思います。うちの嫁さんに使えるとはとても思えませんでした。デジカメとか携帯をつなげるとボタン一つで全部転送してくれるような簡単操作でないとダメだと思います。

ところで、SONY製のWiFi搭載デジカメですが、いざ繋ごうと思ったら、デジカメ行方不明でどこにあるか分からないと言われてしまった。

というわけで今のところ、まったく役に立っていません





2013年7月13日土曜日

SurfaceRT買いました

先週の事ですが、Surface RT 買いました。
1万円引きキャンペーンが終わる前に買っておこうと思って慌てて買ったのですが、1万円引きは継続するようです。

買ったのは32GBモデルとタイプカバーです。
タッチカバーセットのほうが若干安めだったのですが、やっぱりタッチカバーはキーボード打った感じがしなくてタイプカバーのほうが使いやすそうだったのでタイプカバーにしました

タッチカバーとタイプカバーは重さも値段もさほど変わらないのでタイプカバーにしてよかった
と思います。キーストロークが浅めですが割と普通に使えます(この文章もタイプカバーで入力しています)

一週間ほど使っていますが(家の中で)概ね満足です、インターネットするぐらいならノートPCと変わらないです。電源入れてすぐに使えるので2年前のVAIOより手軽に使えてよい感じです。

ただし、対応アプリは全然足りない。Surface買ったらkindleいらなくなるかな?と思ったのですが、そもそもRTではKindleアプリがありませんでした。
Sonyの電子書籍Readerもありませんでした。あるのは青空文庫とPDFリーダぐらいでしょう。

不満があるとすればそこのところだけです。お金出してでもメジャーどころのアプリは取り揃えてほしいなぁーと思います

メモリは32Gですが、アプリも全然入れてないので今のところは足りています。

2013年1月6日日曜日

あけましておめでとうございます

あけましておめでとうございます 2013年

2012年を振り返ると

ブログ記事7本
WindowsPhone7アプリ6本
Twitter,facebook呟きも殆どなし...

でした


2012年の目標は確かアプリを月1本申請するぞ!でしたが
実際は1年間で申請したアプリは下記の6本でした。

messa_tw
ponca
CouponCamera
fourtaku
DialTimer
AtelierLune

内3本はトライアスロン、1本は芸術の秋コンテスト、1本はGrapeCityのキャンペーンで作ったアプリでした。何の締切もなく作ったアプリはmessa_twの一本だけという。
締切が無いと動き出せなくなってしまった感じです。

去年は勉強会に参加してみたりして、情報発信できる側になりたいなと思ったのですが、実際は追いかけるのがやっとこさで、そういう所までは届かなかったです。日曜プログラマーだし、しょうがないかな?とも思いますが。

あと、勉強会に行って、ふと気が付いたのが、まだ若いと思っていた自分がかなりオッサン後期になっていると。自分以外の皆が、すごく若い、なんかもう輝いて見える。
感覚的には2世代ぐらいの格差がある気がする。育った環境が全然違うのねーと話を聞いてて思うことが結構ある。



さて、2013年は激しく揺れ動く年になる予感がしています。本業ではひと波乱ありそうな気がしている(根拠はないですが)ので、趣味の世界にパワーを持っていくのが難しいかもしれません。

目標は立てずに、アプリ2本ぐらいは作れたらいいなぁと思っています。

そんなわけで、

今年は、

焦らずに、じっくりと腰を据えて何事にも取り組む

事を目標と言えるかわかりませんが、目標とします













2012年9月18日火曜日

WindowsPhone7 アプリで効果音を出す方法

タイマーアプリで効果音を出す必要があって、結構悩んだのでメモしておきます

まず参考にしたページ

Windows Phone 7 で効果音を鳴らす c#研究室



PlaySoundAction ビヘイビア を使う
一番簡単な方法だと思う、ただし短時間に連続してイベントを起こすと、なんか?詰まってならなくなる。一旦音が鳴らなくなるとアプリを起動しなおさないと音は復帰しない
ダイアル操作時のクリック音をカリカリ鳴らすのには使えない


MediaElement を使う
アプリの画面上のどこかにMediaElementを配置する。基本、配置していないとだめ、コードからMediaElementを実行時に生成しても音は鳴らない
Sourceの指定は割と処理が重いみたい、短時間に連続して鳴らす事ができない。そのうち鳴らなくなる。Source指定しないで同じ音を Play するだけなら連続して鳴らす事が出来る。


MediaElementで何とかなると思いましたが、問題発覚。
PlaySoundActionやMediaElementでPlayするとバックグラウンドで再背中の音楽プレイヤーが止まる。

確かバックグランドMusicに影響を与えてはいけないような (下記リンク6.5のあたり)




じゃあ裏で音楽再生中なら効果音ださない様にすれば良いんじゃない?


ただし Xna を利用すると、そのうち例外が起きます


dispatcherのupdateを定期的にする必要があるらしい。

リンク先を参考にupdate処理を追加する



とりあえず例外で落ちる問題は解決、でも、
どうせXna使うならSoundEffect を使えば、裏で再生中の音楽を止めずに効果音の再生が出来る?



se = Microsoft.Xna.Framework.Audio.SoundEffect.FromStream(Microsoft.Xna.Framework.TitleContainer.OpenStream("click.wav"));

こんな感じでSoundEffectクラスを生成して、Play出来る。音楽再生にも影響なし。すばらしい。
ただし、wmaやmp3は再生できないので長めの効果音にはむいていない


Microsoft.Xna.Framework.Media.Song

を使えばwmaでも再生できるけど、MediaElement使った方がいいかな?



結局、タイマーの操作時の効果音はSoundEffectを使って、長いアラーム音はMediaElementを使うことにしました。





あとは、何故かTrophyだとSoundEffectが鳴ったり鳴らなかったりする問題が残ってます









2012年9月16日日曜日

Windows Phone アプリケーション トライアスロン 参加

現在開催中の Windows Phone アプリケーション トライアスロン に参加すべくアプリを3本開発しました


アプリケーショントライアスロンとはナンゾ?というと詳しくはリンクを見てもらって、簡単にいうと、3つのお題に沿ったアプリを指定期間内に公開してコンテストに応募しよう!って内容です


3つのお題と作ったアプリ

[第1種目]  写真加工アプリケーション


  • 写真を撮影、もしくは読み込む機能を有する
  • 取り込んだ写真に何らかの加工を施す機能を有する
  • 取り込んだ写真を加工し Picture Hub に保存する機能を有する
上記3つの条件を全て満たす必要があります

公開したアプリ


お店のタイムセールとか特売情報をスマホで写真を撮ってクーポン画像として簡単に作成してTwitterやFaceBookに情報発信するという内容です。

もともとは、近所のケーキ屋さんに使ってもらいたくてアイデアとして考えていた事をアプリにしてみました。
”今日はショートケーキを売り切りたいから20%オフにします。”みたいな情報がFacebookとかで見れたら会社帰りに買って帰ったりとかできるのにね。って発想です

本来この様な事はソーシャルネットワークを使えば、大手広告代理店主導で無くても出来る事じゃないかなと思います



[第2種目]  タイトルを更新するアプリケーション

  • アプリケーション自身のタイルの内容を変更する機能を有する
  • セカンダリ タイルを追加作成する機能を有する
  • スケジュール機能を使ってタイルの内容が更新される機能を有する
上記のどれか一つを満たす必要があります


公開したアプリ




スタート画面にならんだタイル4枚に4択クイズが書いてあって、タイルを選択して回答するクイズアプリです。

Wp7のタイルの使い方として面白いアイデアじゃないかな?と思って作りました
表に問題、裏に選択肢が書いてあるので、"タイル裏がえるのマダー"って待つ必要があり、UIの操作の流れをワザと乱す感じが面白いです

アプリ自体は単純なのですが、問題を作るのに結構時間が掛かって疲れました。クイズ研のオンラインクイズとリンクできたら面白いのですが、今回は頑張って子供の参考書を片手に歴史問題を作りました。

歴史は4択クイズとしては作りやすいだろうと思いましたが、間違った答えを考えるのにかなり苦労しました

プログラム的にはタイルを配置する時に、一度におけるタイルが一枚だけという事にアプリ製作の終盤に気が付いて困りましたが、なんとか誤魔化しながら4枚タイルを並べることに成功しました


その他、タイルを書き換えた後にアプリを終了する必要があるのですが、MSのエバンジェリストの高橋さんが紹介していた内部で例外をわざと起こして終了する方法を採用しました

ただ、公開後のクラッシュレポートがやたら多いのが、これが原因なのか?ちょっと怖いです


アプリ中に出てくるキャラクターは嫁さんに描いてもらいました、ツキネコです

[第3種目]  回る・回すアプリケーション

  • 画面上で何かが回る、反転する
  • デバイスを回したり、返したりして何か操作する
  • 画面上を指で回して何か操作する
上記のどれか一つを満たす必要があります

現在申請中でまだ公開されていません

DialTimer



ダイアルをクリクリっと回して時間設定するタイマーです。キッチンタイマー的な感じです。
アイデアは........まぁ平凡かな.........クリクリ回す操作感に拘ってみることにしました

キッチンタイマーアプリは既存のものが結構ありますが、ダイアル式は無いかなと思いました。直観的な操作と視覚的なイメージで時間経過を感じられると思います


ほぼ全ての動作をダイアル操作でできます。ダイアルを回すとカリカリとクリック音が鳴るのが気持ちいいのですが、プログラムは結構苦労しました。いまだに解決していない問題もあります
(IS12Tではちゃんと鳴るのに、Trophyでは稀にしか鳴りません、謎です。)


Silverlightでの音声再生は扱いが難しくて、そのままではマーケットに申請できるアプリがつくれない様に思います。



プログラム的には殆どビヘイビアで処理してます、BlendでUIデザインを考える時間が一番長かった。Blend最高。


タッチ操作の角度の求め方とか、効果音の再生の仕方とか纏めた記事を書こうかなと思ってます。(当たり前すぎていらない?)










Ponca

久しぶりのブログ更新です。

ComponentOne Studio for Windows Phone無償利用プログラム を利用して作ったWindowsPhone7アプリを先月末に公開しました.


Wp7アプリとしては5本目の公開になります


Ponca 
http://www.windowsphone.com/ja-jp/store/app/ponca/106de6d4-a5ea-4a8a-b140-3f5f8a23d899

です。
アプリ名は Ponca ポイントカードをWindowsPhone7で管理しちゃおうと言う趣旨のアプリです。アメリカの先住民族とは何の関係もありません。

これで財布がポイントカードでパツンパツンにならなくても済むぞ!と息巻いて作りましたが、実際にお店でアプリ画面を提示する勇気はまだありません。
うまくすれば、携帯画面からバーコードを読み取ってもらえるかもしれません。

ナイスアイデアで売れるかも?と思いましたが、既に同じようなアプリは海外製であるようです。しかも無料!



メイン画面



アプリに登録したカードを一覧で表示します。この一覧表示にComponentOne StudioのWrapPanelを使っています。WrapPanelはComponentOneに同梱されているライブラリと比べると地味ですが、Wp7に標準でついてても良いと思うぐらいの機能です。
ただで使わせてもらえて超ラッキーです。去年ポストイットみたいなアプリのStickyItを作った時に使えたらもっと楽にアプリが作れたと思います。

カード登録画面


登録できるポイントカード情報は

  1. カードの表面の写真
  2. カードの裏面の写真
  3. バーコード

です。バーコードさえキッチリと読み取れれば裏面の写真なんて不要でしょう。ただ世の中には読み取れないバーコードというものが結構あります

おまけで QRコードも読めます


カード情報画面



お店でカードありますか?って聞かれたら、この画面を見せます。


思うにポイントカードのバーコードって簡単に読み取れるのに、現金に準ずるような扱いもできたりして結構大事な個人情報じゃないかな?
だから扱いには慎重にすべきだと思います。

ちなみに、この写真の番号は出鱈目です






バーコードの読み取りと表示には Zxing barcode Scanning Library を使用しました





2012年3月22日木曜日

子供用にWindowsPhoneを購入

中2の息子用にWindowsPhoneを買いました。
ガラケーの方が良いんじゃないか?とか色々考えたのですが、スマートフォンを選ぶことにしました。
さてスマホにするといっても iPhonr,Andoroid,WindowsPhone とどれにするか?
Androidは子供に持たせるにはちょっと不安を感じるし、iPhoneはゲームとか遊べ過ぎてあんまり持たせたくない(親の立場からすると、もっと勉強しろと言いたい)のでWindowsPhone7 Is12Tを買うことにしました。
実はお父さんの趣味が一番影響が大きいですが、WindowsPhone7って中学生ぐらいに持たせるには、自由過ぎなさが結構良いのでは?と思いました。
AndroidにしてもiPhoneにしても子供に勝手にいろいろされそうですが、Wp7はどうでしょ?アプリも少ないし、まわりに使っている仲間もまずいないだろうしと普段ならマイナス要素が逆にプラスになるような気がしました


購入して早速、子供用にアカウントを取ってzuneに接続しようとしたところ、保護者による設定をしろとの画面が!良いですね!配慮されてる。
Xboxも保護者による管理とかが出来るのかな



親としては子供にはまだまだ目を光らせておきたい。

保護者のLiveIDを入力

保護者の連絡先を入力

保護者による設定
保護者による設定続き 

保護者による設定続き
保護者による設定続き 
マーケットプレースでの大人向けのゲームをブロックしたり、有料コンテンツの購入をブロックしたりと設定できます。

とりあえずほぼブロック設定をしたのですが、設定後にIS12Tでマーケットプレースを覗いてみると"Girl Strip Game"とか見えてます....う~ん





'},ClipboardSwf:null,Version:'1.5.1'}};dp.SyntaxHighlighter=dp.sh;dp.sh.Toolbar.Commands={ExpandSource:{label:'+ expand source',check:function(highlighter){return highlighter.collapse;},func:function(sender,highlighter) {sender.parentNode.removeChild(sender);highlighter.div.className=highlighter.div.className.replace('collapsed','');}},ViewSource:{label:'view plain',func:function(sender,highlighter) {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/'+code+'');wnd.document.close();}},CopyToClipboard:{label:'copy to clipboard',check:function(){return window.clipboardData!=null||dp.sh.ClipboardSwf!=null;},func:function(sender,highlighter) {var code=dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');if(window.clipboardData) {window.clipboardData.setData('text',code);} else if(dp.sh.ClipboardSwf!=null) {var flashcopier=highlighter.flashCopier;if(flashcopier==null) {flashcopier=document.createElement('div');highlighter.flashCopier=flashcopier;highlighter.div.appendChild(flashcopier);} flashcopier.innerHTML='';} alert('The code is in your clipboard now');}},PrintSource:{label:'print',func:function(sender,highlighter) {var iframe=document.createElement('IFRAME');var doc=null;iframe.style.cssText='position:absolute;width:0px;height:0px;left:-500px;top:-500px;';document.body.appendChild(iframe);doc=iframe.contentWindow.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write('

'+highlighter.div.innerHTML+'

');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();alert('Printing...');document.body.removeChild(iframe);}},About:{label:'?',func:function(highlighter) {var wnd=window.open('','_blank','dialog,width=300,height=150,scrollbars=0');var doc=wnd.document;dp.sh.Utils.CopyStyles(doc,window.document);doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));doc.close();wnd.focus();}}};dp.sh.Toolbar.Create=function(highlighter) {var div=document.createElement('DIV');div.className='tools';for(var name in dp.sh.Toolbar.Commands) {var cmd=dp.sh.Toolbar.Commands[name];if(cmd.check!=null&&!cmd.check(highlighter)) continue;div.innerHTML+=''+cmd.label+'';} return div;} dp.sh.Toolbar.Command=function(name,sender) {var n=sender;while(n!=null&&n.className.indexOf('dp-highlighter')==-1) n=n.parentNode;if(n!=null) dp.sh.Toolbar.Commands[name].func(sender,n.highlighter);} dp.sh.Utils.CopyStyles=function(destDoc,sourceDoc) {var links=sourceDoc.getElementsByTagName('link');for(var i=0;i');} dp.sh.Utils.FixForBlogger=function(str) {return(dp.sh.isBloggerMode==true)?str.replace(/
|<br\s*\/?>/gi,'\n'):str;} dp.sh.RegexLib={MultiLineCComments:new RegExp('/\\*[\\s\\S]*?\\*/','gm'),SingleLineCComments:new RegExp('//.*$','gm'),SingleLinePerlComments:new RegExp('#.*$','gm'),DoubleQuotedString:new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'),SingleQuotedString:new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'",'g')};dp.sh.Match=function(value,index,css) {this.value=value;this.index=index;this.length=value.length;this.css=css;} dp.sh.Highlighter=function() {this.noGutter=false;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;this.wrapColumn=80;this.showColumns=true;} dp.sh.Highlighter.SortCallback=function(m1,m2) {if(m1.indexm2.index) return 1;else {if(m1.lengthm2.length) return 1;} return 0;} dp.sh.Highlighter.prototype.CreateElement=function(name) {var result=document.createElement(name);result.highlighter=this;return result;} dp.sh.Highlighter.prototype.GetMatches=function(regex,css) {var index=0;var match=null;while((match=regex.exec(this.code))!=null) this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);} dp.sh.Highlighter.prototype.AddBit=function(str,css) {if(str==null||str.length==0) return;var span=this.CreateElement('SPAN');str=str.replace(/ /g,' ');str=str.replace(/');if(css!=null) {if((/br/gi).test(str)) {var lines=str.split(' 
');for(var i=0;ic.index)&&(match.index/gi,'\n');var lines=html.split('\n');if(this.addControls==true) this.bar.appendChild(dp.sh.Toolbar.Create(this));if(this.showColumns) {var div=this.CreateElement('div');var columns=this.CreateElement('div');var showEvery=10;var i=1;while(i<=150) {if(i%showEvery==0) {div.innerHTML+=i;i+=(i+'').length;} else {div.innerHTML+='·';i++;}} columns.className='columns';columns.appendChild(div);this.bar.appendChild(columns);} for(var i=0,lineIndex=this.firstLine;i0;i++) {if(Trim(lines[i]).length==0) continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0) min=Math.min(matches[0].length,min);} if(min>0) for(var i=0;i

投票