2017年4月28日金曜日

フィリピン航空で行くセブ島の旅


おひさしぶりです。ありかわです。
先日がっつり休みをとってセブ島行ってきました!

今回は、ちょと面白い機内サービスがあったのでご紹介します。

セブ島へはフィリピン航空で行ったのですが、フィリピン航空って
機内のエンターテイメント設備がないんですよ。
あの座席についてる映画とか見れるやつです。

機内暇やなぁ~って思ってたらフィリピン航空では機内のWi-Fiで
映画とか配信してるとのこと!

「myPAL Player」っていうアプリをスマートフォンやタブレットに
インストールするだけで誰でも機内のエンターテイメントサービスを利用できます。

フィリピン航空をご利用される際は、インストールしておくと良いと思います。
※機内のWi-Fiではアプリをダウンロードできません。


「myPAL Player」は以下からダウンロードできます。

〇iOS
https://itunes.apple.com/jp/app/mypal-player/id983958028?mt=8



↓アプリ(iOS版)はこんな感じです。

こんなアイコン。
離陸後安定航行にうつらないと
使用できません。


トップ画面
映画の他に音楽や
現在位置の表示なども。


そうそう。機内にイヤホンが無いので持参しないと映画とか楽しめません。ご注意を!

それじゃまた。



2017年4月20日木曜日

KOBE TodayのAPIを使ってみた!

「KOBE Today」って知ってますか?

今月、神戸市が開設した、神戸市内で開催されるイベント情報を発信するサイトです。
https://data.city.kobe.lg.jp/eventdata/

そのイベント情報を取得できるAPIが公開されているということなので、さっそく使ってみました。

データの形式はLinked Open Data (LOD)、それをSPARQLというSQLに似たクエリ言語を使って取得する、とのこと。
どちらも初めてお目にかかるので、何がなんやらという感じだったのですが、データ構造の理解に下記の情報が役立ちました。

SPARQLを利用した逆マッシュアップ-プログラミングを必要としないアプリ作成方法-

例えば、イベント名、開始・終了日、場所、URLを、終了日順に先頭から10件取得する場合は次のようなクエリを書きます。

 
PREFIX ic: <http://imi.go.jp/ns/core/rdf#>
PREFIX schema: <http://schema.org/>

select distinct ?name ?datef ?datet ?place ?url where {
?s ic:名称/ic:表記 ?name .
?s ic:期間 [ ic:開始日 ?datef; ic:終了日 ?datet ] .
?s ic:開催場所/ic:名称/ic:表記 ?place .
?s schema:url ?url .
}
ORDER BY ?datet
LIMIT 10


このクエリを改行も気にせずそのままURLエンコードして、

 
https://data.city.kobe.lg.jp/sparql?query=(エンコードしたクエリ)


のようにリクエストすればデータが取得できます。
取得したデータをアプリで表示してみました。

















私のような古い人間はとりあえずフォームアプリを作ってしまいがちですが、
ありさんがJavaScriptを使って、このページの右側に表示するようにしてくれました。

またいつか、どこかで。

2017年4月13日木曜日

%p 使ってますか?



こんにちは。よっしーです。

今日は『C言語』についてお話ししたいと思います。

C言語にはポインタというものがあります。

メモリ上のアドレスを指し示すものですが、
このアドレスの値が知りたい場合、以下のような
コードを組むケースがあります。

char* p = (char*)malloc(BUF_SIZE);
printf("p=%x\n", p);

ポインタ値を出力するため、
フォーマット指定子に "%x" を使用するという
よくあるコードですが、

実はこれ、あまりよくないコードです。


というのも、最近、
ILP32で組まれているコードをLP64に対応(64bit化)する。
というお仕事があり、

試しに64bit環境で、既存のILP32コードをビルドすると、
上記のようなコードは、以下のようなワーニングが出力されます。

warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘char *’


そもそも "%x" は、unsigned int を 16進数表示 する。という指定子なので、
ポインタを対象に使用することが間違いです。

LP64ではポインタが64bitの幅を持つこととなるため、
これに "%x" を指定すると、unsigned int(32ビット)に暗黙変換されてしまい、
上位ビットがオーバーフローします。


ポインタの値を出力する場合、ポインタ用のフォーマット指定子 "%p" を使用する。
というのが、正しいコードとなりますので、みなさんも気をつけましょう。

printf("p=%p\n", p);

それでは、また。


2017年4月7日金曜日

メモリ不具合

ある組み込み現場での話。

フラッシュメモリとして eSD※ を使用した環境で、
「製品が起動しなくなる」 という問題があったようです。

  ※eSD: SDカードと同じインターフェースで扱える内蔵メモリ

ご存知のとおり、メモリには 「書込み上限回数」 が決まっているので、
ユースケースを想定して書込み回数を算出し、
それを超えない設計にしますよね。 一日4時間使用して10年分、とか。

そこまではキッチリしていたんですが・・

実は使用した 組込FS(ファイルシステム)  で
 「Write処理をコールしていないのに、内部の同期処理として
  意図しないタイミングで [メモリ書き込み] が行われていた」
という問題があったようです。

その 組込FS は購入ソフトでしたが、それを信じて使っていたら
裏では想定外の書き込みが実行され

さらに 「自分らのソフト設計は大丈夫」 と思い込んだ結果
上限オーバーを検出できず、不具合に繋がったようです。

結果を知ると、部品選定 ・ ソフト設計 ・ 評価 など
各観点での反省点が見えてきますね。

皆さんもメモリ設計する際は、気を付けてくださいね。