Blog

  • jQuery UI + Python で ajax な autocomplete

    社内向けシステムの使い勝手向上と、今後のシステム開発に向けてフォームにオートコンプリートをつけようと苦戦した記録。

    静的候補を表示する

    jQuery で autocomplete を実現しようとすると jQuery UI のお世話になる。参考にしたページはこちら。

    最も簡潔な実装方法は、フォームと同じファイルにリストを用意する方法。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css">
    https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js
    
    $(function() {
        var data = [
            'にんじん',
            'たまねぎ',
            'じゃがいも',
            'きゅうり'
        ];
        
        $('#item').autocomplete({
            source: data
        });
    });
    
    <title>autocomplete のサンプル</title>
    </head>
    <body>
    <input type="text" id="item" value="" />
    </body>
    </html>
    

    最も簡潔な例はこんな感じ。単に配列を用意するだけ。

    Ajax で動的に候補を読み込む

    これも同じサイトの別記事を参考にした。

    $(function() {
        $('#item').autocomplete({
            source: './autocomplete.py'
        });
    });
    

    パラメータ “source” を候補を取得する CGI 等にするだけで OK. CGI 側は候補を JSON で返せば良い。クライアント側の実装はこれで完了なのだが、サーバ側の実装で苦戦したのでそれについて記述する。

    動的候補を用意するサーバ側の実装

    今回は実装しているサーバの都合で Python による実装としている。(余談だが、PHP 使わなかったのは Linux PHP + FreeTDS + Windows SQL Server という特殊な環境でどうしても PHP のドライバが落ちて使えなかったから。ソースを修正してリビルド……というところまでしたけど、実用に持っていくのに手間がかかりすぎて使い慣れた Python  に逃げた)

    今になって冷静に読んでみると参考ページには書いてあるのだが、初めクライアントからの入力途中の値を得るのにフィールドの名前がわからずに随分と彷徨った。答えは簡単で、 term というフィールドがそれだ。

    なので例えば Python であれば

    import cgi
    
    form = cgi.FieldStorage()
    term = form.getfirst('term')

    という感じで取得する。

    取得した term を使ってデータベースなどに照会をかけて、得られた結果をクライアントに JSON 形式で返す。

    以下は簡潔にするため固定値の場合。

    import json
    
    data = [
        {label: 'にんじん', value: '00000001'},
        {label: 'たまねぎ', value: '00000002'},
        {label: 'きゅうり', value: '00000003'}
    ]
    
    print('Content-type: application/json; charset=UTF-8\r\n')
    print(json.dumps(data))

    Content-type を出力していないと 500: Internal Server Error をはいてしばらく悩んだ。

    Ajax でのデバッグは通信内容が目に見えないことも多いので、例えば IE なら F12 キーで Web 開発ツールを起動して Network の通信内容を見てみると原因を特定しやすい。

  • GPD WIN の大きさ比べ

    GPD WIN の大きさ比べ

    手持ちのキーボード付き端末の大きさ比べです。

    img_3941

    GPD WIN のキー配列は本当に素直な US 配列ですが、それと打ちやすさは別の話。Linux Zaurus や Xperia mini pro のキーがいかに打ちやすいか、身に沁みました。

  • 安心ケータイサポートプラスのお世話になった(SOL26)

    安心ケータイサポートプラスのお世話になった(SOL26)

    SOL26 こと Xperia Z3 を手に入れてから、デジカメ代わりとしてよく持ち歩いています。いつもは端末の補償は購入してすぐに外してしまうのですが、今回は頻繁に持ち歩くことも考えて残していました。

    その日はいつもより手が乾燥して端末が滑ると思っていたところ、案の定滑ってコンクリの上に落下。落下と言っても、立てた状態からパタンと倒した程度だったのでまあ大丈夫だろうと思ったら、見事に蜘蛛の巣ができていました。

    SOL26 画面割れ

    タッチ操作は全くできず、カメラで写真を撮るくらいしかできなくなりました。ほとんどカメラにしか使ってないので、それでも良いといえば良いのですが、せっかく安心ケータイサポートプラスに加入したままだったので使ってみました。

    • 2015-06-21(日) 18:47 Web上で申込
    • 2015-06-22(月) 20:30 発送連絡
    • 2015-06-23(火) 朝 到着

    安心ケータイサポートプラス 交換機

    端末は袋に入れてプラスチックの固定具で梱包されていました。写真は取り出した状態です。

    安心ケータイサポートプラス 交換機 保護フィルム

    この頃の Xperia は飛散防止フィルムがなくなりましたが、交換機はなぜか保護フィルムが貼られた状態で届きました。買ったときにはついていなかったので、ん? となりましたが、まあ害もないのでしばらく使ってみます。でも埃入ってます……。

    20150622_235631291_iOS 20150622_235850333_iOS 20150623_000125106_iOS

    新旧比較。銘板のフォントが変わっています。製造番号は少し若くなりました。

    安心ケータイサポートプラス

    返却はプチプチにくるんで封筒でポストです。ちょっと不安になる。ポストに入れるのが嫌なので、郵便局の窓口に出してきました。

    タッチ操作できなかったので、データのバックアップは USB ホストケーブルにマウスつないで行いました。こういうときだけ Android の方が楽かなと思います。ホストケーブルは Seria で手に入りますからね。microSDにコピーするだけだし。

  • SOL23 Xperia Z1でmineo

    SOL23 Xperia Z1でmineo

    初日(2014-06-03)のクレジットカードが通らない問題に巻き込まれたものの、無事に2014-06-06にSIMカードが届きました。

    mineo 外箱
    mineo 外箱

    大きい箱で来ましたが、中身はほとんど緩衝材。楽天ブロードバンドみたいに封筒で良いのに。

    mineo 緩衝材
    mineo 緩衝材

    SIMロック解除してSO-01Fのsystemを焼いたSOL23をdocomo SIMで使っていましたが、FlashtoolでSOL23に戻しました。

    APNを設定すればすぐに接続できましたが、APNの設定がどこかわからずにあれこれ探してしまいました。

    CPA設定
    CPA設定

    今まで使ってきた端末のように「アクセスポイント名」をずっと探していましたが、「CPA設定」というのがそれに当たるみたいです。

    CPA接続 チェックマーク
    CPA接続 チェックマーク
    CPA接続 通知
    CPA接続 通知

    無事に接続できたので、Speedtest.netで回線速度を計ります。

    mineo 回線速度
    mineo 回線速度

    下り/上り = 12.48/9.53Mbps. 大きいファイルを扱わなければ十分かな。

    参考までに、同じ地点で同じROMでau SIMだとこうなります。

    au 回線速度
    au 回線速度

    docomoのMVNOと同じ傾向でやっぱり遅くなりますが、docomo MVNOよりはだいぶ良い数字が出てると思います。

  • 酷道 157 こと R157

    酷道 157 こと R157

    酷道として有名な国道157の走行記録です。

    感想だけ先に述べておくと、そこまで酷道でもないと思いました。国道にしたら酷い道かもしれませんが、普段から林道やオフロードを走っているせいか綺麗で走りやすい楽しい道でした。道幅も路面も一部区間を除いて快適なもの。

    福井側から入るとダム湖沿いの道続きなので、有峰林道と似た感じがしました。ちゃんとしたガードレールがなくて、道路から落ちればダム湖に真っ逆さまです。

    ただ、全部が全部快適かというとそうではなく、温見峠付近は酷道の名に相応しい荒れ具合。ここは舗装も荒れたコンクリート舗装で、崩落や落石も多いので注意する必要があります。

    2014-05-02 13.27.21
    道中の芝桜
    2014-05-02 13.50.20
    展望台?
    2014-05-02 13.47.28
    麻那姫湖
    2014-05-02 14.02.19
    土砂崩れによる迂回路
    2014-05-02 14.24.40
    温見峠の荒れたコンクリート舗装
    2014-05-02 14.33.29
    県境
    2014-05-02 14.35.48
    道を塞ぐ残雪
    2014-05-02 14.39.34
    道を塞ぐ土砂
    2014-05-02 14.41.19
    道を塞いだ大木
    2014-05-02 14.46.07
    道を横切る流水
    2014-05-02 14.50.54
    完全に道を塞いだ土砂

    温見峠付近は docomo/au/SoftBank の 3キャリアとも圏外。

    写真は全部 Xperia Z1 SOL23 で撮影しましたが、圏外エリアはなぜか GPS による位置情報が埋め込まれておらず、後半の撮影場所が不明。圏外だと位置情報自体がオフになる? それだとナビに使えなくなるから、そんなことないと思うけど……要検証。

  • 2013 Ninja 250のスクリーン

    2013 Ninja 250のスクリーン

    とても気に入っている2013 Ninja 250ですが、慣れてくると色々物足りない部分が出てきます。

    • スクリーンが低い
    • ハザードスイッチがない
    • 荷物が載らない 箱装備
    • シガーソケットがない 後付け装備

    この中でスクリーンだけがどうしても気になる。と言うのも、1つ前がST1300A Pan Europeanで電動式の可動スクリーンだったため。

    その更に前はNinjaの先祖に当たる1992 ZZR250でしたが、こいつには自作の手動式可動スクリーンを装備していました。

    1992 ZZR250

    伏せればいいというのもわかりますが、疲れるので出来れば普通の乗車姿勢での風防を良くしたい。でも今回は、Ninjaのデザインが気に入っているので出来れば自作は避けたい。

    ということで市販品で一番高さが高そうなものを選びました。


    ZEROGRAVITYゼログラビティ/スクリーン スポーツツーリングタイプ

    ZEROGRAVITYゼログラビティ/スクリーン スポーツツーリングタイプ NINJA250

    ここからちょっと嫌な話。モノは 2013-07-07 に Webike にて発注しました。その時点での表示は「納期: 2~3週間」だったかな。そこから商品到着までの時系列は以下の通り。

    2013-07-07
    発注
    2013-07-08
    メーカー在庫欠品 バックオーダー 発送予定日 2013-08-24 前後
    2013-07-09
    再発注確認 2013-08-26 前後
    2013-08-24
    納期遅延の連絡
    2013-08-30
    生産遅れによる納期未定
    2013-12-03
    納期再確認 -> 3月上旬仕入先入荷予定
    2014-01-17
    商品発送(自動送信メール)

    注文したこともすっかり忘れていた 2014-01-17 に突然発送。色々言いたいことはありますが、取り敢えず取り付け。

    ZERO GRAVITY Sport TouringZERO GRAVITY Sport Touring

    こんな感じの袋に入って届きます。取り付け用のゴムも付属していました。

    ZERO GRAVITY Sport Touring 比較
    左: ZERO GRAVITY 中: 純正 右: 純正ハイスクリーン

    車体に付ける前に純正との比較。こうやって見ると高いように見えますが……

    ZERO GRAVITY Sport Touring 外観

    実際はそこまで高くないので、伏せなかったら大して影響はありません。自分の身長が180cmあることも関係しているでしょうが、やっぱり高さ不足でした。

    補足で、曲げの処理が手作りで頑張ってる感漂っていました。

     

  • のと里山海道近辺のLTE状況

    2013年3月31日に無料化されて「のと里山海道」となった能登有料道路近辺で、SoftBank, docomo, au 3キャリアの回線速度を計測した記録です。

    計測に用いた端末は次の3機種。

    それぞれの最大通信速度は次の通り

    機種下り [Mbps]上り [Mbps]
    SoftBank iPhone 5s100 / 75 / 37.525
    docomo Xperia SX SO-05D7525
    au Xperia Z1 SOL23150 / 7525 / 12

    測定には定番の Speedtest.net (Google Play /App Store) を用いた。

    SoftBank iPhone 5sdocomo Xperia SX SO-05Dau Xperia Z1 SOL23
    場所回線Ping下り上り回線Ping下り上り回線Ping下り上り
    ALTE853.530.193G7453.860.40LTE6913.085.83
    B LTE 50 12.79 7.99 LTE 62 14.60 3.60 LTE 70 72.32 7.51
    C LTE 46 12.64 8.06 LTE 7712.46 3.45 LTE 80 64.77 8.63
    D LTE 65 7.35 8.66 LTE 64 10.18 3.83LTE 72 12.78 8.42
    E LTE 56 11.96 3.64 LTE 69 14.84 4.35 LTE 59 12.56 11.82
    平均60.49.655.7168 *111.193.137035.108.44

    *1: 3Gの値は除外