2016-10-16

Lumia950XLにSUICAを内蔵させよう


モバイルSUICA便利ですよね。
一度体験してしまうとカード型SUICAから戻れません。

さてさて、ということでLumiaちゃんです。

iPhone5とか6とかを分解してバックカバー外してSUICAのプラスチック部分を溶剤で溶かして…とかやってる方がいますが、Lumiaのバックカバーは意外と余裕があるので、カードがそのまま入りそうなんですよね。

ということでやってみました。

背面カバーを外すとこんな感じ。




背面カバーは、MicroSD入れたりSIM入れたりするためにそもそも外す前提の構造になっており、簡単に外れます。

さて、写真右のカバー。
白いプラスチックカバーに黒いシールがいくつか貼ってあります。
上のカメラ周りの部分がNFCのアンテナです。(多分)
今回ターゲットにするのは、下のかなり大きな面積を占めるQiのアンテナ。
これを外さないと、Qiのアンテナが邪魔をしてここに埋めるSUICAが反応してくれません。

なのでベリっと…外すのはなんか嫌なので、まず Mozoのカバー を買いました。

このカバーは普通のスマホ向けのケースと違って、裏をまるっと入れ替えるタイプで、着せ替えみたいにできます。
選んだやつはレザー風で良い感じです。

海外の通販サイトでぽちっとやって、1週間後くらいに届きました。

開けてみたら純正と同じ構造で、Qiのアンテナはやっぱり付いてます。
(Qiなしのやつ売ってくれればいいのに…)
ということで、さっそくバリバリと剥がしていきます。

剥がしたものはとてもお見せできる状態ではなかったので割愛しますが…
一番外側…というかカバー側に Qi のアンテナがついてました。銅線がぐるぐるしてるやつです。
そこに、ペラペラの何かを干渉しないようにするシートみたいなのが入ってました。
それが黒いシールで覆われている感じで。
これらを大胆かつ慎重に剥がしていきます。

剥がれました。



だいぶ汚い…

ここに適当にSUICAを入れて蓋をして…
はい、改札は反応してくれませんでした。
(迷惑にならないように後ろに人がいない時を狙って実験しました)
残念ですが、半分予想通りですね。

ということで、電磁波干渉防止シートを買ってみます。

これを電池の上に載せて、そこにさらにSUICAを載せます。



最後に蓋をカチッとはめて、完成です。
Qiは使えなくなりましたが、本体、カードともに傷つけず完成したので満足度はかなり高いです。

NuANS Neo? 知らない子ですね…

2016-09-18

ISUCON6 負けてきました

そういえば久しぶりの記事になってしまった…
以下、すごくとりとめのない日記みたいな記事です。

去年はタイミング合わずに出られなかったので、 今まで通り、@gaooh と @froncool と出る予定だったのだけれど、1週間くらい前にいろいろあって @gaooh が抜けたので、 @froncool とのふたりで。
ふたりともAzureは初めてということもあって、事前に素振りをしたのだけれど…
Azureが悪いとかそういう話ではなくて、飲みながらあーだこーだ話して、@froncool の個人的事情などもあり、ちょっとこのままじゃできないなー、みたいな感じで。

そのうえ、前日にまた面倒なことがちょっとあって、ふたりともテンションだだ下がりで、
「結局やめとく?」
「んーいちおうやろうか」
みたいな感じのテンションでした。
すみません。

ということでISUCON6の予選1日目に参加してきました。

当日。
10時集合…なんだけど、よく考えたら10時集合じゃダメですね。
無線の設定とか、必要な項目渡したりとかそういうこと考えると15分前とかに集合すべきだった。

とはいえ、結局、寝坊だのなんだのがあって、11時ごろ集合。ダメダメです。
とりあえず初期スコアを測ってみたら、Perlで3000点ほど。
お互い特にこだわりないし、まあPerlでいいか、と言うことに。

ソースコードを読んで、さてどうしようかーとか言ってたら12時ちょい前になったのでご飯を食べに。
ご飯を食べながらISUCONと全く関係ない話をして、戻ってきたら13時。

「よし、そろそろ本気出すか」
もう3時間たってます…

暫定で「これをやりましょう」ってなったのはこれ



  • アプリケーションが2つ立っていて効率が悪そうな感じだったので1つにまとめる
  • mysql と nginx の設定をいじる


  • この辺をやって、4000点程度。うーん。

    「StarはRedisにすれば速そう」
    「えーRedis立てるのめんどい」

    「EntryもRedisにしたら速いんじゃね?」
    「ループ意外とめんどくさいと思うよ」

    みたいな感じで劇的な改善案は思いつかず。
    (Redisちゃんとやれよ自分)

    そんな中、 / へのアクセスが遅いという話になり、 / へのアクセス時に同じ処理を10回回している部分があって、それが1回ごとにDB舐めてるのでそこを改善。
    そしたら、4000→10000点に。

    その後、あっちいじってこっちいじってあんまり変わらず…という時間が続く。
    16時ごろ、起動するPlackのプロセス数をいじってみたら、16000まで上昇。いいね。

    その後も小康状態が続く。

    「もうSPAM判定の結果をキャッシュするしかない」
    明らかにほかに改善すべき点はあるものの、一番のボトルネックがSPAM判定だったので、とりあえず…ということでやってみることに。
    SPAM判定がされた場合、それをDBに保持しておく、という手法を取ってみました。

    結果…
    1回目:32000点
    2回目:35000点
    3回目:39000点
    4回目:45000点
    (以降変わらず)

    となりましたとさ。
    SPAM判定のキャッシュは initialize しても持ち越すようにしていたため(多分実装としては良くない)、キャッシュに乗り切るまでは試行しつづけると効率がよくなるので、点数が変わらなくなるまでぐるぐるさせました。
    点数が止まった時点でDBを見た感じ、SPAMとされるPOSTは100種類。なるほどキリがいいですね。

    この時点で17:45で、これ以上がんばってもあんまり変わらなそうだよね、ということでここまで。

    チート(SPAMのキャッシュ)ありで 45000点、チートなしで16000点、という結果を報告します。
    18時時点のリーダーボードでは、上位10位に入るくらいでした。
    ただし、これは自チームだけ18時時点の点数、他チームは17時時点の点数になっているので、実際に10位ではないはず。

    全体の結果が出てないのでなんともいえないですが、多分予選敗退ですね。
    万が一、「17時時点から他チームの点数が上がらない」「2日目参加のチームが全部うちより弱い」などの奇跡的な条件が重なれば本戦進出できるかもしれません。

    とはいえ、やる気がなかったわりに高得点は叩けたのでだいぶ満足です。

    リポジトリとかもちゃんと作らず、1インスタンスしか立ち上げなかったので、声かけというソフトロックをしながら二人で同一ファイルをvimでいじるという、あれな感じのやり方でした。

    ということで…
    次回はちゃんとやります。

    打ち上げ!!!








    「あ、OKのやつもキャッシュしておけば6万点は行ったんじゃない?」

    2014-09-29

    ISUCONで予選敗退してきました (3年連続3度目)

    今年も参加してきました。
    今までどおり、 @gaooh, @froncool の2名と。

    今回のお題は、ログインのアカウントロックですね。

    • n回連続で失敗したらそのアカウントをロックする
    • n回連続で失敗したらそのIPアドレスをロックする

    みたいなの。

    役割が被って残念なのは今までに経験してるので、流れでこんな感じの分担に。

    • @gaooh -> 実装
    • @froncool -> ミドルウェア
    • @iszk -> 悪知恵、ロジック

    言語は、@gaooh が一番実装しやすいRubyで。

    今回の悪知恵としては、

    • usersテーブルが20万件しかなくて実質 login と password しかなかったので、それをプログラム内に静的なhashとして持ってしまったこと
    • / へのアクセスが4種類(ログイン前、ログイン失敗時のエラーメッセージ3つ)なので、エラーを /?err1 みたいな感じへのリダイレクトにして、前段のキャッシュを効かせたこと
    の2つでした。あんまり爆発するほどの裏口は見つからなかったですね。残念。
    後者に関してはベンチマークさんの挙動がちょっとおもしろくて、 /err とかに飛ばすと「そんなURLにアクセスしてんじゃねーよ」ってfailになるんですが、 /?err とかに飛ばすと見逃してくれたんですね。なのでその挙動を利用させてもらいました。

    この悪知恵を入れたのと、あとmysqlに持っていたログイン履歴のデータを必要な部分だけ最適化してmemcachedにする、と言う内容でした。

    結局。

    最後までレポートが合わないバグが取れずに初期スコアでの送信になりました。
    参考スコアとしては、workload=8で4万くらいだった気がします。

    @gaooh「ほかのブログをみると私の実装力があれば決勝いけましたねorz うぐぐ」
    ということなので、惜しかった…と言うことにしておきます。

    来年こそは!

    2014-04-02

    Linux Mint に Adobe Air をインストールしたら日本語が表示されない

    Adobe Airをインストール

    Linux Mint版なんてーものはないので、dpkgから入れます。

    http://update.devolo.com/linux/apt/pool/main/a/adobeair/ から適当に調達。

    $ sudo dpkg -i dobeair_2.6.0.19170-devolo1_amd64.deb
    

    お、ライブラリが足りないって出る。と言う事で、不足している奴を sudo aptitude install hogehogeって感じで入れます。

    インストールしたらAirっぽいウインドウがでて別の問題で怒られたので、ちょっと検索。

    https://forums.ubuntulinux.jp/viewtopic.php?id=13589 このあたりに書かれてることが原因っぽいので、ln -s hogehoge してあげます。

    よし、インストール完了。

    なお、Linux版は2.6でサポート終了しているとのことなので、自分の動かしたいアプリがこれでちゃんと動くかは別問題。

    日本語が!

    というわけで、Airのアプリをインストールしてみました。そしたら日本語が豆腐。わーい。

    フォント設定がおかしいらしいので、ちょっと覗いてみる。

    自分のローカルディレクトリに .fontconfig/ とか .fonts.config とかそれっぽいファイルやらディレクトリやらがないので、どこに置けばいいのか…

    まず、 /etc/fonts/conf.d/ あたりを眺めてみる。

    すると、50-user.conf かなーと言う事で、これを眺めてみたら、

     ~/.fonts.conf.d
     ~/.fonts.conf
    

    とのことなので、きっと .fonts.conf.d/hoge.conf もしくは、.fonts.conf を置けばいいってことでしょう。きっと。

    fonts.conf のサンプルを適当に探してきて、.fonts.conf として置いてみたらちゃんと豆腐ではなくて日本語が表示されるようになりましたとさ。

    自分が利用したのは、 69-language-selector-ja-jp.conf で適当にぐぐったやつです。

    2014-01-21

    Linuxをupdateするとvmwareが動かなくなる

    Linux Mintを apt-get upgrade したらVmwarePlayerが動かなくなりましたとさ。 で、Vmwareのカーネルモジュールを上げるよーってダイアログが出るんだけど、しばらく待って結局失敗するんですよ。 という事で、 sudo vmware-modconfig --console --install-all 以上終了。

    2013-12-25

    ローカルネットワークにいるホストの名前が引けない

    Linux Mint を適当にぶち込んだマシンにて、ローカルネットワークのホストにアクセスできない問題が発生。

    状況

    • DNSサーバは 192.168.0.1 みたいなマシンで、DHCPで配る
    • hostname.mydomain.local みたいな名前でローカルネットワークにホストが存在してる
    • DNSサーバを指定した上で、digなりnslookupなりからそいつの名前を指定すると、ちゃんとIPアドレスを返してくれる
    • ping hostname.mydomain.local とか wget hostname.mydomain.local とかやると、そんなホストしらねーよって言われる

    dnsmasq が動いてるせいで、ローカルネットワークのDNSを見に行ってくれない

    /etc/NetworkManager/NetworkManager.conf
    [main]
    plugins=ifupdown,keyfile
    dns=dnsmasq
    
    [ifupdown]
    managed=false
    
    dns=dnsmasqの行をコメントアウトして NetworkManager を再起動。
    ついでに、resolv.conf を書き換えてローカルネットワークのDNSを見に行くように。

    .localのホストだけ名前解決できない

    nsswitch くんが悪さをしていた模様。
    /etc/nsswitch.conf
    # /etc/nsswitch.conf
    #
    # Example configuration of GNU Name Service Switch functionality.
    # If you have the `glibc-doc-reference' and `info' packages installed, try:
    # `info libc "Name Service Switch"' for information about this file.
    
    passwd:         compat
    group:          compat
    shadow:         compat
    
    hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
    networks:       files
    
    protocols:      db files
    services:       db files
    ethers:         db files
    rpc:            db files
    
    netgroup:       nis
    
    hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 を、 hosts: files dns mdns4 に書き換えたらちゃんと .local に関してもDNSを参照してくれることに。

    2013-10-07

    ISUCONで予選敗退してきました

    去年に引き続き、元D(…eNAではない)社の同僚と3人で組んで参加してきました。

    メンバー構成がPerl*2,PHP*1 なので、今年はPerlで行く事に。
    (去年はPerl,Ruby,PHPが1ずつでしたが、1人宗旨変えしたようです)
    3人の得意分野がそれなりに分かれてはいるものの、やっぱりかぶってるなーとか、全体観を持って見るところが不足していたなー、というのが…

    作戦としては、プロファイラを入れてボトルネックを見て、重いところを潰すというオーソドックスな感じ。
    あとは、重そうなところは勘で。DBにインデックス貼ったりとか。
    全部書き換えるみたいなことをする余裕はなく…

    いろいろやりましたが、一番効果があったのは、
    「markdownで変換する奴、どうせ有限個しか来ないよね!」
    「じゃあmarkdownでの変換結果を静的にもっとこうぜ」
    というところでした。

    何をやったかというと、markdown前のデータからハッシュを取って、hash=>markdownの結果、という情報をRedisにぶち込むようにしてみました。
    で、あったらそれを返す、なかったら作る、という感じ。
    そしてこのRedis君は、ベンチマーク毎に内容を捨てない、というのがポイント。
    その結果、なにも改善点がなくてもベンチマークを回すたびにスコアが上がるという素晴らしいことに…!
    最終的にはヒット率90%くらいまで行きました。

    結論
    お疲れ会で行った鳥政、おいしゅうございました。

    2013-01-01

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

    あけましておめでとうございます。
    と言うことで2012年に買ったガジェットと2013年に買いそうなガジェットをまとめてみる。

    2012年は意外といろいろ買いました。
    時系列に並べてみる。

    • X06T * 2 (MNPの弾としてね…)
    • Motorola Photon IS12M (55kのキャッシュバックに目がくらんで)
    • Medias TAB N-06D (5000円の月サポおいしいです)
    • Lumia 900 (英国版)
    • IS12T (2台目…機種変0円だったのでつい…)
    • kobo touch
    • iPhone4S (黒SIMって維持費安いよね、ってことで入手したけど翌日売った)
    • iPhone4 (ビール1杯と交換で中古品を譲ってもらいました)
    • Kindle PaperWhite 3G
    • HTL21 (本命)

    うん、多いな。
    最後にLumia920の赤を買おうと思ったんだけど、びみょーに入手できず、今年に持ち越し。

    2013年はどうなるんだろうなーと言うことを考えると、

    • WindowsPhone8
    • Windows8 PC or Tablet
    • Android 5 or 6 Phone (出るかな…?)
    • iPhone 4S(softbank)

    あたりじゃあないでしょうか。
    e-Ink端末はKindleとkoboがあるからしばらくはいいかな。

    iPhoneが4Sなのは、黒SIM使い続けるなら4の次は4Sしかないのよね、というそれだけです。SB回線は2年くらいは黒SIMのままの予定なので…
    5Sか6が出たあたりに、あまった4Sを安価で譲ってくれる人を探します。と。

    タブレットはiPad1,2,3, 10インチAndroid2.2, 3.2, 4.0って使ってきたけど、あの大きさだとWin8みたいなフル機能OS乗ってた方がなにかといいのよね。
    ちょっとおでかけに連れて行くならタブレットでいいんだけど、1泊以上するときには、どうしてもPCがないと仕事の関係もあって不安なのです。
    と言うことでタブレット買うならWin8Tabの軽量なやつに行くのが幸せになれそう。

    まとまらないけれど、今年は去年に比べたら台数は減りそう。
    でも合計額はあんまりかわらないかな…?

    そんな感じで今年もよろしくお願いいたします。

    2012-11-05

    ISUCON2に参加してきました

    参加してきました。

    全体的なお話は #isucon2 参加者・関連エントリまとめ から。

    チーム「アルコールの足らない人たち」です。
    本当は「アルコールが足りない人たち」だったはずなんですが、リーダーのうっかりミスによってチーム名が予定と違って、出鼻をくじかれました。
    まあスコアには全く関係ありませんが。

    チームそのものは @gaooh, @froncool, @iszk という、昔同僚だったメンバーで組みました。

    事前予測として、前回はひたすらキャッシュしたところが勝ちだったので、今回はキャッシュしにくいやつがくるんじゃないかなーと思っており、お題を見て「ほらやっぱり!」って思ってしまったのが敗因その1。

    結局上位チームはがんがんキャッシュをさせる方向で行っていたのですが、我々はキャッシュできないんだからアプリケーション高速化しようぜ、と言う方向でがんばってしまいました。

    また、とりあえずPerlとRubyでベンチを取ってみて、PerlがRubyの2倍強のスコアだったんですが、アプリケーション高速化なのにRubyを選択。これが敗因2ですね。
    いや別にRubyがダメとか言うつもりはこれぽっちもないんですが、PerlとRubyなだけで2倍もスコアが違う訳がないので、乗ってるフレームワークとか、DBのドライバとか、そういう、言語直接じゃないところを入れ替えるだけでPerlと同じくらいのスコアまで上がるはずだし、それをやらなければいけなかったのに、その辺をやらなかったと言うのが、ダメダメでした。

    最終的には、それでもだいぶアプリケーションをがんばって、当初の2倍くらい捌けるようになったんですが…要するにPerlの初期状態とほぼ同じスコアだよねこれ…と。

    一応完走しました。が。

    反省点が多すぎてどうしようもない感じですが、得意言語が3人でバラバラ、だけど3人ともアプリケーション寄り、なので3人のうち2人は不得意分野を担当せざるを得ない、と言うところはなんとかしたいです。

    fujiwara組のみなさん、おめでとうございます。
    そして、運営のみなさま、参加者の皆様、ありがとうございました。

    2012-11-01

    転職して3ヶ月経ちました

    8月に転職しました。

    楽天をやめて、FreakOutへ。

    DSPをやってる会社です。
    DSPが何かって言うのは…まあ適当に検索してください。
    簡単に言うと広告配信屋さんです。

    ここ数年はずっとJavaだとかPHPだとかを書いており、Perlを書くのは学生時代とか、その後ちょっとの間だけだったんで、Perl事情がそのときとあまりにも変わっててびっくりしました。
    まあ、未だに慣れませんが…

    非常に元気のいい会社で、楽しく働かせていただいています。
    表参道はランチが充実してて、会社のお菓子食べ放題制度とあわせて、このままだとお腹のお肉がヤバい感じになりそうで、それだけが心配です。

    お仕事としては、エンジニアとしてPerlを慣れないなりにもりもり書いてる訳ですが、直近の案件としては海外展開で、前職での海外展開したときの経験なんかを生かしつつ、成功へと導いていければなー、と。

    まあそんな感じで。
    相変わらずこのブログはやる気ないですが、これからもよろしくお願いします。