雑多なノート

プログラミング初心者がメモとかを書きます。基礎的なこともメモとして。偏食系のアニオタ。

Suicaの入出金判別アルゴリズム

Suicaのデータを読み取ったは良いけど組み合わせが微妙に複雑
解説サイトによっても書いてることが違っているので自分のSuica使って調べたのをまとめてみる.

  • 機器種別:0x16(改札機)
    • 利用種別:0x01(出場)
      • 入出場種別:0x04(定期出場)
      • 入出場種別:0x02(通常出場)
      • 入出場種別:0x03(定期入場)
    • 利用種別:0x14(オートチャージ)
  • 機器種別:0xC7(物販)
  • 機器種別:0xC8(自販機?)
  • 機器種別:0x05(バス)

自分の環境ではこんなもんだった
色んなところで使ってけどここから外れたものは見つからない
wikiにはもっと沢山パターンあるんだけどどんな場合に見れるんだろ

とりあえずこれを実装した結果
f:id:vayacico:20170707232421p:plain

とりあえず上手くいってる
自分のSuicaをベースにしてやったからうまくいくのは当たり前だけど

卓上カレンダーの電子化

暑さにやられて衝動的にけものフレンズの卓上カレンダーを電子化した
C#でフォームのコントールと枠消してスキャン画像貼り付けてるだけだけど
一応日付によって変わるようには作った
今は亡きガジェット的な感じで

f:id:vayacico:20170701002109p:plain


勢いで作ったけどなんか微妙…
画面サイズのせいで小っちゃいし
うーん

家には置きにくい研究室も情報系の癖にあんまり置ける雰囲気じゃないから仕方ないとはいえ他にいい方法あったよなー
貴重な金曜日の夜に俺は何してんだかねー

androidスマホからSuicaの履歴を10件以上取得する

AndroidSuicaの履歴を読んでみた.
といってもほとんどこのブログの写経だけど

www.kotemaru.org

Felicaにコマンドを送ることでブロックを読み取ることができるらしい.

www.sony.co.jp

FeliCaカード ユーザーズマニュアル 抜粋版を読んで送信コマンドについてはなんとなく理解.
物理層の説明から読んで挫折しかけたけど.
マニュアルがネイティブの日本語であるって素晴らしい.

ブログのサンプルコードだと10件までしか取得してなかったけどブロックエレメントのブロック番号を増やすことで10件より先も取得できた.

なぜか16進数で与えないとエラーになったけど.

本当はループで与えたいんだけど出来なかったのでとても頭の悪いコードになった
まぁ動けばいいか

以下が10-20件の取得するコマンドを生成する部分
参考にしたブログのコードとほとんど変えてない

ByteArrayOutputStream bout = new ByteArrayOutputStream(100);

bout.write(0);          
bout.write(0x06);        
bout.write(idm);         
bout.write(1);          
bout.write(0x0f);       
bout.write(0x09);       
bout.write(10);        

bout.write(0x80);
bout.write(0x0A);

bout.write(0x80);
bout.write(0x0B);

bout.write(0x80);
bout.write(0x0C);

bout.write(0x80);
bout.write(0x0D);

bout.write(0x80);
bout.write(0x0E);

bout.write(0x80);
bout.write(0x0F);

bout.write(0x80);
bout.write(0x10);

bout.write(0x80);
bout.write(0x11);

bout.write(0x80);
bout.write(0x12);

bout.write(0x80);
bout.write(0x13);

サービスコードとブロック数が解析されているのでそこを変えれば他の情報も取得できそう
サイバネ規格 (ICカード) ‐ 通信用語の基礎知識

Onenoteのファイルを間違えて消してしまった

Android Studioを入れたらCドライブが真っ赤になったのでファイルの整理をしてたらOnenoteのファイルを消してしまったらしい.
消したのは実体じゃなくて同期用のファイルだったらしくデータは残っていたが同期に失敗するようになった
インターネットショートカットってOnenoteで使ってたファイルだったのね
f:id:vayacico:20170629001009p:plain

1台しかパソコンないのでそこまで問題ないけどやっぱクラウドにあった方が安心というのとバツマークがついてるのは気分が悪いので復旧を行った
復旧というほど大げさでなくローカルにバックアップファイルを作ってそれを開き直して同期ってだけだけど


まずはファイルからエクスポートでノート全体をonepkgにエクスポートする.
そのあとファイルを開いて新しいノートとして作成する
このままだとローカルだけになるみたいなのでノートを右クリックして[共有]->[ノートの移動]を選択すると無事共有されるようになる(実際に共有する必要はない)

なんとなくやったけど多分これで大丈夫なはず

それにしてもファイルとして実体あるのかそこら辺は隠蔽されて完全にクラウドなのかはっきりして欲しいなー
日記的に使ってるから消えたら結構ショックだぞ

Android Studioのエディタの縦線を消す

Webアプリは満足したのでandroidアプリに再挑戦しようとしたらhello,worldのビルドに10分かかって絶望したばやです.
前にeclipseで作ってた頃はもうちょい早かった気がするんだけどな
大学入学時に買ってもらったノーパソだともう限界なのか


新しいエディタ入れたので早速背景を変更しました.

kobaken.hatenadiary.com

何も引っかかることもなく拍子抜けするほど簡単だった
まぁ皆考えることは同じか

ただ謎の白線が
f:id:vayacico:20170627213225p:plain
何に使うんだろこれ
ここより右にコード書くなってことだろうか
使わないしめぐみんが切れるのも嫌なので治した

[File]->[Editor]->[General]->[Appearance]

の[Show right margin(configured in Code Style options)]のチェックを外したら消えた

本当になんの機能なんだろう


Android studio重々しくて嫌だなー
ノーパソが灼熱になるし

ツイートやお気に入りをギャラリー表示するWebアプリ

Twitter APIを使ってツイートやお気に入りをギャラリー表示するWebアプリを作ってみました.

TWITGALLERY

最初はアニメのハッシュタグで検索して一覧表示するのを考えてたけどあまりハッシュタグで呟いてる人が居ないということでこういう形になりました.
しばらく自分で使ってみたけど好きな絵師さんの絵を見るときに便利なのでなかなか満足.

サーバーサイドはPHPPythonMySQLで作っています.
Twitter APIへのアクセスだけPythonでやるというわけわからない構成になってます.
デザインやらはBootstrap派生のFlatUIとギャラリー表示のためのCollagePlus,ホップアップ表示のためのMagnific Popupを使いました.

ユーザーを指定してそのツイートやお気に入りをギャラリー表示する機能を持ってます.
f:id:vayacico:20170625223545p:plain
画像クリックでホップアップ
f:id:vayacico:20170625223751p:plain
リツイート数やお気に入り数の下限で絞り込みが出来ます.
私はソシャゲ画像や飯テロ画像を除外する機能として使ってます.
f:id:vayacico:20170625224016p:plain
取得画面はこんな感じ.
f:id:vayacico:20170625224107p:plain


余裕ができたら動画も対応したいです.
良かったら使ってやってください.
バグがあったらここのコメントかgmailTwitterでお願いしますm(__)m
アカウント名は全部vayacicoです.

jqueryから属性値を取得すると実体参照が元に戻る?

Magnific PopupとcollagePlusというライブラリでクリックした画像をモーダルで拡大表示する機能を作っていたのだが,完成段階で問題が生じた.
作っていたのはツイッターの画像を一覧表示するWebアプリ.
f:id:vayacico:20170625220232p:plain
ホバーするとツイート情報を表示する.
f:id:vayacico:20170625220250p:plain
画像をクリックするとツイートオブジェクトと一緒にホップアップ表示する.
f:id:vayacico:20170625220318p:plain
APIとはいえ外部からテキストを持ってきているのでXSS対策をする必要があったのだけど,ホバー表示の部分が上手くいかなかった.
htmlspecialcharsで実体参照に変換しているのになぜかHTMLタグが有効になる.
以下が名前に<pre>を入れた場合.
f:id:vayacico:20170625220400p:plain
<pre>タグが作用して正しく表示されていない.
ホップアップは正しく動作するのになんでここだけ上手くいかないのか調べたら属性値から値を取得する段階で実体参照が解除されてるっぽいことが分かった.


ホバー表示はcollagePlusの機能を利用して実装してる.
表示するHTMLはこんな感じでdata-captionという属性の属性値に与える.

<div data-caption="<p class='caption_username'>&lt;pre&gt;</p><p class='caption_screen_name'>@vayacico</p><p class='caption_date'>2017-06-25 12:09:59</p>" class="popup_test" id="878948385163628544">
    <img src="http://pbs.twimg.com/media/DDKm5NEV0AAjlWz.jpg:small">
</div>

ここでdata-captionの内容をjqueryで取得するとこうなった.

 > $('.popup_test').data('caption')
"<p class='caption_username'><pre></p><p class='caption_screen_name'>@vayacico</p><p class='caption_date'>2017-06-25 12:09:59</p>"

実体参照が解除されている.
ライブラリの実装追う気力は無かったのでわからないけど多分こんな感じで取得してHTMLを構成してるのが原因なのかもしれない.

というわけで何となくスッキリしないけどhtmlspecialcharsを2回かけることで何とか正常に表示できるようになった.
根本的な解決になってないような気もするし穴がありそうで落ち着かないのだけど.
この現象でググっても似たような話出てこないので自分が何か勘違いをしているだけな気もするし.

誰か詳しい方見てたら教えてください(+o+)

追記

Twitter APIから返される内容って常に安全なものになってるっぽい?
API叩いてみたら実体参照の状態で帰ってきたんだけど…?