2009/10/19

Pythonのスライス表記

こんばんはー、Pythonビギナーです。どうぞよろしく。

えーっと、Pythonでは foo[1:3] と書くと配列の一部とか文字列の一部が取り出せるそうです。
ただ、これがすごくわかりにくい。

Python リファレンスマニュアル
5.3.3 スライス表記 (slicing)
スライスは i および j をそれぞれ指定した下境界、上境界として、インデクス k が i <= k < j となる全ての要素を選択します。

ああ、もう何言ってるんだよ・・・わからないよ。もっとわかりやすく言って欲しい。

どうやら"境界"っていうので、
0  1  2  3  4  5
[a][b][c][d][e]
↑<-->↑
この間

の事を言うらしいんだ!だから「b,c」が取り出される。いやまぁ、ちゃんと「i <= k < j」っておっしゃられてるんですけどね。

でもね。多くの場合はさ、
 0  1  2  3  4  5
[a][b][c][d][e]
↑<--->↑
この間

って、思うよね?だから「b,c,d」が取り出されるって思うよね?よね?
僕ちんわかんないよ。できることなら図で示して、やさしく教えて欲しい。

ああ、この先入観でムダに時間を使っちゃったので、自分へ言い訳をして心を落ち着けてる次第です。

2009/10/14

PythonAutoReload On しても、リロードしてくれない

2009/12/5 追記
Djangoのマニュアルにちゃんと書いてあった・・・ orz
mod_python 上で開発用サーバを動かす
開発用サーバに mod_python を使う場合、コードを変更する度にサーバを再起動するようなやんちゃは避けられます。 MaxRequestsPerChild 1 をアパッチの httpd.conf ファイルに指定し、Apache にリクエストごとに全てをリロードさせてください。

というわけで、以下の文章は無視する方向でどうぞよろしく。
-------------------

Djangoハジメマシタ

それで、Apache mod_python っていう環境で開発してるわけですが、コードを修正しても、なんだかいつまでたっても反映されないことがある。
ブラウザをリロードする度に、エラー、正常、エラー、、、、みたいな。なに、もう、すごいストレス。

ググっても、なんかみんな「PythonAutoReload On」ってすればオッケーみたいに涼しい顔してるけど、ほんとにー?ならないよ!
もー、なんでだろ、もうあれだ、「MaxRequestsPerChild 1」ってして、1リクエストごとに子プロセスを再起動することにしよう。

もちろん、開発環境だけですよ。

2009/09/30

えっとですね、とりあえず余ってるDELLのデスクトップPCをサーバにしたてて運用してやろうと。
こんなご時勢なので新しい設備投資はなかなか厳しいですよね。あー世知辛い。

で、一通りセットアップしてからリブートして、自分の席からゴニョゴニョしてやろうかと思ったらSSHでつながらない・・・
あれれー、なんでなんでー?さっきまで上機嫌だったじゃん。ちょっと離れたらもうご機嫌ナナメ?
もーしょうがないなー、どうしたんだい?
Keyboard Failure

サーバ運用だから、ディスプレイだとかキーボードだとかいきなり引っこ抜いてごめんネ
でも、文句は言わせないゾ
  1. BIOS設定画面を表示
  2. Standard CMOS Features を選択
  3. Halt On の項目を、All,But Keyboard に設定

2009/09/17

Remember The Milk のタスクを Skype でリマインド

たいした仕事もしてないんですけど、Remember The MilkでToDo管理をしてたりします。
で、よくありがちなリマインド機能ですが、いちいちメールなんかでお知らせされるとうっとおしいんです。そのうち無視するようになっちゃって、あぁ、もう何がなんだか。
なので、Skypeに通知するようにしたんですけど、これがまた思うとおりに行かない。
なんでか、最初に、Remember The MilkのSkypeアカウントの「rtmremind」へなんかメッセージを送らないと、教えてくれないんですよ。
なので、毎朝メッセージを送ってたんですけど、そんなの当然、忘れちゃうよヽ(`Д´)ノ

ってことで、正しい対処法かわかんないですけど、起動時に自動でメッセージを送るようにしました。

SkypeTask.js
var rtmremind = 'rtmremind';
var body = 'task';
var trycount = 10;

//------------------------------------------------

var skype = new ActiveXObject("Skype4COM.Skype");
var user, chat;

WScript.ConnectObject(skype, 'Skype_');

var i = 1;
while(!skype.Client.IsRunning){
WScript.Sleep(20000);
if(i++ >= trycount) break;
}
skype.Attach();

user = skype.User(rtmremind);
chat = skype.CreateChatWith(user.Handle);

chat.SendMessage(body + "\n");

スタートアップにでも放り込んで下さい。
Skypeは起動に時間がかかるので、Sleepしながら10回頑張ります。
それでも起動してないと、Skype4COM.Skypeがエラーしますけど、そんときは今日は調子が悪いんだなとあきらめて下さい。

あ、あと、この部分を、
var body      = 'task';

var body      = '麗子君、今日の予定は?';

とかすると、なんだかちょっとえらくなった気分を味わえるかもしれません。

2009/08/20

コンソールでちょこっとPHPが試したいとき

あれー? PHPの設定ってどうなってたっけー?
phpinfo() をやればいいんだけど、いちいちファイルを作るのめんどくせーな、って時にはですね、こんな塩梅ですよ。
echo '<?php phpinfo() ?>' | php

こんな風にすれば、有効な関数も一覧にできちゃう。
echo '<?php $funcs = get_defined_functions(); foreach ($funcs['internal'] as $val) { echo "$val\n"; } ?>' | php

まぁ、ここまでするなら、ファイル作ったほうが楽ですけどね。
# 本末転倒

2009/08/15

mknmz が重複して実行される

mknmz は、実行時に NMZ.lock2 というファイルを生成して、重複実行されないようになっているそうです。
でも、私の環境では実行されることがあります。おかしいですね。

どうやら、mknmz が実行されてすぐに、NMZ.lock2 が生成されるわけではなくて、対象ファイルをチェックしてからとかある程度処理をしてから生成されるみたいです。まぁ勘ですけど。

cronとかで、定期的に実行してたとして、対象ファイルが沢山あったりして、NMZ.lock2 が生成されるまで時間がかかってる間にもう一回 mknmz を実行したりするとそのまま重複実行できちゃたりします。

なので、daemontoolsで実行をコントロールすることにしましたよ、と。

2009/07/01

まるちSkype (4.0以降ですよ!)

私は裏表があります。その場その場で態度が変わります。
なので、Skypeもいろいろと使い分けたいです。
ので、こんなものを作ってみました。

multi_skype.js

//アカウント設定
var account = [
{
id : ''
,pw : ''
}
,
{
id : ''
,pw : ''
}
];

//Skypeプログラムへのパス
var SKYPE = '"C:\\Program Files\\Skype\\Phone\\Skype.exe"';

//------------------------------------------------

var wsh = new ActiveXObject("WScript.Shell");
var cmd;
var opt = new Array();

for(var i = 0; i < account.length; i++){
opt = [
"/username:" + account[i].id
,"/password:" + account[i].pw
,"/nosplash"
,"/minimized"
,(i > 0) ? "/secondary" : ""
];
cmd = SKYPE + " " + opt.join(" ");
wsh.exec(cmd);
WScript.Sleep(1000);
}

アカウント設定のところに使い分けたい id, pw を入力したらダブルクリックで起動します。
Skypeの自動起動オプションはチェックを外して下さいね。


Google Analytics