FC2ブログ

欲しいものリスト

あー、もぉ、欲しくて欲しくてたまんないものが出た。

シャープ電子ノート WG-N20
000018120.jpg

8月8日発売予定。
旧版では反射型液晶が暗いだの、書き心地がどうのとかいろいろ厳しいレビューも出ていて、殆ど同じスペックのWGーN20も厳しい意見が出るのだろうが、、、もぉこれ持ってスラスラやっちゃってる自分の姿を妄想しちゃうとたまらんのです。

が、稟議はあえなく破棄されて。
んー、もちょっと待ってショップで実物触ってからまた悩むことにする。

2013/07/31 ---
というか、買った。ヤマダで触ったらもぉ買った。WG-N10。
9800-。まぁ量販店価格見ればこんなもん。
叱られるのは一回だ。
スポンサーサイト

墓場まで持っていくつもりはないが

まぁ長いこといろいろやってるといろんな事があるわけで。

「あー、あの処理、違う!」って思いつくのは大抵が寝床について目を閉じてからで、自前のアプリだったらすぐ起き出してアップデート作り出すところなんだろうが、仕事だとちょっと困る。
限られた時間の中で、限られた環境でいろいろなルールの上での作業が強いられるということは、このちょっとした(致命的であったりしても)閃きや発見をスムーズに反映させる仕組みがないということであって。

全ては翌日業務が始まってからでないと何もできず、かつ自分の主張を整理してから決められたルートに乗せてしかるべき部署の判断を仰いで、そしてGOがかかって、始めて着手となる。
事はそれで終わらず、なぜなににも対応しなければならないので、なぜそういう事態が起きたのか、なぜ気がついたのか、なぜ対応せねばならないのかをこれまた決められた書式で(誰かの都合の良いように)書き起こさなければならない。

で、歳とったロートルはふと考える。
黙っててもいいんじゃね?

どっちにしてもスムーズに作業させてもらえるわけじゃなし、発覚した時に対応する準備だけ個人的にしておけばなんとかなるんじゃねーかなと。
元はと言えば・・・と言い出すとグチが限りなくなるので、心の平穏のためにそれ以上は考え無いようにして。

のらりくらりとやってるように見られがちだけれど、実際結構いっぱいいっぱいなのだよ。:-P

Because of love

今日のおやすみの曲はハン・スンヨンのBecause of love.
この声がたまらんのよぉ


MonoでC#

LinuxでもMonoが使えるのでC#プログラミングができる。
しかもSystem.Windows.Formsなんかもそのまま使えるので、Windowsで作成したアプリケーションもLinuxのMonoでそのまま動かせる!

ってのが建前なんだけれども、実際のところC#で書かれたWindowsアプリケーションで、[dllimport]つまりはWin32APIを使っていないものなど殆どないので、Linuxでは動かんのです。
逆に言えば、Win32API呼び出ししないように作れば、Linuxであってもそのまま動くと言えるんだが、
SendMessageやFindWindowやらMMFやらを.NETでごにょごにょするのは結構面倒くさい。

しかしこの面倒くさい問題をクリアしさえすれば、LinuxでMonoでC#でサーバシステム構築なんてこともできてしまう。
強力なマネージド言語であるC#であれば、サーバシステムといえど大幅な工数削減が見込めるし、記述が煩雑になり技術者のスキルの問題で敬遠されがちだったマルチスレッドもさくさく使えるようになる。
(Cでのサーバ構築の場合、業務系の多くのシステムでは機能毎にプロセスを分け、プロセス間通信によりシステムとしての動作をさせてきている。これをスレッド操作とすることで結構楽になる事も多い。)

本来営業品目はあくまでC/C++なのでC#が主流になっても困るんだが、LinuxサーバでC#で業務系サーバってのもちょっと面白そうなので、機会があったら試してみようと思う。

keventでtail -f

BSDで使えるkevent。
FreeBSDで簡単tail -fを作ってみた。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/event.h>
#include <errno.h>

int main(int argc, char **argv)
{
if (argc < 2) {
fprintf(stderr, "Usage: TEST filename\n");
exit(EXIT_FAILURE);
}

FILE *fp = fopen(argv[1], "r+");
if (fp == NULL) {
fprintf(stderr, "Error: Could not open file [%s].\n", argv[1]);
exit(EXIT_FAILURE);
}
fseek(fp, 0, SEEK_END);

struct kevent ev;
int kq = kqueue();
EV_SET(&ev, fileno(fp)
, EVFILT_READ, EV_ADD | EV_ENABLE | EV_CLEAR, 0, 0, 0);

if (kevent(kq, &ev, 1, NULL, 0, NULL) == -1) {
fprintf(stderr, "Error: Could not use 'kevent'\n");
exit(EXIT_FAILURE);
}

while (1) {
int n = kevent(kq, NULL, 0, &ev, 1, NULL);
if (n < 0) {
fprintf(stderr, "Error: %d\n", errno);
fclose(fp);
break;
}
else if (n == 0) {
// timeout
}
else if (ev.filter == EVFILT_READ) {
char buf[1024];
int r = fread(buf, 1, sizeof buf, fp);
fwrite(buf, r, 1, stdout);
(void)fflush(stdout);
clearerr(fp);
}
}

return 0;
}

実際のtailのソースを見ると、複数ファイル指定の処理とか、VNODE変更の処理とか、keventが失敗する場合のselectでのポーリング処理とかが入って少々複雑になっているが、tail -f の基本的な処理としてはこんな感じ。
実業務で使うなら、freadのエラー処理なんかも必要かも。
プロフィール

f_yamaki

Author:f_yamaki

アクセスカウンタ
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク