技術めいた何か

1人の大学生によるIT系の記事群

cle_analysisのホスティング先の移行をしました/Google Driveのホスティングサービス終了に伴う云々

結論から書くと、cle_analysis使ってくれている人は下記のuriに設定しなおしてねってだけの話

javascript:(function(docbk,funcbk,scrpbk){scrpbk=docbk.createElement('script');scrpbk.src='https://prprhyt.github.io/cle_analysis/cle_analysis_alpha.js';scrpbk.onload=function(){funcbk()};docbk.body.appendChild(scrpbk);funcbk=function(){analysiscle();};})(document)

昨年、Google Driveホスティングサービスの終了のお知らせがありました。2016/8/31にDriveのホスティングサービスが終了してしまうとのことです。

そこで問題になったのは、学内ポータル用のブックマークレットであるcle_analysis

github.com

後輩、同期、先輩で何人かつかってくれている人がいるようなので、移行を検討しました。 (移行済み)

0.drop box

普段つかっていないのでボツ

1.githubのrawを参照してみる

真っ先に思いついたのは、githubのrawを参照するという代替案。
githubリポジトリのページのrawボタンを押して
f:id:atofaer:20160825174510p:plain
urlをコピーして
f:id:atofaer:20160825174517p:plain
ブックマークレット参照先に適用

で実行してみるが・・・

何もおきない

デベロッパーツールで確認すると・・・
f:id:atofaer:20160825174820p:plain
text/plain扱いになっているので読み込めないとのこと

ボツ

2.非公式のrawgitを使う。

rawgitというcdnのサービスがあるようで、githubにあるファイルのミラーリング(?)のようなことをしていてrawgitにコピーされたファイルをjsとして読み込める模様。
cle_analysisのコミットログをみれば履歴が残っているのでわかるけど、1時間くらいの間はこの方法でやるようにREADMEに書いてました。
けど、非公式だし、いつ終わるかわからないしぶっちゃけXSS怖いよね…(おまいう)

ボツ

3.github pagesをつかう

最終的に辿り着いたのはgithub pagesでした。
masterリポジトリからgithub pagesのページを生成できるようになったようです。
なので、masterリポジトリにそのままgithub pagesを適用して(htmlファイルは置いてないけど)jsファイルをgithub pagesのほうへ読みにいけるようにしました。
ついでに、httpsに対応しているようなので(前からだっけ?)セキュアということで(なにより公式なので)

サイヨウ

おしまい

Google Apps Script と Twilio で自作留守電サービスを構築してみた話

2016/08/16

Githubに公開しました。そのうち、いま運用している差分もそっちにあげます。

github.com

 

ブログ更新、久々です。

僕は、格安sim(IIJ mio)のユーザーで留守電サービスを利用していないです。

今回はGoogle Apps Script(無料) と KDDIのTwilio(試用期間で無料)を使ってお遊びで留守電サービスを構築してみました。

 

必要なもの

・携帯の電話番号

Google アカウント

・Twilioのアカウント(新規で作った)

 

全体像の構想

www.questetra.com

上記のページのような具合。Google Apps EngineではなくGoogle Apps Scriptだけど。

実際にはこれに、

・メールで通知する機能

Google Driveのフォルダに録音データを保存する機能

・Twilioのサーバーから録音データを削除する機能

を加えた。

 

留守電として動作させるために、Androidスマホの方でx秒受話しなかったらTwilioの番号へ転送するようにしている。

(試しに40秒で設定中)

 

動作した様子(コーディングとかについては下の方を参照)

f:id:atofaer:20160813033956j:plain

f:id:atofaer:20160813033751j:plain

 

コーディングとか

コーディングは1時ぐらいに開始。雑魚なのでところどころ詰まって終わったのは3時くらい。

 

大まかな流れは

事前にGASのtwilio_ response_voice.gsの公開リンクをTwilioのTwiML AppsのREQUEST URLに登録する。

f:id:atofaer:20160813032426p:plain

Twilioの番号に着信があるとREQUEST URLへPOST(設定次第ではGET)がいくのでTwilioにしてほしい動作に合わせてXMLを返す。

XMLの構成については公式ドキュメントを参照した。

https://jp.twilio.com/docs/api/twiml/record

 

Twilioは受け取ったXMLにもとづいて動作する。今回は女性の声で「只今電話にでることができません〜」といったあと1分が上限の録音をする。

録音が終了すると、TwilioはXMLでいうactionに記したurlへ録音ファイルのurlなどの情報をpostする。それをtwilio_ receive_recorded_voice.gsのdoPostで受け取り、録音ファイルをドライブへ保存したり、そのリンクを入りつけたメールを飛ばしたり、後始末でTwilioサーバー上の録音ファイルを削除したりする。

 

 

twilio_ response_voice.gs

function doGet(e) {
var response_str = "<Response>\n <Say voice=\"woman\" language=\"ja-jp\">只今電話にでることができません。ピーとなったら1分以内の伝言を残してください。</Say>\n <Record action=\"https://script.google.com/macros/s/{GASID}/exec\" method=\"post\" maxLength=\"360\" />\n</Response>";
var out = ContentService.createTextOutput(response_str);
out.setMimeType(ContentService.MimeType.XML);
return out;
}
function doPost(e) {
var response_str = "<Response>\n <Say voice=\"woman\" language=\"ja-jp\">只今電話にでることができません。ピーとなったら1分以内の伝言を残してください。</Say>\n <Record action=\"https://script.google.com/macros/s/{GASID}/exec\" method=\"post\" maxLength=\"360\" />\n</Response>";
var out = ContentService.createTextOutput(response_str);
out.setMimeType(ContentService.MimeType.XML);
return out;
}

 

実際には{GASID}の部分は ↓のtwilio_ receive_recorded_voice.gsの公開urlに合わせてIDを指定。

twilio_ receive_recorded_voice.gs

var accountSid="{YourAccountSid}";
var auth_token="{YourToken}";

function doGet() {
var out = ContentService.createTextOutput("");
out.setMimeType(ContentService.MimeType.XML);
return out;
}

function doPost(e)
{
var now_date = new Date();
var file_name = now_date.toLocaleString();
var recode_file_url = e.parameter['RecordingUrl'];
var response = UrlFetchApp.fetch(recode_file_url);
var fileBlob = response.getBlob();
fileBlob.setName(file_name);
var outputDir = DriveApp.getFolderById("{YourFolderID}}");
var voiceDetail = outputDir.createFile(fileBlob);
voiceDetail.setSharing(DriveApp.Access.PRIVATE, DriveApp.Permission.EDIT);
var sharingUrl = voiceDetail.getUrl();

send_e_mail(file_name,sharingUrl);
delete_voice_recorded_data(recode_file_url);
var out = ContentService.createTextOutput("");
out.setMimeType(ContentService.MimeType.XML);
return out;
}

var options = {
method: "delete",
headers: {
Authorization: " Basic " + Utilities.base64Encode(accountSid + ":" + auth_token)
},
muteHttpExceptions: true
};

function delete_voice_recorded_data(url_data){
url_data+=".json";
var now_date = new Date();
var file_name = now_date.toLocaleString();
var response = UrlFetchApp.fetch(url_data,options);
//send_e_mail("元メッセージ削除通知",response.getResponseCode());
}

function send_e_mail(date_str,share_url){
var mailTo = "{yourmailaddress}";
var subject_str = date_str+"の留守電";
var body_str = date_str+"に留守電がありました。内容は以下のリンクから確認してください。";
body_str+="\n\n";
body_str+=share_url;
MailApp.sendEmail(mailTo, subject_str, body_str);
}

 

{ほにゃらら}の部分はその都度任意で。アクセストークンはTwilioのものを使用。

https://jp.twilio.com/user/account/developer-tools/api-explorer/recording-delete

 

上記urlにログインした状態でアクセスするとREST APIの使い方とかが何となくわかる。

 

今わかっている問題点

メールの本文からは相手の電話番号がわからない。

    →Twilioからかかってきた相手の番号をしらべることはできるが、すべて自身の電話から転送する形をとっているため、大元辿った番号がわからない

メールが送られてきた時間とスマホ側の電話の受信履歴を見ればある程度予想はつくだろうけども。。。 

 

ブログ書いちゃったけど、ディジコンのLT_Matchに使うネタとして温存しときたい(願望)

Xperia X Performanceのレビュー(後編)

 

前編はこちら

 

後編では、ノイズキャンセル、Smart Watch3との連携と指紋認証について書こうと思います。

 

まずは、ノイズキャンセルについてイヤホンは画像のものを使いました。

WALKMAN Z(NW-Z1000)に付属していたものです。

 

f:id:atofaer:20160615013134j:plain

 

さて、果たして認識するのか・・・!?

 

f:id:atofaer:20160615013139j:plain

 お、、、

f:id:atofaer:20160615013133p:plain

認識してる!!!

試しに音楽を聞いて見たところしっかり、騒音(主に兄弟のいびき)が軽減されています!!!

 

 

次は、Smart Watch3との連携について

f:id:atofaer:20160615005246j:plain

画像はGoogle Fitの運動時間を表示したものです。

(当日の円グラフを表示することも可能なのですがもたもたしていたら日付が更新されてしまったのでごめんなさい)

先週の土日にほとんど家を出ていないことがわかりますね。。。

 

SW3は使い始めてからそれなりに経つのですが、単体でのGPS搭載が嬉しいです(方向音痴なので)

あと、やはりSONY製品同士ということもあり、親和性は高いです。

また、どちらも防水対応なのでアウトドア スポーツでも安心ですね。

(時期が早いので試せませんでした。残念。)

 

最後に指紋について。

適当な指を登録してかざすと・・・

f:id:atofaer:20160615013140p:plain

 

 

f:id:atofaer:20160615013141p:plainほら見てください、奥さん!!!すごい躍動感ですよ!!

といった具合に、ワンタッチでロック解除ができる指紋認証

画面のロック解除以外にもGoogle Playでアプリや映画を購入するときの認証にも使えます。

 

ちなみに登録はこんな感じ

f:id:atofaer:20160615013143j:plain

f:id:atofaer:20160615013142j:plain

f:id:atofaer:20160615013144j:plain

指をペタペタ付けたり離したりするとゲージが溜まっていって・・・

f:id:atofaer:20160615013145j:plain

 

f:id:atofaer:20160615013147j:plain

こんな具合に登録ができます。

 

ところで、気になりませんか・・・

指以外で登録できるかが・・・

 

ということティッシュチャレンジ!!!

f:id:atofaer:20160615013148j:plain

結果は・・・

f:id:atofaer:20160615013149j:plain

残念ながら失敗。

何度もペタペタしないとならないのですが、ティッシュだとなかなかゲージが溜まらず、終了〜。

やはり、ドコをとっても同じようなパターンだからでしょうか。

 

最後に

Xperia X Performanceを3週間程お借りして、Xperiaの利用をより具体的にイメージすることができました。

欲しいのだけど貯金がそこを尽きそうなのでバイトしてからね^q^

メタルボディつるつるして気持ちいいですよ!!!

Xperia X Performanceのレビュー(前編)

遡ること2週間ほど前、5/26(木)に品川の某所で行われたXperiaアンバサダーミーティングに参加してきました!

atofaer.hatenablog.jp

というのが前回のエントリ。

 

今回はXperiaアンバサダーミーティングでお借りしているXperia X Performanceの簡易的なレビューをしたいと思います。(前編)

 

今回お借りしたのは Xperia X Performanceのドコモ版(SO-04H)です。

色はライムゴールドです。

 

f:id:atofaer:20160615005249j:plain

f:id:atofaer:20160615005250j:plain

さららさした触り心地で手に馴染みます。

 

大きさ比べをしてみました。(Nexus9で撮影)

f:id:atofaer:20160615005242p:plain

左から

普段使いのASUS ZenFone5

今回お借りしているXperia X Performance

私が初めて持ったAndroid端末のSONY WALKMAN Z (NW-Z1000)

イオシスで3000円で投げ売りされていた IS02

です。

Nexus5も所有しているのですが、友人に貸し出し中なので比較できず。。。

ベゼル幅が抑えられているため、同インチのZenfone5とくらべても一回り小さい印象です。

 

厚さの違いはこんな感じ。

f:id:atofaer:20160615005244j:plain

Xperia X Performanceが薄いですね。

 

Antutu3Dベンチの結果(Antutu本体は貸出機の制限なのかインストール出来ませんでした。)

f:id:atofaer:20160615005247j:plain

f:id:atofaer:20160615005251p:plain

 ↓はNexus9での結果です。

f:id:atofaer:20160615005252p:plain

Xperia X PerformanceがNexus9の結果を上回っているので、3Dのパフォーマンスはなかなか良いと思います。

 

今回はこの辺で。続きは後編にまとめます。

(ノイズキャンセルとSW3との連携について)

セキュキャン全国大会2016の応募用紙(前半)

はい。勉強不足です。素人に毛が生えた程度の応募用紙・・・。

 

2週間程前セキュリティ・キャンプ全国大会2016に応募しました。

セキュリティ・キャンプ(以下: セキュキャン)は初めての応募です。

 

2016/06/14 13:08追記:セキュキャンお祈りされました。来年も頑張ります。

 

応募期間終了後から続々と応募者の方が自らの応募用紙を晒していたのですが、みなさんプロすぎて、流れに乗れなかった、というか怖かったのが本音です。

現時点では当落メールは届いていないのですが、いつ届くかもわからないので当落結果が届く前に、公開してしまおうと思いました。

 

身バレ()しそうな部分は省略しています'''文'''で囲ったところは実際の応募用紙には載せていないコメントです。

 

提出したのは締切日の午前3時頃だったはず。計画的に書くべきだと実感しました。

深夜に書いた物が大半です。文体の乱れあり。誤字脱字のオンパレードです。

特に2-3は深夜のテンションと妄想による産物です。許してください許してくださいゆるしt

 

イカが応募用紙です。温かい目で見守ってやってください。。。

 

共通問題 【1-1】:あなたが今まで作ってきたものにはどのようなものがありますか? いくつでもいいので、ありったけ自慢してください。

1.'''ごめんなさい黒歴史です(別のHNで活動していた頃に作ったものについて書きました)'''

2.大学のポータルサイト上の週間カレンダーから情報を抽出してGoogleカレンダーにインポート可能なcsv形式にするスクリプト(ブックマークレット形式)
これも、自分用に作成し、公開した。履修登録した予定と自分の遊びなどその他の予定を一括で管理したく作成した。
最大のメリットは授業予定だけでなく、年度頭に決まっている祝日授業の有無や大学の行事の情報を含めた大学に関する予定の多くをGoogleカレンダーで確認し管理することができることである。
また、Googleカレンダーを利用することでGoogleのサービスとの親和性が非常に高くなる。
私は、スマートフォンも時計もAndroid搭載のものをつかっているのでこれの恩恵を最大限にうけることができている。
特に気に入ったのはGoogle Nowのおかげで「xxという授業に間に合うにはhh:mmまでに(現在地を)出発」という案内をスマートフォンや時計から受け取ることができることである。
これのおかげで遅刻が減りました。
なによりもプライベートの予定と授業を含めた大学の予定を一括で管理できるので、予定のバッティングが減りました。
また、時間と授業名以外にも、教室名、教員名の取得とカレンダーへの登録を行うように組んだので教室の場所をど忘れしても無事に教室にたどり着くことができるようになった。
これも、大学の友人や先輩に使ってもらえてフィードバックを得ることができ、使用感について聞いてうれしく思ったり、問題点を指摘されて改善につなげることができた。

3.猫耳型脳波デバイス改造した健康状態を確認するサービス(チームで開発)
今年の3月にサーバーフェスタ2016~Health Engineering with IoT~というハッカソンで作成した制作物。
大学の同期*2+先輩*1+私 の計4人で参加した10日程度の大会で作成した。
脳波で健康状態を判定する近未来的なデバイスを作り上げることができました。
私は、脳波データの解析部分とサーバー周りを担当しました。ハードウェア部分(猫耳型脳波デバイスの改造)、同期の二人はwebのフロントとプレゼンの準備をそれぞれ担当しました。

10日間の制作や当日の各チームの発表を聞き、ハッカソンでは万全なセキュリティ対策をする暇も余裕もないが、実際に本格的に物を作って運用するとしたらIoTのセキュリティはどうなるのだろうかという疑問が浮かびました。

 

 

共通問題 【1-2】:それをどのように作りましたか?ソフトウェアの場合にはどんな言語で作ったのか、どんなライブラリを使ったのかなども教えてください。。

1については'''同上の理由により削除'''

2についてはブックマークレットであるため、Javascriptで記述している。
初版では大学のポータルサイトに1週間分表示されている”カレンダーの内容を取得->の先送りボタン”
の繰り返しで指定期間分の情報を取得していた。そのため、初版のスクリプトは手で行う作業を自動化しているに過ぎなかった
しかし、ポータルサイトChromeを使って解析していくうちにポータルサイト上の週間カレンダーはAjaxを使ってサーバーからカレンダーの情報を取得していることが分かった。そのため、現在はAjaxを用いて必要期間分の情報を取得するようなスクリプトに作り変えてある。
もちろん、アクセス多過で大学から怒られないように授業コード(これもサイトを解析して内部で利用されていることがわかった)をみて同一授業の情報について取得済みであれば詳細情報(教室、場所、教員名など)の取得を行わないようにしてある。

3については私の担当した範囲では当初は自身で脳波のパーサーを作成しようとしたのですが、あえなく断念。
採取的にはPythonのPythinkgearというパッケージを用いて脳波の解析を行いました。
シリアル通信について学んだり、websocketを使ったサービスの実装ができた良い機会でした。
なによりIoTのセキュリティについて考えるきっかけとなったので参加してよかったと思っています。

 

'''誤字が目立ちますね・・・(「最終的には」が「採取的には」になってる)'''

 

共通問題 【1-3】:開発記のブログなどあれば、それも教えてください。コンテストなどに出品したことがあれば、それも教えてください。

'''このブログとgithubのリンクを貼った'''

 

共通問題 【2-1】:あなたが経験した中で印象に残っている技術的な壁はなんでしょうか?(例えば、C言語プログラムを複数ファイルに分割する方法)

C言語による文字列処理。具体的にはXMLパーサの実装。
実装にポインタを使う必要があるだけでなく、文字の処理用関数がスクリプト言語ほど充実していないためsubstringなどは自分で実装する必要があったため。
また、メモリ管理を怠るとメモリリーク等を起こすこともあり、当時は扱いが非常に難しいと感じた。

 

共通問題 【2-2】:また、その壁を乗り越えるために取った解決法を具体的に教えてください。(例えば、知人に勧められた「○○」という書籍を読んだ)

まず、ポインタについては「苦しんで覚えるC言語のサイトを再度読んで実装に必要なあいまいな点をつぶすように努めた。
また、substring等の実装は紙に実装に何が必要か考えた。
また、実際に書いた処理をデバッガで追って各所で想定通りの動作をしているかを確認して理解を深めた。バグが見つかった時も問題点や現状を紙に書いて混乱しないように工夫した。
メモリリークはデバッガを利用して目星をつけて、その後、コメントアウト等を利用して該当箇所を絞った。


共通問題 【2-3】:その壁を今経験しているであろう初心者にアドバイスをするとしたら、あなたはどんなアドバイスをしますか?

何がわからないのか、あるいは何が不安要素なのかを自分のやりかたで(私は紙に書いた)まず外に出して、そして整理しよう。
次に、わからないところは調べる。調べてわからなかったら知ってそうな人に聞いてみる。周りにいなかったら質問サイト(stackoverflowや、c言語なんでも質問掲示板)等で聞いてみる。
その時には、相手に失礼のないようにまた、初めて見る人でも状況が理解しやすいようになるべく詳細に書くようにしよう。
もし、実装している最中に自分の考えたアルゴリズムや構造がわからなくなりそうだったり、混乱しそうになったら、紙や画面に図形をかいたり、箇条書きのロジックを書いたりして視覚情報にしてみよう。
それを見ながら実装に移れば混乱は未然に防げるはずだ。

上を抑えたうえで、技術的なアドバイスは例えば、文字列操作のポインタを扱うからインクリメントやデクリメント、前置、後置の挙動や、よく使う文字処理の関数についてはちょっとでも不安になったら調べると良いよ。メモリリークについては、最近のVisual Studioであれば下にメモリ使用量が出てくるからテストコードを書いてメモリの使用量の変化を見れば発見があるかもしれないよ。

 

'''は、はずかしすぎる。。。なんだこの口調は・・・!!!妄想の産物だ。なんか変な脳内物質が作用して奇妙な物語を構成してしまったに違いない。「〜かもしれないよ」ってお前は何様だー(爆ぜる)'''

 

共通問題 【3-1】:あなたが今年のセキュリティ・キャンプで受講したいと思っている講義は何ですか?(複数可) そこで、どのようなことを学びたいですか?なぜそれを学びたいのですか?

7-B 組込みリアルタイムOSとIoTシステム演習
私がプログラミングを始めたきっかけが'''同上の理由により削除'''ということもあり、組み込みシステムについて非常に興味があります。
割り込みや例外を処理するリアルタイムOSの仕組み、や汎用システムと実際にはどこが異なるのかを学びたいです。
組込み機器に多く用いられているリアルタイムOSやIoTで必要になる通信ソフトウェアにについて理解を深めたいと考えています


3-B フィジカル・リバースエンジニアリング入門
私は、ソフトウェアやウェブサイトの解析が好きで、共通問題1で述べたスクリプトを作っているときも楽しくて仕方ありませんでした。また、某携帯ゲーム機を改造電池パックを使ってハックしたという記事を見たことがるのでそれに関係がありそうということもあり、興味があります。
物理的なリバースエンジニアリングの方法だけでなく、ソフトウェアでは難読化等の対策があるが、ハードウェアではどのように対策をするのか、そして説明文にある限界とは何なのかについて学びたいです。
ハードウェアよりの解析はあまりやったことが無いのですが、"物理的"な解析に挑戦してみたいと考えました。


1-C 公開鍵暗号のハードウェア実装と攻撃~ICカードが持つ脆弱性とその対策~
来年以降の研究テーマとして暗号理論を扱いたいと考えています。Suicaなどの交通系ICやマイナンバーカード、あるいは学生証などICが埋め込まれているものが身の周りに多くあることもあり、将来扱いたい暗号理論と身近なテーマであるためやってみたいと考えました。
また、軽くて小さく、あまり金銭的コストをかけることができないものが多いICカードでどのような対策が行われているのかを知りたいです。
また、観察したり、解析したりすることが好きなので、電力解析攻撃という単語に興味がひかれました。

共通問題 【3-2】:あなたがセキュリティ・キャンプでやりたいことは何ですか?身につけたいものは何ですか?(複数可) 自由に答えてください。

来年度以降、情報セキュリティの研究をするにあたって必要となるセキュリティへの理解を深めたいです。
また、興味のある分野のこともあまりよく知らない状態にあるので、これから学習したり、研究したりするときの足がかりにしたいと考えています。
また、講師の方々は研究職の方が多くいらしているのでセキュリティの研究になるには何が必要なのかについて知る第一歩にしたいです。
・探求する心

 '''

_人人人人人人人人_
> ・探求する心 <
 ̄Y^Y^Y^Y^Y^Y^Y ̄

 

なんか湧いてるよ!!!

'''

 

共通問題部分は以上になります。いやー恥ずかしい。深夜のテンションだからといって言い訳できないよこれは。。。黒歴史生成器ですね。

セキュキャンの講師の方々は皆プロなのに舐めてかかったような回答だ。恥ずかしい。

もういい年なんだから生意気言うのはほどほどにしないとなぁ(自戒)

 

後半(選択問題)は気が向いたら投下します。

 

初めてXperiaアンバサダーミーティングに参加した話(Xperia X Performance)

久々の投稿です。

 

遡ること2週間ほど前、5/26(木)に品川の某所で行われたXperiaアンバサダーミーティングに参加してきました!

今回はXperiaアンバサダーミーティングを写真とともに振り返りたいと思います。

 

 

まず、イベント自体の感想について

率直にいうと楽しかったです。

こういった類のガジェット系のイベントは初参加でしたが、開発チームの方に直接質問することもでき大変充実した時間を過ごすことができました!

画像はXperia飯です(今回は和洋選べるお弁当でした!おいしかったです!画像は和)

 

f:id:atofaer:20160613224228j:plain 

質問したこと

・国内版の裏面の下部のコーティングについて

その部分がメタル仕様でないことについては発表時点で気になっていたので今回、質問しようと決めていました。

回答を要約すると、

「通品品質の向上のため。日本国内のユーザーの求める通信品質は海外のユーザと比べると高い傾向にあり、それを満たすため」

といった内容の回答をいただくことができました。アンテナ云々というのはなんとなくわかってはいましたが、、、仕方がが無いのでしょう。

 

・各キャリア(Docomo ,au,Softbank)のハードウェア仕様の違いはあるのか

回答を要約すると

「基本は同じ」

らしいです。あとは、通信の部分は各キャリア向けにチューニングをしているとのこと。

 

当日した質問は異常です。

 

 

以下スライドとコメント。

※スライドの写真は他社スマホで撮影したものです

 

 冒頭に、Xperiaのプロモーションの映像を紹介していただきました。

(映像はXperiaの宣伝Twitterの方で紹介されているものと同じです)

f:id:atofaer:20160613225610p:plain

 

 

 

次に、いままでのXperia ZシリーズとXシリーズの方向性の違いについて

f:id:atofaer:20160613224230j:plain

Xperia Xの3大特徴について

 

f:id:atofaer:20160613224232j:plain

ぶ、ブレブレ(泣)

 

加工は色によってヘアライン加工とサンドブラスト加工に分かれています。

ちなみに私が今回お借りしたのはサンドブラスト加工のものです。

 

f:id:atofaer:20160613224234j:plain

インセルタッチパネルによって全面ガラスのカラーリングが可能になったそうです

f:id:atofaer:20160613224235j:plain

 

 

お次はマシンスペックについて

CPUはZ5と比較して約2倍、GPUは1.4倍高速化(凄い)

さらに通信速度(Docomo)も

Z5: 225Mbps→ X Performance : 275Mbps と向上

f:id:atofaer:20160613224236j:plain

 

CPUの性能向上によってゲーム等のレスポンスも向上

 

f:id:atofaer:20160613224237j:plain

CPUの次はバッテリーについて

CPUのチューニングにより消費電力を大幅に削減したことにより日常使いに大幅に削減できているようです。

f:id:atofaer:20160613224238j:plain

 

バッテリーの充電についても新しいアルゴリズムの導入によってバッテリーの負荷を軽減

f:id:atofaer:20160613224239j:plain

 

放熱性能についてはChipと背面メタルの採用によって放熱性能がZ5と比べて30%向上

 

f:id:atofaer:20160613224240j:plain

 

次は、カメラについて!

インターフェースの説明等もありましたが私が特に気になったのは「オートフォーカス」について

イメージセンサから取得した情報から距離情報のマッピングを行うのですが、X Performanceでは新しい方式を採用し、オートフォーカスの性能を上昇させています。そのアルゴリズムの概要について説明をしていただけました(が撮影禁止なのでスライドはありませんごめんなさい)

写真のスライドはXperia Z5のものの説明です。

f:id:atofaer:20160613224243j:plain

f:id:atofaer:20160613224244j:plain

f:id:atofaer:20160613224245j:plain

f:id:atofaer:20160613224247j:plain

f:id:atofaer:20160613224248j:plain

f:id:atofaer:20160613224246j:plain

 

次はフロントカメラについてノイズ除去の技術によって暗いシーンでも鮮明な写真の撮影が可能

f:id:atofaer:20160613224251j:plain

f:id:atofaer:20160613224249j:plain

 

次は、ディスプレイについて

SONYブラビアで養った技術を用いることでディスプレイの色域を美しく表現

スライドにもあるようにOne SONYを目指したものであるとのこと。

f:id:atofaer:20160613224254j:plain

f:id:atofaer:20160613224257j:plain

f:id:atofaer:20160613224255j:plain

 

次は、オーディオについて、

f:id:atofaer:20160613224301j:plain

マイク穴の位置については天板と底面に採用することで、通話と動画撮影における集音の両立をしているそうです。

f:id:atofaer:20160613224302j:plain

 

また、ノイズリダクションについては新しいノイズキャンセリング技術によって微小なノイズを正確に除去

 

f:id:atofaer:20160613224259j:plain

Z5にもあったバイノーラル録音がチューニング見直しによって進化

 

グラフにするとこのようになるそうです。

f:id:atofaer:20160613224305j:plain

 

 

 

感想と気になった部分のスライドは以上になります。

本体のレビューについては次回ということで!

 

 

HTML5+Javascriptでドット画像への変換をしてみた

HTML5 + JSで画像処理の第3弾

前回は去年(2015)の8月に2値化処理やってみた旨を記事にしました。

atofaer.hatenablog.jp

今回は、指定画像を元にドット画像を生成する処理を書いてみました。

処理の流れは以下のようになりました。

  1. 画像読み込み
  2. 縦の辺の長さと横の辺の長さの公約数を求めて配列に格納(ドットの辺の長さ)
  3. ループで各ドットの矩形内のrgb値から1ピクセルごとのhue値(色相/0-359)を求める。また、その時のrgb値を連想配列に入れていおく
    hue値が重複した時は古いrgb値が優先される
  4. 3の1ループ毎に求めたhue値を6つのグループに分ける
    1. 330〜||〜29
    2. 30〜89
    3. 90〜149
    4. 150〜209
    5. 210〜269
    6. 270〜329
  5. 矩形内のhue値のグループ分けが済んだら、一番要素数の多いグループを特定
  6. 5で特定したグループのhue値を昇順にソートして中央値(偶数の時は中央の二値の小さい方)を求める。
  7. 6で得たhue値から、連想配列からrgb値を得る
  8. 7で得たrgb値でドット内の矩形を塗りつぶす

ソースコードGitHubにあげてあります。

github.com

最後に

一通り処理を書いた後に、調べたところ、ベクトルを使う方法があるみたいですね。

それはまたの機会に。。。