ときどきの雑記帖'

最新ページへのリンク
目次ページへのリンク

一つ前へ 2013年11月(下旬)
一つ後へ 2013年12月(中旬)

ホームへ

2013年12月10日

■_

コルメン本 アルゴリズム・イントロダクション 第3版 総合版 14000円だしページ数が1000超えだしなんじゃそりゃあと思ったら 原著丸ごとなのね。ではこれまでに出た二巻の立場は…

近代科学社

本書は,原著の第1〜35章,および付録A〜Dまでの完訳総合版である.また巻末の索引も圧巻で,和(英)‐英(和)という
構成により,「数理用語辞典」としてもまことに有用である.

アルゴリズムイントロダクション 第3版 総合版
アルゴリズムイントロダクション 第3版 総合版 アルゴリズムイントロダクション 第3版 第1巻: 基礎・ソート・データ構造・数学 (世界標準MIT教科書) アルゴリズムイントロダクション 第3版 第2巻: 高度な設計と解析手法・高度なデータ構造・グラフアルゴリズム (世界標準MIT教科書)

[丸善出版] 旧・ピアソン桐原より翻訳刊行されていた書籍を、一部再出版することになりました。 「デザインのためのデザイン」は漏れたかー。 「人月の神話」、「珠玉のプログラミング」は復活と。

■_ FORTRAN

History of FORTRAN and FORTRAN II — Software Preservation Group に、

History of FORTRAN and FORTRAN II — Software Preservation Group

ource code

    FORTRAN II compiler source listing. Smithsonian Institution - National Museum of American History, Catalog
    number 304,349. Originally donated by Peter Zilahy Ingerman. Assembly language (SAP) listing of 4K and 8K
    drum versions of the final IBM 704 FORTRAN II compiler. Three volumes. Pages I-III of Volume I are a table
    of contents. Digital scan is Computer History Museum Lot X3435.2006.

というのが。 で、こっちはなんだろう II ってついてないし。

History of FORTRAN and FORTRAN II — Software Preservation Group

Microfiche with "specifications, flowcharts, mathematical analysis and source code for FORTRAN". Two sets,
each consisting of 23 microfiche of size 5.8"x4.1" (14.7cm x 10.5cm), each microfiche containing 50
images of size .51"x.58" (1.3cm x 1.5cm). Property of the family of Roy Nutt.


    300 dpi scan of microfiche #1: JPEG
    2400 dpi scan of image 6 of microfiche #1: JPEG
    For background, see the Dusty Decks article As you sow so shall you reap.

リンク先の blog 記事も見るとやっぱりIIのものっぽい?

さらに An Interview with Bob Hughes には面白そうな話題がごろごろと。

An Interview with Bob Hughes

GAM: When you went to the FORTRAN project, did you have a specific assignment or was it just to go back there
and tell them about the kind large codes we were developing?

BH: No, no, no. Each person in the FORTRAN development group had a specific assignment. Holland Herrick, for
example, was in charge of all tape I/O; that was his baby. To backtrack, FORTRAN was a table driven scheme.

GAM: Oh?

BH: Many tables. TEIFNO was a typical table of IF and GOTO entries. "TEIFNO" stood for the Table of
External Form of the IF Number versus its internal form. There were also "close-up" tables to close
everything when finished. There were just tables, tables, tables. Later on, they discovered that the way to
compile really fast was to collect everything and assemble it in a single symbol table. But, in those days, we
were still learning how to walk and so, initially, it was a table-driven scheme.

GAM: Also, on your first swing back there, you started the idea that if a variable's name began with i, j, k, l,
m or n, it's an integer.

BH: Yes, and for all other letters, it was a floating point quantity by default. Well, later on and when we
started doing our own compilers, all those features were added. Different groups came up with different ideas
when produced the second version of FORTRAN. I think even IBM allowed you to override the i, j, k, l, m, n
convention. 
BH: Another was mixed-mode arithmetic. In the first FORTRAN, you couldn't do mixed-mode arithmetic. An
expression had to evaluate to be a real or an integer. We got around those hurdles by allowing the programmer
to declare any main variable to be integer or real. There was quite a bit of awkwardness in the original
FORTRAN. Using numbers for statement numbers. You had to number your statements, as opposed to allowing a
lphanumeric statement numbers. There were a number of other embellishments, such as IF-THEN-ELSE logic, In the
1970's, structured programs tried to avoid the use of statement labels. I don't know if the IF-THEN-ELSE logic
was ever put into the IBM FORTRAN. We put it into ours.

GAM: I think an early real mistake in their first FORTAN, which induced us to have bad habits, was the three-way
branching IF statement. That wasn't very good.

BH: Oh, sure. Then they introduced IFs where you could have two branches. Less than or greater than.

GAM: Well, true or false.

BH: Yes, it was a logical step. 

The FORTRAN Builders おお、なんか並んでいるタイトルがすごいぞ Index to Bemer's Computer History Vignettes

ということでこの話は続く(かどうかは気分次第)

■_ gawk

texinfoファイル眺めてたら、参照する環境変数に結構見慣れないものが

@node Other Environment Variables
@subsection Other Environment Variables

A number of other environment variables affect @command{gawk}'s
behavior, but they are more specialized. Those in the following
list are meant to be used by regular users.

@table @env
@item POSIXLY_CORRECT
Causes @command{gawk} to switch POSIX compatibility
mode, disabling all traditional and GNU extensions.
@xref{Options}.

@item GAWK_SOCK_RETRIES
Controls the number of time @command{gawk} will attempt to
retry a two-way TCP/IP (socket) connection before giving up.
@xref{TCP/IP Networking}.

@item GAWK_MSEC_SLEEP
Specifies the interval between connection retries,
in milliseconds. On systems that do not support
the @code{usleep()} system call,
the value is rounded up to an integral number of seconds.

@item GAWK_READ_TIMEOUT
Specifies the time, in milliseconds, for @command{gawk} to
wait for input before returning with an error.
@xref{Read Timeout}.
@end table

The environment variables in the following list are meant
for use by the @command{gawk} developers for testing and tuning.
They are subject to change. The variables are:

@table @env
@item AVG_CHAIN_MAX
The average number of items @command{gawk} will maintain on a
hash chain for managing arrays.

@item AWK_HASH
If this variable exists with a value of @samp{gst}, @command{gawk}
will switch to using the hash function from GNU Smalltalk for
managing arrays.
This function may be marginally faster than the standard function.

@item AWKREADFUNC
If this variable exists, @command{gawk} switches to reading source
files one line at a time, instead of reading in blocks. This exists
for debugging problems on filesystems on non-POSIX operating systems
where I/O is performed in records, not in blocks.

@item GAWK_NO_DFA
If this variable exists, @command{gawk} does not use the DFA regexp matcher
for ``does it match'' kinds of tests. This can cause @command{gawk}
to be slower. Its purpose is to help isolate differences between the
two regexp matchers that @command{gawk} uses internally. (There aren't
supposed to be differences, but occasionally theory and practice don't
coordinate with each other.)

@item GAWK_STACKSIZE
This specifies the amount by which @command{gawk} should grow its
internal evaluation stack, when needed.

@item TIDYMEM
If this variable exists, @command{gawk} uses the @code{mtrace()} library
calls from GNU LIBC to help track down possible memory leaks.
@end table
  

この説明だけ読んでもピンとこないのがいくつかあるな。 ソースも見るか。

■_

■_

○| ̄|_

2013年12月09日

■_

今日もインプット過多

欲しいんだけど今月はCyber Mondayやらで色々出たので厳しい。 コルメン本もあるし。 ソフトウェア品質の経済的側面 / Capers Jones  Olivier Bonsignour  著 小坂 恭一 監訳 | 共立出版

■_ diverge がわからない

TAPL。 オーム社が電子書籍の半額セールを実施中、11日まで | スラッシュドット・ジャパン のおかげでPDF版買えた。ありがとー。 で。276ページ目辺り。


  nil = λX. (λR. λc:X!R!R. λn:R. n) as List X;

  cons = λX. λhd:X. λtl:List X.

  isnil = λX. λl:List X. l [Bool] (λhd:X. λtl:Bool. false) true;

ときて、

head の操作は少し難しい。まず、空のリストのhead をどう扱うかが難しい。これを解決するには、言語に一般的な不動点
演算子があればそれを使って任意の型の式を作れることを思い出すとよい。実際さらに、型抽象を使えば、型X を受け取り、
Unit からX への関数でunit に適用されたら発散する関数を返すような、単一の一様な関数を書ける。

  diverge = λX. λ_:Unit. fix (λx:X. x);
  diverge : ∀X. Unit → X

これで、head [X] nil の「結果」としてdiverge [X] unit を使える。

  head = λX. λl:List X. l [X] (λhd:X. λtl:X. hd) (diverge [X] unit);
  head : ∀X. List X → X

残念ながら、この定義は望むものにはまだなっていない。たとえ空でないリストに適用されたときでも常に発散してしまう。
正しい振る舞いにするには、diverge [X] がl の引数として与えられる時点では、Unit 型の引数が実際には渡らないように、
少し書き直す必要がある。これには、引数 unit を消して、それに合わせl への第一引数の型を変えればよい。

  head =
    λX. λl:List X.
       (l [Unit→X] (λhd:X. λtl:Unit→X. λ_:Unit. hd) (diverge [X]))
       unit;
  head : ∀X. List X → X

つまりl は、型X→(Unit→X)→(Unit→X) の関数と型Unit→X の基底値に適用され、型Unit→X の関数を作る。l が空のリ
ストである場合は、この結果はdiverge [X] となる。l が空でないリストである場合は、この結果はunit を受け取ってl の
先頭の要素を返す関数となる。実際の先頭要素を得られるよう(あるいは、運が悪ければ発散するよう)、最後にl の結果
がunit に適用される。これでhead が期待通りの型を持つようになる。

diverge [X] の定義(と動作)はまあなんとなく分かってるとして(怪しいけど)、 それが head の定義(空リスト食わせても大丈夫) でどのように動作しているのかが どうにもよくわからない。

適当にキーワードぶち込んだらこういうのが引っかかったけど ちょっと違うよなあ Strictness analysis - Wikipedia, the free encyclopedia

■_

Which Language Should You Learn First? - Programming - O'Reilly Media Can One Write Readable and Maintainable Perl? - Programming - O'Reilly Media

■_ First FORTRAN Compiler

どこかで最初のFORTRANコンパイラーのソースコードは失われてしまったとか読んだような記憶があったのだけど、 うぃきぺ(もちろん英文の方)及びそこからたどれるところには見あたらないっぽい。 しかし FORTRAN II のソースコードは残っている模様。 さらに面白いものが見つかったのだけどそれは明日(以降)で。

■_

2013年12月08日

■_

不調。

■_

R と Python がどうこういう話 On the growth of R and Python for data science | (R news & tutorials) に対して On the growth of R and Python for data science

On the growth of R and Python for data science

Asay's article is heavy on anecdote but light on actual data to support its claim. (ComputerWorld's Sharon
Machlis does a great job pointing out the irony there.) Nonetheless, data do exist on R and Python usage;
while there's no user-registration data for open-source projects, secondary sources can provide intelligence on
how open source projects are being used. RStudio's Hadley Wickham uses data from the developer Q&A site
StackOverflow to chart the number of open questions asked per month about R and Python, as a proxy for active
usage:
As an general-purpose data processing tool, it's no surprise that Python has more activity than the
domain-specific analytics language R. But it's clear that both are growing explosively (Wickham describes the
growth as "very close to being exponential"). Looking closer though, we see that the proportion of R questions,
as a fraction of Python questions, is also growing rapidly:
This belies the claim that Python is displacing R. In fact, this chart suggests the reverse is true, and that
R usage is growing at a faster rate than Python.

■_

一応大学で統計学やったはずなんだけど、確率論やら測度論やらの背景はあまりつっこんでやってなかった。 というか測度論とか知りませんでしたー(最近まで)。

統計学Part15

337 132人目の素数さん [] 2013/12/07(土) 17:05:59.42 ID: Be:
    十年前に数学科を出たものですが、統計学勉強したくなりました。
    何から勉強すればいいですか?
    教えろください。 

338 132人目の素数さん [sage] 2013/12/07(土) 17:29:48.44 ID: Be:
    数学科出たのなら,「数式がない..」とかのうたい文句があるのはヤメた方がいい。
    バッチリした教科書、確率まで踏み込んであるのが読めるならそれがいい。
    あなたが数学科で代数とか幾何とか選考して、解析や確率を敬遠していたのなら、
    昔の高校教科書「確率と統計」とか見てみると多分すんなり入れると思う。
    たとえばちくま文庫から出てるような。それから、専門的な教科書に入るのはワリ
    と易しいと思うよ。

    以上似たような経歴のモンから。
    ゼミで確率論なんかやってたのなら全く無用の助言でした。 

339 132人目の素数さん [] 2013/12/07(土) 17:48:53.29 ID: Be:
    >>338
    ありがとうございます。
    ゼミでは、グラフ理論やってましたw
    高校からやるのいいかもしれませんね。
    専門的な教科書のおすすめってありますか~? 

340 132人目の素数さん [sage] 2013/12/07(土) 18:41:38.97 ID: Be:
    そもそも統計学なんて数学科以前に教養課程で習うだろ
    統計専攻の人でも学部レベルくらいまでなら、あれに毛が生えたようなレベルしか
    勉強しないぞ
    しいて言うなら、確率論に測度が入ってくるくらいか 

341 132人目の素数さん [sage] 2013/12/07(土) 19:48:10.87 ID: Be:
    >>337
    これでもガーとやれば
    ttp://www.amazon.co.jp/dp/4130420658 

342 132人目の素数さん [sage] 2013/12/07(土) 20:10:49.89 ID: Be:
    大学院出るレベルで基礎からやりたいっていうなら
    http://www.amazon.co.jp/dp/0486637603/
    これが結構おすすめ 

■_ 実は

Island Life - 潜水母艦伊400 「潜水母艦」ってこういう艦だったりするのです。画像検索→ 潜水母艦 - Google 検索 うぃきぺ→ 潜水母艦 - Wikipedia

rss で見たときには元記事書いたのarton さんだと思い込んでて、 リンクつついて開いたらあらびっくり。

■_ Ruby力

どういうからくりで動いてるのか理解するのに結構かかってしまった。 やべー。 Ideone.com - PeENLH - Online Ruby Interpreter & Debugging Tool

■_

■_

The Importance of Types
http://academiccomputing.wordpress.com/2013/10/17/the-importance-of-types/

This is a post of two halves. I will start by explaining why I think types are so useful in professional
programming, and then later discuss their place in learning to program.

I ♥ Types

From a software engineering viewpoint, I am a strong proponent of types. Unfortunately, most non-functional
programming languages have included types in a fairly lacklustre way. When I say that types are useful, people
may think about the distinction between integers, floats and strings (classic question: what type is a
telephone number?), or the distinction between different record/class types. These are very useful distinctions
but they are relatively basic uses of types. Let’s explore some more powerful uses of types.

ソフトウェア工学の視点から、わたしは強力な型の proponent です。残念なことに、大部分の non-functional なプログ
ラミング言語は型を fairly lacklustre way で含んでいます。わたしが型は有用だと主張したとき、聞き手は整数や浮動
小数点数、文字列といったものの区別について考えるかもしれません(classic question: 電話番号の型とは?)。あるいは
異なるレコード型やクラス型の区別について考えるかもしれません。これらは非常に有用な区別ではあるのですが、相対的
に言えば型の basic use です。では型のもっと強力な使い方を説明しましょう。


NASA’s Mars Climate Orbiter project famously crashed due to a mixup in the units being used. The compiler
did not complain because all the numbers involved were typed as floating point numbers, and you are permitted
to manipulate them as you please. However, the Orbiter failure should be seen as a typing failure. The F#
language has a units feature that can prevent such mixups. One number can be typed as a float<meters>.
Another can be typed as a float<seconds>. Divide the former by the latter and you have a
float<meters/seconds>. If you try to add that to an acceleration number (typed as float<meters/seconds^2>)
then you will get a compile error. This cleverer, more thorough use of types begins to illustrate the benefits.

よく知られているように、NASA の Mars Climate Orbiter 計画は使っている単位を混ぜてしまったためにクラッシュして
しまいました。コンパイラーはすべての数値が浮動小数点数として型付けされていたので complain せず、また、プログラ
マーは好きなようにその数値を操作することを許されていました。しかし、この Orbiter の失敗は typing failure とし
て発見されるべきものでした。F# というプログラミング言語はそのような mixup を防げる units 機能を備えています。
それはある数値を float<meters>と型付けでき、さらに別の数値を float<seconds>と型付けできるといった
ものです。前者を後者で割ったときの型は float<meters/seconds>となります。これに
(float<meters/seconds^2>という型の) acceleration number を加えようとするとコンパイルエラーとなります。
This cleverer, more thorough use of types begins to illustrate the benefits


Many problems in programming arise from letting too many variables in your program have a plain string type. A
URL, a file path, a file’s contents, a MySQL query string, a GUI label and someone’s name are all text.
Letting them all have the same type and be manipulated in the same ways leads to all sorts of accidental
errors. Concatenating the contents of two files might make sense, but concatenating two absolute directory 
names or two URLs does not. Many, if not all, SQL injection bugs can be seen as the concatenation of two
incompatible types: a string originating from user or external input (which could be typed as such) and a query
string, resulting in a query string. To avoid SQL injection, you should not allow any non-escape user input
into a query string. Similar logic applies to injecting user-originated Javascript content into webpages. And
in fact, several dynamic languages have tried to cut this out by having a dirty flag on strings that originate
externally; they then prevent the use of (non-escaped) dirty strings in the wrong place like HTML generation.

プログラミングにおける問題の大半は、プログラム中に存在している変数のあまりにも多くに plain string type を持たせ
ていることに起因しています。URL、ファイルのパス、ファイルの内容、MySQL の query文字列、GUI のラベル、誰かの名前
等々といったものはすべてテキストです。これらすべてに同じ型を持たせ、同じ手法で操作することはありとあらゆる種類の
accidental errors を招きます。二つのファイルの内容を連結することにはたぶん意味があります。しかし、二つの絶対パス
名の連結や、ふたつの URL の連結には意味はありません。すべてというわけではありませんが、多くの SQLインジェクショ
ンバグは二つの incompatible な型の連結として見ることができます。ユーザーの入力もしくは外部からの入力(そのように
分類できるもの)から originating されている文字列と、query 文字列や query文字列中の結果同様のロジックはユーザー
起源の Javascript content のwebページへのインジェクションにも適用されます。実際には、いくつかの動的言語で外部起
源の文字列に dirty flag を持たせ、さらに HTML 生成のような間違った場所でこの(エスケープされていない)dirty
strings を使うのを防止することで問題を回避しようとしました。


Just as not all strings are not the same, not all integers are either. Recently, I have been developing some
software that reads from a database. Each table has a 64-bit integer primary key named id (NB: I didn’t design
the schema). You might be tempted to read that field into a plain 64-bit integer type. But, as well as
permitting nonsensical addition and multiplication of ids, this means that you might accidentally read the id
field from the users table and use it to find an entry in the posts table. A classic way this can happen is that
you have a function that takes two ids, one for users and one for posts, and you pass the parameters in the
wrong order. The better way to program this system is to use a different type for the id of the users table 
(e.g. id<users>) and for the posts table (id<posts>). That way your method can have two parameters
with different types, and the compiler can issue an error if 
you get the order wrong.

すべての文字列が同一のものではないように、すべての整数も同一のものはありません。最近のことですが、わたしはデー
タベースの読み込みを行うソフトウェアをいくつか開発しました。各テーブルは id と名前の付けられた64ビット整数の
primary key を持っていました (NB I didn't design the schema)。あなたはそのようなフィールドを普通の64ビット整数
型として読む誘惑に駆られるかもしれません。しかし、idの加算や乗算が nonsensial に許されてしまうと、ユーザーのテ
ーブルから id フィールドを間違って読み込んでしまったり post テーブルから見つけ出してしまったりしてしまいます。
このような事態が発生する classic way は、一つはユーザーid、もう一つは投稿のid という二つの引数を取る関数を定義
して、その関数に対して間違った順序でパラメータを渡してしまうというものです。このようなシステムをプログラムする
ためのより良いやり方は、id of the users table つまり id<users> の型と id the posts table id<post> の型
とで異なるものを使うというものです。この方法でことなる型を持った二つのパラメータを取るメソッドを定義でき、なお
かつパラメータの順序が間違っているときにコンパイラーがエラーを issue できます。


Types prevent errors, and static types prevent errors very early on in the development process: at compile-time.
Static type declarations also serve as a form of documentation. What’s more, I know that the types must be
kept up-to-date, unlike documentation. Out of date documentation requires a programmer to notice; out of date 
types cause a compiler error. And if you want some really interesting type-related programming, there are
actually some functions where there is only a single implementation for a given type, and thus writing a type
is enough for a programmer or a tool to work out the function implementation. The djinn tool provides an
implementation.

型はエラーを防ぎます。静的型はさらに開発プロセスの非常に早い段階、コンパイル時にエラーを防ぎます。静的型宣言は
また、form of documentation の役目も果たします。さらに加えて、ドキュメントとは違って型は up-to-date し続けなけ
ればならないことをわたしは理解しています。out of date なドキュメントはプログラマーが notice するのを要求し、
out of date な型はコンパイルエラーを引き起こします。もしあなたが some really interesting type-related
programming を欲しているのなら、ある与えられた型に対してはただ一つの実装しかないという actually some functions
があります。ですから、型を書くことはその関数を実装するプログラマーやツールにとって充分なものなのです。
The djinn tool provides an implementation.


And Yet…

You get the picture: I’m a big fan of using types. However, there is one case where there I’m not as certain
about how prominently types should feature: programming education.

You get the picture: わたしは using types の big fan です。しかし、どのようにして prominently に types を
feature すべきかについてわたしが確信できない one case があります。それはプログラミング教育です。
#ここなげやり

I accept that a good strategy for teaching is to pare down what the students are exposed to. You start by
teaching the students variables, or method calls, and you leave out other concepts (like loops) until students
have got the hang of learning the first concept. So should types be one of the later concepts, that are omitted
until students are ready for them? Should we start in languages where the types are relatively hidden and then
move to more obviously typed languages later on?


Early on, this is the distinction between writing:

  x = 5
  y = "hello"

and:

  int x = 5
  string y = "hello"

Obviously, the former involves less concepts to start with. But does the latter help your understanding in the
long run? We get into further differences with the question of whether you can write:

明らかに始めるのには前者の方が involves less concepts です。ですが後者は長期的視点では理解を助けていないでしょ
うか? We get into further differences with the question of whether you can write:

  x = 5
  x = "hello"

Is a variable a place for storing anything, or does a variable have a type? If you start with the former, is it
difficult to later teach the latter? Similarly, can you have heterogenously-typed lists with all sorts of
different elements:

変数とは何かを格納するための場所でしょうか? それとも変数には型があるでしょうか? 前者の立場から始めたとき、後者
を後から教えるのは難しいことでしょうか? また、異なる種類の要素からなる heterogeneously-typed なリストを持つ
ことは可能でしょうか?


  x = [ 5, "hello", [3.0, 5.6] ]


Broadly, what I’m wondering is: are dynamically/flexibly typed systems a benefit to learners by hiding
complexity, or are they a hindrance because they hide the types that are there underneath? (Aside from the
lambda calculus and basic assembly language, I can’t immediately think of any programming languages that are
truly untyped. Python, Javascript et al do have types; they are just less apparent and more flexible.) Oddly, 
I haven’t found any research into these specific issues, which I suspect is because these variations tend to
be per-language, and there are too many other confounds in comparing, say, Python and Java — they have many
more differences than their type system. I’m interested to hear anyone’s thoughts on this issue.


大雑把にはわたしの疑問は以下に挙げた通りです。
dynamically typed system や flexibility typed system はその複雑さを隠して教えるだけの利益があるものでしょうか?
あるいは、それらは hide the types that are there underneath しているので障害になるものでしょうか?
(lambda calculus や basic assembly language を除くと、本当に untyped なプログラミング言語はすぐには思い浮かび
ません。Python や Javascript などは型を持っています。単にそれらが less apparent で more flexible なだけなのです)
たとえば Python と Java のようにそれらの言語同士では型システムだけではない多くの違いがありますが、言語ごとに
these  variation があるのだから、そういった specific issuse に into した研究があっても良いと思っているのですが
見たことはありません。I’m interested to hear anyone’s thoughts on this issue.

2013年12月07日

■_

この本、気になってるんだけど翻訳出るかなあ。 出るとしたらいつくらいかなあ… Amazon.co.jp: Jony Ive: Leander Kahney: 洋書

忘れずに。 中島みゆきのオールナイトニッポン月イチ|AMラジオ 1242 ニッポン放送 ★年内最後のレギュラー放送は・・・12月8日(日)27時~29時(=9日(月)3時~5時)!! おっとこんなのも 特別放送『中島みゆきオールナイトニッポン月イチ 2013年総集編』<<12月15日(日) 19時~21時>>

情報技術者の社会的責任 第11話 レポートは B で。

新しいのは買わないでも良いかな(送り返してませんw) コープランド『チューリング』:この程度で刷り直したのお?? - 山形浩生 の「経済のトリセツ」

■_

2013年12月06日

■_

「ー」を「-」とか「-」のつもりで使っているデータがあって、 検索システムもよろしくやってくれないのであるはずの物品が見つからなくて大騒ぎ。 誰だよ登録作業したの…

命の格差は止められるか: ハーバード日本人教授の、世界が注目する授業 (小学館101新書)
命の格差は止められるか: ハーバード日本人教授の、世界が注目する授業 (小学館101新書) 読了。最終章がとくにオススメかな。医療以外にもいろいろ応用が利く考え方だと思う。 とは言え、一見自分には利益がないようなやり方は賛成されづらいんだろうなあと暗い気分になったり。 ところで今更ながら気になったんだけど、「格差は止められるか」って言い回しはアリなんだろか。 「なくせるか」とか 「格差の(拡大は)止められるか」じゃあなかろうかと。

左結合

NHK 時報時計。 某所で売っているのを見かけたんだけど復活した? ってamazonにも。 NHK時計 青版
NHK時計 青版 NHK時計 木目版
NHK時計 木目版 NHK時計 腕時計タイプ 青
NHK時計 腕時計タイプ 青

ついに TAoCP も電書化。 Art of Computer Programming, Volume 1, Fascicle 1, The: MMIX -- A RISC Computer for the New Millennium | InformIT

Art of Computer Programming, Volume 1, Fascicle 1, The: MMIX -- A RISC Computer for the New Millennium | InformIT

eBook (Watermarked)

    Your Price: $12.79
    List Price: $15.99

The Art of Computer Programming - eBook | Hacker News Knuth: Recent News For many years I've resisted temptations to put out a hasty electronic version of The Art of Computer Programming, because the samples sent to me were not well made. But now, working together with experts at Mathematical Sciences Publishers, my publishers and I are launching an electronic edition that meets the highest standards. We've put special emphasis into making the search feature work well. Thousands of useful "clickable" cross-references are also provided --- from exercises to their answers and back, from the index to the text, from the text to important tables and figures, etc. The first fascicle can now be ordered from Pearson's InformIT website, and we expect to release thousands of additional pages next year. 他の巻はいつ頃なのかなー。いや日本語版も早く。 一巻、 二巻はほとんど見なくなってるっしょー。 The Art of Computer Programming Volume1 Fundamental Algorithms Third Edition 日本語版 (ASCII Addison Wesley Programming Series) The Art of Computer Programming (2) 日本語版 Seminumerical algorithms Ascii Addison Wesley programming series

■_

なんかもー今日は豊作で時間が足りないんぐ

■_ Create a *Correct* & Concise Programming Language

面白い試みとは思うけどさて。 Create a *Correct* & Concise Programming Language - Open Source Compiler | Indiegogo

Create a *Correct* & Concise Programming Language - Open Source Compiler | Indiegogo

Introduction

Hello, my name is Levo DeLellis. I have been a programmer for twelve years, and I am passionate about writing
code. Despite this, I see many problems in the way we are writing and maintaining code - problems that do not
need to exist. Put simply, there are no languages today which are simultaneously fast, safe, and enjoyable to
write.

こんにちは。わたしは Levo DeLellis です。12年間プログラマーをしていて、コードを書くことが大好きです。しかしわ
たしは、わたしたちがコードを書いたり保守しているやり方には本来ないはずの問題が数多くあると思っています。簡単
に言うと、現状では、高速かつ安全でその上書くのが楽しい言語が存在していないということです。

I wish to do something about this. For the past five years I have designed a language that can solve these
problems. I have design it to be fast (as fast as C++), safe (it will do everything in its power to stop you
from shooting yourself in the foot), and enjoyable.

わたしはこの問題に対してなにかできれば良いと思っています。過去五年、わたしはこれらの問題を解決できる言語を設
計してきました。それは、(C++ と同じくらい) 高速で、
(it will do everything in its power to stop you from shooting yourself in the foot) 安全で、楽しめるものです。

This is a campaign to raise the necessary funds so I may write an open source compiler for this language. Below,
you will find details regarding the features of the language, the problems they seek to address, what companies
today are doing and other details.

これは、わたしがこの言語のコンパイラーをオープンソースで作るのに必要な資金を集めるためのキャンペーンです。
以下に、わたしが作ろうとしている言語の機能、対処しようとしている問題、企業が今日行っていることなどの詳細をまと
めています。

ざっと省略
Goal

The goal is to create an open source compiler implementing a language that addresses the problems I have
discussed on this page. The executable will have speed and memory usage comparable to C++. The language will
try to prevent as much error as reasonably possible. It will be memory safe unless it is disabled for reasons
the programmer choices (perhaps to write a driver). It will everything mentioned on this page and more.

目標はわたしがこのページで論じた問題に address した言語を実装したオープンソースのコンパイラーを作ることです。
executable は C++ に匹敵するスピードと memory usage を持ったものになるでしょう。この言語では可能な限り
(reasonably possible) 多くのエラーを防ぐのに try します。(ドライバーを記述するためなどの理由で) プログラマーの
選択により disable されない限り memory safe になります。


Tradeoff - Consequences and Benefits

The language will be more sophisticated then existing languages. The consequence is the learning curve. The
curve isn't significantly steeper than most language but will be longer (YMMV). You will also be more likely to
have compile errors and design changes (due to ownership flow or another rule). The benefit is the code will be
more easily reason about. The sophisticated syntax gives us more expressiveness and if done right will be more
concise.

この言語は既存の言語よりも一層 sophisticate されたものになります。そしてそれによる帰結は学習曲線に現れます。
The curve isn't significantly steeper than most language but will be longer (YMMV).
学習曲線は
You will also be more likely to have compile errors and design changes (due to ownership flow or another rule).
その benefit はコードでの推論がさらに容易になるというものです。
sophisticate された構文は一層の expressivenss と、正しいときの more concise をもたらします。

Timeline

This is an 18 month project starting January 2014. The end goal is to have a useable beta compiler. At the
4month mark I aim to have an alpha compiler and a parser that accepts half of the syntax. By the end of 2014 I
hope to be able to call functions and have a portion of the type system working. By the end aim to have the
compiler fairly stable and usable to everyone. The source will be available from day one.

本プロジェクトは、2014年1月に始まる18ヶ月間のプロジェクトです。最終目標は usable な beta コンパイラーを得るこ
とです。四ヶ月の時点で alpha コンパイラーと構文の半分を accept するパーザーを得るのを目指します。2014年末までに、
関数の呼び出しが可能とし、また部分的に動作する型システムを得られれば良いと考えています。期限までには fairly
stable で誰もが使えるコンパイラーにするのを目指します。ソースは初日からアクセス可能 (available) になります。


Implementation

There is two viable ways to generate and optimize code. One is to use LLVM. LLVM is an open source compiler
used by and sponsor by companies such as Google, Apple and Intel. It supports many architectures and optimize
code fairly well. The other option is to generate standard C++11 or C++14 code and use a compliant compiler to
output executable. Clang is a compliant C++ compiler for LLVM. I'm likely to use the latter option.

コードの生成と最適化を行うには二つの viable way があります。ひとつは LLVM を使うことです。LLVM はオープンソー
スのコンパイラーで、Google や Apple、Intel に sponsor され使われています。LLVM はまた、多くのアーキテクチャー
をサポートしていてコードの最適化も非常に良いものです。選択肢のもう一つは C++11 か C++14 のコードを生成し、実行
形式の出力を得るにはそれらに compliant なコンパイラーを使うというものです。Clang は LLVM に compliant な C++
コンパイラーです。I'm likely to use the latter option.

Frequently Asked Questions

How will the money be spent on?
お金はどのように使われますか?

It is a fairly modest goal for a 18month project. A lot of things will come out of my pocket (hardware,
software licenses such as a profiler and an IDE or text editor, etc). The money will go towards paying a
working wage. The project is 18months so wage cost most of this. There will only be one person working for the
entire 18months (myself) with other people coming after midway through. The next significant place money will
go to is indiegogo fees. Fees are 7% (roughly 9K) which are Indiegogo and a 3rd party company to handle credit
cards transactions. I'll be happy if this campaign meets its goal. I'll be ecstatic if enough is raise to not 
require anyone involved to work on a lower wage.

What would you do if you surpass your goal?

Pay people enough so they won't be working with a pay cut (that will come at the end). There will be things
that can be improved upon. I'll use the additional funds towards improving documentation and non-essential 
features. Progress won't stop the day of the deadline and extra funds will go towards that.

When will the source be available?
ソースコードがアクセス可能になるのはいつですか?

Day one. You can see progress as it happens. The delivery date is July 2015 (18 month).
初日からアクセス可能です。


What OS will the compiler run on?
コンパイラーが動作するOS は?

Linux and Windows. Because it is open source someone may help get the compiler running on mac.

Linux と Windows です。このコンパイラーはオープンソースですから、
Mac 上で動作するコンパイラーを作るのを手伝ってくれる人がいるかもしれません。

Have you or anyone on your team written a compiler?
あなた、もしくはチームの誰かがコンパイラーを書いた経験はありますか?

I have written a prototype in 2009. I implemented a parser to see if my desired syntax is possible. I
implemented the abstract syntax tree and parts of the type system. I experimented and did many changes. I
profiled and benchmarked the prototype as a whole. I'm very comfortable writing a feature complete compiler.

わたしがプロトタイプを2009年に書きました。自分の望む構文が可能であるか確かめるためにパーザーを実装しました。
また、抽象構文木と型システムの一部も実装をしました。



Will it be portable? Can I target phones, game consoles, etc?
移植性はありますか? 携帯電話やゲーム機などをターゲットにできますか?

Yes. You can target anything C++ can target.
はい。C++ がターゲットにできるものはなんでもターゲットにできます。


I have legacy code and I want to use already existing libraries. What can I do?
レガシーコードがあるし、既存のライブラリを使いたいです。

You may use any C based library and C++ library support is likely. Legacy code is a little tricky. You can
write code in this language and generate an interface to be called from your legacy code. If you legacy code
is in C, C++ or Objective C it is likely a tool will exist using Clang to examine your code and generates
information so it could be called from this new language.


I hate exceptions; what do you have for me?
例外はキライなんですが、何か良いものはありませんか?

You can disable exceptions. You can use the error keyword which forces the caller to check the value.
See Error Handling above.

例外は disable できます。caller に値の検査を強制させるための error キーワードが使えます。


Are goto/global variable and other bad things allowed?
goto やグローバル変数のような bad things は許可されますか?

No. Unless you explicitly tell the compile to enable it. I discourage using code or libraries that require this.

いいえ。あなたがそれらをコンパイルできるように explicitly に指示しない限りは許されません。
これを必要とするようなコードやライブラリを使うのはお勧めしません。


Will there be templates or generics?
テンプレートかジェネリクスは実装されますか?

There will be templates. There likely will be generics available as a simple template. They may not work the
same way as other languages.
テンプレートが実装されます。


Is there reflection or introspection?
リフレクションか introspection はありますか?

There will be compile time reflection.
コンパイル時リフレクションが実装されます。


What is this language called?
この言語はなんと呼ばれているのですか?

I haven't decided on a name. I'll try to make it easy to search for on the web.
まだ名前は決めていません。
web で検索しやすいものにしようと思っています。


Will there be garbage collection?
ガーベジコレクションはありますか?

No but you won't need to manage memory. Object ownership and static analysis takes care of it.
ガーベジコレクションはありませんが、自前でメモリー管理をする必要はありません。
オブジェクト ownership と静的解析が面倒をみます。


Does your syntax take advantage of new hardware or future hardware such as the Mill? 

The language is meant for programming and not to have 1 to 1 translation to hardware. The code generator and
optimizer job is to make the best use of the CPU. However that being said there may be some constructs that by
 chance are instructions on new hardware. For example I hope assigning bits to an integer without modifying
other bits will be fast and its own instruction. I think the Mill is a great piece of hardware and is
drastically different from other hardware. I would love to target it. After contacting them I believe that
won't be a problem.


Why doesn't <large company> implement a language to solve these problems?
なぜ「大企業」はこれらの問題を解決するための言語の実装をしていないのですか?

I can't speak for large companies but I can talk about their actions.
大企業について話すことはできませんが彼らのアクションについて話すことはできます。

Google has implemented Google Go which is significantly different from other languages. It compiles quickly,
uses a reasonable amount of ram, isn't as fast as the C family and isn't meant to cover everything the C family
does. Google also sponsors LLVM which is a compiler meant for speed. LLVM has several frontends one being clang
to compile C, Objective C and C++.

Google は他の言語とは significantly different な Google Go を実装しました。Go のコンパイルは高速で、RAM は
reasonable amount しか使いませんが、C family ほどには(生成した実行ファイルの)速度は速くないし C family がカバー
している範囲すべてをカバーしてはいません。Googe は (速度のために) LLVM のスポンサーもしています。LLVM には C や
Objective-C、C++ をコンパイルするためのいくつかのフロントエンドがあります。


Facebook created HipHop VM. It takes in PHP code and compiles it so it may be as fast as C++. The reason
Facebook does this is because their programmers are more productive with PHP than C++. However PHP is not the
greatest language and may not be suitable for the backend. Facebook uses C++ for their backend but recently
(October 11 2013) wrote code using the D programming language (source). Facebook also offers bounties to fix
bugs in the D programming language (source)

Facebook は HipHop VM を作成しました。これは PHP のコードをコンパイルして C++ に匹敵するほどの速さにしようと
いうものです。Facebook がこれを作った理由は、彼らの抱えているプログラマーが C++ でよりも、PHP でより
productive であるからです。しかし PHP は greatest language ではありませんし、おそらくバックエンドには向いてい
ません。Facebook は彼らのバックエンドには C++ を使っていましたが、最近 (2013年10月11日)、D を使ってコードを書
きました。Facebook はまた、D のバグフィックスのための賞金を offer しています。

Clearly there are speed and productivity concerns by Google and Facebook actions.
Last Remarks

I appreciate all donations and any help sharing this campaign. Please do contribute amounts above the perk you
selected. Thank you for reading and thank you for any contributions you have made to computer science.

■_

■_

なんかタイミング良く HN でこういう話題が出たときに How can C Programs be so Reliable? (2008) | Hacker News Laurence Tratt: How can C Programs be so Reliable? (これってどこかに翻訳なかったっけか)、 こういう記事が出たなあと 無理矢理関連づけてみる プログラムに証明が付く日 | RANDMAX プログラムの証明についての最近の話題

■_

The Challenge of Cross-language Interoperability - ACM Queue

Interfacing between languages is increasingly important

David Chisnall

Interoperability between languages has been a problem since the second programming language was invented.
Solutions have ranged from language-independent object models such as COM (Component Object Model) and CORBA
(Common Object Request Broker Architecture) to VMs (virtual machines) designed to integrate languages, such as
the JVM (Java Virtual Machine) and CLR (Common Language Runtime). With software becoming ever more complex and
hardware less homogeneous, the likelihood of a single language being the correct tool for an entire program is
lower than ever. As modern compilers become more modular, there is potential for a new generation of
interesting solutions.

複数の言語間の interoperability は二番目のプログラミング言語が発明されて以来問題となってきました。それに対する
solution には COM (Component Object Model) や CORBA (Common Object Request Broker Architecture) のような
language-independent なオブジェクトモデルから、JVM (Java Virtual Machine) や CLR (Common Language Runtime) の
ような言語を統合するために設計された VM 群 (VMs (virtual machines) designed to integrate languages) に至るまで
多岐にわたります。ソフトウェアがより一層複雑になり、と同時にハードウェアがより less homogeneous になるに伴って、
the likelihood of a single language being the correct tool for an entire program は減少してきました。
modern なコンパイラーがより modular になったことで、a new generation of interesting solutions の 可能性がでてきました。

以下結構長い

2013年12月05日

■_

モーニング買いそびれた

Hacker News。あまりコメントがついていないものの方にむしろ自分が面白いと思うようなものが あったりするので悩ましい。

■_ InfoQ (StrangeLoop)

Scala vs Idris: Dependent Types, Now and in the Future ←のスライド2、3枚目に笑った。 Why Ruby Isn't Slow これは github の方ですでにみていた。 なんで Scala vs Idris に気がつかなかったんだろう。 Raft - The Understandable Distributed Protocol これも。

そいや Moore さんの講演資料はどうなってんだろう… Programming a 144-computer Chip to Minimize Power This is a restricted presentation that can only be viewed by Strange Loop 2013 attendees! ぐぬぬ…

The J Programming Language これってあの J の話かなあ。 Emerging Languages Camp の track みてえええっ

■_ QCon London

QCon London '14: Damian Conway, Tim Lister, Gunter Dueck Keynotes, 45% Speakers Confirmed (Mar 3-7)

QCon London '14: Damian Conway, Tim Lister, Gunter Dueck Keynotes, 45% Speakers Confirmed (Mar 3-7)

45/100 speakers and 3 keynotes have been confirmed for QCon London 2014 (Mar 3-7, 2014).  The eight annual conference will feature talks from language pioneers, project leads, and practitioner case studies from companies like Netflix, NASA, Spotify, Financial Times, and more. Registration is open and new speakers and sessions are being posted to the conference site every week. You can get in early by reserving your seat now saving  £325 by Dec 15th.

Keynote speakers confirmed so far: 

    Damian Conway - Perl Boffin, Author "Perl Best Practices"
    Tim Lister - Fellow, Cutter Consortium; Author "Peoplware: Productive Projects and Teams"
    Gunter Dueck - Former CTO, IBM Germany; Philosopher and Mathematician

■_

2013年12月04日

■_

観てきた

■_

気になる近刊新刊 Amazon.co.jp: コンテンツの多様性: 多様な情報に接しているのか: 浅井 澄子: 本 Amazon.co.jp: マンガでわかるディジタル回路: 天野 英晴, 目黒 広治, オフィスsawa: 本 Amazon.co.jp: なぜマイクロソフトはサイバー攻撃に強いのか? (Software Design plus): 香山 哲司: 本 Amazon.co.jp: IMPACT MAPPING インパクトのあるソフトウェアを作る: Gojko Adzic, ゴイコ・アジッチ, 平鍋 健児, 上馬 里美: 本 Amazon.co.jp: Octet: Ben Hammersley: 洋書 Amazon.co.jp: ソフトウェア工学の基礎XX FOSE2013 (レクチャーノート ソフトウェア学): 岡野 浩三, 関澤 俊弦: 本

■_ GCC poison

GCC poison つーからGPL絡みの何かかと思ったら違った GCC Poison : programming GCC Poison | Hacker News

GCC Poison | Leaf Security Research

  #include <stdio.h>
  #include <string.h>

  #pragma GCC poison strcpy

  int main(int argc, char *argv[]) {
      char buf[10];
      strcpy(buf, argv[1]);
      return 0;
  }

  $ gcc -o 2 2.c
  1.c: In function ‘main’:
  1.c:8:2: error: attempt to use poisoned "strcpy"

It's simple but it can be very helpful when you've got a lot of legacy C code sitting around that you want to
remove these functions from and keep developers from committing and compiling new code that contains them. For
the initial release of gcc-poison we have created a small list of unsafe C functions in the form of a header 
file you include your source just like you do with banned.h. I must emphasize 'small' here for a couple of
important reasons.

へー。

■_

没っとな。

■_

2013年12月03日

■_

ここ数日隙間時間に読み進めている本 働くアリに幸せを 存続と滅びの組織論
働くアリに幸せを 存続と滅びの組織論 命の格差は止められるか: ハーバード日本人教授の、世界が注目する授業 (小学館101新書)
命の格差は止められるか: ハーバード日本人教授の、世界が注目する授業 (小学館101新書) アルゴリズムが世界を支配する (角川EPUB選書)
アルゴリズムが世界を支配する (角川EPUB選書)

■_ TAPL

23章続き。 head とか tail とか diverge とか

■_ Oberon

Project Oberon - The Design of an Operating System, a Compiler, and a Computer (New Edition 2013) : programming Project Oberon (New Edition 2013) で、 Preface to the 2013 edition を読んでみたらですね

Comments about plans to prepare a second edition to this book varied widely. Some felt that this book is outdated, that nobody is interested in a system of this kind any longer. "Why bother"? Others felt that there is an urgent need for this type of text, which explains an entire system in detail rather than merely proposing strategies and approaches. "By all means"!. Very much has changed in these last 30 years. But even without this change, it would be preposterous to propose and construct a system competing with existing, worldwide "standards". Indeed, very few people would be interested in using it. The community at large seems to be stuck with these gigantic software systems, and helpless against their complexity, their peculiarities, and their occasional unreliability. (略)

The largest chapter of the 1992 edition of this book dealt with the compiler translating Oberon programs into code for the NS32032 processor. This processor is now neither available nor is its architecture recommendable. Instead of writing a new compiler for some other commercially available architecture, I decided to design my own in order to extend the desire for simplicity and regularity to the hardware. The ultimate benefit of this decision is not only that the software, but also the hardware of the Oberon System is described completely and rigorously. The hardware modules are decribed exclusively in the language Verilog. The decision for a new processor was expedited by the possibility to implement it, that is, to make it concrete and available. This is due to the advent of programmable gate arrays (FPGA), allowing to turn a design into a real, functioning processor on a single chip. As a result, the described system can be realized using a low-cost development board. This board, Xilinx Spartan-3 by Digilent, features a 1-MByte static memory, which easily accommodates the entire Oberon System, incuding its compiler. It is shown, together with a display, a keyboard and a mouse in the photo below. The board is visible in the lower, right corner. (略)

The Oberon language, defined in 1988, underwent a revision in 2007, mostly discarding features that were either duplications or not essential. Adaptation of the system's source code to the revised language was, besides the change of processor, the second important reason for numerous, local changes in this text. We summarize the various deletions of features:

  1. The data types LONGINT, SHORTINT, and LONGREAL have been discarded, and with them the concept of type inclusion.
  2. The LOOP and EXIT statements (repetitions with multiple exit points) have been discarded.
  3. The WITH statement (regional type guard) has been discarded.
  4. The RETURN statement has been discarded and is now syntactically merged with the ending of function procedure declarations.
  5. Objects declared in a procedure P are not accessible within a procedure Q that is itself local to P. That is, objects must be either strictly local or global in order to be accessible.
  6. Assignments to imported variables are not permitted (read-only export).
  7. Forward procedure declarations have been discarded.

以下略

えええ、何この変更(機能削除)は

■_

この二つの関係は一体… Why Hacker News should use a different Deterministic Algorithm, Not a Random One | Hacker News Why Reddit Should Use Randomized Algorithms : programming

■_

2013年12月02日

■_

がっちりかいました Early Software Reliability Prediction - A Fuzzy Logic Approach Learning Cython Programming | Packt Publishing Learning Gerrit Code Review | Packt Publishing Haskell Financial Data Modeling and Predictive Analytics | Packt Publishing - Linkis.com Instant Windows PowerShell [Instant] | Packt Publishing F# for C# Developers - O'Reilly Media

でも、まだ正式な発売がまだでクーポンの対象外だったのがこんなに… まあ対象になってても全部は買ってないでしょうけど Clojure Data Analysis Cookbook | Packt Publishing Clojure for Domain-specific Languages | Packt Publishing Python Data Visualization Cookbook | Packt Publishing Mastering Clojure Data Analysis | Packt Publishing Clojure High Performance Programming | Packt Publishing Book of F# | No Starch Press こいつは preoder での割引があったりする Use coupon code PREORDER to get 30% off!

■_

■_

気になる>New Edition 2013 Project Oberon (New Edition 2013) Project Oberon - The Design of an Operating System, a Compiler, and a Computer | Hacker News

2013年12月01日

■_

「棚卸し」の拡大解釈しての使用法が気になる今日この頃。

CVN-78
ちょっと前に気がついたんですが、この艦(級)からエレベーターの数が 4基から3基になってるんですよね(右舷側が一基減ってる) 米航空母艦「Gerald R. Ford」--写真で見る最新鋭艦が完成するまで - 18/18 - CNET Japan 米海軍の最新鋭航空母艦であるGerald R. Ford(CVN 78)は、3D製品モデルを使って建造されており、離発着できる航空機の数が25%多くなるよう設計されている。 少なくなると影響あるような気もするんですが使い方次第だったんですかね。 このエレベータの配置、 フォレスタル→キティホーク(→エンタープライズ→)→ニミッツ→ジェラルド・R・フォード と似たように見えて結構変わってきていてなかなかたのしい。 比較が分かりやすいのはこの辺かな? 空母の変遷

んで、CV-67 ジョン・F・ケネディ。こいつは他の米空母にはない特徴がありまして。 USS John F. Kennedy (CV-67) - Wikipedia, the free encyclopedia The island is somewhat different from that of the Kitty Hawk class, with angled funnels to direct smoke and gases away from the flight deck. Kennedy is also 17 feet (5.2 m) shorter than the Kitty Hawk class. ジョン・F・ケネディ (空母) - Wikipedia
ケネディの外見上の大きな特徴はアイランド(島型艦橋)と一体化した煙突にある。ケネディの前に建造されたキティホーク級3番艦アメリカでは、 飛行甲板への排煙の影響を避けるために、それ以前の艦と比べて煙突を小型化していたが、ケネディではさらに一歩進めて、旧日本海軍の飛鷹型と類似した傾斜煙突の形態を採っている。 ただし、ケネディの設計に当たって飛鷹型を参考にしたか否かは定かではない。 ケネディ以降、アメリカ海軍は通常動力型空母の建造を打ち切ったため、傾斜煙突を採用した空母はケネディが最初で最後となったが、後に建造された強襲揚陸艦マキン・アイランドで再び傾斜煙突が採用され、続くアメリカ級でも取り入れられる予定である。 どんな感じかは模型だけどこのページの写真が分かりやすいかと。 不識庵さんの作品集 米海軍航空母艦 CV-67 ジョン・F・ケネディ 実物の写真でも世界の艦船辺りで分かりやすいのがあったんだけどなあ。 それはまあおいといて、航空母艦の煙突(と艦橋)に関しては語り始めると結構面白い話があったり それなりにボリュームがあるんだけど面倒なので書かない (基本すぐに調べられることだし)。 大鳳 (空母) - Wikipedia

佐藤優の読書ノート---クリスティア・フリーランド著 『グローバル・スーパーリッチ――超格差の時代』ほか  | 佐藤優直伝「インテリジェンスの教室」 | 現代ビジネス [講談社] 佐藤優直伝「インテリジェンスの教室」価格:1,050円(税込)第2・第4水曜日配信+号外 ううむ1000円か。

pocket

■_ コンピューターって

続き。 この本、古い話の方が面白いですね。 最近の分はかなり駆け足で書いてたり知ってることが多いからというのもあるんでしょうけど。

で、90ページ辺り。 そもそも最初の発想は、 ある数のサインやコサインの計算の手順といった 共通の手順をテープやカードの束にパンチしておき、 そういう事前に作った手順を持ってきて、 それらをつなぎあわせる専用コードでそれらを組み立てたり構築したりする。 というものだった。 そういう手順をテープリールに保存できれば、 プログラマーはそれらを必要なときに呼び出すコマンドの束を書くだけですむ。 そういうコマンドは、 細かいマシン内部の話をいちいち気にしない、シンプルなコードで書ける。 この発想はグレース・マレー・ホッパー率いるUNIVACチームが最初だった。 ホッパーは第二次世界大戦中、ハーバード大でハワード・エイケンと共同研究をしていた。 この発想にもっと一般性を持たせたのはJ・H・ラニングとN・ザーラーの二人だろう。 二人は1950年代初頭のMITで、SAGE防空システムの先駆でもある空軍出資の ワールウィンドで作業しているときにこれを思いついた。 このシステムは、UNIVACのコンパイラとはちがい、 現代のコンパイラとほぼ同じように機能した。 ユーザーが打ち込んだコマンドが入力となり、 そうしたコマンドを実行して、 データの保存場所の記憶や反復繰り返しの処理などの雑用もやってくれるような、 できたての新しい機械コードが出力されるのだ。 ラニングとザーラーの「代数システム」はそのようなコンパイラの第一歩だった。 ワールウィンドはユーザーがなじみのある代数形式でタイプしたコマンドを受け取って、 実行可能な機械コードに変換した。

カタカナ書きでラニングやらザーラーやらワールウィンドと書かれても分からなかったので調べた。 丸きり知らない人(ともの)ではなかった。

Whirlwind - Wikipedia Whirlwind I - Wikipedia, the free encyclopedia Chapter 6 The Whirlwind I computer Laning and Zierler system - Wikipedia, the free encyclopedia

Laning and Zierler system - Wikipedia, the free encyclopedia

Jump to: navigation, search

The Laning and Zierler system (sometimes called "George" by its users) was one of the first operating
algebraic compilers, that is, a system capable of accepting mathematical formulae in algebraic notation and
producing equivalent machine code (the term compiler had not yet been invented and the system was referred to as
"an interpretive program"). It was implemented in 1954 for the MIT WHIRLWIND by J. Halcombe Laning and
Neal Zierler. It is preceded by the UNIVAC A-2, IBM Speedcoding and a number of systems that were proposed but
never implemented.

Zierler さんのはなかったけど Laningさんはウィキペに載ってた。 J. Halcombe Laning - Wikipedia, the free encyclopedia

J. Halcombe Laning - Wikipedia, the free encyclopedia

Dr. J. Halcombe "Hal" Laning, Jr. (born February 14, 1920 in Kansas City, 
Missouri,[1] died May 29, 2012) was a Massachusetts Institute of Technology computer 
pioneer who in 1952 invented an algebraic compiler called George (also known as the 
Laning and Zierler system after the authors of the published paper) that ran on the 
MIT Whirlwind, the first real-time computer.[2] Laning designed George to be an easier 
to use alternative to assembly language for entering mathematical equations into a 
computer. The concepts he introduced with George were later incorporated into 
FORTRAN.[3] He later became a key contributor to the 1960s race to the moon, with 
pioneering work on space-based guidance systems for the Apollo moon missions. From 
1955 to 1980, he was deputy associate director of the MIT Instrumentation Laboratory.

In 1956 he published the book Random Processes in Automatic Control (McGraw-Hill 
Series on Control System Engineering), with Richard Battin as a coauthor.

In collaboration with Phil Hankins and Charlie Werner of MIT, he initiated work on MAC 
(MIT Algebraic Compiler), an algebraic programming language for the IBM 650, which was 
completed by early spring of 1958.[4]

He later worked in the MIT Draper Lab, with Richard H. Battin, to develop a scheme for 
doing onboard navigation on the Apollo program's command/service module guidance 
system. He designed the Executive and Waitlist operating system for the LGC (Lunar 
Module Guidance Computer) in the mid 1960s; he made it up from whole cloth with no 
examples to guide him, and the design is still valid today. The allocation of 
functions among a sensible number of asynchronous processes, under control of a rate 
and priority-driven preemptive executive, still represents the state of the art in 
real-time GN&C computers for spacecraft. His design saved the Apollo 11 landing 
mission when the rendezvous radar interface program began using more register core 
sets and "Vector Accumulator" areas than were physically available in memory, 
causing the infamous 1201 and 1202 errors. Had it not been for Laning's design the 
landing would have been aborted for lack of a stable guidance computer.[5]

Laning received his PhD from MIT in 1947 with a dissertation titled "Mathematical 
Theory of Lubrication-Type Flow".[6] His undergraduate degree in Chemical 
Engineering (1940) was also from MIT.[7]

He was elected to the National Academy of Engineering in 1983 for his work in 
aerospace engineering, particularly his "unique pioneering achievements in 
missile guidance and computer science -- the Q-guidance system for Thor and Polaris 
[missiles] and George".[8] He was also an honorary member of the American 
Mathematical Society.[9]

Laning features prominently in the third episode of the Science Channel's documentary 
miniseries titled Moon Machines which aired in June 2008.

そういやあ和書でコンラート・ツーゼを取りあげてるのってそんなにない?

■_

A glimpse of undefined behavior in C : programming A glimpse of undefined behavior in C | Hacker News A glimpse of undefined behavior in C | Christopher Cole

やべ。何か書こうにも時間切れw

■_ 敷居

データ・サイエンスのプログラミング言語はRからPythonに置き換わる | ReadWrite Japan いやまあ「誤用」云々は今回はどうでも良くてですね

データ・サイエンスのプログラミング言語はRからPythonに置き換わる | ReadWrite Japan

Pythonはデーター・サイエンスの敷居を下げてくれる

一方のPythonはとっつきやすい。既に幅広い層の開発者達があらゆるアプリケーションでPythonを使用している。
Rはほぼデータ分析にしか使われていないが、Pythonにはウェブサイトのスクリプティングなどをはじめとして様々な
アプリケーションでの使い方があるのだ。

原文でなんて書いてあるところなんだろうと(先に元記事読んでたはずなのに…) Python Displacing R As The Programming Language For Data Science – ReadWrite

Python Displacing R As The Programming Language For Data Science – ReadWrite

Python: Lowering The Bar For Data Science

Python, however, is much more approachable. For one thing, all sorts of developers are familiar with Python
and use it for a wide array of applications. Unlike R, which is pretty much only used for data analysis, a
developer could experience Python when first scripting her website or any number of other applications.

rise the bar で難しくする方の用例はあったんですが こっちはあまりメジャーでない言い方? それとも探し方が悪かったか。 一つ面白かったのが、 ふつーは「バーの高さを上げる」と難しくなるけど リンボーダンスだと逆だよねとか書いてたblog。

■_ i に時間を

特に意味はない。

プログラミング雑談スレ+++
40 デフォルトの名無しさん [sage] 2013/11/25(月) 16:50:30.05 ID: Be:
    最初にforループのカウンタをiにしたのって誰なの? 

41 デフォルトの名無しさん [] 2013/11/25(月) 16:53:19.24 ID: Be:
    数学者 

45 デフォルトの名無しさん [] 2013/11/25(月) 18:57:43.14 ID: Be:
    >>40
    不治痛の人じゃないかと言われてるね。 

46 デフォルトの名無しさん [sage] 2013/11/25(月) 19:42:55.55 ID: Be:
    FORTRANの初期の実装で、I、J、Kが整数固定だったからじゃないの? 

47 デフォルトの名無しさん [sage] 2013/11/25(月) 19:53:21.48 ID: Be:
    >>46
    その由来はsum for a to b by iつう数学表記
    因みにfor文の由来もこれ 

48 デフォルトの名無しさん [sage] 2013/11/25(月) 20:47:05.15 ID: Be:
    >>46
    確かに2重forループだと、二個目のカウンタはjだからそれっぽい 

49 デフォルトの名無しさん [sage] 2013/11/25(月) 21:00:58.05 ID: Be:
    I,J,K,L,M,Nで始まる変数は整数
    キッシュイーターはこんな事も知らないのか 

50 デフォルトの名無しさん [sage] 2013/11/25(月) 21:01:26.26 ID: Be:
    >>48
    四元数が発見される前から、
    ijklって添字は多次元複素数の添字で使われとったで 

51 デフォルトの名無しさん [sage] 2013/11/25(月) 21:02:28.84 ID: Be:
    >>49
    その由来は数学だろ 

52 デフォルトの名無しさん [sage] 2013/11/25(月) 21:07:13.16 ID: Be:
    まぁ数学界だとiは虚数(電気界だとjが虚数)だからな 

53 デフォルトの名無しさん [sage] 2013/11/25(月) 21:23:56.73 ID: Be:
    iとjは似すぎ
    iの次はkとかnとかの方がいい 

54 デフォルトの名無しさん [sage] 2013/11/25(月) 21:25:17.79 ID: Be:
    iの次はii使います 

55 デフォルトの名無しさん [sage] 2013/11/25(月) 21:30:27.53 ID: Be:
    indexならiでいいだろうけど
    最近はループで添え字いらなくなったからあんまり使わなくなった 

■_


一つ前へ 2013年11月(下旬)
一つ後へ 2013年12月(中旬)

ホームへ


リンクはご自由にどうぞ

メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp