投稿者「wpepea」のアーカイブ

発見:ベビーシート付きタクシー@京都

ちっこく生まれてきて二カ月ほど入院していた息子もそろそろ退院。

というわけでベビーシート付きタクシーを予約しようとしたらなかなかサービスをやっている会社がない。

みやこ子育てタクシーてのがあったけど事前に郵送による会員登録が必要という予想外のトラップ。

サービスラインナップは充実しているんだけど残念。

 

何件か電話したところこちらで一件みつかった。

料金は明細聞かなかったけどオプション料2,500ぐらい。

普段車使わないで退院の時一回使う程度なら結構いいと思う。

 

やっと光回線がきました

引っ越してからはや一ヶ月以上。

10/7にやっとこさ光回線が開通しました。

NTT東・プロバイダー・NTT西のどこかで連絡不備があると約一週間スケジュールが後ろにずれていく今一感。

幸いにも無線の2年縛りには間に合ったのでよしとしよう。

回線速度は今日触った感じだとだいぶ速くなった。中野に居たときとちがってヘビーユーザーのいない回線にあたったのかなぁ

ひよこをかえす!?

仕事でYahooショッピングを見る機会が増えています。

いろいろなものがあるけど無駄になる衝動買いをしそうになったのはこれ

雛を孵す器械。

 

 

うむ、つかれているに違いない。

見積もり失敗して時給換算500円ぐらいも残り2日。のりきろう

jsoupを使ってみた

オープンソースのHTMLパーサー(Java)であるjsoupを軽く使ったのでメモ。

ざっとさわった特徴は

  • みんなが大好きMITライセンス
  • jQueryっぽく扱いが楽(少なくとも簡単な利用だと)
  • 今年の1月までは開発すすんでいた(今はとまっている??)
  • ソースは小さめかつきれいめなので手を入れることになっても難しくなさそう
  • クラス名はDocumentとかかなり一般的なので自動補完でインポートを追加しようとすると他のものが選ばれること多いので保管候補は目視で選びながらぺちぺち追加したほうがいい

インストールはMavenで指定かjarにパスを通すのみ。使ったバージョン1.7.2では依存ライブラリ無くひとつのjarで事足りた。

<dependencies>
 ……
<dependency>
  <!-- jsoup HTML parser library @ http://jsoup.org/ -->
  <groupId>org.jsoup</groupId>
  <artifactId>jsoup</artifactId>
  <version>1.7.2</version>
</dependency>
 ……
</dependencies>

 

ぐりぐりとまわしながらJsoup.connect(url).get()とhtmlをクローラー的に取得していたら

java.net.SocketTimeoutException: Read timed out
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)

な感じにエクセプション発生

Jsoup.connect(url).timeout(0).get();

 としてとりあえずは回避。コネクション使いきっている状態と思うので運用機とかで使うなら

org.jsoup.helper.HttpConnectionの中いじるか、ulimitとか調整した方がいいと思う。

クライミングジム建設予定地

3/19追記

町屋を使おうとすると原型をとどめない改修(?)が必要ということで別の場所(宇治市槙島町目川74-E)にジムを建てています。下にある建物は店舗とはなっていませんのでご注意ください。

 

今立っているのは、鳥羽伏見の戦いを焼け残った京町家。200mぐらい離れた場所はごっそりと焼けたらしい。町屋にもいろいろ種類があるらしいけど分類は何になるんだろう??

DSC_0055

 

趣のあるくぐり戸

DSC_0056

 

吹き抜けっぽく高さが確保できる場所もあるけど、梁があるのでそのままでは壁を作ることはできない。。

DSC_0057

 

2階の屋根裏っぽい場所。強度確保で来たら、ルーフにしたい低い天井。そのままだと確実に床が抜ける。

DSC_0058

 

中庭。休憩室からみるオブジェクトになる??

DSC_0059

 

手をつけてはならないという蔵。白壁が崩れて限界感満載。修繕費用あったらホールド代にまわすのでとりあえず放置~

DSC_0060

 

リフォームしてジムにできたらいいけれど、改修(改修相当かかると思うので費用次第では新築)の見積り等これからなのでこれからどんな感じになっていくかは流動的。

法人移転時のFLETS光解約

NTT東日本圏から西日本圏へ会社ごと引っ越しました。

FLETS光をNTT東日本で2年縛り付きで契約していて、違約金発生期間内に西日本に引っ越し。

当然違約金がかかるものと思ったら、NTTの窓口の方から「西に引っ越した証拠あったら解約金かからないよ」というお言葉が。しかも、聞かないであっちから言ってくれた!!

具体的に何を出せばいいかときいたら、法人のケース少ないから何があると聞かれ、最初に準備できた会社移動の臨時株主総会議事録をFAXで送付。翌日電話があって違約金免除書類としてOKだったとのこと。

ありがてぇ。

京都に引っ越しました

先月末に京都の伏見に引っ越しました。

会社の固定回線もまだ引けていなく、PC一台を梱包開いて無線でつなげているようなまだまだな状態です。

京都は普通に歩いていても、竜馬が切られて隠れていた材木置き場所在地とか、佐久間象山が切られた所在地とか、八重の桜でタイムリーな幕末の史跡が見つかりますね。引っ越ししたばっかりで、交通手段が徒歩(&電車)の速度なので文明開化したら色々見えなくなるのかもしれませんが。

新クライミングジム

昨日15日に大田区の蒲田にオープンしたクライミング(ボルダリング)ジムのKrimp(クリンプ)行ってきました。

ホールドまだかなり付けていないのがあったのであくまで現状です。

  • 高さは高からず低からず
  • 広さはぼちぼち(6面分?)
  • グレードは若干甘めなので気持ちよく登れる
  • 課題は2級までしか触ってない(触れない)けど素直なムーブが多いと思う
  • 空調は効いていて快適
  • 値段は安め
  • 休憩スペースは広い
  • 近場の飯はうまい(餃子のニーハオや、立ち飲み屋のバルバンチョとか)
  • 平日営業時間は2300まで

都心勤務で京浜東北線で横浜方面に帰るのだとかなりいい感じだと思う。

スノーデン自殺??

twitterを眺めていたら(元のツイートながれて見つからなくなった。。。)スノーデン氏が自殺体で見つかったという記事へのリンクが。

http://www.chronicle.su/politics/snowden-dead-of-apparent-suicide/

嫁との感想。

あめりかこえ~

元ネタが半分ネタサイトらしいけど、それでもほんと思うわ

 

 

 

WebSocketにてJSON形式のデータをJavaFXとやり取りしてみる。の4

先ほどに続いて送受信部分

送信処理

  1. 画面の送信ボタンからSingleController#handleSendActionが呼ばれる。
  2. SingleController#handleSendActionから@ClientEndpointのsendメソッド(自分で作った普通のメソッド)を呼び出す。
  3. sendメソッド内でSession.getAsyncRemote().sendObject(dataObj)を呼び出す
  4. encodersに指定してあるClientEncoderクラスのencodeメソッドが呼び出される。
  5. encodeメソッドでエンコードされたデータ(JSON形式の文字列)がServerEndpointに送信される。

エコープログラムなのでServerEndpointで受信されたデータは(若干加工され)ClientEndpointに戻される。そのため、続けて受信処理が走る。

 

受信処理

  1. サーバからのデータがPushされる。
  2. @ClientEndpointのdecodersに指定してあるClientDecoderクラスのwillDecodeメソッドが呼び出され入力値がチェックされる。
  3. willDecodeの結果がtrueならば続けてdecodeメソッドが呼び出されてジェネリクスで指定した型(ClientData)にデコードされる。
  4. デコードされたデータを引数に@ClientEndpointの@OnMessageが呼び出される。ここはJavaFXのスレッド配下ではなく、WebSocketのスレッドに移っている。そのため、JavaFXのコントロールを直接操作することはできない。
  5. @OnMessageの中でPlatform.runLaterを呼び、JavaFXの画面操作(接続時処理ViewObj#write)の呼び出しを登録(?)する。
  6. JavaFXスレッドに戻り、JavaFXの画面操作が実行される。

(コントローラーの関連する部分)

public class SingleController implements Initializable {
    @FXML
    private void handleSendAction(ActionEvent event) {
        System.out.println("SingleController#handleSendAction");
        wsClient.send(msgInput.getText(), sess);
    }
}

(ClientEndpointの関連する部分)

@ClientEndpoint( 
   decoders = { ClientDecoder.class }, 
   encoders = { ClientEncoder.class })
public class WSJsonSingleClient {

    @OnMessage
    public void onMessage(ClientData dataObj) {
        System.out.println("WSJsonSingleClient#onMessage");
        final ClientData channeled = dataObj;
        Platform.runLater(new Runnable() {
            @Override
            public void run() {
                viewObj.write(
                        channeled.getSessionId(), 
                        channeled.getMessageTimeString(), 
                        channeled.getMessage());
            };
        });
    }

    public void send(String text,Session sess) {
        System.out.println("WSJsonSingleClient#send");
        ClientData dataObj = new ClientData(text);
        sess.getAsyncRemote().sendObject(dataObj);
    }
}

(ClientEncoder)

public class ClientEncoder implements Encoder.Text<ClientData> {

    @Override
    public void init(EndpointConfig paramEndpointConfig) {
        System.out.println("ClientEncoder#init");
    }

    @Override
    public void destroy() {
        System.out.println("ClientEncoder#destroy");
    }

    @Override
    public String encode(ClientData paramData) throws EncodeException {
        System.out.println("ClientEncoder#encode");
        JsonObject model = Json.createObjectBuilder()
                   .add("message", paramData.getMessage())
                   .add("messageTime",paramData.getMessageTime())
                   .build();
        return model.toString();
    }
}

(ClientDecoder)

public class ClientDecoder implements Decoder.Text<ClientData> {

    @Override
    public void destroy() {
        System.out.println("ClientDecoder#destroy");
    }

    @Override
    public void init(EndpointConfig arg0) {
        System.out.println("ClientDecoder#init");
    }

    @Override
    public ClientData decode(String inputString) throws DecodeException {
        System.out.println("ClientDecoder#decode");
        try{
            JsonObject jsonObject = Json.createReader(new StringReader(inputString)).readObject();
            return  new ClientData(jsonObject);
        } catch(Exception e){
            e.printStackTrace();
            throw new DecodeException(inputString,"ClientDecoder#decode失敗", (Throwable)e);
        }
    }

    @Override
    public boolean willDecode(String inputString) {
        try {
            System.out.println("ClientDecoder#willDecode");
            Json.createReader(new StringReader(inputString)).readObject();
            return true;
        } catch (JsonException ex) {
            ex.printStackTrace();
            return false;
        }
    }
}

github:https://github.com/epea/test01/tree/WF_JSON_FX_SINGLE