新規ドキュメント


忘れていく脳のための備忘録
by w_l_s
プロフィールを見る
画像一覧

[失敗日記] 次のステップの足掛かりになるようなデータを取ろう

仕事でやらかしちゃったことでも書いてみよう。
あとで見返したとき、こんなこともあったなぁははは、と笑えるように。

今回やらかしたのは、製品のパフォーマンス試験を行ったさいにsysstatでサーバ負荷の情報を取得しなかったこと。

今の設定値での性能を測ろうということで、性能を示す値(処理時間とか)しかデータをとらなかった。
よく考えれば、サーバ負荷状況だって立派な今の性能値だよね。

取り直せば済む話かもしれないが、何度も同じことをやるのはつまらない。
必要なものはなんなのかきっちりと把握してから仕事をしよう。

今更だけど、この試験の最中はなにか違和感を感じながら仕事をしていた。
目標値がないこと、sysstatをとらなかったことがどこか引っかかってた。
思ったんならやれよって話だけど。
正しくないことに対して違和感を感じることがあるようになってきた気がする。
今回のような違和感を感じたら、いったん手を止めて見直してみよう。
思い違いも多分にあるだろうけどね。
[PR]
# by w_l_s | 2010-04-12 23:50

.tscreenrc

明日、とか言っときながらこの体たらく…。

ひとまず今使っている.tscreenrcを載せてみよう。

###
#
# System setting
#
### startup message ###
startup_message off
### autodetach ###
autodetach on
### zonbie delete key is escape ###
zombie ^[
### split caption ###
caption splitonly "%{= WK}%?%F%{MW}%?%03n %t"
### headline display ###
hardstatus alwayslastline "%{= Wb}[%m/%d %02c] %016L=%{= WK}%-w%50>%{= MW}%n %t%{-}%+w%-0< %="
# scroll buffer size
defscrollback 8192

###
#
# Key binding
#
###
#
# cwindow class
# This class is window control for split, destory and move.
#
### split window ###
bind -c cwindow s eval "split" "focus" "select 0" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow v eval "split -v" "focus" "select 0" 'command -c cwindow' 'echo "Window mode: "'
### create window ###
bind -c cwindow c eval "screen" 'command -c cwindow' 'echo "Window mode: ^%n"'
### destory window ###
bind -c cwindow b eval "remove" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow o eval "only" 'command -c cwindow' 'echo "Window mode: "'
### move split window ###
bind -c cwindow k eval "focus up" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow j eval "focus down" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow h eval "focus top" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow l eval "focus bottom" 'command -c cwindow' 'echo "Window mode: "'
### change window ID ###
bind -c cwindow 0 eval "select 0" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 1 eval "select 1" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 2 eval "select 2" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 3 eval "select 3" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 4 eval "select 4" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 5 eval "select 5" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 6 eval "select 6" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 7 eval "select 7" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 8 eval "select 8" 'command -c cwindow' 'echo "Window mode: "'
bind -c cwindow 9 eval "select 9" 'command -c cwindow' 'echo "Window mode: "'
### change Window resize mode ###
bind -c cwindow r eval 'command -c cresize' 'echo "Window resize mode: "'
### setting cwindow class ###
bind w eval 'command -c cwindow' 'echo "Window mode: "'
###
#
# cresize class
# This class is wondow size control
#
### resize window ###
bind -c cresize j eval "resize +1" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize k eval "resize -1" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize h eval "resize +5" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize l eval "resize -5" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize J eval "resize +10" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize K eval "resize -10" 'command -c cresize' 'echo "Window resize mode: "'
bind -c cresize = eval "resize =" 'command -c cresize' 'echo "Window resize mode: "'
### change Window mode ###
bind -c cresize w eval 'command -c cwindow' 'echo "Window mode: "'
### setting cresizeclass ###
bind r eval 'command -c cresize' 'echo "Window resize mode: "'

前のエントリで載せたサイトを参考に、ちょっと改造してみました。
キーバインドの設定ではクラスを使ってvimのようなモードを作っています。
新規ウィンドウの作成や分割を行うウィンドウモードと、分割後の画面のサイズを変更するリサイズモードを作ってみました。お互いのモードに行来できるようにしています。
また、画面を分割するとブランクウィンドウが表示されウィンドウを選択肢ないといけないのが不便に感じたため、分割後は自動で0番目のウィンドウや新規ウィンドウを割り当てるようにしています。

使ってみると便利ですね。ログをみながら開発できるこの素晴らしさよ!

ちなみにscreenrcとしても使えます。
[PR]
# by w_l_s | 2010-04-01 00:07

tscreenを使ってみよう

会社でscreenが大流行!
https://savannah.gnu.org/projects/screen/

おすすめされたので、早速調べてみたらtscreenに出会った。
screenより新しい?ようなので、こっちを触ってみることにしたよ。
http://www.steve.org.uk/Software/tscreen/

とは言っても、大元はscreenなので、screenの設定をほぼそのまま持ってこれるみたい。

http://d.hatena.ne.jp/bokuju/
上記のサイトを参考に、screenのinfoを見ながらtscreenrcを書いたよ。
一日中ずっとinfo見てたのは初めて。目が痛い…。

インストール
tarダウンロード
# wget http://www.steve.org.uk/Software/tscreen/dist/tscreen-0.4.9.tar.gz

解凍
# tar zxfv tscreen-0.4.9.tar.gz

ビルド
# cd tscreen-0.4.9
# configure --enable-colors256
# make
# make install

設定ファイルコピー
# cd etc
# cp tscreenrc /etc/

インストールはこんな感じでスイスイ進みました。
明日は.tscreenrcを載せてみたいと思います。
[PR]
# by w_l_s | 2010-03-21 00:34

FizzBuzzに挑戦してみたよ

コードゴルフなんてのがあるんだって。
そのなかに、有名?なFizzBuzz問題があって、懐かしかったからやってみたよ。

読みやすいように、改行とか入っているけど、投稿するときは一行にします。
これで166バイトでした。
処理にまだ工夫できそうな気がするんだけどなー。


#include <stdio.h>
int c;
void main()
{
while(c++^100){
if(c%3==0){
printf("Fizz");
if(c%5==0)
printf("Buzz");
}else if(c%5==0)
printf("Buzz");
else
printf("%d",c);
puts("");
}
}


////////////////////////////////

もっと工夫してみたら143バイトまで減らせたよ。
#include <stdio.h>
int c;
void main()
{
while(c++^100){
if(c%3&&c%5){
printf("%d",c);
}
if(c%3==0){
printf("Fizz");
}
if(c%5==0){
printf("Buzz");
}
puts("");
}
}


////////////////////////////////
さらにもっと減らしてみたよ。136バイトに減量成功だよ。

どんなことをやっているか書いておかないと忘れそうだ。

int main()にすると戻り値を書かないといけないからvoidへ。さらに、main関数には型を書かなくてもエラーにならないので消してみた。警告がうるさい。
if文は、一行の式しかないのであれば{}がいらないから消す。ぶら下がり構文とか言われているみたい。
while文の条件式 c++^100 は、c が100になると、排他的論理和ってやつで0になるよ。ようは同じ数字になったら終了ってこと。
if文の条件式 c%3&&c%5 は、3でも5でも15でも割り切れない場合に真になるよ。
そのときは数字を表示すればいいね。
わざわざ15で割り切れたときのことを考えなくても、3で割り切れたときにFizz,5で割り切れたときにBuzzを画面に出せば、自然と15で割り切れるときにFizzBuzzになってくれる。


#include <stdio.h>
int c;
main()
{
while(c++^100){
if(c%3&&c%5)printf("%d",c);
if(c%3==0)printf("Fizz");
if(c%5==0)printf("Buzz");
puts("");
}
}

[PR]
# by w_l_s | 2009-09-17 00:30 | c言語

あの素晴らしいイベントをもう一度

最近は会社が忙しくてずっとほったらかしだった…。
毎週残業で、帰って寝て起きて会社へ、という毎日だった。

今日は珍しく早く帰れたので、会社でやったことでも書いてみよう。

今、会社ではjQueryを使っている。
Ajax通信したり、折りたたんだり、フォームを出したり消したり…。

そんななか、こんなことを言われた。

「送信ボタンを連打すると、何度でもサーバに送信するからやめさせて」

そりゃね、$.click()で送信イベント起こしてるから、押せば何回でも送信されるよね。
じゃあどうしようか。
$.one()を使えば一回だけイベントを起こせるけど、
フォームの入力が正しくないときは入力を直してもらってからもう一度送信しなおすし、
サーバからエラーが帰ってきたらやっぱり直してもらってから再送信しないといけない。
サーバに正しく処理されたらもうこのイベントは起さなくていい。

ようは、入力がだめだったら、もう一度同じイベントを設定しなおして、
サーバ側にわたって正しく処理されたらイベントを終了すればいいわけだ。

$.ajax()を見てみると、4つのコールバック関数がある。
beforeSend : 送信前の処理
complete : 送信後の共通した処理
success : 送信して成功だったときの処理
error : 送信して失敗だったときの処理

こいつらと$.one()を使って、成功するまでイベントを再設定すればいいんじゃないだろうか。
beforeSend とerror のコールバック関数で、同じイベントを再度設定してやればうまくいきそうだ。

てなわけで、失敗したら自分自身を呼び出してイベントを設定する関数を書いてみました。
会社で書いたものはさすがに出せないけど、骨組みだけでも載せてみる。

ちなみに "..." の部分は好きな処理や引数を書いて、自分好みの関数に仕立ててください。
function ajax_communication_event(button_id, form, url, 
    request_type, data_type, ..., validator_function){
$(button_id).one("click", function(){
$.ajax({
url: url,
type: request_type,
data: $(form).serialize(),
dataType: data_type,

beforeSend: function(){
...
boolean = validator_function();
if(boolean){
ajax_communication_event(
button_id,
form,
url,
request_type,
data_type,
...,
validator_function
);
}
return boolean;
},
complete: function(){
...;
},
success: function(){
...;
},
error: function(){
...
ajax_communication_event(
button_id,
form,
url,
request_type,
data_type,
...,
validator_function
);
},
});
});
}


長ったらしいけど、重要なことはbeforeSend と error のコールバック関数で自分自身を呼び出して同じイベントを設定するということ。
再帰処理を使えば意外と簡単に実装できるものだった。
[PR]
# by w_l_s | 2009-04-13 23:42 | jQuery

カテゴリ

全体
erlang
Python
c言語
作って遊ぼう
シェルスクリプト
OS
javascript
jQuery
反省
vim
未分類

フォロー中のブログ

メモ帳

最新のトラックバック

ライフログ

検索

タグ

ファン

ブログジャンル

画像一覧