記事と労力と当たり方についてかんがえてみた

労力をかけた割にまったく読まれない記事と手を抜いたのにやたら読まれる記事があります。起きている現象とどちらの記事もちゃんと読めるものだという前提に立った場合に何でそういうことが起きてるのかなと言うことを考えたんですが、おそらく記事の濃さによる読者の絞り込みの問題もかんけいあるのかなぁとは思っております。もちろんそこを関係なしに読む人はいるのですがそこは例外として扱います。

grep filter1 | grep filter2 ... grep filtern | wc -l

読者の知識に対してこんな感じにフィルターをかけていった結果、相当少ない人かかなり特殊な人しか引っかからない状態になっているのでは無いかという感じになるのかと思います。もちろんその界隈においてその知識を必要としてる人が少ないとかそういう可能性もあるし一概にこれだけが要因とはいえないのですが一因ではあるのかなとふと頭をよぎったのでメモしておきます。

参考


文章力を高めるキホンは「知識の弊害」を意識すること | ライフハッカー[日本版]

open systemcallに対するメモ

open systemcallによって何がおきるのか?

open systemcallを発行すると、read(2),write(2),lseek(2),fcntl(2)などで使用されるファイルディスクリプタを返します。ファイルディスクリプタ自体は非負の整数で"その"プロセスが現在openしてない最小の値が返ります。これはプロセスごとに存在するファイルディスクリプタテーブルのidのようなものです。

memo

基本、こららのシステムコールはOSのバッファに対して実行を命令する物で物理媒体への書き込みを保証する物ではない。fsyncあたりがこれに当たるようだと現状の認識では考えている。この辺は確認しておきたい。

#include <fcntl.h>

int main()
{
	int fd;
	fd = open("test.txt", O_WRONLY);
	close(fd);
	return 0;
}

実際openだけを実行しようとすると、手元のgccではコンパイルが通り実行できます。
ただし、上記の場合はopenのオプションの関係で先にtouch test.txtでファイルを作成しておく必要があります。

引数に渡す物はなにか?

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);

第1引数でファイルパスを渡すのは割と明示的ですが、第2引数以降が割と曖昧でしたので纏めておこうかと

O_RDONLY, O_WRONLY, O_RDWR

この3つは必ずどれか一つを指定する必要があります。

O_CREAT

ファイルが存在しなかった場合において作成します。このオプションを指定することにより、事前にtouch hoge.txtなどする必要がなくなります。manを見る限りにおいて、O_CREATEが指定された場合は,第3引数のmodeを指定する必要があります。(ただ、彼方此方の動作させている例をみているとmodeを指定してこの引数を渡している物があんまり見受けられないようなので実は現在ではdefaultが効くのでいらないとか?)modeはこちらはsys/stat.hへ登録されているマクロを使用するとのこと。マクロはuser,group,othersでそれぞれ読み込み許可、書き込み許可、実行許可を設定する物がある。例えば、755だったら、S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH となる。(see man 2 open)

#include <fcntl.h>

int main()
{
	int fd;
	fd = open("test.txt", O_CREAT|O_RDWR, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
	close(fd);
	return 0;
}
O_DIRECT

アプリケーションが独自にキャッシュ機能を持っている場合においてOSのキャッシュ機能が邪魔になるケースがある。そういう場合においてO_DIRECTを指定することにより性能が向上する。このオプションが指定されている場合はI/Oは同期で行われ、read(2),write(2)が終了した時点でデータ転送が完了したことが保証される。ただし、アプリケーションの独自キャッシュ等が無い場合は大幅に性能が劣化する。

解説等はこちら

http://d.hatena.ne.jp/takkan_m/20071008/1191850035

検証はこちらを参考に

http://ishwat.blogspot.jp/2011/12/direct-io-write.html


正直書き込みでO_DIRECTが必要になるケースがよくわからない。読み込みケースの場合はアプリケーション側のキャッシュが有効な場合はO_DIRECTが有効になっていた方が良いであろうというのは想像できるのだが。物理的に書き込む場合はfsync system callを発行しなければならない。

http://aoking.hatenablog.jp/entry/20120921/1348220615

#include <fcntl.h>

int main()
{
	int fd;
	fd = open("test.txt", O_CREAT|O_RDWR|O_DIRECT, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
	close(fd);
	return 0;
}
O_APPEND

ファイル追加モードでopenする。ファイルポインターをファイルの最後に移動させる。ファイルに対して追記をするときに使う複数のプロセスからO_APPENDで開いた場合でもwrite(2)をする直前にlseek(2)が走って末尾に行くことが保証されているのでファイルの末尾に書き込まれるようです。

memo

file pointerからKernelのファイルオブジェクトを調べる必要がある。

#include <fcntl.h>

int main()
{
	int fd;

	fd = open("test.txt", O_CREAT|O_RDWR|O_APPEND, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);

	close(fd);

	return 0;
}

TODO

  1. どれだけopenできるのか?
  2. 制約はどこにあるのか?
  3. 制約を自前で取るにはどこからとればいいのか?

参考文献

  1. man 2 syscalls
  2. man 2 open
  3. man 2 stat
  4. http://kotaroito.hatenablog.com/entry/20120108/1326030769
  5. [ファイルディスクリプタについて(1)~ファイルディスクリプタの概要|http://codezine.jp/article/detail/4836]
  6. [II-6-6. カーネルによるファイル操作|http://ossforum.jp/en/node/858]
  7. [読書メモ / "Advanced UNIX Programming" | http://www.glamenv-septzen.net/view/842 ]
  8. fsync http://aoking.hatenablog.jp/entry/20120921/1348220615


Linuxプログラミングインタフェース

Linuxプログラミングインタフェース

電子書籍版がない場合の技術書の読み方

最近はオライリーや達人出版等、そしてKindleもかな。技術系の電子書籍が増えてきて読むのがたいへん楽になってきたんですけど、やはりまだまだ電子化されてないもので分厚くて重要な本が多くそれらを読むのは大変置き場に困ったり体力を無駄に消耗したりするのでどうしたものやらと思っていました。妥協案としてブックスタンドを使うべきじゃないかと思って探したらどうもこれがおすすめらしいので買ってみます。


actto BST-02 ブックスタンド(OEM品番:EDH-004)

actto BST-02 ブックスタンド(OEM品番:EDH-004)

参考


本を使った学習を超効率化するブックスタンド-独学!未経験からWebデザイナーになる!!

「オブジェクト指向プログラマが次に読む本 Scalaで学ぶ関数型入門」を読んだ

基本的に関数型言語ScalaJVM言語も初心者なのでその前提で書かせていただきます。

Scala興味なくても関数型と並列に興味がある人なら必要最低限の情報がうまく俯瞰できるようになっていて非常にいいです。関数型プログラミングの基本概念の副作用、単一代入、参照透明性、カリー化、部分適用、遅延評価、クロージャー、再帰、周りが丁寧に解説されています。アクタープログラミングとパーサーコンビネーターのところもまとまっていてわかりやすかったです。

ただ、タイトルのつけ方で若干損をしている感じはした。

関数型やScalaやりたいんだけど若干敷居高いなと感じてる初心者にはおすすめかと思います。

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

オブジェクト指向プログラマが次に読む本 ?Scalaで学ぶ関数脳入門

追記

Scala抑えたいなら通称コップ本である。「Scalaスケーラブルプログラミング第2版」や並列処理周りの「Effective Akka」とかもあるといいかもです。コップ本ないとつらいです。電子版早くでてください。


Scalaスケーラブルプログラミング第2版

Scalaスケーラブルプログラミング第2版

Effective Akka

Effective Akka

楽してgitignoreを得る方法

何かのプロジェクトを始めるたびに、.gitignoreを作ったり、他のプロジェクト見つけてきて移植するのが毎回面倒でした。最近楽する方法を2種類ほど見つけたので紹介します。

github.com/github/gitignore

githubが提供しているgitignore集ですね。
自分に合った物をこれでみつけてはっければ特に考えなくてもいけます。
(ただし、perlだとcarton対応とかあるので若干カスタマイズする必要性があります)

github/gitignore · GitHub

gitignore.io

gitignore.ioというサイトですね。言語名いれて検索するだけで
自分の欲しいgitignoreを得ることができます。
(知らないだけで裏でgithubのやつがうごいててもおかしくないですが)



gitignore.io

エナジーチャージキャンディが販売終了していた

こちらのエナジーチャージキャンディという物が疲れたときに頼りになるので箱買いしてたのですがいつの間にか販売終了していました。(売れなかったんですね)


代替物で何か無いかなとおもって探したら似たようなものが出てきたのでこんどはコレを買ってみようかと思います。

英文から単語帳を作成するやつをつくってみた

デ辞蔵Webサービスというものをがありまして、こちらはAPI経由で辞書データが使えるサービスらしいです。



デ辞蔵 オンラインでもオフラインでも使える電子辞書


Google自動翻訳は便利だけどほしいものは英文からの単語帳なんだよなぁと思っていたのでちょうどいいから試しに作ってみました。本当に作ってみただけなのでとりあえず動作はしますという状態です。bin以下に放置しておいたんですがそのまま忘れ去りそうだったのであげてみました。macだとcarton で以下のように動作します。思い付きでパパッと作ったので直したいところてんこ盛りなんですがとりあえず放置の方向です。

cat data | carton exec perl -I lib scripts/cetfs.pl > index.html && open index.html


hiroyukim/p5-Cetfs · GitHub