最近、macに移行した。

慣れ親しんだwindowsに別れをつげて、

macに移行したものの、キーボードがスムーズに打てない。。

 

windowsではcygwin生活だったが、

macに移行して、ターミナル生活になった。

macはやはりターミナル極めてなんぼだなという感じがする。

 

1つ失念していたことで、

macはwindowsと違い、

ファイルパスの大文字小文字を区別するんだった。。

javaファイルがコンパイルできなくて、はまりました。。

 

 

macにtipsもいろいろ書いていきたいっす。

 

投稿日時:2015年09月01日 13:38   カテゴリー:mac  

javaでwebsocketクライアントをやろうとしたら、

websocket-apiライブラリでは動かなかった。

なんでも、meta-infのserviceのところに何かを配備する必要があるらしい。

 

そこで、いろいろ調べたら、glassfishのライブラリを導入すれば、

一発で済むことがわかった。

 

pom.xmlは以下を書くだけ。

      <dependency>
        <groupId>org.glassfish.tyrus.bundles</groupId>
        <artifactId>tyrus-standalone-client</artifactId>
        <version>1.11</version>
      </dependency>

 

あとは、

WebSocketContainer cont = ContainerProvider.getWebSocketContainer();
URI uri = URI.create("ハンドシェイクのURL");
cont.connectToServer("websocketのインスタンス", uri);

で接続できる。

 

検証したのは、JDK8だが、JDK7でも大丈夫でしょう。

 

以上

投稿日時:2015年08月18日 09:29   カテゴリー:java, websocket  

ORマッパーを作成して、

INDEXの存在確認方法を調べたのでまとめておきます。

 

【PostgreSQL】

select indexname from pg_indexes where tablename = ‘テーブル名’;

 

【MySQL・MariaDB】

SELECT INDEX_NAME FROM information_schema.STATISTICS WHERE table_name = ‘テーブル名’;

→whereに「TABLE_SCHEMA」を追加すれば、データベース名も条件に加えられる。

 

【SQLite3】

select name From sqlite_master where type = ‘index’;

→インデックス名の一覧がとれるから、そこから検索すればよい。

 

【H2】

select index_name from information_schema.indexes where table_name = ‘テーブル名;

→大文字小文字を区別している場合、テーブル名は大文字にする必要がある。

→大文字小文字を区別している場合、結果セットは大文字になるので、注意する。

→CREATE INDEX IF NOT EXISTS index_name ON table_name (column_name1, column_name2);

という形で、IF NOT EXISTS構文もサポートしている。

 

以上

投稿日時:2015年08月14日 16:08   カテゴリー:rdb  

websocketで、回線を抜くなどの切断をしたとき、

即座にcloseハンドラで受け取れないみたい。

 

TCP自体の仕様を細かく確認してみる必要はあるが。。

 

ライブラリによっては、

再接続時に一旦closeハンドラを呼び、

滞留中のコネクションを破棄したうえで、

openハンドラをコールするものもあるようにみえる。。

 

なので、再接続時にcloseが呼ばれるケースもある、

ということを考慮しておいた方がよい場合もあると思います。

 

投稿日時:2015年08月03日 15:42   カテゴリー:websocket  

redshiftからクエリーを引くのが遅い。。

そして、アナウンスなしにマイナーバージョンアップが多い。。。

 

データの格納庫としては、

とても優れているけど、

データの引っ張る際は、

直接クエリーで引いてもよくないな。。

 

RDB側へサマリーしておいて、

それを引いたほうがいいかも。。

 

今後に期待。

投稿日時:2015年08月03日 15:40   カテゴリー:aws  

phpにも、pythonやrubyと同じようにインタラクティブシェルがあるんですね。。

最近知りました。。。

 

php -a

 

とやるみたい。。

 

投稿日時:2015年07月14日 13:13   カテゴリー:php  

6月12日にphp7-alphaがリリースされていた。

予定では、11月に正式版になるとのこと。

 

言語の書き方という面において、

個人的には、

  • 関数の戻り値型の指定
  • スカラー型によるタイプヒンティング

の導入は良いかなと思う。

 

たださ、なんかjavaにどんどん近づいているよね?

そのうち、javaのコレクションに相当するものが出てきそう。

 

httpdの組み合わせによる利用が一般的だから、

どんだけパフォーマンスでるんだろうね?

 

webサービスの場合、javaで書いたほうがよくね??

と個人的には思ってしまうよ。。

 

投稿日時:2015年06月25日 15:18   カテゴリー:php  

windows8.1

cygwinでphpビルトインサーバを用いて、

phalconフレームワークを動かしてみた。

 

予めやっておくことは、

  • ビルドできる環境
  • phpおよび関連モジュールのインストール
  • phalconのインストール(linuxの方法でcygwinもできます)

です。

 

そして、

サンプルのinvoをダウンロードして、

公開ディレクトリに移動して、

php -S localhost:8000 routing.php

をたたけば起動する。

 

ここで、あらかじめ以下2点を対応しておく。

①invoのapp/config/config.iniのbaseUriを「/」に変更しておく

②公開ディレクトリ直下にrouting.phpを作成する。

<?php
$route = parse_url(substr($_SERVER["REQUEST_URI"], 1))["path"];

if (is_file($route)) {
    if(substr($route, -4) == ".php"){
        require $route;         // Include requested script files
        exit;
    }
    return false;               // Serve file as is
} else {                        // Fallback to index.php
    $_GET["_url"] = "/" . $route;        // Try to emulate the behaviour of your htaccess here, if needed
    require "index.php";
}

 

で、おしまい。

 

routing.phpについては、phpの公式ページに書いてあるのを、

phalconようにちょろっと修正しただけです。

投稿日時:2015年06月16日 17:36   カテゴリー:php  

新しいネタがないので、

過去の小ネタを。

 

phpでデーモンプログラムを組んで、

そこで、pdoを使う場合、

fetchを使うと処理が落ちる。

fetchAllでないとダメ。

 

理由は、、、忘れた。。

投稿日時:2015年06月16日 09:37   カテゴリー:php  

負荷試験をやっていると、

他人の状態を保持して、

その状態に応じて処理を行うということがある。

 

たとえば、

  • AさんがBさんに友達の申請をする
  • BさんがAさんの友達申請を許可する

という場合など。

 

これをjmeterで試験する場合、

「BさんがAさんの友達申請を許可する」という処理は、

「AさんがBさんに友達の申請をする」が完了していないと成功しない。

そのためには、BさんはAさんの状態を取得する必要がある。

 

ここで、

AさんのIDを1

BさんのIDを2

とし、

jmeterのBSF(javascript)を使うと、

 

<(PostProcesser)AさんがBさん友達申請をする>

// 自分のID
var my_id = 1;

// 他人のID
var other_id = 2;

// レスポンスを取得 して申請が成功しているなら
// Bさんの情報にAさんが申請したことを記録
var key = "appley-to-" + other_id;
var value = my_id;
props.put(key, value);

 

<(PreProcesser)BさんがAさんの友達申請を許可する>


// 自分のID
var my_id = 2;

// 他人のID
var other_id = 1;

// BさんがAさんからの申請状態を取得
var key = "appley-to-" + my_id;
while (true) {
    var value = props.get(key);
    if (value != void(0)) {
        // 申請状態がとれたら、ループを抜ける
        break;
    }
}

// 許可処理を実行

 

という具合になる。

 

注意点としては、

jmeterが起動中は、

propsの値は常に保持されるので、

不要になったら、removeしておく必要がある。

もしくは、初期化処理でremoveしてから利用するなど。

 

もう1つ注意点としては、

永久ループで待機する場合は、

スレッドを停止しても処理が停止しないので、

何回かループしたら止めるとかを入れておいた方がよい。

 

あとは、カウンタとか、forEachループなどを組み合わせることで、

もっと複雑な処理が可能になる。

 

以上です。

まあ、小ネタだね。

投稿日時:2015年05月27日 10:38   カテゴリー:jmeter