■
・yacc の中の(?)人へのいんたびう → Computerworld - The A-Z of Programming Languages: YACC
computerworld て .jp なドメインもあるみたいだけど、記事を訳して載っけてもらえんもんか喃。
・xpにSP3適用した。 SP2のときより時間かからなかった? Cドライブの空き容量が減って苦笑い。 またどうにかして空けないと。
一つ前へ
2008年6月(下旬)
一つ後へ
2008年7月(中旬)
Do you have any advice for up-and-coming programmers? You can't rewrite a program too many times, especially if you make sure it gets smaller and faster each time. I've seen over and over that if something gets an order of magnitude faster, it becomes qualitatively different. And if it is two orders of magnitude faster, it becomes amazing. Consider what Google would be like if queries took 25 seconds to be answered... One more piece of advice-take a theoretician to lunch... computerworld による Stephen C. Johnson へのインタビュー記事から Computerworld - The A-Z of Programming Languages: YACC
・yacc の中の(?)人へのいんたびう → Computerworld - The A-Z of Programming Languages: YACC
computerworld て .jp なドメインもあるみたいだけど、記事を訳して載っけてもらえんもんか喃。
・xpにSP3適用した。 SP2のときより時間かからなかった? Cドライブの空き容量が減って苦笑い。 またどうにかして空けないと。
Just another Ruby porter, 2008-7-a [Golf] mawkのgsubの挙動 これは予想外だな。 % gawk 'BEGIN{a = "d d d 3"; gsub(/^d /, "", a); print a}' d d 3 % mawk 'BEGIN{a = "d d d 3"; gsub(/^d /, "", a); print a}' 3
mawkの場合subを実現している関数があって(とーぜんCで実装されている)、 gsubはその関数を置換が発生したら繰り返し呼ぶというラッパー関数で実現されています。 このとき、上記の例のようなパターンだと '^' の処理をきちんとしてやらないと いけないのですが、故意か不注意かお構いなしに同じパターンで呼びつづけます。 したがって、
a ← "d d d 3";
gsub(/^d /, "", a);
sub(/^d /, "", a);
a ← "d d 3";
sub(/^d /, "", a);
a ← "d 3";
sub(/^d /, "", a);
a ← "3";
という流れで、a は最終的に '3' になってしまう。というわけです。 ですから、
gsub(/^/, "x", a);
とかやると楽しいことになります。
なんでこんなこと知っているかというと、お遊びでWindowsに移植した(ってDOS版を ちょっといぢっただけ)ものを公開したら、そういうバグ報告が来たことがあったので 覚えていただけというオチです。 でも十年以上前の話なのに結構覚えているもんだな(笑)
BSD の ports とかでは独自にパッチをあてたバージョンとかあったような気がするんですが、 それにはこのバグ(?)の対処はあるんでしょうか。
X Window Systemのコールバック呼び出しのからくりってどうなってるんでしたっけ? Windowsの Window Procedure って巨大な switch case 文ですけど Xは違いましたよね。 あ、classic Macはどうだったっけ。 SX-Window はおぼえてるんだが(笑)
わは → はてなブックマーク - cho45のブックマーク / ゆの in language
元ネタわからないけどとりあえず書いてみたという人大杉(笑)
ゆの in Tcl - ’ellaneous sumim 2008/07/10 10:16 Tcl…、恐ろしい子!w
sumim さんみっけ♪
2008-07-08 - みねこあ sumim 2008/07/09 12:08 ちょww、それむちゃぶり! >召還 minekoa 2008/07/09 14:03 あぁっ、ハードル上げて投げっぱなし、すみません m(_ _)m きむら(K)さんが 数ある言語の中で わざわさ Smalltalk を指名されたのは、やっぱり 普段 sumim さん作っているような すっごいのを求めてるよね、絶対...と思ったので、ついつい(^^;
無茶振りの大元です(笑) ほかの言語でやっているのをみたら sumimさんなら一も二もなく挑戦するだろうけど、 ちょっと考えてみて Smalltalkじゃ辛くね? と思ったので お手並みを拝見したかったと。
ただいまTBSで ひだまりスケッチ365放送ちう。
Python best practices Sometimes even good programmers at their first tries of Python use less than optimal solutions and language constructs. In the years Python has accumulated few redundancies and few warts (and some of them will be removed with Python 3.0), but it's a generally clean language still, so with a page like this you can avoid the most common ones. This page hopes to be really simple and short enough, you can find explanations online elsewhere. For some things I may be wrong, but this page comes from some experience, so when you don't agree with me, I suggest you to go look for the truth inside many newsgroups and Web pages, just don't assume you are right. If you find I am wrong, or you have questions or comments my email address can be found in my Home Page, I'll glady improve this page and learn from my mistakes.
ちと疑問に思えるものもありましたが、おおむねPEPの焼き直し? 簡単な日本語の説明つけてみましたが、明日以降の公開ということで。
ム板(参考図書スレだったかな?)でも話題に上っていた アルゴリズムデザインの訳書の話が やねうらおさんのところに。 → アルゴリズムデザイン - やねうらお-よっちゃんイカを買いに行くのは控えて本格的に本書く男
共立出版株式会社 新刊・近刊2008年7月『アルゴリズムデザイン』 アルゴリズムデザイン (ISBN978-4-320-12217-8) Jon Kleinberg, Éva Tardos 著 浅野孝夫・浅野泰仁・小野孝男・平田富夫 訳 B5,832頁,15000円
ぐはあっ
いやまあ原書からして相当高いのは知ってましたが、 The Art of Computer Programming よりも上っすか。 キビシイ喃。
共立出版株式会社 新刊・近刊2008年7月『アルゴリズムデザイン』 ●内容 本翻訳書は,Jon Kleinbergと Éva Tardosの著書"Algorithm Design"の全訳である。 (ry 著者の序文にもあるように,著者のアルゴリズムデザインの世界観は以下のとおりである。ア ルゴリズム的な考え方は,情報科学分野はもちろん,実社会の様々な分野に広く浸透してきてい る。実際,伝統的な旧来の分野にとどまらず,インターネットのルーティングプロトコル,ゲノ ムインフォマティクス,組合せ的オークション,Web広告バナーの提示,等の新規分野の至ると ころでアルゴリズムが利用されている。しかし一方で,現実に起こる問題が,きれいに定式化さ れた数学的な形式の問題として現れることは極めてまれである。むしろ,煩雑な細部が大量に付 随しているのが普通であり,その中には本質的なものも余分なものもあったりする。したがって, アルゴリズムデザインの実際的な作業は,問題の中の,数学的な核となる部分を見出す仕事と, 問題の構造に基づいた適切なアルゴリズムデザイン技法を見極める仕事という,二つの基本的な 構成要素からなっている。これら二つの構成要素は相互に関連し合っている。すなわち,様々な アルゴリズムデザイン技法に習熟すればするほど,問題に潜んでいる煩雑な情報からきれいな定 式化を導き出すことができるようになる。さらに,アルゴリズム的な考え方により,通常では見 えなかったものまでが見えてくるようになる。潜んでいる問題を明快に表現する言語を習得でき, そしてそれを用いて,さらなる展開への扉が開けるという点に,アルゴリズム的な考え方の最大 の効用がある。 著者はこのようなアルゴリズムデザインの世界観に基づいて,原書の目標を以下のように設定 している。すなわち,様々な分野で生じる複雑な形式の問題から明快な定式化を発見する方法と, その定式化に基づいて実際の問題に対する効率的なアルゴリズムをデザインする方法をわかりや すく提供することが原書の目標であるとしている。 従来のアルゴリズムの書籍では,この観点が取り上げられることはほとんどなかった。すなわ ち,効率的なアルゴリズムだけをトップダウン方式で提示するものが多かったのである。しかし, アルゴリズムの有用性と可能性を真に理解し,様々な現実の問題に応用できるような実力を養成 するためには,そこで生じる複雑な形式の問題から明快な定式化を発見する方法が極めて重要な のである。アルゴリズムデザインの世界におけるこの目標設定と,それを達成するための工夫が, 原書の画期的な特徴となっている。 (ry
今日からオレ小町!! ≫ メインフレーム屋をもう少し尊敬しても良いのでは? >厳密に言えば、VMで動作するかは処理系の話であって、言語自体の性質じゃないですが。 Javaは、VMが前提で作られてる言語のはずで、言語自体の性質です。
? Write once, Run anyware の例のアレを考えればそういう方向にいくだろうなというのは わかるけど「前提」にまでなってたっけ? >VM
[ruby-list:45213] [ANN] 第1回 Asakusa.rb のご案内 Subject: [ruby-list:45213] [ANN] 第1回 Asakusa.rb のご案内 From: 松田 明 Date: Thu, 10 Jul 2008 16:22:18 +0900 Rubyistの皆さん、こんにちは。 松田と申します。 さて、さきほど高橋会長から Regional RubyKaigiに関する お知らせもあったところですが、ちょうどこのたび 「Asakusa.rb」なる新しい Regional Rubyコミュニティを 立ち上げることになったので、ちょっと告知させてください。 ・what Asakusa.rbは、地域Rubyistコミュニティです。 が、いわゆる「勉強会」や「ユーザグループ」とはひと味違って、 たとえば Seattle.rb <http://seattlerb.rubyforge.org> のように 何か「成果を出す」活動を行うことを目標にしようと思っています。 ・where なんとなく東京23区の東側のほうの「下町」と言われるあたり。 # Akasaka.rb(赤坂.rb)ではありません。Asakusa.rb(浅 草.rb)です ・who この地域には、以下のような方々が住んでいます。 「YARV」のささださん 「ゆるふわ」のかくたにさん 「たのるび」のgotoyuzoさん 「くまくまー」の舞波さん 「TechTalk.jp」のcojiさん スーパー通訳Leoさん etc... ・why 上記のように、浅草界隈は世界有数の Rubyistの名産地であり、 日本では「Matz江」に次いで、いわば「Yet Another Ruby City」 と言っても過言ではないでしょう。 また、高橋会長がおっしゃるような <http://twitter.com/takahashim/statuses/852618800> といった問題意識も元々あったところに、 先日の RubyKaigiでの Regional RubyKaigi構想も踏ま えて、 <http://kakutani.com/20080622.html#p02> じゃあ一丁このへんで地域Ruby活動という形で集まってみようか ということになった次第です。
東京西部とかover 35歳とかで縛ったら人は集まらないかなあ。 いやRubyに限らんのですが、8xとか9xとか若い衆が元気なのでなんとなくw
・朝の通勤時の某駅のホームで。
女性警官が(チラッと見ただけなのであまり自信ないけど)防刃ベスト(正式名称知らね)を
着用して警備に立っていました。
んーむ女性警官でもこういう仕事があるのかあ。
・Firefox3
ブックマークのある列に大量に登録されているとき、
下まで達するとメニューがスクロールしていきますよね?
たしかFirefox2のときは、そのスクロールの内容(どこまでスクロールしたか)は
メニュー選択の時点で忘却してくれたんですが、3で元に戻ったような?
2にしたときにえらく難儀した記憶があるんですが、それはそれで慣れてしまったので
今更戻っても逆方向の違和感が(笑)
まあ画面の高さよりも長くなるくらいまでブックマークを登録するなという話はあるんでしょうけど。
・予告
ぱっと目を通して面白そうだったので、ひまを見つけながらちまちまと
http://www.gnu.org/gnu/rms-lisp.html にある
My Lisp Experiences and the Development of GNU Emacs
(Transcript of Richard Stallman's Speech, 28 Oct 2002, at the International Lisp Conference)
を訳しておりました。
ほぼ終わったので、もうすぐ公開できると思います(さて、「もうすぐ」
とはどのくらいか?(笑))
頭の辺りをちょっとだけ。
Since none of my usual speeches have anything to do with Lisp, none of them were appropriate for today. So I'm going to have to wing it. Since I've done enough things in my career connected with Lisp I should be able to say something interesting.わたしが普段しているスピーチではLispでなにをすべきなのかとか none of them were appropriate for today といったことをお話することはありませんでした。 ですから今日はそういったお話をしたいと思います。わたしのキャリアの中でLispと共にあった できごとはたくさんありますから、何かしら面白いことがお話できると思います。My first experience with Lisp was when I read the Lisp 1.5 manual in high school. That's when I had my mind blown by the idea that there could be a computer language like that. The first time I had a chance to do anything with Lisp was when I was a freshman at Harvard and I wrote a Lisp interpreter for the PDP-11. It was a very small machine it had something like 8k of memory and I managed to write the interpreter in a thousand instructions. This gave me some room for a little bit of data. That was before I got to see what real software was like, that did real system jobs.わたしのLisp初体験は、Lisp 1.5のマニュアルを読んだ高校生であったときです。 それは I had my mind blown by the idea that there could be a computer language like that. わたしがLispを使って何かをする機会を初めて得たのは、わたしがHarvard の新入生で PDP-11用のLispインタープリタを書いたときのことです。PDP-11はとても小さなマシンで 8キロバイトほどのメモリしか備えておらず、1000語ほどの命令でインタプリタを書いていました。 このマシンはわたしにa little bit of data のための some roomを与えてくれました。 それは、実際のシステムジョブをして本物のソフトウェアがどんなものであるかをはっきりと 理解するよりも前のことです。The original Emacs did not have Lisp in it. The lower level language the non-interpreted language was PDP-10 Assembler. The interpreter we wrote in that actually wasn't written for Emacs, it was written for TECO. It was our text editor, and was an extremely ugly programming language, as ugly as could possibly be. The reason was that it wasn't designed to be a programming language, it was designed to be an editor and command language. There were commands like ‘5l’, meaning ‘move five lines’, or ‘i’ and then a string and then an ESC to insert that string. You would type a string that was a series of commands, which was called a command string. You would end it with ESC ESC, and it would get executed.オリジナルのEmacsはその内部にLispを抱え込んだものではありませんでした。 インタプリタ方式ではない言語で低水準のものといったら PDP-10 のアセンブラだったのです。 わたしたちが実際に作り上げたインタプリタはEmacsのためのものではなくて、 TECOのために書いたものでした。TECOはわたしたちのテキストエディタで、同時に これより酷いものはないくらいとんでもなくひどい(extermely ugly) プログラミング言語でした。 そんな代物であった理由はというと、TECOがプログラミング言語として設計されたものではなくて エディタとコマンドのための言語として設計されたからです。 TECO には '5行移動せよ' を意味する '5l' のようなコマンドがあり、 また、'i' のあとに文字列を続けて入力してESCを入力すると、ESCの手前までの文字列を 挿入するというコマンドもありました。 コマンド文字列と呼称される、コマンドの並びとしての文字列をタイプすることになります。 そのような文字列の入力は ESC ESC で終了し、そこで実行に移されます。
はじめてのにき(2008-07-09) ポインタと配列の違いがはっきりわかる事例 の解答はこれはこれですばらしいのですが、 別に「プログラムを落とすような」違いでなければいけないということではなくて、 ポインタと配列が常に等しい。というわけではない。 ことがわかればおkだったのです(^^; 質問時に明確にしておかなかったのが悪いんですが。 ですから、
#include <stdio.h>
void
foo(int ary[][10])
{
int i;
for (i=0; i<5; i++) {
printf("%3d", ary[i][5]);
}
putchar('\n');
}
void
bar(int (*ary)[10])
{
int i;
for (i=0; i<5; i++) {
printf("%3d", ary[i][5]);
}
putchar('\n');
}
void
baz(int **ary)
{
int i;
for (i=0; i<5; i++) {
printf("%3d", ary[i][5]);
}
putchar('\n');
}
int
main(int argc, char *argv[])
{
int d2ary[5][10] = {
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9},
{10, 11, 12, 13, 14, 15, 16, 17, 18, 19},
{20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
{30, 31, 32, 33, 34, 35, 36, 37, 38, 39},
{40, 41, 42, 43, 44, 45, 46, 47, 48, 49},
};
foo(d2ary);
bar(d2ary);
baz(d2ary);
return 0;
}
この程度でよかったんですが(^^; とはいえ今試したら、メッセージボックスだして死んだ(笑) cygwin の gcc だと
5 15 25 35 45
5 15 25 35 45
5 [main] a 1608 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
459 [main] a 1608 open_stackdumpfile: Dumping stack trace to a.exe.stackdump
13355 [main] a 1608 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
15586 [main] a 1608 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack)
となりましたのでまあいいか。 あ、コンパイル時にはどちらも警告を出してます。 しかし、gcc。昨日のパターンだとオブジェクトの生成しなかったのに(警告も出た)、 こっちのパターンだと警告はするけどオブジェクトは作るのね。
ついでに。 さほど実用的でもないポインタと配列の違い - 神様なんて信じない僕らのために やばい、俺ポインタわからないっすよ!!! - 神様なんて信じない僕らのために
やばい、俺ポインタわからないっすよ!!! - 神様なんて信じない僕らのために 自分がまず第一にポインタと配列を隔てるのは(似たような表記で書かれようと) 「置かれる場所が違う」 「構文の意味が違う」 ってことだと考えてます。int main() { char* message1 = "Hallo World."; char message2[] = "Hallo World."; message1[1] = 'o'; message2[1] = 'o'; printf("%s\n", message1); printf("%s\n", message2); return 0; }きむら(Kさんの例に似ているけれど、(本質は違う=配列とポインタの解釈をミスると駄目よ、というのとは違う どっちかは実行したら場合によっては落ちます。(gcc 4.0.1 IntelMac で確認。 書き込んじゃいけない場所に書き込む(ことがある)からです。 処理系及び、リンカスクリプトなどで指定していればその限りではありません。(要するに未定義
これは、この例のポインタ(message1)の場合は "Hallo World." (どうでもいいけど Hello ぢゃないのか?w)
という文字列の実体がどこかに確保されて、そこを指すように初期化されるということで、
配列(message)の場合は、配列の領域を確保(まあイマドキはだいたいスタックにとると見なして
いいんだろうけど)した上で、その領域の内容を"Hallo World." にしているというもの。
そこはいいんだけど、
書き込んじゃいけない場所に書き込む(ことがある)からです。
ここが蛇足。確かにそのとおりなんだけど、
それはポインタと配列の違いとは本来関係のないところだから
(と言い切るのもちとあれなんだけど)。
あ、なんか悩んでいる方が → xe-kdoo [チラシの裏] ポインタと配列の違い
xe-kdoo あーあと話はズレるけど、どのくらい低いレイヤまで「C言語」の範囲なんだっけとかゆーのも分かってない。 asm は意味付けされた予約語なのか、予約だけしてある予約語なのか、処理系が(勝手に)導入してるモノ なのか、とか。
「標準」の範囲ではasmは予約語じゃありません。 ですから、_asm とか __asm とかを使わないとぶーたれるコンパイラがあります。 C99 (JIS X 3010)を見ると、キーワード(予約語)として以下のものが挙げられています。
auto enum restrict unsigned break extern return void case float short volatile char for signed while const goto sizeof _Bool continue if static _Complex default inline struct _Imaginary do int switch double long typedef else register union
げ、inline って処理系ごとの拡張じゃなくて標準の予約語だったんだ。
gcc の __null って誰かが説明書いていたような。と思ってぐぐって見たら 上位十傑とまではいかないけど、odzさんのエントリ発見。 これを覚えていたのかな? → NULL と 0 - odz buffer
某ML。 Perl 5.10.0で、参照してその状態によって動作が変わる環境変数に PERL_ALLOW_NON_IFS_LSP というのが追加されているのだけど、 その説明(perlrun)を見ても IFS とか LSPってなんのことだかわからない という話が出まして。
perlrun の該当部分がこれ。
PERL_ALLOW_NON_IFS_LSP (specific to the Win32 port)
Set to 1 to allow the use of non-IFS compatible LSP's. Perl
normally searches for an IFS-compatible LSP because this is
required for its emulation of Windows sockets as real
filehandles. However, this may cause problems if you have a
firewall such as McAfee Guardian which requires all
applications to use its LSP which is not IFS-compatible,
because clearly Perl will normally avoid using such an LSP.
Setting this environment variable to 1 means that Perl will
simply use the first suitable LSP enumerated in the catalog,
which keeps McAfee Guardian happy (and in that particular
case Perl still works too because McAfee Guardian's LSP
actually plays some other games which allow applications
requiring IFS compatibility to work).
へーと思いつつソースをgrep(笑) してみると参照しているのは一箇所だけ。
SOCKET
open_ifs_socket(int af, int type, int protocol)
{
dTHX;
char *s;
unsigned long proto_buffers_len = 0;
int error_code;
SOCKET out = INVALID_SOCKET;
if ((s = PerlEnv_getenv("PERL_ALLOW_NON_IFS_LSP")) && atoi(s))
return WSASocket(af, type, protocol, NULL, 0, 0);
if (WSCEnumProtocols(NULL, NULL, &proto_buffers_len, &error_code) == SOCKET_ERROR
&& error_code == WSAENOBUFS)
{
WSAPROTOCOL_INFOW *proto_buffers;
int protocols_available = 0;
Newx(proto_buffers, proto_buffers_len / sizeof(WSAPROTOCOL_INFOW),
WSAPROTOCOL_INFOW);
if ((protocols_available = WSCEnumProtocols(NULL, proto_buffers,
&proto_buffers_len, &error_code)) != SOCKET_ERROR)
{
int i;
for (i = 0; i < protocols_available; i++)
{
WSAPROTOCOL_INFOA proto_info;
if ((af != AF_UNSPEC && af != proto_buffers[i].iAddressFamily)
|| (type != proto_buffers[i].iSocketType)
|| (protocol != 0 && proto_buffers[i].iProtocol != 0 &&
protocol != proto_buffers[i].iProtocol))
continue;
if ((proto_buffers[i].dwServiceFlags1 & XP1_IFS_HANDLES) == 0)
continue;
convert_proto_info_w2a(&(proto_buffers[i]), &proto_info);
out = WSASocket(af, type, protocol, &proto_info, 0, 0);
break;
}
}
Safefree(proto_buffers);
}
return out;
}
えーとえーと、Unixみたいにソケットハンドルがファイルハンドルと同じに扱えない のをどうにかするかしないか? いったい何の略? >IFS と LSP
from マ板。
ぐち0x1A ~次スレが立たなくて困る~ 96 仕様書無しさん [sage] Date:2008/07/07(月) 20:31:07 ID: Be: 今日、社長に「資金繰りが厳しいので、社員を全員、今週でリストラします」と言われたw 会社の無駄をなくしてすっきりさせる為に、契約社員として雇ってくれるらしいぜ? 保険やらは全部自分でやってね、って事らしい。 お前以外すっきりしてねーだろw 97 仕様書無しさん [sage] Date:2008/07/07(月) 20:41:33 ID: Be: 違法。 労働基準監督署にチクれ。 98 仕様書無しさん [sage] Date:2008/07/07(月) 21:24:52 ID: Be: 全員で新しい会社つくっちゃおうか! 99 仕様書無しさん [sage] Date:2008/07/07(月) 21:26:59 ID: Be: 結果、社長のリストラかw 100 仕様書無しさん [sage] Date:2008/07/08(火) 13:46:33 ID: Be: 万事解決だな 102 仕様書無しさん [sage] Date:2008/07/08(火) 21:43:45 ID: Be: >>96 すげーwwww 103 96 [sage] Date:2008/07/08(火) 21:55:51 ID: Be: やあ、状況報告に来たぜ。 今日、社長は出社しなかったw 営業に聞いた見たら、客にはリストラされたことを言うな、と釘を刺されているそうな。 決まりかけの仕事が断られたら困るからっぽいw 今月分の給料は満額出るらしいので、不幸中の幸いだけど、 既に離職票も準備され、来週早々には処理される手筈になっていた。 あと数日しか残ってないのに話し合いをする気はないらしい。 ……みんな契約してくれると思ってやがんのかよw 104 仕様書無しさん [sage] Date:2008/07/08(火) 22:23:04 ID: Be: 釣りかと思ったらマジかよw 105 仕様書無しさん [sage] Date:2008/07/08(火) 22:48:19 ID: Be: マジでチクってみたほうがいいんじゃね 辞めるならどうでもいいかもしれんが 106 仕様書無しさん [sage] Date:2008/07/09(水) 03:04:52 ID: Be: いまさら社長が是正勧告に従ってもそんな会社もう勤めたくないだろ 俺なら解雇予告手当てむしり取ってさっさと新天地目指すわ 107 仕様書無しさん [sage] Date:2008/07/09(水) 03:25:08 ID: Be: チクってもらえるものの保証をとりつけてから辞めるべきだろうな 108 仕様書無しさん [sage] Date:2008/07/09(水) 14:05:41 ID: Be: >>103 昔いた会社でそういうのあったなw ある大手の子会社的なところなんだが、毎年社長がそのまま就任続けるか 辞めるか交代を探すか、というシステム。ある時社長が 「自立するので会社は今年いっぱいだ。皆ついてきてくれるよな!」と言って 皆の反対も聞かずに会社継続を放棄。 結果、ついていったのは設立当初からいた2名だけで、新会社は3名からスタート。 11年ぐらい前の話。今でもその会社はあるんだけど、今社員数5名だったかな。 109 仕様書無しさん [sage] Date:2008/07/09(水) 17:41:14 ID: Be: 自分は社員すべてに慕われていると、 本気で勘違いしてる社長って居るよな 面従腹背という言葉を贈ってあげたい
from ム板
C言語なら俺に聞け(入門篇) Part 31 924 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:14:26 ID: Be: 双方向リスト用の構造体で質問があります。 現在の双方向リスト用ポインターの配置 typedef struct hogehoge HOGEHOGE; struct hogehoge { int hogeint01; ~ int hogeint02; struct hogehoge *prevdata; struct hogehoge *nextdata; } こちらに変更するとリストから切断する際に失敗してるようでフリーズします。 typedef struct hogehoge HOGEHOGE; struct hogehoge { struct hogehoge *prevdata; struct hogehoge *nextdata; int hogeint01; ~ int hogeint02; } どういう原因が考えられるでしょうか? 領域の確保はプログラム起動時に構造体サイズxn mallocで確保しています。 925 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:18:54 ID: Be: >>924 今までは切断する処理がたまたま動いていただけ、かな? 最小限の再現ソースを見せてってよくいうのはそういうことです。 927 924 [sage] Date:2008/07/09(水) 10:32:05 ID: Be: ちょっと気になる箇所があるので数回に分けます。 まず登録切断部分 void Entry(HOGEHOGE* wfp) { if (fpEntTy == NULL) { fpEntTy = wfp; wfp->prevdata = NULL; wfp->nextdata = NULL; fpEntTyLast = wfp; } else { fpEntTyLast->nextdata = wfp; wfp->prevdata = fpEntTyLast; wfp->nextdata = NULL; fpEntTyLast = wfp; } EntTyCout++; return; } void Del(HOGEHOGE* wfp) { if (wfp == fpEntTy) fpEntTy = wfp->nextdata; if (wfp == fpEntTyLast) fpEntTyLast = wfp->prevdata; if (wfp->prevdata) wfp->prevdata->nextdata = wfp->nextdata; if (wfp->nextdata) wfp->nextdata->prevdata = wfp->prevdata; EntTyCout--; return; } 起動時に構造体サイズxn mallocしたあとn回Entry関数でリスト化してます。 931 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:39:48 ID: Be: フリーズするってのは無限ループだろう 932 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:40:57 ID: Be: Del読んだ前後のループ部分貼れ 933 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:42:12 ID: Be: if (fpEntTy == NULL) { : } else { fpEntTyLast->nextdata = wfp; wfp->prevdata = fpEntTyLast; ここを見ると奇妙な事をしているな。 双方向リストの仕様は何だ? 934 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:44:46 ID: Be: 別に奇妙でも無いじゃん。 デバッガもしくはprintfで途中経過見てる? 937 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:47:34 ID: Be: >>933 fpEntTy側からのアクセスの場合、終端にはnextdataにNULLが入ります。 fpEntTyLast側からのアクセスの場合、終端にはprevdataにNULLが入ります。 Entry関数はもらった構造体を一番最後につけます。 942 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:50:46 ID: Be: そもそも>>924の情報だけで何とかしようと思うのが間違ってる。 デバッグしたことないのか? 943 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:51:49 ID: Be: } else { fpEntTyLast->nextdata = wfp; wfp->prevdata = fpEntTyLast; wfp->nextdata = NULL; fpEntTyLast = wfp; // これなに? } 949 924 [sage] Date:2008/07/09(水) 10:54:49 ID: Be: >>943 それは双方向リストのfpEntTy側から見た一番最後にくっつけるためです。 950 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:55:58 ID: Be: とりあえずリストのポインタ操作に慣れてないやつは口開く前にもう一回確かめろ 952 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:56:51 ID: Be: struct のメンバ順入れ替えで振る舞いが変る ってんなら *prevdata, *nextdata が領域外アクセスして(されて) ポインタ値が壊れているんじゃないの? int hogeint01 … ってあるけど、実は配列があって、範囲外書き込みしてるだけとかさ 953 デフォルトの名無しさん [sage] Date:2008/07/09(水) 10:57:06 ID: Be: 924はタコに応答してないでさっさと全ソースを貼れ 956 >>924 [sage] Date:2008/07/09(水) 10:59:44 ID: Be: >>951 いやだから・・・ fpEntTy側から見た最後が変わったのでfpEntTyLastも更新しないと・・・・ 双方向リストをご存知? >>952 中に配列はないです。 構造体サイズの調整用の予備charはありますが使ってません。 957 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:01:13 ID: Be: 正直、双方向リストのバグではなく、単に他のバグの可能性が大と思われ 959 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:04:51 ID: Be: >構造体サイズの調整用の予備char あ や し い 960 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:05:26 ID: Be: グダグダ言わずにソースを全部貼れ、な? 965 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:15:02 ID: Be: とりあえず上の二つの関数に問題はない 突っこんでるやつは全員的外れ 966 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:19:15 ID: Be: ある程度allocした領域をガチャガチャした後に、新しく使う領域を探すのはどうやってやってるのかな 中間削除も行えるようだし、気になります 967 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:20:47 ID: Be: うp中かな。wktkwktk 968 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:21:48 ID: Be: UP用に小さくしてたら、問題なく動いてしまった落ち。 971 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:25:21 ID: Be: おかしくない部分だけ抜粋して原因は何が考えられますか? は無いだろ・・・ 972 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:28:17 ID: Be: 構造体のレイアウト変えたら動かなくなったので、構造体のレイアウトが 悪さをすることがあるか?って聞いただけじゃね? どつぼにハマるとそういう考えになることもあるよ。コンパイラのバグじゃね??とかさ。 973 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:29:27 ID: Be: void Del(HOGEHOGE* wfp) { printf("%p\n", wfp); /* ←追加 */ と アロケーション時に p=(HOGEHOGE *)malloc(sizeof(HOGEHOGE)*n); for (i=0; i<n; i++) printf("%p\n", p+i); /* ←追加 */ Del() 呼び出し時の アドレス比較だな アロケーション時のアドレス以外の値が来てるなら、何処かのコードが値をぶっ壊してる 974 924 969 [sage] Date:2008/07/09(水) 11:30:55 ID: Be: 実はこれ以外に大きくまとめてHOGEHOGEを確保する分とHOGEHOGEを動的に細かく確保するというのが混在してて、 ある箇所でリストを開放する際にまとめて取ったHOGEHOGEか1個単位でとったHOGEHOGEで扱いが違ってます。 そこが原因かなあ・・・とか思ってたりもします。 wfp = fpEntTy; while(wfp) { switch(HOGESwitch[wfp->Type](i,wfp)) { case -1 : if (wfp->prevdata == NULL) { wfp2 = fpEntTy; } else { wfp2 = wfp->prevdata; } Del(i,wfp); wfp = wfp2; break; case -2 : if (wfp->prevdata == NULL) { wfp2 = fpEntTy; } else { wfp2 = wfp->prevdata; } Del(i,wfp); free(wfp); wfp = wfp2; break; default : break; } wfp = (HOGEHOGE*)wfp->nextdata; } 975 924 [sage] Date:2008/07/09(水) 11:37:41 ID: Be: >>974はいじってる過程のものなのでたぶんおかしいですw 976 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:39:33 ID: Be: ・削除するときに削除される要素のprev nextをちゃんとNULLにする ・先頭要素を削除したときは新しい先頭要素のprevをNULLにする これやってもだめかな 977 924 [sage] Date:2008/07/09(水) 11:42:52 ID: Be: >>976 あーーーーそれぽいですねorz wfp = fpEntTy; while(wfp) { switch(HOGESwitch[wfp->Type](i,wfp)) { case -1 : if (wfp->prevdata == NULL) { wfp2 = fpEntTy; wfp2->prevdata = NULL; } else { wfp2 = wfp->prevdata; } Del(i,wfp); wfp = wfp2; break; case -2 : if (wfp->prevdata == NULL) { wfp2 = fpEntTy; wfp2->prevdata = NULL; } else { wfp2 = wfp->prevdata; } Del(i,wfp); free(wfp); wfp = wfp2; break; default : break; } wfp = (HOGEHOGE*)wfp->nextdata; } これが正解? 978 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:43:22 ID: Be: しらねーよ 979 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:45:45 ID: Be: >>976 それだと 『構造体のレイアウト変えたら動かなくなった』 の説明がつかないんじゃね? 元レイアウトであろうが、新レイアウトであろうが それが主因なら同じ挙動になると思うけど 981 デフォルトの名無しさん [sage] Date:2008/07/09(水) 11:54:54 ID: Be: >>977 何でDel関数じゃなくてそこなおすんだろ? んで、case -2はますます関係ないんじゃないの? >>979 同じデータ操作をしてない場合、たまたまうまく動く場合とそうではない場合があるんじゃないかな 982 979 [sage] Date:2008/07/09(水) 11:59:40 ID: Be: >>981 それは、、、、 問題の切り分けができていないパターンだな 主因は "とあるデータ操作順"であって "構造体のレイアウト変更"は無関係 ってやつか 983 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:01:04 ID: Be: こうできないものか wfp = fpEntTy; while(wfp) { switch(HOGESwitch[wfp->Type](i,wfp)) { case -1 : Del(i,wfp); // なんかiが増えてんね break; case -2 : Del(i,wfp); free(wfp); break; default : break; } } 984 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:02:32 ID: Be: ごめ、while 以降の wfp をすべて fpEntTy と読み替えてください 985 924 [sage] Date:2008/07/09(水) 12:05:41 ID: Be: >>983 実はfpEntTyは配列になってて0~31で機能わけしてるんです。 本当は>>974のソースの外側で一段ループ処理が入ります。 987 924 [sage] Date:2008/07/09(水) 12:26:38 ID: Be: >>974のcase -2:の中のfree(wfp)をやめたらフリーズが回避できました・・・ 988 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:28:14 ID: Be: >いじってる過程のものなのでたぶんおかしいです ということでなくて、オリジナルもそうなってたのか? 989 924 [sage] Date:2008/07/09(水) 12:31:01 ID: Be: >>988 いえ、リスト用ポインタを構造体の最後に配置した場合は問題ありませんでした。 今回そのポインターを前に持ってきたので問題となったのでいろいろ試してる最中でして 990 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:34:22 ID: Be: いや free(wfp); wfp = wfp2; freeして書き込んでるじゃん。 991 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:35:21 ID: Be: 上書きしてるのにおかしくなってるってことは、どこかでこのアドレス使ってるんだろうな、と 992 924 [sage] Date:2008/07/09(水) 12:43:48 ID: Be: //free(wfp); wfp = wfp2; としたら想定の動きするんです・・・・ ポインターを先頭に持ってくるとまずいんですかね? ネットなんかの双方向リストのサンプルも大体構造体の最後に配置してますし・・・ 993 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:45:13 ID: Be: リスト以前に基本的なことが分かってないんじゃないの 994 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:48:03 ID: Be: free(wfp) の代わりに memset(wfp, 0xcc, sizeof(HOGEHOGE)) これでアレなら、開放されてるのに使ってる場所(or そこを参照するリンク) が残ってることになる 995 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:53:38 ID: Be: リスト構成本体を構造体先頭にもってったらリスト操作で固まる =リスト構成本体を構造体末尾にもってったら、先頭側メンバの値が(いつのまにか)狂ってる どっちにしてもちゃんと動いていないコードだ 996 デフォルトの名無しさん [sage] Date:2008/07/09(水) 12:57:42 ID: Be: デバッグの仕方を教育する場所になりそうだな。 997 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:08:02 ID: Be: 相談の仕方のほうだろ 表に出せないようなソースなら職場の人間に聞け 998 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:08:33 ID: Be: バグったらまずはクマのお人形に相談する ウメス 999 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:25:19 ID: Be: マジレスするとそんなちまちま書き換えながら出されても 俺らエスパーでも予言者でもないんで何も判断できない 問題の起こるソースをそのまま見せられないなら自分でなんとかしろ
まったくビジネスタイムに親切な連中だ。 好きだぞw
C言語なら俺に聞け(入門篇) Part 32 4 全スレ 924 [sage] Date:2008/07/09(水) 13:27:58 ID: Be: http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7308.c ソースをアップしました。 6 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:34:09 ID: Be: typedef struct { unsigned short HOGE_COUNT; char Reserve[14]; char data[2]; } HOGE_HED; HOGE_HED* fpHOGE; HOGEHOGE* fpHOGEDATA; fpHOGEDATA = (HOGEHOGE *)fpHOGE->data; ざけんな 7 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:35:58 ID: Be: ワロタ 8 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:37:33 ID: Be: アハハハハハ …ハァ 9 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:39:45 ID: Be: 長さが決まってない構造体を扱う場合はこうするとネットで見たのでそれをまねしたんですけど・・・ 10 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:41:47 ID: Be: >9 たぶん、それは可変長の文字列を扱うための、 あまり行儀がよくないがよく使われている方法だろう まあここだけじゃなさそうだから少し待て 14 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:49:42 ID: Be: >>4 wfp = fpEntTy[i]; case -2 : if (wfp->prevdata == NULL) { wfp2 = fpEntTy[i]; } free(wfp); wfp = wfp2; if ( wfp != NULL ) wfp = (HOGEHOGE *)wfp->nextdata; この流れがあやしい wfpとwfp2は同じもの(fpEntTy[i])を指してるよな? wfpはfreeしてしまったんだから、同じ場所を指してるwfp2も触ってはだめなんじゃないか? 15 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:49:50 ID: Be: >>あと malloc() の戻りでないアドレスに対する free() は保証外じゃなかったっけ? >そこらへんの落とし穴は大丈夫なのか? 今それが一番くさいです。 なのでリストから切り離したあとfreeする部分をコメントにしたらフリーズしませんので 17 デフォルトの名無しさん [sage] Date:2008/07/09(水) 13:54:26 ID: Be: LineCount()とChkIndexの仕様は 19 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:00:03 ID: Be: LineCount() は リストに登録する対象となるデータの数字を返すだけです。 ChkIndex() はリストの元となるデータnコのうち現在どこまで処理したかを返すだけです。 呼ばれると数字を返したあと内部で持ってるカウンターをインクリメントします。 20 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:02:29 ID: Be: あっちこっちに不要なキャストがあるな んでとりあえず if (wfp->prevdata == NULL) { wfp2 = fpEntTy[i]; } else { wfp2 = wfp->prevdata; } HogeDel(i,wfp); wfp = wfp2; break; これは HogeDel(i,wfp); wfp = fpEntTy[i]; break; の間違いじゃないのか? その下も同様に HogeDel(i,wfp); //free(wfp); wfp = fpEntTy[i]; break; 21 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:04:52 ID: Be: 実は、を連発するあたりでだいぶなえてしもうた 有志ガンガレ 22 924 [sage] Date:2008/07/09(水) 14:05:09 ID: Be: >>20 やってることはリストをたどりながら処理をし(ChkSwitch)不要になった ら戻り値によって途中で削除ということなので wfpがリストの中ほどなのかリストの一番先頭なのか を判断してます。 23 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:05:37 ID: Be: >>19 int index = ChkIndex(); -(1) if (index < fpHOGE->HOGE_COUNT) { ... wfp = (HOGEHOGE *)(fpHOGEDATA + ChkIndex()); -(2) (1) の戻りが HOGE_COUNT-1 の場合 fpHOGEDATA は 0~HOGE_COUNT-1 の HOGE_COUNT個確保しているにもかかわらず (2) で HOGE_COUNT を返すことになり 確保外のアドレスを指示することになっている 27 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:12:14 ID: Be: >>22 じゃあこうだろう wfp2 = wfp->nextdata; HogeDel(i,wfp); if(ChkSwitch[wfp->Hoge06](i,wfp) == -2) { free(wfp); break; } wfp = wfp2; 28 27 [sage] Date:2008/07/09(水) 14:15:38 ID: Be: あ、break消し忘れた まあとにかく、元のソースだとwfp2に入れてる値がおかしい wfp2 = fpEntTy[i]; としても、その後HogeDel()で fpEntTy[i] が変化してもwfp2は変わんないだろ 29 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:17:07 ID: Be: >>27 それだと常に削除の対象です・・・ ChkSwitchの戻り値が-1と-2は削除それ以外の場合、リストはそのままなんです。 30 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:18:28 ID: Be: つーか、下手に技巧かまして初期に配列確保して動かないコード書くぐらいなら 単品 malloc() を n回呼び出し+途中の追加も単品 malloc() のほうがマシじゃね? 31 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:21:29 ID: Be: >>29 switch(ChkSwitch[wfp->Hoge06](i,wfp)) { case -1: wfp2 = wfp->nextdata; HogeDel(i,wfp); wfp = wfp2; break; case -2: wfp2 = wfp->nextdata; HogeDel(i,wfp); free(wfp); wfp = wfp2; break; default: break; } 32 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:23:59 ID: Be: 宿題スレだな 33 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:25:34 ID: Be: ついでにこっちも直しとく // // 領域確保部分抜粋 // int size = sizeof(HOGE_HED) + sizeof(HOGEHOGE) * ret; fpHOGE = malloc(size); if (fpHOGE == NULL ) return -18; memset(fpHOGE,0x00,size); fpHOGE->HOGE_COUNT = ret; fpHOGEDATA = (HOGEHOGE *)(fpHOGE+1); 34 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:29:23 ID: Be: >>33 >fpHOGEDATA = (HOGEHOGE *)(fpHOGE+1); あーなるほど。こうすればいいんですね。 これでchar data[2];が不要になりますね。 35 924 [sage] Date:2008/07/09(水) 14:35:13 ID: Be: >>30 まー近い挙動のものにシューティングゲームなんかがありますけど ゲームを構成する素材(背景や敵本体)は固定になりますが、自機や敵が吐き出す弾 は事前に・・というわけにはいきませんよね? それでこういった2種類の領域の確保の仕方になってます。 >>31 ありがとうございます。 これでうまくいきました。 最近大改造してようやく今のスタイルにこぎつけたので混乱してました。 36 デフォルトの名無しさん [sage] Date:2008/07/09(水) 14:53:37 ID: Be: >>35 は? 全て固定にしろと言っているのではなく、 全て動的にしといて たまたま固定分は先にやっちゃったね って構造のことを指しているのだが? 全て敵が吐き出す弾扱い。 背景や敵本体は初期化の時に1個1個追加してくだけじゃん 37 デフォルトの名無しさん [sage] Date:2008/07/09(水) 15:00:19 ID: Be: まーいいじゃないですか あの変なポインタ操作みてるとヘッダ+データになったバイナリファイルをまとめて 読み込んだりしてるんでしょ? >>31で動いたってことは領域の確保の問題じゃなく単にリスト操作の間違いだったんだし。 40 デフォルトの名無しさん [sage] Date:2008/07/09(水) 15:23:17 ID: Be: 要するにfreeした後の領域を使おうとしてたわけで、 おそらくアロケート情報が入っていた領域先頭付近のメモリの書き換えが発生したんだろう だからポインタを先頭に置いてたらおかしくなった 後ろに配置してたときはたまたま情報が壊れずに残ってたと
質問自体は良く見かけるものでそう珍しいものでもないです。 小数の足し算 -OKWave
小数の足し算 -OKWave Javascriptで <SCRIPT language="JavaScript"><!-- function wa() { a = eval( document.myFORM.a.value ); b = eval( document.myFORM.b.value ); s = a + b; document.myFORM.kotae.value="答え " + s; } //--></SCRIPT> </HEAD> <BODY> <FORM name="myFORM"> A =<INPUT type="text" name="a" size="3">B =<INPUT type="text" name="b" size="3"><BR> <INPUT type="text" name="kotae"><INPUT type="button" value="=" onclick="wa()"> </FORM> </BODY> としたとき A=0.1 B=0.05とすると 答え 0.15000000000000002となるのはなぜですか?
寄せられた回答。
小数の足し算 -OKWave Javascriptが内部処理に[浮動小数点]方式をを使っているからです。 [浮動小数点]は、近似値を答として出力するという特徴があります。 誤差が出るので、計算を繰り返すと、誤差は大きくなっていきます。 Javascriptが内部で、答えが 0.51 等と表示される場合でも、 内部処理を[浮動小数点]で行い「丸み」をつけている (小数点の表現を四捨五入のようにする)だけの場合が多いです。 誤差がなくなるわけではないので、 正確性を要する計算では、[固定小数点]をつかいます。 もっとも、自分で処理方法を考えなくてはならないので大変です。 2進数で小数を表現する場合[固定小数点](通常の小数)を使うと、 オーバーフローを起こしやすい(桁の小さい表現しかできない) という、決定的な欠点があります。 そのため、天文学の物理演算などの計算ができません。 なら、正確性よりも桁の多い計算ができたほうが… という理由で、 高等言語やスクリプトのほとんどが[固定小数点]をつかいます。 [浮動小数点]では、 テクニックによって誤差を少なくできる方法がいくつかありますので、 頑張ってみにつけてください。 参考[浮動小数点]↓ http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
「浮動小数点数」を使っても、その基数が十ならこのての誤差はでないでしょ。
浮動小数点数を使うことそれ自体が問題なわけではないし、固定小数点数
(って具体的にどういう実装を考えているのかわからないけど)であっても
小数部分に関しては十進→二進変換による誤差の発生は止められないでしょう。
扱う数値を丸ごと10^N倍して整数のように見せかける手がないでもないけど
そのこといってるのかなあ?
高等言語やスクリプトのほとんどが[固定小数点]をつかいます。
…ホントに?
固定小数点(固定小数点数)というとこれがまず頭に浮かぶんだけどなあ
→
固定小数点数 - Wikipedia
どんな人:経験者
「専門家」だったら面白かったのにw
rubyでは便利なcsvのライブラリがあるのだけど 先頭に「#」があれば、コメント行とみなすとかを設定できたら嬉しかったのだけどなぁ。。 fastercsv,lightcsvも試してみたけど、やっぱりだめ。 コメント行を読み飛ばしてほしいのだけど、そういうのはやっぱり手作りにしないといけないのかな。
Reading is Writing(2008-07-04) hkondo (2008-07-08 09:34) # オーバーライドもオーバーロードは、エスカレータとエレベータに通じるものがありそうです。 私も未だに混乱します。
MSN相談箱 良い助言をお願いします 良い助言をお願いします 質問者:matsu77 私は、一部上場のメーカーに勤務している者ですが、現在LSI設計職を目指して転職活動しています。 現在は、LSI開発職から離れています。 LSI開発の業務に従事していたときは、主に論理検証ばかりやらされて設計自体は殆どやっていません。 そのためか面接を受けても不合格になります。 どうすれば、LSI設計職に就くことが出来るでしょうか? また、設計技術を身に付ける為にはどうすればよいでしょうか? 一応、verilogについては文法は熟知しています。
ほう。→ Ubuntu server team seeks advice on supporting rails in their next release (コメントがw)
あとで追加します。
と思ってたけどいろいろやっているうちに時間切れとなったので明日以降に。 うるりっひネタでredditが盛り上がってるとか面白そうなのにい(笑)
マトリックスの最上位レベルです。
Programmer Competency Matrix コンピュータサイエンスに関して ・データ構造 Knowledge of advanced data structures like B-trees, binomial and fibonacci heaps, AVL/Red Black trees, Splay Trees, Skip Lists, tries etc. B木、binomial ヒープ、フィボナッチヒープ、AVL木、赤黒木、スプレイ木、 スキップリストなどの高度なデータ構造についての知識をもっている。 ・アルゴリズム Able to recognize and code dynamic programming solutions, good knowledge of graph algorithms, good knowledge of numerical computation algorithms, able to identify NP problems etc. 動的計画法について理解し、コーディングをすることができる。 グラフアルゴリズムについて深い知識をもっている。 数値計算アルゴリズムに関する深い知識をもっている。 NP問題などを identify できる。 ・システムプログラミング Understands the entire programming stack, hardware (CPU + Memory + Cache + Interrupts + microcode), binary code, assembly, static and dynamic linking, compilation, interpretation, JIT compilation, garbage collection, heap, stack, memory addressing…. プログラミング全体(programming stack)を理解している。 スタック、 ハードウェア(CPU+メモリ+キャッシュ+割り込み+マイクロコード)、 バイナリコード、アセンブリ言語、静的リンクと動的リンク、コンパイル、 インタープリタによる解釈、JITコンパイル、ガーベジコレクション、ヒープ、 スタック、メモリのアドレッシングなどなど… ソフトウェアエンジニアリングについて ・ソースコードのバージョン管理 Knowledge of distributed VCS systems. Has tried out Bzr/Mercurial/Darcs/Git 分散型バージョン管理システムの知識がある。 Bzr/Mercurial/Darcs/Git を試したことがある。 ・ビルドの自動化 Can setup a script to build the system and also documentation, installers, generate release notes and tag the code in source control システムとドキュメントと、インストーラの構築と、リリースノートの生成、 ソース管理におけるタグ付けを実行するスクリプトをセットアップできる。 ・テストの自動化 Understands and is able to setup automated functional, load/performance and UI tests テストを理解し、機能や load/performance、UIのテストを 自動的に行うように設定することができる。 プログラミング ・問題の decomposition Use of appropriate data structures and algorithms and comes up with generic/object-oriented code that encapsulate aspects of the problem that are subject to change. 適切なデータ構造とアルゴリズムを使って ・system decomposition Able to visualize and design complex systems with multiple product lines and integrations with external systems. Also should be able to design operations support systems like monitoring, reporting, fail overs etc. ・コミュニケーション Able to understand and communicate thoughts/design/ideas/specs in a unambiguous manner and adjusts communication as per the context 曖昧でないやり方で思想や設計、アイデア、仕様についてのコミュニケーションができ、 理解できる。また、空気を読んで(as per the context)コミュニケーションのやり方を調整する。 ・code organization within a file File has license header, summary, well commented, consistent white space usage. The file should look beautiful. ファイルにはライセンス表記があり、サマリとよく書かれたコメントがある。 スペースの使い方は一貫している。 ファイルの見た目が美しい。 ・code organization across files Code organization at a physical level closely matches design and looking at file names and folder distribution provides insights into design ・ソースツリーの構造 Physical layout of source tree matches logical hierarchy and organization. The directory names and organization provide insights into the design of the system. ソースツリーの物理的なレイアウトが論理的な階層や組織にマッチしたものになっている。 ディレクトリ名と組織名はシステムの設計をうかがわせるようなものになっている。 ・コードのリーダビリティ Code assumptions are verified using asserts, code flows naturally - no deep nesting of conditionals or methods コードが仮定している条件を assertを使って検証する。 コードの流れは自然であって条件判定やメソッドがネストしすぎているということもない。 ・防衛プログラミング Has his own library to help with defensive coding, writes unit tests that simulate faults 防衛プログラミングを楽にするための自分用のライブラリを持っている。 また、失敗が起きたときのしみレーションをするためのユニットテストを書いたことがある。 ・エラーハンドリング Codes to detect possible exception before, maintain consistent exception handling strategy in all layers of code, come up with guidelines on exception handling for entire system. 例外が発生する前に検出できるようにコードを組み、一貫した例外処理戦略(exception handling strategy) をすべてのコードレイヤーで保つ。 そのやり方がシステム全体の例外処理に関するガイドラインになる。 ・IDE Has written custom macros カスタムマクロを書いたことがある ・API Has written libraries that sit on top of the API to simplify frequently used tasks and to fill in gaps in the API ・フレームワーク Author of framework フレームワークの作者である ・requirements Able to suggest better alternatives and flows to given requirements based on experience 良い代替物を提案することができ、 経験に基づいて与えられた要求に対する結論を導き出すことができる。 ・スクリプティング Has written and published reusable code 再利用可能なコードを書いて公開したことがある。 ・データベース Can do basic database administration, performance optimization, index optimization, write advanced select queries, able to replace cursor usage with relational sql, understands how data is stored internally, understands how indexes are stored internally, understands how databases can be mirrored, replicated etc. Understands how the two phase commit works. データベースに関する基本的な administraton、パフォーマンスの最適化、 インデックスの最適化、高度な select queries の記述、 カーソルを使ったSQLを relational SQL に置き換えることができる。 データやインデクスが内部的にはどのように格納されているかを理解でき、 データベースが喉のようにミラーリングできるか理解している。 経験 ・仕事で使った言語 Concurrent (Erlang, Oz) and Logic (Prolog) Erlang やOz のような並行型。 Prologに代表される論理型。 ・仕事で使ったプラットフォーム 6個以上 ・業務経験年数 十年以上 ・domain knowledge Domain expert. Has designed and implemented several products/solutions in the domain. Well versed with standard terms, protocols used in the domain. ドメインに関するエキスパート。 そのドメインにおいて幾つかのプロダクトやソリューションを 設計したり実装したことがある。 知識 ・ツールに関する知識 Has actually written tools and scripts, added bonus if they've been published. 実際にツールやスクリプトを書いたことがある。 それが広く公開されたものであればボーナス追加。 ・言語 Concurrent (Erlang, Oz) and Logic (Prolog) ・コードベースの知識 Has implemented multiple big features in the codebase and can easily visualize the changes required for most features or bug fixes. ・upcoming technologies に関する知識 Has played with the previews and has actually built something with it and as a bonus shared that with everyone else プレビュー版で遊んだことがあり、それを使って何かを組んでみて ・プラットフォームの内部 Has written tools to enhance or provide information on platform internals. For e.g. disassemblers, decompilers, debuggers etc. プラットフォームの内部構造を調べたり、拡張をするようなツールを書いたことがある。 逆アセンブラや、逆コンパイラ、デバッガなど。 ・書籍 Structure and Interpretation of Computer Programs, Concepts Techniques, Models of Computer Programming, Art of Computer Programming, Database systems , by C. J Date, Thinking Forth, Little Schemer 計算機プログラムの構造と解釈コンピュータプログラミングの概念・技法・モデル
The Art of Computer Programming
![]()
![]()
![]()
![]()
![]()
Database systems , by C. J Date Thinking Forth
Little Schemer
・ブログ Maintains a blog in which personal insights and thoughts on programming are shared
ポインタってのはあれだよ。 「『難しい難しい』と云っている人が考えているほどには難しくない」 けど 「『簡単簡単』といっている人が考えているよりは簡単じゃない」 んだよ。 … 落語か?(笑) → やはりCのポインタは難しいものだ…… - 神様なんて信じない僕らのために
まあ、ポインタと配列は一緒とか云っている人は、一遍シンデミル?
int array[なんかでかいすうじ]; なグローバルな実体を
extern int *array; で参照してはまればいいと思うよw
Cの入門書で有名な某先生がこれにはまった(それも入門時にとか言う話ではなく)という記事を 某プログラミング雑誌の連載でお書きあそばされて、 結果失笑を買うこととなったのは今は昔のことでござりまする(笑)
手っ取り早く確かめるのはこんなんで。
#include <stdio.h>
char array[1024];
void foo();
int
main()
{
foo();
printf("%s\n", array);
return 0;
}
extern char *array;
void
foo()
{
strcpy(array, "hello, world");
}
たぶんSEGVで落ちるはず。 ここで、
extern char *array;
なヘッダファイルをつくってやって、それぞれのファイルで include してやった場合
>cl ary.c foo.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
ary.c
ary.c(4) : error C2372: 'array' : 再定義されています。異なる派生型です。
C:\work\t\0708\ary.h(1) : 'array' の宣言を確認してください。
コードを生成中...
foo.c
>gcc ary.c foo.c ary.c:3: error: conflicting types for 'array' ary.h:1: error: previous declaration of 'array' was here ary.c:3: error: conflicting types for 'array' ary.h:1: error: previous declaration of 'array' was here
ちゃんちゃん♪ しかし、gccは実行ファイルの生成をしないのに、VCは作ってくれやがりました。 もちろん実行しても落ちます(笑)
あ、ポインタと配列が違うということがはっきりわかる事例をこれとは別に一つ挙げること :-) >いそぴー
odzさんとこに(カンニングできるような)事例はなかった…よな?(笑)
おやこんな 【ハウツー】ゼロからはじめるC言語 - 型・定数編 (1) C言語で扱うデータ | パソコン | マイコミジャーナル ものが。 地雷踏まなきゃいいけどなあ(笑)
わくわく → 数字を取り出す - odz buffer
数字を取り出す - odz buffer とりあえずメモ程度に。あとで書く。 SEP = re.compile(r'[^\d]+') def embedded_numbers(s): return [int(x) for x in SEP.split(s) if x]
return 文のところにある内包リストで、何で最後に if x がついてるんだろうと思ったが、あれか。数字列がなかった場合の対処か。
>python
Python 2.6a3 (r26a3:62864, May 9 2008, 14:16:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.>>> import re
>>> SEP = re.compile(r'[^\d]+')
>>> def embedded_numbers(s):
... return [int(x) for x in SEP.split(s) if x]
...
>>>
>>> embedded_numbers('123abc456')
[123, 456]
>>> embedded_numbers('foobar')
[]
>>> [int(x) for x in SEP.split('123') if x]
[123]
>>> [int(x) for x in SEP.split('hoge') if x]
[]
>>> [int(x) for x in SEP.split('hoge')]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: ''
さすがはodzさん抜かりがない。 …でもさ、この if x がどこに掛かる if なのか一瞬わかりませんですた○| ̄|_
…あれ、2.6a3? なんでアップデートしてないんだ?
ゆの in Ruby - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech → ゆの in Perl - Bulknews::Subtech - subtech (詳説 Perl in ゆの - はこべにっき#) → Big Sky :: ゆの in Python
Big Sky :: ゆの in Python ごめんなさい。それが何かしらない...orz
ゆのっちの元ネタはこれです →
TBSアニメーション「ひだまりスケッチ×365」公式ホームページ
とあることを調べていたらこんなもの発見。 → diagram & history of programming languages
| 抽象データ型 Abstract data types | Simula 67 |
| Algebraic data types | Hope (giving ML) |
| 代入演算子のオーバーロード Assignment operator overloading | C++ |
| バッカス・ナウア記法 BNF (Backus-Naur Form) | used to describe Algol 60's syntax |
| スコープを伴ったブロックのネスト Block nesting with scope | Algol 60 |
| 比較の連鎖 Chained comparisons | BCPL |
| クラス Class | Simula 67 |
| クロージャ Closure | Lisp |
| コメント Comments | Cobol |
| 複合文 Compound statements (group statements into one) | Algol 58 |
| 継続 Continuations | ?? (1972) |
| カプセル化 Encapsulation | |
| 例外処理 Exception handling | PL/I |
| 型の明示 Explicit typing | Algol 58 |
| ガーベジコレクション Garbage collection | Lisp |
| ヒープの割り付け Heap allocation | Lisp |
| 高階 Higher order | Algol 60 or maybe Lisp? |
| Hygienicマクロ (Hygienic→健康的、衛生的な?) Hygienic macros | Scheme R4RS |
| 継承 Inheritance | Simula 67 |
| 遅延評価 Lazy evaluation | ISWIM (giving Haskell) |
| 内包リスト List comprehension | KRC (giving Haskell) |
| マクロ Macros | Cobol |
| モジュール Modules | Modula-2 |
| モナド Monads | Haskell |
| 多重分岐 Multiple selection ("case" statement) | Algol W |
| オブジェクト指向プログラミング Object-oriented Programming | Simula 67 |
| 演算子のオーバーロード Operator overloading | Algol 68 |
| 直交性? Orthogonality | Algol 68 |
| パラメータによる多態? Parametric Polymorphism | ML |
| 名前による呼び出し Pass by name | Algol 60 |
| 値による呼び出し Pass by value | Fortran |
| 値による呼び出し(とその結果の反映?) Pass by value/result | Algol W |
| パターンマッチング Pattern matching | Hope (giving ML) |
| ポインタデータ型 Pointer datatype | PL/I |
| リファレンス References | Algol 68 |
| 分割コンパイル Separate compilation | Fortran II (interest: hardware failures were very frequent => length of a program could not exceed 300/400 lines) |
| スタック割り当て Stack allocation | Algol 58 |
| スタックに置かれた動的変数 Stack dynamic variables | Algol 60 |
| 静的割り付け Static allocation | Fortran |
| 構造体(レコード) Structures (records) | Cobol |
| 型クラス Type classes | Haskell |
| 型インターフェース Type inference | ML |
| ユーザー定義型 User-defined data types | Algol 68 |
| Cを移植性のあるアセンブラとしての使用 Using C as portable assembler | C++ (Cfront) |
| ブロック内の任意の箇所での変数宣言 Variable declaration anywhere in a block | Algol 68 |
| 垂直レイアウト? Vertical layout (Indentation to show block structure) | CPL, ISWIM (giving Haskell) |
daily build(笑) で久々に失敗。
cl -nologo -MD -Zi -O2b2xg- -G6 -DRUBY_EXPORT -I. -I.ext/include/i386-mswin32_71 -I./../include -I./.. -I./../missing -Fodir.obj -c -Tc./../dir.c
dir.c
../dir.c(95) : error C2143: 構文エラー : ';' が '型' の前にありません。
../dir.c(96) : error C2143: 構文エラー : ';' が '型' の前にありません。
../dir.c(98) : error C2065: 'c1' : 定義されていない識別子です。
../dir.c(98) : error C2065: 'c2' : 定義されていない識別子です。
../dir.c(1563) : error C2143: 構文エラー : ';' が '型' の前にありません。
../dir.c(1565) : error C2065: 'status' : 定義されていない識別子です。
../dir.c(1578) : error C2061: 構文エラー : 識別子 'dir_globs'
../dir.c(1578) : error C2059: 構文エラー : ';'
../dir.c(1578) : error C2059: 構文エラー : '型'
NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
Stop.
ナニが起きた? と調べてみましたならば。
86 static int
87 char_casecmp(const char *p1, const char *p2, rb_encoding *enc, const int nocase)
88 {
89 const char *p1end, *p2end;
90
91 if (!*p1) return *p1;
92 if (!*p2) return -*p2;
93 p1end = p1 + strlen(p1);
94 p2end = p2 + strlen(p2);
95 int c1 = rb_enc_codepoint(p1, p1end, enc);
96 int c2 = rb_enc_codepoint(p2, p2end, enc);
97
98 if (c1 == c2) return 0;
99 if (nocase) {
100 c1 = rb_enc_toupper(c1, enc);
101 c2 = rb_enc_toupper(c2, enc);
102 }
103 return c1 - c2;
104 }
1563 while (offset < RSTRING_LEN(str)) {
1564 char *p, *pend;
1565 p = RSTRING_PTR(str) + offset;
1566 int status = push_glob(ary,
1567 rb_enc_str_new(p, strlen(p), rb_enc_get(str)), flags);
1568 if (status) GLOB_JUMP_TAG(status);
1569 if (offset >= RSTRING_LEN(str)) break;
1570 p += strlen(p) + 1;
1571 pend = RSTRING_PTR(str) + RSTRING_LEN(str);
1572 while (p < pend && !*p)
1573 p++;
1574 offset = p - RSTRING_PTR(str);
1575 }
またこのパターンですか ○| ̄|_
・レンタル倉庫
意外に近く(歩いて数分)にレンタル倉庫があるのを発見。
結構いろんなところに支店(?)を展開している会社のようで、
会社のwebページにもいろいろとあった。
スペースは色々あって、最小だと床面積0.5畳で高さが240センチ弱の空間で一月あたり七千数百円+α。
基本的に24時間出入り自由(もちろん契約していればの話)などなど。
んーーーーー利用したいがちと微妙だなあ。
・複合リテラル
C99の復合リテラルがなかなか楽しい仕様であることがわかる
(6.5.2.5 あたり)。
・歴史群像
豊臣秀長に対するちょっと違った見方。
秀吉とその政権を支えた光の面だけでなく、政権の致命傷になりかねなかったこと。
・某球団
筋金入りのベイスターズファンはこれくらいでくじけないのです。たぶん。○| ̄|_
・修理
幾らかかるかなあ。
某氏に対してぶち切れそうになるが自重。
しまった。 週末すっかり忘れていた(笑)
ところで各レベルのところについている
2^n (Level 0) n^2 (Level 1) n (Level 2) log(n) (Level 3)
はどういう意味なんでしょうか? アルゴリズムの計算量を説明するときのO記法でおなじみの数式ですが、 それだけ洗練されているとか優れているということなんでしょうか?
Programmer Competency Matrix レベル2 コンピュータサイエンスに関して ・データ構造 Knows space and time tradeoffs of the basic data structures, Arrays vs LinkedLists, Able to explain how hashtables can be implemented and can handle collisions, Priority queues and ways to implement them etc. 配列とリンクつきリストのような基本的なデータ構造に関する空間と時間とのトレードオフについて知っている。 ハッシュテーブルについて、どのように実装できるかや衝突をどのように処理するかについて 説明することができる。 優先順位つきキューとその実装方法について説明することができる。などなど。 ・アルゴリズム Tree, Graph, simple greedy and divide and conquer algorithms, is able to understand the relevance of the levels of this matrix. 木、グラフ、単純な greedy(欲張り) 、divide and conquer(分割統治) アルゴリズムについて このマトリックスのレベルに応じた理解ができる ・システムプログラミング Understands kernel mode vs. user mode, multi-threading, synchronization primitives and how they're implemented, able to read assembly code. Understands how networks work, understanding of network protocols and socket level programming. カーネルモードとユーザーモードについて理解できる。 マルチスレッド、同期プリミティブとそれらの実装手法について、アセンブリコードを読むことができる。 ネットワークがどのように動いているか理解し、ネットワークプロトコルとソケットレベルの プログラミングを理解している。 ソフトウェアエンジニアリングについて ・ソースコードのバージョン管理 Proficient in using CVS and SVN features. Knows how to branch and merge, use patches setup repository properties etc. CVSやSVNの機能を使いこなしている。 ブランチやマージ、パッチの使い方を知っていて、 リポジトリのプロパティのセットアップがわかっている。 ・ビルドの自動化 Can setup a script to build the basic system 基本的なシステムをビルドするためのスクリプトをセットアップできる ・テストの自動化 Has written code in TDD manner TDDの規則にしたがってコードを書いている プログラミング ・問題の decomposition Able to come up with reusable functions/objects that solve the overall problem 全般的な問題を解決する再利用可能な関数やオブジェクトをつくれる。 ・system decomposition Able to design systems that span multiple technologies/platforms. 複数の技術とプラットフォームをまたがるシステムを設計できる。 ・コミュニケーション Is able to effectively communicate with peers 同僚と effectively (効率よい?) コミュニケーションが取れる。 ・code organization within a file Code is grouped into regions and well commented with references to other source files コードは regionごとに分類され、別のソースに対する参照にきちんとコメントがある ・code organization across files Each physical file has a unique purpose, for e.g. one class definition, one feature implementation etc. (物理的に独立している)個々のファイルはそれぞれ一意の目的のためにある。 あるクラスの定義、ある機能の実装などなど。 ・ソースツリーの構造 No circular dependencies, binaries, libs, docs, builds, third-party code all organized into appropriate folders ・コードのリーダビリティ No long functions, comments explaining unusual code, bug fixes, code assumptions 長い関数はなく、一般的でないコードやバグフィックス、 コーディングの上での仮定には説明のコメントがある。 ・防衛プログラミング Makes sure to check return values and check for exceptions around code that can fail. 戻り値を確実にチェックし、失敗する可能性があるコード周辺の例外に対するチェックも怠りない。 ・エラーハンドリング Ensures that error/exceptions leave program in good state, resources, connections and memory is all cleaned up properly 正常終了するたときにはエラーや例外は処理されていて、 リソースや、コネクション、メモリはきちんとすべて解放する。 ・IDE Knows keyboard shortcuts for most used operations. 良く使う操作の大部分のキーボードショートカットを知っている。 ・API Vast and In-depth knowledge of the API APIについて広範かつ深い知識がある ・フレームワーク Has used more than one framework in a professional capacity and is well-versed with the idioms of the frameworks. 二つ以上のフレームワークについて、professional capacity で使ったことがあり、 そのフレームワークにおけるイディオムをよく知っている。 ・requirements Understand complete picture and come up with entire areas that need to be speced ・スクリプティング Perl/Python/Ruby/VBScript/Powershell ・データベース Able to design good and normalized database schemas keeping in mind the queries that'll have to be run, proficient in use of views, stored procedures, triggers and user defined types. Knows difference between clustered and non-clustered indexes. Proficient in use of ORM tools. 経験 ・仕事で使った言語 Functional, added bonus if they understand lazy evaluation, currying, continuations 関数型言語。 遅延評価、カリー化、継続がわかっていればボーナス追加。 ・仕事で使ったプラットフォーム 4~5 ・業務経験年数 6~9年 ・domain knowledge Has worked on multiple products in the same domain. 同一の領域の複数のプロダクトで働いている。 知識 ・ツールに関する知識 Good knowledge of editors, debuggers, IDEs, open source alternatives etc. etc. For e.g. someone who knows most of the tools from Scott Hanselman's power tools list. Has used ORM tools. エディタ、デバッガ、IDE、オープンソースの代替プロダクトなどについてよく知っている。 ORMツールを使ったことがある。 ・言語 Functional, added bonus if they understand lazy evaluation, currying, continuations ・コードベースの知識 Good working knowledge of code base, has implemented several bug fixes and maybe some small features. ・upcoming technologies に関する知識 Has downloaded the alpha preview/CTP/beta and read some articles/manuals αプレビューやCTP、ベータに手を出して、幾つかの atrclesやマニュアルを読む。 ・プラットフォームの内部 Deep knowledge of platform internals and can visualize how the platform takes the program and converts it into executable code. プラットフォームの内部の深い知識があり。そのプラットフォームがプログラムをどのように 取り扱って実行コードへと変換するのかを visualize できる。 ・書籍 Design Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man month デザインパターンピープルウェア
珠玉のプログラミング(もしくは「プログラム設計の着想」(正・続))
![]()
プログラム設計の着想
Algorithm Design Manual
![]()
達人プログラマー
人月の神話
・ブログ Maintains a link blog with some collection of useful articles and tools that he/she has collected
Level0とLevel1の差 - 予定は未定Blog版 ときどきの雑記帖 i戦士篇さん経由で知ったProgrammer Competency Matrixだけど、Level0と Level1の間に越えられない壁を感じてしまう。 自分から色々やっているような人はLevel0なんてとっくに飛び越してしまうようなレベルが Level0なんだけど、それでも大半はLevel0なんじゃないかなぁ。少なくとも俺の周りはLevel0だ らけ。
自分の感想としては、たとえばLevel0とLevel1だけとっても項目によってだいぶ レベル間のギャップに差があるんじゃないか? というものでした。 knowledge ではだいぶレベル間の差があるように見えるし、 コンピュータサイエンスのデータ構造とかアルゴリズムはそれに比べれば ずいぶんと狭いような気がします。
自分自身に当てはめると、経験の「年数」は log(n) (Level 3) までいってますが
同じく経験の languages with professional experience
の
Concurrent (Erlang, Oz) and Logic (Prolog)
とかは、ちょっとまってくれ○| ̄|_ という感じですね(笑)
まあ並行プログラミングは最近手を出しつつあったりしますが、
Prologには厚い壁を感じるんだよなあ。
何回入門書を読んでもナニがどう動いてるんだか良くわからない(苦笑)
えーとちょっと首筋に冷たいものが…
camen design ・ A List Of People Who Need To Stop Writing Software List Of People Who Need To Stop Writing Software Sony New Sony laptops come with two pages in the Add/Remove list of just Sony junk. They are also the authors of one of the worst pieces of software ever, SonicStage. 新しいソニーのノートPCには、「ソフトウェアの追加と削除」で2ページにもなるような ソニー製のゴミがおまけでついてくる。 そして彼らは史上最悪のソフトウェア、SonicStage の製作者でもあらせられる。 ISPs I pay you to put a cable in my house, and let me send things up and down it; no more. I don’t want your useless Anti-Virus products. I don’t want your “Desktop Help” applications. I don’t want your tray icons. I don’t want your proprietary browsers. I don’t want an email address with you. I don’t want your website as my home page (including a Google Search that only shows adverts). あんたにやって欲しいのはウチへケーブルを引いて、使えるようにしてくれること。そんだけ。 使い物にならないウイルス対策製品はいらない。あんたのところの“デスクトップヘルプ” アプリケーションもいらない。トレイアイコンもいらない。 プロプラなブラウザも不要。メールアドレスも不要。あんたのところにホームページを置く気もない。 Norton Somewhere along the line, you decided to protect people from their own computer, rather than protect the computer itself. You have never once written a piece of software that didn't slow a machine down to a painful crawl. Every machine I have come across that has had Norton on it, has had a virus and multiple spywares still there. Your product is so bad, its own uninstaller does not work. You sell a false sense of security, nothing more. ノートン先生を「ユーザーのコンピュータを守る」のではなく「ユーザーのコンピュータから ユーザーを保護する」ように決めましたね。絶対、マシンを苦痛になるほど遅くしたりしない ソフトを書いたことなんかないんだろう。 アンインストーラーはまともに動かない。 McAffee Your product is slow, useless, impossible to configure and relies upon passwords, activation and IE just to do its job. It fails on every level. あんたのところの製品は、遅い、使えない、設定変更もできないしパスワード便り。 アクティベーションとIEがその仕事。あらゆるレベルで失敗している。 Printer Manufacturers A Printer driver is a folder with one “.ini” file, and a couple of “.dll”s and that’s it. It is not a 50 MB download. It is not an IE Toolbar, and Side Pane. It is not half-baked photo software. It is not a splash screen when your computer starts. It is not a tray icon. プリンタドライバとは一つの“.ini”ファイルと2,3個の“.dll”ファイル。それで十分。 50MBもダウンロードにはならないし、IEツールバーでもないし、サイドペインでもない。 中途半端な写真管理ソフトではない。PCを起動したときのスプラッシュ画面ではない。 トレイアイコンでもない。 Yahoo If Microsoft bought you, your software would actually improve. The Yahoo Toolbar is like AIDs. You have to be careful what software you download, otherwise you’re bound to get it from one of them along the line. Nokia, and other phone manufacturers You seem to be under the impression that you are the only piece of software on the computer. You’re happy to rear your ugly face at every boot. You make a simple thing like syncing seem like surgery.Your software is so unweildy, it’d be easier to take up oragami. nVidia and ATI A graphics card driver drives the screen. It does not include a tray icon, that handily reminds you that you don’t have an SLI configuration everytime you boot. Your configuration options shouldn’t be so complex that I have to choose between a Basic and Advanced mode, both of which are as equally useless as each other. AOL
ノートン先生…
その2
about:cmlenz - The Truth About Unicode In Python Collation (照合) Collation in this context refers to how strings are sorted. Though that might seem simple enough, there are a number of challenges here. First, you can't simply compare unicode code points, as the order in which characters appear in the unicode code charts says little to nothing about how they compare in collation. このテキストにおける文脈での照合はどのように文字列をソートするかに使うものです。 十分単純なように見えるかもしれませんが、数多くの挑戦があります。 まず第一に、あなたは文字の比較を単なるUnicodeのコードポイントとの比較として行うことは できないということです。文字列を構成する文字はUnicodeのコード表に順番に並んでいる ように見えますが、どのようにそれらを照合において比較するのか(compare in collation) についてはほとんどなんの情報もないのです。 Instead, basic collation is defined by the Unicode Collation Algorithm (UCA). This algorithm converts code points into collation elements based on the Default Unicode Collation Element Table (DUCET). The collation elements are then used for the comparison, rather than the code points themselves. 基本的な照合であれば、Unicodeの照合アルゴリズム (Unicode Collation Algorithm (UCA)) で定義されています。このアルゴリズムはコードポイントをデフォルトの Unicode Collation Element Table (DUCET)に基づく照合要素へと変換し、変換後の照合要素は 比較に使われます。コードポイントそのものが比較に使われることはありません。 Unfortunately, Python does not (yet) come with support for unicode collation, and instead uses the code point comparison approach, which results in incorrect sorting as soon as your strings move beyond basic ASCII letters and digits: 残念なことに、Pythonは(今のところは)Unicode collationのサポートをしていません。 そして、コードポイントの比較によるアプローチを採用しています。これは あなたがASCIIの範囲を超えたところにある文字や数字を使った文字列のソートしたときに 正しくない結果をもたらします。 >>> u'cafe' < u'café' < u'caff' False If string comparison adhered to the UCA, that example should have printed True. But Python compares strings based on the character code points, and because the code point “é” (\uE9) is greater than “f” (\u66), “café” is sorted after “caff”. 文字列比較がUCAに従ったものであれば、この例では True が出力されるはずです。 しかしPythonは文字列の比較を文字列を構成している文字のコードポイントに基づいて 行っていて、 “é” (\uE9) のコードポイントは “f” (\u66) のそれよりも大きいので “café” はr “caff”の後ろに来ているのです。 James Tauber wrote a Python implementation of the UCA a while ago. The other challenge is that collation is often locale-specific, and even within the same country and language there may be different types of collation, such as phonebook versus dictionary sorting. The Common Locale Data Repository (CLDR) addresses locale-specific collation requirements. これとは別のチャレンジとは、照合というものがしばしばロカールに特有なものになっていて 同じ国で同じ言語を使っていたとしても異なる照合手順な場合がありうるのです。 たとえば、電話帳で使われている並べ方と、辞書で使われている並べ方は同じものではありません。 Common Locale Data Repository (CLDR) はロカールに特有の照合が要求するものに 対処しようとするものです。 Case Conversion (大小文字変換) Case conversion refers to string operations such as converting a string to lower case, upper case or title case. It is a bit simpler than collation: the unicode code charts include information about lowercase/uppercase variants of each code-point. But that only covers the 1:1 mappings. Some lower case characters (such as “ß”) actually map to two or more upper case code points (“SS” in this case). These special case mappings are defined in a supplemental unicode data file called SpecialCasing.txt. 大小文字変換は文字列を小文字にしたり、大文字にしたり、あるいは title case にするような 変換で行われる文字列操作です。これは照合よりは簡単なものです。 Unicodeのコード表は ここのコードポイントに関連する 小文字/大文字 のバリエーションに 関係する情報を含んでいます。しかし、それは一対一のマッピングしかカバーしていません。 一部の小文字(たとえば“ß”)は実際には二つ以上の大文字のコードポイントにマッピングされています (この場合は "SS")。これらマッピングの特殊なケースは SpecialCasing.txt という名前の supplemental unicode データファイルで定義されています。 The Python unicode methods lower(), upper(), and title() are restricted to 1:1 case mappings. PythonのUnicodeメソッド lower(), upper(), title() は一対一のマッピングに制限されています。 >>> u'ß'.lower() ß >>> u'ß'.upper() ß >>> u'ß'.title() ß And similar to collation, case mapping may depend on the locale. This time, locale-specific tailoring is not specified by the CLDR, but rather in SpecialCasing.txt. また照合と同じく、大小文字のマッピングもロカール依存になる可能性があります。 現時点ではロカール固有の tailoring は CLDRによって定義されておらず、 SpecialCasing.txt にあります。 Regular Expressions (正規表現) Of course, regular expressions need some extensions to make them really usable in a unicode environment. For example, picture the way you'd match Wiki words using a regular expression, assuming only ASCII text. It might look something like: もちろん正規表現もUnicode環境で本当に使い物になるようにするにはいくつかの拡張が必要です。 たとえば、あなたが Wikiワードを正規表現を使ってマッチングしようとしたとき ASCIIのみのテキストが対象になっていると仮定されます。ですからマッチングは次のような 形式になるでしょう: >>> import re >>> re.findall(r'(?:[A-Z][a-z]+){2,}', 'Hello WikiWord, bye!') ['WikiWord'] But what about non-ASCII Wiki words such as “TürÖffner”? That regular expression would fail, as it only works on lower and upper case ASCII letters. For such cases, the annex Unicode Regular Expressions defines the use of character properties in regular expressions. Instead of explicitly checking for the ranges [A-Z] and [a-z], you'd use r'(?:\p{Lu}\p{Ll}+){2,}', where \p{Lu} matches all upper case characters, and \p{Ll} matches all lower case characters. しかし “TürÖffner” のようなASCIIではない文字を含むWikiワードについてはどうなるで しょうか? 先の例で使った正規表現はASCIIに含まれている大文字と小文字に対してしか うまく動作しません。このような場合には Unicode Regular Expression は 正規表現中でキャラクタ属性を使うことが推奨されます。 [A-Z]や[a-z]のようにチェック対象となる範囲を明示してしまうのではなくて、 r'(?:\p{Lu}\p{Ll}+){2,}' のようにします。ここで、\p{Lu}はすべての大文字である キャラクタにマッチし、\p{Ll}はすべての小文字であるキャラクタにマッチします。 Unfortunately the use of unicode character property matching is not supported by the Python re module. And that's just the basics. There's a lot more to regular expressions that are really aware of unicode, such as case-insensitive matching that takes special case mappings into account. 残念なことに、Unicodeのキャラクタ属性の使用はPythonのreモジュールではサポートされていません。 And that's just the basics. 正規表現でUnicodeを使うことが価値あることである状況は 少なくありません。たとえば特殊なケースマッピングを account として扱うような 大小文字に影響されないマッチングのような状況があります。 Text Segmentation (テキストのセグメンテーション) Text segmentation refers to the splitting of text into units such as user-perceived characters (grapheme clusters), words, and sentences. It is specified by Unicode Text Segmentation. For example, what the user perceives as a single character may be composed from multiple unicode code point. “Ǵ” is perceived as a single character by the user, but it is actually two unicode code points. When you segment on a user-perceived character basis, you don't want to split that into two characters. テキストのセグメンテーションとは、ユーザーが認識するキャラクタ(grapheme clusters) だとか、単語、センテンスといったような“ユニット”にテキストを分割するということです。 これはUnicode Text Segmentationによって決められています。 たとえばユーザーが複数のUnicode コードポイントの組み合わせを一つのキャラクタと みなす場合があります。 “Ǵ” はひとつのキャラクタとなることがユーザーは期待していますが、 これは実際にはふたつのUnicodeコードポイントです。 あなたがuser-perseived character basis に基づいてセグメンテーションする場合には あなたはこれを二つのキャラクタに分割したいとは考えないでしょう。
2008-07-05 - stogの日記 すげーコード見つけた - へたれプログラマな日々
すげーコード見つけた - へたれプログラマな日々 >>> import re >>> DIGITS = re.compile(r'(\d+)') >>> pieces = DIGITS.split('123a4bcd56e') >>> map(int, pieces[1::2]) [123, 4, 56] >>> pieces = DIGITS.split('abc123a4bcd56') >>> map(int, pieces[1::2]) [123, 4, 56]
そんなびっくりするほどのものかなあ、 と云っちゃうのはたぶん空気読めてないんだろうな(笑) Rubyなら scan(/\d+/), Python なら findall(r'\d+') 使った方が素直な気がするけどねー (速度が段違いに遅かったらゴメンナサイw)。 あともとのコードで
すげーコード見つけた - へたれプログラマな日々 pieces = DIGITS.split(s) pieces[1::2] = map(int, pieces[1::2]) return pieces
ってしてるということは、 数字だけじゃなくてそれ以外の部分も返しているんだけどなんか意味があるのかな。 だとすれば findall() じゃ代替できないね。
>>> DIGITS = re.compile(r'(\d+)')
>>> pieces = DIGITS.split('123a4bc56e')
>>> pieces
['', '123', 'a', '4', 'bc', '56', 'e']
>>> pieces[1::2]
['123', '4', '56']
>>> pieces[1::2] = map(int, pieces[1::2])
>>> pieces
['', 123, 'a', 4, 'bc', 56, 'e']
>>>
odz さんあたりが超絶的なワザを疲労してくれることをひそかに期待 :)
なおPerlで Rubyのscanのような結果を得るには m/\d+/g をリストコンテキストで実行すればおk。
my @s = '123ab4cd56efg' =~ /(\d+)/g; say join ':', @s; → 123:4:56
ソース公開のものだったのか。
つ Perl6
正規表現てそんなに難しいかなあ。 そりゃあvaild なメールアドレスにマッチするパターン。とかだととんでもないことになるけど、 grep やエディタのgrep機能、find & replace でよく使うようなレベルのものなら そんなに複雑なものは使わないですむと思うんだけど。 perlにくっついている、正規表現のチュートリアル(perlretut)が入門にはオススメ。
たしかに “eat in”って意味不明(笑)
Perl「言語」初心者がモダンなPerlを高速に学ぶ方法 - dann@webdev - dannグループ とおりすがり2008/07/04 09:48 モダンなとか言ってる時点で終わってる言語。 yappo 2008/07/04 12:16 じゃぁモランボンで dann 2008/07/05 00:51 どんな言語でもモダンな書き方やライブラリというのはあると思いますよ。 na3 2008/07/05 09:22 仕事だとモダンな書き方を許してもらえなかったりして悔しいです。 pon 2008/07/05 13:16 良く分からないけど、「モダン」ってPerl5.8.8で許されるようになった書き方とかっすか? Johann 2008/07/05 16:36 すごく為になる情報です。とおりすがりの茶々とか気にする必要無いですね。 ありがとうございました。 サルサル 2008/07/05 23:00 perlの問題点をまざまざと見せ付けてくれたという点ではすごくためになる情報だと思う。
「日本語版」に関して名前で損すること そういえば Python も ダウンロードをみると 「Python標準リリース」(日本語対応済み)と 「日本語環境用インストーラ(Win32),Python 2.3.4ベース」 (本家で日本語に対応する前のも ので、古い)の2つがあって、 どちらをダウンロードするか迷ったり、 バージョン番号のわかる 人でも 「2.4以降は日本語化されてないとは日本ユーザ会は何やってるんだ」と 誤解したりす るかも、 というのが、前々から話題になっているものの、あんまり改善してなかったりします。
var/タワゴト(2008-07-05) ♪ バグは夜更け過ぎに ♪ 仕様に変わるだろう
付箋を貼ったところをまとめる時間がない。
- ■事実:今日一日を振り返り一つ出来事を選んで書こう。
- ◆発見:出来事からひらめいた事や発見した事を書こう。
- ●教訓:忘れないための名言やことわざを書こう。
- ★宣言:明日になっていたい自分の姿を宣言しよう。
4行日記のフォーマット - *ListFreak
散髪。
美容院はひげをあたってくれないので、
なじみの床屋(って使っちゃいけない単語wだっけ)に。
例の本。
重箱の隅をつつき始めたら興がのってこんな状態にw
→
んでまあこれだけの指摘を書いていくのはちと時間的に厳しいのでおいおいやるとして、 まず指摘したいのは、「何のための誰のための本なのかわからない」 ということです。 技術的は間違いも困ったものですが、『Cではこのように書くこともできる』 のように切り出して一見してすぐに意味が取れないような書き方の例を出したりするのですが、 それが良いとも悪いともそうしろともするなとも書いていない。 まあ「マニアはこう書く」てきな説明があったりするので暗に勧めているともとれるのですが プログラミングそのものにもあまり明るくない入門者(初心者)にそれをするのはどうでしょうか?
この本を執筆した目的が伺える記述が巻末の脳内座談会の中にありましたのでそこから転載してみます。
私は、節操なくいろんな言語に挑戦してきました。 仕事でも趣味でもね。そこで、あることに気がついたわけですよ。 COBOLやFORTRANなどのレガシー言語や、LISPなどの特殊な目的で使用される言語は別にして、 1980年代以降に誕生したプログラミング言語には、すべからくある言語の陰が見え隠れしているのです。 それがC言語であったというわけです。 C++はもちろん、C言語にオブジェクト指向プログラミングの要素を付加したスーパーセットですし、 JavaやC#も、C、C++のよくないところを改善するというスタンスで誕生したものであるというのは議論の余地がありません。 そして、JavaやC#の次に出現する言語も、 おそらくCそしてC++の強い影響下により誕生すると予測することができます。 高級言語第1号はFORTRANですが、他の言語に影響を与えることはありませんせした(ママ)。 BASICという例外はありますが。 現在のVisual Basicはまったく別物になってしまいましたのでね。 あれはあれで完結してしまったのです。 やはり多くの言語の祖先はC言語なのです。 でありますから、プログラマは必ずC言語を習得すべし! とはいかないまでも、 C言語のことを知っておいて損はないんじゃないかなということが言いたかったわけです。
FORTRANがほかの言語に影響を残していないとはどういう了見だとかも突っ込みたいのですが まあそれは自重しておいて。
某氏のmixiでの日記で、読後燃やしたくなったという記述がありましたがさもありなん。 洋書でよくある「~ in 24 hours」とか 「Idiot's ~」でもここまでひどくないぞ。 ってかあのレベルをクリアしている日本で出版されている「入門書」自体も それほどなかったりするんですけどね○| ̄|_
C言語なら俺に聞け(入門篇) Part 31 708 デフォルトの名無しさん [sage] Date:2008/07/05(土) 20:36:53 ID: Be: 変数は定義と同時に初期化すべきですか? 709 デフォルトの名無しさん [sage] Date:2008/07/05(土) 20:40:14 ID: Be: それができる環境ならしたほうがいい 710 デフォルトの名無しさん [sage] Date:2008/07/05(土) 20:55:50 ID: Be: int array_n[10] = {1}; と初期化値を指定した時 array_nの配列の内容がarray_n[0] == 1で、 初期化値の指定が無い残りが全て(array_n[1]~array_n[9])が「0」 で埋まるのはC言語の規格上そうなっているのですか? それともコンパイラによっては[1]~[9]は不定値のままだったりする? 711 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:08:59 ID: Be: 規格上そうなっている 712 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:12:49 ID: Be: >>710 古いコンパイラなら不定値が入っている可能性が高い 713 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:20:29 ID: Be: >>710 比較的新しい規格で決められた事なので >>711 も >>712 も正しい 714 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:27:59 ID: Be: 比較的新しいって、どの規格で? 715 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:36:02 ID: Be: 配列の初期化の足らないのを0で埋めるって仕様がサポートされてないようなコンパイラなんてもうないだろ。 716 デフォルトの名無しさん [sage] Date:2008/07/05(土) 21:58:06 ID: Be: KnRぐらいかな。 pccはどうだったんだろう? 717 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:03:10 ID: Be: >>708 できるだけ使う直前で初期化した方がいい 718 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:08:58 ID: Be: はいはい 釣りはいいから 719 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:13:41 ID: Be: >>716 つか, static に取った奴は .bss に置かれるから, 処理系依存で 0 で埋められる 組み込みもんで boot が遅いってので .bss の初期化やめたシステムがあったが 逆に boot が遅くなったって笑い話がつい最近あった. 720 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:14:16 ID: Be: ふつー使う直前だよな。 721 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:18:10 ID: Be: 俺もつい使う直前に初期化してしまう 722 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:18:33 ID: Be: 業務コードでは 変数宣言 情報セキュリティ対策の一括した初期化 (memset,ヌルクリア) コード上の分離された箇所での明確な処理が必要) 初期値設定 主処理コード を取る形態が多いが、主処理コードの後にも、情報セキュリティコード(ヌルクリア) も入れたほうが良い。(大抵の業務用コードではそれは入っていない) 呼び出し側のバグによって、作業データが漏洩する可能性があるから 723 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:19:05 ID: Be: staticが0で初期化されるのは、処理系依存じゃないよ。 724 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:22:01 ID: Be: されないのもあったぞ 725 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:24:15 ID: Be: 処理の内容と無関係に初期化(しかも0)は、よくない筋ですね。 そういうことをやってるところが多いかどうかはしらない。 コンパイラの機能として、自動で、使われなさそうな値で埋めてくれるのとかそういうのはいいと思う。 726 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:24:41 ID: Be: >>723 すまん. OS とかの実行環境を含めての処理系だ 727 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:26:11 ID: Be: 実行時に必ず初期化されることが保証されているが コンパイラが警告を出すときには変数宣言時に初期化してる 728 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:26:58 ID: Be: >>724 でも処理系依存じゃないよ。 まともな処理系は0が入る。 729 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:33:48 ID: Be: C99とかJavaみたいに、変数の宣言が自由にできる言語は、使う直前で宣言 & 初期化。 Cみたいにブロックの先頭でしか宣言できない言語は、使う直前で初期化。宣言と同時には初期化しない。 730 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:43:10 ID: Be: 宣言時以外は代入とか言ってみる。 731 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:44:59 ID: Be: スタイルの問題は宗教論争になる 732 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:48:06 ID: Be: 俺は結論出てるから高みの見物 733 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:49:50 ID: Be: >722の例にあるよーな効率の悪い現実の話は別として とにかく値を使う前に正しく入ってればいい 大切なのはまちがいを減らすことで、 有効なのはどっちにするのかを決めておくこと どっちが正しいのかということではない 734 710 [sage] Date:2008/07/05(土) 22:53:05 ID: Be: >>711-715 とりあえず、0で埋められる前提でコードを書いても大丈夫そうですね ありがとうございました 735 デフォルトの名無しさん [sage] Date:2008/07/05(土) 23:01:02 ID: Be: 宗教論争つーか、世間でたかく評価されてるようなプロダクツで、(Cで)宣言と同時に初期化ってスタイルのってある? 736 デフォルトの名無しさん [sage] Date:2008/07/05(土) 23:06:35 ID: Be: 結論: 宣言同時初期化は、処理ロジックを誇張する傾向が高いが、全体から見てそのモジュールの 処理ロジック(役割)が堅くなりすぎる傾向があり、嫌う人も居る。 コード部冒頭の同時一括初期化コードは情報セキュリティー対策をソースコード上で明示的に行う 無駄なコード。関数のリターン前に不要な変数のクリアを同時に行わないと無意味 742 デフォルトの名無しさん [sage] Date:2008/07/06(日) 02:08:09 ID: Be: >>736 結論 モジュールの分化性が嫌であり、なおかつスタックやヒープに変数を割り付けることによる 情報漏洩が嫌いな奴はBASICでも使ってろ。 749 デフォルトの名無しさん [sage] Date:2008/07/06(日) 08:59:52 ID: Be: >>730 処理系はそうは思っていないようですよ。 宣言に現れる = は、配列を初期化する = を除いて、 その出現順を保ちながら宣言の直後に書かれているかのように扱われ。 750 デフォルトの名無しさん [sage] Date:2008/07/06(日) 09:11:20 ID: Be: 言葉の定義に処理系がどうとか意味わからん。 751 デフォルトの名無しさん [sage] Date:2008/07/06(日) 09:14:55 ID: Be: 原理原則と実装レベルあるいは運用の話をごちゃ混ぜにするのはイクナイ
宣言時だけじゃなくて通常の代入のときにも複合リテラル書ければいいんですよね。 ってC99だとOKでしたっけ?
【PodCast】アキバ系!電脳空間カウボーイズ 2.0 995 仕様書無しさん [sage] Date:2008/07/06(日) 09:33:13 ID: Be: 遠藤さんの自慢話にはうんざり 996 仕様書無しさん [sage] Date:2008/07/06(日) 09:34:34 ID: Be: そもそも遠藤さんってだれ?ドルアーガつくった人? 997 仕様書無しさん [sage] Date:2008/07/06(日) 10:27:18 ID: Be: 遠藤氏と結構戦ってたじゃないw清水 取り繕うとする空気が面白かった 998 仕様書無しさん [] Date:2008/07/06(日) 11:45:06 ID: Be: >>996 アスキーの編集長だったひとだと思う。 999 仕様書無しさん [sage] Date:2008/07/06(日) 11:55:54 ID: Be: つttp://www.8-p.net/ 1000 仕様書無しさん [sage] Date:2008/07/06(日) 12:04:01 ID: Be: ヌル(・ω・)ポリーン 1001 1001 [] Date:Over 1000 Thread ID: Be: このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。
Perlについての質問箱 35箱目 843 デフォルトの名無しさん [sage] Date:2008/07/03(木) 11:10:23 ID: Be: 次スレからは、このテンプレ入れようよ。 --------------------------------------------------------- # 【Perl 日本語処理の基礎の基礎】 # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # 次に、あなたが実行したい処理の内容を入れて下さい。 print "SJISには、「十表貼申予暴」のようなダメ文字がある。\n"; sleep(1); # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 846 デフォルトの名無しさん [sage] Date:2008/07/03(木) 16:51:10 ID: Be: >>843 先生! open FILE, '<:encoding(cp932)', 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv'; がエラーになります!なんで??? ちゃんと utf8 でコードを書いたのに。 850 デフォルトの名無しさん [sage] Date:2008/07/03(木) 18:38:05 ID: Be: use utf8してんでそ? ファイルのパスがutf8 flaggedなだけじゃないかな つーかファイル開く時に例外処理入れるのは乳児でも忘れない常識 それとopenは引数3つにするかIO::Fileなり便利なモジュールを使うべし open my $fh, '<', $file or die $!; 851 デフォルトの名無しさん [sage] Date:2008/07/03(木) 19:25:33 ID: Be: >>843 を使っても、ファイルパスに指定する文字列は sjis でないとダメ。 readidir の返り値とかも utf8 フラグ無しの sjis だったりするから注意。 852 デフォルトの名無しさん [sage] Date:2008/07/03(木) 19:26:22 ID: Be: 訂正 × readidir ○ readdir 853 デフォルトの名無しさん [sage] Date:2008/07/03(木) 19:30:47 ID: Be: そのへん5.10でも改善されてないの? 857 デフォルトの名無しさん [sage] Date:2008/07/03(木) 22:26:01 ID: Be: >>850 さんのアドバイス通り、 IO::File というのを使ってみました。 use utf8; use IO::File; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; my $io = IO::File->new(); $io->open('C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv', 'r') or die $!; ・・・やっぱ 「No such file or directory line 8」 です orz 859 デフォルトの名無しさん [sage] Date:2008/07/03(木) 23:59:05 ID: Be: # utf8 で保存 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; $file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv'; open my $fh, '<', encode("cp932", $file) or die $!; 861 デフォルトの名無しさん [sage] Date:2008/07/04(金) 01:28:06 ID: Be: 850,851に答え書いてあるじゃん 単にファイルパスがutf8フラグのついたUTF8文字列になってるからPerlがファイルを見つけられてないだけ 862 デフォルトの名無しさん [sage] Date:2008/07/04(金) 02:48:58 ID: Be: NTFSはファイル名をウニコードで持ってるのに、 なんでANSI文字コードじゃないといかんの? まさか、CreateFileAつかってるんか? 864 デフォルトの名無しさん [sage] Date:2008/07/04(金) 10:54:30 ID: Be: >>862 昔の「しがらみ」というものがあるだろう。 ウニコードでやりとりするようにすると、昔のソフトが全滅する。 866 デフォルトの名無しさん [sage] Date:2008/07/04(金) 12:59:04 ID: Be: >>843の binmode STDERR => ":encoding(cp932)"; はやめたほうがいいかもね。例えば die "finish"; を実行すると、STDERR に finish at (ファイル名)(行番号) と出力されるが、ソースファイルが日本語のファイル名だと、 元々sjisの文字列をutf8とみなして、さらにsjisに変換しようとするから、 エラーが起こって何も出力されなくなる。 STDERR に日本語出力するときは、その都度変換すべきだろうね。 870 デフォルトの名無しさん [sage] Date:2008/07/05(土) 00:47:49 ID: Be: >>864 いや、utf8フラグたってるかどうかで切り分ければいいんだから、そんな問題は発生しないはずだ 873 デフォルトの名無しさん [sage] Date:2008/07/05(土) 12:55:28 ID: Be: >>862 W系使う直前で MultiByteToWideChar(CP_ACP,.. してるから。 (W系で受け取った結果は CP_ACPでMultiByte文字列化) それはもう、utf8フラグなんて無視してCP_ACP(システムのデフォルトコードページ)のみ。 このへんは(utf8フラグを見てCP_ACPとCP_UTF8を使い分けていた)5.6の方がマトモなんだよな。 874 デフォルトの名無しさん [sage] Date:2008/07/05(土) 13:52:51 ID: Be: Perlはutf8フラグの存在が癌 プログラム言語史上かつてないほどの 糞仕様を作ってしまった。 875 デフォルトの名無しさん [sage] Date:2008/07/05(土) 14:10:36 ID: Be: >>873 酷いな。なんでそんなことしちゃったん? >>874 それはちがう。 perlに明示的な型がない以上、バイナリシーケンスと文字列を区別するために何らかのフラグは必要。 876 デフォルトの名無しさん [sage] Date:2008/07/05(土) 14:11:38 ID: Be: >>874 つかいかたを理解できなかったからって、こんな場所でつまんないこと書くなよw 880 デフォルトの名無しさん [sage] Date:2008/07/05(土) 22:35:18 ID: Be: おかげさまで売り上げの集計ができそうです。 ところが、今度は rename で 「No such file or directory」 エラーが出ます。 # utf8 で保存 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; $file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv'; $bak = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上(集計済).csv'; open my $fh, '<', encode("cp932", $file) or die $!; # (中略) close $fh; rename $file, $bak or die $!; # ? ここ 集計済にしておかないと、売り上げが重複してとんでも無いことになっちゃうんです・・・ 883 デフォルトの名無しさん [sage] Date:2008/07/05(土) 23:07:49 ID: Be: >>880 同様にencodeしろよ。 891 デフォルトの名無しさん [sage] Date:2008/07/06(日) 13:58:07 ID: Be: 今までの話をまとめて、>>843 のこのテンプレは、こんなもんでどう? --------------------------------------------------------- # 【Perl 日本語処理の基礎の基礎】 # このレスは、Windows の ActivePerl で日本語処理を行う場合のテンプレートです。 # このレスの内容をそのまま、UTF8 形式のソースファイルに保存して下さい。 # 入出力ともシフトJIS形式のファイルまたはDOS窓を想定しています。 # まず、以下の行を先頭に入れて下さい。 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; # ※1 use Encode; # 次に、あなたが実行したい処理の内容を入れて下さい。 $file = 'C:/なんたら/かんたら.txt'; open my $fh, '<', encode("cp932", $file) or die $! ; # ※2 print <$fh>; # 以上の内容は、日本語処理が解らない人でも、とりあえず日本語処理ができてしまう # おまじないです。条件が異なる場合の対処方法は、ご自分で勉強して下さい。 # 【注】※1.の行を入れると、DOS窓への日本語出力は簡便になりますが、 # ソースファイル名に非ANSI文字が含まれる場合にdie 文の出力が失敗します。 # ※2.OSに渡す文字列(ファイル名,dosコマンドのオプションなど)は、 # この例のようにcp932でエンコードする必要があります。 892 デフォルトの名無しさん [sage] Date:2008/07/06(日) 14:03:43 ID: Be: いい加減今の時代にDOS窓って呼び方はやめないかw 895 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:12:31 ID: Be: 皆様の暖かいアドバイスのおかげで、やっと意味が理解できました! ファイル名と思しきとこは全て、encode("cp932",ほげほげ) するんですね! open だけかと思ってました。rename も encode("cp932",ほげほげ) が必要なんです。 # utf8 で保存 use utf8; use open IO => ":encoding(cp932)"; binmode STDIN => ":encoding(cp932)"; binmode STDOUT => ":encoding(cp932)"; binmode STDERR => ":encoding(cp932)"; use Encode; $file = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上.csv'; $bak = 'C:/Documents and Settings/NECPCuser/デスクトップ/07年度売上(集計済).csv'; open my $fh, '<', encode("cp932", $file) or die $!; # (中略) close $fh; rename encode("cp932", $file), encode("cp932", $bak) or die $!; # ? ここ改良! いろいろ実験してみたら、他にも unlink, utime, stat, -f -e -s など、 さらには LWP::UserAgent の mirror メソッドするときも $ua->mirror("http://ほげほげ.com/", encode("cp932", "ほげほげ.html")); って感じで、なんでもかんでも encode("cp932", ほげほげ) するワケですね。 一体全体、なんでまたこんなクソ仕様にしたんでしょう???使えねーーーーーーよ。 死ね perl ! 896 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:21:18 ID: Be: 馬鹿は大変だな。 897 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:30:25 ID: Be: つか、どういう意図でこんなクソ仕様にしたんでしょう? 898 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:31:43 ID: Be: >>897 もう解決したんだろ。さようなら。 899 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:31:44 ID: Be: ちょっと手元のスクリプトを Windows 対応にしてみたら 30箇所も encode("cp932", ほげほげ) する必要があった。 perl 死ね! 903 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:39:29 ID: Be: >30箇所も encode("cp932", ほげほげ) する必要があった。 あーあ 906 デフォルトの名無しさん [sage] Date:2008/07/06(日) 21:56:01 ID: Be: >>897 シングルバイト圏の連中があいかわらずA系のAPIを使ってるから。 こういう仕様にしようと思ったからこうなってるんじゃなくて、 何も考えてないからこういう結果になっただけだ。 これじゃ困るから全部W系のAPIを呼ぶようにしろと説得してくれ。 907 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:02:09 ID: Be: 困ったのが opendir/readdir opendir するときは、引数のディレクトリ名は encode("cp932", ほげほげ) しなきゃいけない。 ところが readdir で返される配列は、ななんとシフトJIS! ということは、返された値を1個1個、decode("cp932", ほげほげ) しなきゃならない。 これをやらないと、今度は、この値を使って open/rename/unlink/-f -d -e -s などなどするとき 間違って encode("cp932", ほげほげ) してしまいそう。 また、ファイル名を正規表現で加工したいときもあるだろう。 だから、readdir で返される配列は、decode("cp932", ほげほげ) しといたほうが安全。 混乱を避けるためには decode("cp932", ほげほげ) しときなさい、ってこと。 あと、__FILE__ も、@ARGV もだ。 こんなことしてたら、マトモなアプリなら30箇所でも40箇所でも encode("cp932", ほげほげ)/decode("cp932", ほげほげ) が出てくる。 perl 死ね! 909 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:09:10 ID: Be: >>906 まだ言ってるよ、コイツ。 このスレを100回読め。 ↓ http://pc11.2ch.net/test/read.cgi/tech/1177930957/ 910 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:10:19 ID: Be: use utf8; これは、utf8 でコーエィングされてる、という意味。 use ユニコード・・・ではないんだよ。 911 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:11:16 ID: Be: use utf8; これは、utf8 でコーディングされてる、という意味。 文字列の内部表現も utf8 ってこと。 use ユニコード・・・ではないんだよ。 912 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:24:38 ID: Be: >>909 間違ってるのはお前だって 913 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:27:05 ID: Be: >>909 文字列の内部表現はUTF8なのに、 OSの機能を呼び出すときにUTF16じゃなくてANSIに変換してるのが問題なの。 そのスレを出すのは意味不明。 914 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:36:18 ID: Be: ほうほうほうw それじゃぁお尋ねしますがねぇw >全部W系のAPIを呼ぶようにしろ これで解決するんですかい? 「W系のAPI」 とやらに utf8 文字を渡すつもりwww 915 デフォルトの名無しさん [sage] Date:2008/07/06(日) 22:40:17 ID: Be: この問題を解決するには、 utf8 文字を UTF-16LE に変換して 「W系のAPI」 に渡す utf8 文字を ANSI(CP932) に 変換して 「A系のAPI」 に渡す いずれにしても、変換が必要。 >>906 が utf8 と ユニコードの違いがわかっていない証拠
ついに8月に発売予定がッ!?
Amazon.co.jp: 鉄のララバイ: 柳ジョージ: 音楽 商品の詳細 * CD (2008/8/27) * ディスク枚数: 1 * フォーマット: Maxi * レーベル: ランティス * ASIN: B001BM60CI
是非カラオケで(ry
・Firefox3
重大な問題がががが。
Firefox2でつかっていたテーマが使えません。
画面が味気ねー(笑)
初音 Mig ってw
ポインタはどうやって学ぶべきか 956 デフォルトの名無しさん [sage] Date:2008/06/30(月) 02:34:27 ID: Be: ヌルポインタの内部表現は 0とは限らないから 「構造体をmemsetで初期化してはいけない」という話がこのスレにある だが実際はそんな特殊な環境はめったに無く、人事だろうと思ってたんだ 957 デフォルトの名無しさん [sage] Date:2008/06/30(月) 02:36:29 ID: Be: ところがどっこい、身近な環境でそのような例を作れることに気づいてしまった 以下のコードを実行すると、大抵の環境で2回目のassertに失敗する 手元の x86の VC7.1と gcc 3.4で確認したぜ #include <assert.h> #include <string.h> int main() { struct A; struct { int A::*p; } hoge = {0}; assert(!hoge.p); // こちらはOK memset(&\1hoge, 0, sizeof(hoge)); assert(!hoge.p); // This assertion fails } 958 デフォルトの名無しさん [] Date:2008/07/05(土) 15:26:03 ID: Be: age 959 デフォルトの名無しさん [sage] Date:2008/07/05(土) 20:19:28 ID: Be: メンバへのポインタのNULL表現か これは興味深い
そういや例の本。何ページだったか忘れたけど構造体とか配列の0による初期化の話で
struct moge ra = {0};
ってやっちゃダメで
struct moge ra; memset(&ra, 0, sizeof (sturct moge));
にしろとか何とかいうくだりがあって、その理由に吹いた。 もうね、引(ry
燃やす前にどれだけ(チェックの)付箋が貼れるか試してみようかなあ(笑)
あ、もう一個思い出した。 「Cの文字列はNULLで終端されている」 って、NULL は char のサイズのゼロぢゃねえ(笑) まあ混同しても害のないことが多いだろうけどさ。
そのいち アセンブリ言語を学びたいのですけど、なにかtipsありますか? reddit.com: Ask reddit: I'd like to learn Assembly Language. Any tips?
reddit.com: Ask reddit: I'd like to learn Assembly Language. Any tips? POP and I left that class on the 3rd day, so don't CALL us if you want to JMP ahead in the book or MOV onto something more challenging. If you get stuck in a LOOP or something, do as we did, DEC the teacher and hang out with the chicks in sex ed.これを日本語に訳すのは俳句を英語にするくらい難しいっす :)
Writing MIPS processor assembly isn't practical, but writing assembly period isn't practical. Modern digital wrist-watches probably have enough power to run a compiled C program. All of the different processors have different pipelines, and they execute different instructions with different speeds, and x86 CISC instructions are broken down into unknown (undocumented and not to be used) microinstructions, which vary between microarchitectures, and you don't know which instructions are going to be virtualized (i.e., run in software by raising an interrupt, rather than hard-coded in transistors and microcode.) In other words, it's pointless to be more than familiar with the principles of assembly language. You are probably not going to beat a modern optimizing C compiler in performance. And even assembly language hides the way to get the most efficiency out of the machine, thanks to the back-end microinstructions hack. If you're not going to be dissuaded, I strongly recommend MIPS and the SPIM simulator. The best you're going to get out of assembly is a little gut-level feel for how things are working. The best use for knowing assembly language is writing a C compiler so you can stop worrying much about it. A very good computer architecture textbook that covers assembly language (and, again, high-level computer architecture knowledge is the best you're going to get; when/if you must write a blazingly fast customized program for processor Foo, get Foo manuals from the manufacturer and instantiate your general knowledge; you will still likely be at the mercy of the cache system, which instructions are fast, which are virtualized, and beating a good C compiler is going to be hit and miss, and you'll likely not beat by much what you could do by writing C code differently rather than dropping down to assembly, and these things probably will not be documented--guess and check) and uses x86 (and introduced a simplified version, called the Y86) is: Computer Systems: A Programmer's Perspective by Randal E. Bryant and David R. O'Hallaron. It's a unique computer architecture book, focusing on computer architecture from a programmer's perspective, rather than the perspective of a computer architect, and it's very comprehesive, with a UNIX and C bias. It's an eminently practical book.Make it fun by analyzing the 6502 code from a NES rom as you play a game to see what's going on behind the scenes when you punch that dude in the face or buy that delicious looking hamburger. I learned a lot about assembly by trying to alter variables in river city ransom. Eventually i discovered character stats weren't stored as their values, but rather as a single base of stats for each gang, with set deviations applied to them. I had to see where in memory the numbers were loading from into the register, and what operations were done on them. It was a lot of fun! The more i looked at the code, the more impressed i was at how efficient those nes programmers were at making every last byte of data count in those carts.MIPSのアセンブリ言語という声がいくつかありましたが、68kを推す声はなし。しくしく。
そのに。 関数型言語を学びたいのですけど、何から手をつければいいですか? reddit.com: I want to learn a functional programming language. Where should I start?
reddit.com: I want to learn a functional programming language. Where should I start? Quick: An Introduction to PLT Scheme with Pictures http://docs.plt-scheme.org/quick/index.htmlSICP is a good place to start (for Scheme).The Little Schemer and The Little MLer.I'd have to agree with the comments about Haskell, clearly the best place. While learning OCaml is by no means a waste of time you will miss out on many of the esoteric techniques of FP because they aren't required. Monads, Arrows, combinatorial coding. While the learning curve is as steep as they come, it will blow your mind and be worth it in the end. there is a fantastic book in beta right now (http://book.realworldhaskell.org/beta/) which is tremendous. The authors (dons and bos) are regulars on the #haskell channel on freenode and have been incredibly helpful. gotta love the language motto: "avoid success at all costs"
そのさん。 レベルの高いプロラマ向けの現代的なCプログラミングを学ぶのに最も良い方法とは? reddit.com: Ask Reddit: What is the best way for a high-level programmer to learn modern C programming?
reddit.com: Ask Reddit: What is the best way for a high-level programmer to learn modern C programming? When I asked this question a while ago, that's also the answer I got. I replied "Wait, but that book is really old. Even if the language hasn't changed much since then, hasn't the theory changed a lot?" People laughed. "There's no theory to programming C". For what it's worth, I second the recommendation. :-)
The only thing that I would add is that if you want to write C programs which run under UNIX, then acquire a copy of 'Advanced Unix Programming' by Marc J Rochkind. Read, Learn, Evolve.
1. GET A HOLD OF SOME C CBTS(computer based trainings)They are littered all over the net. VTC C. 2. Read O'Reilly C in a Nutshell 3. Besides working on windows os trying using linux to compile c programs 4. Practice Practice Practice 5. Try one some of the others things mentioned in the comments. 6. Do not read Deitel & Deitel books on C or any other language. They are crap. 7. Go to web sites of various universities and look at the C100 courses. They should have plenty of info on C 8. Get a data structures and algoritms book and do some coding in C One question why would you want to jump from a high level language to a C?
Exercise 2.10 C言語のswitch文 - ぱた☆へね
Exercise 2.10 C言語のswitch文 - ぱた☆へね Cのswtich文がどのようにアセンブラになるかの話。 これが教科書に載っているCのソースです。 switch (k) { case 0:f = i + j; break; /* k = 0 */ case 1:f = g + h; break; /* k = 1 */ case 2:f = g - h; break; /* k = 2 */ case 3:f = i - j; break; /* k = 3 */ }
cl -Fa -c -Ox で
PUBLIC _foo EXTRN _i:DWORD EXTRN _j:DWORD EXTRN _g:DWORD EXTRN _h:DWORD EXTRN _f:DWORD ; Function compile flags: /Ogty _TEXT SEGMENT _k$ = 8 ; size = 4 _foo PROC NEAR ; File d:\work\t\july\switchtest.c ; Line 11 mov eax, DWORD PTR _k$[esp-4] cmp eax, 3 ja SHORT $L548 jmp DWORD PTR $L563[eax*4] $L551: ; Line 12 mov eax, DWORD PTR _i mov ecx, DWORD PTR _j add ecx, eax mov DWORD PTR _f, ecx ; Line 17 ret 0 $L552: ; Line 13 mov edx, DWORD PTR _g mov eax, DWORD PTR _h add eax, edx mov DWORD PTR _f, eax ; Line 17 ret 0 $L553: ; Line 14 mov ecx, DWORD PTR _g sub ecx, DWORD PTR _h mov DWORD PTR _f, ecx ; Line 17 ret 0 $L554: ; Line 15 mov edx, DWORD PTR _i sub edx, DWORD PTR _j mov DWORD PTR _f, edx $L548: ; Line 17 ret 0 npad 3 $L563: DD $L551 DD $L552 DD $L553 DD $L554 _foo ENDP _TEXT ENDS END
-Ox にしたせいもあるんだろうけど、結構賢いコードをはきやがりますな。
-Od だとこんなコードに
push ebp mov ebp, esp push ecx ; Line 11 mov eax, DWORD PTR _k$[ebp] mov DWORD PTR tv64[ebp], eax cmp DWORD PTR tv64[ebp], 3 ja SHORT $L476 mov ecx, DWORD PTR tv64[ebp] jmp DWORD PTR $L491[ecx*4] $L481: ; Line 12 mov edx, DWORD PTR _i add edx, DWORD PTR _j mov DWORD PTR _f, edx jmp SHORT $L476 $L482: ; Line 13 mov eax, DWORD PTR _g add eax, DWORD PTR _h mov DWORD PTR _f, eax jmp SHORT $L476 $L483: ; Line 14 mov ecx, DWORD PTR _g sub ecx, DWORD PTR _h mov DWORD PTR _f, ecx jmp SHORT $L476 $L484: ; Line 15 mov edx, DWORD PTR _i sub edx, DWORD PTR _j mov DWORD PTR _f, edx $L476: ; Line 17 mov esp, ebp pop ebp ret 0 $L491: DD $L481 DD $L482 DD $L483 DD $L484 _foo ENDP
Cプログラムでsinとcosのマクローリン展開を20項まで行うプログラムの作りかたを各... - Yahoo!知恵袋 Cプログラムでsinとcosのマクローリン展開を20項まで行うプログラムの作りかたを各々教えて くださいm(_ _)m
で回答がついていて
Cプログラムでsinとcosのマクローリン展開を20項まで行うプログラムの作りかたを各... - Yahoo!知恵袋 //_cos(x),_sin(x)_のマクローリン級数 //_について20項までの和と、それぞれ //_のライブラリ関数値基準の誤差を //_示します。ソースリストには数箇所 //_?_で隠したところがあります。 //_適正な文字を考えてください。 #include_<stdio.h> #include_<math.h> int_main(){ __double__cs,c; __double__sn,s; __double__x; __double__pi=acos(-1.); __int_____k,n=20; __double__fct,k2,x2; __double__csx,snx; __double__cer,ser; __x__=_pi/6; __csx_=_cos(?); __snx_=_sin(?); __x2_=_x*x; __cs_=_c_=_?; __sn_=_s_=_?; __printf("x_=_pi/6\n"); __printf("項__cos(x)___error____sin(x)___error\n"); __for(k=1;k<=?;k++)_{ ____k2__=_2*k; ____cs_+=_c*=(-x2/(k2*(k2-1))); ____sn_+=_s*=(-x2/(k2*(k2+1))); ____cer_=_fabs(cs-csx); ____ser_=_fabs(sn-snx); ____printf("%2d_%f_%.1e_%f_%.1e\n",k,cs,cer,sn,ser); __} } /*_出力: x_=_pi/6 項__cos(x)___error____sin(x)___error _1_0.862922_3.1e-003_0.499674_3.3e-004 _2_0.866054_2.8e-005_0.500002_2.1e-006 _3_0.866025_1.4e-007_0.500000_8.1e-009 _4_0.866025_4.3e-010_0.500000_2.0e-011 _5_0.866025_8.9e-013_0.500000_3.6e-014 _6_0.866025_1.2e-015_0.500000_5.6e-017 _7_0.866025_1.1e-016_0.500000_0.0e+000 _8_0.866025_1.1e-016_0.500000_0.0e+000 _9_0.866025_1.1e-016_0.500000_0.0e+000 10_0.866025_1.1e-016_0.500000_0.0e+000 11_0.866025_1.1e-016_0.500000_0.0e+000 12_0.866025_1.1e-016_0.500000_0.0e+000 13_0.866025_1.1e-016_0.500000_0.0e+000 14_0.866025_1.1e-016_0.500000_0.0e+000 15_0.866025_1.1e-016_0.500000_0.0e+000 16_0.866025_1.1e-016_0.500000_0.0e+000 17_0.866025_1.1e-016_0.500000_0.0e+000 18_0.866025_1.1e-016_0.500000_0.0e+000 19_0.866025_1.1e-016_0.500000_0.0e+000 20_0.866025_1.1e-016_0.500000_0.0e+000 */
わたしにはこのプログラムが、「マクローリン展開した多項式を使って第20項まで計算」 するものであって 「マクローリン展開を20項まで行うプログラム」 だとは思えないんですが、認識の違いというものでしょうか(笑)
つーかさ、double 程度の精度で第20項まで計算しても意味ないような気がするんだけどなあ。
UTF8フラグのわなに引っかかった予感
・Firefox3
メモリの使用量が減っているというのは本当みたいですね。
fx2のときには数時間使っていると「仮想メモリの割り当てが足りなくなったので~」みたいな
メッセージがでたりしたんですが、少なくとも今日のところは出てないです。
開いているタブの数はむしろ増えているはず(笑)
32nd Diary(2008-07-02) # 07-02 15:52 > そいや、pugsってGHC6.8.2じゃ動かなくなってるのよね。
以前チャレンジして実行ファイルができないって書いたときは6.8.2でやってたな。確か。 あーでも6.8.1でも試さなかったか? ってまあいいや(笑)
BosIT ≫ Blog Archive ≫ GPL’d Java vs. Gosling Emacs GPL化されたJavaとGosling Emacs A nice comment on a slashdot story reporting on made advances in opening up Java taught me a few nice trivias on the history between Richard Stallman and James Gosling in the early days: slashdot での Javaのオープン化の促進についてのストーリーについたnice なコメントは Richard Stallman と James Gosling の間の昔話を思い出させたのです。 “In the early years (1984 to 1988), the GNU Project did not have a single license to cover all its software. What led Stallman to the creation of this copyleft license was his experience with James Gosling, creator of NeWs and the Java programming language, and UniPress, over Emacs. While Stallman created the first Emacs in 1975, Gosling wrote the first C-based Emacs (Gosling Emacs) running on Unix in 1982. Gosling initally allowed free distribution of the Gosling Emacs source code, which Stallman used in early 1985 in the first version (15.34) of GNU Emacs. Gosling later sold rights to Gosling Emacs to UniPress, and Gosling Emacs became UniPress Emacs. UniPress threatened Stallman to stop distributing the Gosling source code, and Stallman was forced to comply. He later replace these parts with his own code. (Emacs version 16.56). (See the Emacs Timeline) To prevent free code from being proprietarized in this manner in the future, Stallman invented the GPL.” 初期(1984年から1988年)においては、GNUプロジェクトはすべてのソフトウェアをカバーする 単一ライセンスを持っていませんでした。Stallmanがこのcopyleftライセンスを作るに到った 理由は、NeWsとプログラミング言語 Javaの作者であり、UniPressやさらにはEmacsも作った Jemes Gosling とのあいだの経験によるのです。Stallmanは最初のEmacsを1975年に書いたのですが GoslingはUnix上で動作する最初のCベースのEmacs(Gosling Emacs)を1982年に書いています。 Goslingは当初はそのGosling Emacsのソースコードの自由な配布を認めていたので、Stallmanは 1985年の初めには GNU Emacs の最初のバージョン(15.34)でそのコードを使っていたのです。 Goslingはその後Gosling Emacsの権利を UniPressに売ってしまったのでGosling Emacsは UniPress Emacs となりました。UniPress はStallmanに対して Gosling のソースコードの 配布を止めるように警告してきて、Stallmanはそれに従わざるを得なくなったのです。Stallmanは 後にGoling Emacsから持ってきたコードを自分で書いたものに置き換えました (Emacs の バージョン 16.56です)。(Emacs のTimelineを見てください)このようなことがその後に発生しない ようにして独占から自由なコードを守るために Stallman はGPL を発明したのです Nice to see how (as the comment author puts it) ‘Richard was right.’ The rest of the comment ( & story) is equally worth a read. Long live the GPL & Java! & so many others :)
Thomas Lee » Ruby Releases Are Scary (Or: How CI Can Save Your Ass) Ruby Releases Are Scary (Or: How CI Can Save Your Ass) Rubyのリリースはおっそろしい代物だ Published by tom on July 4, 2008 02:10 am under Compilers, Ruby, Software Development In many open source software projects, full backwards compatibility is ensured between minor point releases (for example, 1.2.3 to 1.2.4). Generally speaking, these releases are made mostly to get important defect and/or security fixes to the public in a relatively timely manner. PHP is a notable exception to the rule: I haven’t been following development all that closely of late, but in the past it was not uncommon to break backwards compatibility between point releases. 多くのオープンソースソフトウェアプロジェクトでは、 マイナーポイントだけが異なるリリース(たとえば 1.2.3から1.2.4のようなもの)では 完全な後方互換を保証しています。 一般的にいって、このようなリリースは重要なセキュリティフィックスのようなものを できるだけタイムリーに行ったものを公にするためのものです。 PHPは、このルールの非常に目立つ例外です。 わたしは開発におけるすべてに密着していて追いかけていたわけではありませんが、 過去においてはマイナーポイント間のリリースで後方互換を破ることがよくありました。 Another major exception to the rule that hits a little closer to home is Ruby. In the past, backwards-incompatible changes have crept into point release changes — I’m uncertain as to whether or not this was intentional. However, the Ruby project also provides what’s known as a “patchlevel” release for each given point release. The patchlevel counts the number of patches applied to any given point release. Generally speaking, these seem to be bug and security fixes. このルールの例外のもう一つの巨頭がRubyです。 過去において、後方互換を破るような変更がマイナーポイント間でのリリースの違いでも 入り込んだことがありました。 それが故意によるものなのかそうでないのかはわたしにはわかりません。 しかし、Rubyプロジェクトは“パッチレベル”として知られている マイナーポイント間でのリリースの間でのpointも提供しているのです。 パッチレベルのカウントはその時点までに適用されたパッチの数を反映したものになっています。 一般的にはこれはバグ修正やセキュリティ修正でしょう。 If you’re interested, the patchlevel release of your Ruby installation can be seen like so: もし興味があるのなら、次のようにしてあなたの使っているRubyのリリースでの パッチレベルを確かめることができます。 [ tom ] ~ $ ruby –version ruby 1.8.x (YYYY-MM-DD patchlevel XXX) [i486-linux] Anyway, over the past few days I’ve been watching the discussion leading up to patchlevel releases of Ruby 1.8.6 and 1.8.7. It’s been an interesting experience. You can follow the discussion from message #17499 here. いずれにしろここ数日で、わたしはRuby1.8.6と1.8.7のパッチレベルリリースに関する ディスカッションを注視していました。それは非常に興味深い経験でした。 どのようなディスカッションが行われたかは #17499 のメッセージから追いかけることができます。 First there is an announcement that new versions of Ruby will drop in three days’ time. Shortly after this, the announcement that both versions are failing numerous rubyspecs (57 failing for 1.8.7!). Then a report that memory leaks may be present in both versions, followed by a report that one of the tests hang in Win32. Eventually a request to delay the release came through, along with a recommendation by Charles Nutter (the guy who brought us JRuby) to implement continuous integration. 最初にRubyの新しいバージョンでは will drop in three days’time であろうという アナウンスがなされました。その少しあとで、両方のバージョン(1.8.6と1.8.7)で rubyspecs のテストの多くに失敗するという報告がありました(1.8.7では57個も失敗します!)。 その後、やはり両方のバージョンでメモリーリークが発生する可能性があるという レポートがありました。続いて Win32環境でテスト項目の一つでハングアップするという レポートがあがってきました。また、リリースを遅らせようという要請がありました。 Charles Nutter (JRubyをわたしたちにもたらした御仁です)は implement continuous integration のためにそうしようと提案しています。 I’m really surprised at a few things: わたしが本当にびっくりしたのは以下のようなことです: * The original decision to make a release was based upon “I think current 1.8.6/1.8.7 is [more] stable than p230/p22″. Please, please tell me that the decision that the trunk is more stable than a previous release wasn’t based on a gut feeling. Please. リリースを行うという大本の意思決定が、“わたしは現状の 1.8.6と1.8.7 がそれぞれp230 やp22[よりも]安定していると思う”というものに始まっているということ。 どうか、どうかお願いですから、そのような、前回のリリースよりも trunk の方が より安定しているという gut feeling に基づく意思決定をわたしに見せないでください。 お願いです。 * No continuous integration. It’s very important for software projects to maintain and continuously run a set of regression test. Otherwise, sooner or later they will break their users’ code. continuous integration (継続した統合?) が存在していません。 それはソフトウェアプロジェクトがメンテナンスや退行テストを実行するのに非常に 重要なものです。もしそれが欠けているのであれば、遅かれ早かれユーザーの書いたコード を動かなくしてしまうことになるでしょう。 Ruby is a great language and I applaud the work of the developers — maintaining a beast like the Ruby core for naught but love must be hard work. However, I have to say that I think their fumbling to get a stable release out the door on short notice — especially in the face of their recent security problems — is a concern for anybody relying on the Ruby code base. All that said, it sounds like the project is already taking steps in the right direction based on an earlier email to the list from Matz. Rubyはすばらしい言語であり、わたしは開発者の方々の働きに賞賛の拍手を惜しみません。 Rubyコアのような beast を保守し続けるということは得るところがなく それでいてハードな作業を喜んでしなければならないのですから。 しかしながらわたしはこう云わざるを得ないのです。 安定リリースを得るために彼らは手探りでコードをいじくりまわしているように思えると。 特に、最近のセキュリティに関係する問題に直面したときはそうです。 is a concern for anybody relying on the Ruby code base. All that said, it sounds like the project is already taking steps in the right direction based on an earlier email to the list from Matz. #Matzからメーリングリストへ投函されたemailによって、プロジェクトは正しい方向へと #歩みを進め始めたように感じられませす。 One day in the near future I’m sure that cutting a Ruby release won’t be quite so painful, but the lesson here is clear: Exercise your tests frequently — and ideally, automatically — or getting a stable release out the door might be nigh on impossible. 近い将来に行われるだろう Rubyのリリースの cutting が痛みがほとんどないものにはならないだろうと わたしは確信しています。しかしやっておくべきことは明快です。 テストを頻繁に行いなさい。できれば自動的にそれを行うのが理想的です。 そうでなければ、安定リリースを手に入れることは不可能なことでしょう。
『阪神ファンはいつまでも勝てるはずはない』だって? でも、『広島からいつでもFAで良い選手が取れると思ってる』とは思ってるだろ。 山田は資本主義を上手く生かしている金余り阪神のなんでファンなんだろ? 思想的には広島かパリーグ(ソフトバンク除く)ファンっぽいのにな。 ま、一貫してない人だから、そんなところはどーでもいいか
2ちゃん某スレより。 カープの立場ってば…
レジストリに情報もってたんだ…
「スカイ・クロラ ~the sky crawler~」ジャパンプレミア舞台挨拶フォトレビュー - GIGAZINE 押井監督が来ていたのは作中で主人公らが所属するロストック社のジャケット。暑かったそうで、 すぐに脱いでしまいました。そのうちグッズ販売されるとか。
Win32のAPI でユーザのグループとユーザを作成方法 -OKWave Win32のAPI でユーザのグループとユーザを作成方法 Win32に提供されているAPIを使って、Windows Xp 上でつくりたいグループとユーザを作りたいですが、 作りかたはよくわからないですが、 サンプルも見つからないですので、 作り方は教えていただけませんか?NetUser*****、NetLocal***** といったAPIを使ってできると思います。返答ありがとうございました。 使うAPIがわかっています。どうやって実装するのがわからないです。 具体的なソースコードがありますでしょうか? > 使うAPIがわかっています。どうやって実装するのがわからないです。 APIがわかってるということは、例えばNetUserAddのヘルプとかは読まれているんですよね...
シンプレックス法のプログラム(C言語)を教えてください。 (練習問題の答え合わ... - Yahoo!知恵袋 シンプレックス法のプログラム(C言語)を教えてください。 (練習問題の答え合わせをしたいため・・・)
about:cmlenz - The Truth About Unicode In Python The Truth About Unicode In Python July 3, 2008 10:13 AM The unicode support in Python is generally considered to be pretty good. And in comparison to many other languages, it's good indeed. PythonにおけるUnicodeのサポートは、概ね良いものであるとみなすことができるでしょう。 他の言語と比べてみても、良いものであると考えられます。 But compared to what is provided by the International Components for Unicode (ICU) project, there's also a lot missing, including collation, special case conversions, regular expressions, text segmentation, and bidirectional text handling. Not to mention extensive support for locale-specific formatting of dates and numbers and time calculations with different calendars. しかしながら、ICU (International Components for Unicode) プロジェクトによって 提供されているものと比べてみた場合、Python側に欠けているものがたくさんあります。 たとえば collation であり、特殊な case conversion であり、正規表現や テキストの segmentation、bidirectional なテキストの取り扱いなどがそうです。 ここではサポートするのに非常に手間のかかる日付や数値のロカール固有の書式や 異なるカレンダーを使用しているもの同士での時間の計算には言及しません。 Basically what Python does provide out of the box is “only” encoding/decoding, normalization, and some other bits such as simple case conversion and splitting on whitespace. It's the absolute minimum you need to do anything useful with unicode, but often not enough to build truly internationalized applications. (Fortunately, most applications get away without true internationalization.) 基本的に、Pythonが提供している out of the box は encodingとdecoding 、 normalization, とcase conversionや空白による分割のような ちょっとしたもの“だけ”です。 これはあなたがUnicodeのもとで何かをしようというときに必要とするであろう 最低限のものであって、本当のi18nされたアプリケーションを構築するには とても十分とはいえないものなのです。 (幸運にもほとんどのアプリケーションは本当の i18n なしでもなんとかなります)。 In this post, I'm going to talk about a couple of the problems with unicode in Python. Please note that this is not intended as a criticism of Python's unicode support or the people who designed and implemented it. Most of those people probably know a whole lot more about unicode than I do, and the limitations discussed here are the result of a pragmatic approach to implementing unicode support, rather than due to a lack of knowledge. 今回のこのpostでは、PythonでUnicodeを扱うときの問題の幾つかについて述べたいと思います。 PythonのUnicodeサポートの出来や仕様だとか、その設計や実装に関わった人たちに ケチをつける意図は全くないということを念頭においてください。 実際に関わった人たちはわたしよりもずっとUnicodeについての知識を持っている方が 大半でしょう。また、ここで述べる制限というものはUnicodeのサポート実装するときにとった 現実的なアプローチに起因するものであって、実装に携わった人たちが知識に欠けていたからだ ということでは決してありません。
全部はちと間に合わなかったので前文だけ。
・botとか。 jijixiさんの嘆き(怒り?)の書き込みを見てふと思い出したのですが、 Yahoo!の検索bot。律儀に? 毎日毎日ここにおいてあるgawkやらsedやらのzipアーカイブを 拾っていくのはなんのためなんでしょうか? 今年の1月1日から今日までの記録からYahoo! の botらしきものをカウントすると273個ありました。 ご苦労なこった(笑)
・世界が認めるアニメ監督 押井守 代表作はマトリックスw
・Firefox3 あれ。しばらく2と共存させるつもりだったのに上書きインストールしてる。 まあいいや強制移行だ(笑) とりあえずアドオンで最低限必要なところだけ入れてみる。 All in Gesture, CopyURL+, bbs2chreader, All in Sidebar, NoScript, QuickNote, ScrapBook, Sage … こんなもんか?
昨日の続き。 Programmer Competency Matrix
レベル1 コンピュータサイエンスに関して ・データ構造 Able to explain and use Arrays, LinkedLists, Dictionaries etc in practical programming tasks 配列やリンクつきリスト、辞書などを説明することができ、 実践的なプログラミングタスクで使うことができる。 ・アルゴリズム Basic sorting, searching and data structure traversal and retrieval algorithms 基本的なソートや検索、データ構造の traversal や retrieval アルゴリズムを理解している ・システムプログラミング Basic understanding of compilers, linker and interpreters. Understands what assembly code is and how things work at the hardware level. Some knowledge of virtual memory and paging. コンパイラやリンカ、インタープリタの基本的なところを理解している。 アセンブリ言語で書かれたコードがどういったもので、ハードウェアレベルでどのように 動作するかを理解している。仮想記憶やページングについての多少の知識。 ソフトウェアエンジニアリングについて ・ソースコードのバージョン管理 VSS and beginning CVS/SVN user VSSや使いはじめのCVS/SVN ・ビルドの自動化 Knows how to build the system from the command line コマンドラインからのビルドシステムの使い方を知っている ・テストの自動化 Has written automated unit tests and comes up with good unit test cases for the code that is being written 自動化されたユニットテストを書き、 プログラミング ・問題の decomposition Able to break up problem into multiple functions 問題を複数の機能に分割することができる ・system decomposition Able to break up problem space and design solution as long as it is within the same platform/technology 問題空間を分割することができ、その問題が生じているのと同じプラットフォームや 技術を用いて解決策を構想することができる。 ・code organization within a file Methods are grouped logically or by accessibility ・code organization across files Related files are grouped into a folder 関係するファイルが一つのフォルダにまとめられている ・コミュニケーション Peers can understand what is being said. Good spelling and grammar. 言っていることを同僚が理解できる。 スペリングや文法は良い。 ・ソースツリーの構造 Methods are grouped logically or by accessibility メソッドは論理的、もしくはアクセス性の観点からグループ分けされている。 ・コードのリーダビリティ Good names for files, variables classes, methods etc. ファイルや変数、クラス、メソッドなどに良い名前を付けられる。 ・防衛プログラミング Checks all arguments and asserts critical assumptions in code すべての引数を検査し、重要なものに関しては assert を使う。 ・エラーハンドリング Basic error handling around code that can throw exceptions/generate errors 例外を投げたりエラーを生成する可能性のあるコードの周りでの 基本的なエラーハンドリング。 ・IDE Knows their way around the interface, able to effectively use the IDE using menus. ・API Has the most frequently used APIs in memory 頻繁に使うAPIは覚えている ・フレームワーク Has heard about but not used the popular frameworks available for the platform. フレームワークという言葉を聞いたことはあるが 使用しているプラットフォームで利用可能なフレームワークを使ってはいない ・requirements Come up with questions regarding missed cases in the spec ・スクリプティング Batch files/shell scripts バッチファイルやシェルスクリプト ・データベース Knows basic database concepts, normalization, ACID, transactions and can write simple selects 正規化、ACID、トランザクション といったデータベースの基本的なコンセプトを知っていて、 単純な select を書くことができる。 経験 ・仕事で使った言語 Imperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types ・仕事で使ったプラットフォーム 2~3 ・業務経験年数 2~5年 ・domain knowledge Has worked on at least one product in the domain. 知識 ・ツールに関する知識 Knows about some alternatives to popular and standard tools. 広く使われていたり標準的なツールについて幾つかの代替物を知っている。 ・言語 Imperative, Object-Oriented and declarative (SQL), added bonus if they understand static vs dynamic typing, weak vs strong typing and static inferred types 命令型、オブジェクト指向型、宣言型(SQL)。 静的な型付けと動的な型付けや強い型付け、静的なインターフェース型を理解していたらボーナスを追加。 ・コードベースの知識 Basic knowledge of the code layout and how to build the system コード例合うのと基本的な知識があり、 システムのビルド方法を知っている。 ・upcoming technologies に関する知識 Has heard of upcoming technologies in the field ・プラットフォームの内部 Has basic knowledge of how the platform works internally 使っているプラットフォームが内部的にどのように動作しているかの基本的なところを 知っている。 ・書籍 Code Complete, Don't Make me Think, Mastering Regular Expressions コードコンプリート![]()
Don't Make me Think
詳説正規表現
・ブログ Reads tech/programming/software engineering blogs and listens to podcasts regularly. 技術的なもの、プログラミングに関するもの、ソフトウェアエンジニアリングに関するもの といったブログを読んでいる。 日常的に(そういった分野の)ポッドキャストも聞いている。
Rubyについて Part 31 806 デフォルトの名無しさん [sage] Date:2008/07/02(水) 21:40:20 ID: Be: セキュリティフィクスのあたった ruby-1.8.6-p230 で Rails が動かなくなって10日以上たつのに、 いったいいつになったら修正版が出るんだ? 大体、メンテナンスリリースで非互換になるような修正が 入るって、どんなリリースエンジニアリングしてるんだろ? 807 デフォルトの名無しさん [sage] Date:2008/07/02(水) 21:56:33 ID: Be: セキュリティ上の修正なのなら、文句はRuby本体ではなくRailsに言うべきなのではないかと… あーでもどうだろう 808 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:05:53 ID: Be: >>806 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/35236 809 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:12:58 ID: Be: >>807 修正ミスってSEGVが発生してるんじゃねーの? 810 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:16:44 ID: Be: You security people are insane. -- Linus Torlvalds 811 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:17:42 ID: Be: Ruby本体側の修正が妥当なのなら、Railsが折れてフォローアップすべきだと思える 新機能つけてみました系ならともかく、一応セキュリティ修正だろ 812 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:19:31 ID: Be: 妥当じゃねーよ。ただのバグ。 813 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:24:08 ID: Be: え、具体的にどのへんが原因で? 814 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:24:24 ID: Be: >>808 なんかもう、phpにwebアプリ舐めるなとか言ってたmatzに対して アプリ舐めるなって言いたい気分だ マシなサンドボックス提案でも出してからほざけよ クズ挙動はクズ挙動、広く周知してなんぼ 815 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:35:00 ID: Be: >>813 セキュリティーフィックスといいつつパッチが100以上あたっているからわからないwww 816 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:35:22 ID: Be: このへんのやりとりも、なんかのんきだよなあ。 http://www.nabble.com/-ruby-dev%3A35247--Re%3A--ruby-list%3A45128--Re%3A-Ruby-1.9.0-1.8.7-1.8.6-1.8.5-new-releases-(Security-Fix)-td18129547.html 817 デフォルトの名無しさん [sage] Date:2008/07/02(水) 23:20:05 ID: Be: 海外のブログで「Rubyの脆弱性への対処は大失敗だ」とか言われてるな 818 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:48:48 ID: Be: 1.8じゃ根本解決無理の流れだな 819 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:56:40 ID: Be: Railsの行儀が悪すぎなんだろ。ActiveSupport(笑) 820 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:59:03 ID: Be: あれか。ひさしを貸して母屋をとられるというw
推薦図書/必読書のためのスレッド 40 876 デフォルトの名無しさん [sage] Date:2008/07/02(水) 04:31:01 ID: Be: C++を勉強/授業で教えるなら 禿げ本の The C++ Programming Language 3rd ed. 以外ないだろ 877 デフォルトの名無しさん [sage] Date:2008/07/02(水) 06:22:34 ID: Be: OOPを理解するとC言語と比べてどんな利点があるんだろ? そういう例が載ってる教科書プリーズ 878 デフォルトの名無しさん [sage] Date:2008/07/02(水) 06:39:25 ID: Be: >>876 アスキーの第3版は誤植が多すぎで使えないw 有害図書そのもの 879 デフォルトの名無しさん [sage] Date:2008/07/02(水) 07:02:50 ID: Be: Programming: Principles and Practice Using C++ by Bjarne Stroustrup 2008 November 事実上の第4版が出版予定になってる。 880 デフォルトの名無しさん [sage] Date:2008/07/02(水) 07:08:13 ID: Be: >>877 >>855先生に書いてプリーズと依頼汁 881 デフォルトの名無しさん [sage] Date:2008/07/02(水) 07:09:36 ID: Be: 全然別の本だぞ。 882 デフォルトの名無しさん [sage] Date:2008/07/02(水) 14:31:22 ID: Be: うっかり豊田孝の本を読んでしまったが、この人の変な思い込みが臭ってきそうな美文調は ちょっと耐え難いね。 883 デフォルトの名無しさん [sage] Date:2008/07/02(水) 16:34:34 ID: Be: 俺も生理的に駄目だわ>豊田孝 Microsoft Pressの良書にかかわるのも正直やめて欲しいんだよなぁ 884 デフォルトの名無しさん [sage] Date:2008/07/02(水) 18:13:21 ID: Be: >>879 これはどういう内容の本なの? 885 デフォルトの名無しさん [sage] Date:2008/07/02(水) 18:23:59 ID: Be: ttp://www.research.att.com/~bs/programming.html 886 デフォルトの名無しさん [sage] Date:2008/07/02(水) 19:08:21 ID: Be: >>884 プログラミング経験の無い人向け入門用テキストラスイ 887 デフォルトの名無しさん [sage] Date:2008/07/02(水) 19:10:02 ID: Be: >>879のテキストとは別に第4版も出版予定があるようですね。 888 デフォルトの名無しさん [] Date:2008/07/02(水) 22:18:59 ID: Be: >>886 禿げ先生、自分の講義テキストを公開するのか どんな風に学生に教えているんだろ 889 デフォルトの名無しさん [sage] Date:2008/07/02(水) 23:50:28 ID: Be: C言語撃退講座 K&Rは置いて、俺の話を聞け 刺激的なタイトル。 890 デフォルトの名無しさん [sage] Date:2008/07/02(水) 23:57:19 ID: Be: 画像の縮小アルゴリズムである”平均画素法”について詳しく書いてある書籍はありませんか。もしくはサイトはありませんか。 891 デフォルトの名無しさん [sage] Date:2008/07/02(水) 23:57:44 ID: Be: >>889 本当にあって噴いた。 http://www.amazon.co.jp/dp/477413533X 技術評論者の人間にこんな本出して大丈夫かと小一時間問い詰めたい(ry 892 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:05:38 ID: Be: 明日本屋で探してみようっと。 893 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:15:05 ID: Be: 「子供たちも、目をきらきらさせて聞いてくれました、至福の時間でした」と言っちゃう >>855を本の表紙のような丸岡孝司先生と思っていいですか? 894 デフォルトの名無しさん [sage] Date:2008/07/03(木) 00:32:05 ID: Be: 俺の話を聞けー 五分だけでいいからー 895 デフォルトの名無しさん [sage] Date:2008/07/03(木) 04:39:20 ID: Be: C#のは話は面白かったが、内容が微妙だった。 こっちの方は買うかな。 896 デフォルトの名無しさん [sage] Date:2008/07/03(木) 22:32:58 ID: Be: 昨日発売かよw
関数型プログラミング言語Haskell Part9 309 デフォルトの名無しさん [sage] Date:2008/07/01(火) 18:44:49 ID: Be: Real World Haskell http://www.amazon.co.jp/Real-World-Haskell-Bryan-OSullivan/dp/0596514980/ > This easy-to-use, fast-moving tutorial introduces you to functional > programming with Haskell. Learn how to use Haskell in a variety of > practical ways, whether it's for short, script-like programs or large > and demanding applications. 310 デフォルトの名無しさん [sage] Date:2008/07/02(水) 02:44:41 ID: Be: 中身読めるよ http://book.realworldhaskell.org/beta/ 表紙が決まったんだね。ヘラクレスオオカブト? 311 デフォルトの名無しさん [sage] Date:2008/07/02(水) 03:40:51 ID: Be: 後の兜本である。 312 デフォルトの名無しさん [sage] Date:2008/07/02(水) 22:40:44 ID: Be: オライリーからHaskellの本が出るなんてありえない。 そう思っていた時期が僕にもありました 313 デフォルトの名無しさん [sage] Date:2008/07/02(水) 23:40:42 ID: Be: 2008/09 ちょおまw
わははは、ベイスターズファンでもわからないヤツ多いんじゃないか?w
CLIS 0.9.0 Released - PLNews: Programming Language News CLIS 0.9.0 Released Posted: 2008-07-02 06:10:52 Languages :: C C Like Interpreted Script 0.9.0 has been released. It is an interpreted, C-like programming language.
Tcl/Tk 8.5.3 Released - PLNews: Programming Language News Tcl/Tk 8.5.3 Released Posted: 2008-07-02 06:12:15 Languages :: Tcl Tcl/Tk 8.5.3 has been released. Tcl is a dynamic, cross-platform scripting language. This release includes: improved DTrace support on Solaris, bug fixes, and other changes.
Smalltalk Solutions 2008 Slides Available - PLNews: Programming Language News Smalltalk Solutions 2008 Slides Available Posted: 2008-07-02 06:14:47 Conferences Languages :: Smalltalk It has been announced that slides are now available for most of the presentations of Smalltalk Solutions 2008.
Tcl/Tkのこのペースは本当にどうしたんでしょうか。
・PSでもメガドラでもなんでも「ファミコン」と呼ぶではないですが、 OpenOffice.org の Calcをとっつかまえて 「おーぷんおふぃすのえくせる」という表現にはへーと感心することしきり。 表計算ソフト == Excel なのね。 幸か不幸かWordはそこまでいってないみたいだけど(笑) パワポはびみょー? あーでもプロジェクタをパワーポイントと呼ぶ人たちもいるみたいなので それなりに知名度はあるのかな?
・~の~の のような「の」の連続はまあ(状況と程度にもよるが)許そう。 んが、~で~で みたいな「で」の連続した文を書くな。 頭悪そうに見えるぞ。
昨日はRubyistは(OCaml|Python)もやっとけという話でしたが今日は逆方向で。
JBoss.ORG Feeds Java developers should learn Ruby JavaデベロッパーはRubyを学ぶべきだ Okay, it doesn't have to be Ruby. Pick some other language. Pick Erlang, or even JavaScript. It doesn't matter really matter, as long as it's different enough from Java that it actually requires some effort, and that you keep your mind open to new things. うん、まあRubyでなければならないということでもないのだけどね。他の言語を取り上げてもいい。 ErlangとかJavaScriptとか。どの言語なのかということが重要なのではなくて、その言語がJavaと十分 “違っている”言語だということが重要なんだ。つまり、その言語を使ってみるのにちょっとばかし労力が必要ってこと。 そしてもう一つ、キミが新しい何かに対してオープンな態度でありつづけること (keep your mind open to new things)。 Why bother? Because learning other languages will make you a better Java developer. Seriously. 何でそんなに口やかましくいうのかって? それは、別の言語を学ぶということで、キミがより優れたJavaデベロッパーになるからなんだ。 本当に。 Learning another language forces you to dive into a different community. You'll find different ideas and different approaches to many of the same problems. They may not be better ideas and approaches, just different. Other communities often have a fresh perspective on similar problems. And sometimes it will even make you appreciate what we really do have in the Java community (like a huge number of really great libraries). 別の言語を学ぶことを強制させるにはキミを異なるコミュニティに放り込めばいい。 キミはそこで異なる考え方や同じ問題を解決する多くの異なったやり方を知ることになるだろう。 そのコミュニティの人たちはひょっとしたら優れた考え方ややり方を持っていない、 単にJavaコミュニティとは異なる人たちなだけかもしれない。 自分が属する以外のコミュニティというものは 同じ問題に対して新鮮な視点というものを持っていることがしばしばある。 時にはそれはわたしたちがJavaコミュニティでやっているよりことよりも キミが正確に認識できるものなこともあるだろう。 Learning another language can teach you new idioms. Some you may be able to use in Java, and others you won't. Ruby blocks, for example, are Ruby's form of closures and are widely used in most Ruby programs. They're extremely useful for running predefined code that delegates (perhaps repeatedly) to the block for custom behavior. Here's a simple example of iterating over an array and doing some custom behavior (printing the element): もう一つの言語を学ぶことで新しいイディオムを知ることができるかもしれない。 キミたちがJavaで使うことのできるイディオムもあるし、そうでないものもある。 たとえばRubyのブロックだ。これはRubyにおけるクロージャであり、Rubyプログラムでは広く使われている。 あらかじめ定義されているコードを実行するときにちょっとそのコードの振る舞いをカスタマイズするために ブロックに(たぶん繰り返して)delegate するのはとても使いやすい。 配列をざっと舐めていってそこでカスタマイズされた動作をするような (ここでは要素を出力する)ちょっと簡単な例を挙げてみよう。 animals = ['lion','tiger', 'bear'] animals.each {|animal| puts animal } Unfortunately, Java doesn't have closures. Not really. The closest thing in Java 6 is to pass an anonymous inner class in much the same way that listeners are often used in GUI applications. All we need is a predefined interface and a method on a class that accepts the implementation and that performs the iteration (like the "each" method in Ruby). So pretend that java.util.List has an "each" method that takes an implementation of an OnEach: 残念なことにJavaにはクロージャがない。少なくともそのものずばりというものではない。 Java 6で一番近いものが、GUIアプリケーションで多用されている リスナーとほとんど同じやり方で無名のインナークラスを渡すというものだ。 わたしたちが必要としていてそれがあればいいというものは 事前に定義されているインターフェースと イテレーションを実行するクラスに属しそこで実装されているメソッド (Rubyでいうところの each のようなもの)である。 そこで、java.util.List がOnEach を使って実装した“each”メソッドを持つようにしてみる。 public interface OnEach<T> { void run(T obj); } public interface List<T> ... { void each( OnEach<T> action ); } Then our example would look something like this: そうするとさっきのRubyでの例を次のように書き換えることができる: List<String> animals = Arrays.asList( new String[]{"lion", "tiger", "bear"} ); animals.each( new OnEach<String>() { public void run( String animal ) { System.out.println(animal); } }); Kinda gross, huh? But even though it's not as easily done, it's a pattern that you can use in your designs to allow custom behaviors without requiring subclasses. There are several closure proposals for Java 7, but none are as easy as in Ruby or JavaScript. By the way, Alex has the best resource for all things Java 7. Kinda gross, huh? お手軽に、というわけには行かないだろうけどサブクラスを要求せずとも振る舞いをカスタマイズ することができるデザインが使えるパターンだ。 Java 7ではいくつかのクロージャが提案されているけれども、 それはまだ RubyやJavaScriptのようにお手軽に使えるものでもない。 Learning another language also forces you to use different tools and processes. One example in Ruby is RSpec, which is a Behavior Driven Development framework focused on specifying and verifying behaviors. BDD is a rich topic that I'll explore in another post. もう一つの言語を学ぶことはまた、あなたに異なるツールを使うことや異なるやり方をすることを強制する。 Rubyでの一つの例がRSpecで、これは振る舞い(behavior)を specify したり verify することに 焦点を置いたBehavior Drive Development (BDD) フレームワークである。 BDD は rich topic なので別にまとめて投稿することにしよう。 Another example is autotest, a great little tool from ZenTest that takes continuous integration to a whole new level. It works on your local machine (rather than a remote continuous integration server), and it simply monitors your development environment's file system for changes to source files and runs the unit tests corresponding to any changed file(s). If those tests pass, then it runs all of the tests. It's simple, elegant, and allows you to focus on changing the code, yet still get feedback from your tests. It's like JUnit or TestNG Eclipse plugins that automatically run your unit tests as you work on the code. もう一つの例は autotestで、これはZenTest由来の 新しいレベル全体のために cotinuous integration (継続した集積?) をするgreat little tool (小規模だけど優れたツール?)だ。 これはキミのローカルマシン(remote continuous integration serverではない)で動き、 キミの開発環境でのソースを変更するためのファイルシステムを監視していて 変更されたファイルに対応するユニットテストを実行する。 そのテストにパスしたら今度はすべてのテストを実行する。 これは単純であり、エレガントで、キミがコードの変更に集中できるようにしてくれる。 テストからのフィードバックもちゃんと受け取れる。 これはJUnit や TestNG Eclipse プラグイン のような自動的にキミのユニットテストを (as you work on the code に) 実行してくれるものだ。 The bottom line is that the Java community doesn't have the market cornered on good ideas. Java is great and will continue to be, but it does need to evolve. Java first appeared over 13 years ago, and some of us have been developing primarily in Java for most of that time. Go exploring, and I'll bet you'll become a better Java developer for it. The bottom line is that the Java community doesn't have the market cornered on good ideas. (えーと? Javaコミュニティは良いアイデアに基づく市場を持っていないか?) Javaは偉大であり将来もそうありつづけるだろうけど、進化する必要がある。 Java登場以来13年を過ぎ、わたし達の中には開発に費やすほとんどの時間をJavaに向けている者もいる。 冒険の旅に出よう。わたしはそうすることでキミがより良いJava 開発者になると思っている。 Have you changed how you develop Java after learning another language? もう一つの言語を学んだ後で、キミのJava開発のやり方は変わりましたか?
でっかいディスプレイが欲しくなりましたまる
レベル0の項目だけ抜き出してみました。
コンピュータサイエンスに関して
・データ構造
配列とリンク付きリストの違いがわからない
・アルゴリズム
配列に格納されている数値群からその平均を求めることができない
・システムプログラミング
コンパイラ、リンカ、インタプリタを知らない
ソフトウェアエンジニアリングについて
・ソースコードのバージョン管理
日付ごとに分類したフォルダによる
・ビルドの自動化
IDEからのビルドしか知らない
・テストの自動化
テストはすべてテスターの仕事だと考えている
プログラミング
・問題の decomposition
再利用はコピペでノベ単なコード
・system decomposition
単一のファイルやクラスを越えた思考ができない
・コミュニケーション
相手に自分の考えやアイデアを説明することができない
・code organization within a file
no evidence of organization within a file
・code organization across files
No thought given to organizing code across files
・ソースツリーの構造
全部を一つのフォルダに放り込む
・コードのリーダビリティ
Monoスタイルの名前
・防衛プログラミング
その考え方が理解できていない
・エラーハンドリング
幸運な場合しか対処できてない
・IDE
テキスト編集のほとんどでIDEを使う
・API
ドキュメントを頻繁に参照する必要がある
・フレームワーク
コアプラットフォームの外側にあるフレームワークは使ったことがない
・requirements
Takes the given requirements and codes to spec
・スクリプティング
スクリプティングツールに関する知識はない
・データベース
Excelがデータベースだと考えている
経験
・仕事で使った言語
命令型とオブジェクト指向
・仕事で使ったプラットフォーム
一つ
・業務経験
一年
・domain knowledge
なし
知識
・ツールに関する知識
IDEに関して基本的なことを少し(VS.NetやEclipseなど)
・言語
命令型もしくはオブジェクト指向型
・コードベースの知識
コードベースを見たことがない
・upcoming technologies に関する知識
聞いたこともない
・プラットフォームの内部
ぜんぜん知らない
・書籍
Unleashed series, 21 days series, 24 hour series, dummies series…
#日本語書籍だとどの辺でしょうかねえ
・ブログ
ブログというものがあることを聞いたことがあるだけ
「ほかの誰のせいにもできない」Webアプリの脆弱性 - @IT 日本語で「セキュアなプログラミング」認定試験 これを踏まえてSANSは、NRIセキュアテクノロジーズとともに、日本語によるセキュリティに 配慮したプログラミングの知識・スキルの認定試験「GIAC Secure Software Programmer(GSSP)」 を国内で開始することを発表した。GIAC(Global Information Assurance Certificaiton)の1 分野として、セキュアなプログラミング/コーディングに関する知識やスキルを証明する試験と して実施される。初回試験は12月13日を予定しており、受験料は5万7000円。また、それに向け たトレーニング/研修も提供される。 まずC/C++向けとJava向けのテストから実施されるが、追ってC#やVisualBasicといった .NET向けのプログラミング言語も追加される予定だ。さらに、PHPをはじめとするほかの言語に ついても、試験を提供するとしている。
企業向けの値段付けですねい。 これ持ってるプログラマが n人いますとかで売り込むんだろか。
Matasano Chargen » Ruby’s Vulnerability Handling Debacle Ruby's Vulnerability Handling Debacle Rubyの脆弱性対策は××だ A bit over a week has now gone by after critical vulnerabilities in ruby's runtime were announced and a couple of interesting developments occurred: * The new official ruby releases which include patches for the vulnerabilities actually break critical functionality. In fact, some of the most popular ruby frameworks segfault with any of these releases. 脆弱性に対するパッチが加えられた公式の ruby のリリースには致命的な非互換性が あった。事実、もっともポピュラーなruby フレームワークの一部でセグメント違反が パッチ済みリリースで発生していた。 * It turns out that the breakage brought by the new releases is not due to the security fixes for Drew Yao's vulnerabilities, but to other changes that were merged into each release's branch. 非互換性を抱えた新しいリリースにより引き起こされた被害は Drew Yaoの指摘した脆弱性に対するセキュリティフィックスが原因ではなく 別の理由でマージされた修正によるものだった。 * No response or timeline from ruby's maintainers to produce a good release has been made public. ruby のメンテナンスチームからの反応はなく、きちんとしたリリースがいつ公式に 行われるかのtimelineも提示されていない。 * In an attempt to provide a workable middle ground, third-parties create their own patches, and so do distributors. Some start from a patched release and then work back through the changes until tests pass, others take the opposite approach and start with a last “known-good” release against which they apply selected patches to plug the security holes. Needles to say, the results of each approach are not equivalent. workable middle ground を提供しようとして サードパーティが独自のパッチを作成して 配布を行っている。一部にはパッチが行われたリリースから、テストにパスしていた最後の ものまで戻していった者がいたり、あるものは逆に最後の“known-good”なものから始めて 最新のものへ確かめながら進めていった。言うまでもないことだが、その結果はアプローチ ごとに異なるものとなっている。 Developers relying on any of these frameworks are then faced with a difficult choice: wait an indeterminate amount of time for a good release from the official maintainers (and remain vulnerable in the meantime), or apply a patch from a third-party which may not plug all the security holes, or may include unforeseen bugs. This is clearly a problem. In the meantime maintainers have to scramble to get ruby back to a good state that actually plugs the holes while people complain. Everyone loses. これらのフレームワークのいずれかに依存していた開発者たちは難しい選択に直面することになった。 公式のメンテナからのきちんと動くもののリリースがされるまで待ったり (その間は脆弱性を抱えたままだ)、セキュリティホールのすべては埋めていないかもしれないし 予期せぬバグを抱えているかもしれないサードパーティ製のパッチを適用するか。である。 これは明らかに問題である。そうこうしているうちに (acutually plugs the holes while peple complain) rubyを good state な状態に戻すための作業にメンテナー達は取り組まなければならなかった。 誰もが敗者だった。 To some extent this is the other side of security response we sometimes advocate for and now we got a taste of: we want our patches and we want them now! And we got them, but our apps don't work. 付け加えると、これはわたしたちがときに主張し、現在まさに経験している セキュリティレスポンスのもう一つの側面である。 我々は自分たちのためのパッチを今すぐ欲しいんだ! そしてそれを手に入れたと思ったらそれによってアプリが動かなくなってしまった。 The beauty of open-source is not just that we get stuff for free but that we also get a privileged view into the processes around building and maintaining wildly popular software. This is a great opportunity for us as both security and software people to look into why these processes failed and hopefully learn something. Here are my top 3 takeaways: オープンソースの美点とは単にそれが無料で手に入る(自由に?)ということだけではなく、 広くポピュラーなソフトウェアの構築やメンテナンスに関するプロセスを見届ける 権利があるということである。 これはこうしたプロセスがなぜ失敗し何かをそこから学び取りたいと考えている セキュリティやソフトウェアに関係する人たちに対する重要な機会である。 以下にわたしの上位三つの takeway を挙げる: Keep a “last-known-good” branch to apply critical patches to. The fact that patches had to be applied to unreleased versions of the code means that it is impossible to measure the impact of the change. IMHO this is the single most important mistake behind this state of affairs. This is almost akin to not using version control. Security problems will pop up unpredictably outside of any planned release schedule, and often require a rapid response. End-users may not be able to afford upgrading to a release with new features and even bug fixes every time this happens. It is then highly desirable that a new release which only includes the necessary security patches is made available, to minimize the risk of getting pwned by a new bug or some defiant kid. Are you ready to release critical patches to all the deployed versions of your software even as you are working on its next version? 重要なパッチを適用するための“last-known-good”ブランチを保持しておくこと。 パッチはリリースされていないバージョンに対して適用しなければならないものなので 変更による影響をあらかじめ予測することが不可能である。 わたしの考えるところでは、これは state of affairs に隠れている一つの重大な誤りであり、 バージョン管理システムを使っていないのとほとんど変わりないことだ。 セキュリティに絡む問題というものはあらかじめ立てられているリリーススケジュールとは 無関係に浮上してくるものであり、しばしばすばやい反応が要求される。 エンドユーザーは新しい機能が追加されたりリースでアップグレードする余裕がないかもしれないし バグフィックスでさえこのようなことが起こるたびにできないことがあるかもしれない。 Open line of communication with your community. It is hard to believe that passing Rails' tests isn't an acceptance requirement for every Ruby release, since Rails is the driving force behind Ruby's adoption. The success of any platform depends on the applications it supports, without the apps the platform doesn't matter. Microsoft learnt this a long time ago, and that’s why you’ll see them test third-party apps with new releases and security patches, even though technically is not their responsibility. Who are the relevant members of your community? Are you involving them in your release process? あなたの属するコミュニティに対するコミュニケーションラインを開いておくこと。 信じ難いことだが、Rails は Rubyが採用される際の隠れた driving force であるのに Railsのテストは Rubyの毎回のリリースにおける acceptance の必須要件ではないし、 プラットフォーム上のアプリケーション抜きであることも重要でない。 Microsoftはこのことをはるか昔に学習済みである。 そしてそれが新しいリリースやセキュリティパッチつきのサードパーティ製アプリの テストを見ることになる理由である。 あなたの属するコミュニティの誰が重要人物ですか? リリースプロセスにおいて彼らを参加させていますか? Be more open about vulnerability details. When the vulnerabilities were originally announced very few details were made available (CVE entries for the vulns have been updated with more details since then, though there’s still no entry for the Bignum bug). Because ruby is an open-source project anybody can go and access their source control system to figure out what was actually patched. The fact that you can should be no news to readers of this blog, as people have been doing the same with binary patches for quite some time. Having direct access to not only source but the full source control system is a luxury! Given that the official release didn't work it was important to isolate the security fixes, and to easily test if 3rd party patches were effective against the flaws. In fact, one of the test cases showed that the official release missed one of Drew's patches. Lack of details just made it harder for the people trying to help. Do you have a policy about disclosing vulnerability details in your software? Would partners and customers have enough information to evaluate the impact of your patch to their infrastructure? 脆弱性の詳細をもっとオープンにすること。脆弱性が最初にアナウンスされたときには それを再現するための詳細はほとんど明かされていない(CVEのエントリはその後 より詳細な記述が追加されたがそれでもBignumバグに関するエントリはいまだにない)。 rubyはオープンソースプロジェクトであるので誰もがそのソースコード管理システムを使って パッチの詳細を知ることができる。 The fact that you can should be no news to readers of this blog, as people have been doing the same with binary patches for quite some time. ソースコードに対する直接のアクセスだけでなく ソースコード管理システムに対して制限なしにアクセスできることはとても贅沢(luxury)なことだ! 事実、テストケースの一つがオフィシャルリリースにおいて Drewによるパッチの 一つを適用し忘れたということを明らかにした。 詳細が欠けていては人々がそれを助けることを困難にしてしまうだけだ。 あなたは自分のソフトウェアについて、脆弱性の詳細についての開示について 基準となるもの(policy)を持っていますか? あなたのパートナーや顧客は自分たちのインフラに対してあなたが適用しようとしているパッチの 影響の評価について十分な情報を得ていますか? Just yesterday Apple released a security update which includes fixes for the ruby vulnerabilities. The patched build appears to deal correctly with all test cases, including the string concatenation case, and with Rails' tests. The official ruby downloads still have issues with both. つい昨日、Appleはセキュリティアップデートをリリースした。 これにはrubyの脆弱性に対する修正も含まれている。 パッチ済みのビルドはすべてのテストケースで正しく動作していて、 文字列連結のケースもそこに含まれている。そしてRailsのテストでも問題ない。 公式の ruby download は未だにこれら二つの問題共を抱えたままである。
2008-07-02 - 見えない道場本舗-7月17日はブロディ没20年 ちょっと関係あるようなないような話なんですけど、この前「えーとですね。なんか国を擬人化 して、それで近代史になぞった解説をして、それで最近人気があるような漫画があるらしいんで すが…」という非常にあいまいな依頼をした(こういう注文はいけませんが、ほんとにそれしか 当時知識がなかった)ら、0.5秒で「ああ、『ヘタリア』ですね」と即答した池袋のジュンク堂 店員グッジョブ(笑)
何回も訊かれていたとか?
Eee PC対抗のWind Notebook,予約開始も売り切れ店続出:ITpro こいつもですかい。 どんな人たちが争って予約にいってるんだろう?
ソニーなど、高画質で大型化しやすい次世代ディスプレイ「FED」を量産へ - GIGAZINE それはそうと、次世代ディスプレイとして発表されたものの製品化の話が聞こえてこない「SED」 はどうなったのでしょうか…。
えー…
「開発者は数千コアを視野に入れるべき」,Intel開発者がアドバイス:ITpro 数千とか想像できません○| ̄|_
ん? 永ちゃんの「時間よ止まれ」?
数日前にリンクだけ張ったやつですが。
わたしが日常使っているのはEmacsもどき(xyzzy)なのでよくわからんw。 詳しい説明は元ドキュメントを。
Scripting languages spark new programming era | InfoWorld | Analysis | 2008-06-23 | By Paul Krill
The era of scripting languages is opening up programming to the masses and extending the Web as an application platform. スクリプティング言語の時代は大衆のためにプログラミングを解放し、アプリケーション プラットフォームとしてのWebを拡張しました。 Even the traditional Java and Microsoft languages have had to make room for scripting languages, which offer developers a quick way to build Web applications and have gained multitudes of adherents. Indeed, programming technology powerhouses Microsoft and Sun both cite their own accommodations for these languages: Sun has opened up the Java Virtual Machine to support scripting languages, and Microsoft offers .Net-based versions of the Ruby and Python languages. 伝統的なJavaとかMicrosoft製言語でさえも、スクリプティング言語のために道をあける必要が ありました。スクリプティング言語は開発者にWebアプリケーションをすばやく構築する方法を 提案し、支持者が劇的に増えてきています。 プログラミング技術の powerhouses であるMicrosoftやSunはそれぞれが自分たちのやり方で これらスクリプティング言語に適用しようとしています。 SunはJavaのバーチャルマシンをスクリプティング言語のサポートのためにオープンにしましたし、 Micirosoftは .NETベースのRubyやPythonといった言語を提案しています。 [ Read Paul Krill's Q&A with Mozilla's Brendan Eich on the new version of JavaScript, disputes with Microsoft, and the language's path to the present. ] There are numerous scripting languages, also called dynamic languages because they are interpreted and compiled at runtime. But a handful of them come to mind as the most prominent: JavaScript, PHP, Perl, Python, and Ruby. 多くのスクリプティング言語があり、それらは動的言語とも呼ばれています。 それは、スクリプティング言語が実際に実行されるときになってから解釈されたり コンパイルされるからです。しかし、注目されるほどの大きな存在になっているものは 少数にとどまっています。JavaScriptや、PHP、Perl、Python、Rubyといったところがそれです。 Developers overseeing these languages continue to map out improvements, and each cites benefits of their particular platform. Although all the scripting languages are similar, they do have differences in aesthetics and feel, says David Heinemeier Hansson, creator of the Ruby-based Ruby on Rails Web framework. "For certain people, Ruby is just what fits their brain and for other people, Python is just what fits their brain." But the underlying concepts and capabilities are essentially the same. "I think we're all generally in the same boat," he says. Ease of use, flexibility are key drivers The ease of use of scripting languages is a main attraction, says Michael Cote, an analyst at RedMonk. These languages also offer flexibility, he says. "Usually, with the dynamic language, you can change things a lot easier when it's running," Cote says. Additionally, variables do not have to be defined ahead of time, says Andi Gutmans, co-CTO of Zend Technologies and a core developer of PHP. "You can easily concatenate strings with one another," and run an application without having to compile it, he says. "The main difference compared to statically typed languages like C, C++, and Java is their dynamic nature, which is also one of the reasons why many people consider them to be more productive," Gutmans says. Although scripting languages are hardly new, today's powerful computers make them viable platforms, says Joshua McAdams, a representative for the Perl Foundation. "The computers have grown to where they can handle the dynamic languages better," he says. The flexibility of these languages also could be viewed as a strike against them, according to Cote. Scripting languages could be compared to a lawless society while Java would be authoritarian, he says. He also mentioned issues with maturity. "There's not necessarily the tools and practices," associated with the new languages, Cote says. 以下略
頭書きのところ。 続きはやるかもしれないしやらないかもしれない。
と思ったらもう全文訳したものががっ ○| ̄|_
変電工 - Google C++スタイルガイド日本語訳
C++ Style Guide Background C++ is the main development language used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn can make code more bug-prone and harder to read and maintain. C++ はGoogleで行われているオープンソースプロジェクトの多くで主要開発言語として使われています。 C++プログラマが各自知っているように、C++は数多くの強力な機能があります。 しかしその力には複雑さが伴っています。その複雑さは得てしてコードを bug-prone (バグを引き起こしがち?)にしたり、コードを読解することや保守することを 難しくしてしまいがちです。 The goal of this guide is to manage this complexity by describing in detail the dos and don'ts of writing C++ code. These rules exist to keep the code base manageable while still allowing coders to use C++ language features productively. このガイドラインの目的とするところは、この複雑さというものをC++でコードを書くときに 何を行うべきで何を行うべきでないかを詳しく説明することによって制御しようというものです。 ここで挙げるルールは、コーダーがC++の言語機能を生産的に(productively)に使っていれば コードベースを管理可能なものにしつづけるために存在しています。 Style, also known as readability, is what we call the conventions that govern our C++ code. The term Style is a bit of a misnomer, since these conventions cover far more than just source file formatting. スタイルは読みやすさ(readability)としても知られていて、わたし達のC++コードを govern(管理する、統治する)する規約をそのように呼んでいます。 スタイルという言葉には少々誤りがあります(a bit of a misnomer)。 それは、ここで紹介する規約は単にファイルのフォーマットだけをカバーするものではなく もっと広い範囲に適用しているからです。 One way in which we keep the code base manageable is by enforcing consistency. It is very important that any programmer be able to look at another's code and quickly understand it. Maintaining a uniform style and following conventions means that we can more easily use "pattern-matching" to infer what various symbols are and what invariants are true about them. Creating common, required idioms and patterns makes code much easier to understand. In some cases there might be good arguments for changing certain style rules, but we nonetheless keep things as they are in order to preserve consistency. わたし達がコードベースを管理可能なものにし続けるための方法のひとつとして、 一貫性の強制というものがあります。これはすべてのプログラマが自分以外のコードを 読んですぐに理解することが出来るようにするという点で非常に重要です。 統一されたスタイルを保守し、規約に従うということはわたし達が 様々なシンボルが意味するところを推測したり what invariants are true about them. “パターンマッチング”をより容易に使うことができるということを意味します。 共通のものをつくり(creating common)、イディオムとパターンを要求することで コードをより理解しやすくなります。幾つかのケースにおいては特定のスタイル(の規則)を 変えることにも良い理由があるかもしれません。 しかしそうであったとしてもわたし達は一貫性を失わないため規則を遵守します。 Another issue this guide addresses is that of C++ feature bloat. C++ is a huge language with many advanced features. In some cases we constrain, or even ban, use of certain features. We do this to keep code simple and to avoid the various common errors and problems that these features can cause. This guide lists these features and explains why their use is restricted. 本ガイドラインが目的とするもう一つのことがらは、C++ の機能の bloat (機能が膨れ上がること?) についてです。 C++ は巨大ない言語であり先進的な機能がたくさんあります。 ある局面ではわたし達は特定の機能の使用を制限しますし、時には禁止することもあります。 わたし達はコードを単純なものに保ち、そういった先進的な機能が原因となるような ありがちなエラーの数々や問題を排除します。 このガイドラインでは、そのような問題の原因となるような機能を列挙し、 なぜそういったものの使用が制限されなければならないのかを説明します。 Open-source projects developed by Google conform to the requirements in this guide. Googleによって開発されているオープンソースプロジェクトは本ガイドラインイの要求するところに 従っています。 Note that this guide is not a C++ tutorial: we assume that the reader is familiar with the language. 本ガイドラインは C++のチュートリアルではないことに注意してください。 わたし達は読者がC++の経験が(それなりに)あることを仮定しています。
OCamlを学ぶべきだそうです。 jijixiさん。出番だw
redditでのコメント→
reddit.com: Why Rubyists Should Learn OCaml
元ドキュメント(pdf)→
http://www.smokejumperit.com/OCaml_For_RubyMN.pdf
Why Rubyists Should Learn OCaml Presented at Ruby Users of Minnesota, June 2008 by Robert Fischer, Smokejumper ConsultingIt Will Warp Your Brain (And We Like Doing That Kind of Stuff)&OCaml Needs You! . Ruby’s culture of intuitive tooling and intense documentation . Ruby’s culture of pragmatic development . Break OCaml’s performance-obsessed culture and hyperoptimization . OCaml needs people
関連→ reddit.com: Ask Reddit: Is learning Python worthwhile for a rubyist like myself? (redditに訊け! PythonはRubyistであるわたしが学ぶ価値のある言語だろうか?)
reddit.com: Ask Reddit: Is learning Python worthwhile for a rubyist like myself? Ruby is a nice language but the available interpreters are not as solid as Python's. That is why Google and many large companies use Python for various projects. You probably use Ruby because of Rails. Rails has an excellent design and many have copied it in the python world. I think if you take a look at web2py, Django and Turbogears you will be pleasantly surprised.
タイトルとか決まってAmazon.comにデータがあがっているもより。 → Amazon.com: Programming: Principles and Practice Using C++: Bjarne Stroustrup: Books
Amazon.com: Programming: Principles and Practice Using C++: Bjarne Stroustrup: Books Product Details * Paperback: 1040 pages * Publisher: Addison-Wesley Professional; 1 edition (November 17, 2008) * Language: English * ISBN-10: 0321543726 * ISBN-13: 978-0321543721 * Shipping Information: View shipping rates and policies * Amazon.com Sales Rank: #284,913 in Books (See Bestsellers in Books) (Publishers and authors: Improve Your Sales)
ぐはぁ >1000ぺーじ
一つ前へ
2008年7月(下旬)
一つ後へ
2008年7月(中旬)
メールの宛先はこちら