自営業化して1年ちょい経ってコロナショック。
カテゴリー: 未分類
Amazon 高機能検索
久々の更新(ネタ切れ)
お久しぶりです。
もうネタ切れです。
書くことがありません。
と言いつつ開発はそれなりにやっているので備忘録的に1周間1記事ぐらいのペースでなにか書いていきたいと思っているけども面倒なんですよね。
1記事に1時間かけていませんけども。
備忘録書いてもちゃんとタグを書いていないので、結局ググって他人の備忘録から知識を引き出している感じで。
ネタもらえればある程度書けるかもしれません。
でももうクロスファイアのハックネタとか、非公式なAPIの叩き方とかは微妙な気がしますが。
とりあえずそんなところです。
タイトルの通り。
URLはこちら
http://pipes.yahoo.com/pipes/pipe.run?_id=28262d28c4e6309a21324eebc97b20c8
クエリは
q=URLエンコードされた検索キーワード
_render=データフォーマット(json,rss)
データフォーマットがJSONであれば_callbackにコールバック関数を指定出来ます。
それ以外は公式と同じだから調べてみてね。
とりあえずこんなかんじで使える
こうすればRSSフィードとしても使える
http://pipes.yahoo.com/pipes/pipe.run?_id=28262d28c4e6309a21324eebc97b20c8&_render=rss&q=%e3%81%8d%e3%81%a1%e3%82%8c%e3%81%93
Let’s note SX2を購入
Let’s note SX2を購入しました。
16万のところ13万で売っていたのでつい・・・。
スペックは
OS : Windows 8 Pro
CPU : Intel i5 3340M 2CPUs @2.7GHz
Mem : 8GByte (4G*2)
SSD : Crucial M4 128GByte
Disp: 12.1inch 1600*900
ディスクドライブもついてます。
ディスプレイの外部出力はHDMIとD-sub 15。
重量は1.3kgぐらいで結構軽い。
そして電源プランを「パナソニックの電源管理(省電力)」にしておくと使いっぱなしでも7時間は耐えれる。
ハイパフォーマンスだとさすがに3~4時間。
購入後すぐにやったこと
・バックアップディスク作成
・HDDをSSDへ換装
・Windows 7をインストール
・Let’s note公式ページからWindows 8用のドライバをダウンロード
・Win7へ気にせずインストール
・Windows Security Essencialsのインストール(Windowsアクションセンターを黙らせるため)
・そして魔のWindow Update
Win8のドライバをWin7へ入れるとき、PanasonicのBluetoothコントローラ(ドライバではない)を除きインストールは正常に完了した。
一番時間がかかったのはWindows Updateでした。
セットアップ完了後なのですがWindowsをスリープにしてから立ち上げると青画面になるという不具合に見舞われて、何か不味ったかと思ってビビっていたところ原因はCrucial M4の例のアレでした。
ファームウェアアップデート後はエラーは発生することなく快適に動いております。
そして電源プラン「ハイパフォーマンス」でのWindows エクスペリエンスインデックス
久々にネタができたので更新。
私はJava信者であり、その時点で選択肢がなく、Google App EngineやOpenShiftなどの無料サービスを利用していたのですが、どうにもPaaSでは満足できなくなりました。
何が足りないかというと
・インスタンスの永続化はオプションサービスであり有料
・Threadは基本的に利用不可能
・ソケットも基本的に利用不可能
この縛りは正直しんどい。結局のところPaaSではやりたいことができない。
というわけでDTIのVPSをレンタルし始めました。
プランはとりあえず月500円のプラン。乞食レベルです。
ここで困った点が2つ。
OSがCentOSで、操作がコマンドですよ、コマンド。
そして公式のドメインは有料サービスで、しかも結構高い。
とりあえずCUIとか難しいのは嫌なのでGUI+VNCでも入れてリモートからGUI操作できるようにしようと思った。
しかし、KDE入れたらメモリ食い過ぎて死。
LXDEとか軽量のGUIもうまくインストールできなくて諦め。
結局CUIのまま操作。
次の問題はドメイン。
貧困な僕はできるだけお金を使いたくなかったので、以前から使っていたieServerを何とかできないかと。
というわけでCUIでも使える謎のブラウザW3MをインストールしてieServerにアクセスしたところ、普通に利用することができた。
とりあえず今はそこにチャベリというチャットサイトのチャットルーム情報をJSONで提供するWeb APIサービスを作って放置しておきました。
今はapiserver.orgで元気に動いています。
これで思う存分変なサービスが作れるぞひゃっほぉぉぉう!
ZOTAC ID82を(ほぼ)衝動買い
欲しいと思いながらも、本当に欲しいのか、何故欲しいのかを考えているうちに要らなくなってくる不思議。
そしてずっと脳裏をよぎっていて鬱陶しくなって結局買ってしまった。
もともとZOTAC ID82はOS,HDD,メモリがなく、友だちからもらったSSD(Crucial RealSSD C300)と適当に購入したメモリ(2G*2)、OSはWindows 7 64bit Professionalを導入。
とりあえずこれだけで5万ぐらい。
ディスプレイはAcerのX153w(15インチ)。
ZOTAC ID82のスペックはこちら
そして相変わらず写真撮るのが下手くそな俺。
Javaでイベントリスナーの作成
多大な処理を必要とし同一のスレッドでは動作させたくないものは、処理終了後に動作するイベントリスナを作成する。
public class TestThread extends Thread{
public TestThread(){} //コンストラクタ
public void run(){ //メイン
/*
* このへんに処理内容を書く
*///この辺で処理終了
}
}
例えば上記のようなクラスに作る場合
public class TestThread extends Thread{
public TestThread(){} //コンストラクタ
public void run(){ //メイン
int code = 0;
/*
* このへんに処理内容を書く
*///この辺で処理終了
if(eventListener != null){eventListener.onFinish(code);} // イベントリスナを起動
}private EventListener eventListener = null;
public static abstract class EventListener{
public abstract void onFinish(int code);
}
public void setEventListener(EventListener eventListener){this.eventListener = eventListener;}}
public class TestThreadTester{
public static void main(String[] args){
TestThread testThread = new TestThread();
testThread.setEventListener(new EventListener(){
public void onFinish(int code){
System.out.println(“Finish.”);
}
});
testThread.start();
}
}
この赤文字のところを付け足せば自分でイベントリスナを作ることができる。
接続・切断については以前もブログに書いたように
接続 : /_ah/channel/connected/
切断 : /_ah/channel/disconnected/
にPOSTリクエストが送信されるのでそこにサーブレッドを設置しておけばいい。
ユーザーIDは
ChannelService channelService = ChannelServiceFactory.getChannelService();
ChannelPresence presence = channelService.parsePresence(HttpServletRequest);
String clientId = presence.clientId();
で取得できる。
さて、サーバからクライアントへのメッセージ送信はChannelServiceのsendMessageで行える。
逆にクライアントからサーバへ送信する機能は用意されていないのだろうか。
Google App Engine (Java)のJavadocのChannelServiceを読んでいたところ、ChannelServiceにはparsePresenceメソッド以外にもparseMessageがあることを知った。
接続・切断それぞれに設置されているサーブレッドのリクエストをこのメソッドに入れても、メッセージを作成できずに例外エラーが発生する。
Google App Engine Channel API JavaScript Referenceを読んでも送信に使いそうなメソッドは存在しない。
(function(){
var channel = new goog.appengine.Channel(TOKEN);
window.socket = channel.open();
window.socket.userId = USERID;
})();
このようなスクリプトを使ってSocketオブジェクトをwindow.socketに格納して、Google Chromeの開発者ツールのコンソールからオブジェクトを参照したところ候補にsendメソッドがあった。
そして使ってみると以下のような警告が表示された。
警告: No file found for: /_ah/channel/receive
というわけで/_ah/channel/receiveにサーブレッドを配置したところ、そこでメッセージを受信していることが確認できた。
そしてHttpRequestをparseMessageに渡してChannelMessageを作成することができた。
ChannelService channelService = ChannelServiceFactory.getChannelService();
ChannelMessage channelMessage = channelService.parseMessage(HttpServletRequest);
String fromClientId = channelMessage.clientId();
String message = channelMessage.getMessage();
上記のコードで発信者ユーザIDとメッセージを取得することができた。
しかし、デプロイしたところまだ動作しないようです。
今のところ、代替策はサーバーはクライアント接続時にTokenをキーにIDをキャッシュしておき、クライアントはメッセージ送信の際にTokenを送らせるぐらいでしょうか。
早く正式に提供してほしい機能ですね。
あと、ChannelPresenceとChannelMessageにどのページに作られたChannelなのかを取得するメソッドがほしいですね。